TiddlyWiki5/plugins/tiddlywiki/share/rawmarkup.js

115 wiersze
3.7 KiB
JavaScript

/*\
title: $:/plugins/tiddlywiki/share/rawmarkup.js
type: application/javascript
module-type: library
Read tiddlers from the browser location hash
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
// Get the hash
var rawHash = document.location.hash.substring(1);
if(rawHash.charAt(0) === "#") {
var hash;
try{
hash = $tw.utils.decodeURIComponentSafe(rawHash.substring(1));
} catch(ex) {
console.log("Share plugin: Error decoding location hash",ex);
}
// Try to parse the hash as JSON
if(hash) {
var tiddlers;
try {
tiddlers= JSON.parse(hash);
} catch(ex) {
console.log("Share plugin: Error parsing JSON from location hash",ex);
}
if(tiddlers) {
// Need to initialise these because we run before bootprefix.js and boot.js
window.$tw = window.$tw || {};
$tw.boot = $tw.boot || {};
$tw.preloadTiddlers = $tw.preloadTiddlers || [];
// Prevent TiddlyWiki from booting
$tw.boot.suppressBoot = true;
// Load our styles
var stylesWrapper = document.createElement("style");
stylesWrapper.innerHTML = tiddlywikiSharePluginStartupWarningCss;
document.documentElement.appendChild(stylesWrapper);
// Display the warning banner
var warningWrapper = document.createElement("div");
warningWrapper.innerHTML = tiddlywikiSharePluginStartupWarningHtml;
document.documentElement.appendChild(warningWrapper);
// Add our event handlers
document.getElementById("startup-warning-proceed").addEventListener("click",actionProceed,false);
document.getElementById("startup-warning-cancel").addEventListener("click",actionCancel,false);
// Sort the incoming tiddlers by title
tiddlers = tiddlers.sort(function(a,b) {
if(a.title < b.title) {
return -1;
} else if(a.title > b.title) {
return +1;
} else {
return 0;
}
});
// Load the tiddler preview
var previewWrapper = document.getElementById("startup-warning-preview");
for(var index=0; index < tiddlers.length; index++) {
var tiddler = tiddlers[index],
tiddlerWrapper = document.createElement("li"),
titleTextWrapper = document.createElement("span"),
titleText = document.createTextNode(tiddler.title),
fieldsTable = document.createElement("table"),
fieldsTableBody = document.createElement("tbody");
titleTextWrapper.appendChild(titleText);
titleTextWrapper.className = "tiddler-title";
tiddlerWrapper.appendChild(titleTextWrapper);
fieldsTable.appendChild(fieldsTableBody);
var fields = Object.keys(tiddler).sort();
for(var fieldIndex = 0; fieldIndex < fields.length; fieldIndex++) {
var fieldName = fields[fieldIndex],
fieldValue = tiddler[fieldName];
if(fieldName !== "title") {
var fieldRow = document.createElement("tr"),
fieldRowHeader = document.createElement("th"),
fieldRowValue = document.createElement("td");
fieldRowHeader.appendChild(document.createTextNode(fieldName));
fieldRowValue.appendChild(document.createTextNode(fieldValue));
fieldRow.appendChild(fieldRowHeader);
fieldRow.appendChild(fieldRowValue);
fieldsTableBody.appendChild(fieldRow);
}
}
tiddlerWrapper.appendChild(fieldsTable);
previewWrapper.appendChild(tiddlerWrapper);
}
}
}
}
function actionProceed() {
// Remove the banner, load our tiddlers, and boot TiddlyWiki
removeWarningBanner();
$tw.preloadTiddlers = $tw.preloadTiddlers.concat(tiddlers);
$tw.boot.boot();
}
function actionCancel() {
// Remove the banner, clear the location hash, and boot TiddlyWiki
removeWarningBanner();
document.location.hash = "#";
$tw.boot.boot();
}
function removeWarningBanner() {
warningWrapper.parentNode.removeChild(warningWrapper);
stylesWrapper.parentNode.removeChild(stylesWrapper);
}
})();