[Checkins] SVN: Products.ExternalEditor/trunk/ Rearranged
Hanno Schlichting
plone at hannosch.info
Sat May 3 15:03:45 EDT 2008
Log message for revision 86272:
Rearranged
Changed:
_U Products.ExternalEditor/trunk/
A Products.ExternalEditor/trunk/CHANGES.txt
_U Products.ExternalEditor/trunk/Products/
_U Products.ExternalEditor/trunk/Products/ExternalEditor/
D Products.ExternalEditor/trunk/Products/ExternalEditor/CHANGES.txt
D Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-UNIX.txt
D Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-WIN32.txt
D Products.ExternalEditor/trunk/Products/ExternalEditor/README.txt
D Products.ExternalEditor/trunk/Products/ExternalEditor/setup.py
A Products.ExternalEditor/trunk/Products/__init__.py
A Products.ExternalEditor/trunk/README.txt
A Products.ExternalEditor/trunk/docs/
A Products.ExternalEditor/trunk/docs/INSTALL-UNIX.txt
A Products.ExternalEditor/trunk/docs/INSTALL-WIN32.txt
A Products.ExternalEditor/trunk/setup.py
-=-
Property changes on: Products.ExternalEditor/trunk
___________________________________________________________________
Name: svn:ignore
+ build
dist
*.egg-info
*.pyc
Copied: Products.ExternalEditor/trunk/CHANGES.txt (from rev 86271, Products.ExternalEditor/trunk/Products/ExternalEditor/CHANGES.txt)
===================================================================
--- Products.ExternalEditor/trunk/CHANGES.txt (rev 0)
+++ Products.ExternalEditor/trunk/CHANGES.txt 2008-05-03 19:03:45 UTC (rev 86272)
@@ -0,0 +1,284 @@
+External Editor Change Log
+
+ unreleased - 1.0 Release
+
+ - Updated package metadata to be usable as a package.
+
+ 01/03/2007 - 0.9.3 Release
+
+ - Fixed issue with 'manage_FTPget' overriding the 'Content-Type'
+ header.
+
+ - Only run ExpandEnvironmentStrings on win32 systems.
+
+ 9/14/2006 - 0.9.2 Release
+
+ - Added 'skip_data' option to make External Editor send out only
+ the metadata part and skip appending data to the 'body'.
+
+ - Add a simple callback registry that can be used to add extra
+ metadata headers or set special response headers when a file is
+ edited through External Editor.
+
+ - Use rfc822.Message for parsing the metadata of the file being
+ edited.
+
+ - Don't emit a warning about deprecated 'methods' in Zope >= 2.10.
+
+ - Fixed acquisition issue in manage_main.dtml to sync up with the
+ same fix applied to Zope.
+
+ 6/23/2005 - 0.9.1 Release
+
+ - Older pyc files for plugins were included in the 0.9 release.
+ This version has the most up to date plugins.
+
+ 6/20/2005 - 0.9 Release
+
+ - When using the Excel plugin, errors were seen by users like
+ "TypeError: This object does not support enumeration". We now
+ make the user deal with these.
+
+ - When using the Excel plugin, errors were intermittently raised to the
+ user in the form "Fatal error: <unknown>.Path" and the user could
+ subsequently not save the document back to Zope because the
+ external editor process had quit.
+
+ - Changes to documents intermittently may not have been saved back to Zope
+ when using any plugin that involved COM (Word, Excel, Powerpoint, etc).
+
+ - If Word was exited before a user actively saved, if there were
+ outstanding changes in the document being edited, those changes
+ would not be saved to the server despite the user answering
+ "yes" to the "do you want to save before you exit" dialog
+ presented by Word.
+
+ - The "title" attribute of the object being externally edited is
+ now available within the set of headers returned by EE to the
+ zopeedit client.
+
+ - Detecting whether the client has External Editor installed from
+ within IE using JavaScript or VBScript is now possible, assuming
+ that the client software is installed via the InnoSetup
+ installer. See "win32/ocx.txt" for more info.
+
+ - External Editor now compatible with objects that return a
+ "filestream iterator" in Zope 2.7.1+. (if upgrading: this fix
+ does not require an update to EE client, just the EE Zope
+ product).
+
+ - Properly escape hyphens in man page. Thanks to Federico Sevilla III.
+
+ - Check if the editor was launched before locking the file in Zope. This
+ prevents errors if the editor is closed before the lock request
+ completes.
+
+ - Do not ask the user what editor to use on Posix platforms. Instead just
+ tell the user to edit the config file. The askstring()
+ function does not work with a hidden root Tk window in Python 2.3.4.
+ Thanks to Christopher Mann.
+
+ 7/13/04 - 0.8 release
+
+ - Add external editor icon to ZMI breadcrumbs for editable objects.
+
+ - Compiled windows helper app binary using Python 2.3.4, Pythonwin build
+ 163 and py2exe 0.5.
+
+ - Add Dreamweaver plugin contributed by Manuel Aristaránn. Thanks also
+ to Anton Stonor.
+
+ - Add ZMI support for Zope 2.7's ordered folder objects.
+
+ - Fix bug detecting basic auth info from older versions of CookieCrumber.
+ Thanks to David D. Smith and Federico Sevilla III.
+
+ - Workaround IE browser error when running over SSL. Thanks to
+ Marc-Aurèle Darche.
+
+ - Add ".zem" file extension support for MacOS X (especially Mac IE),
+ to ease helper app integration where MIME support is lacking. Thanks
+ to Zac Bir.
+
+ - Added "long_file_name" and "file_name_separator" config options.
+
+ - Fixed bug which happened under Win32 when editing an Excel file
+ using the Excel plugin where the symptom was a "Call was
+ rejected by callee" COM error. Thanks to Chris McDonough.
+
+ 4/23/04 - 0.7.2 Release
+
+ - Change default configuration to use .txt extension for text/plain only.
+ Add extensions for css and javascript files.
+
+ - Fixed packaging bug in Windows binary which disabled several plugins.
+ This fixes "Editor did not launch properly" errors for MSOffice
+ among others.
+
+ - Fixed a bug where very short editing sessions where no changes were
+ made could make EE think the editor never launched. Thanks to Maik Ihde.
+
+ 11/7/03 - 0.7.1 Release (affects win32 binary only)
+
+ - Fix encoding bug in windows binary. Thanks to Chris McDonough.
+
+ - Added tip for configuring IE to save files over SSL. Thanks to
+ Jonah Bossewitch.
+
+ 4/1/03 - 0.7 Release
+
+ - Added working distutils setup for Unix.
+
+ - You can now specify from the server that the helper app should
+ borrow a lock by passing borrow_lock=1 via the request, thus
+ suppressing the dialog box which appears by default. Thanks
+ to Shane Hathaway.
+
+ - Improved open file check in Word and Powerpoint plugins
+ thanks to Yura Petrov.
+
+ - Added plugins for Microsoft Word, Excel and Powerpoint.
+
+ - Added the man page from the Debian distro. Thanks go out to
+ Federico Sevilla III and Andreas Tille
+
+ 11/02/02 - 0.6 Release
+
+ - Built Windows helper app using Python 2.2.2 and PythonWin 148.
+
+ - The externalEdit_ object now accepts a path argument to the object to
+ edit, allowing URLs like: http://zope/externalEdit_?path=/some/object.
+ This allows external editor to play better with applications making use
+ of traversal magic of their own. Thanks to Tres Seaver.
+
+ - Fixed NameError bug in unlock retry code. Thanks to Federico Sevilla III.
+
+ - Added a workaround for non-compliant SSL servers. The software now
+ silently ignores "EOF occurred in violation of protocol" errors coming
+ from httplib. Thanks to Christopher Deckard.
+
+ - Removed stderr writes to cure "Invalid File Descriptor" errors on
+ Windows. Thanks to Martijn Peters.
+
+ - Added Photoshop plugin (win32)
+
+ - Added HomeSite plugin (win32)
+
+ - Added win32 editor plugin support for the helper application.
+
+ 8/19/02 - 0.5 Release
+
+ - Added patch for Zope find template so that you can use external editor
+ directly from find results in the ZMI. Thanks to Jim Washington.
+
+ - Factored out external editor link generator. Product now registers
+ a global method "externalEditLink_" which can be called to generate
+ the external editor icon link for any object.
+
+ - External editing is now governed by the "Use external editor" permission
+ to allow non-managers to use it. Users must also have the permissions to
+ edit/modify the objects they edit, plus do WebDAV locking if desired.
+ Thanks to Reineke and others.
+
+ - Unix editor command line parsing is much more robust now and properly
+ handles quoted arguments. You can also specify the "$1" placeholder in the
+ editor command to denote where the content file name is inserted. If
+ omitted it is appended to the end of the command line. "%1" continues to
+ work similarly for Windows. Thanks to Marc St-Jean.
+
+ - Fixed bug editing large (chunked) files and images. External editor now
+ streams their data properly to the client. Thanks to all the users who
+ reported various symptoms of this bug.
+
+ - Fixed bug editing objects inside a Squishdot site. Thanks to Kevin Salt.
+
+ - Added the capability to borrow exising DAV locks. This allows external
+ editor to play well with other systems using locks, such as CMFStaging. A
+ new configuration flag, always_borrow_locks can be set to suppress the
+ borrow lock warning dialog when editing.
+
+ - Fixed auth bug when product was used with mysqlUserFolder. Thanks to
+ ViNiL.
+
+ 6/30/02 - 0.4.2 Release (affects win32 binary only)
+
+ - Added SSL support to Windows binary package. Thanks to Federico
+ Sevilla III
+
+ 6/29/02 - 0.4.1 Release
+
+ - Fixed dangling dav lock bug on fatal errors. Thanks to Marc St-Jean.
+
+ - Fixed content_type bug, now checks if it is callable. Thanks to Arnaud
+ Bienvenu.
+
+ - Fixed bug with editing binary data on Windows. Thanks to Eric Kamm.
+
+ - Fixed bug setting the editor on Posix platforms.
+
+ 6/24/02 - 0.4 Release
+
+ - Added --version command line argument
+
+ - Made manage_FTPget the default source for the editable content, instead
+ of document_src which was broken for CMF Wiki Pages.
+
+ - Fixed Windows "body_file" bug.
+
+ - Added binary build support for Windows using py2exe and Inno setup.
+
+ - Fixed Windows config file locator. It now looks in the program directory
+ and then the user's home directory (if specified)
+
+ - Fixed bug in Windows registry editor lookup.
+
+ 6/16/02 - 0.3 Release
+
+ - Improved behavior when saving after lock attempts fail.
+
+ - Now works on Windows (applause) using Pythonwin. Much overall
+ refactoring to abstract process control. Thanks to Oliver Deckmyn,
+ Gabriel Genellina and Arno Gross for testing, patches and suggestions.
+
+ - Added "temp_dir" configuration option for specifying a different
+ temp file directory then the OS default. Also further improved
+ temp file name generation.
+
+ - Added support for domain specific configuration options.
+
+ - Fixed trailing newline bug in encoded auth data coming from
+ CookieCrumbler. Thanks to Harald Koschinski.
+
+ - You can now pass command line arguments to the editor in the config file,
+ or wrap the editor in an xterm without using a shell script.
+
+ - Rewrote "Editor did not launch" error message so it makes more sense.
+
+ - Fixed https detection bug. External editor is now tested and working with
+ https. Many thanks to Hans-Dieter Stich and Martin Grönemeyer for their
+ assistance and ideas.
+
+ - Made it possible to edit objects that are methods of ZClasses. Thanks to
+ Jim Washington
+
+ - Refactored link generation code in manage_main so that it uses
+ the parent's absolute_url rather than URL1. Thanks to
+ Jim Washington
+
+ - Removed implicit save in Configuration class destructor
+
+ - Added caching headers to prevent client-side caching of edit data.
+ Thanks to Gabriel Genellina for pointing this out.
+
+ - Added improved support for editing CMF documents
+
+ - Eliminated spurious "Editor did not launch" errors on short sessions
+ or when other errors occurred.
+
+ 5/16/02 - 0.2 Release
+
+ - Fixed product uninstallation bug
+
+ 5/15/02 - 0.1
+
+ - Initial release
Property changes on: Products.ExternalEditor/trunk/Products
___________________________________________________________________
Name: svn:ignore
+ *.pyc
Property changes on: Products.ExternalEditor/trunk/Products/ExternalEditor
___________________________________________________________________
Name: svn:ignore
+ *.pyc
Deleted: Products.ExternalEditor/trunk/Products/ExternalEditor/CHANGES.txt
===================================================================
--- Products.ExternalEditor/trunk/Products/ExternalEditor/CHANGES.txt 2008-05-03 18:58:19 UTC (rev 86271)
+++ Products.ExternalEditor/trunk/Products/ExternalEditor/CHANGES.txt 2008-05-03 19:03:45 UTC (rev 86272)
@@ -1,284 +0,0 @@
-External Editor Change Log
-
- unreleased - 1.0 Release
-
- - Updated package metadata to be usable as a package.
-
- 01/03/2007 - 0.9.3 Release
-
- - Fixed issue with 'manage_FTPget' overriding the 'Content-Type'
- header.
-
- - Only run ExpandEnvironmentStrings on win32 systems.
-
- 9/14/2006 - 0.9.2 Release
-
- - Added 'skip_data' option to make External Editor send out only
- the metadata part and skip appending data to the 'body'.
-
- - Add a simple callback registry that can be used to add extra
- metadata headers or set special response headers when a file is
- edited through External Editor.
-
- - Use rfc822.Message for parsing the metadata of the file being
- edited.
-
- - Don't emit a warning about deprecated 'methods' in Zope >= 2.10.
-
- - Fixed acquisition issue in manage_main.dtml to sync up with the
- same fix applied to Zope.
-
- 6/23/2005 - 0.9.1 Release
-
- - Older pyc files for plugins were included in the 0.9 release.
- This version has the most up to date plugins.
-
- 6/20/2005 - 0.9 Release
-
- - When using the Excel plugin, errors were seen by users like
- "TypeError: This object does not support enumeration". We now
- make the user deal with these.
-
- - When using the Excel plugin, errors were intermittently raised to the
- user in the form "Fatal error: <unknown>.Path" and the user could
- subsequently not save the document back to Zope because the
- external editor process had quit.
-
- - Changes to documents intermittently may not have been saved back to Zope
- when using any plugin that involved COM (Word, Excel, Powerpoint, etc).
-
- - If Word was exited before a user actively saved, if there were
- outstanding changes in the document being edited, those changes
- would not be saved to the server despite the user answering
- "yes" to the "do you want to save before you exit" dialog
- presented by Word.
-
- - The "title" attribute of the object being externally edited is
- now available within the set of headers returned by EE to the
- zopeedit client.
-
- - Detecting whether the client has External Editor installed from
- within IE using JavaScript or VBScript is now possible, assuming
- that the client software is installed via the InnoSetup
- installer. See "win32/ocx.txt" for more info.
-
- - External Editor now compatible with objects that return a
- "filestream iterator" in Zope 2.7.1+. (if upgrading: this fix
- does not require an update to EE client, just the EE Zope
- product).
-
- - Properly escape hyphens in man page. Thanks to Federico Sevilla III.
-
- - Check if the editor was launched before locking the file in Zope. This
- prevents errors if the editor is closed before the lock request
- completes.
-
- - Do not ask the user what editor to use on Posix platforms. Instead just
- tell the user to edit the config file. The askstring()
- function does not work with a hidden root Tk window in Python 2.3.4.
- Thanks to Christopher Mann.
-
- 7/13/04 - 0.8 release
-
- - Add external editor icon to ZMI breadcrumbs for editable objects.
-
- - Compiled windows helper app binary using Python 2.3.4, Pythonwin build
- 163 and py2exe 0.5.
-
- - Add Dreamweaver plugin contributed by Manuel Aristaránn. Thanks also
- to Anton Stonor.
-
- - Add ZMI support for Zope 2.7's ordered folder objects.
-
- - Fix bug detecting basic auth info from older versions of CookieCrumber.
- Thanks to David D. Smith and Federico Sevilla III.
-
- - Workaround IE browser error when running over SSL. Thanks to
- Marc-Aurèle Darche.
-
- - Add ".zem" file extension support for MacOS X (especially Mac IE),
- to ease helper app integration where MIME support is lacking. Thanks
- to Zac Bir.
-
- - Added "long_file_name" and "file_name_separator" config options.
-
- - Fixed bug which happened under Win32 when editing an Excel file
- using the Excel plugin where the symptom was a "Call was
- rejected by callee" COM error. Thanks to Chris McDonough.
-
- 4/23/04 - 0.7.2 Release
-
- - Change default configuration to use .txt extension for text/plain only.
- Add extensions for css and javascript files.
-
- - Fixed packaging bug in Windows binary which disabled several plugins.
- This fixes "Editor did not launch properly" errors for MSOffice
- among others.
-
- - Fixed a bug where very short editing sessions where no changes were
- made could make EE think the editor never launched. Thanks to Maik Ihde.
-
- 11/7/03 - 0.7.1 Release (affects win32 binary only)
-
- - Fix encoding bug in windows binary. Thanks to Chris McDonough.
-
- - Added tip for configuring IE to save files over SSL. Thanks to
- Jonah Bossewitch.
-
- 4/1/03 - 0.7 Release
-
- - Added working distutils setup for Unix.
-
- - You can now specify from the server that the helper app should
- borrow a lock by passing borrow_lock=1 via the request, thus
- suppressing the dialog box which appears by default. Thanks
- to Shane Hathaway.
-
- - Improved open file check in Word and Powerpoint plugins
- thanks to Yura Petrov.
-
- - Added plugins for Microsoft Word, Excel and Powerpoint.
-
- - Added the man page from the Debian distro. Thanks go out to
- Federico Sevilla III and Andreas Tille
-
- 11/02/02 - 0.6 Release
-
- - Built Windows helper app using Python 2.2.2 and PythonWin 148.
-
- - The externalEdit_ object now accepts a path argument to the object to
- edit, allowing URLs like: http://zope/externalEdit_?path=/some/object.
- This allows external editor to play better with applications making use
- of traversal magic of their own. Thanks to Tres Seaver.
-
- - Fixed NameError bug in unlock retry code. Thanks to Federico Sevilla III.
-
- - Added a workaround for non-compliant SSL servers. The software now
- silently ignores "EOF occurred in violation of protocol" errors coming
- from httplib. Thanks to Christopher Deckard.
-
- - Removed stderr writes to cure "Invalid File Descriptor" errors on
- Windows. Thanks to Martijn Peters.
-
- - Added Photoshop plugin (win32)
-
- - Added HomeSite plugin (win32)
-
- - Added win32 editor plugin support for the helper application.
-
- 8/19/02 - 0.5 Release
-
- - Added patch for Zope find template so that you can use external editor
- directly from find results in the ZMI. Thanks to Jim Washington.
-
- - Factored out external editor link generator. Product now registers
- a global method "externalEditLink_" which can be called to generate
- the external editor icon link for any object.
-
- - External editing is now governed by the "Use external editor" permission
- to allow non-managers to use it. Users must also have the permissions to
- edit/modify the objects they edit, plus do WebDAV locking if desired.
- Thanks to Reineke and others.
-
- - Unix editor command line parsing is much more robust now and properly
- handles quoted arguments. You can also specify the "$1" placeholder in the
- editor command to denote where the content file name is inserted. If
- omitted it is appended to the end of the command line. "%1" continues to
- work similarly for Windows. Thanks to Marc St-Jean.
-
- - Fixed bug editing large (chunked) files and images. External editor now
- streams their data properly to the client. Thanks to all the users who
- reported various symptoms of this bug.
-
- - Fixed bug editing objects inside a Squishdot site. Thanks to Kevin Salt.
-
- - Added the capability to borrow exising DAV locks. This allows external
- editor to play well with other systems using locks, such as CMFStaging. A
- new configuration flag, always_borrow_locks can be set to suppress the
- borrow lock warning dialog when editing.
-
- - Fixed auth bug when product was used with mysqlUserFolder. Thanks to
- ViNiL.
-
- 6/30/02 - 0.4.2 Release (affects win32 binary only)
-
- - Added SSL support to Windows binary package. Thanks to Federico
- Sevilla III
-
- 6/29/02 - 0.4.1 Release
-
- - Fixed dangling dav lock bug on fatal errors. Thanks to Marc St-Jean.
-
- - Fixed content_type bug, now checks if it is callable. Thanks to Arnaud
- Bienvenu.
-
- - Fixed bug with editing binary data on Windows. Thanks to Eric Kamm.
-
- - Fixed bug setting the editor on Posix platforms.
-
- 6/24/02 - 0.4 Release
-
- - Added --version command line argument
-
- - Made manage_FTPget the default source for the editable content, instead
- of document_src which was broken for CMF Wiki Pages.
-
- - Fixed Windows "body_file" bug.
-
- - Added binary build support for Windows using py2exe and Inno setup.
-
- - Fixed Windows config file locator. It now looks in the program directory
- and then the user's home directory (if specified)
-
- - Fixed bug in Windows registry editor lookup.
-
- 6/16/02 - 0.3 Release
-
- - Improved behavior when saving after lock attempts fail.
-
- - Now works on Windows (applause) using Pythonwin. Much overall
- refactoring to abstract process control. Thanks to Oliver Deckmyn,
- Gabriel Genellina and Arno Gross for testing, patches and suggestions.
-
- - Added "temp_dir" configuration option for specifying a different
- temp file directory then the OS default. Also further improved
- temp file name generation.
-
- - Added support for domain specific configuration options.
-
- - Fixed trailing newline bug in encoded auth data coming from
- CookieCrumbler. Thanks to Harald Koschinski.
-
- - You can now pass command line arguments to the editor in the config file,
- or wrap the editor in an xterm without using a shell script.
-
- - Rewrote "Editor did not launch" error message so it makes more sense.
-
- - Fixed https detection bug. External editor is now tested and working with
- https. Many thanks to Hans-Dieter Stich and Martin Grönemeyer for their
- assistance and ideas.
-
- - Made it possible to edit objects that are methods of ZClasses. Thanks to
- Jim Washington
-
- - Refactored link generation code in manage_main so that it uses
- the parent's absolute_url rather than URL1. Thanks to
- Jim Washington
-
- - Removed implicit save in Configuration class destructor
-
- - Added caching headers to prevent client-side caching of edit data.
- Thanks to Gabriel Genellina for pointing this out.
-
- - Added improved support for editing CMF documents
-
- - Eliminated spurious "Editor did not launch" errors on short sessions
- or when other errors occurred.
-
- 5/16/02 - 0.2 Release
-
- - Fixed product uninstallation bug
-
- 5/15/02 - 0.1
-
- - Initial release
Deleted: Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-UNIX.txt
===================================================================
--- Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-UNIX.txt 2008-05-03 18:58:19 UTC (rev 86271)
+++ Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-UNIX.txt 2008-05-03 19:03:45 UTC (rev 86272)
@@ -1,115 +0,0 @@
-Zope External Editor Installation
-
- Installation is two-fold:
-
- - Install the ExternalEditor product in Zope.
-
- - Install the helper application on the client(s) and configure the browser(s)
-
- Product Installation
-
- Download the archive and extract it into your Zope products directory. Then
- restart Zope. If you succeeded, you'll notice pencil icons next to the
- external editable objects in the Zope management screens.
-
- Helper Application Installation
-
- Dependancies: Python 2.2, Tk
-
- Download the helper app archive and extract it. Enter the ExternalEditor
- directory and run (You may need to be root)::
-
- python2.2 setup.py install
-
- This will install the zopeedit.py executable (in /usr/local/bin on my
- system). Alternately, you can just copy zopeedit.py to the location of
- your choosing.
-
- Once you have the helper application installed, you need to configure your
- browser to fire it off appropriately. To do so, create an entry in the
- helper applications list for your browser(s) that associates the mime type
- "application/x-zope-edit" with the helper application.
-
- Here are the step-by-step configuration instructions for Mozilla:
-
- - From the Edit menu choose Preferences
-
- - Under Navigator choose Helper Applications
-
- - Click on the New Type button
-
- - Enter a description, like "Zope Editor"
-
- - For MIME type, enter application/x-zope-edit
-
- - for Application, select the helper application python file
-
- Here are instructions for Konqueror (provided by Mark Bucciarelii)
-
- - Settings -> Configure Konqueror
-
- - Select the File Associations icon
-
- - Add a new File Assocation: group = application, type = x-zope-edit
-
- - This association should now be currently selected in the Known Types
- tree control
-
- - Add a description, if you like
-
- - Click the Add button in the Application Preference Order section.
- Browse to select /usr/local/bin/zopeedit.py
-
- Tips
-
- The helper application can run any editor program that does not detach
- itself from the controlling process.
-
- To get terminal based editors to work, you need to spawn them inside an
- xterm. to do this, use something like the following for the editor option::
-
- editor = xterm -e vi
-
- You can of course modify the above to fire up your favorite terminal and
- editor or add any command line arguments you want.
-
- As for editors that insist on detaching from the controlling process (gvim
- does this by default), you need to configure them so that they do not
- detach. For gvim you could use::
-
- editor = gvim -f
-
- Troubleshooting
-
- If the helper app won't launch try the following suggestions:
-
- - Make sure you have Tk installed properly. To test this, bring up Python
- in a terminal and enter 'import Tkinter'. If it throws an exception,
- that is your problem.
-
- - Netscape 4 users, add a "%s" at the end of the application command line.
- It appears the Netscape likes to alert you with spurious things coming
- from stderr. I'll see if I can come up with a solution to that.
-
- - Make sure the file is marked as executable for your user
- ('chmod +x zopeedit.py' should do it)
-
- - Make sure the browser is properly configured. Use a full path to the
- helper app.
-
- - Make sure you are using a graphical editor (that uses X windows). To use
- a terminal based editor (like vi), setup the editor option to spawn it
- inside an xterm. See tips above.
-
- - Try downloading and saving the external editor data to a file manually
- (right click on the pencil icon). Then try running the helper app from
- the command line, passing it the path to this file. If it runs, then
- there is something wrong with the browser configuration. If not, then it
- should output a traceback to your terminal. Email me a copy of this
- traceback, and the data file and I will try to fix it.
-
- - If the editor launches, but the helper app complains that it lost its
- connection to the editor process, this is because your editor detached
- from the parent process (the helper app). Configure the editor such that
- it does not do this. Unfortunately this prevents you from using a
- multi-headed text edit server (like nedit and emacs can provide).
Deleted: Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-WIN32.txt
===================================================================
--- Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-WIN32.txt 2008-05-03 18:58:19 UTC (rev 86271)
+++ Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-WIN32.txt 2008-05-03 19:03:45 UTC (rev 86272)
@@ -1,139 +0,0 @@
-Zope External Editor Installation
-
- Installation is two-fold:
-
- - Install the ExternalEditor product in Zope.
-
- - Install the helper application on the client(s) and configure the browser(s)
-
- Product Installation
-
- Download the archive and extract it into your Zope products directory. Then
- restart Zope. If you succeeded, you'll notice pencil icons next to the
- external editable objects in the Zope management screens.
-
- Helper Application Installation (Binary)
-
- The binary distribution for Windows includes everything you need to
- to install the helper application. It is precompiled to a native Windows
- executable using Python 2.3.4, Pythonwin build 163 and Py2exe 0.5.
- Everything is included for you in one package.
-
- Just run the setup executable to install and configure the helper app
- for use with Internet Explorer. You can also register it (zopeedit.exe)
- with other browsers directly.
-
- You can download the binary installer from Zope.org at::
-
- http://www.zope.org/Members/Caseman/ExternalEditor
-
- Helper Application Installation (Source)
-
- Dependancies: Python 2.2 or newer, Pythonwin extensions (win32all)
-
- *Note: This configuration is for Windows 98, for easier setup on XP and
- Windows 2000, use the binary distribution*
-
- Download the helper app archive and extract into the directory where you
- want to install it: C:\Program Files\ZopeEdit might be a good choice.
-
- Once you have the help application installed, you need to configure your
- browser to fire it off appropriately. To do so, create an entry in the
- helper applications list for your browser(s) that associates the mime type
- "application/x-zope-edit" with the helper application.
-
- To do this for Internet Explorer and other recent browsers, you must
- register the external editor file type with Windows:
-
- - From the "My Computer" window, choose "Folder Options" from the "View"
- menu.
-
- - In the "File Types" tab, click on the "New Type" button.
-
- - Enter a description such as "Zope External Editor"
-
- - Enter an extension not otherwise used on your system (.zope is usually a
- good choice, the exact value is not important)
-
- - For content type (MIME) enter: application/x-zope-edit
-
- - Under "Actions", click on the "New" button.
-
- - For Action enter: Open
-
- - For application used, enter or browse to the path to pythonw.exe
- (wherever you installed python2.3, such as C:\Python23).
- Use quotes around the path if it includes spaces. Following the path to
- Python, enter the path to the helper application file, in quotes if
- needed. Follow it with: "%1" (in quotes). On my system it looks like::
-
- '"C:\Python23\pythonw.exe" C:\Casey\ExternalEditor\zopeedit.py "%1"
-
- - Click OK.
-
- - Uncheck "Confirm open after download"
-
- - Click OK, you should now see your new file type.
-
- Tips
-
- The helper application can run any editor program that does not detach
- itself from the controlling process.
-
- As for editors that insist on detaching from the controlling process
- (EditPad does this by default), you need to configure them so that they do
- not detach. For EditPad you could use::
-
- editor = C:\Program Files\EditPadClassic\EditPad.exe /newinstance
-
- Check the command line options of your favorite editor to see if it
- supports this.
-
- Troubleshooting
-
- If the helper app won't launch or you receive errors try the following
- suggestions:
-
- - Make sure you have Pythonwin installed properly. To test this, bring up
- the Python console and type in 'import win32api'. If it throws an
- exception, you need to install Pythonwin.
-
- - Netscape 4 users, add a "%s" at the end of the application command line.
- It appears the Netscape likes to alert you with spurious things coming
- from stderr. I'll see if I can come up with a solution to that.
-
- - Make sure the file type is properly configured to launch the helper app
- when it receives files of type "application/x-zope-edit".
-
- - Try downloading and saving the external editor data to a file manually
- (right click on the pencil icon). Then try running the helper app from
- the command line, passing it the path to this file. If it runs, then
- there is something wrong with the browser/system configuration. If not,
- then it should output a traceback to your terminal. Email me a copy of
- this traceback, and the data file and I will try to fix it.
-
- - If the editor launches, but the helper app complains that it lost its
- connection to the editor process, this is because your editor detached
- from the parent process (the helper app). Configure the editor such that
- it does not do this. Unfortunately, many MDI applications do this and
- cannot be configured otherwise. To solve this problem, a plug-in must
- be developed for the application. See the README file for more details.
-
- - If you are using IE connecting to Zope over SSL (HTTPS), and you receive
- errors that the file could not be opened or downloaded, or you receive
- errors from External Editor that the file was not found try the following:
-
- - Go to Tools->Internet Options and click on the advanced tab
-
- - Under security (near the bottom) uncheck "Do not save encrypted files
- to disk"
-
- - If you are using IE and you receive an error from the helper app like
- "FATAL ERROR [Errno 2] No such file or directory...." it means that IE is
- refusing to save the temp file to disk. This is usually caused by a cache
- control header such as "Cache-Control: no-cache". To use external editor
- with IE you must prevent this header from being set. Some versions of
- CookieCrumber inject this header for all authenticated requests. You can
- fix this by changing the CC configuration on its properties tab in the
- ZMI to use another cache control value such as "private".
-
Deleted: Products.ExternalEditor/trunk/Products/ExternalEditor/README.txt
===================================================================
--- Products.ExternalEditor/trunk/Products/ExternalEditor/README.txt 2008-05-03 18:58:19 UTC (rev 86271)
+++ Products.ExternalEditor/trunk/Products/ExternalEditor/README.txt 2008-05-03 19:03:45 UTC (rev 86272)
@@ -1,370 +0,0 @@
-Zope External Editor
-
- The Zope External Editor is a new way to integrate Zope more seamlessly with
- client-side tools. It has the following features:
-
- - Edit objects locally, directly from the ZMI.
-
- - Works with any graphical editor application that can open a file from the
- command line, including: emacs, gvim, xemacs, nedit, gimp, etc.
-
- - Automatically saves changes back to Zope without ending the editing session.
-
- - Associate any client-side editor application with any Zope object by
- meta-type or content-type. Both text and binary object content can be
- edited.
-
- - Locks objects while they are being edited. Automatically unlocks them when
- the editing session ends.
-
- - Can add file extensions automatically to improve syntax highlighting or
- file type detection.
-
- - Works with basic auth, cookie auth and Zope versions. Credentials are
- automatically passed down to the helper application. No need to
- reauthenticate.
-
- - https support (Openssl required)
-
- Using It
-
- Use of the application is about as easy as using the ZMI once your browser
- is configured (see the installation instructions). To edit an object
- externally, just click on the pencil icon next to the object in the ZMI.
- The object will be downloaded and opened using the editor application you
- have chosen (you will be prompted the first time to choose an editor).
-
- You edit the object just like any other file. When you save the changes in
- your editor, they are automatically uploaded back to Zope in the
- background. While the object is open in your editor, it is locked in Zope
- to prevent concurrent editing. When you end your editing session (ie you
- close your editor) the object is unlocked.
-
- How it Works
-
- Ok, so this all sounds a bit too good to be true, no? So how the heck does
- it work anyway? First I'll give you a block diagram::
-
- +------------+ +------------+ +---------+ +------+
- | Editor App | <-- | Helper App | <-- | Browser | <-/ /- | Zope |
- +------------+ +------------+ +---------+ +------+
- ^ ^ ^ ^
- \ / \ /
- v v -----------------------/ /----
- -------
- / Local \
- \ File /
- -------
-
- Now the key to getting this to work is solving the problem that the editor
- cannot know about Zope, and must only deal with local files. Also, there is
- no standard way to communication with editors, so the only communication
- channel can be the local file which contains the object's content or code.
-
- It is trivial to get the browser to fire up your editor when you download
- a particular type of data with your browser. But that does you little good,
- since the browser no longer involves itself once the data is downloaded. It
- just creates a temp file and fires off the registered application, passing
- it the file path. Once the editor is running, it is only aware of the local
- file, and has no concept of where it originated from.
-
- To solve this problem, I have developed a helper application whose job is
- essentially two-fold:
-
- - Determine the correct editor to launch for a given Zope object
-
- - Get the data back into Zope when the changes are saved
-
- So, let's take a step by step look at how it works:
-
- 1. You click on the external editor link (the pencil icon) in the Zope
- management interface.
-
- 2. The product code on the server creates a response that encapsulates the
- necessary meta-data (URL, meta-type, content-type, cookies, etc) and the
- content of the Zope object, which can be text or binary data. The
- response has the contrived content-type "application/x-zope-edit".
-
- 3. The browser receives the request, and finds our helper application
- registered for "application/x-zope-edit". It saves the response data
- locally to disk and spawns the helper app to process it.
-
- 4. The helper app, reads its config file and the response data file. The
- meta-data from the file is parsed and the content is copied to a new
- temporary file. The appropriate editor program is determined based on
- the data file and the configuration.
-
- 5. The editor is launched as a sub-process of the helper app, passing it the
- file containing the content data.
-
- 6. If so configured, the helper app sends a WebDAV lock request back to Zope
- to lock the object.
-
- 7. Every so often (if so configured), the helper app stats the content file
- to see if it has been changed. If so, it sends an HTTP PUT request
- back to Zope containing the new data.
-
- 8. When the editor is closed, the content file is checked one more time and
- uploaded if it has changed. Then a WebDAV unlock request is sent to Zope.
-
- 9. The helper application exits.
-
- Configuration
-
- The helper application supports several configuration options, each of
- which can be triggered in any combination of object meta-type, content-type
- or domain. This allows you to create appropriate behavior for different
- types of Zope objects and content or even different servers. The
- configuration file is stored in the file "~/.zope-external-edit" (Unix) or
- "~\ZopeEdit.ini" (Windows). If no configuration file is found when the
- helper application starts, a default config file is created in your home
- directory.
-
- The configuration file follows the standard Python ConfigParser format,
- which is pretty much like the old .ini file format from windows. The file
- consists of sections and options in the following format::
-
- [section 1]
- option1 = value
- option2 = value
-
- [section 2]
- ...
-
- Options
-
- The available options for all sections of the config file are:
-
- editor -- Command line or plugin name used to invoke the editor
- application. On Windows, if no editor setting is found for an object you
- edit, the helper app will search the file type registry for an
- appropriate editor based on the content-type or file extension of the
- object (which can be specified using the extension option below). By
- default, the file path of the local file being edited is appended to
- this command line. To insert the file path in the middle of your
- command, use "$1" for Unix and "%1" for Windows respectively.
-
- save_interval -- (float) The interval in seconds that the helper
- application checks the edited file for changes.
-
- use_locks -- (1 or 0) Whether to use WebDAV locking. The user editing must
- have the proper WebDAV related permissions for this to work.
-
- always_borrow_locks -- (1 or 0) When use_locks is enabled this features
- suppresses warnings when trying to edit an object you have already locked.
- When enabled, external editor will always "borrow" the existing lock token
- instead of doing the locking itself. This is useful when using CMFStaging
- for instance. If omitted, this option defaults to 0.
-
- cleanup_files -- (1 or 0) Whether to delete the temp files created.
- WARNING the temp file coming from the browser contains authentication
- information and therefore setting this to 0 is a security risk,
- especially on shared machines. If set to 1, that file is deleted at the
- earliest opportunity, before the editor is even spawned. Set to 0 for
- debugging only.
-
- extension -- (text) The file extension to add to the content file. Allows
- better handling of images and can improve syntax highlighting.
-
- temp_dir -- (path) Path to store local copies of object data being
- edited. Defaults to operating system temp directory. *Note: this setting
- has no apparent effect on Windows* 8^(
-
- long_file_name -- (1 or 0) Whether to include the whole path to the
- object including the hostname in the file name (the default) or just the
- id of the object being edited. Turn this option off for shorter file
- names in your editors, and for editors that don't like long names.
-
- file_name_separator -- (string) Character or characters used to separate
- path elements in long files names used by external editor. Defaults to
- a comma (,). This must be a legal character for use in file names on
- your platorm (i.e., don't use a path separator character!). This option
- is ignored if 'long_file_name' is set to 0.
-
- Sections
-
- The sections of the configuration file specify the types of objects and
- content that the options beneath them apply to.
-
- There is only one mandatory section '[general]', which should define all
- of the above options that do not have a default value. If no other
- section defines an option for a given object, the general settings are
- used.
-
- Additional sections can apply to a particular domain, content-type or
- meta-type. Since objects can have all these properties, the options are
- applied in this order of precedence.
-
- - '[content-type:text/html]' -- Options by whole content-type come first
-
- - '[content-type:text/*]' -- Options by major content-type come second.
-
- - '[meta-type:File]' -- Options by Zope meta-type are third.
-
- - '[domain:www.mydomain.com]' -- Options by domain follow. Several
- sections can be added for each domain level if desired.
-
- - '[general]' -- General options are last.
-
- This scheme allows you to specify an extension by content-type, the
- editor by meta-type, the locking settings by domain and the remaining
- options under general for a given object.
-
- Editor Plugins
-
- For tighter client-side integration, external editor has a plugin system
- that allows it to interact directly with supported applications.
-
- On Windows this generally means using COM to invoke the application, open
- the content file and wait for the user to save and close the file. Because
- each application has different remote scripting capabilities and APIs,
- editor specific plugins must be written tailored to each supported
- application and platform.
-
- This system allows external editor to efficiently connect to running
- applications without relaunching them and therefore fully support MDI
- environments. The following applications currently have plugin support::
-
- Application Platform Plugin Module Name(s)
- ===================================================
- HomeSite Windows homesite5, homesite
- Dreamweaver Windows dreamweaver
- Photoshop Windows photoshp, photoshop
- MS Word Windows winword, word
- MS Excel Windows excel
- MS Powerpoint Windows powerpnt, powerpoint
-
- External editor will attempt to load a plugin for any application before
- using the general editor control method. It does this by matching the
- name of the application executable file (sans extension) in the editor
- command line with the available plugins.
-
- Because plugins do not require the path of the editor application to work,
- you can simply specify the plugin module name for your editor in the
- configuration file if desired. For example, to specify Photoshop for all
- image files, use add the following section to your config file
- (ZopeEdit.ini on Windows)::
-
- [content-type:image/*]
- editor=photoshop
-
- This is only a shortcut and specifying the full application path will
- still use the plugin where possible.
-
- Plugin Notes
-
- Photoshop -- Photoshop's COM API is quite limited, and external editor
- cannot detect that you have closed a file until you exit the entire
- application (it can still detect saves). Therefore you may want to turn
- off DAV locking (use_locks=0) or borrow locks (always_borrow_locks=1)
- when using it.
-
- Dreamweaver -- External editor cannot detect when you have finished
- editing a single file. Objects edited with Dreamweaver will remain
- locked on the server until you exit the application. As with Photoshop
- above, you may want to turn off locking for Dreamweaver.
-
- If your favorite editor needs a plugin because the general support is
- not good enough, please let me know. Keep in mind that I must be able to
- run a copy of the application in order to develop a plugin for it. So,
- unless the application is free, or a full demo is available for download
- I won't be able to help much. Plugins are not difficult to write, and I
- encourage you to write one for your favorite editor, start by reading
- one of the existing ones. I am happy to include third-party plugins with
- the distribution.
-
- Permissions
-
- External editing is governed by the permission "Use external editor".
- Users with this permission can launch external editor from editable
- objects. In order to save changes, users will need additional permissions
- appropriate for the objects they are editing.
-
- If users wish to use the built-in locking support, they must have the
- "WebDAV access", "WebDAV Lock items" and "WebDAV Unlock items" permissions
- for the objects they are editing.
-
- If these permissions are not set in Zope, then the helper application will
- receive unauthorized errors from Zope which it will present to the user.
-
- Integrating with External Editor
-
- The external editor product in zope installs a globally available object
- that can format objects accessible through FTP/DAV for use by the helper
- application. You can take advantage of this functionality easily in your
- own content management applications.
-
- Say you have an FTP editable object, "document", in a Zope folder named
- "my_stuff". The URL to view the object would be::
-
- http://zopeserver/my_stuff/document
-
- The URL to kick off the external editor on this document would be::
-
- http://zopeserver/my_stuff/externalEdit_/document
-
- Now, this may look a bit odd to you if you are used to tacking views on to
- the end of the URL. Because 'externalEdit_' is required to work on Python
- Scripts and Page Templates, which swallow the remaining path segments on
- the URL following themselves, you must put the call to 'externalEdit_'
- *directly before* the object to be edited. You could do this in ZPT using
- some TAL in a Page Template like::
-
- <a href='edit'
- attributes='href
- string:${here/aq_parent/absolute_url}/externalEdit_/${here/getId}'>
- Edit Locally
- </a>
-
- As an alternative, you can also pass the path the object you want to edit
- directly to the externalEdit_ object when you call its index_html method.
- It can be called either directly by URL or from a python script.
- externalEdit_ will return the proper response data for the object to edit.
- Here are some examples::
-
- http://zopeserver/externalEdit_?path=/my_stuff/document
-
- return context.externalEdit_.index_html(
- context.REQUEST, context.RESPONSE, path='/my_stuff/document')
-
- When integrating External Editor with a CMS that already uses DAV
- locks, it will, by default allow users to borrow locks made on the server
- after displaying a confirmation dialog box. Although you can make this
- automatic by specifying 'always_borrow_locks = 1' in the External Editor
- config file, it may be desireable to make this the default behavior when
- using that server. To facilitate this, you can specify that locks
- should be automatically borrowed in the URL (New in 0.7)::
-
- http://zopeserver/my_stuff/externalEdit_/document?borrow_lock=1
-
- External Editor also defines a global method that you can call to insert
- pencil icon links for appropriate objects. The method automatically checks
- if the object supports external editing and whether the user has the "Use
- external editor" permission for that object. If both are true, it returns
- the HTML code to insert the external editor icon link. Otherwise it returns
- an empty string.
-
- The method is 'externalEditLink_(object)'. The object argument is the
- object to create the link for if appropriate. Here is some example page
- template code that inserts links to objects in the current folder and the
- external editor icon where appropriate::
-
- <div tal:repeat="object here/objectValues">
- <a href="#"
- tal:attributes="href object/absolute_url"
- tal:content="object/title_or_id">Object Title</a>
- <span tal:replace="structure python:here.externalEditLink_(object)" />
- </div>
-
- Conclusion
-
- I hope you enjoy using this software. If you have any comments, suggestions
- or would like to report a bug, send an email to the author:
-
- Casey Duncan
-
- casey_duncan at yahoo.com
-
---
-
-(c) 2003, Casey Duncan and Zope Corporation. All rights reserved.
Deleted: Products.ExternalEditor/trunk/Products/ExternalEditor/setup.py
===================================================================
--- Products.ExternalEditor/trunk/Products/ExternalEditor/setup.py 2008-05-03 18:58:19 UTC (rev 86271)
+++ Products.ExternalEditor/trunk/Products/ExternalEditor/setup.py 2008-05-03 19:03:45 UTC (rev 86272)
@@ -1,25 +0,0 @@
-from setuptools import setup, find_packages
-from zopeedit import __version__
-
-
-setup(name='Products.ExternalEditor',
- version=__version__,
- description="Zope External Editor",
- classifiers=[
- 'Framework :: Zope2',
- ],
- author="Casey Duncan and Contributors, maintained by Chris McDonough",
- author_email="chrism at plope.com",
- url="http://www.plope.com/software/ExternalEditor",
- packages=find_packages(),
- namespace_packages=['Products'],
- include_package_data=True,
- zip_safe=False,
- install_requires=[
- 'setuptools',
- ],
- entry_points="""
- [console_scripts]
- zopeedit=Products.ExternalEditor.zopeedit:main
- """,
- )
Added: Products.ExternalEditor/trunk/Products/__init__.py
===================================================================
--- Products.ExternalEditor/trunk/Products/__init__.py (rev 0)
+++ Products.ExternalEditor/trunk/Products/__init__.py 2008-05-03 19:03:45 UTC (rev 86272)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Property changes on: Products.ExternalEditor/trunk/Products/__init__.py
___________________________________________________________________
Name: svn:eol-style
+ native
Copied: Products.ExternalEditor/trunk/README.txt (from rev 86271, Products.ExternalEditor/trunk/Products/ExternalEditor/README.txt)
===================================================================
--- Products.ExternalEditor/trunk/README.txt (rev 0)
+++ Products.ExternalEditor/trunk/README.txt 2008-05-03 19:03:45 UTC (rev 86272)
@@ -0,0 +1,370 @@
+Zope External Editor
+
+ The Zope External Editor is a new way to integrate Zope more seamlessly with
+ client-side tools. It has the following features:
+
+ - Edit objects locally, directly from the ZMI.
+
+ - Works with any graphical editor application that can open a file from the
+ command line, including: emacs, gvim, xemacs, nedit, gimp, etc.
+
+ - Automatically saves changes back to Zope without ending the editing session.
+
+ - Associate any client-side editor application with any Zope object by
+ meta-type or content-type. Both text and binary object content can be
+ edited.
+
+ - Locks objects while they are being edited. Automatically unlocks them when
+ the editing session ends.
+
+ - Can add file extensions automatically to improve syntax highlighting or
+ file type detection.
+
+ - Works with basic auth, cookie auth and Zope versions. Credentials are
+ automatically passed down to the helper application. No need to
+ reauthenticate.
+
+ - https support (Openssl required)
+
+ Using It
+
+ Use of the application is about as easy as using the ZMI once your browser
+ is configured (see the installation instructions). To edit an object
+ externally, just click on the pencil icon next to the object in the ZMI.
+ The object will be downloaded and opened using the editor application you
+ have chosen (you will be prompted the first time to choose an editor).
+
+ You edit the object just like any other file. When you save the changes in
+ your editor, they are automatically uploaded back to Zope in the
+ background. While the object is open in your editor, it is locked in Zope
+ to prevent concurrent editing. When you end your editing session (ie you
+ close your editor) the object is unlocked.
+
+ How it Works
+
+ Ok, so this all sounds a bit too good to be true, no? So how the heck does
+ it work anyway? First I'll give you a block diagram::
+
+ +------------+ +------------+ +---------+ +------+
+ | Editor App | <-- | Helper App | <-- | Browser | <-/ /- | Zope |
+ +------------+ +------------+ +---------+ +------+
+ ^ ^ ^ ^
+ \ / \ /
+ v v -----------------------/ /----
+ -------
+ / Local \
+ \ File /
+ -------
+
+ Now the key to getting this to work is solving the problem that the editor
+ cannot know about Zope, and must only deal with local files. Also, there is
+ no standard way to communication with editors, so the only communication
+ channel can be the local file which contains the object's content or code.
+
+ It is trivial to get the browser to fire up your editor when you download
+ a particular type of data with your browser. But that does you little good,
+ since the browser no longer involves itself once the data is downloaded. It
+ just creates a temp file and fires off the registered application, passing
+ it the file path. Once the editor is running, it is only aware of the local
+ file, and has no concept of where it originated from.
+
+ To solve this problem, I have developed a helper application whose job is
+ essentially two-fold:
+
+ - Determine the correct editor to launch for a given Zope object
+
+ - Get the data back into Zope when the changes are saved
+
+ So, let's take a step by step look at how it works:
+
+ 1. You click on the external editor link (the pencil icon) in the Zope
+ management interface.
+
+ 2. The product code on the server creates a response that encapsulates the
+ necessary meta-data (URL, meta-type, content-type, cookies, etc) and the
+ content of the Zope object, which can be text or binary data. The
+ response has the contrived content-type "application/x-zope-edit".
+
+ 3. The browser receives the request, and finds our helper application
+ registered for "application/x-zope-edit". It saves the response data
+ locally to disk and spawns the helper app to process it.
+
+ 4. The helper app, reads its config file and the response data file. The
+ meta-data from the file is parsed and the content is copied to a new
+ temporary file. The appropriate editor program is determined based on
+ the data file and the configuration.
+
+ 5. The editor is launched as a sub-process of the helper app, passing it the
+ file containing the content data.
+
+ 6. If so configured, the helper app sends a WebDAV lock request back to Zope
+ to lock the object.
+
+ 7. Every so often (if so configured), the helper app stats the content file
+ to see if it has been changed. If so, it sends an HTTP PUT request
+ back to Zope containing the new data.
+
+ 8. When the editor is closed, the content file is checked one more time and
+ uploaded if it has changed. Then a WebDAV unlock request is sent to Zope.
+
+ 9. The helper application exits.
+
+ Configuration
+
+ The helper application supports several configuration options, each of
+ which can be triggered in any combination of object meta-type, content-type
+ or domain. This allows you to create appropriate behavior for different
+ types of Zope objects and content or even different servers. The
+ configuration file is stored in the file "~/.zope-external-edit" (Unix) or
+ "~\ZopeEdit.ini" (Windows). If no configuration file is found when the
+ helper application starts, a default config file is created in your home
+ directory.
+
+ The configuration file follows the standard Python ConfigParser format,
+ which is pretty much like the old .ini file format from windows. The file
+ consists of sections and options in the following format::
+
+ [section 1]
+ option1 = value
+ option2 = value
+
+ [section 2]
+ ...
+
+ Options
+
+ The available options for all sections of the config file are:
+
+ editor -- Command line or plugin name used to invoke the editor
+ application. On Windows, if no editor setting is found for an object you
+ edit, the helper app will search the file type registry for an
+ appropriate editor based on the content-type or file extension of the
+ object (which can be specified using the extension option below). By
+ default, the file path of the local file being edited is appended to
+ this command line. To insert the file path in the middle of your
+ command, use "$1" for Unix and "%1" for Windows respectively.
+
+ save_interval -- (float) The interval in seconds that the helper
+ application checks the edited file for changes.
+
+ use_locks -- (1 or 0) Whether to use WebDAV locking. The user editing must
+ have the proper WebDAV related permissions for this to work.
+
+ always_borrow_locks -- (1 or 0) When use_locks is enabled this features
+ suppresses warnings when trying to edit an object you have already locked.
+ When enabled, external editor will always "borrow" the existing lock token
+ instead of doing the locking itself. This is useful when using CMFStaging
+ for instance. If omitted, this option defaults to 0.
+
+ cleanup_files -- (1 or 0) Whether to delete the temp files created.
+ WARNING the temp file coming from the browser contains authentication
+ information and therefore setting this to 0 is a security risk,
+ especially on shared machines. If set to 1, that file is deleted at the
+ earliest opportunity, before the editor is even spawned. Set to 0 for
+ debugging only.
+
+ extension -- (text) The file extension to add to the content file. Allows
+ better handling of images and can improve syntax highlighting.
+
+ temp_dir -- (path) Path to store local copies of object data being
+ edited. Defaults to operating system temp directory. *Note: this setting
+ has no apparent effect on Windows* 8^(
+
+ long_file_name -- (1 or 0) Whether to include the whole path to the
+ object including the hostname in the file name (the default) or just the
+ id of the object being edited. Turn this option off for shorter file
+ names in your editors, and for editors that don't like long names.
+
+ file_name_separator -- (string) Character or characters used to separate
+ path elements in long files names used by external editor. Defaults to
+ a comma (,). This must be a legal character for use in file names on
+ your platorm (i.e., don't use a path separator character!). This option
+ is ignored if 'long_file_name' is set to 0.
+
+ Sections
+
+ The sections of the configuration file specify the types of objects and
+ content that the options beneath them apply to.
+
+ There is only one mandatory section '[general]', which should define all
+ of the above options that do not have a default value. If no other
+ section defines an option for a given object, the general settings are
+ used.
+
+ Additional sections can apply to a particular domain, content-type or
+ meta-type. Since objects can have all these properties, the options are
+ applied in this order of precedence.
+
+ - '[content-type:text/html]' -- Options by whole content-type come first
+
+ - '[content-type:text/*]' -- Options by major content-type come second.
+
+ - '[meta-type:File]' -- Options by Zope meta-type are third.
+
+ - '[domain:www.mydomain.com]' -- Options by domain follow. Several
+ sections can be added for each domain level if desired.
+
+ - '[general]' -- General options are last.
+
+ This scheme allows you to specify an extension by content-type, the
+ editor by meta-type, the locking settings by domain and the remaining
+ options under general for a given object.
+
+ Editor Plugins
+
+ For tighter client-side integration, external editor has a plugin system
+ that allows it to interact directly with supported applications.
+
+ On Windows this generally means using COM to invoke the application, open
+ the content file and wait for the user to save and close the file. Because
+ each application has different remote scripting capabilities and APIs,
+ editor specific plugins must be written tailored to each supported
+ application and platform.
+
+ This system allows external editor to efficiently connect to running
+ applications without relaunching them and therefore fully support MDI
+ environments. The following applications currently have plugin support::
+
+ Application Platform Plugin Module Name(s)
+ ===================================================
+ HomeSite Windows homesite5, homesite
+ Dreamweaver Windows dreamweaver
+ Photoshop Windows photoshp, photoshop
+ MS Word Windows winword, word
+ MS Excel Windows excel
+ MS Powerpoint Windows powerpnt, powerpoint
+
+ External editor will attempt to load a plugin for any application before
+ using the general editor control method. It does this by matching the
+ name of the application executable file (sans extension) in the editor
+ command line with the available plugins.
+
+ Because plugins do not require the path of the editor application to work,
+ you can simply specify the plugin module name for your editor in the
+ configuration file if desired. For example, to specify Photoshop for all
+ image files, use add the following section to your config file
+ (ZopeEdit.ini on Windows)::
+
+ [content-type:image/*]
+ editor=photoshop
+
+ This is only a shortcut and specifying the full application path will
+ still use the plugin where possible.
+
+ Plugin Notes
+
+ Photoshop -- Photoshop's COM API is quite limited, and external editor
+ cannot detect that you have closed a file until you exit the entire
+ application (it can still detect saves). Therefore you may want to turn
+ off DAV locking (use_locks=0) or borrow locks (always_borrow_locks=1)
+ when using it.
+
+ Dreamweaver -- External editor cannot detect when you have finished
+ editing a single file. Objects edited with Dreamweaver will remain
+ locked on the server until you exit the application. As with Photoshop
+ above, you may want to turn off locking for Dreamweaver.
+
+ If your favorite editor needs a plugin because the general support is
+ not good enough, please let me know. Keep in mind that I must be able to
+ run a copy of the application in order to develop a plugin for it. So,
+ unless the application is free, or a full demo is available for download
+ I won't be able to help much. Plugins are not difficult to write, and I
+ encourage you to write one for your favorite editor, start by reading
+ one of the existing ones. I am happy to include third-party plugins with
+ the distribution.
+
+ Permissions
+
+ External editing is governed by the permission "Use external editor".
+ Users with this permission can launch external editor from editable
+ objects. In order to save changes, users will need additional permissions
+ appropriate for the objects they are editing.
+
+ If users wish to use the built-in locking support, they must have the
+ "WebDAV access", "WebDAV Lock items" and "WebDAV Unlock items" permissions
+ for the objects they are editing.
+
+ If these permissions are not set in Zope, then the helper application will
+ receive unauthorized errors from Zope which it will present to the user.
+
+ Integrating with External Editor
+
+ The external editor product in zope installs a globally available object
+ that can format objects accessible through FTP/DAV for use by the helper
+ application. You can take advantage of this functionality easily in your
+ own content management applications.
+
+ Say you have an FTP editable object, "document", in a Zope folder named
+ "my_stuff". The URL to view the object would be::
+
+ http://zopeserver/my_stuff/document
+
+ The URL to kick off the external editor on this document would be::
+
+ http://zopeserver/my_stuff/externalEdit_/document
+
+ Now, this may look a bit odd to you if you are used to tacking views on to
+ the end of the URL. Because 'externalEdit_' is required to work on Python
+ Scripts and Page Templates, which swallow the remaining path segments on
+ the URL following themselves, you must put the call to 'externalEdit_'
+ *directly before* the object to be edited. You could do this in ZPT using
+ some TAL in a Page Template like::
+
+ <a href='edit'
+ attributes='href
+ string:${here/aq_parent/absolute_url}/externalEdit_/${here/getId}'>
+ Edit Locally
+ </a>
+
+ As an alternative, you can also pass the path the object you want to edit
+ directly to the externalEdit_ object when you call its index_html method.
+ It can be called either directly by URL or from a python script.
+ externalEdit_ will return the proper response data for the object to edit.
+ Here are some examples::
+
+ http://zopeserver/externalEdit_?path=/my_stuff/document
+
+ return context.externalEdit_.index_html(
+ context.REQUEST, context.RESPONSE, path='/my_stuff/document')
+
+ When integrating External Editor with a CMS that already uses DAV
+ locks, it will, by default allow users to borrow locks made on the server
+ after displaying a confirmation dialog box. Although you can make this
+ automatic by specifying 'always_borrow_locks = 1' in the External Editor
+ config file, it may be desireable to make this the default behavior when
+ using that server. To facilitate this, you can specify that locks
+ should be automatically borrowed in the URL (New in 0.7)::
+
+ http://zopeserver/my_stuff/externalEdit_/document?borrow_lock=1
+
+ External Editor also defines a global method that you can call to insert
+ pencil icon links for appropriate objects. The method automatically checks
+ if the object supports external editing and whether the user has the "Use
+ external editor" permission for that object. If both are true, it returns
+ the HTML code to insert the external editor icon link. Otherwise it returns
+ an empty string.
+
+ The method is 'externalEditLink_(object)'. The object argument is the
+ object to create the link for if appropriate. Here is some example page
+ template code that inserts links to objects in the current folder and the
+ external editor icon where appropriate::
+
+ <div tal:repeat="object here/objectValues">
+ <a href="#"
+ tal:attributes="href object/absolute_url"
+ tal:content="object/title_or_id">Object Title</a>
+ <span tal:replace="structure python:here.externalEditLink_(object)" />
+ </div>
+
+ Conclusion
+
+ I hope you enjoy using this software. If you have any comments, suggestions
+ or would like to report a bug, send an email to the author:
+
+ Casey Duncan
+
+ casey_duncan at yahoo.com
+
+--
+
+(c) 2003, Casey Duncan and Zope Corporation. All rights reserved.
Copied: Products.ExternalEditor/trunk/docs/INSTALL-UNIX.txt (from rev 86271, Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-UNIX.txt)
===================================================================
--- Products.ExternalEditor/trunk/docs/INSTALL-UNIX.txt (rev 0)
+++ Products.ExternalEditor/trunk/docs/INSTALL-UNIX.txt 2008-05-03 19:03:45 UTC (rev 86272)
@@ -0,0 +1,115 @@
+Zope External Editor Installation
+
+ Installation is two-fold:
+
+ - Install the ExternalEditor product in Zope.
+
+ - Install the helper application on the client(s) and configure the browser(s)
+
+ Product Installation
+
+ Download the archive and extract it into your Zope products directory. Then
+ restart Zope. If you succeeded, you'll notice pencil icons next to the
+ external editable objects in the Zope management screens.
+
+ Helper Application Installation
+
+ Dependancies: Python 2.2, Tk
+
+ Download the helper app archive and extract it. Enter the ExternalEditor
+ directory and run (You may need to be root)::
+
+ python2.2 setup.py install
+
+ This will install the zopeedit.py executable (in /usr/local/bin on my
+ system). Alternately, you can just copy zopeedit.py to the location of
+ your choosing.
+
+ Once you have the helper application installed, you need to configure your
+ browser to fire it off appropriately. To do so, create an entry in the
+ helper applications list for your browser(s) that associates the mime type
+ "application/x-zope-edit" with the helper application.
+
+ Here are the step-by-step configuration instructions for Mozilla:
+
+ - From the Edit menu choose Preferences
+
+ - Under Navigator choose Helper Applications
+
+ - Click on the New Type button
+
+ - Enter a description, like "Zope Editor"
+
+ - For MIME type, enter application/x-zope-edit
+
+ - for Application, select the helper application python file
+
+ Here are instructions for Konqueror (provided by Mark Bucciarelii)
+
+ - Settings -> Configure Konqueror
+
+ - Select the File Associations icon
+
+ - Add a new File Assocation: group = application, type = x-zope-edit
+
+ - This association should now be currently selected in the Known Types
+ tree control
+
+ - Add a description, if you like
+
+ - Click the Add button in the Application Preference Order section.
+ Browse to select /usr/local/bin/zopeedit.py
+
+ Tips
+
+ The helper application can run any editor program that does not detach
+ itself from the controlling process.
+
+ To get terminal based editors to work, you need to spawn them inside an
+ xterm. to do this, use something like the following for the editor option::
+
+ editor = xterm -e vi
+
+ You can of course modify the above to fire up your favorite terminal and
+ editor or add any command line arguments you want.
+
+ As for editors that insist on detaching from the controlling process (gvim
+ does this by default), you need to configure them so that they do not
+ detach. For gvim you could use::
+
+ editor = gvim -f
+
+ Troubleshooting
+
+ If the helper app won't launch try the following suggestions:
+
+ - Make sure you have Tk installed properly. To test this, bring up Python
+ in a terminal and enter 'import Tkinter'. If it throws an exception,
+ that is your problem.
+
+ - Netscape 4 users, add a "%s" at the end of the application command line.
+ It appears the Netscape likes to alert you with spurious things coming
+ from stderr. I'll see if I can come up with a solution to that.
+
+ - Make sure the file is marked as executable for your user
+ ('chmod +x zopeedit.py' should do it)
+
+ - Make sure the browser is properly configured. Use a full path to the
+ helper app.
+
+ - Make sure you are using a graphical editor (that uses X windows). To use
+ a terminal based editor (like vi), setup the editor option to spawn it
+ inside an xterm. See tips above.
+
+ - Try downloading and saving the external editor data to a file manually
+ (right click on the pencil icon). Then try running the helper app from
+ the command line, passing it the path to this file. If it runs, then
+ there is something wrong with the browser configuration. If not, then it
+ should output a traceback to your terminal. Email me a copy of this
+ traceback, and the data file and I will try to fix it.
+
+ - If the editor launches, but the helper app complains that it lost its
+ connection to the editor process, this is because your editor detached
+ from the parent process (the helper app). Configure the editor such that
+ it does not do this. Unfortunately this prevents you from using a
+ multi-headed text edit server (like nedit and emacs can provide).
Copied: Products.ExternalEditor/trunk/docs/INSTALL-WIN32.txt (from rev 86271, Products.ExternalEditor/trunk/Products/ExternalEditor/INSTALL-WIN32.txt)
===================================================================
--- Products.ExternalEditor/trunk/docs/INSTALL-WIN32.txt (rev 0)
+++ Products.ExternalEditor/trunk/docs/INSTALL-WIN32.txt 2008-05-03 19:03:45 UTC (rev 86272)
@@ -0,0 +1,139 @@
+Zope External Editor Installation
+
+ Installation is two-fold:
+
+ - Install the ExternalEditor product in Zope.
+
+ - Install the helper application on the client(s) and configure the browser(s)
+
+ Product Installation
+
+ Download the archive and extract it into your Zope products directory. Then
+ restart Zope. If you succeeded, you'll notice pencil icons next to the
+ external editable objects in the Zope management screens.
+
+ Helper Application Installation (Binary)
+
+ The binary distribution for Windows includes everything you need to
+ to install the helper application. It is precompiled to a native Windows
+ executable using Python 2.3.4, Pythonwin build 163 and Py2exe 0.5.
+ Everything is included for you in one package.
+
+ Just run the setup executable to install and configure the helper app
+ for use with Internet Explorer. You can also register it (zopeedit.exe)
+ with other browsers directly.
+
+ You can download the binary installer from Zope.org at::
+
+ http://www.zope.org/Members/Caseman/ExternalEditor
+
+ Helper Application Installation (Source)
+
+ Dependancies: Python 2.2 or newer, Pythonwin extensions (win32all)
+
+ *Note: This configuration is for Windows 98, for easier setup on XP and
+ Windows 2000, use the binary distribution*
+
+ Download the helper app archive and extract into the directory where you
+ want to install it: C:\Program Files\ZopeEdit might be a good choice.
+
+ Once you have the help application installed, you need to configure your
+ browser to fire it off appropriately. To do so, create an entry in the
+ helper applications list for your browser(s) that associates the mime type
+ "application/x-zope-edit" with the helper application.
+
+ To do this for Internet Explorer and other recent browsers, you must
+ register the external editor file type with Windows:
+
+ - From the "My Computer" window, choose "Folder Options" from the "View"
+ menu.
+
+ - In the "File Types" tab, click on the "New Type" button.
+
+ - Enter a description such as "Zope External Editor"
+
+ - Enter an extension not otherwise used on your system (.zope is usually a
+ good choice, the exact value is not important)
+
+ - For content type (MIME) enter: application/x-zope-edit
+
+ - Under "Actions", click on the "New" button.
+
+ - For Action enter: Open
+
+ - For application used, enter or browse to the path to pythonw.exe
+ (wherever you installed python2.3, such as C:\Python23).
+ Use quotes around the path if it includes spaces. Following the path to
+ Python, enter the path to the helper application file, in quotes if
+ needed. Follow it with: "%1" (in quotes). On my system it looks like::
+
+ '"C:\Python23\pythonw.exe" C:\Casey\ExternalEditor\zopeedit.py "%1"
+
+ - Click OK.
+
+ - Uncheck "Confirm open after download"
+
+ - Click OK, you should now see your new file type.
+
+ Tips
+
+ The helper application can run any editor program that does not detach
+ itself from the controlling process.
+
+ As for editors that insist on detaching from the controlling process
+ (EditPad does this by default), you need to configure them so that they do
+ not detach. For EditPad you could use::
+
+ editor = C:\Program Files\EditPadClassic\EditPad.exe /newinstance
+
+ Check the command line options of your favorite editor to see if it
+ supports this.
+
+ Troubleshooting
+
+ If the helper app won't launch or you receive errors try the following
+ suggestions:
+
+ - Make sure you have Pythonwin installed properly. To test this, bring up
+ the Python console and type in 'import win32api'. If it throws an
+ exception, you need to install Pythonwin.
+
+ - Netscape 4 users, add a "%s" at the end of the application command line.
+ It appears the Netscape likes to alert you with spurious things coming
+ from stderr. I'll see if I can come up with a solution to that.
+
+ - Make sure the file type is properly configured to launch the helper app
+ when it receives files of type "application/x-zope-edit".
+
+ - Try downloading and saving the external editor data to a file manually
+ (right click on the pencil icon). Then try running the helper app from
+ the command line, passing it the path to this file. If it runs, then
+ there is something wrong with the browser/system configuration. If not,
+ then it should output a traceback to your terminal. Email me a copy of
+ this traceback, and the data file and I will try to fix it.
+
+ - If the editor launches, but the helper app complains that it lost its
+ connection to the editor process, this is because your editor detached
+ from the parent process (the helper app). Configure the editor such that
+ it does not do this. Unfortunately, many MDI applications do this and
+ cannot be configured otherwise. To solve this problem, a plug-in must
+ be developed for the application. See the README file for more details.
+
+ - If you are using IE connecting to Zope over SSL (HTTPS), and you receive
+ errors that the file could not be opened or downloaded, or you receive
+ errors from External Editor that the file was not found try the following:
+
+ - Go to Tools->Internet Options and click on the advanced tab
+
+ - Under security (near the bottom) uncheck "Do not save encrypted files
+ to disk"
+
+ - If you are using IE and you receive an error from the helper app like
+ "FATAL ERROR [Errno 2] No such file or directory...." it means that IE is
+ refusing to save the temp file to disk. This is usually caused by a cache
+ control header such as "Cache-Control: no-cache". To use external editor
+ with IE you must prevent this header from being set. Some versions of
+ CookieCrumber inject this header for all authenticated requests. You can
+ fix this by changing the CC configuration on its properties tab in the
+ ZMI to use another cache control value such as "private".
+
Copied: Products.ExternalEditor/trunk/setup.py (from rev 86271, Products.ExternalEditor/trunk/Products/ExternalEditor/setup.py)
===================================================================
--- Products.ExternalEditor/trunk/setup.py (rev 0)
+++ Products.ExternalEditor/trunk/setup.py 2008-05-03 19:03:45 UTC (rev 86272)
@@ -0,0 +1,25 @@
+from setuptools import setup, find_packages
+from zopeedit import __version__
+
+
+setup(name='Products.ExternalEditor',
+ version=__version__,
+ description="Zope External Editor",
+ classifiers=[
+ 'Framework :: Zope2',
+ ],
+ author="Casey Duncan and Contributors, maintained by Chris McDonough",
+ author_email="chrism at plope.com",
+ url="http://www.plope.com/software/ExternalEditor",
+ packages=find_packages(),
+ namespace_packages=['Products'],
+ include_package_data=True,
+ zip_safe=False,
+ install_requires=[
+ 'setuptools',
+ ],
+ entry_points="""
+ [console_scripts]
+ zopeedit=Products.ExternalEditor.zopeedit:main
+ """,
+ )
More information about the Checkins
mailing list