From cc194fe527261b6a36a79df59c626bd3d7891b84 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Fri, 6 Mar 2009 03:40:50 -0500 Subject: [PATCH] Add patch for WMD plugin. This new plugin adds live preview and text controls to ikiwiki edit pages. --- doc/todo/mdwn_preview.mdwn | 83 +++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 68558a571..4c361052b 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -16,4 +16,85 @@ add to ikiwiki. >> about a showdown plugin. Maybe a WMD plugin would be worthwhile. I might >> look into it if I have time on the weekend. -- [[Will]] -[[!tag wishlist done]] +[[!tag wishlist]] + +>>> Below is a simple plugin/[[patch]] to make use of the WMD editor. Turns out it isn't hard at all to +>>> get a basic version going (that don't handle directives at all). I've +>>> removed the done tag so this is visible as a patch. -- [[Will]] + +------ + +### Instructions: + + +Download the [WMD source](http://wmd-editor.com/downloads/wmd-1.0.1.zip). In that zip file you'll +find a few example html files, a readme and `wmd` directory. Move the `wmd` directory into the +ikiwiki `underlays` directory. You should now have an `underlays/wmd/wmd.js` file as well as +some other javascript files and an images directory in the same place. + +Note that the WMD plugin does **not** handle directives. For this reason the normal `preview` button +remains. Some CSS to clean up the display of the live WMD preview would be good. + +Install the following patch and plugin file. Then enable the 'wmd' plugin. + + + diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl + index 4b54db2..b1cf015 100644 + --- a/templates/editpage.tmpl + +++ b/templates/editpage.tmpl + @@ -37,6 +37,7 @@ Optional comment about this change:
+ + + + + + + +
+ +----- + + #!/usr/bin/perl + package IkiWiki::Plugin::wmd; + + use warnings; + use strict; + use IkiWiki 3.00; + use POSIX; + use Encode; + + sub import { + add_underlay("wmd"); + hook(type => "getsetup", id => "wmd", call => \&getsetup); + hook(type => "formbuilder_setup", id => "wmd", call => \&formbuilder_setup); + } + + sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, + } + + sub formbuilder_setup (@) { + my %params=@_; + my $form=$params{form}; + + return if ! defined $form->field("do"); + + return unless (($form->field("do") eq "edit") || + ($form->field("do") eq "create")); + + $form->tmpl_param("wmd_preview", "
\n".include_javascript(undef, 1)); + } + + sub include_javascript ($;$) { + my $page=shift; + my $absolute=shift; + + return ''."\n"; + } + + 1 +