X-Git-Url: https://scm.cri.minesparis.psl.eu/git/Epoz.git/blobdiff_plain/e12f4a95372036c721467827829f60a68ef92048..36a8f50734b56b213436c3f09afc80509c20cc16:/__init__.py diff --git a/__init__.py b/__init__.py deleted file mode 100755 index dcb18dd..0000000 --- a/__init__.py +++ /dev/null @@ -1,347 +0,0 @@ -##### -### Epoz - a cross-browser-wysiwyg-editor for Zope -## Copyright (C) 2005 Maik Jablonski (maik.jablonski@uni-bielefeld.de) -# -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -## WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -### FOR A PARTICULAR PURPOSE. -#### - -import re -import urlparse -import cgi - -# try to import mxTidy as default -try: - from mx import Tidy - mxTidyIsAvailable = 1 -except: - mxTidyIsAvailable = 0 - -# try to import uTidylib as fallback -try: - import tidy - uTidyIsAvailable = 1 -except ImportError: - uTidyIsAvailable = 0 - -import Globals -from Products.PageTemplates.PageTemplateFile import PageTemplateFile -from App.ImageFile import ImageFile - -# Regexp for snipping the body of a document -HTML_BODY = re.compile(']*?>(.*)]*?>', re.DOTALL|re.IGNORECASE) -MSO_CLASS = re.compile(r'<(\w+)\W+(class="Mso.*?")>', re.IGNORECASE) -EPOZ_SCRIPT = re.compile(r'', '') - - # Quote newlines and single quotes, so the Epoz-JavaScript won't break. - # Needs to be a list and no dictionary, cause we need order!!! - - quotes = (("\\","\\\\"), ("\n","\\n"), ("\r","\\r"), ("'","\\'")) - - for item in quotes: - js_data = js_data.replace(item[0], item[1]) - - # Determine the correct path for VirtualHostMonsters & PCGI & etc.pp. - if not path: - path = "%s/misc_/Epoz/" % (self.REQUEST.get('BASEPATH1',''),) - - if not pageurl: - pageurl = self.REQUEST.get('URL1','') - - if lang == 'auto' : - i18n='' % {'path' : path, 'charset' : charset} - else : - i18n='' % (path,) - if lang<>'en': - i18n += '' % (path, lang) - - if not widget: - widget = "%sepoz_script_widget.js" % path - - # This is just a dummy page for test-iframe - # to prevent IE complaining when using Epoz via https - iframesrc = pageurl+'/epoz_blank_iframe.html' - - # Return the HTML-Code for the Epoz-Rich-Text-Editor - return """ -%(i18n)s - - - - - - - -""" % { - 'i18n': i18n, - 'widget': widget, - 'path': path, - 'name': name, - 'js_data': js_data, - 'toolbox': toolbox, - 'style': style, - 'button': button, - 'css': css, - 'customcss': customcss, - 'charset': charset, - 'data': data, - 'pageurl': pageurl, - 'iframesrc': iframesrc - } - - - -def EpozTidy(self, html, pageurl): - """ Take html and deliver xhtml if mxTidy is installed; - call EpozPostTidy for html-postprocessings before returning the result - """ - - errors = 0 - output = html - errordata = "" - - input = html.encode("utf-8") - input = EPOZ_SCRIPT.sub('') - - if mxTidyIsAvailable: - (errors, warnings, output, errordata) = Tidy.tidy( - input, drop_empty_paras=1, indent_spaces=1, indent="auto", - output_xhtml=1, word_2000=1, wrap=79, char_encoding="utf8") - if errors: - output = html - elif uTidyIsAvailable: - parsed = tidy.parseString( - input, drop_empty_paras=1, indent_spaces=1, indent="auto", - output_xhtml=1, word_2000=1, wrap=79, char_encoding="utf8", - add_xml_decl=0, doctype="omit", indent_attributes=1, - drop_proprietary_attributes=1, bare=1, clean=1, - enclose_text=1, tidy_mark=0) - reports = parsed.get_errors() - all_errors = [str(x) for x in reports if x.severity != 'W'] - errors = len(all_errors) - errordata = '\n'.join(all_errors) - if errors: - output = html - else: - output = str(parsed) - - output = MSO_CLASS.sub(r"<\1>", output) - result = HTML_BODY.search(output) - if result: - output = result.group(1) - - # Call External Method / PythonScript for postprocessing - # The script should expect two parameters: - # self = called context (=server) - # html = the htmlbody to postprocess - # pathname = path of edited object (maybe with template!) - # The script should return the new htmlbody - - EpozPostTidy = getattr(self, 'EpozPostTidy', None) - if EpozPostTidy is not None: - output = EpozPostTidy(self, output, pageurl) - - return (errors, output, errordata) - - -def EpozGetRelativeUrl(self, pageUrl, targetUrl): - """ Returns relative path from targetUrl to pageUrl. """ - - # Just some shortcuts... - SCHEME, HOSTNAME, PATH, PARAMS, QUERY, FRAGMENT = range(6) - - pageUnits = urlparse.urlparse(pageUrl) - targetUnits = urlparse.urlparse(targetUrl) - - if pageUnits[:PATH] != targetUnits[:PATH]: - # Scheme (http) or host:port (www.comain.com) are different - # -> no possible relative URL - return targetUrl - - afterPath = targetUnits[PARAMS:] - - pagePath = pageUnits[PATH].split('/') - pagePath.reverse() - - targetPath = targetUnits[PATH].split('/') - targetPath.reverse() - - # Remove parts which are equal (['a', 'b'] ['a', 'c'] --> ['c']) - while (len(pagePath) > 0 - and len(targetPath) > 0 - and pagePath[-1] == targetPath[-1]): - pagePath.pop() - last_pop = targetPath.pop() - if len(pagePath) == 0 and len(targetPath) == 0: - # Special case: link to itself (http://foo/a http://foo/a -> a) - targetPath.append(last_pop) - if len(pagePath) == 1 and pagePath[0] == "" and len(targetPath) == 0: - # Special case: (http://foo/a/ http://foo/a -> ../a) - pagePath.append(last_pop) - targetPath.append(last_pop) - - targetPath.reverse() - - relativeUrl = ['..'] * (len(pagePath) -1) - relativeUrl = ('', '', '/'.join(relativeUrl + targetPath)) + tuple(afterPath) - - return urlparse.urlunparse(relativeUrl) - - -# Make sure the Epoz method is replaceable in the Products folder -Epoz.__replaceable__ = Globals.REPLACEABLE - -# Register Epoz as global method -# Register EpozTidy as global method for XMLRPC -# Register EpozGetRelativeUrl as global method -# Register epoz_blank_iframe.html as global PageTemplate - -methods = { -'Epoz': Epoz, -'Epoz__roles__': None, - -'EpozTidy': EpozTidy, -'EpozTidy__roles__': None, - -'EpozGetRelativeUrl': EpozGetRelativeUrl, -'EpozGetRelativeUrl__roles__': None, - -'epoz_blank_iframe.html': PageTemplateFile('epoz/epoz_core/epoz_blank_iframe.html.pt', globals()), -'epoz_blank_iframe.html__roles__': None, -} - - -# And now try to register Epoz for CMF/Plone - -try: - from Products.CMFCore.DirectoryView import registerDirectory - - global cmfepoz_globals - cmfepoz_globals=globals() - - def initialize(context): - registerDirectory('epoz', cmfepoz_globals) -except: - pass - \ No newline at end of file