def force_link_target(self, doc, target): for el in _find_external_links(doc): if target is None: if 'target' in el.attrib: del el.attrib['target'] else: el.set('target', target)
def force_link_target(self, doc, target): for el in _find_external_links(doc): if target is None: if 'target' in el.attrib: del el.attrib['target'] else: el.set('target', target)
def _handle_save(self, redirect_to, target=None, fields=None): self.create_attachment() self.errors = {} self.context.validate(REQUEST=self.request, errors=self.errors, data=1, metadata=0) if self.errors: for msg in self.errors.values(): self.addPortalStatusMessage(msg) return self.errors allowed_params = set(['comment', 'oc-target', 'text_file', 'title', 'text', 'attachmentFile', 'submitted', 'text_text_format', 'attachmentTitle', 'task|save']) new_form = {} for k in self.request.form: if k in allowed_params: new_form[k] = self.request.form[k] # don't call process form, because we do our own cleaning of html # self.context.processForm(values=self.request) page_title = new_form['title'] page_text = new_form['text'] # XXX check description on news page description = new_form.get('description', None) # Between zope and various weird web browsers, the text could/will # be a str encoded in utf-8. Let's make sure it's Python # unicode before we pass it to lxml. if isinstance(page_text, str): try: page_text = page_text.decode('utf-8') except UnicodeDecodeError: # XXX should we pass here? if so, please replace this comment with why # maybe the error handling on xinha_to_wicked should go here pass clean_text = self._clean_html(page_text) #XXX here we clean the isempty attributes that xinha puts on external links #this can interfere with creating wicked links doc = fromstring(clean_text) for el in _find_external_links(doc): if el.get('isempty', u''): del el.attrib['isempty'] if isinstance(clean_text, unicode): clean_text = tostring(doc, encoding=unicode) else: clean_text = tostring(doc, encoding='utf-8') #XXX will for sure remove this when xinha is upgraded try: text = xinha_to_wicked(clean_text) except UnicodeDecodeError, e: self._bad_text = clean_text error_string = e.object[e.start:e.end+1] self.addPortalStatusMessage(u'The following text contains unsupported characters between characters %s and %s: "%s" (%s)\nPlease change this text before saving.' % ( e.start, e.end+1, error_string.decode('utf-8', 'replace'), repr(error_string))) return