1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-02-26 11:59:50 +00:00

Compare commits

..

23 Commits

Author SHA1 Message Date
s793016
b0d99f3bd3 Fix Freelinks Aho-Corasick: failure links, cache invalidation, longest-match, and Unicode safety (#9676)
* Update aho-corasick.js

 fix transition logic; ensure complete outputs (via failure-output merge); clean up stats/build scoping; clarify CJK boundary behavior.

* Update text.js

implement global longest-match priority with overlap suppression; fix refresh invalidation to ignore $:/state and drafts; handle deletions precisely to avoid rebuilding on draft deletion; add defensive check for cached automaton presence.

* Update text.js

remove comment

* Update aho-corasick.js

remove comment

* Create #9672.tid

* Create #2026-0222.tid

* Delete editions/tw5.com/tiddlers/releasenotes/5.4.0/#2026-0222.tid

* Update text.js

remove \"

* Update and rename #9672.tid to #9676.tid

change to right number

* Update #9397.tid

update the existing release note with the new PR link instead of creating a new release note.

* Delete editions/tw5.com/tiddlers/releasenotes/5.4.0/#9676.tid

update the existing release note with the new PR link instead of creating a new release note.

* Rename #9397.tid to #9676.tid

update the existing release note with the new PR link instead of creating a new release note.

* Update and rename #9676.tid to #9397.tid

add link

* Rename #9397.tid to #9676.tid

* Update tiddlywiki.info

add plugin for test build

* Update tiddlywiki.info

reverse change, ready to be merge.
2026-02-25 12:07:32 +01:00
Andrew Gregory
91e7a62c13 docs: Tabs examples dynamically setting default tab (#9693)
Where tabs have been selected using a filter it is sometimes useful to set the default tab dynamically from the filter results. In most of these cases it is also desirable that the state not be persistent.
2026-02-25 08:14:38 +01: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
411 changed files with 5763 additions and 4677 deletions

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 }}

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 }}

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 }}

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();
}; };
} }

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;

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);
} }

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 + "'";
} }

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) {

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;

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";
} }

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";

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;

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";
} }

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";
} }

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

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

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,

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

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");
} }

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;

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],

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);

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");
} }

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();

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));

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) {

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

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);

View File

@@ -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) {

View File

@@ -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) {

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];
} }

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);
}); });
} }
} };
}; };

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);
} }
} };
}; };

View File

@@ -7,8 +7,6 @@ Assign a value to a variable
\*/ \*/
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict"; "use strict";
/* /*

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;
}); });
} }
} };
}; };

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);
} }
} };
}; };

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]);
}); });
} }
} };
}; };

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);

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;}
} };

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;
} };

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) {

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);

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;

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);

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";
} }

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

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);
} };

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;

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) {

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]
]; ];
} }

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 &&

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

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 "";

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) {

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;

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] || ""
}] }]
}); });
} }

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:}

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) {

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) {

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -67,5 +67,5 @@ exports.parse = function() {
return [{ return [{
type: "void", type: "void",
children: tree children: tree
}] }];
}; };

View File

@@ -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;

View File

@@ -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;

View File

@@ -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};

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

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) {

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);
} }
}); });

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);
} }
}); });

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);
} }
}); });

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 + ";;");

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" &&

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));
} }
} }
}; };

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();

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);
} }

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

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);

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;

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) {

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,[

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;

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) {

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) {

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];

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));

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;
} };

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) {

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:

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);

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) {

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);
}; };
} }

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;
} }
}; };
}); });

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) {

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;
}; };

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;

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,

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(":"),

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);
}; };

View File

@@ -916,12 +916,12 @@ exports.transliterationPairs = {
exports.transliterate = function(str) { exports.transliterate = function(str) {
return str.replace(/[^A-Za-z0-9\[\] ]/g,function(ch) { return str.replace(/[^A-Za-z0-9\[\] ]/g,function(ch) {
return exports.transliterationPairs[ch] || ch return exports.transliterationPairs[ch] || ch;
}); });
}; };
exports.transliterateToSafeASCII = function(str) { exports.transliterateToSafeASCII = function(str) {
return str.replace(/[^\x20-\x7F]/g,function(ch) { return str.replace(/[^\x20-\x7F]/g,function(ch) {
return exports.transliterationPairs[ch] || "" return exports.transliterationPairs[ch] || "";
}); });
}; };

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