Ticket #9249 (closed PLIP: fixed)

Opened 7 years ago

Last modified 6 years ago

Add TinyMCE as the default visual editor

Reported by: limi Owned by: robgietema
Priority: minor Milestone: 4.0
Component: Visual Editor Version:
Keywords: accessibility Cc: robgietema, lucmult@…, plip-advisories@…, dukebody, grahamperrin@…, yurj

Description (last modified by limi) (diff)

For Plone 4, we propose adding TinyMCE as the default editor for Plone. The majority of this work is already done with the Products.TinyMCE add-on.

Main implementation issues to watch out for:

  • TinyMCE has to have feature parity with Kupu to make the transition as seamless as possible (e.g. definition lists are missing now, I think?)
  • Some filter settings are stored on the Kupu tool currently, shouldn't be
  • Same button layout as Kupu, except where it is clearly broken (example: the internal/external link buttons)
  • Buttons should be styled text where it makes sense, so they can be translated — examples: the [B] button is [F] in Norwegian MS Word, the link button should be the text "Link" rendered in blue with underline.
  • We change the behavior of the editor preference on users: blank value means "use the site default". A script to do this to all users in the site so people that upgrade to Plone 4 can switch to TinyMCE
  • Upgrading: current thought is that sites on existing 3.x instances should keep Kupu as their default, new instances get TinyMCE. This might change, depending on whether it's a pain to ship both TinyMCE and Kupu in Plone 4.

Hopefully, we can also get the Trusted role into Plone 4, so groups of people can be selectively opted out of the HTML filtering of embed/object/etc.

Change History

comment:1 Changed 7 years ago by limi

  • Owner changed from duncan to robgietema

comment:2 Changed 7 years ago by limi

  • Description modified (diff)

comment:3 Changed 7 years ago by lucmult

  • Cc lucmult@… added

comment:4 Changed 7 years ago by alecm

If we don't ship kupu and keep it installed for migrated 3.x sites, people using customized kupu functionality (fairly common, I think) will have their expectations broken. Are there reasons why shipping both for migration purposes would be painful? In any case, this change is likely to require major documentation updates, and the success of this effort may largely be determined by the extent to which the integration of the new editor is reflected in documentation.

comment:5 Changed 7 years ago by pupq

People don't like to have things disappear on them. Continuing to ship Kupu would seem critical to this being received warmly by some integrators.

It would definitely be important for us to have a high-level doc that helps people understand *why* we've chosen TinyMCE, at a level integrators can follow. This is +1 for my perspective--but I understand the benefits here. If we don't explain his in high-level, happy ways, I'd fear people just see this as "oh no, another new thing we have to learn".

In general: very +1.

comment:6 Changed 7 years ago by erikrose

  • Owner robgietema deleted

Clearing Owner field of 4.0 PLIPs so we can use it to mean "implementor". (Many of these owners were automatically assigned from choosing a Component that had a default owner.)

comment:7 Changed 7 years ago by smcmahon

  • Cc plip-advisories@… added

comment:8 Changed 7 years ago by dukebody

  • Cc dukebody added

comment:9 Changed 7 years ago by davisagli

I doubt that it's very feasible for us to continue to bundle and support kupu in addition to TinyMCE if we switch to TinyMCE as the default...we already have enough trouble maintaining kupu for the 3.x series.

I agree that it is very important that we do a good job of documenting the ways in which TinyMCE differs from kupu, as well as the reasons for making this switch.

From my personal experience customizing both tinymce and kupu, I can attest that tinymce's plugin system is quite nice.

My FWT vote: a cautious +1.

comment:10 Changed 7 years ago by MatthewWilkes

FWT Vote: +1

Oh good god, +1.

comment:11 Changed 7 years ago by rossp

FWT vote +1. Concerning Kupu, I think we should either keep Kupu in Plone 4 or add TinyMCE to Plone 3. IOW, I think there should be a period with both and I don't think the difficulty in maintaining Kupu justifies the disruption to users.

comment:12 Changed 7 years ago by raphael

FWT vote:

+1 on adding TinyMCE +1 on making it the default on new sites -1 on removing kupu (maybe OK in Plone 5)

that gives: +1

comment:13 Changed 7 years ago by calvinhp

FWT Vote: +1 I agree wtih rossp that we should maintain both for a while to keep end user disruption and integrator pain to a minimum.

comment:14 Changed 7 years ago by esteele

Approved by FWT vote.

comment:15 Changed 7 years ago by esteele

Do we have an implementer for this PLIP?

comment:16 Changed 7 years ago by esteele

  • Owner set to robgietema

comment:17 Changed 7 years ago by robgietema

  • Status changed from new to assigned

comment:18 Changed 7 years ago by grahamperrin

  • Cc grahamperrin@… added

comment:20 Changed 7 years ago by xela7

A note - Before I installed the plip, I had an existing plone site. After intalling plip, the tiny mce was not in the control panel add on configuration or in the pull down list under the site configlet. Could be a problem for upgrades?

comment:21 Changed 7 years ago by xela7

As noted above, I had an existing plone site. I deleted that site and added a new site. When trying to add a Page to the home page, (and also tried an even and got similar error) I received the following error:

Traceback (innermost last):

Module ZPublisher.Publish, line 127, in publish Module ZPublisher.mapply, line 77, in mapply Module ZPublisher.Publish, line 47, in call_object Module Products.CMFPlone.FactoryTool, line 446, in call Module ZPublisher.mapply, line 77, in mapply Module ZPublisher.Publish, line 47, in call_object Module Products.CMFFormController.FSControllerPageTemplate, line 91, in call Module Products.CMFFormController.BaseControllerPageTemplate, line 31, in _call Module Shared.DC.Scripts.Bindings, line 324, in call Module Shared.DC.Scripts.Bindings, line 361, in _bindAndExec Module Products.CMFCore.FSPageTemplate, line 240, in _exec Module Products.CMFCore.FSPageTemplate, line 180, in pt_render Module Products.PageTemplates.PageTemplate, line 80, in pt_render Module zope.pagetemplate.pagetemplate, line 115, in pt_render

  • Warning: Macro expansion failed
  • Warning: <type 'exceptions.KeyError'>: 'macro'

Module zope.tal.talinterpreter, line 271, in call Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 888, in do_useMacro Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 888, in do_useMacro Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 954, in do_defineSlot Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 858, in do_defineMacro Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 954, in do_defineSlot Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 946, in do_defineSlot Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 858, in do_defineMacro Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 888, in do_useMacro Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 852, in do_condition Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 954, in do_defineSlot Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 852, in do_condition Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 821, in do_loop_tal Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 522, in do_optTag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 821, in do_loop_tal Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 888, in do_useMacro Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 888, in do_useMacro Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 852, in do_condition Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 852, in do_condition Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 946, in do_defineSlot Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 888, in do_useMacro Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 533, in do_optTag_tal Module zope.tal.talinterpreter, line 518, in do_optTag Module zope.tal.talinterpreter, line 513, in no_tag Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 888, in do_useMacro Module zope.tal.talinterpreter, line 343, in interpret Module zope.tal.talinterpreter, line 583, in do_setLocal_tal Module zope.tales.tales, line 696, in evaluate

  • URL: file:/Users/alex/buildout_sites/plone4_buildout/src/Products.TinyMCE/Products/TinyMCE/skins/tinymce/wysiwyg_support.pt
  • Line 5, Column 2
  • Expression: <PythonExpr path('nocall:here/%s_wysiwyg_support|here/%s/wysiwyg_support|here/portal_skins/plone_wysiwyg/wysiwyg_support' % (editor, editor))>
  • Names:

{'container': <PloneSite at /Site>,

'context': <ATDocument at /Site/portal_factory/Document/document.2009-08-27.5080664252 used for /Site>, 'default': <object object at 0x16530>, 'here': <ATDocument at /Site/portal_factory/Document/document.2009-08-27.5080664252 used for /Site>, 'loop': {u'field': <Products.PageTemplates.Expressions.PathIterator object at 0x579bd10>,

u'fieldset': <Products.PageTemplates.Expressions.PathIterator object at 0x579bb50>},

'nothing': None, 'options': {'args': (),

'state': <Products.CMFFormController.ControllerState.ControllerState object at 0x5805870>},

'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x60dfe68>, 'request': <HTTPRequest, URL= http://localhost:8080/Site/portal_factory/Document/document.2009-08-27.5080664252/atct_edit>, 'root': <Application at >, 'template': <FSControllerPageTemplate at /Site/atct_edit used for /Site/portal_factory/Document/document.2009-08-27.5080664252>, 'traverse_subpath': [], 'user': <PropertiedUser 'admin'>}

Module Products.PageTemplates.ZRPythonExpr, line 49, in call

  • traceback_info: path('nocall:here/%s_wysiwyg_support|here/%s/wysiwyg_support|here/portal_skins/plone_wysiwyg/wysiwyg_support' % (editor, editor))

Module PythonExpr, line 1, in <expression> Module zope.tales.pythonexpr, line 77, in call Module Products.PageTemplates.Expressions, line 111, in init Module zope.tales.expressions, line 167, in init Module zope.tales.tales, line 598, in compile Module Products.PageTemplates.Expressions, line 111, in init Module zope.tales.expressions, line 170, in init Module zope.tales.expressions, line 57, in init

CompilerError: Path element may not be empty in 'herewysiwyg_support'

comment:22 Changed 7 years ago by xela7

Note also, I switched to kupu in the site configlet and received the same error. I then switched back to tinymce and received the same error.

comment:23 Changed 7 years ago by fulviocasali

I haven't been able to run this plip. Buildout works fine, but as soon as I start the instance, I get this error:

2009-08-27 16:40:40 ERROR Application Could not import Products.ATContentTypes
Traceback (most recent call last):
  File "/Users/fulvio/plone/plone4/eggs/Zope2-2.12.0b4-py2.6-macosx-10.5-i386.egg/OFS/Application.py", line 596, in import_product
    product=__import__(pname, global_dict, global_dict, silly)
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/__init__.py", line 37, in <module>
    from Products.ATContentTypes.config import HAS_LINGUA_PLONE
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/config.py", line 30, in <module>
    from Products.ATContentTypes.configuration import zconf
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/configuration/__init__.py", line 25, in <module>
    from Products.ATContentTypes.configuration.config import zconf
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/configuration/config.py", line 29, in <module>
    from Products.ATContentTypes.configuration.schema import atctSchema
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/configuration/schema.py", line 29, in <module>
    from Products.ATContentTypes.configuration import datatype
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/configuration/datatype.py", line 25, in <module>
    from Products.CMFCore import permissions as CMFCorePermissions
  File "/Users/fulvio/plone/plone4/eggs/Products.CMFCore-2.1.2-py2.6.egg/Products/CMFCore/__init__.py", line 26, in <module>
    import PortalFolder
  File "/Users/fulvio/plone/plone4/eggs/Products.CMFCore-2.1.2-py2.6.egg/Products/CMFCore/PortalFolder.py", line 32, in <module>
    from CMFCatalogAware import CMFCatalogAware
  File "/Users/fulvio/plone/plone4/eggs/Products.CMFCore-2.1.2-py2.6.egg/Products/CMFCore/CMFCatalogAware.py", line 31, in <module>
    from interfaces import ICallableOpaqueItem
  File "/Users/fulvio/plone/plone4/eggs/Products.CMFCore-2.1.2-py2.6.egg/Products/CMFCore/interfaces/__init__.py", line 47, in <module>
    from Interface.bridge import createZope3Bridge
ImportError: No module named Interface.bridge
Traceback (most recent call last):
  File "/Users/fulvio/plone/plone4/bin/runzope", line 89, in <module>
    Zope2.Startup.run.run()
  File "/Users/fulvio/plone/plone4/eggs/Zope2-2.12.0b4-py2.6-macosx-10.5-i386.egg/Zope2/Startup/run.py", line 21, in run
    starter.prepare()
  File "/Users/fulvio/plone/plone4/eggs/Zope2-2.12.0b4-py2.6-macosx-10.5-i386.egg/Zope2/Startup/__init__.py", line 93, in prepare
    self.startZope()
  File "/Users/fulvio/plone/plone4/eggs/Zope2-2.12.0b4-py2.6-macosx-10.5-i386.egg/Zope2/Startup/__init__.py", line 283, in startZope
    Zope2.startup()
  File "/Users/fulvio/plone/plone4/eggs/Zope2-2.12.0b4-py2.6-macosx-10.5-i386.egg/Zope2/__init__.py", line 47, in startup
    _startup()
  File "/Users/fulvio/plone/plone4/eggs/Zope2-2.12.0b4-py2.6-macosx-10.5-i386.egg/Zope2/App/startup.py", line 58, in startup
    OFS.Application.import_products()
  File "/Users/fulvio/plone/plone4/eggs/Zope2-2.12.0b4-py2.6-macosx-10.5-i386.egg/OFS/Application.py", line 573, in import_products
    import_product(product_dir, product_name, raise_exc=debug_mode)
  File "/Users/fulvio/plone/plone4/eggs/Zope2-2.12.0b4-py2.6-macosx-10.5-i386.egg/OFS/Application.py", line 596, in import_product
    product=__import__(pname, global_dict, global_dict, silly)
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/__init__.py", line 37, in <module>
    from Products.ATContentTypes.config import HAS_LINGUA_PLONE
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/config.py", line 30, in <module>
    from Products.ATContentTypes.configuration import zconf
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/configuration/__init__.py", line 25, in <module>
    from Products.ATContentTypes.configuration.config import zconf
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/configuration/config.py", line 29, in <module>
    from Products.ATContentTypes.configuration.schema import atctSchema
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/configuration/schema.py", line 29, in <module>
    from Products.ATContentTypes.configuration import datatype
  File "/Users/fulvio/plone/plone4/eggs/Products.ATContentTypes-1.3.2-py2.6.egg/Products/ATContentTypes/configuration/datatype.py", line 25, in <module>
    from Products.CMFCore import permissions as CMFCorePermissions
  File "/Users/fulvio/plone/plone4/eggs/Products.CMFCore-2.1.2-py2.6.egg/Products/CMFCore/__init__.py", line 26, in <module>
    import PortalFolder
  File "/Users/fulvio/plone/plone4/eggs/Products.CMFCore-2.1.2-py2.6.egg/Products/CMFCore/PortalFolder.py", line 32, in <module>
    from CMFCatalogAware import CMFCatalogAware
  File "/Users/fulvio/plone/plone4/eggs/Products.CMFCore-2.1.2-py2.6.egg/Products/CMFCore/CMFCatalogAware.py", line 31, in <module>
    from interfaces import ICallableOpaqueItem
  File "/Users/fulvio/plone/plone4/eggs/Products.CMFCore-2.1.2-py2.6.egg/Products/CMFCore/interfaces/__init__.py", line 47, in <module>
    from Interface.bridge import createZope3Bridge
ImportError: No module named Interface.bridge

comment:24 Changed 7 years ago by davisagli

(In [29627]) finished FWT review, refs #9249

comment:25 Changed 7 years ago by optilude

(In [29678]) Guest review. Refs #9249.

comment:26 Changed 7 years ago by esteele

Your PLIP has been reviewed by the Framework team. Feel free to discuss any suggested changes either here in the PLIP ticket or on the mailing lists. Final deadline for this PLIP is set for September 30.

comment:27 Changed 7 years ago by robgietema

Ready for merge.

comment:28 Changed 6 years ago by davisagli

(In [30033]) update review, refs #9249

comment:29 Changed 6 years ago by rossp

FWT vote: +1 for merge

comment:30 Changed 6 years ago by MatthewWilkes

B-E-A-Utiful! FWT Vote: +1

comment:31 Changed 6 years ago by rossp

I just noticed under a Plone 3.3.1 site that TinyMCE works for the static portlet add form, but not the edit form. I tried testing under the plip cfg in coredev but I can't add portlets at all on a newly created plone site. It seems there aren't any portlet managers/columns.

Can someone test that TinyMCE works when editing an existing static portlet?

comment:32 Changed 6 years ago by optilude

We use TinyMCE on a 3.3 site and it works fine, both to add and edit static text portlets. I also tested that in the PLIP bundle when I reviewed it a few weeks ago, and it worked.

comment:33 Changed 6 years ago by erikrose

In OmniWeb 5.10.1, Safari 4.0.3, and Firefox 3.5.3, once I add any Discreet text, all the text I add afterward also ends up discreet, even if I switch to a different style or select (remove style). The only way out is editing the raw HTML. This makes it a step backward from Kupu, from a user's point of view, imo. Once we fix this (and I suspect it's a bug in our use of it, as I wasn't able to reproduce it an TinyMCE's demo site), I'll happily change my vote to +1.

Reproduction:

  1. Edit the front page, and clear out the rich text field.
  2. Type "hello" on line 1.
  3. Assign the Discreet style to it.
  4. Press Return, and type "heading" on line 2.
  5. Select Heading from the Style menu. The Discreet style doesn't go away, but it should. No matter how you thrash about with (remove style) and such, you can't get rid of the discreet class on the heading without editing the raw HTML.

comment:34 Changed 6 years ago by esteele

Erik,

For what it's worth, I was able to fix this quickly by changing the "discreet" definition in the configlet to use a span instead of p tag. The remove formatting method by default only rips out span,b,strong,em,i,font,u, and strike elements (see  http://dev.plone.org/collective/browser/Products.TinyMCE/trunk/Products/TinyMCE/skins/tinymce/tiny_mce.js#8787). I can see several solutions to this and they're all trivial, IMO.

comment:36 Changed 6 years ago by erikrose

For what it's worth

It's worth a +1. :-)

comment:37 Changed 6 years ago by tom_gross

The following error occurs when exporting the TinyMCE (1.1rc5)-profile via portal_setup:

Traceback (innermost last):
  Module ZPublisher.Publish, line 119, in publish
  Module ZPublisher.mapply, line 88, in mapply
  Module ZPublisher.Publish, line 42, in call_object
  Module Products.GenericSetup.tool, line 656, in manage_exportSelectedSteps
  Module Products.GenericSetup.tool, line 1114, in _doRunExportSteps
  Module Products.TinyMCE.exportimport, line 198, in exportTinyMCESettings
  Module Products.GenericSetup.utils, line 809, in exportObjects
  Module Products.GenericSetup.utils, line 530, in _exportBody
  Module Products.TinyMCE.exportimport, line 128, in _exportNode
AttributeError: 'NoneType' object has no attribute 'split'

comment:38 Changed 6 years ago by esteele

This PLIP has been accepted for merging into Plone 4.0

The final vote was: Alec Mitchell +1 David Glick +.5 Erik Rose +1 Laurence Rowe +1 Matthew Wilkes +1 Ross Patterson +1

Please merge your branches into the Plone 4.0 head by end-of-day Friday Oct 16. If you need assistance with merging, please contact me.

We'll be assigning a documentation ticket to this PLIP shortly. Please assist the docs team in documenting the changes and new features that this PLIP introduces.

comment:39 Changed 6 years ago by esteele

Please assist the doc team in creating/updating documentation relating to this PLIP. See #9602.

comment:40 Changed 6 years ago by robgietema

  • Status changed from assigned to closed
  • Resolution set to fixed

This plip has been merged.

comment:41 Changed 6 years ago by yurj

  • Keywords accessibility added
  • Status changed from closed to reopened
  • Resolution fixed deleted
  • Cc yurj added

Its accessibility seems not to be fixed, at least with Jaws. Can someone check it?

comment:42 Changed 6 years ago by hannosch

  • Status changed from reopened to closed
  • Resolution set to fixed

The PLIP has been merged and finished. New tickets should be created for any issues now.

Note: See TracTickets for help on using tickets.