1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-27 03:57:21 +00:00

Introduce post-render startup actions

This commit is contained in:
jeremy@jermolene.com 2020-10-25 16:22:21 +00:00
parent 1a91f81976
commit 5cc1600072
4 changed files with 30 additions and 14 deletions

View File

@ -106,6 +106,8 @@ exports.startup = function() {
// Fix up the link between the root widget and the page container // Fix up the link between the root widget and the page container
$tw.rootWidget.domNodes = [$tw.pageContainer]; $tw.rootWidget.domNodes = [$tw.pageContainer];
$tw.rootWidget.children = [$tw.pageWidgetNode]; $tw.rootWidget.children = [$tw.pageWidgetNode];
// Run any post-render startup actions
$tw.rootWidget.executeStartupTiddlers("$:/tags/StartupAction/PostRender");
}; };
})(); })();

View File

@ -64,17 +64,12 @@ exports.startup = function() {
document: $tw.browser ? document : $tw.fakeDocument document: $tw.browser ? document : $tw.fakeDocument
}); });
// Execute any startup actions // Execute any startup actions
var executeStartupTiddlers = function(tag) { $tw.rootWidget.executeStartupTiddlers("$:/tags/StartupAction");
$tw.utils.each($tw.wiki.filterTiddlers("[all[shadows+tiddlers]tag[" + tag + "]!has[draft.of]]"),function(title) {
$tw.rootWidget.invokeActionString($tw.wiki.getTiddlerText(title),$tw.rootWidget);
});
};
executeStartupTiddlers("$:/tags/StartupAction");
if($tw.browser) { if($tw.browser) {
executeStartupTiddlers("$:/tags/StartupAction/Browser"); $tw.rootWidget.executeStartupTiddlers("$:/tags/StartupAction/Browser");
} }
if($tw.node) { if($tw.node) {
executeStartupTiddlers("$:/tags/StartupAction/Node"); $tw.rootWidget.executeStartupTiddlers("$:/tags/StartupAction/Node");
} }
// Kick off the language manager and switcher // Kick off the language manager and switcher
$tw.language = new $tw.Language(); $tw.language = new $tw.Language();

View File

@ -571,6 +571,16 @@ Widget.prototype.invokeActionString = function(actions,triggeringWidget,event,va
return widgetNode.invokeActions(this,event); return widgetNode.invokeActions(this,event);
}; };
/*
Execute action tiddlers by tag
*/
Widget.prototype.executeStartupTiddlers = function(tag) {
var self = this;
$tw.utils.each(self.wiki.filterTiddlers("[all[shadows+tiddlers]tag[" + tag + "]!has[draft.of]]"),function(title) {
self.invokeActionString(self.wiki.getTiddlerText(title),self);
});
};
Widget.prototype.allowActionPropagation = function() { Widget.prototype.allowActionPropagation = function() {
return true; return true;
}; };

View File

@ -1,16 +1,21 @@
created: 20180323092308399 created: 20180323092308399
modified: 20190307183936035 modified: 20201025161723719
tags: Features tags: Features
title: StartupActions title: StartupActions
type: text/vnd.tiddlywiki type: text/vnd.tiddlywiki
TiddlyWiki executes any ActionWidgets found in tiddlers with the following system tags during startup: TiddlyWiki executes any ActionWidgets found in tiddlers with the following system tags during startup:
* <<tag "$:/tags/StartupAction">> (executed on all platforms) * Executed during initial startup:
* <<tag "$:/tags/StartupAction/Browser">> (only executed when running in the browser) ** <<tag "$:/tags/StartupAction">> (executed on all platforms)
* <<tag "$:/tags/StartupAction/Node">> (only executed when running under Node.js) ** <<tag "$:/tags/StartupAction/Browser">> (only executed when running in the browser)
** <<tag "$:/tags/StartupAction/Node">> (only executed when running under Node.js)
* Executed after startup rendering:
** <<.from-version "5.1.23">> <<tag "$:/tags/StartupAction/PostRender">> (only executed when running in the browser)
Startup actions are useful for customising TiddlyWiki according to environmental factors such as the screen size. For example, the following action widgets when placed in a tiddler tagged `$:/tags/StartupAction/Browser` will cause the sidebar to be hidden by default when the screen width is less than 1000 pixels: !! Initial Startup Actions
The initial startup actions are useful for customising TiddlyWiki according to environmental factors such as the screen size. For example, the following action widgets when placed in a tiddler tagged `$:/tags/StartupAction/Browser` will cause the sidebar to be hidden by default when the screen width is less than 1000 pixels:
``` ```
<$reveal type="lt" state="$:/info/browser/screen/width" text="3000"> <$reveal type="lt" state="$:/info/browser/screen/width" text="3000">
@ -28,8 +33,12 @@ Startup actions are useful for customising TiddlyWiki according to environmental
<$action-setfield $tiddler="$:/language" text={{{ [[$:/languages/en-GB]] [plugin-type[language]sort[description]removeprefix[$:/languages/]] +[prefix{$:/info/browser/language}] ~[[en-GB]] +[addprefix[$:/languages/]] }}}/> <$action-setfield $tiddler="$:/language" text={{{ [[$:/languages/en-GB]] [plugin-type[language]sort[description]removeprefix[$:/languages/]] +[prefix{$:/info/browser/language}] ~[[en-GB]] +[addprefix[$:/languages/]] }}}/>
``` ```
Note that global macros are not available within startup action tiddlers by default. If you need to access them then you'll need to explicitly include them with an ''import'' [[pragma|Pragma]] at the top of the tiddler: Note that global macros are not available within initial startup action tiddlers by default. If you need to access them then you'll need to explicitly include them with an ''import'' [[pragma|Pragma]] at the top of the tiddler:
``` ```
\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]] \import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]
``` ```
!! Post-Render Startup Actions
<<.from-version "5.1.23">> Post-render startup actions occur after the TiddlyWiki user interface has been rendered. This makes it possible to perform actions that depend on the rendered display (such as displaying modals).