1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-07-13 15:22:45 +00:00

Compare commits

...

26 Commits

Author SHA1 Message Date
Jeremy Ruston a812313072 Another pesky function wrapper 2026-02-24 11:00:27 +00:00
Jeremy Ruston f85cbeda70 Remove function wrapper
Thanks @Leilei332
2026-02-24 10:58:02 +00:00
Jeremy Ruston e9e22598ad Merge branch 'master' into wikify-operator 2026-02-24 10:44:01 +00:00
Saq Imtiaz 9f7763710e fix: MVV handling should distinguish between blank and undefined attributes (#9687) 2026-02-24 11:12:21 +01:00
lin onetwo b673651103 Fixes slow when import html on upgrade (#9689)
* Short-circuit the import option; only show it when you click a button

* Add aira-label

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* perf(import): lazy evaluate import options panel, shortcircuit when no options, and flatten let widgets

- Only parse $:/Import JSON when user expands the import options panel
- Skip all import option logic if no $:/tags/ImportOptions tiddlers exist
- Merge nested let widgets into single multi-variable let for better performance and readability
- Add lingo for import options panel and no-match message

This greatly improves import speed for large wikis, especially when no import options are present.

* fix(import): use correct transclusion for aria-label on import options panel buttons\n\nBind aria-label using {{$:/language/Import/Listing/ImportOptions/Caption}} instead of macro literal, matching TiddlyWiki convention and ensuring accessibility tools read the correct label.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-23 11:58:24 +01:00
Saq Imtiaz 49faefcca5 fix: zoomin storyview should not remove CSS properties when element is already removed (#9686) 2026-02-23 08:59:32 +01:00
Saq Imtiaz 75c26b46c6 fix: missing attributes must be undefined (#9682) 2026-02-22 22:16:07 +01:00
btheado add3d425b5 Add let filter run examples (#9681)
* Add :let filter run prefix examples

Includes one example from @yaisog at #8972

* Added link to the new :let filter run examples

* Fixed broken link
2026-02-22 21:10:10 +01:00
Mario Pietsch c23a0bedfd Add some links and info text to release notes (#9680) 2026-02-22 17:44:42 +00:00
Saq Imtiaz 36b20e02a3 ci: update to v7 cerebrus 2026-02-22 17:43:47 +01:00
Saq Imtiaz ab6172981c Update cerebrus action to version 7 2026-02-22 17:40:41 +01:00
lin onetwo 431b7fa3bf Update ImportListing.tid (#9674) 2026-02-21 17:37:37 +00:00
Jeremy Ruston 1c1f157079 More release note tweaks 2026-02-20 21:26:44 +00:00
Jeremy Ruston ac19f300a9 Fix changenote 2026-02-20 12:05:51 +00:00
Jeremy Ruston 9012b00806 Search changenotes and impact notes (#9670)
* Tweak some changenotes

* Tweak release note tabs

* Simplify summary tab

* Remove #8702 changes/impacts

* Search change notes and impacts

* Fix release note category search

* Tweak headline changenotes
2026-02-20 12:02:14 +00:00
Jeremy Ruston 07634d6595 Merge branch 'tiddlywiki-com' 2026-02-20 09:28:07 +00:00
Saq Imtiaz 785086e0a5 Fixes ESLint errors (#9668)
* fix: apply automatic eslint fixes

* lint: allow hashbang comment for tiddlywiki.js

* lint: first back of manual lint fixes for unused vars

* lint: added more fixes for unused vars

* lint: missed files

* lint: updated eslint config with selected rules from #9669
2026-02-20 08:38:42 +00:00
Saq Imtiaz 08f2b8bdf4 Fixes variable enumeration in widgets (#9648)
* fix: variable enumeration in widgets

* fix: fakeWidget should have a variables property

* fix: don't use spread properties

* fix: resolve more embarassing bugs

* chore: tests and whitespace

* fix: simplify opts check
2026-02-19 11:14:19 +00:00
Jeremy Ruston c305eb01eb Fix passing a filtered attribute as a MVV (#9663) 2026-02-19 12:11:39 +01:00
Jeremy Ruston 71462143bf Fix BackgroundActions example 2026-02-16 18:16:45 +00:00
IchijikuIchigo 8cd6bbc075 [ja_JP] Japanese translation update - 'Community' section of tiddlywiki.com (#9662)
* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: 381388f, 4dc89f6, 5fa1098

* [ja_JP] Japanese translation update from commit: 3c1d658

* [ja_JP] Japanese translation update from commit: 3c1d658

* [ja_JP] Japanese translation update from commit: 29a567f, 6aee5eb

* [ja_JP] Japanese translation update from commit: 0ac2b6c

* [ja_JP] Japanese translation update from commit: 1994574

* [ja_JP] Japanese translation update from commit: 5dfdbc8

* [ja_JP] Japanese translation update from commit: 1994574

* [ja_JP] Japanese translation update from commit: 81d8d67

* [ja_JP] Japanese translation update from commit: 81d8d67

* [ja_JP] Japanese translation update from commit: 4196d96

* [ja_JP] Japanese translation update from commit: 1994574

* [ja_JP] Japanese translation update from commit: 1994574

* [ja-JP] Japanese translation of 'community\project\TiddlyWiki Project.tid'

* [ja-JP] Japanese translation of 'community\docs\Community Cards Caveats.tid'

* [ja-JP] Japanese translation of 'community\project\TiddlyWiki People.tid'

* [ja-JP] Japanese translation of 'community\project\Vacant Positions.tid'

* [ja-JP] Japanese translation of 'community\docs\Community Cards.tid'

* [ja-JP] Japanese translation of 'community\docs\Displaying Community Cards.tid'

* [ja-JP] Japanese translation of 'community\docs\Submitting a Community Card.tid'

* [ja-JP] Japanese translation of 'community\tools\cards\Procedures.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Resources.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Resources.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Community Links Aggregator.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\TiddlyWiki Newsletter.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\marketplace\TiddlyWiki Marketplace.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\HelloThumbnail.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Improving TiddlyWiki Documentation.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\Translate TiddlyWiki into your language.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\TiddlyWiki_European_Meetup_2016.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\TiddlyWiki_European_Meetup_2017.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\editions\Tidme by oflg.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\editions\_Cardo-A Task and Project Management Wiki_ by David_Szego.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\editions\Drift by Tony K.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\editions\Stroll by David Gifford.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\plugins\GSD5.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\plugins\TiddlyWiki for Scholars.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\_TiddlyStudy_ by Kebi.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\Wikilabs by PMario.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\Projectify by Nicolas Petton.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\plugins\TW5-Graph by Flibbles.tid'

* [ja-JP] Japanese translation has been modified to display the ja-title.

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\articles\_A free, open source wiki revisited_ by Mark Gibbs, NetworkWorld.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\articles\_Notizen mit TiddlyWiki systemubergreifend nutzen_ by Michael Sonntag.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\articles\_Setting Up a Personal TiddlyWiki Server on OS X_ by Kris Johnson.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\articles\_TiddlyWiki 5 im Betatest_ by besim.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\articles\_TiddlyWiki_ by Sander de Boer.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\community\resources\TiddlyWiki Posts.tid'

* [ja-JP] A little correction to the Japanese translation
2026-02-15 11:56:40 +01:00
Mario Pietsch 6fc65c1560 [DOCS] Slightly Improve "How to create keyboard shortcuts" Readability (#9478) 2026-02-05 17:01:40 +01:00
Mario Pietsch ab29f17d35 [DOCS] Add Repo-link to "Installing official plugins on Node.js" (#9483)
* [DOCS] Add Repo-link to "Installing official plugins on Node.js"

* Update Installing official plugins on Node.js.tid
2026-02-04 21:26:48 +01:00
IchijikuIchigo 5ae4770317 [ja_JP] Update of Japanese translations (#9581)
* [ja_JP] Japanese translation update from commit: 5ff4e02

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hire-jeremy\Hire Jeremy Sidebar Segment.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hire-jeremy\Hire Jeremy Sidebar Segment.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hire-jeremy\HireJeremy.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - Community Survey.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\hellothere\thumbnails\HelloThumbnail - TW5-Graph.tid'

* [ja_JP] Japanese translation update from commit: e3af967

* [ja_JP] Japanese translation update from commit: bdc0fe1

* [ja_JP] Japanese translation update from commit: e3af967

* [ja_JP] Japanese translation update from commit: bdc0fe1, e3af967

* [ja_JP] Japanese translation update from commit: fdafdba, e3af967, ecba671, 935e89b

* [ja_JP] Japanese translation update from commit: bdc0fe1, e3af967

* [ja_JP] Japanese translation update from commit: 0763ee5

* [ja_JP] Japanese translation update from commit: bdc0fe1

* [ja_JP] Japanese translation update from commit: b0d950f, 4dc89f6

* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: b0d950f, 4dc89f6

* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: b0d950f

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\Commands.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\BuildCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\ClearPasswordCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\CommandsCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\DeleteTiddlersCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\EditionsCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\FetchCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\HelpCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\ImportCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\InitCommand.tid'

* [ja-JP] Japanese translation of 'editions\ja-JP\tiddlers\commands\ListenCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\LoadCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\MakeLibraryCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\OutputCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\PasswordCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\RenderCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\SaveCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\SaveWikiFolderCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\SetFieldCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\UnpackPluginCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\VerboseCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\VersionCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\RenderTiddlerCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\RenderTiddlersCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\SaveTiddlerCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\SaveTiddlersCommand.tid'

* [ja-JP] Japanese translation of 'editions\tw5.com\tiddlers\commands\ServerCommand.tid'
2026-02-04 21:24:55 +01:00
Jeremy Ruston 1e47b88dc7 Merge branch 'master' into wikify-operator 2025-06-03 16:39:19 +01:00
Jeremy Ruston 55cf0b2965 Add wikify operator 2024-11-07 16:26:07 +00:00
411 changed files with 5712 additions and 4387 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
steps: steps:
- name: build-size-check - name: build-size-check
id: get_sizes id: get_sizes
uses: TiddlyWiki/cerebrus@v6 uses: TiddlyWiki/cerebrus@v7
with: with:
pr_number: ${{ github.event.pull_request.number }} pr_number: ${{ github.event.pull_request.number }}
repo: ${{ github.repository }} repo: ${{ github.repository }}
+1 -1
View File
@@ -25,7 +25,7 @@ jobs:
steps: steps:
- name: Build and check size - name: Build and check size
uses: TiddlyWiki/cerebrus@v6 uses: TiddlyWiki/cerebrus@v7
with: with:
pr_number: ${{ inputs.pr_number }} pr_number: ${{ inputs.pr_number }}
repo: ${{ github.repository }} repo: ${{ github.repository }}
+1 -1
View File
@@ -26,7 +26,7 @@ jobs:
# Step 2: Validate change notes # Step 2: Validate change notes
- name: Validate Change Notes - name: Validate Change Notes
uses: TiddlyWiki/cerebrus@v6 uses: TiddlyWiki/cerebrus@v7
with: with:
pr_number: ${{ github.event.pull_request.number }} pr_number: ${{ github.event.pull_request.number }}
repo: ${{ github.repository }} repo: ${{ github.repository }}
+32 -32
View File
@@ -15,40 +15,40 @@ var fs = require("fs"),
{ optimize } = require("svgo"), { optimize } = require("svgo"),
config = { config = {
plugins: [ plugins: [
'cleanupAttrs', "cleanupAttrs",
'removeDoctype', "removeDoctype",
'removeXMLProcInst', "removeXMLProcInst",
'removeComments', "removeComments",
'removeMetadata', "removeMetadata",
'removeTitle', "removeTitle",
'removeDesc', "removeDesc",
'removeUselessDefs', "removeUselessDefs",
'removeEditorsNSData', "removeEditorsNSData",
'removeEmptyAttrs', "removeEmptyAttrs",
'removeHiddenElems', "removeHiddenElems",
'removeEmptyText', "removeEmptyText",
'removeEmptyContainers', "removeEmptyContainers",
// 'removeViewBox', // 'removeViewBox',
'cleanupEnableBackground', "cleanupEnableBackground",
'convertStyleToAttrs', "convertStyleToAttrs",
'convertColors', "convertColors",
'convertPathData', "convertPathData",
'convertTransform', "convertTransform",
'removeUnknownsAndDefaults', "removeUnknownsAndDefaults",
'removeNonInheritableGroupAttrs', "removeNonInheritableGroupAttrs",
'removeUselessStrokeAndFill', "removeUselessStrokeAndFill",
'removeUnusedNS', "removeUnusedNS",
'cleanupIDs', "cleanupIDs",
'cleanupNumericValues', "cleanupNumericValues",
'moveElemsAttrsToGroup', "moveElemsAttrsToGroup",
'moveGroupAttrsToElems', "moveGroupAttrsToElems",
'collapseGroups', "collapseGroups",
// 'removeRasterImages', // 'removeRasterImages',
'mergePaths', "mergePaths",
'convertShapeToPath', "convertShapeToPath",
'sortAttrs', "sortAttrs",
//'removeDimensions', //'removeDimensions',
{name: 'removeAttrs', params: { attrs: '(stroke|fill)' } } {name: "removeAttrs", params: { attrs: "(stroke|fill)" } }
] ]
}; };
@@ -72,7 +72,7 @@ files.forEach(function(filename) {
var newSVG = header.join("\n") + "\n\n" + result.data.replace("&lt;&lt;now &quot;DD&quot;&gt;&gt;","<<now \"DD\">>"); var newSVG = header.join("\n") + "\n\n" + result.data.replace("&lt;&lt;now &quot;DD&quot;&gt;&gt;","<<now \"DD\">>");
fs.writeFileSync(filepath,newSVG); fs.writeFileSync(filepath,newSVG);
} else { } else {
console.log("Error " + err + " with " + filename) console.log("Error " + err + " with " + filename);
process.exit(); process.exit();
}; };
} }
+27 -33
View File
@@ -12,8 +12,6 @@ On the server this file is executed directly to boot TiddlyWiki. In the browser,
var _boot = (function($tw) { var _boot = (function($tw) {
/*jslint node: true, browser: true */
/*global modules: false, $tw: false */
"use strict"; "use strict";
// Include bootprefix if we're not given module data // Include bootprefix if we're not given module data
@@ -37,7 +35,7 @@ if($tw.node) {
$tw.boot.log = function(str) { $tw.boot.log = function(str) {
$tw.boot.logMessages = $tw.boot.logMessages || []; $tw.boot.logMessages = $tw.boot.logMessages || [];
$tw.boot.logMessages.push(str); $tw.boot.logMessages.push(str);
} };
/* /*
Check if an object has a property Check if an object has a property
@@ -47,7 +45,7 @@ $tw.utils.hop = function(object,property) {
}; };
/** @deprecated Use Array.isArray instead */ /** @deprecated Use Array.isArray instead */
$tw.utils.isArray = value => Array.isArray(value); $tw.utils.isArray = (value) => Array.isArray(value);
/* /*
Check if an array is equal by value and by reference. Check if an array is equal by value and by reference.
@@ -127,7 +125,7 @@ $tw.utils.pushTop = function(array,value) {
}; };
/** @deprecated Use instanceof Date instead */ /** @deprecated Use instanceof Date instead */
$tw.utils.isDate = value => value instanceof Date; $tw.utils.isDate = (value) => value instanceof Date;
/** @deprecated Use array iterative methods instead */ /** @deprecated Use array iterative methods instead */
$tw.utils.each = function(object,callback) { $tw.utils.each = function(object,callback) {
@@ -138,7 +136,7 @@ $tw.utils.each = function(object,callback) {
return next !== false; return next !== false;
}); });
} else { } else {
Object.entries(object).every(entry => { Object.entries(object).every((entry) => {
const next = callback(entry[1], entry[0], object); const next = callback(entry[1], entry[0], object);
return next !== false; return next !== false;
}); });
@@ -565,7 +563,7 @@ using a lowercase extension only.
*/ */
$tw.utils.getFileExtensionInfo = function(ext) { $tw.utils.getFileExtensionInfo = function(ext) {
return ext ? $tw.config.fileExtensionInfo[ext.toLowerCase()] : null; return ext ? $tw.config.fileExtensionInfo[ext.toLowerCase()] : null;
} };
/* /*
Given an extension, get the correct encoding for that file. Given an extension, get the correct encoding for that file.
@@ -588,7 +586,7 @@ var globalCheck =[
" delete Object.prototype.__temp__;", " delete Object.prototype.__temp__;",
" }", " }",
" delete Object.prototype.__temp__;", " delete Object.prototype.__temp__;",
].join('\n'); ].join("\n");
/* /*
Run code globally with specified context variables in scope Run code globally with specified context variables in scope
@@ -616,7 +614,7 @@ $tw.utils.evalGlobal = function(code,context,filename,sandbox,allowGlobals) {
fn = Function("return " + code + "\n\n//# sourceURL=" + filename)(); // See https://github.com/TiddlyWiki/TiddlyWiki5/issues/6839 fn = Function("return " + code + "\n\n//# sourceURL=" + filename)(); // See https://github.com/TiddlyWiki/TiddlyWiki5/issues/6839
} else { } else {
if(sandbox){ if(sandbox){
fn = vm.runInContext(code,sandbox,filename) fn = vm.runInContext(code,sandbox,filename);
} else { } else {
fn = vm.runInThisContext(code,filename); fn = vm.runInThisContext(code,filename);
} }
@@ -727,7 +725,7 @@ $tw.utils.PasswordPrompt.prototype.createPrompt = function(options) {
var self = this; var self = this;
form.addEventListener("submit",function(event) { form.addEventListener("submit",function(event) {
// Collect the form data // Collect the form data
var data = {},t; var data = {};
$tw.utils.each(form.elements,function(element) { $tw.utils.each(form.elements,function(element) {
if(element.name && element.value) { if(element.name && element.value) {
data[element.name] = element.value; data[element.name] = element.value;
@@ -773,7 +771,7 @@ $tw.utils.PasswordPrompt.prototype.removePrompt = function(promptInfo) {
promptInfo.form.parentNode.removeChild(promptInfo.form); promptInfo.form.parentNode.removeChild(promptInfo.form);
this.setWrapperDisplay(); this.setWrapperDisplay();
} }
} };
/* /*
Crypto helper object for encrypted content. It maintains the password text in a closure, and provides methods to change Crypto helper object for encrypted content. It maintains the password text in a closure, and provides methods to change
@@ -812,7 +810,7 @@ $tw.utils.Crypto = function() {
}; };
this.hasPassword = function() { this.hasPassword = function() {
return !!currentPassword; return !!currentPassword;
} };
this.encrypt = function(text,password) { this.encrypt = function(text,password) {
// set default ks:256 -- see: http://bitwiseshiftleft.github.io/sjcl/doc/convenience.js.html // set default ks:256 -- see: http://bitwiseshiftleft.github.io/sjcl/doc/convenience.js.html
return callSjcl("encrypt",text,password,{v:1,iter:10000,ks:256,ts:64,mode:"ccm",adata:"",cipher:"aes"}); return callSjcl("encrypt",text,password,{v:1,iter:10000,ks:256,ts:64,mode:"ccm",adata:"",cipher:"aes"});
@@ -830,7 +828,7 @@ Execute the module named 'moduleName'. The name can optionally be relative to th
$tw.modules.execute = function(moduleName,moduleRoot) { $tw.modules.execute = function(moduleName,moduleRoot) {
var name = moduleName; var name = moduleName;
if(moduleName.charAt(0) === ".") { if(moduleName.charAt(0) === ".") {
name = $tw.utils.resolvePath(moduleName,moduleRoot) name = $tw.utils.resolvePath(moduleName,moduleRoot);
} }
if(!$tw.modules.titles[name]) { if(!$tw.modules.titles[name]) {
if($tw.modules.titles[name + ".js"]) { if($tw.modules.titles[name + ".js"]) {
@@ -891,7 +889,6 @@ $tw.modules.execute = function(moduleName,moduleRoot) {
if(!moduleInfo) { if(!moduleInfo) {
// We could not find the module on this path // We could not find the module on this path
// Try to defer to browserify etc, or node // Try to defer to browserify etc, or node
var deferredModule;
if($tw.browser) { if($tw.browser) {
if(window.require) { if(window.require) {
try { try {
@@ -1146,8 +1143,7 @@ enableIndexers - Array of indexer names to enable, or null to use all available
*/ */
$tw.Wiki = function(options) { $tw.Wiki = function(options) {
options = options || {}; options = options || {};
var self = this, var tiddlers = Object.create(null), // Hashmap of tiddlers
tiddlers = Object.create(null), // Hashmap of tiddlers
tiddlerTitles = null, // Array of tiddler titles tiddlerTitles = null, // Array of tiddler titles
getTiddlerTitles = function() { getTiddlerTitles = function() {
if(!tiddlerTitles) { if(!tiddlerTitles) {
@@ -1201,7 +1197,7 @@ $tw.Wiki = function(options) {
shadow: this.isShadowTiddler(title), shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title) exists: this.tiddlerExists(title)
} }
} };
// Save the new tiddler // Save the new tiddler
tiddlers[title] = tiddler; tiddlers[title] = tiddler;
// Check we've got the title // Check we've got the title
@@ -1211,7 +1207,7 @@ $tw.Wiki = function(options) {
tiddler: tiddler, tiddler: tiddler,
shadow: this.isShadowTiddler(title), shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title) exists: this.tiddlerExists(title)
} };
// Update indexes // Update indexes
this.clearCache(title); this.clearCache(title);
this.clearGlobalCache(); this.clearGlobalCache();
@@ -1236,7 +1232,7 @@ $tw.Wiki = function(options) {
shadow: this.isShadowTiddler(title), shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title) exists: this.tiddlerExists(title)
} }
} };
// Delete the tiddler // Delete the tiddler
delete tiddlers[title]; delete tiddlers[title];
// Delete it from the list of titles // Delete it from the list of titles
@@ -1251,7 +1247,7 @@ $tw.Wiki = function(options) {
tiddler: this.getTiddler(title), tiddler: this.getTiddler(title),
shadow: this.isShadowTiddler(title), shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title) exists: this.tiddlerExists(title)
} };
// Update indexes // Update indexes
this.clearCache(title); this.clearCache(title);
this.clearGlobalCache(); this.clearGlobalCache();
@@ -1439,8 +1435,7 @@ $tw.Wiki = function(options) {
// Unregister the plugin tiddlers of a particular type, or null/undefined for any type, optionally restricting unregistering to an array of tiddler titles. Returns an array of the titles affected // Unregister the plugin tiddlers of a particular type, or null/undefined for any type, optionally restricting unregistering to an array of tiddler titles. Returns an array of the titles affected
this.unregisterPluginTiddlers = function(pluginType,titles) { this.unregisterPluginTiddlers = function(pluginType,titles) {
var self = this, var unregisteredTitles = [];
unregisteredTitles = [];
// Remove any previous registered plugins of this type // Remove any previous registered plugins of this type
for(var t=pluginTiddlers.length-1; t>=0; t--) { for(var t=pluginTiddlers.length-1; t>=0; t--) {
var tiddler = pluginTiddlers[t]; var tiddler = pluginTiddlers[t];
@@ -1454,7 +1449,6 @@ $tw.Wiki = function(options) {
// Unpack the currently registered plugins, creating shadow tiddlers for their constituent tiddlers // Unpack the currently registered plugins, creating shadow tiddlers for their constituent tiddlers
this.unpackPluginTiddlers = function() { this.unpackPluginTiddlers = function() {
var self = this;
// Sort the plugin titles by the `plugin-priority` field, if this field is missing, default to 1 // Sort the plugin titles by the `plugin-priority` field, if this field is missing, default to 1
pluginTiddlers.sort(function(a, b) { pluginTiddlers.sort(function(a, b) {
var priorityA = "plugin-priority" in a.fields ? a.fields["plugin-priority"] : 1; var priorityA = "plugin-priority" in a.fields ? a.fields["plugin-priority"] : 1;
@@ -1570,7 +1564,7 @@ $tw.Wiki.prototype.processSafeMode = function() {
// Assemble a report tiddler // Assemble a report tiddler
var titleReportTiddler = "TiddlyWiki Safe Mode", var titleReportTiddler = "TiddlyWiki Safe Mode",
report = []; report = [];
report.push("TiddlyWiki has been started in [[safe mode|https://tiddlywiki.com/static/SafeMode.html]]. All plugins are temporarily disabled. Most customisations have been disabled by renaming the following tiddlers:") report.push("TiddlyWiki has been started in [[safe mode|https://tiddlywiki.com/static/SafeMode.html]]. All plugins are temporarily disabled. Most customisations have been disabled by renaming the following tiddlers:");
// Delete the overrides // Delete the overrides
overrides.forEach(function(title) { overrides.forEach(function(title) {
var tiddler = self.getTiddler(title), var tiddler = self.getTiddler(title),
@@ -1579,7 +1573,7 @@ $tw.Wiki.prototype.processSafeMode = function() {
self.addTiddler(new $tw.Tiddler(tiddler, {title: newTitle})); self.addTiddler(new $tw.Tiddler(tiddler, {title: newTitle}));
report.push("* [[" + title + "|" + newTitle + "]]"); report.push("* [[" + title + "|" + newTitle + "]]");
}); });
report.push() report.push();
this.addTiddler(new $tw.Tiddler({title: titleReportTiddler, text: report.join("\n\n")})); this.addTiddler(new $tw.Tiddler({title: titleReportTiddler, text: report.join("\n\n")}));
// Set $:/DefaultTiddlers to point to our report // Set $:/DefaultTiddlers to point to our report
this.addTiddler(new $tw.Tiddler({title: "$:/DefaultTiddlers", text: "[[" + titleReportTiddler + "]]"})); this.addTiddler(new $tw.Tiddler({title: "$:/DefaultTiddlers", text: "[[" + titleReportTiddler + "]]"}));
@@ -2013,7 +2007,7 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
value = $tw.utils.stringifyList(path.relative(rootPath, filename).split(path.sep).slice(0, -1)); value = $tw.utils.stringifyList(path.relative(rootPath, filename).split(path.sep).slice(0, -1));
break; break;
case "filepath": case "filepath":
value = path.relative(rootPath, filename).split(path.sep).join('/'); value = path.relative(rootPath, filename).split(path.sep).join("/");
break; break;
case "filename": case "filename":
value = path.basename(filename); value = path.basename(filename);
@@ -2066,7 +2060,7 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
} }
}); });
return arrayOfFiles; return arrayOfFiles;
} };
// Process the listed tiddlers // Process the listed tiddlers
$tw.utils.each(filesInfo.tiddlers,function(tidInfo) { $tw.utils.each(filesInfo.tiddlers,function(tidInfo) {
if(tidInfo.prefix && tidInfo.suffix) { if(tidInfo.prefix && tidInfo.suffix) {
@@ -2175,7 +2169,7 @@ Returns the path of the plugin folder
$tw.findLibraryItem = function(name,paths) { $tw.findLibraryItem = function(name,paths) {
var pathIndex = 0; var pathIndex = 0;
do { do {
var pluginPath = path.resolve(paths[pathIndex],"./" + name) var pluginPath = path.resolve(paths[pathIndex],"./" + name);
if(fs.existsSync(pluginPath) && fs.statSync(pluginPath).isDirectory()) { if(fs.existsSync(pluginPath) && fs.statSync(pluginPath).isDirectory()) {
return pluginPath; return pluginPath;
} }
@@ -2534,7 +2528,7 @@ $tw.boot.initStartup = function(options) {
} }
}); });
return result; return result;
} };
} }
}; };
$tw.boot.loadStartup = function(options){ $tw.boot.loadStartup = function(options){
@@ -2551,7 +2545,7 @@ $tw.boot.loadStartup = function(options){
} }
// Give hooks a chance to modify the store // Give hooks a chance to modify the store
$tw.hooks.invokeHook("th-boot-tiddlers-loaded"); $tw.hooks.invokeHook("th-boot-tiddlers-loaded");
} };
$tw.boot.execStartup = function(options){ $tw.boot.execStartup = function(options){
// Unpack plugin tiddlers // Unpack plugin tiddlers
$tw.wiki.readPluginInfo(); $tw.wiki.readPluginInfo();
@@ -2581,7 +2575,7 @@ $tw.boot.execStartup = function(options){
$tw.boot.disabledStartupModules = $tw.boot.disabledStartupModules || []; $tw.boot.disabledStartupModules = $tw.boot.disabledStartupModules || [];
// Repeatedly execute the next eligible task // Repeatedly execute the next eligible task
$tw.boot.executeNextStartupTask(options.callback); $tw.boot.executeNextStartupTask(options.callback);
} };
/* /*
Startup TiddlyWiki Startup TiddlyWiki
*/ */
@@ -2600,7 +2594,7 @@ $tw.addUnloadTask = function(task) {
if($tw.unloadTasks.indexOf(task) === -1) { if($tw.unloadTasks.indexOf(task) === -1) {
$tw.unloadTasks.push(task); $tw.unloadTasks.push(task);
} }
} };
/* /*
Execute the remaining eligible startup tasks Execute the remaining eligible startup tasks
@@ -2647,7 +2641,7 @@ $tw.boot.executeNextStartupTask = function(callback) {
} }
taskIndex++; taskIndex++;
} }
if(typeof callback === 'function') { if(typeof callback === "function") {
callback(); callback();
} }
return false; return false;
+2 -2
View File
@@ -103,7 +103,7 @@ Commander.prototype.executeNextCommand = function() {
c = new command.Command(params,this); c = new command.Command(params,this);
err = c.execute(); err = c.execute();
if(err && typeof err.then === "function") { if(err && typeof err.then === "function") {
err.then(e => { e ? this.callback(e) : this.executeNextCommand(); }); err.then((e) => { e ? this.callback(e) : this.executeNextCommand(); });
} else if(err) { } else if(err) {
this.callback(err); this.callback(err);
} else { } else {
@@ -120,7 +120,7 @@ Commander.prototype.executeNextCommand = function() {
}); });
err = c.execute(); err = c.execute();
if(err && typeof err.then === "function") { if(err && typeof err.then === "function") {
err.then(e => { if(e) this.callback(e); }); err.then((e) => { if(e) this.callback(e); });
} else if(err) { } else if(err) {
this.callback(err); this.callback(err);
} }
+1 -1
View File
@@ -25,7 +25,7 @@ Command.prototype.execute = function() {
if(!filter) { if(!filter) {
return "No filter specified"; return "No filter specified";
} }
var commands = this.commander.wiki.filterTiddlers(filter) var commands = this.commander.wiki.filterTiddlers(filter);
if(commands.length === 0) { if(commands.length === 0) {
return "No tiddlers found for filter '" + filter + "'"; return "No tiddlers found for filter '" + filter + "'";
} }
+1 -2
View File
@@ -24,8 +24,7 @@ Command.prototype.execute = function() {
if(this.params.length < 1) { if(this.params.length < 1) {
return "Missing filter"; return "Missing filter";
} }
var self = this, var wiki = this.commander.wiki,
wiki = this.commander.wiki,
filter = this.params[0], filter = this.params[0],
tiddlers = wiki.filterTiddlers(filter); tiddlers = wiki.filterTiddlers(filter);
$tw.utils.each(tiddlers,function(title) { $tw.utils.each(tiddlers,function(title) {
+5 -5
View File
@@ -66,7 +66,7 @@ Command.prototype.fetchFiles = function(options) {
// Get the list of URLs // Get the list of URLs
var urls; var urls;
if(options.url) { if(options.url) {
urls = [options.url] urls = [options.url];
} else if(options.urlFilter) { } else if(options.urlFilter) {
urls = this.commander.wiki.filterTiddlers(options.urlFilter); urls = this.commander.wiki.filterTiddlers(options.urlFilter);
} else { } else {
@@ -112,7 +112,7 @@ Command.prototype.fetchFile = function(url,options,callback,redirectCount) {
if(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) { if(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {
return self.fetchFile(response.headers.location,options,callback,redirectCount + 1); return self.fetchFile(response.headers.location,options,callback,redirectCount + 1);
} else { } else {
return callback("Error " + response.statusCode + " retrieving " + url) return callback("Error " + response.statusCode + " retrieving " + url);
} }
} }
}); });
@@ -153,18 +153,18 @@ Command.prototype.processBody = function(body,type,options,url) {
if(options.transformFilter) { if(options.transformFilter) {
var transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [""])[0]; var transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [""])[0];
if(transformedTitle) { if(transformedTitle) {
self.commander.log("Importing " + title + " as " + transformedTitle) self.commander.log("Importing " + title + " as " + transformedTitle);
newTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle}); newTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});
} }
} else { } else {
self.commander.log("Importing " + title) self.commander.log("Importing " + title);
newTiddler = tiddler; newTiddler = tiddler;
} }
self.commander.wiki.importTiddler(newTiddler); self.commander.wiki.importTiddler(newTiddler);
count++; count++;
} }
}); });
self.commander.log("Imported " + count + " tiddlers") self.commander.log("Imported " + count + " tiddlers");
}; };
exports.Command = Command; exports.Command = Command;
+1 -2
View File
@@ -22,8 +22,7 @@ var Command = function(params,commander,callback) {
Command.prototype.execute = function() { Command.prototype.execute = function() {
var self = this, var self = this,
fs = require("fs"), fs = require("fs");
path = require("path");
if(this.params.length < 2) { if(this.params.length < 2) {
return "Missing parameters"; return "Missing parameters";
} }
+1 -2
View File
@@ -20,8 +20,7 @@ var Command = function(params,commander) {
}; };
Command.prototype.execute = function() { Command.prototype.execute = function() {
var fs = require("fs"), var fs = require("fs");
path = require("path");
// Check that we don't already have a valid wiki folder // Check that we don't already have a valid wiki folder
if($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) { if($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {
return "Wiki folder is not empty"; return "Wiki folder is not empty";
-1
View File
@@ -19,7 +19,6 @@ exports.info = {
}; };
var Command = function(params,commander,callback) { var Command = function(params,commander,callback) {
var self = this;
this.params = params; this.params = params;
this.commander = commander; this.commander = commander;
this.callback = callback; this.callback = callback;
+1 -3
View File
@@ -21,9 +21,7 @@ var Command = function(params,commander,callback) {
}; };
Command.prototype.execute = function() { Command.prototype.execute = function() {
var self = this, var self = this;
fs = require("fs"),
path = require("path");
if(this.params.length < 1) { if(this.params.length < 1) {
return "Missing filename"; return "Missing filename";
} }
+1 -2
View File
@@ -21,8 +21,7 @@ var Command = function(params,commander,callback) {
}; };
Command.prototype.execute = function() { Command.prototype.execute = function() {
var fs = require("fs"), var path = require("path");
path = require("path");
if(this.params.length < 1) { if(this.params.length < 1) {
return "Missing output path"; return "Missing output path";
} }
-2
View File
@@ -9,8 +9,6 @@ Render individual tiddlers and save the results to the specified files
"use strict"; "use strict";
var widget = require("$:/core/modules/widgets/widget.js");
exports.info = { exports.info = {
name: "render", name: "render",
synchronous: true synchronous: true
-2
View File
@@ -9,8 +9,6 @@ Command to render several tiddlers to a folder of files
"use strict"; "use strict";
var widget = require("$:/core/modules/widgets/widget.js");
exports.info = { exports.info = {
name: "rendertiddlers", name: "rendertiddlers",
synchronous: true synchronous: true
-1
View File
@@ -25,7 +25,6 @@ Saves individual tiddlers in their raw text or binary format to the specified fi
return "Missing filename filter"; return "Missing filename filter";
} }
var self = this, var self = this,
fs = require("fs"),
path = require("path"), path = require("path"),
result = null, result = null,
wiki = this.commander.wiki, wiki = this.commander.wiki,
-2
View File
@@ -9,8 +9,6 @@ Command to save several tiddlers to a folder of files
"use strict"; "use strict";
var widget = require("$:/core/modules/widgets/widget.js");
exports.info = { exports.info = {
name: "savetiddlers", name: "savetiddlers",
synchronous: true synchronous: true
+1 -1
View File
@@ -183,7 +183,7 @@ WikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {
}; };
WikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) { WikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {
var title = tiddler.fields.title, fileInfo, pathFilters, extFilters; var fileInfo, pathFilters, extFilters;
if(this.wiki.tiddlerExists("$:/config/FileSystemPaths")) { if(this.wiki.tiddlerExists("$:/config/FileSystemPaths")) {
pathFilters = this.wiki.getTiddlerText("$:/config/FileSystemPaths","").split("\n"); pathFilters = this.wiki.getTiddlerText("$:/config/FileSystemPaths","").split("\n");
} }
-1
View File
@@ -17,7 +17,6 @@ exports.info = {
}; };
var Command = function(params,commander,callback) { var Command = function(params,commander,callback) {
var self = this;
this.params = params; this.params = params;
this.commander = commander; this.commander = commander;
this.callback = callback; this.callback = callback;
+1 -4
View File
@@ -9,8 +9,6 @@ Command to modify selected tiddlers to set a field to the text of a template tid
"use strict"; "use strict";
var widget = require("$:/core/modules/widgets/widget.js");
exports.info = { exports.info = {
name: "setfield", name: "setfield",
synchronous: true synchronous: true
@@ -26,8 +24,7 @@ Command.prototype.execute = function() {
if(this.params.length < 4) { if(this.params.length < 4) {
return "Missing parameters"; return "Missing parameters";
} }
var self = this, var wiki = this.commander.wiki,
wiki = this.commander.wiki,
filter = this.params[0], filter = this.params[0],
fieldname = this.params[1] || "text", fieldname = this.params[1] || "text",
templatetitle = this.params[2], templatetitle = this.params[2],
+5 -6
View File
@@ -26,7 +26,7 @@ exports.getSubdirectories = function(dirPath) {
} }
}); });
return subdirs; return subdirs;
} };
/* /*
Recursively (and synchronously) copy a directory and all its content Recursively (and synchronously) copy a directory and all its content
@@ -46,8 +46,7 @@ exports.copyDirectory = function(srcPath,dstPath) {
} }
// Function to copy a folder full of files // Function to copy a folder full of files
var copy = function(srcPath,dstPath) { var copy = function(srcPath,dstPath) {
var srcStats = fs.lstatSync(srcPath), var srcStats = fs.lstatSync(srcPath);
dstExists = fs.existsSync(dstPath);
if(srcStats.isFile()) { if(srcStats.isFile()) {
$tw.utils.copyFile(srcPath,dstPath); $tw.utils.copyFile(srcPath,dstPath);
} else if(srcStats.isDirectory()) { } else if(srcStats.isDirectory()) {
@@ -345,18 +344,18 @@ exports.generateTiddlerFilepath = function(title,options) {
// Replace any Windows control codes // Replace any Windows control codes
filepath = filepath.replace(/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i,"_$1_"); filepath = filepath.replace(/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i,"_$1_");
// Replace any leading spaces with the same number of underscores // Replace any leading spaces with the same number of underscores
filepath = filepath.replace(/^ +/,function (u) { return u.replace(/ /g, "_")}); filepath = filepath.replace(/^ +/,function (u) { return u.replace(/ /g, "_");});
//If the path does not start with "." or ".." && a path seperator, then //If the path does not start with "." or ".." && a path seperator, then
if(!/^\.{1,2}[/\\]/g.test(filepath)) { if(!/^\.{1,2}[/\\]/g.test(filepath)) {
// Don't let the filename start with any dots because such files are invisible on *nix // Don't let the filename start with any dots because such files are invisible on *nix
filepath = filepath.replace(/^\.+/g,function (u) { return u.replace(/\./g, "_")}); filepath = filepath.replace(/^\.+/g,function (u) { return u.replace(/\./g, "_");});
} }
// Replace any Unicode control codes // Replace any Unicode control codes
filepath = filepath.replace(/[\x00-\x1f\x80-\x9f]/g,"_"); filepath = filepath.replace(/[\x00-\x1f\x80-\x9f]/g,"_");
// Replace any characters that can't be used in cross-platform filenames // Replace any characters that can't be used in cross-platform filenames
filepath = $tw.utils.transliterate(filepath.replace(/<|>|~|\:|\"|\||\?|\*|\^/g,"_")); filepath = $tw.utils.transliterate(filepath.replace(/<|>|~|\:|\"|\||\?|\*|\^/g,"_"));
// Replace any dots or spaces at the end of the extension with the same number of underscores // Replace any dots or spaces at the end of the extension with the same number of underscores
extension = extension.replace(/[\. ]+$/, function (u) { return u.replace(/[\. ]/g, "_")}); extension = extension.replace(/[\. ]+$/, function (u) { return u.replace(/[\. ]/g, "_");});
// Truncate the extension if it is too long // Truncate the extension if it is too long
if(extension.length > 32) { if(extension.length > 32) {
extension = extension.substr(0,32); extension = extension.substr(0,32);
+1 -3
View File
@@ -10,9 +10,7 @@ Authenticator for WWW basic authentication
"use strict"; "use strict";
if($tw.node) { if($tw.node) {
var util = require("util"), var fs = require("fs"),
fs = require("fs"),
url = require("url"),
path = require("path"); path = require("path");
} }
+9 -9
View File
@@ -9,8 +9,9 @@ Serve tiddlers over http
"use strict"; "use strict";
let fs, url, path, querystring, crypto, zlib;
if($tw.node) { if($tw.node) {
var util = require("util"),
fs = require("fs"), fs = require("fs"),
url = require("url"), url = require("url"),
path = require("path"), path = require("path"),
@@ -41,7 +42,7 @@ function Server(options) {
} }
} }
// Setup the default required plugins // Setup the default required plugins
this.requiredPlugins = this.get("required-plugins").split(','); this.requiredPlugins = this.get("required-plugins").split(",");
// Initialise CORS // Initialise CORS
this.corsEnable = this.get("cors-enable") === "yes"; this.corsEnable = this.get("cors-enable") === "yes";
// Initialise CSRF // Initialise CSRF
@@ -62,9 +63,9 @@ function Server(options) {
this.authorizationPrincipals = { this.authorizationPrincipals = {
readers: (this.get("readers") || authorizedUserName).split(",").map($tw.utils.trim), readers: (this.get("readers") || authorizedUserName).split(",").map($tw.utils.trim),
writers: (this.get("writers") || authorizedUserName).split(",").map($tw.utils.trim) writers: (this.get("writers") || authorizedUserName).split(",").map($tw.utils.trim)
} };
if(this.get("admin") || authorizedUserName !== "(anon)") { if(this.get("admin") || authorizedUserName !== "(anon)") {
this.authorizationPrincipals["admin"] = (this.get("admin") || authorizedUserName).split(',').map($tw.utils.trim) this.authorizationPrincipals["admin"] = (this.get("admin") || authorizedUserName).split(",").map($tw.utils.trim);
} }
// Load and initialise authenticators // Load and initialise authenticators
$tw.modules.forEachModuleOfType("authenticator", function(title,authenticatorDefinition) { $tw.modules.forEachModuleOfType("authenticator", function(title,authenticatorDefinition) {
@@ -91,7 +92,7 @@ function Server(options) {
this.listenOptions = { this.listenOptions = {
key: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsKeyFilepath),"utf8"), key: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsKeyFilepath),"utf8"),
cert: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsCertFilepath),"utf8"), cert: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsCertFilepath),"utf8"),
passphrase: tlsPassphrase || '' passphrase: tlsPassphrase || ""
}; };
this.protocol = "https"; this.protocol = "https";
} }
@@ -116,7 +117,7 @@ encoding: the encoding of the data to send (passed to the end method of the resp
*/ */
function sendResponse(request,response,statusCode,headers,data,encoding) { function sendResponse(request,response,statusCode,headers,data,encoding) {
if(this.enableBrowserCache && (statusCode == 200)) { if(this.enableBrowserCache && (statusCode == 200)) {
var hash = crypto.createHash('md5'); var hash = crypto.createHash("md5");
// Put everything into the hash that could change and invalidate the data that // Put everything into the hash that could change and invalidate the data that
// the browser already stored. The headers the data and the encoding. // the browser already stored. The headers the data and the encoding.
hash.update(data); hash.update(data);
@@ -211,7 +212,6 @@ Server.prototype.addAuthenticator = function(AuthenticatorClass) {
Server.prototype.findMatchingRoute = function(request,state) { Server.prototype.findMatchingRoute = function(request,state) {
for(var t=0; t<this.routes.length; t++) { for(var t=0; t<this.routes.length; t++) {
var potentialRoute = this.routes[t], var potentialRoute = this.routes[t],
pathRegExp = potentialRoute.path,
pathname = state.urlInfo.pathname, pathname = state.urlInfo.pathname,
match; match;
if(state.pathPrefix) { if(state.pathPrefix) {
@@ -250,7 +250,7 @@ Check whether a given user is authorized for the specified authorizationType ("r
Server.prototype.isAuthorized = function(authorizationType,username) { Server.prototype.isAuthorized = function(authorizationType,username) {
var principals = this.authorizationPrincipals[authorizationType] || []; var principals = this.authorizationPrincipals[authorizationType] || [];
return principals.indexOf("(anon)") !== -1 || (username && (principals.indexOf("(authenticated)") !== -1 || principals.indexOf(username) !== -1)); return principals.indexOf("(anon)") !== -1 || (username && (principals.indexOf("(authenticated)") !== -1 || principals.indexOf(username) !== -1));
} };
Server.prototype.requestHandler = function(request,response,options) { Server.prototype.requestHandler = function(request,response,options) {
options = options || {}; options = options || {};
@@ -337,7 +337,7 @@ Server.prototype.requestHandler = function(request,response,options) {
request.on("end",function() { request.on("end",function() {
state.data = Buffer.concat(data); state.data = Buffer.concat(data);
route.handler(request,response,state); route.handler(request,response,state);
}) });
} else { } else {
response.writeHead(400,"Invalid bodyFormat " + route.bodyFormat + " in route " + route.method + " " + route.path.source); response.writeHead(400,"Invalid bodyFormat " + route.bodyFormat + " in route " + route.method + " " + route.path.source);
response.end(); response.end();
+6 -6
View File
@@ -11,20 +11,20 @@ Base64 UTF-8 utlity functions.
const { TextEncoder, TextDecoder } = require("node:util"); const { TextEncoder, TextDecoder } = require("node:util");
exports.btoa = binstr => Buffer.from(binstr, "binary").toString("base64"); exports.btoa = (binstr) => Buffer.from(binstr, "binary").toString("base64");
exports.atob = b64 => Buffer.from(b64, "base64").toString("binary"); exports.atob = (b64) => Buffer.from(b64, "base64").toString("binary");
function base64ToBytes(base64) { function base64ToBytes(base64) {
const binString = exports.atob(base64); const binString = exports.atob(base64);
return Uint8Array.from(binString, m => m.codePointAt(0)); return Uint8Array.from(binString, (m) => m.codePointAt(0));
}; };
function bytesToBase64(bytes) { function bytesToBase64(bytes) {
const binString = Array.from(bytes, byte => String.fromCodePoint(byte)).join(""); const binString = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join("");
return exports.btoa(binString); return exports.btoa(binString);
}; };
exports.base64EncodeUtf8 = str => bytesToBase64(new TextEncoder().encode(str)); exports.base64EncodeUtf8 = (str) => bytesToBase64(new TextEncoder().encode(str));
exports.base64DecodeUtf8 = str => new TextDecoder().decode(base64ToBytes(str)); exports.base64DecodeUtf8 = (str) => new TextDecoder().decode(base64ToBytes(str));
+1 -2
View File
@@ -16,8 +16,7 @@ ignoreEnvironmentVariables: defaults to false
*/ */
exports.getAllPlugins = function(options) { exports.getAllPlugins = function(options) {
options = options || {}; options = options || {};
var fs = require("fs"), var path = require("path"),
path = require("path"),
tiddlers = {}; tiddlers = {};
// Collect up the library plugins // Collect up the library plugins
var collectPlugins = function(folder) { var collectPlugins = function(folder) {
+2
View File
@@ -15,6 +15,8 @@ Listing/Preview/TextRaw: Text (Raw)
Listing/Preview/Fields: Fields Listing/Preview/Fields: Fields
Listing/Preview/Diff: Diff Listing/Preview/Diff: Diff
Listing/Preview/DiffFields: Diff (Fields) Listing/Preview/DiffFields: Diff (Fields)
Listing/ImportOptions/Caption: Import options
Listing/ImportOptions/NoMatch: No import options apply to these files.
Listing/Rename/Tooltip: Rename tiddler before importing Listing/Rename/Tooltip: Rename tiddler before importing
Listing/Rename/Prompt: Rename to: Listing/Rename/Prompt: Rename to:
Listing/Rename/ConfirmRename: Rename tiddler Listing/Rename/ConfirmRename: Rename tiddler
+3 -3
View File
@@ -18,13 +18,13 @@ class BackgroundActionDispatcher {
// Track the filter for the background actions // Track the filter for the background actions
this.filterTracker.track({ this.filterTracker.track({
filterString: "[all[tiddlers+shadows]tag[$:/tags/BackgroundAction]!is[draft]]", filterString: "[all[tiddlers+shadows]tag[$:/tags/BackgroundAction]!is[draft]]",
fnEnter: title => this.trackFilter(title), fnEnter: (title) => this.trackFilter(title),
fnLeave: (title, enterValue) => this.untrackFilter(enterValue), fnLeave: (title, enterValue) => this.untrackFilter(enterValue),
fnChange: (title, enterValue) => { fnChange: (title, enterValue) => {
this.untrackFilter(enterValue); this.untrackFilter(enterValue);
return this.trackFilter(title); return this.trackFilter(title);
}, },
fnProcess: changes => this.process(changes) fnProcess: (changes) => this.process(changes)
}); });
} }
@@ -75,7 +75,7 @@ class BackgroundActionTracker {
filterString: this.trackFilter, filterString: this.trackFilter,
fnEnter: () => { this.hasChanged = true; }, fnEnter: () => { this.hasChanged = true; },
fnLeave: () => { this.hasChanged = true; }, fnLeave: () => { this.hasChanged = true; },
fnProcess: changes => { fnProcess: (changes) => {
if(this.hasChanged) { if(this.hasChanged) {
this.hasChanged = false; this.hasChanged = false;
console.log("Processing background action", this.title); console.log("Processing background action", this.title);
@@ -10,7 +10,7 @@ Text editor operation to excise the selection to a new tiddler
"use strict"; "use strict";
function isMarkdown(mediaType) { function isMarkdown(mediaType) {
return mediaType === 'text/markdown' || mediaType === 'text/x-markdown'; return mediaType === "text/markdown" || mediaType === "text/x-markdown";
} }
exports["excise"] = function(event,operation) { exports["excise"] = function(event,operation) {
@@ -44,7 +44,7 @@ exports["wrap-selection"] = function(event,operation) {
break; break;
} }
return result; return result;
} };
function togglePrefixSuffix() { function togglePrefixSuffix() {
if(o.text.substring(o.selStart - prefix.length, o.selStart + suffix.length) === prefix + suffix) { if(o.text.substring(o.selStart - prefix.length, o.selStart + suffix.length) === prefix + suffix) {
+4 -4
View File
@@ -69,17 +69,17 @@ class FilterTracker {
if(!tracker) return; if(!tracker) return;
const results = []; const results = [];
// Evaluate the filter and remove duplicate results // Evaluate the filter and remove duplicate results
$tw.utils.each(this.wiki.filterTiddlers(tracker.filterString), title => { $tw.utils.each(this.wiki.filterTiddlers(tracker.filterString), (title) => {
$tw.utils.pushTop(results, title); $tw.utils.pushTop(results, title);
}); });
// Process the newly entered results // Process the newly entered results
results.forEach(title => { results.forEach((title) => {
if(!tracker.previousResults.includes(title) && !tracker.resultValues[title] && tracker.fnEnter) { if(!tracker.previousResults.includes(title) && !tracker.resultValues[title] && tracker.fnEnter) {
tracker.resultValues[title] = tracker.fnEnter(title) || true; tracker.resultValues[title] = tracker.fnEnter(title) || true;
} }
}); });
// Process the results that have just left // Process the results that have just left
tracker.previousResults.forEach(title => { tracker.previousResults.forEach((title) => {
if(!results.includes(title) && tracker.resultValues[title] && tracker.fnLeave) { if(!results.includes(title) && tracker.resultValues[title] && tracker.fnLeave) {
tracker.fnLeave(title, tracker.resultValues[title]); tracker.fnLeave(title, tracker.resultValues[title]);
delete tracker.resultValues[title]; delete tracker.resultValues[title];
@@ -91,7 +91,7 @@ class FilterTracker {
processChanges(changes) { processChanges(changes) {
for(const tracker of this.trackers.values()) { for(const tracker of this.trackers.values()) {
Object.keys(changes).forEach(title => { Object.keys(changes).forEach((title) => {
if(title && tracker.previousResults.includes(title) && tracker.fnChange) { if(title && tracker.previousResults.includes(title) && tracker.fnChange) {
tracker.resultValues[title] = tracker.fnChange(title, tracker.resultValues[title]) || tracker.resultValues[title]; tracker.resultValues[title] = tracker.fnChange(title, tracker.resultValues[title]) || tracker.resultValues[title];
} }
+2 -2
View File
@@ -24,7 +24,7 @@ exports.cascade = function(operationSubFunction,options) {
} }
var output = filterFnList[index](options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({ var output = filterFnList[index](options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({
"currentTiddler": "" + title, "currentTiddler": "" + title,
"..currentTiddler": widget.getVariable("currentTiddler","") "..currentTiddler": widget.getVariable("currentTiddler",{defaultValue:""})
})); }));
if(output.length !== 0) { if(output.length !== 0) {
result = output[0]; result = output[0];
@@ -34,5 +34,5 @@ exports.cascade = function(operationSubFunction,options) {
results.push(result); results.push(result);
}); });
} }
} };
}; };
+2 -2
View File
@@ -18,7 +18,7 @@ exports.filter = function(operationSubFunction,options) {
results.each(function(title) { results.each(function(title) {
var filtered = operationSubFunction(options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({ var filtered = operationSubFunction(options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({
"currentTiddler": "" + title, "currentTiddler": "" + title,
"..currentTiddler": widget.getVariable("currentTiddler",""), "..currentTiddler": widget.getVariable("currentTiddler",{defaultValue:""}),
"index": "" + index, "index": "" + index,
"revIndex": "" + (results.length - 1 - index), "revIndex": "" + (results.length - 1 - index),
"length": "" + results.length "length": "" + results.length
@@ -30,5 +30,5 @@ exports.filter = function(operationSubFunction,options) {
}); });
results.remove(resultsToRemove); results.remove(resultsToRemove);
} }
} };
}; };
-2
View File
@@ -7,8 +7,6 @@ Assign a value to a variable
\*/ \*/
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict"; "use strict";
/* /*
+3 -3
View File
@@ -20,7 +20,7 @@ exports.map = function(operationSubFunction,options) {
$tw.utils.each(inputTitles,function(title) { $tw.utils.each(inputTitles,function(title) {
var filtered = operationSubFunction(options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({ var filtered = operationSubFunction(options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({
"currentTiddler": "" + title, "currentTiddler": "" + title,
"..currentTiddler": widget.getVariable("currentTiddler",""), "..currentTiddler": widget.getVariable("currentTiddler",{defaultValue:""}),
"index": "" + index, "index": "" + index,
"revIndex": "" + (inputTitles.length - 1 - index), "revIndex": "" + (inputTitles.length - 1 - index),
"length": "" + inputTitles.length "length": "" + inputTitles.length
@@ -28,12 +28,12 @@ exports.map = function(operationSubFunction,options) {
if(filtered.length && flatten) { if(filtered.length && flatten) {
$tw.utils.each(filtered,function(value) { $tw.utils.each(filtered,function(value) {
results.push(value); results.push(value);
}) });
} else { } else {
results.push(filtered[0]||""); results.push(filtered[0]||"");
} }
++index; ++index;
}); });
} }
} };
}; };
+2 -2
View File
@@ -17,7 +17,7 @@ exports.reduce = function(operationSubFunction,options) {
results.each(function(title) { results.each(function(title) {
var list = operationSubFunction(options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({ var list = operationSubFunction(options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({
"currentTiddler": "" + title, "currentTiddler": "" + title,
"..currentTiddler": widget.getVariable("currentTiddler"), "..currentTiddler": widget.getVariable("currentTiddler",{defaultValue:""}),
"index": "" + index, "index": "" + index,
"revIndex": "" + (results.length - 1 - index), "revIndex": "" + (results.length - 1 - index),
"length": "" + results.length, "length": "" + results.length,
@@ -31,5 +31,5 @@ exports.reduce = function(operationSubFunction,options) {
results.clear(); results.clear();
results.push(accumulator); results.push(accumulator);
} }
} };
}; };
+2 -2
View File
@@ -24,7 +24,7 @@ exports.sort = function(operationSubFunction,options) {
results.each(function(title) { results.each(function(title) {
var key = operationSubFunction(options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({ var key = operationSubFunction(options.wiki.makeTiddlerIterator([title]),widget.makeFakeWidgetWithVariables({
"currentTiddler": "" + title, "currentTiddler": "" + title,
"..currentTiddler": widget.getVariable("currentTiddler") "..currentTiddler": widget.getVariable("currentTiddler",{defaultValue:""})
})); }));
sortKeys.push(key[0] || ""); sortKeys.push(key[0] || "");
}); });
@@ -43,5 +43,5 @@ exports.sort = function(operationSubFunction,options) {
results.push(inputTitles[index]); results.push(inputTitles[index]);
}); });
} }
} };
}; };
+3 -3
View File
@@ -43,7 +43,7 @@ function parseFilterOperation(operators,filterString,p) {
var bracket = filterString.charAt(nextBracketPos); var bracket = filterString.charAt(nextBracketPos);
operator.operator = filterString.substring(p,nextBracketPos); operator.operator = filterString.substring(p,nextBracketPos);
// Any suffix? // Any suffix?
var colon = operator.operator.indexOf(':'); var colon = operator.operator.indexOf(":");
if(colon > -1) { if(colon > -1) {
// The raw suffix for older filters // The raw suffix for older filters
operator.suffix = operator.operator.substring(colon + 1); operator.suffix = operator.operator.substring(colon + 1);
@@ -108,7 +108,7 @@ function parseFilterOperation(operators,filterString,p) {
} }
operator.operands.push(operand); operator.operands.push(operand);
p = nextBracketPos + 1; p = nextBracketPos + 1;
} };
p = nextBracketPos + 1; p = nextBracketPos + 1;
parseOperand(bracket); parseOperand(bracket);
@@ -228,7 +228,7 @@ exports.getFilterRunPrefixes = function() {
$tw.modules.applyMethods("filterrunprefix",this.filterRunPrefixes); $tw.modules.applyMethods("filterrunprefix",this.filterRunPrefixes);
} }
return this.filterRunPrefixes; return this.filterRunPrefixes;
} };
exports.filterTiddlers = function(filterString,widget,source) { exports.filterTiddlers = function(filterString,widget,source) {
var fn = this.compileFilter(filterString); var fn = this.compileFilter(filterString);
+1 -1
View File
@@ -32,4 +32,4 @@ var modes = {
"gt": function(value) {return value > 0;}, "gt": function(value) {return value > 0;},
"lteq": function(value) {return value <= 0;}, "lteq": function(value) {return value <= 0;},
"lt": function(value) {return value < 0;} "lt": function(value) {return value < 0;}
} };
+1 -1
View File
@@ -31,4 +31,4 @@ exports["deserialize"] = function(source,operator,options) {
return [$tw.language.getString("Error/DeserializeOperator/MissingOperand")]; return [$tw.language.getString("Error/DeserializeOperator/MissingOperand")];
} }
return results; return results;
} };
+1 -1
View File
@@ -53,7 +53,7 @@ exports.field = function(source,operator,options) {
if(source.byField && operator.operand) { if(source.byField && operator.operand) {
indexedResults = source.byField(fieldname,operator.operand); indexedResults = source.byField(fieldname,operator.operand);
if(indexedResults) { if(indexedResults) {
return indexedResults return indexedResults;
} }
} }
source(function(tiddler,title) { source(function(tiddler,title) {
+1 -1
View File
@@ -19,7 +19,7 @@ exports.filter = function(source,operator,options) {
source(function(tiddler,title) { source(function(tiddler,title) {
var list = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]),options.widget.makeFakeWidgetWithVariables({ var list = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]),options.widget.makeFakeWidgetWithVariables({
"currentTiddler": "" + title, "currentTiddler": "" + title,
"..currentTiddler": options.widget.getVariable("currentTiddler","") "..currentTiddler": options.widget.getVariable("currentTiddler",{defaultValue:""})
})); }));
if((list.length > 0) === target) { if((list.length > 0) === target) {
results.push(title); results.push(title);
+1 -1
View File
@@ -13,7 +13,7 @@ returns the value at a given index of datatiddlers
Export our filter function Export our filter function
*/ */
exports.getindex = function(source,operator,options) { exports.getindex = function(source,operator,options) {
var data,title,results = []; var data,results = [];
if(operator.operand){ if(operator.operand){
source(function(tiddler,title) { source(function(tiddler,title) {
title = tiddler ? tiddler.fields.title : title; title = tiddler ? tiddler.fields.title : title;
+5 -5
View File
@@ -157,13 +157,13 @@ function convertDataItemValueToStrings(item) {
if(item === undefined) { if(item === undefined) {
return undefined; return undefined;
} else if(item === null) { } else if(item === null) {
return ["null"] return ["null"];
} else if(typeof item === "object") { } else if(typeof item === "object") {
var results = [],i,t; var results = [],i,t;
if(Array.isArray(item)) { if(Array.isArray(item)) {
// Return all the items in arrays recursively // Return all the items in arrays recursively
for(i=0; i<item.length; i++) { for(i=0; i<item.length; i++) {
t = convertDataItemValueToStrings(item[i]) t = convertDataItemValueToStrings(item[i]);
if(t !== undefined) { if(t !== undefined) {
results.push.apply(results,t); results.push.apply(results,t);
} }
@@ -231,7 +231,7 @@ function getItemAtIndex(item,index) {
return item[index]; return item[index];
} else if(Array.isArray(item)) { } else if(Array.isArray(item)) {
index = $tw.utils.parseInt(index); index = $tw.utils.parseInt(index);
if(index < 0) { index = index + item.length }; if(index < 0) { index = index + item.length; };
return item[index]; // Will be undefined if index was out-of-bounds return item[index]; // Will be undefined if index was out-of-bounds
} else { } else {
return undefined; return undefined;
@@ -289,7 +289,7 @@ function setDataItem(data,indexes,value) {
var lastIndex = indexes[indexes.length - 1]; var lastIndex = indexes[indexes.length - 1];
if(Array.isArray(current)) { if(Array.isArray(current)) {
lastIndex = $tw.utils.parseInt(lastIndex); lastIndex = $tw.utils.parseInt(lastIndex);
if(lastIndex < 0) { lastIndex = lastIndex + current.length }; if(lastIndex < 0) { lastIndex = lastIndex + current.length; };
} }
// Only set indexes on objects and arrays // Only set indexes on objects and arrays
if(typeof current === "object") { if(typeof current === "object") {
@@ -316,7 +316,7 @@ function deleteDataItem(data,indexes) {
var lastIndex = indexes[indexes.length - 1]; var lastIndex = indexes[indexes.length - 1];
if(Array.isArray(current) && current !== null) { if(Array.isArray(current) && current !== null) {
lastIndex = $tw.utils.parseInt(lastIndex); lastIndex = $tw.utils.parseInt(lastIndex);
if(lastIndex < 0) { lastIndex = lastIndex + current.length }; if(lastIndex < 0) { lastIndex = lastIndex + current.length; };
// Check if index is valid before splicing // Check if index is valid before splicing
if(lastIndex >= 0 && lastIndex < current.length) { if(lastIndex >= 0 && lastIndex < current.length) {
current.splice(lastIndex,1); current.splice(lastIndex,1);
+1 -1
View File
@@ -25,7 +25,7 @@ exports.lookup = function(source,operator,options) {
indexSuffix = (suffixes[1] && suffixes[1][0] === "index") ? true : false, indexSuffix = (suffixes[1] && suffixes[1][0] === "index") ? true : false,
target; target;
if(operator.operands.length == 2) { if(operator.operands.length == 2) {
target = operator.operands[1] target = operator.operands[1];
} else { } else {
target = indexSuffix ? "0": "text"; target = indexSuffix ? "0": "text";
} }
+23 -23
View File
@@ -17,35 +17,35 @@ Note that strings are converted to numbers automatically. Trailing non-digits ar
"use strict"; "use strict";
exports.negate = makeNumericBinaryOperator( exports.negate = makeNumericBinaryOperator(
function(a) {return -a} function(a) {return -a;}
); );
exports.abs = makeNumericBinaryOperator( exports.abs = makeNumericBinaryOperator(
function(a) {return Math.abs(a)} function(a) {return Math.abs(a);}
); );
exports.ceil = makeNumericBinaryOperator( exports.ceil = makeNumericBinaryOperator(
function(a) {return Math.ceil(a)} function(a) {return Math.ceil(a);}
); );
exports.floor = makeNumericBinaryOperator( exports.floor = makeNumericBinaryOperator(
function(a) {return Math.floor(a)} function(a) {return Math.floor(a);}
); );
exports.round = makeNumericBinaryOperator( exports.round = makeNumericBinaryOperator(
function(a) {return Math.round(a)} function(a) {return Math.round(a);}
); );
exports.trunc = makeNumericBinaryOperator( exports.trunc = makeNumericBinaryOperator(
function(a) {return Math.trunc(a)} function(a) {return Math.trunc(a);}
); );
exports.untrunc = makeNumericBinaryOperator( exports.untrunc = makeNumericBinaryOperator(
function(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)} function(a) {return Math.ceil(Math.abs(a)) * Math.sign(a);}
); );
exports.sign = makeNumericBinaryOperator( exports.sign = makeNumericBinaryOperator(
function(a) {return Math.sign(a)} function(a) {return Math.sign(a);}
); );
exports.add = makeNumericBinaryOperator( exports.add = makeNumericBinaryOperator(
@@ -103,29 +103,29 @@ exports.log = makeNumericBinaryOperator(
); );
exports.sum = makeNumericReducingOperator( exports.sum = makeNumericReducingOperator(
function(accumulator,value) {return accumulator + value}, function(accumulator,value) {return accumulator + value;},
0 // Initial value 0 // Initial value
); );
exports.product = makeNumericReducingOperator( exports.product = makeNumericReducingOperator(
function(accumulator,value) {return accumulator * value}, function(accumulator,value) {return accumulator * value;},
1 // Initial value 1 // Initial value
); );
exports.maxall = makeNumericReducingOperator( exports.maxall = makeNumericReducingOperator(
function(accumulator,value) {return Math.max(accumulator,value)}, function(accumulator,value) {return Math.max(accumulator,value);},
-Infinity // Initial value -Infinity // Initial value
); );
exports.minall = makeNumericReducingOperator( exports.minall = makeNumericReducingOperator(
function(accumulator,value) {return Math.min(accumulator,value)}, function(accumulator,value) {return Math.min(accumulator,value);},
Infinity // Initial value Infinity // Initial value
); );
exports.median = makeNumericArrayOperator( exports.median = makeNumericArrayOperator(
function(values) { function(values) {
var len = values.length, median; var len = values.length, median;
values.sort(function(a,b) {return a-b}); values.sort(function(a,b) {return a-b;});
if(len % 2) { if(len % 2) {
// Odd, return the middle number // Odd, return the middle number
median = values[(len - 1) / 2]; median = values[(len - 1) / 2];
@@ -138,7 +138,7 @@ exports.median = makeNumericArrayOperator(
); );
exports.average = makeNumericReducingOperator( exports.average = makeNumericReducingOperator(
function(accumulator,value) {return accumulator + value}, function(accumulator,value) {return accumulator + value;},
0, // Initial value 0, // Initial value
function(finalValue,numberOfValues) { function(finalValue,numberOfValues) {
return finalValue/numberOfValues; return finalValue/numberOfValues;
@@ -146,7 +146,7 @@ exports.average = makeNumericReducingOperator(
); );
exports.variance = makeNumericReducingOperator( exports.variance = makeNumericReducingOperator(
function(accumulator,value) {return accumulator + value}, function(accumulator,value) {return accumulator + value;},
0, 0,
function(finalValue,numberOfValues,originalValues) { function(finalValue,numberOfValues,originalValues) {
return getVarianceFromArray(originalValues,finalValue/numberOfValues); return getVarianceFromArray(originalValues,finalValue/numberOfValues);
@@ -154,7 +154,7 @@ exports.variance = makeNumericReducingOperator(
); );
exports["standard-deviation"] = makeNumericReducingOperator( exports["standard-deviation"] = makeNumericReducingOperator(
function(accumulator,value) {return accumulator + value}, function(accumulator,value) {return accumulator + value;},
0, 0,
function(finalValue,numberOfValues,originalValues) { function(finalValue,numberOfValues,originalValues) {
var variance = getVarianceFromArray(originalValues,finalValue/numberOfValues); var variance = getVarianceFromArray(originalValues,finalValue/numberOfValues);
@@ -164,31 +164,31 @@ exports["standard-deviation"] = makeNumericReducingOperator(
//trigonometry //trigonometry
exports.cos = makeNumericBinaryOperator( exports.cos = makeNumericBinaryOperator(
function(a) {return Math.cos(a)} function(a) {return Math.cos(a);}
); );
exports.sin = makeNumericBinaryOperator( exports.sin = makeNumericBinaryOperator(
function(a) {return Math.sin(a)} function(a) {return Math.sin(a);}
); );
exports.tan = makeNumericBinaryOperator( exports.tan = makeNumericBinaryOperator(
function(a) {return Math.tan(a)} function(a) {return Math.tan(a);}
); );
exports.acos = makeNumericBinaryOperator( exports.acos = makeNumericBinaryOperator(
function(a) {return Math.acos(a)} function(a) {return Math.acos(a);}
); );
exports.asin = makeNumericBinaryOperator( exports.asin = makeNumericBinaryOperator(
function(a) {return Math.asin(a)} function(a) {return Math.asin(a);}
); );
exports.atan = makeNumericBinaryOperator( exports.atan = makeNumericBinaryOperator(
function(a) {return Math.atan(a)} function(a) {return Math.atan(a);}
); );
exports.atan2 = makeNumericBinaryOperator( exports.atan2 = makeNumericBinaryOperator(
function(a,b) {return Math.atan2(a,b)} function(a,b) {return Math.atan2(a,b);}
); );
//Calculate the variance of a population of numbers in an array given its mean //Calculate the variance of a population of numbers in an array given its mean
+34
View File
@@ -0,0 +1,34 @@
/*\
title: $:/core/modules/filters/wikify.js
type: application/javascript
module-type: filteroperator
Filter operator wikifying each string in the input list and returning the result as a list of strings
\*/
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.wikify = function(source,operator,options) {
var output = operator.operands[0],
mode = operator.operands[1],
type = operator.operands[2],
results = [];
source(function(tiddler,title) {
var wikifier = new $tw.utils.Wikifier({
wiki: options.wiki,
widget: options.widget,
text: title,
type: type,
mode: mode,
output: output
});
results.push(wikifier.getResult());
});
return results;
};
+3 -3
View File
@@ -209,14 +209,14 @@ Extended filter operators to manipulate the current list.
results.push(operands[0]); results.push(operands[0]);
} }
return results; return results;
} };
/* /*
Toggles an item in the current list. Toggles an item in the current list.
*/ */
exports.toggle = function(source,operator) { exports.toggle = function(source,operator) {
return cycleValueInArray(prepare_results(source),operator.operands); return cycleValueInArray(prepare_results(source),operator.operands);
} };
exports.cycle = function(source,operator) { exports.cycle = function(source,operator) {
var results = prepare_results(source), var results = prepare_results(source),
@@ -227,4 +227,4 @@ Extended filter operators to manipulate the current list.
step = Math.abs(step); step = Math.abs(step);
} }
return cycleValueInArray(results,operands,step); return cycleValueInArray(results,operands,step);
} };
+6 -6
View File
@@ -46,7 +46,7 @@ function BackSubIndexer(indexer,extractor) {
BackSubIndexer.prototype.init = function() { BackSubIndexer.prototype.init = function() {
// lazy init until first lookup // lazy init until first lookup
this.index = null; this.index = null;
} };
BackSubIndexer.prototype._init = function() { BackSubIndexer.prototype._init = function() {
this.index = Object.create(null); this.index = Object.create(null);
@@ -60,11 +60,11 @@ BackSubIndexer.prototype._init = function() {
self.index[target][sourceTitle] = true; self.index[target][sourceTitle] = true;
}); });
}); });
} };
BackSubIndexer.prototype.rebuild = function() { BackSubIndexer.prototype.rebuild = function() {
this.index = null; this.index = null;
} };
/* /*
* Get things that is being referenced in the text, e.g. tiddler names in the link syntax. * Get things that is being referenced in the text, e.g. tiddler names in the link syntax.
@@ -78,7 +78,7 @@ BackSubIndexer.prototype._getTarget = function(tiddler) {
return this.wiki[this.extractor](parser.tree, tiddler.fields.title); return this.wiki[this.extractor](parser.tree, tiddler.fields.title);
} }
return []; return [];
} };
BackSubIndexer.prototype.update = function(updateDescriptor) { BackSubIndexer.prototype.update = function(updateDescriptor) {
// lazy init/update until first lookup // lazy init/update until first lookup
@@ -106,7 +106,7 @@ BackSubIndexer.prototype.update = function(updateDescriptor) {
} }
self.index[target][updateDescriptor.new.tiddler.fields.title] = true; self.index[target][updateDescriptor.new.tiddler.fields.title] = true;
}); });
} };
BackSubIndexer.prototype.lookup = function(title) { BackSubIndexer.prototype.lookup = function(title) {
if(!this.index) { if(!this.index) {
@@ -117,6 +117,6 @@ BackSubIndexer.prototype.lookup = function(title) {
} else { } else {
return []; return [];
} }
} };
exports.BackIndexer = BackIndexer; exports.BackIndexer = BackIndexer;
+3 -3
View File
@@ -19,7 +19,7 @@ FieldIndexer.prototype.init = function() {
this.index = null; this.index = null;
this.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH; this.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;
this.addIndexMethods(); this.addIndexMethods();
} };
// Provided for testing // Provided for testing
FieldIndexer.prototype.setMaxIndexedValueLength = function(length) { FieldIndexer.prototype.setMaxIndexedValueLength = function(length) {
@@ -33,14 +33,14 @@ FieldIndexer.prototype.addIndexMethods = function() {
this.wiki.each.byField = function(name,value) { this.wiki.each.byField = function(name,value) {
var lookup = self.lookup(name,value); var lookup = self.lookup(name,value);
return lookup && lookup.filter(function(title) { return lookup && lookup.filter(function(title) {
return self.wiki.tiddlerExists(title) return self.wiki.tiddlerExists(title);
}); });
}; };
// get shadow tiddlers, including shadow tiddlers that is overwritten // get shadow tiddlers, including shadow tiddlers that is overwritten
this.wiki.eachShadow.byField = function(name,value) { this.wiki.eachShadow.byField = function(name,value) {
var lookup = self.lookup(name,value); var lookup = self.lookup(name,value);
return lookup && lookup.filter(function(title) { return lookup && lookup.filter(function(title) {
return self.wiki.isShadowTiddler(title) return self.wiki.isShadowTiddler(title);
}); });
}; };
this.wiki.eachTiddlerPlusShadows.byField = function(name,value) { this.wiki.eachTiddlerPlusShadows.byField = function(name,value) {
+6 -6
View File
@@ -14,12 +14,12 @@ exports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) {
this.updateCallback = updateCallback; this.updateCallback = updateCallback;
this.resizeHandlers = new Map(); this.resizeHandlers = new Map();
this.dimensionsInfo = [ this.dimensionsInfo = [
["outer/width", win => win.outerWidth], ["outer/width", (win) => win.outerWidth],
["outer/height", win => win.outerHeight], ["outer/height", (win) => win.outerHeight],
["inner/width", win => win.innerWidth], ["inner/width", (win) => win.innerWidth],
["inner/height", win => win.innerHeight], ["inner/height", (win) => win.innerHeight],
["client/width", win => win.document.documentElement.clientWidth], ["client/width", (win) => win.document.documentElement.clientWidth],
["client/height", win => win.document.documentElement.clientHeight] ["client/height", (win) => win.document.documentElement.clientHeight]
]; ];
} }
+4 -5
View File
@@ -140,7 +140,7 @@ function KeyboardManager(options) {
this.shortcutParsedList = []; // Stores the parsed key descriptors this.shortcutParsedList = []; // Stores the parsed key descriptors
this.shortcutPriorityList = []; // Stores the parsed shortcut priority this.shortcutPriorityList = []; // Stores the parsed shortcut priority
this.lookupNames = ["shortcuts"]; this.lookupNames = ["shortcuts"];
this.lookupNames.push($tw.platform.isMac ? "shortcuts-mac" : "shortcuts-not-mac") this.lookupNames.push($tw.platform.isMac ? "shortcuts-mac" : "shortcuts-not-mac");
this.lookupNames.push($tw.platform.isWindows ? "shortcuts-windows" : "shortcuts-not-windows"); this.lookupNames.push($tw.platform.isWindows ? "shortcuts-windows" : "shortcuts-not-windows");
this.lookupNames.push($tw.platform.isLinux ? "shortcuts-linux" : "shortcuts-not-linux"); this.lookupNames.push($tw.platform.isLinux ? "shortcuts-linux" : "shortcuts-not-linux");
this.updateShortcutLists(this.getShortcutTiddlerList()); this.updateShortcutLists(this.getShortcutTiddlerList());
@@ -161,7 +161,7 @@ KeyboardManager.prototype.getModifierKeys = function() {
91, // Meta (left) 91, // Meta (left)
93, // Meta (right) 93, // Meta (right)
224 // Meta (Firefox) 224 // Meta (Firefox)
] ];
}; };
/* /*
@@ -187,8 +187,7 @@ KeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor,options) {
metaKey: false metaKey: false
}; };
for(var t=0; t<components.length; t++) { for(var t=0; t<components.length; t++) {
var s = components[t].toLowerCase(), var s = components[t].toLowerCase();
c = s.charCodeAt(0);
// Look for modifier keys // Look for modifier keys
if(s === "ctrl") { if(s === "ctrl") {
info.ctrlKey = true; info.ctrlKey = true;
@@ -266,7 +265,7 @@ KeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {
} }
}); });
return result; return result;
} };
KeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) { KeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {
return keyInfo && return keyInfo &&
+3 -4
View File
@@ -24,8 +24,7 @@ exports.params = [
Run the macro Run the macro
*/ */
exports.run = function(filter,format) { exports.run = function(filter,format) {
var self = this, var tiddlers = this.wiki.filterTiddlers(filter),
tiddlers = this.wiki.filterTiddlers(filter),
tiddler, tiddler,
fields = [], fields = [],
t,f; t,f;
@@ -46,13 +45,13 @@ exports.run = function(filter,format) {
var p = fields.indexOf(value); var p = fields.indexOf(value);
if(p !== -1) { if(p !== -1) {
fields.splice(p,1); fields.splice(p,1);
fields.unshift(value) fields.unshift(value);
} }
}); });
// Output the column headings // Output the column headings
var output = [], row = []; var output = [], row = [];
fields.forEach(function(value) { fields.forEach(function(value) {
row.push(quoteAndEscape(value)) row.push(quoteAndEscape(value));
}); });
output.push(row.join(",")); output.push(row.join(","));
// Output each tiddler // Output each tiddler
+1 -1
View File
@@ -32,7 +32,7 @@ exports.run = function(shortcuts,prefix,separator,suffix) {
if(shortcutArray.length > 0) { if(shortcutArray.length > 0) {
shortcutArray.sort(function(a,b) { shortcutArray.sort(function(a,b) {
return a.toLowerCase().localeCompare(b.toLowerCase()); return a.toLowerCase().localeCompare(b.toLowerCase());
}) });
return prefix + shortcutArray.join(separator) + suffix; return prefix + shortcutArray.join(separator) + suffix;
} else { } else {
return ""; return "";
-2
View File
@@ -7,8 +7,6 @@ The audio parser parses an audio tiddler into an embeddable HTML element
\*/ \*/
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict"; "use strict";
var AudioParser = function(type,text,options) { var AudioParser = function(type,text,options) {
+1 -1
View File
@@ -59,7 +59,7 @@ var BinaryParser = function(type,text,options) {
class: {type: "string", value: "tc-binary-warning"} class: {type: "string", value: "tc-binary-warning"}
}, },
children: [warn, link] children: [warn, link]
} };
this.tree = [element]; this.tree = [element];
this.source = text; this.source = text;
this.type = type; this.type = type;
+1 -1
View File
@@ -45,7 +45,7 @@ var CsvParser = function(type,text,options) {
row.children.push({ row.children.push({
"type": "element", "tag": tag, "children": [{ "type": "element", "tag": tag, "children": [{
"type": "text", "type": "text",
"text": columns[column] || '' "text": columns[column] || ""
}] }]
}); });
} }
+2 -2
View File
@@ -45,7 +45,7 @@ exports.parseWhiteSpace = function(source,pos) {
type: "whitespace", type: "whitespace",
start: pos, start: pos,
end: p end: p
} };
} }
}; };
@@ -170,7 +170,7 @@ exports.parseMacroParameters = function(node,source,pos) {
} }
node.end = pos; node.end = pos;
return node; return node;
} };
/* /*
Look for a macro invocation parameter. Returns null if not found, or {type: "macro-parameter", name:, value:, start:, end:} Look for a macro invocation parameter. Returns null if not found, or {type: "macro-parameter", name:, value:, start:, end:}
+1 -2
View File
@@ -14,8 +14,7 @@ var ImageParser = function(type,text,options) {
type: "element", type: "element",
tag: "iframe", tag: "iframe",
attributes: {} attributes: {}
}, };
src;
if(options._canonical_uri) { if(options._canonical_uri) {
element.attributes.src = {type: "string", value: options._canonical_uri}; element.attributes.src = {type: "string", value: options._canonical_uri};
} else if(text) { } else if(text) {
+1 -2
View File
@@ -17,8 +17,7 @@ var VideoParser = function(type,text,options) {
controls: {type: "string", value: "controls"}, controls: {type: "string", value: "controls"},
style: {type: "string", value: "width: 100%; object-fit: contain"} style: {type: "string", value: "width: 100%; object-fit: contain"}
} }
}, };
src;
if(options._canonical_uri) { if(options._canonical_uri) {
element.attributes.src = {type: "string", value: options._canonical_uri}; element.attributes.src = {type: "string", value: options._canonical_uri};
} else if(text) { } else if(text) {
@@ -26,8 +26,6 @@ exports.init = function(parser) {
Parse the most recent match Parse the most recent match
*/ */
exports.parse = function() { exports.parse = function() {
// Get all the details of the match
var entityString = this.match[1];
// Move past the macro call // Move past the macro call
this.parser.pos = this.matchRegExp.lastIndex; this.parser.pos = this.matchRegExp.lastIndex;
// Return the entity // Return the entity
@@ -29,7 +29,6 @@ exports.init = function(parser) {
Parse the most recent match Parse the most recent match
*/ */
exports.parse = function() { exports.parse = function() {
var self = this;
// Move past the pragma invocation // Move past the pragma invocation
this.parser.pos = this.matchRegExp.lastIndex; this.parser.pos = this.matchRegExp.lastIndex;
// Parse the filter terminated by a line break // Parse the filter terminated by a line break
@@ -93,7 +93,7 @@ exports.parseLink = function(source,pos) {
splitPos = null; splitPos = null;
} }
// Pull out the tooltip and URL // Pull out the tooltip and URL
var tooltip, URL, urlStart; var URL, urlStart;
textNode.start = pos; textNode.start = pos;
if(splitPos) { if(splitPos) {
urlStart = splitPos + 1; urlStart = splitPos + 1;
@@ -67,5 +67,5 @@ exports.parse = function() {
return [{ return [{
type: "void", type: "void",
children: tree children: tree
}] }];
}; };
@@ -42,7 +42,7 @@ exports.parse = function() {
name: name, name: name,
type: "string", type: "string",
value: paramValue value: paramValue
} };
}); });
// Prepare the tiddler widget // Prepare the tiddler widget
var tr, targetTitle, targetField, targetIndex, tiddlerNode; var tr, targetTitle, targetField, targetIndex, tiddlerNode;
@@ -41,7 +41,7 @@ exports.parse = function() {
name: name, name: name,
type: "string", type: "string",
value: paramValue value: paramValue
} };
}); });
// Prepare the tiddler widget // Prepare the tiddler widget
var tr, targetTitle, targetField, targetIndex, tiddlerNode; var tr, targetTitle, targetField, targetIndex, tiddlerNode;
@@ -25,8 +25,6 @@ $$$
"use strict"; "use strict";
var widget = require("$:/core/modules/widgets/widget.js");
exports.name = "typedblock"; exports.name = "typedblock";
exports.types = {block: true}; exports.types = {block: true};
+4 -5
View File
@@ -49,8 +49,7 @@ PluginSwitcher.prototype.switchPlugins = function() {
var tiddler = self.wiki.getTiddler(title); var tiddler = self.wiki.getTiddler(title);
if(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) { if(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {
plugins.push(title); plugins.push(title);
var pluginInfo = $tw.utils.parseJSONSafe(self.wiki.getTiddlerText(title)), var dependents = $tw.utils.parseStringArray(tiddler.fields.dependents || "");
dependents = $tw.utils.parseStringArray(tiddler.fields.dependents || "");
$tw.utils.each(dependents,function(title) { $tw.utils.each(dependents,function(title) {
accumulatePlugin(title); accumulatePlugin(title);
}); });
@@ -58,11 +57,11 @@ PluginSwitcher.prototype.switchPlugins = function() {
}; };
accumulatePlugin(selectedPluginTitle); accumulatePlugin(selectedPluginTitle);
// Read the plugin info for the incoming plugins // Read the plugin info for the incoming plugins
var changes = $tw.wiki.readPluginInfo(plugins); $tw.wiki.readPluginInfo(plugins);
// Unregister any existing theme tiddlers // Unregister any existing theme tiddlers
var unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType); $tw.wiki.unregisterPluginTiddlers(this.pluginType);
// Register any new theme tiddlers // Register any new theme tiddlers
var registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins); $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);
// Unpack the current theme tiddlers // Unpack the current theme tiddlers
$tw.wiki.unpackPluginTiddlers(); $tw.wiki.unpackPluginTiddlers();
// Call the switch handler // Call the switch handler
+1 -1
View File
@@ -22,7 +22,7 @@ var findSaver = function(window) {
console.log({ msg: "custom saver is disabled", reason: err }); console.log({ msg: "custom saver is disabled", reason: err });
return null; return null;
} }
} };
var saver = findSaver(window) || findSaver(window.parent) || {}; var saver = findSaver(window) || findSaver(window.parent) || {};
var CustomSaver = function(wiki) { var CustomSaver = function(wiki) {
-1
View File
@@ -101,7 +101,6 @@ GiteaSaver.prototype.upload = function(uri,method,headers,data,callback) {
if(err) { if(err) {
return callback(err); return callback(err);
} }
var putResponseData = $tw.utils.parseJSONSafe(putResponseDataJson);
callback(null); callback(null);
} }
}); });
+1 -3
View File
@@ -17,8 +17,7 @@ var GitHubSaver = function(wiki) {
}; };
GitHubSaver.prototype.save = function(text,method,callback) { GitHubSaver.prototype.save = function(text,method,callback) {
var self = this, var username = this.wiki.getTiddlerText("$:/GitHub/Username"),
username = this.wiki.getTiddlerText("$:/GitHub/Username"),
password = $tw.utils.getPassword("github"), password = $tw.utils.getPassword("github"),
repo = this.wiki.getTiddlerText("$:/GitHub/Repo"), repo = this.wiki.getTiddlerText("$:/GitHub/Repo"),
path = this.wiki.getTiddlerText("$:/GitHub/Path",""), path = this.wiki.getTiddlerText("$:/GitHub/Path",""),
@@ -81,7 +80,6 @@ GitHubSaver.prototype.save = function(text,method,callback) {
if(err) { if(err) {
return callback(err); return callback(err);
} }
var putResponseData = $tw.utils.parseJSONSafe(putResponseDataJson);
callback(null); callback(null);
} }
}); });
+3 -5
View File
@@ -18,8 +18,7 @@ var GitLabSaver = function(wiki) {
GitLabSaver.prototype.save = function(text,method,callback) { GitLabSaver.prototype.save = function(text,method,callback) {
/* See https://docs.gitlab.com/ee/api/repository_files.html */ /* See https://docs.gitlab.com/ee/api/repository_files.html */
var self = this, var username = this.wiki.getTiddlerText("$:/GitLab/Username"),
username = this.wiki.getTiddlerText("$:/GitLab/Username"),
password = $tw.utils.getPassword("gitlab"), password = $tw.utils.getPassword("gitlab"),
repo = this.wiki.getTiddlerText("$:/GitLab/Repo"), repo = this.wiki.getTiddlerText("$:/GitLab/Repo"),
path = this.wiki.getTiddlerText("$:/GitLab/Path",""), path = this.wiki.getTiddlerText("$:/GitLab/Path",""),
@@ -45,7 +44,7 @@ GitLabSaver.prototype.save = function(text,method,callback) {
var uri = endpoint + "/projects/" + encodeURIComponent(repo) + "/repository/"; var uri = endpoint + "/projects/" + encodeURIComponent(repo) + "/repository/";
// Perform a get request to get the details (inc shas) of files in the same path as our file // Perform a get request to get the details (inc shas) of files in the same path as our file
$tw.utils.httpRequest({ $tw.utils.httpRequest({
url: uri + "tree/?path=" + encodeURIComponent(path.replace(/^\/+|\/$/g, '')) + "&branch=" + encodeURIComponent(branch.replace(/^\/+|\/$/g, '')), url: uri + "tree/?path=" + encodeURIComponent(path.replace(/^\/+|\/$/g, "")) + "&branch=" + encodeURIComponent(branch.replace(/^\/+|\/$/g, "")),
type: "GET", type: "GET",
headers: headers, headers: headers,
callback: function(err,getResponseDataJson,xhr) { callback: function(err,getResponseDataJson,xhr) {
@@ -71,7 +70,7 @@ GitLabSaver.prototype.save = function(text,method,callback) {
}; };
// Perform a request to save the file // Perform a request to save the file
$tw.utils.httpRequest({ $tw.utils.httpRequest({
url: uri + "files/" + encodeURIComponent(path.replace(/^\/+/, '') + filename), url: uri + "files/" + encodeURIComponent(path.replace(/^\/+/, "") + filename),
type: requestType, type: requestType,
headers: headers, headers: headers,
data: JSON.stringify(data), data: JSON.stringify(data),
@@ -79,7 +78,6 @@ GitLabSaver.prototype.save = function(text,method,callback) {
if(err) { if(err) {
return callback(err); return callback(err);
} }
var putResponseData = $tw.utils.parseJSONSafe(putResponseDataJson);
callback(null); callback(null);
} }
}); });
-1
View File
@@ -48,7 +48,6 @@ UploadSaver.prototype.save = function(text,method,callback) {
} }
// Assemble the header // Assemble the header
var boundary = "---------------------------" + "AaB03x"; var boundary = "---------------------------" + "AaB03x";
var uploadFormName = "UploadPlugin";
var head = []; var head = [];
head.push("--" + boundary + "\r\nContent-disposition: form-data; name=\"UploadPlugin\"\r\n"); head.push("--" + boundary + "\r\nContent-disposition: form-data; name=\"UploadPlugin\"\r\n");
head.push("backupDir=" + backupDir + ";user=" + username + ";password=" + password + ";uploaddir=" + uploadDir + ";;"); head.push("backupDir=" + backupDir + ";user=" + username + ";password=" + password + ";uploaddir=" + uploadDir + ";;");
+1 -1
View File
@@ -59,7 +59,7 @@ function loadIFrame(url,callback) {
Unload library iframe for given url Unload library iframe for given url
*/ */
function unloadIFrame(url){ function unloadIFrame(url){
var iframes = document.getElementsByTagName('iframe'); var iframes = document.getElementsByTagName("iframe");
for(var t=iframes.length-1; t--; t>=0) { for(var t=iframes.length-1; t--; t>=0) {
var iframe = iframes[t]; var iframe = iframes[t];
if(iframe.getAttribute("library") === "true" && if(iframe.getAttribute("library") === "true" &&
+1 -1
View File
@@ -40,7 +40,7 @@ $tw.eventBus = {
emit(event,data) { emit(event,data) {
const listeners = this.listenersMap.get(event); const listeners = this.listenersMap.get(event);
if(listeners) { if(listeners) {
listeners.forEach(fn => fn(data)); listeners.forEach((fn) => fn(data));
} }
} }
}; };
+1 -1
View File
@@ -27,7 +27,7 @@ exports.startup = function() {
faviconLink.setAttribute("href",dataURI); faviconLink.setAttribute("href",dataURI);
$tw.faviconPublisher.send({verb: "FAVICON",body: dataURI}); $tw.faviconPublisher.send({verb: "FAVICON",body: dataURI});
} }
} };
$tw.faviconPublisher = new $tw.utils.BrowserMessagingPublisher({type: "FAVICON", onsubscribe: setFavicon}); $tw.faviconPublisher = new $tw.utils.BrowserMessagingPublisher({type: "FAVICON", onsubscribe: setFavicon});
// Set up the favicon // Set up the favicon
setFavicon(); setFavicon();
-1
View File
@@ -31,7 +31,6 @@ exports.startup = function() {
if(requiresReload) { if(requiresReload) {
requireReloadDueToPluginChange = true; requireReloadDueToPluginChange = true;
} else if(tiddler) { } else if(tiddler) {
var pluginType = tiddler.fields["plugin-type"];
if($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields["plugin-type"] || ""),"no") === "yes") { if($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields["plugin-type"] || ""),"no") === "yes") {
changesToProcess.push(title); changesToProcess.push(title);
} }
+1 -1
View File
@@ -113,7 +113,7 @@ exports.startup = function() {
$tw.syncer = new $tw.Syncer({ $tw.syncer = new $tw.Syncer({
wiki: $tw.wiki, wiki: $tw.wiki,
syncadaptor: $tw.syncadaptor, syncadaptor: $tw.syncadaptor,
logging: $tw.wiki.getTiddlerText('$:/config/SyncLogging', "yes") === "yes" logging: $tw.wiki.getTiddlerText("$:/config/SyncLogging", "yes") === "yes"
}); });
} }
// Setup the saver handler // Setup the saver handler
+1 -1
View File
@@ -104,7 +104,7 @@ exports.startup = function() {
$tw.utils.each($tw.windows,function(win) { $tw.utils.each($tw.windows,function(win) {
win.close(); win.close();
}); });
} };
$tw.rootWidget.addEventListener("tm-close-all-windows",closeAllWindows); $tw.rootWidget.addEventListener("tm-close-all-windows",closeAllWindows);
// Close open windows when unloading main window // Close open windows when unloading main window
$tw.addUnloadTask(closeAllWindows); $tw.addUnloadTask(closeAllWindows);
-1
View File
@@ -16,7 +16,6 @@ var ClassicStoryView = function(listWidget) {
}; };
ClassicStoryView.prototype.navigateTo = function(historyInfo) { ClassicStoryView.prototype.navigateTo = function(historyInfo) {
var duration = $tw.utils.getAnimationDuration()
var listElementIndex = this.listWidget.findListItem(0,historyInfo.title); var listElementIndex = this.listWidget.findListItem(0,historyInfo.title);
if(listElementIndex === undefined) { if(listElementIndex === undefined) {
return; return;
+1 -1
View File
@@ -62,7 +62,7 @@ PopStoryView.prototype.insert = function(widget) {
]); ]);
setTimeout(function() { setTimeout(function() {
$tw.utils.removeStyles(targetElement, ["transition", "transform", "opactity"]); $tw.utils.removeStyles(targetElement, ["transition", "transform", "opactity"]);
}, duration) }, duration);
}; };
PopStoryView.prototype.remove = function(widget) { PopStoryView.prototype.remove = function(widget) {
+2 -2
View File
@@ -16,7 +16,7 @@ var ZoominListView = function(listWidget) {
this.listWidget = listWidget; this.listWidget = listWidget;
this.textNodeLogger = new $tw.utils.Logger("zoomin story river view", { this.textNodeLogger = new $tw.utils.Logger("zoomin story river view", {
enable: true, enable: true,
colour: 'red' colour: "red"
}); });
// Get the index of the tiddler that is at the top of the history // Get the index of the tiddler that is at the top of the history
var history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]), var history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),
@@ -212,8 +212,8 @@ ZoominListView.prototype.remove = function(widget) {
]); ]);
setTimeout(function() { setTimeout(function() {
$tw.utils.removeStyles(toWidgetDomNode, ["transformOrigin", "transform", "transition", "opacity", "zIndex"]); $tw.utils.removeStyles(toWidgetDomNode, ["transformOrigin", "transform", "transition", "opacity", "zIndex"]);
removeElement();
}, duration); }, duration);
setTimeout(removeElement,duration);
// Now the tiddler we're going back to // Now the tiddler we're going back to
if(toWidgetDomNode) { if(toWidgetDomNode) {
$tw.utils.setStyle(toWidgetDomNode,[ $tw.utils.setStyle(toWidgetDomNode,[
+7 -7
View File
@@ -89,7 +89,7 @@ function Syncer(options) {
self.processTaskQueue(); self.processTaskQueue();
} else { } else {
// Look for deletions of tiddlers we're already syncing // Look for deletions of tiddlers we're already syncing
var outstandingDeletion = false var outstandingDeletion = false;
$tw.utils.each(changes,function(change,title,object) { $tw.utils.each(changes,function(change,title,object) {
if(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) { if(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) {
outstandingDeletion = true; outstandingDeletion = true;
@@ -304,7 +304,7 @@ Syncer.prototype.syncFromServer = function() {
Syncer.prototype.canSyncFromServer = function() { Syncer.prototype.canSyncFromServer = function() {
return !!this.syncadaptor.getUpdatedTiddlers || !!this.syncadaptor.getSkinnyTiddlers; return !!this.syncadaptor.getUpdatedTiddlers || !!this.syncadaptor.getSkinnyTiddlers;
} };
/* /*
Force load a tiddler from the server Force load a tiddler from the server
@@ -355,7 +355,7 @@ Dispay a password prompt
*/ */
Syncer.prototype.displayLoginPrompt = function() { Syncer.prototype.displayLoginPrompt = function() {
var self = this; var self = this;
var promptInfo = $tw.passwordPrompt.createPrompt({ $tw.passwordPrompt.createPrompt({
serviceName: $tw.language.getString("LoginToTiddlySpace"), serviceName: $tw.language.getString("LoginToTiddlySpace"),
callback: function(data) { callback: function(data) {
self.login(data.username,data.password,function(err,isLoggedIn) { self.login(data.username,data.password,function(err,isLoggedIn) {
@@ -530,7 +530,7 @@ function SaveTiddlerTask(syncer,title) {
SaveTiddlerTask.prototype.toString = function() { SaveTiddlerTask.prototype.toString = function() {
return "SAVE " + this.title; return "SAVE " + this.title;
} };
SaveTiddlerTask.prototype.run = function(callback) { SaveTiddlerTask.prototype.run = function(callback) {
var self = this, var self = this,
@@ -568,7 +568,7 @@ function DeleteTiddlerTask(syncer,title) {
DeleteTiddlerTask.prototype.toString = function() { DeleteTiddlerTask.prototype.toString = function() {
return "DELETE " + this.title; return "DELETE " + this.title;
} };
DeleteTiddlerTask.prototype.run = function(callback) { DeleteTiddlerTask.prototype.run = function(callback) {
var self = this; var self = this;
@@ -595,7 +595,7 @@ function LoadTiddlerTask(syncer,title) {
LoadTiddlerTask.prototype.toString = function() { LoadTiddlerTask.prototype.toString = function() {
return "LOAD " + this.title; return "LOAD " + this.title;
} };
LoadTiddlerTask.prototype.run = function(callback) { LoadTiddlerTask.prototype.run = function(callback) {
var self = this; var self = this;
@@ -621,7 +621,7 @@ function SyncFromServerTask(syncer) {
SyncFromServerTask.prototype.toString = function() { SyncFromServerTask.prototype.toString = function() {
return "SYNCFROMSERVER"; return "SYNCFROMSERVER";
} };
SyncFromServerTask.prototype.run = function(callback) { SyncFromServerTask.prototype.run = function(callback) {
var self = this; var self = this;
+1 -2
View File
@@ -21,8 +21,7 @@ var BLOCKED_PLUGINS = {
}; };
exports.upgrade = function(wiki,titles,tiddlers) { exports.upgrade = function(wiki,titles,tiddlers) {
var self = this, var messages = {},
messages = {},
upgradeLibrary, upgradeLibrary,
getLibraryTiddler = function(title) { getLibraryTiddler = function(title) {
if(!upgradeLibrary) { if(!upgradeLibrary) {
+1 -2
View File
@@ -14,8 +14,7 @@ var DONT_IMPORT_LIST = ["$:/Import", "$:/build"],
WARN_IMPORT_PREFIX_LIST = ["$:/core/modules/"]; WARN_IMPORT_PREFIX_LIST = ["$:/core/modules/"];
exports.upgrade = function(wiki,titles,tiddlers) { exports.upgrade = function(wiki,titles,tiddlers) {
var self = this, var messages = {},
messages = {},
showAlert = false; showAlert = false;
// Check for tiddlers on our list // Check for tiddlers on our list
$tw.utils.each(titles,function(title) { $tw.utils.each(titles,function(title) {
+1 -2
View File
@@ -34,8 +34,7 @@ var MAPPINGS = {
}; };
exports.upgrade = function(wiki,titles,tiddlers) { exports.upgrade = function(wiki,titles,tiddlers) {
var self = this, var messages = {};
messages = {};
// Check for tiddlers on our list // Check for tiddlers on our list
$tw.utils.each(titles,function(title) { $tw.utils.each(titles,function(title) {
var mapping = MAPPINGS[title]; var mapping = MAPPINGS[title];
+6 -6
View File
@@ -13,19 +13,19 @@ Base64 utility functions
Base64 utility functions that work in either browser or Node.js Base64 utility functions that work in either browser or Node.js
*/ */
exports.btoa = binstr => window.btoa(binstr); exports.btoa = (binstr) => window.btoa(binstr);
exports.atob = b64 => window.atob(b64); exports.atob = (b64) => window.atob(b64);
function base64ToBytes(base64) { function base64ToBytes(base64) {
const binString = exports.atob(base64); const binString = exports.atob(base64);
return Uint8Array.from(binString, m => m.codePointAt(0)); return Uint8Array.from(binString, (m) => m.codePointAt(0));
}; };
function bytesToBase64(bytes) { function bytesToBase64(bytes) {
const binString = Array.from(bytes, byte => String.fromCodePoint(byte)).join(""); const binString = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join("");
return exports.btoa(binString); return exports.btoa(binString);
}; };
exports.base64EncodeUtf8 = str => bytesToBase64(new TextEncoder().encode(str)); exports.base64EncodeUtf8 = (str) => bytesToBase64(new TextEncoder().encode(str));
exports.base64DecodeUtf8 = str => new TextDecoder().decode(base64ToBytes(str)); exports.base64DecodeUtf8 = (str) => new TextDecoder().decode(base64ToBytes(str));
+7 -7
View File
@@ -30,7 +30,7 @@ var getCellInfo = function(text, start, length, SEPARATOR) {
return [cellStart, i, false]; return [cellStart, i, false];
} else if(cellCharacter === QUOTE && isCellQuoted) { } else if(cellCharacter === QUOTE && isCellQuoted) {
var nextCharacter = i + 1 < length ? text.charAt(i + 1) : ''; var nextCharacter = i + 1 < length ? text.charAt(i + 1) : "";
if(nextCharacter !== QUOTE) { if(nextCharacter !== QUOTE) {
return [cellStart, i, true]; return [cellStart, i, true];
} else { } else {
@@ -40,7 +40,7 @@ var getCellInfo = function(text, start, length, SEPARATOR) {
} }
return [cellStart, i, isCellQuoted]; return [cellStart, i, isCellQuoted];
} };
exports.parseCsvString = function(text, options) { exports.parseCsvString = function(text, options) {
if(!text) { if(!text) {
@@ -65,18 +65,18 @@ exports.parseCsvString = function(text, options) {
i = cellInfo[1]; i = cellInfo[1];
var character = text.charAt(i); var character = text.charAt(i);
var nextCharacter = i + 1 < length ? text.charAt(i + 1) : ''; var nextCharacter = i + 1 < length ? text.charAt(i + 1) : "";
if(character === "\r" || character === "\n") { if(character === "\r" || character === "\n") {
// Edge case for empty rows // Edge case for empty rows
if (nextRow.length === 1 && nextRow[0] === '') { if(nextRow.length === 1 && nextRow[0] === "") {
nextRow.length = 0; nextRow.length = 0;
} }
rows.push(nextRow); rows.push(nextRow);
nextRow = []; nextRow = [];
if(character === "\r") { if(character === "\r") {
var nextCharacter = i + 1 < length ? text.charAt(i + 1) : ''; var nextCharacter = i + 1 < length ? text.charAt(i + 1) : "";
if(nextCharacter === "\n") { if(nextCharacter === "\n") {
i++; i++;
@@ -93,7 +93,7 @@ exports.parseCsvString = function(text, options) {
rows.push(nextRow); rows.push(nextRow);
return rows; return rows;
} };
/* /*
Parse a CSV string with a header row and return an array of hashmaps. Parse a CSV string with a header row and return an array of hashmaps.
@@ -116,4 +116,4 @@ exports.parseCsvStringWithHeader = function(text,options) {
csv[i] = rowObject; csv[i] = rowObject;
} }
return csv; return csv;
} };
+3 -3
View File
@@ -7,7 +7,7 @@ Deprecated util functions
\*/ \*/
exports.logTable = data => console.table(data); exports.logTable = (data) => console.table(data);
exports.repeat = (str,count) => str.repeat(count); exports.repeat = (str,count) => str.repeat(count);
@@ -23,13 +23,13 @@ exports.trim = function(str) {
} }
}; };
exports.hopArray = (object,array) => array.some(element => $tw.utils.hop(object,element)); exports.hopArray = (object,array) => array.some((element) => $tw.utils.hop(object,element));
exports.sign = Math.sign; exports.sign = Math.sign;
exports.strEndsWith = (str,ending,position) => str.endsWith(ending,position); exports.strEndsWith = (str,ending,position) => str.endsWith(ending,position);
exports.stringifyNumber = num => num.toString(); exports.stringifyNumber = (num) => num.toString();
exports.tagToCssSelector = function(tagName) { exports.tagToCssSelector = function(tagName) {
return "tc-tagged-" + encodeURIComponent(tagName).replace(/[!"#$%&'()*+,\-./:;<=>?@[\\\]^`{\|}~,]/mg,function(c) { return "tc-tagged-" + encodeURIComponent(tagName).replace(/[!"#$%&'()*+,\-./:;<=>?@[\\\]^`{\|}~,]/mg,function(c) {
+4 -2
View File
@@ -30,10 +30,12 @@ Remove style properties of an element
styleProperties: ordered array of string property names styleProperties: ordered array of string property names
*/ */
exports.removeStyles = function(element, styleProperties) { exports.removeStyles = function(element, styleProperties) {
if(element) {
for(var i=0; i<styleProperties.length; i++) { for(var i=0; i<styleProperties.length; i++) {
element.style.removeProperty($tw.utils.convertStyleNameToPropertyName(styleProperties[i])); element.style.removeProperty($tw.utils.convertStyleNameToPropertyName(styleProperties[i]));
} }
} }
};
/* /*
Remove single style property of an element Remove single style property of an element
@@ -41,8 +43,8 @@ Remove single style property of an element
styleProperty: string property name styleProperty: string property name
*/ */
exports.removeStyle = function(element, styleProperty) { exports.removeStyle = function(element, styleProperty) {
$tw.utils.removeStyles(element, [styleProperty]) $tw.utils.removeStyles(element, [styleProperty]);
} };
/* /*
Converts a standard CSS property name into the local browser-specific equivalent. For example: Converts a standard CSS property name into the local browser-specific equivalent. For example:
+2 -2
View File
@@ -144,7 +144,7 @@ exports.getPassword = function(name) {
Force layout of a dom node and its descendents Force layout of a dom node and its descendents
*/ */
exports.forceLayout = function(element) { exports.forceLayout = function(element) {
var dummy = element.offsetWidth; void element.offsetWidth;
}; };
/* /*
@@ -246,7 +246,7 @@ exports.copyToClipboard = function(text,options) {
} }
if(!options.doNotNotify) { if(!options.doNotNotify) {
var successNotification = options.successNotification || "$:/language/Notifications/CopiedToClipboard/Succeeded", var successNotification = options.successNotification || "$:/language/Notifications/CopiedToClipboard/Succeeded",
failureNotification = options.failureNotification || "$:/language/Notifications/CopiedToClipboard/Failed" failureNotification = options.failureNotification || "$:/language/Notifications/CopiedToClipboard/Failed";
$tw.notifier.display(succeeded ? successNotification : failureNotification); $tw.notifier.display(succeeded ? successNotification : failureNotification);
} }
document.body.removeChild(textArea); document.body.removeChild(textArea);
+5 -6
View File
@@ -38,8 +38,7 @@ exports.makeDraggable = function(options) {
dragFilter = options.dragFilterFn && options.dragFilterFn(), dragFilter = options.dragFilterFn && options.dragFilterFn(),
titles = dragTiddler ? [dragTiddler] : [], titles = dragTiddler ? [dragTiddler] : [],
startActions = options.startActions, startActions = options.startActions,
variables, variables;
domNodeRect;
if(dragFilter) { if(dragFilter) {
titles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget)); titles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));
} }
@@ -151,7 +150,7 @@ exports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {
if($tw.log.IMPORT) { if($tw.log.IMPORT) {
console.log("Available data types:"); console.log("Available data types:");
for(var type=0; type<dataTransfer.types.length; type++) { for(var type=0; type<dataTransfer.types.length; type++) {
console.log("type",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type])) console.log("type",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]));
} }
} }
for(var t=0; t<importDataTypes.length; t++) { for(var t=0; t<importDataTypes.length; t++) {
@@ -162,7 +161,7 @@ exports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {
// Import the tiddlers in the data // Import the tiddlers in the data
if(data !== "" && data !== null) { if(data !== "" && data !== null) {
if($tw.log.IMPORT) { if($tw.log.IMPORT) {
console.log("Importing data type '" + dataType.type + "', data: '" + data + "'") console.log("Importing data type '" + dataType.type + "', data: '" + data + "'");
} }
var tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle); var tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);
callback(tiddlerFields); callback(tiddlerFields);
@@ -181,7 +180,7 @@ exports.importPaste = function(item,fallbackTitle,callback) {
item.getAsString(function(data){ item.getAsString(function(data){
if($tw.log.IMPORT) { if($tw.log.IMPORT) {
console.log("Importing data type '" + dataType.type + "', data: '" + data + "'") console.log("Importing data type '" + dataType.type + "', data: '" + data + "'");
} }
var tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle); var tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);
callback(tiddlerFields); callback(tiddlerFields);
@@ -200,7 +199,7 @@ exports.itemHasValidDataType = function(item) {
} }
} }
return false; return false;
} };
var importDataTypes = [ var importDataTypes = [
{type: "text/vnd.tiddler", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) { {type: "text/vnd.tiddler", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {
+4 -5
View File
@@ -61,7 +61,6 @@ HttpClient.prototype.initiateHttpRequest = function(options) {
}; };
HttpClient.prototype.cancelAllHttpRequests = function() { HttpClient.prototype.cancelAllHttpRequests = function() {
var self = this;
if(this.requests.length > 0) { if(this.requests.length > 0) {
for(var t=this.requests.length - 1; t--; t>=0) { for(var t=this.requests.length - 1; t--; t>=0) {
var requestInfo = this.requests[t]; var requestInfo = this.requests[t];
@@ -106,7 +105,7 @@ bearerAuthTokenFromStore: name of password store entry contain bear authorizatio
*/ */
function HttpClientRequest(options) { function HttpClientRequest(options) {
var self = this; var self = this;
console.log("Initiating an HTTP request",options) console.log("Initiating an HTTP request",options);
this.wiki = options.wiki; this.wiki = options.wiki;
this.completionActions = options.oncompletion; this.completionActions = options.oncompletion;
this.progressActions = options.onprogress; this.progressActions = options.onprogress;
@@ -211,7 +210,7 @@ HttpClientRequest.prototype.send = function(callback) {
}, },
progress: function(lengthComputable,loaded,total) { progress: function(lengthComputable,loaded,total) {
if(lengthComputable) { if(lengthComputable) {
setBinding(self.bindProgress,"" + Math.floor((loaded/total) * 100)) setBinding(self.bindProgress,"" + Math.floor((loaded/total) * 100));
} }
self.wiki.invokeActionString(self.progressActions,undefined,$tw.utils.extend({},self.variables,{ self.wiki.invokeActionString(self.progressActions,undefined,$tw.utils.extend({},self.variables,{
lengthComputable: lengthComputable ? "yes" : "no", lengthComputable: lengthComputable ? "yes" : "no",
@@ -276,7 +275,7 @@ exports.httpRequest = function(options) {
returnProp = options.returnProp || "responseText", returnProp = options.returnProp || "responseText",
request = new XMLHttpRequest(), request = new XMLHttpRequest(),
data = "", data = "",
f,results; results;
// Massage the data hashmap into a string // Massage the data hashmap into a string
if(options.data) { if(options.data) {
if(typeof options.data === "string") { // Already a string if(typeof options.data === "string") { // Already a string
@@ -309,7 +308,7 @@ exports.httpRequest = function(options) {
// Handle progress // Handle progress
if(options.progress) { if(options.progress) {
request.onprogress = function(event) { request.onprogress = function(event) {
console.log("Progress event",event) console.log("Progress event",event);
options.progress(event.lengthComputable,event.loaded,event.total); options.progress(event.lengthComputable,event.loaded,event.total);
}; };
} }
+1 -1
View File
@@ -14,7 +14,7 @@ Keyboard utilities; now deprecated. Instead, use $tw.keyboardManager
if($tw.keyboardManager) { if($tw.keyboardManager) {
return $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0)); return $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));
} else { } else {
return null return null;
} }
}; };
}); });
-1
View File
@@ -9,7 +9,6 @@ Modal message mechanism
"use strict"; "use strict";
var widget = require("$:/core/modules/widgets/widget.js");
var navigator = require("$:/core/modules/widgets/navigator.js"); var navigator = require("$:/core/modules/widgets/navigator.js");
var Modal = function(wiki) { var Modal = function(wiki) {
-2
View File
@@ -9,8 +9,6 @@ Notifier mechanism
"use strict"; "use strict";
var widget = require("$:/core/modules/widgets/widget.js");
var Notifier = function(wiki) { var Notifier = function(wiki) {
this.wiki = wiki; this.wiki = wiki;
}; };
+4 -4
View File
@@ -23,14 +23,14 @@ var Popup = function(options) {
Global regular expression for parsing the location of a popup. Global regular expression for parsing the location of a popup.
This is also used by the Reveal widget. This is also used by the Reveal widget.
*/ */
exports.popupLocationRegExp = /^(@?)\((-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+)\)$/ exports.popupLocationRegExp = /^(@?)\((-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+),(-?[0-9\.E]+)\)$/;
/* /*
Objekt containing the available prefixes for coordinates build with the `buildCoordinates` function: Objekt containing the available prefixes for coordinates build with the `buildCoordinates` function:
- csOffsetParent: Uses a coordinate system based on the offset parent (no prefix). - csOffsetParent: Uses a coordinate system based on the offset parent (no prefix).
- csAbsolute: Use an absolute coordinate system (prefix "@"). - csAbsolute: Use an absolute coordinate system (prefix "@").
*/ */
exports.coordinatePrefix = { csOffsetParent: "", csAbsolute: "@" } exports.coordinatePrefix = { csOffsetParent: "", csAbsolute: "@" };
/* /*
Trigger a popup open or closed. Parameters are in a hashmap: Trigger a popup open or closed. Parameters are in a hashmap:
@@ -220,7 +220,7 @@ exports.parseCoordinates = function(coordinates) {
} else { } else {
return false; return false;
} }
} };
/* /*
Builds a coordinate string from a coordinate system identifier and an object Builds a coordinate string from a coordinate system identifier and an object
@@ -237,6 +237,6 @@ exports.buildCoordinates = function(prefix,position) {
} else { } else {
return "(0,0,0,0)"; return "(0,0,0,0)";
} }
} };
exports.Popup = Popup; exports.Popup = Popup;
+2 -2
View File
@@ -32,7 +32,7 @@ var PageScroller = function() {
PageScroller.prototype.isScrolling = function() { PageScroller.prototype.isScrolling = function() {
return this.idRequestFrame !== null; return this.idRequestFrame !== null;
} };
PageScroller.prototype.cancelScroll = function(srcWindow) { PageScroller.prototype.cancelScroll = function(srcWindow) {
if(this.idRequestFrame) { if(this.idRequestFrame) {
@@ -78,7 +78,7 @@ PageScroller.prototype.scrollIntoView = function(element,callback,options) {
} }
// Get the client bounds of the element and adjust by the scroll position // Get the client bounds of the element and adjust by the scroll position
var getBounds = function() { var getBounds = function() {
var clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(), var clientBounds = typeof callback === "function" ? callback() : element.getBoundingClientRect(),
scrollPosition = $tw.utils.getScrollPosition(srcWindow); scrollPosition = $tw.utils.getScrollPosition(srcWindow);
return { return {
left: clientBounds.left + scrollPosition.x, left: clientBounds.left + scrollPosition.x,
+2 -3
View File
@@ -22,13 +22,13 @@ var TW_Node = function (){
throw TypeError("Illegal constructor"); throw TypeError("Illegal constructor");
}; };
Object.defineProperty(TW_Node.prototype, 'ELEMENT_NODE', { Object.defineProperty(TW_Node.prototype, "ELEMENT_NODE", {
get: function() { get: function() {
return 1; return 1;
} }
}); });
Object.defineProperty(TW_Node.prototype, 'TEXT_NODE', { Object.defineProperty(TW_Node.prototype, "TEXT_NODE", {
get: function() { get: function() {
return 3; return 3;
} }
@@ -63,7 +63,6 @@ var TW_Style = function(el) {
}, },
// Method to set styles using a string (e.g. "color:red; background-color:blue;") // Method to set styles using a string (e.g. "color:red; background-color:blue;")
set: function(str) { set: function(str) {
var self = this;
str = str || ""; str = str || "";
$tw.utils.each(str.split(";"),function(declaration) { $tw.utils.each(str.split(";"),function(declaration) {
var parts = declaration.split(":"), var parts = declaration.split(":"),
+2 -2
View File
@@ -54,10 +54,10 @@ Performance.prototype.log = function() {
$tw.utils.each(orderedMeasures,function(name) { $tw.utils.each(orderedMeasures,function(name) {
totalTime += self.measures[name].time; totalTime += self.measures[name].time;
}); });
var results = [] var results = [];
$tw.utils.each(orderedMeasures,function(name) { $tw.utils.each(orderedMeasures,function(name) {
var measure = self.measures[name]; var measure = self.measures[name];
results.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100}) results.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100});
}); });
self.logger.table(results); self.logger.table(results);
}; };

Some files were not shown because too many files have changed in this diff Show More