def getCK_plone_config(self): """ return config for ckeditor as javascript file """ request = self.request response = request.RESPONSE params_js_string = """CKEDITOR.editorConfig = function( config ) {""" params = self.cke_params for k, v in params.items(): params_js_string += """ config.%s = %s; """ % (k, v) ids = [] for line in self.cke_properties.getProperty('plugins', []): # ignore the rest so we get no error if len(line.split(';')) == 2: id, url = line.split(';') abs_url = self.portal_url + url base_url, plugin = abs_url.rsplit('/', 1) ids.append(id) params_js_string += ( """CKEDITOR.plugins.addExternal('%s', '%s/', '%s');""" % (id, base_url.rstrip('/'), plugin)) params_js_string += '''config.extraPlugins = "%s";''' % ','.join(ids) params_js_string += """ config.filebrowserWindowWidth = parseInt(jQuery(window).width()*70/100); config.filebrowserWindowHeight = parseInt(jQuery(window).height()-20); config.toolbar_Plone = %s; config.stylesSet = 'plone:%s/ckeditor_plone_menu_styles.js'; """ % (CKEDITOR_PLONE_DEFAULT_TOOLBAR, self.portal_url) cke_properties = self.cke_properties templatesReplaceContent = cke_properties.getProperty( 'templatesReplaceContent') if templatesReplaceContent: params_js_string += """config.templates_replaceContent = true;""" else: params_js_string += """config.templates_replaceContent = false;""" customTemplates = cke_properties.getProperty('customTemplates') if customTemplates: params_js_string += self.getCustomTemplatesConfig(customTemplates) params_js_string += """ }; """ pstate = component.getMultiAdapter((self.context, self.request), name="plone_portal_state") language = pstate.language() params_js_string += "CKEDITOR.config.language = '%s';" % language cache_header = 'pre-check=0,post-check=0,must-revalidate,s-maxage=0,\ max-age=0,no-cache' response.setHeader('Cache-control', cache_header) response.setHeader('Content-Type', 'application/x-javascript') return JavascriptPacker('safe').pack(params_js_string)
def get_content(self, **kwargs): """ Get content """ output = [] for resource in self.resources: content = self.get_resource(resource) header = '\n/* - %s - */\n' % resource if not self.debug: content = JavascriptPacker('safe').pack(content) output.append(header + content) return '\n'.join(output)
def getCK_plone_menu_styles(self): """ return javascript for ckeditor plone menu styles """ request = self.request response = request.RESPONSE cke_properties = self.cke_properties styles = demjson.loads(cke_properties.getProperty('menuStyles', '[]')) for style in styles: if 'name' in style: style['name'] = self.context.translate(_(style['name'])) menu_styles_js_string = """ styles = jQuery.parseJSON('%s'); CKEDITOR.stylesSet.add('plone', styles);""" % demjson.dumps(styles) response.setHeader( 'Cache-control', 'pre-check=0,post-check=0,must-revalidate,' 's-maxage=0,max-age=0,no-cache') response.setHeader('Content-Type', 'application/x-javascript') return JavascriptPacker('safe').pack(menu_styles_js_string)
def __call__(self): """Parameters are parsed from url query as defined by tinymce""" plugins = self.request.get("plugins", "").split(',') languages = self.request.get("languages", "").split(',') themes = self.request.get("themes", "").split(',') suffix = self.request.get("suffix", "") == "_src" and "_src" or "" # set correct content type response = self.request.response response.setHeader('Content-type', 'application/javascript') # get base_url base_url = '/'.join([self.context.absolute_url(), self.__name__]) # fix for Plone <4.1 http://dev.plone.org/plone/changeset/48436 # only portal_factory part of condition! if not isContextUrl(base_url): portal_state = getMultiAdapter((self.context, self.request), name="plone_portal_state") base_url = '/'.join([portal_state.portal_url(), self.__name__]) # use traverse so developers can override tinymce through skins traverse = lambda name: str(self.context.restrictedTraverse(name, '')) # add core javascript file with configure ajax call content = [ traverse("tiny_mce%s.js" % suffix).replace( "tinymce._init();", "tinymce.baseURL='%s';tinymce._init();" % base_url) ] content.append(traverse('jquery.tinymce.js')) portal_tinymce = getToolByName(self.context, 'portal_tinymce') customplugins = {} for plugin in portal_tinymce.customplugins.splitlines(): if '|' in plugin: name, path = plugin.split('|', 1) customplugins[name] = path content.append( 'tinymce.PluginManager.load("%s", "%s/%s");' % (name, getToolByName(self.context, 'portal_url')(), path)) else: plugins.append(plugin) # Add plugins for plugin in set(plugins): if plugin in customplugins: script = customplugins[plugin] path, bn = customplugins[plugin].lstrip('/').split('/', 1) else: script = "plugins/%s/editor_plugin%s.js" % (plugin, suffix) path = 'plugins/%s' % plugin content.append(traverse(script)) for lang in languages: content.append(traverse("%s/langs/%s.js" % (path, lang))) # Add core languages for lang in languages: content.append(traverse("langs/%s.js" % lang)) # Add themes for theme in themes: content.append( traverse("themes/%s/editor_template%s.js" % (theme, suffix))) for lang in languages: content.append( traverse("themes/%s/langs/%s.js" % (theme, lang))) # TODO: add additional javascripts in plugins tiny_mce_gzip = self.tiny_mce_gzip() js_tool = getToolByName(aq_inner(self.context), 'portal_javascripts') if js_tool.getDebugMode(): content.append(tiny_mce_gzip) else: content.append(JavascriptPacker('safe').pack(tiny_mce_gzip)) return ''.join(content)
def getCK_plone_config(self): """ return config for ckeditor as javascript file """ request = self.request response = request.RESPONSE params_js_string = """CKEDITOR.editorConfig = function( config ) {""" params = self.cke_params for k, v in params.items(): params_js_string += """ config.%s = %s; """ % (k, v) ids = [] for line in self.cke_properties.getProperty('plugins', []): # ignore the rest so we get no error if len(line.split(';')) == 2: id, url = line.split(';') abs_url = self.portal_url + url base_url, plugin = abs_url.rsplit('/', 1) ids.append(id) params_js_string += ( """CKEDITOR.plugins.addExternal('%s', '%s/', '%s');""" % (id, base_url.rstrip('/'), plugin)) params_js_string += '''config.extraPlugins = "%s";''' % ','.join(ids) removePlugins = self.cke_properties.getProperty('removePlugins', []) if removePlugins: params_js_string += ( '''config.removePlugins = "%s";''' % ','.join(removePlugins) ) params_js_string += """ config.filebrowserWindowWidth = parseInt(jQuery(window).width()*70/100); config.filebrowserWindowHeight = parseInt(jQuery(window).height()-20); config.toolbar_Basic = %s; config.toolbar_Plone = %s; config.toolbar_Full = %s; config.stylesSet = 'plone:%s/ckeditor_plone_menu_styles.js'; """ % (CKEDITOR_BASIC_TOOLBAR, CKEDITOR_PLONE_DEFAULT_TOOLBAR, CKEDITOR_FULL_TOOLBAR, self.portal_url) cke_properties = self.cke_properties templatesReplaceContent = cke_properties.getProperty( 'templatesReplaceContent') if templatesReplaceContent: params_js_string += """config.templates_replaceContent = true;""" else: params_js_string += """config.templates_replaceContent = false;""" filtering = cke_properties.getProperty('filtering') if filtering == 'default': extraAllowedContent = cke_properties.getProperty( 'extraAllowedContent') params_js_string += "config.extraAllowedContent = {};".format( extraAllowedContent) elif filtering == 'disabled': params_js_string += """config.allowedContent = true;""" elif filtering == 'custom': customAllowedContent = cke_properties.getProperty( 'customAllowedContent') params_js_string += "config.allowedContent = {};".format( customAllowedContent) # enable SCAYT on startup if necessary enableScaytOnStartup = cke_properties.getProperty( 'enableScaytOnStartup') if enableScaytOnStartup: scayt_lang = self._getScaytLanguage() # if no relevant language could be found, do not activate SCAYT if scayt_lang: params_js_string += """config.scayt_autoStartup = true;""" params_js_string += """config.scayt_sLang = \ '%s';""" % scayt_lang else: params_js_string += """config.scayt_autoStartup = false;""" customTemplates = cke_properties.getProperty('customTemplates') if customTemplates: params_js_string += self.getCustomTemplatesConfig(customTemplates) params_js_string += """ }; """ pstate = component.getMultiAdapter((self.context, self.request), name="plone_portal_state") language = pstate.language() params_js_string += "CKEDITOR.config.language = '%s';" % language cache_header = 'pre-check=0,post-check=0,must-revalidate,s-maxage=0,\ max-age=0,no-cache' response.setHeader('Cache-control', cache_header) response.setHeader('Content-Type', 'application/x-javascript') return JavascriptPacker('safe').pack(params_js_string)