From f1eca7dc214671a13f6ecb6008a457d718f145d9 Mon Sep 17 00:00:00 2001
From: Jeremie Dimino
Date: Thu, 13 Mar 2008 19:27:33 +0100
Subject: [PATCH] Import initial
darcs-hash:20080313182733-af139-2045f3d64560944165012a0a915bcbe90fc2826d.gz
---
wiki/PageGraphicalEditor.py | 356 ++++++++++++++++++++++++++++++++++++
1 file changed, 356 insertions(+)
create mode 100644 wiki/PageGraphicalEditor.py
diff --git a/wiki/PageGraphicalEditor.py b/wiki/PageGraphicalEditor.py
new file mode 100644
index 00000000..dbfce73b
--- /dev/null
+++ b/wiki/PageGraphicalEditor.py
@@ -0,0 +1,356 @@
+# -*- coding: iso-8859-1 -*-
+"""
+ MoinMoin - Call the GUI editor (FCKeditor)
+
+ @copyright: (c) Bastian Blank, Florian Festi, Thomas Waldmann
+ @license: GNU GPL, see COPYING for details.
+"""
+
+from MoinMoin import PageEditor
+import os, time, codecs, re
+
+from MoinMoin import caching, config, user, util, wikiutil, error
+from MoinMoin.Page import Page
+from MoinMoin.widget import html
+from MoinMoin.widget.dialog import Status
+from MoinMoin.logfile import editlog, eventlog
+from MoinMoin.util import filesys
+import MoinMoin.util.web
+import MoinMoin.util.mail
+from MoinMoin.parser.wiki import Parser
+
+from StringIO import StringIO
+
+def execute(pagename, request):
+ if not request.user.may.write(pagename):
+ _ = request.getText
+ Page(request, pagename).send_page(request,
+ msg = _('You are not allowed to edit this page.'))
+ return
+
+ PageGraphicalEditor(request, pagename).sendEditor()
+
+
+class PageGraphicalEditor(PageEditor.PageEditor):
+
+ def word_rule(self):
+ regex = re.compile(r"\(\?" + edit_lock_message
+ else:
+ msg = edit_lock_message
+
+ # Did one of the prechecks fail?
+ if msg:
+ self.send_page(self.request, msg=msg)
+ return
+
+ # Check for preview submit
+ if preview is None:
+ title = _('Edit "%(pagename)s"')
+ else:
+ title = _('Preview of "%(pagename)s"')
+ self.set_raw_body(preview, modified=1)
+
+ # send header stuff
+ lock_timeout = self.lock.timeout / 60
+ lock_page = wikiutil.escape(self.page_name, quote=1)
+ lock_expire = _("Your edit lock on %(lock_page)s has expired!") % {'lock_page': lock_page}
+ lock_mins = _("Your edit lock on %(lock_page)s will expire in # minutes.") % {'lock_page': lock_page}
+ lock_secs = _("Your edit lock on %(lock_page)s will expire in # seconds.") % {'lock_page': lock_page}
+
+ # get request parameters
+ try:
+ text_rows = int(form['rows'][0])
+ except StandardError:
+ text_rows = self.cfg.edit_rows
+ if self.request.user.valid:
+ text_rows = int(self.request.user.edit_rows)
+
+ if preview is not None:
+ # Propagate original revision
+ rev = int(form['rev'][0])
+
+ # Check for editing conflicts
+ if not self.exists():
+ # page does not exist, are we creating it?
+ if rev:
+ conflict_msg = _('Someone else deleted this page while you were editing!')
+ elif rev != self.current_rev():
+ conflict_msg = _('Someone else changed this page while you were editing!')
+ if self.mergeEditConflict(rev):
+ conflict_msg = _("""Someone else saved this page while you were editing!
+Please review the page and save then. Do not save this page as it is!
+Have a look at the diff of %(difflink)s to see what has been changed.""") % {
+ 'difflink': self.link_to(self.request,
+ querystr='action=diff&rev=%d' % rev)
+ }
+ rev = self.current_rev()
+ if conflict_msg:
+ # We don't show preview when in conflict
+ preview = None
+
+ elif self.exists():
+ # revision of existing page
+ rev = self.current_rev()
+ else:
+ # page creation
+ rev = 0
+
+ # Page editing is done using user language
+ self.request.setContentLanguage(self.request.lang)
+
+ # Setup status message
+ status = [kw.get('msg', ''), conflict_msg, edit_lock_message]
+ status = [msg for msg in status if msg]
+ status = ' '.join(status)
+ status = Status(self.request, content=status)
+
+ wikiutil.send_title(self.request,
+ title % {'pagename': self.split_title(self.request),},
+ page=self,
+ pagename=self.page_name, msg=status,
+ html_head=self.lock.locktype and (
+ PageEditor._countdown_js % {
+ 'countdown_script': self.request.theme.externalScript('countdown'),
+ 'lock_timeout': lock_timeout,
+ 'lock_expire': lock_expire,
+ 'lock_mins': lock_mins,
+ 'lock_secs': lock_secs,
+ }) or '',
+ editor_mode=1,
+ )
+
+ self.request.write(self.request.formatter.startContent("content"))
+
+ # Get the text body for the editor field.
+ # TODO: what about deleted pages? show the text of the last revision or use the template?
+ if preview is not None:
+ raw_body = self.get_raw_body()
+ elif self.exists():
+ # If the page exists, we get the text from the page.
+ # TODO: maybe warn if template argument was ignored because the page exists?
+ raw_body = self.get_raw_body()
+ elif form.has_key('template'):
+ # If the page does not exists, we try to get the content from the template parameter.
+ template_page = wikiutil.unquoteWikiname(form['template'][0])
+ if self.request.user.may.read(template_page):
+ raw_body = Page(self.request, template_page).get_raw_body()
+ if raw_body:
+ self.request.write(_("[Content of new page loaded from %s]") % (template_page,), '
')
+ else:
+ self.request.write(_("[Template %s not found]") % (template_page,), '
')
+ else:
+ self.request.write(_("[You may not read %s]") % (template_page,), '
')
+
+ # Make backup on previews - but not for new empty pages
+ if preview and raw_body:
+ self._make_backup(raw_body)
+
+ # Generate default content for new pages
+ if not raw_body:
+ raw_body = _('Describe %s here.') % (self.page_name,)
+
+ # send form
+ self.request.write('
")
+
+ badwords_re = None
+ if preview is not None:
+ if SpellCheck and (
+ form.has_key('button_spellcheck') or
+ form.has_key('button_newwords')):
+ badwords, badwords_re, msg = SpellCheck.checkSpelling(self, self.request, own_form=0)
+ self.request.write("%s
" % msg)
+ self.request.write('')
+ self.request.write("")
+
+
+ if preview is not None:
+ if staytop:
+ content_id = 'previewbelow'
+ else:
+ content_id = 'preview'
+ self.send_page(self.request, content_id=content_id, content_only=1,
+ hilite_re=badwords_re)
+
+ self.request.write(self.request.formatter.endContent()) # end content div
+ wikiutil.send_footer(self.request, self.page_name)
+