Merge branch 'master' of ssh://git.ikiwiki.info/srv/git/ikiwiki.info

master
Joey Hess 2009-03-09 14:29:06 -04:00
commit f24904b160
3 changed files with 239 additions and 0 deletions

View File

@ -0,0 +1,15 @@
The message generated for web commits:
> web commit by mädduck
is not utf-8 encoded before passed to Git (which uses utf-8 as default encoding for commit messages). This causes a wrongly-encoded log entry, and makes ikiwiki spew warnings as it creates `recentchanges`:
utf8 "\xF6" does not map to Unicode at /usr/share/perl5/IkiWiki/Rcs/git.pm line 36, <$OUT> line 57.
Malformed UTF-8 character (unexpected non-continuation byte 0x6e, immediately after start byte 0xf6) in pattern match (m//) at /usr/share/perl5/IkiWiki/Rcs/git.pm line 393.
utf8 "\xF6" does not map to Unicode at /usr/share/perl5/IkiWiki/Rcs/git.pm line 36, <$OUT> line 5.
(This is version 2.53.3~bpo40+1 for lack of a newer backport for sarge)
Please make sure that commit messages for Git are always utf-8.
This is a change by user `mädduck` to trigger the error.

View File

@ -320,3 +320,11 @@ finish it at some point in the first quarter of 2009. --[[intrigeri]]
>> --[[intrigeri]]
>
> --[[Joey]]
I reverted the `%backlinks` and `$backlinks_calculated` exposing.
The issue they were solving probably will arise again when I'll work
on my meta branch again (i.e. when the simplified po one is merged),
but the po thing is supposed to work without these ugly `our`.
Seems like it was the last unaddressed item from Joey's review, so I'm
daring a timid "please pull"... or rather, please review again :)
--[[intrigeri]]

View File

@ -87,3 +87,219 @@ remains. Some CSS to clean up the display of the live WMD preview would be good
> I assume that is designed for websites that do not use markdown
> internally. Doesn't it have a setting to leave it as markdown?
>> Found setting, fixed. --[[Joey]]
>>> As I noted above, I've been working on the non-markdown page issue.
>>> Below is my a new javascript file that I'm using, and below that a patch
>>> to enable it. This patch makes the normal usage prettier - you get
>>> a side panel with the live preview in it. It also adds a new config
>>> option, `wmd_use101api`, which turns on code that tries to use the
>>> wmd api. At the moment this code doesn't seem to work - moreover the
>>> code that uses the new API dies early, so any code after that point is
>>> completely untested. I will not
>>> get a chance to look at this again soon though, so I thought I'd post
>>> my progress so far. -- [[Will]]
Place the following file in `underlays/wmd/wmd-ikiwiki.js`.
----
// This is some code to interface the WMD interface 1.0.1 with IkiWiki
// The WMD interface is planned to change, so this file will likely need
// updating in future.
if (useWMDinterface) {
wmd_options = { autostart: false, output: "Markdown" };
var instance = null;
hook("onload", initwmd);
} else {
var typeSelector = document.getElementById("type");
var currentType = getType(typeSelector);
if (currentType == "mdwn") {
wmd_options = { output: "Markdown" };
document.getElementById("wmd-preview-container").style.display = 'none';
} else {
wmd_options = { autostart: false };
document.getElementById("wmd-preview-container").style.display = 'block';
}
}
function initwmd() {
if (!Attacklab || !Attacklab.wmd) {
alert("WMD hasn't finished loading!");
return;
}
var typeSelector = document.getElementById("type");
var currentType = getType(typeSelector);
if (currentType == "mdwn") {
window.setTimeout(enableWMD,10);
}
typeSelector.onchange=function() {
var docType=getType(this);
if (docType=="mdwn") {
enableWMD();
} else {
disableWMD();
}
}
}
function getType(typeSelector)
{
if (typeSelector.nodeName.toLowerCase() == 'input') {
return typeSelector.getAttribute('value');
} else if (typeSelector.nodeName.toLowerCase() == 'select') {
return typeSelector.value;
// return typeSelector.options[typeSelector.selectedIndex].innerText;
}
return "";
}
function enableWMD()
{
var editContent = document.getElementById("editcontent");
var previewDiv = document.getElementById("wmd-preview");
var previewDivContainer = document.getElementById("wmd-preview-container");
previewDivContainer.style.display = 'block';
// editContent.style.width = previewDivContainer.style.width;
/***** build the preview manager *****/
var panes = {input:editContent, preview:previewDiv, output:null};
var previewManager = new Attacklab.wmd.previewManager(panes);
/***** build the editor and tell it to refresh the preview after commands *****/
var editor = new Attacklab.wmd.editor(editContent,previewManager.refresh);
// save everything so we can destroy it all later
instance = {ta:editContent, div:previewDiv, ed:editor, pm:previewManager};
}
function disableWMD()
{
document.getElementById("wmd-preview-container").style.display = 'none';
if (instance != null) {
instance.pm.destroy();
instance.ed.destroy();
// inst.ta.style.width='100%'
}
instance = null;
}
----
diff --git a/IkiWiki/Plugin/wmd.pm b/IkiWiki/Plugin/wmd.pm
index 9ddd237..743a0b8 100644
--- a/IkiWiki/Plugin/wmd.pm
+++ b/IkiWiki/Plugin/wmd.pm
@@ -17,6 +17,13 @@ sub getsetup () {
return
plugin => {
safe => 1,
+ rebuild => 1,
+ },
+ wmd_use101api => {
+ type => "boolean",
+ description => "Use the advanced, but unstable, WMD api for markdown preview.",
+ safe => 0,
+ rebuild => 0,
},
}
@@ -24,29 +31,25 @@ sub formbuilder_setup (@) {
my %params=@_;
my $form=$params{form};
- return if ! defined $form->field("do");
+ return unless defined $form->field("do");
return unless $form->field("do") eq "edit" ||
- $form->field("do") eq "create" ||
- $form->field("do") eq "comment";
-
- $form->tmpl_param("wmd_preview", "<div class=\"wmd-preview\"></div>\n".
- include_javascript(undef, 1));
-}
-
-sub include_javascript ($;$) {
- my $page=shift;
- my $absolute=shift;
-
- my $wmdjs=urlto("wmd/wmd.js", $page, $absolute);
- return <<"EOF"
-<script type="text/javascript">
-wmd_options = {
- output: "Markdown"
-};
-</script>
-<script src="$wmdjs" type="text/javascript"></script>
-EOF
+ $form->field("do") eq "create" ||
+ $form->field("do") eq "comment";
+
+ my $useAPI = $config{wmd_use101api}?'true':'false';
+ my $ikiwikijs = urlto("ikiwiki.js", undef, 1);
+ my $wmdIkiwikijs = urlto("wmd-ikiwiki.js", undef, 1);
+ my $wmdjs = urlto("wmd.js", undef, 1);
+
+ my $previewScripts = <<"EOS";
+ <script type="text/javascript">useWMDinterface=$useAPI;</script>
+ <script src="$ikiwikijs" type="text/javascript"></script>
+ <script src="$wmdIkiwikijs" type="text/javascript"></script>
+ <script src="$wmdjs" type="text/javascript"></script>
+EOS
+
+ $form->tmpl_param("wmd_preview", $previewScripts);
}
1
diff --git a/doc/style.css b/doc/style.css
index a6e6734..36c2b13
--- a/doc/style.css
+++ b/doc/style.css
@@ -76,9 +76,16 @@ div.tags {
float: right;
}
+/*
#editcontent {
width: 100%;
}
+*/
+
+#wmd-preview-container {
+ width: 49%;
+ float: right;
+}
img {
border-style: none;
diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl
index b1cf015..1d2f080 100644
--- a/templates/editpage.tmpl
+++ b/templates/editpage.tmpl
@@ -15,6 +15,14 @@ Page type: <TMPL_VAR FIELD-TYPE>
<TMPL_VAR FIELD-PAGE>
<TMPL_VAR FIELD-TYPE>
</TMPL_IF>
+<TMPL_IF NAME="WMD_PREVIEW">
+<div id="wmd-preview-container">
+<div class="header">
+<span>Live preview:</span>
+</div>
+<div class="wmd-preview" id="wmd-preview"></div>
+</div>
+</TMPL_IF>
<TMPL_VAR FIELD-EDITCONTENT><br />
<TMPL_IF NAME="CAN_COMMIT">
Optional comment about this change:<br />