my $page=shift;
my $absolute=shift;
- return '<script src="'.urlto("ikiwiki.js", $page, $absolute).
+ return '<script src="'.urlto("ikiwiki/ikiwiki.js", $page, $absolute).
'" type="text/javascript" charset="utf-8"></script>'."\n".
- '<script src="'.urlto("relativedate.js", $page, $absolute).
+ '<script src="'.urlto("ikiwiki/relativedate.js", $page, $absolute).
'" type="text/javascript" charset="utf-8"></script>';
}
my $page=shift;
my $absolute=shift;
- return '<script src="'.urlto("ikiwiki.js", $page, $absolute).
+ return '<script src="'.urlto("ikiwiki/ikiwiki.js", $page, $absolute).
'" type="text/javascript" charset="utf-8"></script>'."\n".
- '<script src="'.urlto("toggle.js", $page, $absolute).
+ '<script src="'.urlto("ikiwiki/toggle.js", $page, $absolute).
'" type="text/javascript" charset="utf-8"></script>';
}
-ikiwiki (3.20100422) UNRELEASED; urgency=low
+ikiwiki (3.20100424) UNRELEASED; urgency=low
[ Joey Hess ]
* tag: Automatic creation of tag pages can now be enabled using
(Jelmer Vernooij)
* Quite a lot of new optimisations, and one major fix to a recent
performance regression.
+ * Moved javascript files under the ikiwiki/ directory, to avoid cluttering
+ the top of the web root. This is another things that requires a wiki
+ rebuild on upgrade to this version.
-- Joey Hess <joeyh@debian.org> Sun, 04 Apr 2010 12:17:11 -0400
# Change this when some incompatible change is made that requires
# rebuilding all wikis.
-firstcompat=3.20100422
+firstcompat=3.20100424
if [ "$1" = configure ] && \
dpkg --compare-versions "$2" lt "$firstcompat"; then
+++ /dev/null
-// ikiwiki's javascript utility function library
-
-var hooks;
-
-// Run onload as soon as the DOM is ready, if possible.
-// gecko, opera 9
-if (document.addEventListener) {
- document.addEventListener("DOMContentLoaded", run_hooks_onload, false);
-}
-// other browsers
-window.onload = run_hooks_onload;
-
-var onload_done = 0;
-
-function run_hooks_onload() {
- // avoid firing twice
- if (onload_done)
- return;
- onload_done = true;
-
- run_hooks("onload");
-}
-
-function run_hooks(name) {
- if (typeof(hooks) != "undefined") {
- for (var i = 0; i < hooks.length; i++) {
- if (hooks[i].name == name) {
- hooks[i].call();
- }
- }
- }
-}
-
-function hook(name, call) {
- if (typeof(hooks) == "undefined")
- hooks = new Array;
- hooks.push({name: name, call: call});
-}
-
-function getElementsByClass(cls, node, tag) {
- if (document.getElementsByClass)
- return document.getElementsByClass(cls, node, tag);
- if (! node) node = document;
- if (! tag) tag = '*';
- var ret = new Array();
- var pattern = new RegExp("(^|\\s)"+cls+"(\\s|$)");
- var els = node.getElementsByTagName(tag);
- for (i = 0; i < els.length; i++) {
- if ( pattern.test(els[i].className) ) {
- ret.push(els[i]);
- }
- }
- return ret;
-}
--- /dev/null
+// ikiwiki's javascript utility function library
+
+var hooks;
+
+// Run onload as soon as the DOM is ready, if possible.
+// gecko, opera 9
+if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", run_hooks_onload, false);
+}
+// other browsers
+window.onload = run_hooks_onload;
+
+var onload_done = 0;
+
+function run_hooks_onload() {
+ // avoid firing twice
+ if (onload_done)
+ return;
+ onload_done = true;
+
+ run_hooks("onload");
+}
+
+function run_hooks(name) {
+ if (typeof(hooks) != "undefined") {
+ for (var i = 0; i < hooks.length; i++) {
+ if (hooks[i].name == name) {
+ hooks[i].call();
+ }
+ }
+ }
+}
+
+function hook(name, call) {
+ if (typeof(hooks) == "undefined")
+ hooks = new Array;
+ hooks.push({name: name, call: call});
+}
+
+function getElementsByClass(cls, node, tag) {
+ if (document.getElementsByClass)
+ return document.getElementsByClass(cls, node, tag);
+ if (! node) node = document;
+ if (! tag) tag = '*';
+ var ret = new Array();
+ var pattern = new RegExp("(^|\\s)"+cls+"(\\s|$)");
+ var els = node.getElementsByTagName(tag);
+ for (i = 0; i < els.length; i++) {
+ if ( pattern.test(els[i].className) ) {
+ ret.push(els[i]);
+ }
+ }
+ return ret;
+}
--- /dev/null
+// Causes html elements in the 'relativedate' class to be displayed
+// as relative dates. The date is parsed from the title attribute, or from
+// the element content.
+
+var dateElements;
+
+hook("onload", getDates);
+
+function getDates() {
+ dateElements = getElementsByClass('relativedate');
+ for (var i = 0; i < dateElements.length; i++) {
+ var elt = dateElements[i];
+ var title = elt.attributes.title;
+ var d = new Date(title ? title.value : elt.innerHTML);
+ if (! isNaN(d)) {
+ dateElements[i].date=d;
+ elt.title=elt.innerHTML;
+ }
+ }
+
+ showDates();
+}
+
+function showDates() {
+ for (var i = 0; i < dateElements.length; i++) {
+ var elt = dateElements[i];
+ var d = elt.date;
+ if (! isNaN(d)) {
+ elt.innerHTML=relativeDate(d);
+ }
+ }
+ setTimeout(showDates,30000); // keep updating every 30s
+}
+
+var timeUnits = new Array;
+timeUnits['minute'] = 60;
+timeUnits['hour'] = timeUnits['minute'] * 60;
+timeUnits['day'] = timeUnits['hour'] * 24;
+timeUnits['month'] = timeUnits['day'] * 30;
+timeUnits['year'] = timeUnits['day'] * 364;
+var timeUnitOrder = ['year', 'month', 'day', 'hour', 'minute'];
+
+function relativeDate(date) {
+ var now = new Date();
+ var offset = date.getTime() - now.getTime();
+ var seconds = Math.round(Math.abs(offset) / 1000);
+
+ // hack to avoid reading just in the future if there is a minor
+ // amount of clock slip
+ if (offset >= 0 && seconds < 30 * timeUnits['minute']) {
+ return "just now";
+ }
+
+ var ret = "";
+ var shown = 0;
+ for (i = 0; i < timeUnitOrder.length; i++) {
+ var unit = timeUnitOrder[i];
+ if (seconds >= timeUnits[unit]) {
+ var num = Math.floor(seconds / timeUnits[unit]);
+ seconds -= num * timeUnits[unit];
+ if (ret)
+ ret += "and ";
+ ret += num + " " + unit + (num > 1 ? "s" : "") + " ";
+
+ if (++shown == 2)
+ break;
+ }
+ else if (shown)
+ break;
+ }
+
+ if (! ret)
+ ret = "less than a minute "
+
+ return ret + (offset < 0 ? "ago" : "from now");
+}
--- /dev/null
+// Uses CSS to hide toggleables, to avoid any flashing on page load. The
+// CSS is only emitted after it tests that it's going to be able
+// to show the toggleables.
+if (document.getElementById && document.getElementsByTagName && document.createTextNode) {
+ document.write('<style type="text/css">div.toggleable { display: none; }</style>');
+ hook("onload", inittoggle);
+}
+
+function inittoggle() {
+ var as = getElementsByClass('toggle');
+ for (var i = 0; i < as.length; i++) {
+ var id = as[i].href.match(/#(\w.+)/)[1];
+ if (document.getElementById(id).className == "toggleable")
+ document.getElementById(id).style.display="none";
+ as[i].onclick = function() {
+ toggle(this);
+ return false;
+ }
+ }
+}
+
+function toggle(s) {
+ var id = s.href.match(/#(\w.+)/)[1];
+ style = document.getElementById(id).style;
+ if (style.display == "none")
+ style.display = "block";
+ else
+ style.display = "none";
+}
+++ /dev/null
-// Causes html elements in the 'relativedate' class to be displayed
-// as relative dates. The date is parsed from the title attribute, or from
-// the element content.
-
-var dateElements;
-
-hook("onload", getDates);
-
-function getDates() {
- dateElements = getElementsByClass('relativedate');
- for (var i = 0; i < dateElements.length; i++) {
- var elt = dateElements[i];
- var title = elt.attributes.title;
- var d = new Date(title ? title.value : elt.innerHTML);
- if (! isNaN(d)) {
- dateElements[i].date=d;
- elt.title=elt.innerHTML;
- }
- }
-
- showDates();
-}
-
-function showDates() {
- for (var i = 0; i < dateElements.length; i++) {
- var elt = dateElements[i];
- var d = elt.date;
- if (! isNaN(d)) {
- elt.innerHTML=relativeDate(d);
- }
- }
- setTimeout(showDates,30000); // keep updating every 30s
-}
-
-var timeUnits = new Array;
-timeUnits['minute'] = 60;
-timeUnits['hour'] = timeUnits['minute'] * 60;
-timeUnits['day'] = timeUnits['hour'] * 24;
-timeUnits['month'] = timeUnits['day'] * 30;
-timeUnits['year'] = timeUnits['day'] * 364;
-var timeUnitOrder = ['year', 'month', 'day', 'hour', 'minute'];
-
-function relativeDate(date) {
- var now = new Date();
- var offset = date.getTime() - now.getTime();
- var seconds = Math.round(Math.abs(offset) / 1000);
-
- // hack to avoid reading just in the future if there is a minor
- // amount of clock slip
- if (offset >= 0 && seconds < 30 * timeUnits['minute']) {
- return "just now";
- }
-
- var ret = "";
- var shown = 0;
- for (i = 0; i < timeUnitOrder.length; i++) {
- var unit = timeUnitOrder[i];
- if (seconds >= timeUnits[unit]) {
- var num = Math.floor(seconds / timeUnits[unit]);
- seconds -= num * timeUnits[unit];
- if (ret)
- ret += "and ";
- ret += num + " " + unit + (num > 1 ? "s" : "") + " ";
-
- if (++shown == 2)
- break;
- }
- else if (shown)
- break;
- }
-
- if (! ret)
- ret = "less than a minute "
-
- return ret + (offset < 0 ? "ago" : "from now");
-}
+++ /dev/null
-// Uses CSS to hide toggleables, to avoid any flashing on page load. The
-// CSS is only emitted after it tests that it's going to be able
-// to show the toggleables.
-if (document.getElementById && document.getElementsByTagName && document.createTextNode) {
- document.write('<style type="text/css">div.toggleable { display: none; }</style>');
- hook("onload", inittoggle);
-}
-
-function inittoggle() {
- var as = getElementsByClass('toggle');
- for (var i = 0; i < as.length; i++) {
- var id = as[i].href.match(/#(\w.+)/)[1];
- if (document.getElementById(id).className == "toggleable")
- document.getElementById(id).style.display="none";
- as[i].onclick = function() {
- toggle(this);
- return false;
- }
- }
-}
-
-function toggle(s) {
- var id = s.href.match(/#(\w.+)/)[1];
- style = document.getElementById(id).style;
- if (style.display == "none")
- style.display = "block";
- else
- style.display = "none";
-}