Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def WysiwygDecorator(*args, **kwargs):
- """
- Decorator for form classes which is using CKEditor
- Cleans all wysiwyg junk, and validates characters number
- Configuration through kwargs, eg. fieldname={'chars':300}
- You can ommit all or one configuration constraint
- """
- cleaner = Cleaner(page_structure=False, add_nofollow=True, allow_tags=['p', 'b', 'u', 'i', 'br', 'a'],
- remove_unknown_tags=False)
- def decorator(form):
- for field, constraints in kwargs.iteritems():
- name = 'clean_%s' % field
- def clean(self):
- name = _whoami()
- oldfuncname = '%sold' % name
- if hasattr(self, oldfuncname):
- data = getattr(self, oldfuncname)()
- else:
- data = self.cleaned_data[field]
- data = json.loads(data)
- for k,v in data.iteritems():
- if not v:
- data[k] = ''
- continue
- if 'chars' in constraints.keys():
- if len(lxml.html.fromstring(v).text_content()) > constraints['chars']:
- raise ValidationError(__(u'Wprowadzona treść jest za długa, '
- u'maksymalnie może mieć %s znaków') % constraints['chars'])
- cln = lambda x: cleaner.clean_html(v).strip()[5:-6] if '<div>' in v else cleaner.clean_html(v).strip()
- data[k] = cln(v)#slicing to remove <div></div> No fucking idea why its added
- return json.dumps(data)
- if hasattr(form, name):
- setattr(form, '%sold'%(name,), getattr(form, name))
- clean.__name__ = name
- setattr(form, name, clean)
- return form
- return decorator
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement