[Jifty-commit] r3191 - in jifty/trunk/plugins/WikiToolbar: . doc
lib lib/Jifty lib/Jifty/Plugin lib/Jifty/Plugin/WikiToolbar
lib/Jifty/Plugin/WikiToolbar/Model share share/po share/web
share/web/static share/web/static/img share/web/static/img/wt
share/web/static/js share/web/templates t
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Wed May 2 04:50:44 EDT 2007
Author: yves
Date: Wed May 2 04:50:44 2007
New Revision: 3191
Added:
jifty/trunk/plugins/WikiToolbar/
jifty/trunk/plugins/WikiToolbar/Makefile.PL
jifty/trunk/plugins/WikiToolbar/doc/
jifty/trunk/plugins/WikiToolbar/lib/
jifty/trunk/plugins/WikiToolbar/lib/Jifty/
jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/
jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/
jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar.pm
jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Action/
jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Dispatcher.pm
jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Model/
jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Textarea.pm
jifty/trunk/plugins/WikiToolbar/share/
jifty/trunk/plugins/WikiToolbar/share/po/
jifty/trunk/plugins/WikiToolbar/share/web/
jifty/trunk/plugins/WikiToolbar/share/web/static/
jifty/trunk/plugins/WikiToolbar/share/web/static/img/
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/bold.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/box.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/center.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/code.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/code1.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/empty.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/h1.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/h2.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/h3.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/italic.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/link.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/linkextern.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/new.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/ol.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/red.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/strike.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/tab.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/ul.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/underline.png (contents, props changed)
jifty/trunk/plugins/WikiToolbar/share/web/static/js/
jifty/trunk/plugins/WikiToolbar/share/web/static/js/wikitoolbar.js
jifty/trunk/plugins/WikiToolbar/share/web/templates/
jifty/trunk/plugins/WikiToolbar/t/
Log:
plugin to add a wiki toolbar to textarea
Added: jifty/trunk/plugins/WikiToolbar/Makefile.PL
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/WikiToolbar/Makefile.PL Wed May 2 04:50:44 2007
@@ -0,0 +1,8 @@
+use inc::Module::Install;
+name('Jifty-Plugin-WikiToolbar');
+version('0.01');
+requires('Jifty' => '0.70416');
+
+install_share;
+
+WriteAll;
Added: jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar.pm Wed May 2 04:50:44 2007
@@ -0,0 +1,38 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::WikiToolbar;
+use base qw/Jifty::Plugin/;
+
+=head1 SYNOPSIS
+
+In etc/config.yml
+
+ Plugins:
+ - WikiToolbar: {}
+
+In your Model instead of
+
+ render_as 'textarea';
+
+use
+
+ render_as 'Jifty::Plugin::WikiToolbar::Textarea';
+
+To custom the toolbar, copy wikitoolbar.js in your application, at the end of the file put your changes with addButton function.
+
+=head1 DESCRIPTION
+
+Add a toolbar to your textarea field. Default toolbar provide markdown markup syntax. http://daringfireball.net/projects/markdown/
+
+=cut
+
+sub init {
+ my $self = shift;
+ Jifty->web->javascript_libs([
+ @{ Jifty->web->javascript_libs },
+ "wikitoolbar.js",
+ ]);
+}
+
+1;
Added: jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Dispatcher.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Dispatcher.pm Wed May 2 04:50:44 2007
@@ -0,0 +1,9 @@
+use strict;
+use warnings;
+
+package Jifty::Plugin::WikiToolbar::Dispatcher;
+use Jifty::Dispatcher -base;
+
+# Put any plugin-specific dispatcher rules here.
+
+1;
Added: jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Textarea.pm
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/WikiToolbar/lib/Jifty/Plugin/WikiToolbar/Textarea.pm Wed May 2 04:50:44 2007
@@ -0,0 +1,24 @@
+package Jifty::Plugin::WikiToolbar::Textarea;
+use base qw(Jifty::Web::Form::Field::Textarea);
+
+sub rows { 30 };
+
+sub render_widget {
+ my $self = shift;
+ my $field;
+ $field .= qq!<div id='toolbar'></div>!;
+ $field .= qq!<textarea!;
+ $field .= qq! name="@{[ $self->input_name ]}"!;
+ $field .= qq! id="@{[ $self->element_id ]}"!;
+ $field .= qq! rows="@{[$self->rows || 5 ]}"!;
+ $field .= qq! cols="@{[$self->cols || 60]}"!;
+ $field .= $self->_widget_class;
+ $field .= qq! >!;
+ $field .= Jifty->web->escape($self->current_value) if $self->current_value;
+ $field .= qq!</textarea>\n!;
+ Jifty->web->out($field);
+ '';
+}
+
+
+1;
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/bold.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/box.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/center.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/code.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/code1.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/empty.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/h1.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/h2.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/h3.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/italic.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/link.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/linkextern.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/new.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/ol.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/red.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/strike.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/tab.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/ul.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/img/wt/underline.png
==============================================================================
Binary file. No diff available.
Added: jifty/trunk/plugins/WikiToolbar/share/web/static/js/wikitoolbar.js
==============================================================================
--- (empty file)
+++ jifty/trunk/plugins/WikiToolbar/share/web/static/js/wikitoolbar.js Wed May 2 04:50:44 2007
@@ -0,0 +1,137 @@
+// Wikipedia JavaScript toolbar functions
+
+mwEditButtons = [];
+
+// this function generates the actual toolbar buttons with localized text
+// we use it to avoid creating the toolbar where javascript is not enabled
+function addButton(imageFile, speedTip, tagOpen, tagClose, sampleText) {
+ mwEditButtons[mwEditButtons.length] =
+ {"imageFile": imageFile,
+ "speedTip": speedTip,
+ "tagOpen": tagOpen,
+ "tagClose": tagClose,
+ "sampleText": sampleText};
+}
+
+// this function generates the actual toolbar buttons with localized text
+// we use it to avoid creating the toolbar where javascript is not enabled
+function mwInsertEditButton(parent, item) {
+ if (typeof item.imageFile == 'undefined') {
+ return;}
+ var image = document.createElement("img");
+ image.width = 16;
+ image.height = 16;
+ image.src = item.imageFile;
+ image.border = 0;
+ image.alt = item.speedTip;
+ image.title = item.speedTip;
+ image.style.cursor = "pointer";
+ image.onclick = function() {
+ insertTags(item.tagOpen, item.tagClose, item.sampleText);
+ return false;
+ }
+ parent.appendChild(image);
+}
+
+// apply tagOpen/tagClose to selection in textarea,
+// use sampleText instead of selection if there is none
+// copied and adapted from phpBB
+function insertTags(tagOpen, tagClose, sampleText) {
+
+ // var txtarea = document.getElementsByTagName('TEXTAREA')[0];
+ // TODO: need a better way to manage multi textarea
+ var txtarea;
+ var txtareas = document.getElementsByTagName('TEXTAREA');
+ for (i = 0; i < txtareas.length; i++) {
+ var textbox = txtareas[i];
+ if( textbox.selectionStart ) {
+ txtarea = textbox;
+ };
+ }
+
+ if (typeof txtarea == 'undefined') {
+ txtarea = document.getElementsByTagName('TEXTAREA')[0];
+ }
+
+ // IE
+ if (document.selection && !is_gecko) {
+ var theSelection = document.selection.createRange().text;
+ if (!theSelection)
+ theSelection=sampleText;
+ txtarea.focus();
+ if (theSelection.charAt(theSelection.length - 1) == " ") { // exclude ending space char, if any
+ theSelection = theSelection.substring(0, theSelection.length - 1);
+ document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
+ } else {
+ document.selection.createRange().text = tagOpen + theSelection + tagClose;
+ }
+
+ // Mozilla
+ } else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
+ var replaced = false;
+ var startPos = txtarea.selectionStart;
+ var endPos = txtarea.selectionEnd;
+ if (endPos-startPos)
+ replaced = true;
+ var scrollTop = txtarea.scrollTop;
+ var myText = (txtarea.value).substring(startPos, endPos);
+ if (!myText)
+ myText=sampleText;
+ if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any
+ subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
+ } else {
+ subst = tagOpen + myText + tagClose;
+ }
+ txtarea.value = txtarea.value.substring(0, startPos) + subst +
+ txtarea.value.substring(endPos, txtarea.value.length);
+ txtarea.focus();
+ //set new selection
+ if (replaced) {
+ var cPos = startPos+(tagOpen.length+myText.length+tagClose.length);
+ txtarea.selectionStart = cPos;
+ txtarea.selectionEnd = cPos;
+ } else {
+ txtarea.selectionStart = startPos+tagOpen.length;
+ txtarea.selectionEnd = startPos+tagOpen.length+myText.length;
+ }
+ txtarea.scrollTop = scrollTop;
+
+ // All other browsers get no toolbar.
+ // There was previously support for a crippled "help"
+ // bar, but that caused more problems than it solved.
+ }
+ // reposition cursor if possible
+ if (txtarea.createTextRange)
+ txtarea.caretPos = document.selection.createRange().duplicate();
+}
+
+
+
+var myrules = {
+ '#toolbar' : function(e){
+ mwEditButtons = [];
+// CUSTOM your toolbar HERE
+// addButton : image, help text, first tag before selected text, last tag, default text if nothing is selected
+addButton('/static/img/wt/bold.png','Bold text','\*\*','\*\*','Bold text');
+addButton('/static/img/wt/italic.png','Italic text','\_','\_','Italic text');
+ addButton('/static/img/wt/empty.png','','','','');
+addButton('/static/img/wt/h1.png','Title','','\n=======\n','Title');
+addButton('/static/img/wt/h2.png','Sub title','','\n-------\n','Sub title');
+addButton('/static/img/wt/h3.png','Sub sub title','### ',' ###\n','Sub sub title');
+ addButton('/static/img/wt/empty.png','','','','');
+addButton('/static/img/wt/link.png','Link','[','](http://...... )','Text');
+addButton('/static/img/wt/linkextern.png','URL','<','>','http://.....');
+ addButton('/static/img/wt/empty.png','','','','');
+addButton('/static/img/wt/ul.png','List','\n- element 1\n- element 2\n- element 3\n\n ','','');
+addButton('/static/img/wt/ol.png','Ordered list','\n1. element 1\n1. element 2\n1. element 3\n\n ','','');
+// END
+
+ for(i=0;i<mwEditButtons.length;i++) {
+ mwInsertEditButton(e, mwEditButtons[i]);
+ }
+
+ }
+ };
+
+Behaviour.register(myrules);
+
More information about the Jifty-commit
mailing list