[silva.core.editor][Sylvain Viollon] Add experimental configurat...
[email protected] Mon, 04 Nov 2013 14:53:11 +0100
| Newsgroups | gmane.comp.web.zope.silva.cvs |
|---|---|
| Message-ID | <[email protected]> |
author: Sylvain Viollon
date: Mon Nov 04 14:53:07 2013 +0100
revision: 272:086e222d905d in silva.core.editor
branch:
details: https://hg.infrae.com/silva.core.editor?cmd=changeset;node=086e222d905d
modified: src/silva/core/editor/service.py
added:
removed:
log: Add experimental configuration in SMI.
diffstat:
src/silva/core/editor/service.py | 344 +++++++++++++++++++++++++-------------
1 files changed, 226 insertions(+), 118 deletions(-)
diffs (392 lines):
diff -r 290e9735b310 -r 086e222d905d src/silva/core/editor/service.py
--- a/src/silva/core/editor/service.py Tue Oct 22 11:21:20 2013 +0200
+++ b/src/silva/core/editor/service.py Mon Nov 04 14:53:07 2013 +0100
@@ -23,9 +23,11 @@
from zExceptions import Redirect
from infrae import rest
+from silva.ui import menu
from silva.core import conf as silvaconf
from silva.core.interfaces import ISilvaObject
from silva.core.services.base import SilvaService, ZMIObject
+from silva.core.interfaces import ISilvaConfigurableService
from silva.core.views.interfaces import IVirtualSite
from silva.translations import translate as _
from zeam.form import silva as silvaforms
@@ -140,7 +142,7 @@
class CKEditorService(Folder, SilvaService):
"""Configure the editor service.
"""
- grok.implements(ICKEditorService)
+ grok.implements(ICKEditorService, ISilvaConfigurableService)
grok.name('service_ckeditor')
meta_type = 'Silva CKEditor Service'
silvaconf.icon('service.png')
@@ -233,113 +235,11 @@
InitializeClass(CKEditorService)
[email protected](IContextSourceBinder)
-def configurations_source(context):
- configurations = list(context.available_configurations())
- configurations.sort(key=operator.itemgetter(0))
- return SimpleVocabulary([
- SimpleTerm(value=name, token=name, title=info[0])
- for name, info in configurations])
-
-
-class ICKEditorConfigurations(Interface):
- config = schema.Choice(title=u'Configuration',
- source=configurations_source,
- required=True)
-
-
-class CKEditorServiceConfigurationManager(silvaforms.ZMIComposedForm):
- grok.context(ICKEditorService)
- grok.name('manage_settings')
-
- label = _(u"Manage CKEditor configurations")
- description = _(u"You can from here modify the WYSIYG editor settings.")
-
-
-class CKEditorServiceAddConfiguration(silvaforms.ZMISubForm):
- grok.context(ICKEditorService)
- grok.view(CKEditorServiceConfigurationManager)
- grok.order(20)
-
- label = _(u"Add a configuration")
- description = _(u"Add a specific editor configuration "
- u"for a content type in Silva.")
- ignoreContent = False
- fields = silvaforms.Fields(ICKEditorConfigurations)
-
- def available(self):
- return bool(self.fields['config'].getChoices(self))
-
- @silvaforms.action(title=_(u'Add'))
- def add(self):
- data, errors = self.extractData()
- if errors:
- self.status = _(u'There were errors')
- return silvaforms.FAILURE
-
- name = data['config']
- factory = self.context.manage_addProduct['silva.core.editor']
- factory.manage_addCKEditorConfiguration(name)
- return silvaforms.SUCCESS
-
-
-class EditConfigurationAction(silvaforms.Action):
- title = _(u'Edit')
- description = _(u'edit the selected configuration')
-
- def __call__(self, form, config, line):
- raise Redirect(
- absoluteURL(config, form.request) + '/manage_configuration')
-
-
-class RemoveConfigurationAction(silvaforms.Action):
- title = _(u'Remove')
- description = _(u'remove the selected configuration')
-
- def __call__(self, form, config, line):
- identifier = config.getId()
- if identifier == 'default':
- raise silvaforms.ActionError(
- _('You cannot remove the default configuration'))
- form.context.manage_delObjects([identifier])
- return silvaforms.SUCCESS
-
-
-class IConfigurationListItemFields(Interface):
- id = schema.TextLine(title=u'Name')
-
-
-class CKEditorServiceEditConfigurations(silvaforms.ZMISubTableForm):
- grok.context(ICKEditorService)
- grok.view(CKEditorServiceConfigurationManager)
- grok.order(10)
-
- ignoreContent = False
- label = _(u"Manage existing configurations")
- description = _(u"Edit or remove editor configuration for the given Silva "
- u"content types.")
- mode = silvaforms.DISPLAY
- tableFields = silvaforms.Fields(IConfigurationListItemFields)
- tableActions = silvaforms.TableActions(
- EditConfigurationAction(),
- RemoveConfigurationAction())
-
- def getItems(self):
- return list(self.context.objectValues(
- spec=CKEditorConfiguration.meta_type))
-
-
-class CKEditorEditConfiguration(silvaforms.ZMIForm):
- """Update the settings.
- """
- grok.name('manage_configuration')
- grok.context(CKEditorConfiguration)
-
- label = _(u"CKEditor settings")
- description = _(u"You can from here modify the WYSIYG editor settings.")
- ignoreContent = False
- fields = silvaforms.Fields(ICKEditorSettings)
- actions = silvaforms.Actions(silvaforms.EditAction())
[email protected](ICKEditorService, IObjectAddedEvent)
+def add_default_configuration(service, event):
+ if service._getOb('default', None) is None:
+ factory = service.manage_addProduct['silva.core.editor']
+ factory.manage_addCKEditorConfiguration('default')
class CKEditorRESTConfiguration(rest.REST):
@@ -374,15 +274,28 @@
'editor_body_class': configuration.editor_body_class,
'skin': skin})
+# Configuration form for ZMI
[email protected](ICKEditorService, IObjectAddedEvent)
-def add_default_configuration(service, event):
- if service._getOb('default', None) is None:
- factory = service.manage_addProduct['silva.core.editor']
- factory.manage_addCKEditorConfiguration('default')
[email protected](IContextSourceBinder)
+def configurations_source(context):
+ configurations = list(context.available_configurations())
+ configurations.sort(key=operator.itemgetter(0))
+ return SimpleVocabulary([
+ SimpleTerm(value=name, token=name, title=info[0])
+ for name, info in configurations])
-class ISanitizerConfiguration(Interface):
+class ICKEditorConfiguration(Interface):
+ config = schema.Choice(title=u'Configuration',
+ source=configurations_source,
+ required=True)
+
+
+class IConfigurationListItemFields(Interface):
+ id = schema.TextLine(title=u'Name')
+
+
+class ISanitizerSettings(Interface):
_per_tag_allowed_attr = schema.Set(
title=(u"Allowed HTML tags and \
PER TAG allowed HTML attributes and CSS properties"),
@@ -395,14 +308,209 @@
value_type=schema.TextLine())
-class CKEditorServiceHTMLSanitizerConfiguration(silvaforms.ZMIForm):
+class EditConfigurationAction(silvaforms.Action):
+ title = _(u'Edit')
+ description = _(u'edit the selected configuration')
+
+ def __call__(self, form, config, line):
+ raise Redirect(
+ absoluteURL(config, form.request) + '/manage_configuration')
+
+
+class RemoveConfigurationAction(silvaforms.Action):
+ title = _(u'Remove')
+ description = _(u'remove the selected configuration')
+
+ def __call__(self, form, config, line):
+ identifier = config.getId()
+ if identifier == 'default':
+ raise silvaforms.ActionError(
+ _('You cannot remove the default configuration'))
+ form.context.manage_delObjects([identifier])
+ return silvaforms.SUCCESS
+
+
+class CKEditorServiceForm(silvaforms.ZMIComposedForm):
+ grok.context(ICKEditorService)
+ grok.name('manage_settings')
+
+ label = _(u"Manage CKEditor configurations")
+ description = _(u"You can from here modify the WYSIYG editor settings.")
+
+
+class CKEditorServiceAddConfigurationForm(silvaforms.ZMISubForm):
+ grok.context(ICKEditorService)
+ grok.view(CKEditorServiceForm)
+ grok.order(20)
+
+ label = _(u"Add a configuration")
+ description = _(u"Add a specific editor configuration "
+ u"for a content type in Silva.")
+ ignoreContent = False
+ fields = silvaforms.Fields(ICKEditorConfiguration)
+
+ def available(self):
+ return bool(self.fields['config'].getChoices(self))
+
+ @silvaforms.action(title=_(u'Add'))
+ def add(self):
+ data, errors = self.extractData()
+ if errors:
+ self.status = _(u'There were errors')
+ return silvaforms.FAILURE
+
+ name = data['config']
+ factory = self.context.manage_addProduct['silva.core.editor']
+ factory.manage_addCKEditorConfiguration(name)
+ return silvaforms.SUCCESS
+
+
+class CKEditorServiceEditConfigurationForm(silvaforms.ZMISubTableForm):
+ grok.context(ICKEditorService)
+ grok.view(CKEditorServiceForm)
+ grok.order(10)
+
+ ignoreContent = False
+ label = _(u"Manage existing configurations")
+ description = _(u"Edit or remove editor configuration for the given Silva "
+ u"content types.")
+ mode = silvaforms.DISPLAY
+ tableFields = silvaforms.Fields(IConfigurationListItemFields)
+ tableActions = silvaforms.TableActions(
+ EditConfigurationAction(),
+ RemoveConfigurationAction())
+
+ def getItems(self):
+ return list(self.context.objectValues(
+ spec=CKEditorConfiguration.meta_type))
+
+
+class CKEditorConfigurationEditForm(silvaforms.ZMIForm):
+ """Update the settings.
+ """
+ grok.name('manage_configuration')
+ grok.context(CKEditorConfiguration)
+
+ label = _(u"CKEditor settings")
+ description = _(u"You can from here modify the WYSIYG editor settings.")
+ ignoreContent = False
+ fields = silvaforms.Fields(ICKEditorSettings)
+ actions = silvaforms.Actions(silvaforms.EditAction())
+
+
+
+class CKEditorServiceHTMLSanitizerForm(silvaforms.ZMIForm):
grok.context(ICKEditorService)
grok.name('manage_html_sanitizer')
ignoreContent = False
label = _(u"Manage HTML Sanitizer")
- description = _(u"""Manager allowed HTML tags
- and attributes allowed in editor.""")
+ description = _(u"""Configure allowed HTML tags
+ and attributes in the editor.""")
- fields = silvaforms.Fields(ISanitizerConfiguration)
+ fields = silvaforms.Fields(ISanitizerSettings)
actions = silvaforms.Actions(EditAction(title=_(u"Save changes")))
+
+
+# Configuration form for the service in SMI
+
+
+class CKEditorServiceConfiguration(silvaforms.ComposedConfigurationForm):
+ grok.context(ICKEditorService)
+ grok.name('admin')
+
+ label = _(u"CKEditor configurations")
+ description = _(u"You can from here modify the WYSIYG editor settings.")
+
+
+class CKEditorServiceConfigurationMenu(menu.MenuItem):
+ grok.adapts(menu.ContentMenu, ICKEditorService)
+ grok.order(10)
+ name = _('CKEditor settings')
+ screen = CKEditorServiceConfiguration
+
+
+class CKEditorServiceAddConfigurationForm(silvaforms.SMISubForm):
+ grok.context(ICKEditorService)
+ grok.view(CKEditorServiceConfiguration)
+ grok.order(20)
+
+ label = _(u"Add a configuration")
+ description = _(u"Add a specific editor configuration "
+ u"for a content type in Silva.")
+ ignoreContent = False
+ fields = silvaforms.Fields(ICKEditorConfiguration)
+ actions = silvaforms.Actions(silvaforms.CancelConfigurationAction())
+
+ def available(self):
+ return bool(self.fields['config'].getChoices(self))
+
+ @silvaforms.action(title=_(u'Add'))
+ def add(self):
+ data, errors = self.extractData()
+ if errors:
+ self.status = _(u'There were errors')
+ return silvaforms.FAILURE
+
+ name = data['config']
+ factory = self.context.manage_addProduct['silva.core.editor']
+ factory.manage_addCKEditorConfiguration(name)
+ return silvaforms.SUCCESS
+
+
+class CKEditorServiceEditConfiguration(silvaforms.ZMISubTableForm):
+ grok.context(ICKEditorService)
+ grok.view(CKEditorServiceConfiguration)
+ grok.order(10)
+
+ ignoreContent = False
+ label = _(u"Manage existing configurations")
+ description = _(u"Edit or remove editor configuration for the given Silva "
+ u"content types.")
+ mode = silvaforms.DISPLAY
+ actions = silvaforms.Actions(silvaforms.CancelAction())
+ tableFields = silvaforms.Fields(IConfigurationListItemFields)
+ tableFields['id'].mode = 'silva.icon.edit'
+ tableActions = silvaforms.TableActions(RemoveConfigurationAction())
+
+ def updateWidgets(self):
+ super(CKEditorServiceEditConfiguration, self).updateWidgets()
+ for widgets in self.lineWidgets:
+ list(widgets)[1].screen = 'admin'
+
+ def getItems(self):
+ return list(self.context.objectValues(
+ spec=CKEditorConfiguration.meta_type))
+
+
+
+class CKEditorConfigurationEditConfiguration(silvaforms.ConfigurationForm):
+ grok.context(CKEditorConfiguration)
+
+ label = _(u"CKEditor settings")
+ description = _(u"You can from here modify the WYSIYG editor settings.")
+ fields = silvaforms.Fields(ICKEditorSettings)
+ actions = silvaforms.Actions(
+ silvaforms.CancelConfigurationAction(),
+ silvaforms.EditAction())
+
+
+class CKEditorServiceHTMLSanitizerConfiguration(silvaforms.ConfigurationForm):
+ grok.context(ICKEditorService)
+ grok.name('admin-sanitizer')
+
+ label = _(u"HTML sanitizer")
+ description = _(u"""Configure allowed HTML tags
+ and attributes in the editor.""")
+
+ fields = silvaforms.Fields(ISanitizerSettings)
+ actions = silvaforms.Actions(
+ silvaforms.CancelConfigurationAction(),
+ silvaforms.EditAction())
+
+
+class CKEditorServiceHTMLSanitizerMenu(menu.MenuItem):
+ grok.adapts(menu.ContentMenu, ICKEditorService)
+ grok.order(20)
+ name = _('HTML sanitizer')
+ screen = CKEditorServiceHTMLSanitizerConfiguration