mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-12-24 17:10:29 +00:00
Split main rendering into it's own startup module
This commit is contained in:
parent
09156af475
commit
b9dec37fb7
@ -195,25 +195,6 @@ exports.startup = function() {
|
|||||||
openStartupTiddlers({defaultToCurrentStory: true});
|
openStartupTiddlers({defaultToCurrentStory: true});
|
||||||
}
|
}
|
||||||
},false)
|
},false)
|
||||||
// Set up the styles
|
|
||||||
var styleTemplateTitle = "$:/core/ui/PageStylesheet",
|
|
||||||
styleParser = $tw.wiki.parseTiddler(styleTemplateTitle);
|
|
||||||
$tw.styleWidgetNode = $tw.wiki.makeWidget(styleParser,{document: $tw.fakeDocument});
|
|
||||||
$tw.styleContainer = $tw.fakeDocument.createElement("style");
|
|
||||||
$tw.styleWidgetNode.render($tw.styleContainer,null);
|
|
||||||
$tw.styleElement = document.createElement("style");
|
|
||||||
$tw.styleElement.innerHTML = $tw.styleContainer.textContent;
|
|
||||||
document.head.insertBefore($tw.styleElement,document.head.firstChild);
|
|
||||||
$tw.wiki.addEventListener("change",$tw.perf.report("styleRefresh",function(changes) {
|
|
||||||
if($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {
|
|
||||||
$tw.styleElement.innerHTML = $tw.styleContainer.textContent;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
// Display the $:/PageMacros tiddler to kick off the display
|
|
||||||
renderPage();
|
|
||||||
// Fix up the link between the root widget and the page container
|
|
||||||
$tw.rootWidget.domNodes = [$tw.pageContainer];
|
|
||||||
$tw.rootWidget.children = [$tw.pageWidgetNode];
|
|
||||||
// If we're being viewed on a data: URI then give instructions for how to save
|
// If we're being viewed on a data: URI then give instructions for how to save
|
||||||
if(document.location.protocol === "data:") {
|
if(document.location.protocol === "data:") {
|
||||||
$tw.utils.dispatchCustomEvent(document,"tw-modal",{
|
$tw.utils.dispatchCustomEvent(document,"tw-modal",{
|
||||||
@ -311,51 +292,4 @@ function updateLocationHash() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Main render function for PageMacros, which includes the PageTemplate
|
|
||||||
*/
|
|
||||||
function renderPage() {
|
|
||||||
// Parse and render the template
|
|
||||||
var templateTitle = "$:/core/ui/PageMacros",
|
|
||||||
parser = $tw.wiki.parseTiddler(templateTitle);
|
|
||||||
$tw.perf.report("mainRender",function() {
|
|
||||||
$tw.pageWidgetNode = $tw.wiki.makeWidget(parser,{document: document, parentWidget: $tw.rootWidget});
|
|
||||||
$tw.pageContainer = document.createElement("div");
|
|
||||||
$tw.utils.addClass($tw.pageContainer,"tw-page-container-wrapper");
|
|
||||||
document.body.insertBefore($tw.pageContainer,document.body.firstChild);
|
|
||||||
$tw.pageWidgetNode.render($tw.pageContainer,null);
|
|
||||||
})();
|
|
||||||
// Prepare refresh mechanism
|
|
||||||
var deferredChanges = Object.create(null),
|
|
||||||
timerId;
|
|
||||||
function refresh() {
|
|
||||||
// Process the refresh
|
|
||||||
$tw.pageWidgetNode.refresh(deferredChanges,$tw.pageContainer,null);
|
|
||||||
deferredChanges = Object.create(null);
|
|
||||||
}
|
|
||||||
// Add the change event handler
|
|
||||||
$tw.wiki.addEventListener("change",$tw.perf.report("mainRefresh",function(changes) {
|
|
||||||
// Check if only drafts have changed
|
|
||||||
var onlyDraftsHaveChanged = true;
|
|
||||||
for(var title in changes) {
|
|
||||||
var tiddler = $tw.wiki.getTiddler(title);
|
|
||||||
if(!tiddler || !tiddler.hasField("draft.of")) {
|
|
||||||
onlyDraftsHaveChanged = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Defer the change if only drafts have changed
|
|
||||||
if(timerId) {
|
|
||||||
clearTimeout(timerId);
|
|
||||||
}
|
|
||||||
timerId = null;
|
|
||||||
if(onlyDraftsHaveChanged) {
|
|
||||||
timerId = setTimeout(refresh,DRAFT_TIDDLER_TIMEOUT);
|
|
||||||
$tw.utils.extend(deferredChanges,changes);
|
|
||||||
} else {
|
|
||||||
$tw.utils.extend(deferredChanges,changes);
|
|
||||||
refresh();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
82
core/modules/startup/main-render.js
Normal file
82
core/modules/startup/main-render.js
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/*\
|
||||||
|
title: $:/core/modules/startup/main-render.js
|
||||||
|
type: application/javascript
|
||||||
|
module-type: startup
|
||||||
|
|
||||||
|
Load core modules
|
||||||
|
|
||||||
|
\*/
|
||||||
|
(function(){
|
||||||
|
|
||||||
|
/*jslint node: true, browser: true */
|
||||||
|
/*global $tw: false */
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// Export name and synchronous status
|
||||||
|
exports.name = "main-render";
|
||||||
|
exports.platforms = ["browser"];
|
||||||
|
exports.after = ["startup"];
|
||||||
|
exports.synchronous = true;
|
||||||
|
|
||||||
|
exports.startup = function() {
|
||||||
|
// Set up the styles
|
||||||
|
var styleTemplateTitle = "$:/core/ui/PageStylesheet",
|
||||||
|
styleParser = $tw.wiki.parseTiddler(styleTemplateTitle);
|
||||||
|
$tw.styleWidgetNode = $tw.wiki.makeWidget(styleParser,{document: $tw.fakeDocument});
|
||||||
|
$tw.styleContainer = $tw.fakeDocument.createElement("style");
|
||||||
|
$tw.styleWidgetNode.render($tw.styleContainer,null);
|
||||||
|
$tw.styleElement = document.createElement("style");
|
||||||
|
$tw.styleElement.innerHTML = $tw.styleContainer.textContent;
|
||||||
|
document.head.insertBefore($tw.styleElement,document.head.firstChild);
|
||||||
|
$tw.wiki.addEventListener("change",$tw.perf.report("styleRefresh",function(changes) {
|
||||||
|
if($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {
|
||||||
|
$tw.styleElement.innerHTML = $tw.styleContainer.textContent;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
// Display the $:/core/ui/PageMacros tiddler to kick off the display
|
||||||
|
var templateTitle = "$:/core/ui/PageMacros",
|
||||||
|
parser = $tw.wiki.parseTiddler(templateTitle);
|
||||||
|
$tw.perf.report("mainRender",function() {
|
||||||
|
$tw.pageWidgetNode = $tw.wiki.makeWidget(parser,{document: document, parentWidget: $tw.rootWidget});
|
||||||
|
$tw.pageContainer = document.createElement("div");
|
||||||
|
$tw.utils.addClass($tw.pageContainer,"tw-page-container-wrapper");
|
||||||
|
document.body.insertBefore($tw.pageContainer,document.body.firstChild);
|
||||||
|
$tw.pageWidgetNode.render($tw.pageContainer,null);
|
||||||
|
})();
|
||||||
|
// Prepare refresh mechanism
|
||||||
|
var deferredChanges = Object.create(null),
|
||||||
|
timerId;
|
||||||
|
function refresh() {
|
||||||
|
// Process the refresh
|
||||||
|
$tw.pageWidgetNode.refresh(deferredChanges,$tw.pageContainer,null);
|
||||||
|
deferredChanges = Object.create(null);
|
||||||
|
}
|
||||||
|
// Add the change event handler
|
||||||
|
$tw.wiki.addEventListener("change",$tw.perf.report("mainRefresh",function(changes) {
|
||||||
|
// Check if only drafts have changed
|
||||||
|
var onlyDraftsHaveChanged = true;
|
||||||
|
for(var title in changes) {
|
||||||
|
var tiddler = $tw.wiki.getTiddler(title);
|
||||||
|
if(!tiddler || !tiddler.hasField("draft.of")) {
|
||||||
|
onlyDraftsHaveChanged = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Defer the change if only drafts have changed
|
||||||
|
if(timerId) {
|
||||||
|
clearTimeout(timerId);
|
||||||
|
}
|
||||||
|
timerId = null;
|
||||||
|
if(onlyDraftsHaveChanged) {
|
||||||
|
timerId = setTimeout(refresh,DRAFT_TIDDLER_TIMEOUT);
|
||||||
|
$tw.utils.extend(deferredChanges,changes);
|
||||||
|
} else {
|
||||||
|
$tw.utils.extend(deferredChanges,changes);
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
// Fix up the link between the root widget and the page container
|
||||||
|
$tw.rootWidget.domNodes = [$tw.pageContainer];
|
||||||
|
$tw.rootWidget.children = [$tw.pageWidgetNode];
|
||||||
|
};
|
||||||
|
|
||||||
|
})();
|
Loading…
Reference in New Issue
Block a user