Compare commits

..
Author SHA1 Message Date
Jeremy Ruston c05400021c Merge branch 'master' into intrinsic-sub-plugins 2025-03-21 17:24:56 +00:00
Jeremy Ruston 5111be1953 Merge branch 'master' into intrinsic-sub-plugins 2025-02-27 17:36:41 +00:00
Jeremy Ruston 9dadd3fafb Display subplugins in control panel listing 2025-02-27 16:54:32 +00:00
Jeremy Ruston 12ced06d1d Add subplugins for codemirror languages
The French translation is just for demo purposes. It would be helpful to replace it with some real translations.
2025-02-27 12:49:24 +00:00
Jeremy Ruston a4e8308e75 Add comment 2025-02-27 12:48:07 +00:00
Jeremy Ruston 9a2534fc5e Fix accidentally disabled test 2025-02-27 11:17:35 +00:00
Jeremy Ruston 2ae1e5aa09 Merge branch 'tiddlywiki-com' 2025-02-27 11:01:28 +00:00
Jeremy Ruston e01c428a17 Add support for add-on language and theme plugins 2025-02-26 21:17:53 +00:00
Jeremy Ruston 752c5cfbda Cleaning up 2025-02-26 20:01:32 +00:00
Jeremy Ruston 094428b1ab Remove debug code 2025-02-26 18:07:39 +00:00
Jeremy Ruston 41cd335cf4 Add test for dynamically loading a language plugin 2025-02-26 17:20:03 +00:00
Jeremy Ruston 26b2768294 Fix testcase export to include plugins 2025-02-26 17:18:37 +00:00
Jeremy Ruston 4e3d07b16a Code typo 2025-02-22 10:19:57 +00:00
Jeremy Ruston 01beac1d7c Test for loading language plugins at startup 2025-02-21 16:47:00 +00:00
Jeremy Ruston 0c80e1b35c Move subplugin tests into their own folder 2025-02-21 10:59:38 +00:00
Jeremy Ruston 55c634692b Deal with dynamic loading and unloading of plugins
More enhancements needed for the test framework too in order to allow events to be processed manually, without relying on the nexttick handler which is awkward in Jasmine
2025-02-21 09:36:40 +00:00
Jeremy Ruston 7e2a8238b5 Clarify comment 2025-02-18 21:17:34 +00:00
Jeremy Ruston ee90ad2fa6 Merge branch 'master' into intrinsic-sub-plugins 2025-02-18 21:15:39 +00:00
Jeremy Ruston afabe5b714 More efficient checks if a tiddler is a plugin 2025-02-18 17:30:11 +00:00
Jeremy Ruston 3a60e0eb17 Merge branch 'master' into intrinsic-sub-plugins 2025-02-18 16:54:47 +00:00
Jeremy Ruston 6b0a13b8cc Basic loading of bundled subplugins
Very basic. Doesn't cope with any changes to the plugins after startup, and doesn't remove sub-plugins when the parent plugin is removed.
2025-02-18 09:14:54 +00:00
Jeremy Ruston c142bfc50d Use "bundled" rather than "intrinsic" 2025-02-18 09:14:05 +00:00
Jeremy Ruston e8de413fba More refactoring for clarity 2025-02-17 16:31:42 +00:00
Jeremy Ruston 4cbf1b4d91 Refactor some symbols for clarity
All these symbols are inaccessible outside the wiki class closure, and so no backwards compatibility issues
2025-02-16 19:32:56 +00:00
Jeremy Ruston 778e544f1c Initial Commit 2025-02-16 18:20:00 +00:00
566 changed files with 3137 additions and 30677 deletions
+317
View File
@@ -0,0 +1,317 @@
{
"env": {
"browser": true,
"commonjs": true,
"node": true
},
"extends": [
"eslint:recommended"
],
"globals": {
"$tw": "writable"
},
"parserOptions": {
"ecmaVersion": 5
},
"plugins": [],
"rules": {
"array-bracket-newline": "off",
"array-bracket-spacing": "off",
"array-callback-return": "off",
"array-element-newline": "off",
"arrow-body-style": "error",
"arrow-parens": [
"error",
"as-needed"
],
"arrow-spacing": [
"error",
{
"after": true,
"before": true
}
],
"block-scoped-var": "off",
"block-spacing": "off",
"brace-style": "off",
"callback-return": "off",
"camelcase": "off",
"capitalized-comments": "off",
"class-methods-use-this": "error",
"comma-dangle": "off",
"comma-spacing": "off",
"comma-style": "off",
"complexity": "off",
"computed-property-spacing": "off",
"consistent-return": "off",
"consistent-this": "off",
"curly": "off",
"default-case": "off",
"default-case-last": "error",
"default-param-last": "error",
"dot-location": "off",
"dot-notation": "off",
"eol-last": "off",
"eqeqeq": "off",
"func-call-spacing": "off",
"func-name-matching": "off",
"func-names": "off",
"func-style": "off",
"function-call-argument-newline": "off",
"function-paren-newline": "off",
"generator-star-spacing": "error",
"global-require": "off",
"grouped-accessor-pairs": "error",
"guard-for-in": "off",
"handle-callback-err": "off",
"id-blacklist": "error",
"id-denylist": "error",
"id-length": "off",
"id-match": "error",
"implicit-arrow-linebreak": "error",
"indent": "off",
"indent-legacy": "off",
"init-declarations": "off",
"jsx-quotes": "error",
"key-spacing": "off",
"keyword-spacing": [
"error",
{
"before": true,
"after": false,
"overrides": {
"case": {
"after": true
},
"do": {
"after": true
},
"else": {
"after": true
},
"return": {
"after": true
},
"throw": {
"after": true
},
"try": {
"after": true
},
"catch": {
"after": true
}
}
}
],
"line-comment-position": "off",
"linebreak-style": "off",
"lines-around-comment": "off",
"lines-around-directive": "off",
"lines-between-class-members": "error",
"max-classes-per-file": "error",
"max-depth": "off",
"max-len": "off",
"max-lines": "off",
"max-lines-per-function": "off",
"max-nested-callbacks": "error",
"max-params": "off",
"max-statements": "off",
"max-statements-per-line": "off",
"multiline-comment-style": "off",
"multiline-ternary": "off",
"new-parens": "off",
"newline-after-var": "off",
"newline-before-return": "off",
"newline-per-chained-call": "off",
"no-alert": "off",
"no-array-constructor": "off",
"no-await-in-loop": "error",
"no-bitwise": "off",
"no-buffer-constructor": "off",
"no-caller": "error",
"no-catch-shadow": "off",
"no-confusing-arrow": "error",
"no-console": "off",
"no-constant-condition": [
"error",
{
"checkLoops": false
}
],
"no-constructor-return": "error",
"no-continue": "off",
"no-div-regex": "off",
"no-duplicate-imports": "error",
"no-else-return": "off",
"no-empty-function": "off",
"no-eq-null": "off",
"no-eval": "off",
"no-extend-native": "off",
"no-extra-bind": "off",
"no-extra-label": "off",
"no-extra-parens": "off",
"no-floating-decimal": "off",
"no-implicit-coercion": [
"error",
{
"boolean": false,
"number": false,
"string": false
}
],
"no-implicit-globals": "off",
"no-implied-eval": "error",
"no-inline-comments": "off",
"no-invalid-this": "off",
"no-iterator": "error",
"no-label-var": "off",
"no-labels": "off",
"no-lone-blocks": "off",
"no-lonely-if": "off",
"no-loop-func": "off",
"no-loss-of-precision": "error",
"no-magic-numbers": "off",
"no-mixed-operators": "off",
"no-mixed-requires": "off",
"no-multi-assign": "off",
"no-multi-spaces": "off",
"no-multi-str": "error",
"no-multiple-empty-lines": ["warn", { "max": 4, "maxEOF": 0 }],
"no-native-reassign": "off",
"no-negated-condition": "off",
"no-negated-in-lhs": "error",
"no-nested-ternary": "off",
"no-new": "off",
"no-new-func": "off",
"no-new-object": "off",
"no-new-require": "error",
"no-new-wrappers": "error",
"no-octal-escape": "error",
"no-param-reassign": "off",
"no-path-concat": "error",
"no-plusplus": "off",
"no-process-env": "off",
"no-process-exit": "off",
"no-promise-executor-return": "error",
"no-proto": "off",
"no-restricted-exports": "error",
"no-restricted-globals": "error",
"no-restricted-imports": "error",
"no-restricted-modules": "error",
"no-restricted-properties": "error",
"no-restricted-syntax": "error",
"no-return-assign": "off",
"no-return-await": "error",
"no-script-url": "off",
"no-self-compare": "off",
"no-sequences": "off",
"no-shadow": "off",
"no-spaced-func": "off",
"no-sync": "off",
"no-tabs": "off",
"no-template-curly-in-string": "error",
"no-ternary": "off",
"no-throw-literal": "off",
"no-trailing-spaces": "error",
"no-undef-init": "off",
"no-undefined": "off",
"no-underscore-dangle": "off",
"no-unmodified-loop-condition": "off",
"no-unneeded-ternary": "off",
"no-unreachable-loop": "error",
"no-unused-expressions": "off",
"no-use-before-define": "off",
"no-useless-backreference": "error",
"no-useless-call": "off",
"no-useless-computed-key": "error",
"no-useless-concat": "off",
"no-useless-constructor": "error",
"no-useless-rename": "error",
"no-useless-return": "off",
"no-var": "off",
"no-void": "off",
"no-warning-comments": "off",
"no-whitespace-before-property": "error",
"nonblock-statement-body-position": [
"error",
"any"
],
"object-curly-newline": "off",
"object-curly-spacing": "off",
"object-property-newline": "off",
"object-shorthand": "off",
"one-var": "off",
"one-var-declaration-per-line": "off",
"operator-assignment": "off",
"operator-linebreak": "off",
"padded-blocks": "off",
"padding-line-between-statements": "error",
"prefer-arrow-callback": "off",
"prefer-const": "off",
"prefer-destructuring": "off",
"prefer-exponentiation-operator": "off",
"prefer-named-capture-group": "off",
"prefer-numeric-literals": "error",
"prefer-object-spread": "off",
"prefer-promise-reject-errors": "error",
"prefer-reflect": "off",
"prefer-regex-literals": "off",
"prefer-rest-params": "off",
"prefer-spread": "off",
"prefer-template": "off",
"quote-props": "off",
"quotes": "off",
"radix": "off",
"require-atomic-updates": "error",
"require-await": "error",
"require-jsdoc": "off",
"require-unicode-regexp": "off",
"rest-spread-spacing": "error",
"semi": "off",
"semi-spacing": "off",
"semi-style": "off",
"sort-imports": "error",
"sort-keys": "off",
"sort-vars": "off",
"space-before-blocks": "off",
"space-before-function-paren": "off",
"space-in-parens": "off",
"space-infix-ops": "off",
"space-unary-ops": "off",
"spaced-comment": "off",
"strict": "off",
"switch-colon-spacing": "off",
"symbol-description": "error",
"template-curly-spacing": "error",
"template-tag-spacing": "error",
"unicode-bom": [
"error",
"never"
],
"valid-jsdoc": "off",
"valid-typeof": [
"error",
{
"requireStringLiterals": false
}
],
"vars-on-top": "off",
"wrap-iife": "off",
"wrap-regex": "off",
"yield-star-spacing": "error",
"yoda": "off",
"no-useless-escape": "off",
"no-unused-vars": "off",
"no-empty": "off",
"no-extra-semi": "off",
"no-redeclare": "off",
"no-control-regex": "off",
"no-mixed-spaces-and-tabs": "off",
"no-extra-boolean-cast": "off",
"no-prototype-builtins": "off",
"no-undef": "off",
"no-unreachable": "off",
"no-self-assign": "off"
}
}
-55
View File
@@ -1,55 +0,0 @@
name: Calculate PR build size
on:
pull_request_target:
types: [opened, reopened, synchronize]
paths:
- 'boot/**'
- 'core/**'
- 'themes/tiddlywiki/snowwhite/**'
- 'themes/tiddlywiki/vanilla/**'
jobs:
calculate-build-size:
runs-on: ubuntu-latest
permissions:
pull-requests: read
contents: read
outputs:
pr_size: ${{ steps.get_sizes.outputs.pr_size }}
base_size: ${{ steps.get_sizes.outputs.base_size }}
steps:
- name: build-size-check
id: get_sizes
uses: TiddlyWiki/cerebrus@v4
with:
pr_number: ${{ github.event.pull_request.number }}
repo: ${{ github.repository }}
base_ref: ${{ github.event.pull_request.base.ref }}
github_token: ${{ secrets.GITHUB_TOKEN }}
mode: size:calc
dispatch-followup:
needs: calculate-build-size
runs-on: ubuntu-latest
permissions:
actions: write # Required to dispatch another workflow
pull-requests: write
contents: read
steps:
- name: Trigger follow-up workflow
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'pr-comment-build-size.yml',
ref: 'master',
inputs: {
pr_number: '${{ github.event.pull_request.number }}',
base_ref: '${{ github.event.pull_request.base.ref }}',
pr_size: '${{ needs.calculate-build-size.outputs.pr_size }}',
base_size: '${{ needs.calculate-build-size.outputs.base_size }}'
}
});
@@ -1,36 +0,0 @@
name: Comment on PR build size (Trusted workflow)
on:
workflow_dispatch:
inputs:
pr_number:
required: true
type: string
base_ref:
required: true
type: string
pr_size:
required: true
type: string
base_size:
required: true
type: string
jobs:
comment-on-pr:
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: read
steps:
- name: Build and check size
uses: TiddlyWiki/cerebrus@v4
with:
pr_number: ${{ inputs.pr_number }}
repo: ${{ github.repository }}
base_ref: ${{ inputs.base_ref }}
github_token: ${{ secrets.GITHUB_TOKEN }}
mode: size:comment
pr_size: ${{ inputs.pr_size }}
base_size: ${{ inputs.base_size }}
-18
View File
@@ -1,18 +0,0 @@
name: Validate PR Paths
on:
pull_request_target:
types: [opened, reopened, synchronize]
jobs:
validate-pr:
runs-on: ubuntu-latest
steps:
- name: Validate PR
uses: TiddlyWiki/cerebrus@v4
with:
pr_number: ${{ github.event.pull_request.number }}
repo: ${{ github.repository }}
base_ref: ${{ github.base_ref }}
github_token: ${{ secrets.GITHUB_TOKEN }}
+13 -20
View File
@@ -5,7 +5,7 @@
# Default to the current version number for building the plugin library # Default to the current version number for building the plugin library
if [ -z "$TW5_BUILD_VERSION" ]; then if [ -z "$TW5_BUILD_VERSION" ]; then
TW5_BUILD_VERSION=v5.3.8 TW5_BUILD_VERSION=v5.3.7
fi fi
echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]" echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]"
@@ -156,14 +156,7 @@ node $TW5_BUILD_TIDDLYWIKI \
node $TW5_BUILD_TIDDLYWIKI \ node $TW5_BUILD_TIDDLYWIKI \
./editions/tour \ ./editions/tour \
--output $TW5_BUILD_OUTPUT \ --output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all-external-js tour.html text/plain \ --rendertiddler $:/core/save/all tour.html text/plain \
|| exit 1
# /surveys.html surveys edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/tiddlywiki-surveys \
--output $TW5_BUILD_OUTPUT \
--build index \
|| exit 1 || exit 1
# /share.html Custom edition for sharing via the URL # /share.html Custom edition for sharing via the URL
@@ -202,7 +195,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/xlsx-utils \ ./editions/xlsx-utils \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/xlsx-utils/ \ --output $TW5_BUILD_OUTPUT/editions/xlsx-utils/ \
--build external \ --build index \
|| exit 1 || exit 1
# /editions/resumebuilder/index.html Resume builder edition # /editions/resumebuilder/index.html Resume builder edition
@@ -218,7 +211,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/text-slicer \ ./editions/text-slicer \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/text-slicer/ \ --output $TW5_BUILD_OUTPUT/editions/text-slicer/ \
--build external \ --build index \
|| exit 1 || exit 1
# /editions/translators/index.html Translators edition # /editions/translators/index.html Translators edition
@@ -250,7 +243,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/tw5.com-docs \ ./editions/tw5.com-docs \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/tw5.com-docs/ \ --output $TW5_BUILD_OUTPUT/editions/tw5.com-docs/ \
--build external \ --build index \
|| exit 1 || exit 1
# /editions/twitter-archivist/index.html Twitter Archivist edition # /editions/twitter-archivist/index.html Twitter Archivist edition
@@ -273,7 +266,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/innerwikidemo \ ./editions/innerwikidemo \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \ --output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all-external-js plugins/tiddlywiki/innerwiki/index.html text/plain \ --rendertiddler $:/core/save/all plugins/tiddlywiki/innerwiki/index.html text/plain \
|| exit 1 || exit 1
# /plugins/tiddlywiki/dynaview/index.html Demo wiki with DynaView plugin # /plugins/tiddlywiki/dynaview/index.html Demo wiki with DynaView plugin
@@ -283,7 +276,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/dynaviewdemo \ ./editions/dynaviewdemo \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \ --output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all-external-js plugins/tiddlywiki/dynaview/index.html text/plain \ --rendertiddler $:/core/save/all plugins/tiddlywiki/dynaview/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/dynaview/empty.html text/plain \ --rendertiddler $:/core/save/empty plugins/tiddlywiki/dynaview/empty.html text/plain \
|| exit 1 || exit 1
@@ -297,7 +290,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/katexdemo \ ./editions/katexdemo \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \ --output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all-external-js plugins/tiddlywiki/katex/index.html text/plain \ --rendertiddler $:/core/save/all plugins/tiddlywiki/katex/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/katex/empty.html text/plain \ --rendertiddler $:/core/save/empty plugins/tiddlywiki/katex/empty.html text/plain \
|| exit 1 || exit 1
@@ -327,7 +320,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/codemirrordemo \ ./editions/codemirrordemo \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \ --output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all-external-js plugins/tiddlywiki/codemirror/index.html text/plain \ --rendertiddler $:/core/save/all plugins/tiddlywiki/codemirror/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/codemirror/empty.html text/plain \ --rendertiddler $:/core/save/empty plugins/tiddlywiki/codemirror/empty.html text/plain \
|| exit 1 || exit 1
@@ -337,7 +330,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/markdowndemo \ ./editions/markdowndemo \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \ --output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all-external-js plugins/tiddlywiki/markdown/index.html text/plain \ --rendertiddler $:/core/save/all plugins/tiddlywiki/markdown/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/markdown/empty.html text/plain \ --rendertiddler $:/core/save/empty plugins/tiddlywiki/markdown/empty.html text/plain \
|| exit 1 || exit 1
@@ -347,7 +340,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/classicparserdemo \ ./editions/classicparserdemo \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \ --output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all-external-js plugins/tiddlywiki/tw2parser/index.html text/plain \ --rendertiddler $:/core/save/all plugins/tiddlywiki/tw2parser/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/tw2parser/empty.html text/plain \ --rendertiddler $:/core/save/empty plugins/tiddlywiki/tw2parser/empty.html text/plain \
|| exit 1 || exit 1
@@ -357,7 +350,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/highlightdemo \ ./editions/highlightdemo \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \ --output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all-external-js plugins/tiddlywiki/highlight/index.html text/plain \ --rendertiddler $:/core/save/all plugins/tiddlywiki/highlight/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/highlight/empty.html text/plain \ --rendertiddler $:/core/save/empty plugins/tiddlywiki/highlight/empty.html text/plain \
|| exit 1 || exit 1
@@ -367,7 +360,7 @@ node $TW5_BUILD_TIDDLYWIKI \
./editions/geospatialdemo \ ./editions/geospatialdemo \
--load $TW5_BUILD_OUTPUT/build.tid \ --load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \ --output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all-external-js plugins/tiddlywiki/geospatial/index.html text/plain \ --rendertiddler $:/core/save/all plugins/tiddlywiki/geospatial/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/geospatial/empty.html text/plain \ --rendertiddler $:/core/save/empty plugins/tiddlywiki/geospatial/empty.html text/plain \
|| exit 1 || exit 1
+177 -124
View File
@@ -1068,6 +1068,10 @@ $tw.Tiddler.prototype.hasField = function(field) {
return $tw.utils.hop(this.fields,field); return $tw.utils.hop(this.fields,field);
}; };
$tw.Tiddler.prototype.isPlugin = function() {
return this.fields.type === "application/json" && this.hasField("plugin-type") && !this.hasField("draft.of");
};
/* /*
Compare two tiddlers for equality Compare two tiddlers for equality
tiddler: the tiddler to compare tiddler: the tiddler to compare
@@ -1162,21 +1166,21 @@ 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 self = this,
tiddlers = Object.create(null), // Hashmap of tiddlers tiddlerStore = Object.create(null), // Hashmap of tiddlers
tiddlerTitles = null, // Array of tiddler titles tiddlerTitles = null, // Array of tiddler titles, calculated and cached when needed
getTiddlerTitles = function() { getTiddlerTitles = function() {
if(!tiddlerTitles) { if(!tiddlerTitles) {
tiddlerTitles = Object.keys(tiddlers).sort(function(a,b) {return a.localeCompare(b);}); tiddlerTitles = Object.keys(tiddlerStore).sort(function(a,b) {return a.localeCompare(b);});
} }
return tiddlerTitles; return tiddlerTitles;
}, },
pluginTiddlers = [], // Array of tiddlers containing registered plugins, ordered by priority pluginTiddlersInfo = [], // Array of tiddler fields for all plugins and sub-plugins, ordered by priority
pluginInfo = Object.create(null), // Hashmap of parsed plugin content pluginContents = Object.create(null), // Hashmap by title of {contents:<parsed plugin contents>,fields:<fields>,subPluginTitles:<list>}
shadowTiddlers = Object.create(null), // Hashmap by title of {source:, tiddler:} shadowTiddlerInfo = Object.create(null), // Hashmap by title of {source:, tiddler:}
shadowTiddlerTitles = null, shadowTiddlerTitles = null, // Array of tiddler titles, calculated and cached when needed
getShadowTiddlerTitles = function() { getShadowTiddlerTitles = function() {
if(!shadowTiddlerTitles) { if(!shadowTiddlerTitles) {
shadowTiddlerTitles = Object.keys(shadowTiddlers).sort(function(a,b) {return a.localeCompare(b);}); shadowTiddlerTitles = Object.keys(shadowTiddlerInfo).sort(function(a,b) {return a.localeCompare(b);});
} }
return shadowTiddlerTitles; return shadowTiddlerTitles;
}, },
@@ -1218,7 +1222,7 @@ $tw.Wiki = function(options) {
} }
} }
// Save the new tiddler // Save the new tiddler
tiddlers[title] = tiddler; tiddlerStore[title] = tiddler;
// Check we've got the title // Check we've got the title
tiddlerTitles = $tw.utils.insertSortedArray(tiddlerTitles || [],title); tiddlerTitles = $tw.utils.insertSortedArray(tiddlerTitles || [],title);
// Record the new tiddler state // Record the new tiddler state
@@ -1243,7 +1247,7 @@ $tw.Wiki = function(options) {
this.deleteTiddler = function(title) { this.deleteTiddler = function(title) {
// Uncomment the following line for detailed logs of all tiddler deletions // Uncomment the following line for detailed logs of all tiddler deletions
// console.log("Deleting",title) // console.log("Deleting",title)
if($tw.utils.hop(tiddlers,title)) { if($tw.utils.hop(tiddlerStore,title)) {
// Record the old tiddler state // Record the old tiddler state
var updateDescriptor = { var updateDescriptor = {
old: { old: {
@@ -1253,7 +1257,7 @@ $tw.Wiki = function(options) {
} }
} }
// Delete the tiddler // Delete the tiddler
delete tiddlers[title]; delete tiddlerStore[title];
// Delete it from the list of titles // Delete it from the list of titles
if(tiddlerTitles) { if(tiddlerTitles) {
var index = tiddlerTitles.indexOf(title); var index = tiddlerTitles.indexOf(title);
@@ -1281,11 +1285,11 @@ $tw.Wiki = function(options) {
// Get a tiddler from the store // Get a tiddler from the store
this.getTiddler = function(title) { this.getTiddler = function(title) {
if(title) { if(title) {
var t = tiddlers[title]; var t = tiddlerStore[title];
if(t !== undefined) { if(t !== undefined) {
return t; return t;
} else { } else {
var s = shadowTiddlers[title]; var s = shadowTiddlerInfo[title];
if(s !== undefined) { if(s !== undefined) {
return s.tiddler; return s.tiddler;
} }
@@ -1305,7 +1309,7 @@ $tw.Wiki = function(options) {
index,titlesLength,title; index,titlesLength,title;
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) { for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index]; title = titles[index];
callback(tiddlers[title],title); callback(tiddlerStore[title],title);
} }
}; };
@@ -1320,10 +1324,10 @@ $tw.Wiki = function(options) {
index,titlesLength,title; index,titlesLength,title;
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) { for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index]; title = titles[index];
if(tiddlers[title]) { if(tiddlerStore[title]) {
callback(tiddlers[title],title); callback(tiddlerStore[title],title);
} else { } else {
var shadowInfo = shadowTiddlers[title]; var shadowInfo = shadowTiddlerInfo[title];
callback(shadowInfo.tiddler,title); callback(shadowInfo.tiddler,title);
} }
} }
@@ -1335,13 +1339,13 @@ $tw.Wiki = function(options) {
titles = getTiddlerTitles(); titles = getTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) { for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index]; title = titles[index];
callback(tiddlers[title],title); callback(tiddlerStore[title],title);
} }
titles = getShadowTiddlerTitles(); titles = getShadowTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) { for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index]; title = titles[index];
if(!tiddlers[title]) { if(!tiddlerStore[title]) {
var shadowInfo = shadowTiddlers[title]; var shadowInfo = shadowTiddlerInfo[title];
callback(shadowInfo.tiddler,title); callback(shadowInfo.tiddler,title);
} }
} }
@@ -1353,35 +1357,35 @@ $tw.Wiki = function(options) {
titles = getShadowTiddlerTitles(); titles = getShadowTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) { for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index]; title = titles[index];
if(tiddlers[title]) { if(tiddlerStore[title]) {
callback(tiddlers[title],title); callback(tiddlerStore[title],title);
} else { } else {
var shadowInfo = shadowTiddlers[title]; var shadowInfo = shadowTiddlerInfo[title];
callback(shadowInfo.tiddler,title); callback(shadowInfo.tiddler,title);
} }
} }
titles = getTiddlerTitles(); titles = getTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) { for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index]; title = titles[index];
if(!shadowTiddlers[title]) { if(!shadowTiddlerInfo[title]) {
callback(tiddlers[title],title); callback(tiddlerStore[title],title);
} }
} }
}; };
// Test for the existence of a tiddler (excludes shadow tiddlers) // Test for the existence of a tiddler (excludes shadow tiddlers)
this.tiddlerExists = function(title) { this.tiddlerExists = function(title) {
return !!$tw.utils.hop(tiddlers,title); return !!$tw.utils.hop(tiddlerStore,title);
}; };
// Determines if a tiddler is a shadow tiddler, regardless of whether it has been overridden by a real tiddler // Determines if a tiddler is a shadow tiddler, regardless of whether it has been overridden by a real tiddler
this.isShadowTiddler = function(title) { this.isShadowTiddler = function(title) {
return $tw.utils.hop(shadowTiddlers,title); return $tw.utils.hop(shadowTiddlerInfo,title);
}; };
this.getShadowSource = function(title) { this.getShadowSource = function(title) {
if($tw.utils.hop(shadowTiddlers,title)) { if($tw.utils.hop(shadowTiddlerInfo,title)) {
return shadowTiddlers[title].source; return shadowTiddlerInfo[title].source;
} }
return null; return null;
}; };
@@ -1389,8 +1393,8 @@ $tw.Wiki = function(options) {
// Get an array of all the currently recognised plugin types // Get an array of all the currently recognised plugin types
this.getPluginTypes = function() { this.getPluginTypes = function() {
var types = []; var types = [];
$tw.utils.each(pluginTiddlers,function(pluginTiddler) { $tw.utils.each(pluginTiddlersInfo,function(pluginTiddlerFields) {
var pluginType = pluginTiddler.fields["plugin-type"]; var pluginType = pluginTiddlerFields["plugin-type"];
if(pluginType && types.indexOf(pluginType) === -1) { if(pluginType && types.indexOf(pluginType) === -1) {
types.push(pluginType); types.push(pluginType);
} }
@@ -1398,22 +1402,45 @@ $tw.Wiki = function(options) {
return types; return types;
}; };
// Read plugin info for all plugins, or just an array of titles. Returns the number of plugins updated or deleted // Read plugin contents for all plugins, or just an array of titles. Returns the list of updated plugin titles, the list of deleted plugin titles and
// a hashmap of the deleted plugin contents. Clears the pluginContents cache for any plugins that have been deleted
this.readPluginInfo = function(titles) { this.readPluginInfo = function(titles) {
var results = { var self = this,
results = {
modifiedPlugins: [], modifiedPlugins: [],
deletedPlugins: [] deletedPlugins: [],
deletedPluginContents: {}
}; };
$tw.utils.each(titles || getTiddlerTitles(),function(title) { $tw.utils.each(titles || getTiddlerTitles(),function(title) {
var tiddler = tiddlers[title]; var tiddler = self.getTiddler(title);
if(!tiddler) {
for(var t=0; t<pluginContents.length; t++) {
if(pluginContents[t].subPluginTitles.indexOf(title) !== -1) {
tiddler = new $tw.Tiddler(pluginContents[t].fields);
break;
}
}
}
if(tiddler) { if(tiddler) {
if(tiddler.fields.type === "application/json" && tiddler.hasField("plugin-type") && tiddler.fields.text) { if(tiddler.isPlugin() && tiddler.fields.text) {
pluginInfo[tiddler.fields.title] = $tw.utils.parseJSONSafe(tiddler.fields.text); var contents = $tw.utils.parseJSONSafe(tiddler.fields.text).tiddlers;
results.modifiedPlugins.push(tiddler.fields.title); var subPluginTitles = [];
// Read any sub-plugins
$tw.utils.each(contents,function(subPluginFields,subPluginTitle) {
if(subPluginFields["plugin-type"] && subPluginFields["type"] === "application/json") {
var contents = $tw.utils.parseJSONSafe(subPluginFields.text).tiddlers
pluginContents[subPluginTitle] = {contents: contents,fields: subPluginFields};
results.modifiedPlugins.push(subPluginTitle);
subPluginTitles.push(subPluginTitle)
}
});
pluginContents[title] = {contents: contents,fields: tiddler.fields,subPluginTitles: subPluginTitles};
results.modifiedPlugins.push(title);
} }
} else { } else {
if(pluginInfo[title]) { if(pluginContents[title]) {
delete pluginInfo[title]; results.deletedPluginContents[title] = {tiddlers: pluginContents[title].contents};
delete pluginContents[title];
results.deletedPlugins.push(title); results.deletedPlugins.push(title);
} }
} }
@@ -1421,34 +1448,42 @@ $tw.Wiki = function(options) {
return results; return results;
}; };
this.isSubPlugin = function(title) {
for(var t=0; t<pluginContents.length; t++) {
if(pluginContents[t].subPluginTitles.indexOf(title) !== -1) {
return true;
}
}
return false;
};
// Get plugin info for a plugin // Get plugin info for a plugin
this.getPluginInfo = function(title) { this.getPluginInfo = function(title) {
return pluginInfo[title]; var pluginContent = pluginContents[title];
if(pluginContent) {
return {tiddlers: pluginContent.contents, subPluginTitles: pluginContent.subPluginTitles, fields: pluginContent.fields};
} else {
return null;
}
}; };
// Register the plugin tiddlers of a particular type, or null/undefined for any type, optionally restricting registration to an array of tiddler titles. Return the array of titles affected // Register the plugin tiddlers of a particular type, or null/undefined for any type, optionally restricting registration to an array of tiddler titles. Return the array of titles affected
this.registerPluginTiddlers = function(pluginType,titles) { this.registerPluginTiddlers = function(pluginType,titles) {
var self = this, var self = this,
registeredTitles = [], registeredTitles = [];
checkTiddler = function(tiddler,title) { $tw.utils.each(pluginContents,function(pluginContent,pluginTitle) {
if(tiddler && tiddler.fields.type === "application/json" && tiddler.fields["plugin-type"] && (!pluginType || tiddler.fields["plugin-type"] === pluginType)) { var pluginFields = pluginContent.fields;
var disablingTiddler = self.getTiddler("$:/config/Plugins/Disabled/" + title); if(!titles || titles.indexOf(pluginTitle) !== -1) {
if(title === "$:/core" || !disablingTiddler || (disablingTiddler.fields.text || "").trim() !== "yes") { if(!pluginType || pluginFields["plugin-type"] === pluginType) {
self.unregisterPluginTiddlers(null,[title]); // Unregister the plugin if it's already registered var disablingTiddler = self.getTiddler("$:/config/Plugins/Disabled/" + pluginTitle);
pluginTiddlers.push(tiddler); if(pluginTitle === "$:/core" || !disablingTiddler || (disablingTiddler.fields.text || "").trim() !== "yes") {
registeredTitles.push(tiddler.fields.title); self.unregisterPluginTiddlers(null,[pluginTitle]); // Unregister the plugin if it's already registered
pluginTiddlersInfo.push(pluginFields);
registeredTitles.push(pluginTitle);
} }
} }
}; }
if(titles) { });
$tw.utils.each(titles,function(title) {
checkTiddler(self.getTiddler(title),title);
});
} else {
this.each(function(tiddler,title) {
checkTiddler(tiddler,title);
});
}
return registeredTitles; return registeredTitles;
}; };
@@ -1457,11 +1492,11 @@ $tw.Wiki = function(options) {
var self = this, var self = this,
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=pluginTiddlersInfo.length-1; t>=0; t--) {
var tiddler = pluginTiddlers[t]; var pluginFields = pluginTiddlersInfo[t];
if(tiddler.fields["plugin-type"] && (!pluginType || tiddler.fields["plugin-type"] === pluginType) && (!titles || titles.indexOf(tiddler.fields.title) !== -1)) { if(pluginFields["plugin-type"] && (!pluginType || pluginFields["plugin-type"] === pluginType) && (!titles || titles.indexOf(pluginFields.title) !== -1)) {
unregisteredTitles.push(tiddler.fields.title); unregisteredTitles.push(pluginFields.title);
pluginTiddlers.splice(t,1); pluginTiddlersInfo.splice(t,1);
} }
} }
return unregisteredTitles; return unregisteredTitles;
@@ -1471,36 +1506,33 @@ $tw.Wiki = function(options) {
this.unpackPluginTiddlers = function() { this.unpackPluginTiddlers = function() {
var self = this; 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) { pluginTiddlersInfo.sort(function(a, b) {
var priorityA = "plugin-priority" in a.fields ? a.fields["plugin-priority"] : 1; var priorityA = "plugin-priority" in a ? a["plugin-priority"] : 1,
var priorityB = "plugin-priority" in b.fields ? b.fields["plugin-priority"] : 1; priorityB = "plugin-priority" in b ? b["plugin-priority"] : 1;
if (priorityA !== priorityB) { if (priorityA !== priorityB) {
return priorityA - priorityB; return priorityA - priorityB;
} else if (a.fields.title < b.fields.title) { } else if (a.title < b.title) {
return -1; return -1;
} else if (a.fields.title === b.fields.title) { } else if (a.title === b.title) {
return 0; return 0;
} else { } else {
return +1; return +1;
} }
}); });
// Now go through the plugins in ascending order and assign the shadows // Now go through the plugins in ascending order and assign the shadows
shadowTiddlers = Object.create(null); shadowTiddlerInfo = Object.create(null);
$tw.utils.each(pluginTiddlers,function(tiddler) { $tw.utils.each(pluginTiddlersInfo,function(tiddlerFields) {
var contents = pluginContents[tiddlerFields.title].contents;
// Extract the constituent tiddlers // Extract the constituent tiddlers
if($tw.utils.hop(pluginInfo,tiddler.fields.title)) { $tw.utils.each(contents,function(constituentTiddler,constituentTitle) {
$tw.utils.each(pluginInfo[tiddler.fields.title].tiddlers,function(constituentTiddler,constituentTitle) { // Save the tiddler object
// Save the tiddler object shadowTiddlerInfo[constituentTitle] = {
if(constituentTitle) { source: tiddlerFields.title,
shadowTiddlers[constituentTitle] = { tiddler: new $tw.Tiddler(constituentTiddler,{title: constituentTitle})
source: tiddler.fields.title, };
tiddler: new $tw.Tiddler(constituentTiddler,{title: constituentTitle}) });
};
}
});
}
}); });
shadowTiddlerTitles = null; shadowTiddlerTitles = null; // Force regeneration of the shadow tiddler titles list
this.clearCache(null); this.clearCache(null);
this.clearGlobalCache(); this.clearGlobalCache();
$tw.utils.each(indexers,function(indexer) { $tw.utils.each(indexers,function(indexer) {
@@ -1944,7 +1976,7 @@ $tw.boot.excludeRegExp = /^\.DS_Store$|^.*\.meta$|^\..*\.swp$|^\._.*$|^\.git$|^\
/* /*
Load all the tiddlers recursively from a directory, including honouring `tiddlywiki.files` files for drawing in external files. Returns an array of {filepath:,type:,tiddlers: [{..fields...}],hasMetaFile:}. Note that no file information is returned for externally loaded tiddlers, just the `tiddlers` property. Load all the tiddlers recursively from a directory, including honouring `tiddlywiki.files` files for drawing in external files. Returns an array of {filepath:,type:,tiddlers: [{..fields...}],hasMetaFile:}. Note that no file information is returned for externally loaded tiddlers, just the `tiddlers` property.
*/ */
$tw.loadTiddlersFromPath = function(filepath,excludeRegExp) { $tw.loadTiddlersFromPath = function(filepath,excludeRegExp,excludePluginInfo) {
excludeRegExp = excludeRegExp || $tw.boot.excludeRegExp; excludeRegExp = excludeRegExp || $tw.boot.excludeRegExp;
var tiddlers = []; var tiddlers = [];
if(fs.existsSync(filepath)) { if(fs.existsSync(filepath)) {
@@ -1954,11 +1986,17 @@ $tw.loadTiddlersFromPath = function(filepath,excludeRegExp) {
// Look for a tiddlywiki.files file // Look for a tiddlywiki.files file
if(files.indexOf("tiddlywiki.files") !== -1) { if(files.indexOf("tiddlywiki.files") !== -1) {
Array.prototype.push.apply(tiddlers,$tw.loadTiddlersFromSpecification(filepath,excludeRegExp)); Array.prototype.push.apply(tiddlers,$tw.loadTiddlersFromSpecification(filepath,excludeRegExp));
} else if(files.indexOf("plugin.info") !== -1 && !excludePluginInfo) {
// Load sub-plugin
var tiddler = $tw.loadPluginFolder(filepath);
if(tiddler) {
tiddlers.push({tiddlers: [tiddler]});
}
} else { } else {
// If not, read all the files in the directory // If not, read all the files in the directory
$tw.utils.each(files,function(file) { $tw.utils.each(files,function(file) {
if(!excludeRegExp.test(file) && file !== "plugin.info") { if(!excludeRegExp.test(file) && file !== "plugin.info") {
tiddlers.push.apply(tiddlers,$tw.loadTiddlersFromPath(filepath + path.sep + file,excludeRegExp)); tiddlers.push.apply(tiddlers,$tw.loadTiddlersFromPath(path.join(filepath,file),excludeRegExp));
} }
}); });
} }
@@ -2000,7 +2038,7 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
var value = tiddler[name]; var value = tiddler[name];
switch(fieldInfo.source) { switch(fieldInfo.source) {
case "subdirectories": case "subdirectories":
value = $tw.utils.stringifyList(path.relative(rootPath, filename).split(path.sep).slice(0, -1)); value = 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('/');
@@ -2021,10 +2059,10 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
value = path.extname(filename); value = path.extname(filename);
break; break;
case "created": case "created":
value = $tw.utils.stringifyDate(new Date(fs.statSync(pathname).birthtime)); value = new Date(fs.statSync(pathname).birthtime);
break; break;
case "modified": case "modified":
value = $tw.utils.stringifyDate(new Date(fs.statSync(pathname).mtime)); value = new Date(fs.statSync(pathname).mtime);
break; break;
} }
if(fieldInfo.prefix) { if(fieldInfo.prefix) {
@@ -2105,54 +2143,69 @@ Load the tiddlers from a plugin folder, and package them up into a proper JSON p
*/ */
$tw.loadPluginFolder = function(filepath,excludeRegExp) { $tw.loadPluginFolder = function(filepath,excludeRegExp) {
excludeRegExp = excludeRegExp || $tw.boot.excludeRegExp; excludeRegExp = excludeRegExp || $tw.boot.excludeRegExp;
var infoPath = filepath + path.sep + "plugin.info"; function readPluginFields(filepath) {
if(fs.existsSync(filepath) && fs.statSync(filepath).isDirectory()) { if(!(fs.existsSync(filepath) && fs.statSync(filepath).isDirectory())) {
// Read the plugin information
if(!fs.existsSync(infoPath) || !fs.statSync(infoPath).isFile()) {
console.log("Warning: missing plugin.info file in " + filepath);
return null; return null;
} }
var pluginInfo = $tw.utils.parseJSONSafe(fs.readFileSync(infoPath,"utf8"),function() {return null;}); var infoPath = path.join(filepath,"plugin.info");
if(!pluginInfo) { // Read the plugin information file
console.log("warning: invalid JSON in plugin.info file at " + infoPath); if(!fs.existsSync(infoPath) || !fs.statSync(infoPath).isFile()) {
pluginInfo = {}; return null;
} }
// Read the plugin files var pluginFields = $tw.utils.parseJSONSafe(fs.readFileSync(infoPath,"utf8"),{});
var pluginFiles = $tw.loadTiddlersFromPath(filepath,excludeRegExp); if(!(pluginFields.title && pluginFields.name)) {
// Save the plugin tiddlers into the plugin info return null;
pluginInfo.tiddlers = pluginInfo.tiddlers || Object.create(null); }
// Give the plugin the same version number as the core if it doesn't have one
if(!("version" in pluginFields)) {
pluginFields.version = $tw.packageInfo.version;
}
// Use "plugin" as the plugin-type if we don't have one
if(!("plugin-type" in pluginFields)) {
pluginFields["plugin-type"] = "plugin";
}
// Set the dependents and type
pluginFields.dependents = pluginFields.dependents || [];
pluginFields.type = "application/json";
// Deserialise array fields (currently required for the dependents field)
for(var field in pluginFields) {
if($tw.utils.isArray(pluginFields[field])) {
pluginFields[field] = $tw.utils.stringifyList(pluginFields[field]);
}
}
return pluginFields;
}
function readPluginTiddlers(tiddlersPath) {
var pluginFiles = $tw.loadTiddlersFromPath(tiddlersPath,excludeRegExp,true),
pluginTiddlers = {};
// Save the plugin tiddlers into the plugin payload
for(var f=0; f<pluginFiles.length; f++) { for(var f=0; f<pluginFiles.length; f++) {
var tiddlers = pluginFiles[f].tiddlers; var tiddlers = pluginFiles[f].tiddlers;
if(!tiddlers) {
console.log(`Gosh ${JSON.stringify(pluginFiles[f])}`)
}
for(var t=0; t<tiddlers.length; t++) { for(var t=0; t<tiddlers.length; t++) {
var tiddler= tiddlers[t]; var tiddler= tiddlers[t];
if(tiddler.title) { if(tiddler.title) {
pluginInfo.tiddlers[tiddler.title] = tiddler; pluginTiddlers[tiddler.title] = tiddler;
} }
} }
} }
// Give the plugin the same version number as the core if it doesn't have one return pluginTiddlers;
if(!("version" in pluginInfo)) {
pluginInfo.version = $tw.packageInfo.version;
}
// Use "plugin" as the plugin-type if we don't have one
if(!("plugin-type" in pluginInfo)) {
pluginInfo["plugin-type"] = "plugin";
}
pluginInfo.dependents = pluginInfo.dependents || [];
pluginInfo.type = "application/json";
// Set plugin text
pluginInfo.text = JSON.stringify({tiddlers: pluginInfo.tiddlers});
delete pluginInfo.tiddlers;
// Deserialise array fields (currently required for the dependents field)
for(var field in pluginInfo) {
if($tw.utils.isArray(pluginInfo[field])) {
pluginInfo[field] = $tw.utils.stringifyList(pluginInfo[field]);
}
}
return pluginInfo;
} else {
return null;
} }
// Get the primary plugin fields
var pluginFields = readPluginFields(filepath);
if(!pluginFields) {
console.log("Warning: missing or invalid plugin.info file in " + filepath);
return null;
}
// The payload to be stored in the plugin text field in JSON
var pluginPayload = {tiddlers: {}};
// Get the constituent tiddlers of the plugin
pluginPayload.tiddlers = readPluginTiddlers(filepath);
// Set plugin text
pluginFields.text = JSON.stringify(pluginPayload);
return pluginFields;
}; };
/* /*
+4 -1
View File
@@ -3,5 +3,8 @@ name: en-GB
description: English (British) description: English (British)
author: JeremyRuston author: JeremyRuston
core-version: >=5.0.0" core-version: >=5.0.0"
plugin-type: language
type: application/json
hidden: yes
Stub pseudo-plugin for the default language {tidddlers:{}}
+6 -10
View File
@@ -131,14 +131,15 @@ Saving/GitService/Gitea/Caption: Gitea Saver
Saving/GitService/Gitea/Password: Personal access token for API (via Giteas web interface: `Settings | Applications | Generate New Token`) Saving/GitService/Gitea/Password: Personal access token for API (via Giteas web interface: `Settings | Applications | Generate New Token`)
Saving/TiddlySpot/Advanced/Heading: Advanced Settings Saving/TiddlySpot/Advanced/Heading: Advanced Settings
Saving/TiddlySpot/BackupDir: Backup Directory Saving/TiddlySpot/BackupDir: Backup Directory
Saving/TiddlySpot/ControlPanel: ~TiddlyHost Control Panel Saving/TiddlySpot/ControlPanel: ~TiddlySpot Control Panel
Saving/TiddlySpot/Backups: Backups Saving/TiddlySpot/Backups: Backups
Saving/TiddlySpot/Caption: ~TiddlyHost Saver Saving/TiddlySpot/Caption: ~TiddlySpot Saver
Saving/TiddlySpot/Description: These settings are only used when saving to [[TiddlyHost|https://tiddlyhost.com]] or a compatible remote server. See [[here|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot]] for information on ~TiddlyHost saving configuration Saving/TiddlySpot/Description: These settings are only used when saving to [[TiddlySpot|http://tiddlyspot.com]], [[TiddlyHost|https://tiddlyhost.com]], or a compatible remote server. See [[here|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot]] for information on ~TiddlySpot and ~TiddlyHost saving configuration.
Saving/TiddlySpot/Filename: Upload Filename Saving/TiddlySpot/Filename: Upload Filename
Saving/TiddlySpot/Heading: ~TiddlyHost Saving/TiddlySpot/Heading: ~TiddlySpot
Saving/TiddlySpot/Hint: //The server URL defaults to `http://<wikiname>.tiddlyspot.com/` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.// Saving/TiddlySpot/Hint: //The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//
Saving/TiddlySpot/Password: Password Saving/TiddlySpot/Password: Password
Saving/TiddlySpot/ReadOnly: Note that [[TiddlySpot|http://tiddlyspot.com]] no longer allows the creation of new sites. For new sites, you can use [[TiddlyHost|https://tiddlyhost.com]], a new hosting service that replaces ~TiddlySpot.
Saving/TiddlySpot/ServerURL: Server URL Saving/TiddlySpot/ServerURL: Server URL
Saving/TiddlySpot/UploadDir: Upload Directory Saving/TiddlySpot/UploadDir: Upload Directory
Saving/TiddlySpot/UserName: Wiki Name Saving/TiddlySpot/UserName: Wiki Name
@@ -189,8 +190,6 @@ Settings/DefaultSidebarTab/Caption: Default Sidebar Tab
Settings/DefaultSidebarTab/Hint: Specify which sidebar tab is displayed by default Settings/DefaultSidebarTab/Hint: Specify which sidebar tab is displayed by default
Settings/DefaultMoreSidebarTab/Caption: Default More Sidebar Tab Settings/DefaultMoreSidebarTab/Caption: Default More Sidebar Tab
Settings/DefaultMoreSidebarTab/Hint: Specify which More sidebar tab is displayed by default Settings/DefaultMoreSidebarTab/Hint: Specify which More sidebar tab is displayed by default
Settings/DefaultTiddlerInfoTab/Caption: Default Tiddler Info Tab
Settings/DefaultTiddlerInfoTab/Hint: Specify which tab is displayed by default when tiddler info panel is opened
Settings/LinkToBehaviour/Caption: Tiddler Opening Behaviour Settings/LinkToBehaviour/Caption: Tiddler Opening Behaviour
Settings/LinkToBehaviour/InsideRiver/Hint: Navigation from //within// the story river Settings/LinkToBehaviour/InsideRiver/Hint: Navigation from //within// the story river
Settings/LinkToBehaviour/OutsideRiver/Hint: Navigation from //outside// the story river Settings/LinkToBehaviour/OutsideRiver/Hint: Navigation from //outside// the story river
@@ -252,6 +251,3 @@ ViewTemplateSubtitle/Caption: View Template Subtitle
ViewTemplateSubtitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the subtitle of a tiddler. ViewTemplateSubtitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the subtitle of a tiddler.
ViewTemplateTags/Caption: View Template Tags ViewTemplateTags/Caption: View Template Tags
ViewTemplateTags/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the tags area of a tiddler. ViewTemplateTags/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the tags area of a tiddler.
WikiInformation/Caption: Wiki Information
WikiInformation/Hint: This page summarises high level information about the configuration of this ~TiddlyWiki. It is designed to enable users to quickly share relevant aspects of the configuration of their ~TiddlyWiki with others, for example when seeking help in one of the forums. No private or personal information is included, and nothing is shared without being explicitly copied and pasted elsewhere
WikiInformation/Drag/Caption: Drag this link to copy this tool to another wiki
+3 -3
View File
@@ -4,12 +4,12 @@ _canonical_uri: The full URI of an external image tiddler
author: Name of the author of a plugin author: Name of the author of a plugin
bag: The name of the bag from which a tiddler came bag: The name of the bag from which a tiddler came
caption: The text to be displayed on a tab or button caption: The text to be displayed on a tab or button
class: The CSS class applied to a tiddler when rendering it. Also used for Modals class: The CSS class applied to a tiddler when rendering it - see [[Custom styles by user-class]]. Also used for [[Modals]]
code-body: The view template will display the tiddler as code if set to ''yes'' code-body: The view template will display the tiddler as code if set to ''yes''
color: The CSS color value associated with a tiddler color: The CSS color value associated with a tiddler
component: The name of the component responsible for an alert tiddler component: The name of the component responsible for an [[alert tiddler|AlertMechanism]]
core-version: For a plugin, indicates what version of TiddlyWiki with which it is compatible core-version: For a plugin, indicates what version of TiddlyWiki with which it is compatible
current-tiddler: Used to cache the top tiddler in a history list current-tiddler: Used to cache the top tiddler in a [[history list|HistoryMechanism]]
created: The date a tiddler was created created: The date a tiddler was created
creator: The name of the person who created a tiddler creator: The name of the person who created a tiddler
dependents: For a plugin, lists the dependent plugin titles dependents: For a plugin, lists the dependent plugin titles
+2 -2
View File
@@ -248,7 +248,8 @@ exports.compileFilter = function(filterString) {
// Create a function for the chain of operators in the operation // Create a function for the chain of operators in the operation
var operationSubFunction = function(source,widget) { var operationSubFunction = function(source,widget) {
var accumulator = source, var accumulator = source,
results = []; results = [],
currTiddlerTitle = widget && widget.getVariable("currentTiddler");
$tw.utils.each(operation.operators,function(operator) { $tw.utils.each(operation.operators,function(operator) {
var operands = [], var operands = [],
operatorFunction; operatorFunction;
@@ -264,7 +265,6 @@ exports.compileFilter = function(filterString) {
} }
$tw.utils.each(operator.operands,function(operand) { $tw.utils.each(operator.operands,function(operand) {
if(operand.indirect) { if(operand.indirect) {
var currTiddlerTitle = widget && widget.getVariable("currentTiddler");
operand.value = self.getTextReference(operand.text,"",currTiddlerTitle); operand.value = self.getTextReference(operand.text,"",currTiddlerTitle);
} else if(operand.variable) { } else if(operand.variable) {
var varTree = $tw.utils.parseFilterVariable(operand.text); var varTree = $tw.utils.parseFilterVariable(operand.text);
+3
View File
@@ -6,6 +6,7 @@ module-type: filteroperator
Filter operator for returning all the backtranscludes from a tiddler Filter operator for returning all the backtranscludes from a tiddler
\*/ \*/
(function(){
"use strict"; "use strict";
/* /*
@@ -18,3 +19,5 @@ exports.backtranscludes = function(source,operator,options) {
}); });
return results.makeTiddlerIterator(options.wiki); return results.makeTiddlerIterator(options.wiki);
}; };
})();
+36
View File
@@ -0,0 +1,36 @@
/*\
title: $:/core/modules/filters/is/plugin.js
type: application/javascript
module-type: isfilteroperator
Filter function for [is[plugin]]
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.plugin = function(source,prefix,options) {
var results = [];
if(prefix === "!") {
source(function(tiddler,title) {
if(!tiddler.isPlugin()) {
results.push(title);
}
});
} else {
source(function(tiddler,title) {
if(tiddler.isPlugin()) {
results.push(title);
}
});
}
return results;
};
})();
+3
View File
@@ -6,6 +6,7 @@ module-type: filteroperator
Filter operator for returning all the transcludes from a tiddler Filter operator for returning all the transcludes from a tiddler
\*/ \*/
(function(){
"use strict"; "use strict";
/* /*
@@ -18,3 +19,5 @@ exports.transcludes = function(source,operator,options) {
}); });
return results.makeTiddlerIterator(options.wiki); return results.makeTiddlerIterator(options.wiki);
}; };
})();
@@ -10,6 +10,7 @@ This is a <%if [{something}] %>Elephant<%elseif [{else}] %>Pelican<%else%>Crocod
``` ```
\*/ \*/
(function(){
"use strict"; "use strict";
exports.name = "conditional"; exports.name = "conditional";
@@ -112,3 +113,5 @@ exports.parseIfClause = function(filterCondition) {
// Return the parse tree node // Return the parse tree node
return [listWidget]; return [listWidget];
}; };
})();
@@ -50,7 +50,7 @@ exports.parse = function() {
var reEnd; var reEnd;
if(this.match[5]) { if(this.match[5]) {
// If so, it is a multiline definition and the end of the body is marked with \end // If so, it is a multiline definition and the end of the body is marked with \end
reEnd = new RegExp("((:?^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[2]) + ")?\\s*?(?:$|\\r?\\n))","mg"); reEnd = new RegExp("((:?^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[2]) + ")?(?:$|\\r?\\n))","mg");
} else { } else {
// Otherwise, the end of the definition is marked by the end of the line // Otherwise, the end of the definition is marked by the end of the line
reEnd = /($|\r?\n)/mg; reEnd = /($|\r?\n)/mg;
@@ -55,7 +55,7 @@ exports.parse = function() {
var reEnd; var reEnd;
if(this.match[3]) { if(this.match[3]) {
// If so, it is a multiline definition and the end of the body is marked with \end // If so, it is a multiline definition and the end of the body is marked with \end
reEnd = new RegExp("((?:^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[1]) + ")?\\s*?(?:$|\\r?\\n))","mg"); reEnd = new RegExp("((?:^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[1]) + ")?(?:$|\\r?\\n))","mg");
} else { } else {
// Otherwise, the end of the definition is marked by the end of the line // Otherwise, the end of the definition is marked by the end of the line
reEnd = /($|\r?\n)/mg; reEnd = /($|\r?\n)/mg;
+39 -9
View File
@@ -35,6 +35,7 @@ function PluginSwitcher(options) {
} }
PluginSwitcher.prototype.switchPlugins = function() { PluginSwitcher.prototype.switchPlugins = function() {
var self = this;
// Get the name of the current theme // Get the name of the current theme
var selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle); var selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);
// If it doesn't exist, then fallback to one of the default themes // If it doesn't exist, then fallback to one of the default themes
@@ -49,22 +50,51 @@ 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);
}); });
} }
}; };
accumulatePlugin(selectedPluginTitle); accumulatePlugin(selectedPluginTitle);
var selectedPluginTiddler = this.wiki.getTiddler(selectedPluginTitle);
// Accumulate any other plugins of the same type with the same name
this.wiki.eachTiddlerPlusShadows(function(tiddler,title) {
if(tiddler.isPlugin() && tiddler.fields["plugin-type"] === self.pluginType && tiddler.fields.name === selectedPluginTiddler.fields.name) {
accumulatePlugin(title);
}
});
// Read the plugin info for the incoming plugins // Read the plugin info for the incoming plugins
var changes = $tw.wiki.readPluginInfo(plugins); var changedPluginInfo = this.wiki.readPluginInfo(plugins);
// Unregister any existing theme tiddlers // Collect the shadow tiddlers of any deleted plugins
var unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType); var changedShadowTiddlers = {};
// Register any new theme tiddlers $tw.utils.each(changedPluginInfo.deletedPlugins,function(pluginTitle) {
var registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins); var contents = changedPluginInfo.deletedPluginContents[pluginTitle];
// Unpack the current theme tiddlers if(contents && contents.tiddlers) {
$tw.wiki.unpackPluginTiddlers(); $tw.utils.each(Object.keys(contents.tiddlers),function(title) {
changedShadowTiddlers[title] = true;
});
}
});
// Collect the shadow tiddlers of any modified plugins
$tw.utils.each(changedPluginInfo.modifiedPlugins,function(pluginTitle) {
var pluginInfo = self.wiki.getPluginInfo(pluginTitle);
if(pluginInfo && pluginInfo.tiddlers) {
$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {
changedShadowTiddlers[title] = false;
});
}
});
// Unregister any existing theme/language tiddlers
var unregisteredTiddlers = this.wiki.unregisterPluginTiddlers(this.pluginType);
// Register any new theme/language tiddlers
var registeredTiddlers = this.wiki.registerPluginTiddlers(this.pluginType,plugins);
// Unpack the current theme/language tiddlers
this.wiki.unpackPluginTiddlers();
// Queue change events for the changed shadow tiddlers
$tw.utils.each(changedShadowTiddlers,function(status,title) {
self.wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title], true);
});
// Call the switch handler // Call the switch handler
if(this.onSwitch) { if(this.onSwitch) {
this.onSwitch(plugins); this.onSwitch(plugins);
+1 -1
View File
@@ -44,7 +44,7 @@ UploadSaver.prototype.save = function(text,method,callback) {
} }
// Construct the url if not provided // Construct the url if not provided
if(!url) { if(!url) {
url = "http://" + username + ".tiddlyhost.com/"; url = "http://" + username + ".tiddlyspot.com/store.cgi";
} }
// Assemble the header // Assemble the header
var boundary = "---------------------------" + "AaB03x"; var boundary = "---------------------------" + "AaB03x";
+1 -61
View File
@@ -15,67 +15,7 @@ exports.after = ["load-modules"];
exports.before = ["startup"]; exports.before = ["startup"];
exports.synchronous = true; exports.synchronous = true;
var TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE = "$:/status/RequireReloadDueToPluginChange";
var PREFIX_CONFIG_REGISTER_PLUGIN_TYPE = "$:/config/RegisterPluginType/";
exports.startup = function() { exports.startup = function() {
$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: "no"}); $tw.utils.installPluginChangeHandler($tw.wiki);
$tw.wiki.addEventListener("change",function(changes) {
// Work out which of the changed tiddlers are plugins that we need to reregister
var changesToProcess = [],
requireReloadDueToPluginChange = false;
$tw.utils.each(Object.keys(changes),function(title) {
var tiddler = $tw.wiki.getTiddler(title),
requiresReload = $tw.wiki.doesPluginRequireReload(title);
if(requiresReload) {
requireReloadDueToPluginChange = true;
} else if(tiddler) {
var pluginType = tiddler.fields["plugin-type"];
if($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields["plugin-type"] || ""),"no") === "yes") {
changesToProcess.push(title);
}
}
});
// Issue warning if any of the tiddlers require a reload
if(requireReloadDueToPluginChange) {
$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: "yes"});
}
// Read or delete the plugin info of the changed tiddlers
if(changesToProcess.length > 0) {
var changes = $tw.wiki.readPluginInfo(changesToProcess);
if(changes.modifiedPlugins.length > 0 || changes.deletedPlugins.length > 0) {
var changedShadowTiddlers = {};
// Collect the shadow tiddlers of any deleted plugins
$tw.utils.each(changes.deletedPlugins,function(pluginTitle) {
var pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);
if(pluginInfo) {
$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {
changedShadowTiddlers[title] = true;
});
}
});
// Collect the shadow tiddlers of any modified plugins
$tw.utils.each(changes.modifiedPlugins,function(pluginTitle) {
var pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);
if(pluginInfo && pluginInfo.tiddlers) {
$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {
changedShadowTiddlers[title] = false;
});
}
});
// (Re-)register any modified plugins
$tw.wiki.registerPluginTiddlers(null,changes.modifiedPlugins);
// Unregister any deleted plugins
$tw.wiki.unregisterPluginTiddlers(null,changes.deletedPlugins);
// Unpack the shadow tiddlers
$tw.wiki.unpackPluginTiddlers();
// Queue change events for the changed shadow tiddlers
$tw.utils.each(Object.keys(changedShadowTiddlers),function(title) {
$tw.wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title], true);
});
}
}
});
}; };
+3 -2
View File
@@ -74,8 +74,9 @@ exports.startup = function() {
$tw.rootWidget.addEventListener("tm-copy-to-clipboard",function(event) { $tw.rootWidget.addEventListener("tm-copy-to-clipboard",function(event) {
$tw.utils.copyToClipboard(event.param,{ $tw.utils.copyToClipboard(event.param,{
successNotification: event.paramObject && event.paramObject.successNotification, successNotification: event.paramObject && event.paramObject.successNotification,
failureNotification: event.paramObject && event.paramObject.failureNotification failureNotification: event.paramObject && event.paramObject.failureNotification,
}); plainText: event.paramObject && event.paramObject.plainText
},event.paramObject && event.paramObject.type);
}); });
// Install the tm-focus-selector message // Install the tm-focus-selector message
$tw.rootWidget.addEventListener("tm-focus-selector",function(event) { $tw.rootWidget.addEventListener("tm-focus-selector",function(event) {
-4
View File
@@ -13,10 +13,6 @@ exports.hasTag = function(tag) {
return this.fields.tags && this.fields.tags.indexOf(tag) !== -1; return this.fields.tags && this.fields.tags.indexOf(tag) !== -1;
}; };
exports.isPlugin = function() {
return this.fields.type === "application/json" && this.hasField("plugin-type");
};
exports.isDraft = function() { exports.isDraft = function() {
return this.hasField("draft.of"); return this.hasField("draft.of");
}; };
+11 -4
View File
@@ -265,9 +265,10 @@ exports.copyStyles = function(srcDomNode,dstDomNode) {
/* /*
Copy plain text to the clipboard on browsers that support it Copy plain text to the clipboard on browsers that support it
*/ */
exports.copyToClipboard = function(text,options) { exports.copyToClipboard = function(text,options,type) {
options = options || {}; var text = text || "";
text = text || ""; var options = options || {};
var type = type || "text/plain";
var textArea = document.createElement("textarea"); var textArea = document.createElement("textarea");
textArea.style.position = "fixed"; textArea.style.position = "fixed";
textArea.style.top = 0; textArea.style.top = 0;
@@ -280,10 +281,16 @@ exports.copyToClipboard = function(text,options) {
textArea.style.outline = "none"; textArea.style.outline = "none";
textArea.style.boxShadow = "none"; textArea.style.boxShadow = "none";
textArea.style.background = "transparent"; textArea.style.background = "transparent";
textArea.value = text;
document.body.appendChild(textArea); document.body.appendChild(textArea);
textArea.select(); textArea.select();
textArea.setSelectionRange(0,text.length); textArea.setSelectionRange(0,text.length);
textArea.addEventListener("copy",function(event) {
event.preventDefault();
if (options.plainText) {
event.clipboardData.setData("text/plain",options.plainText);
}
event.clipboardData.setData(type,text);
});
var succeeded = false; var succeeded = false;
try { try {
succeeded = document.execCommand("copy"); succeeded = document.execCommand("copy");
-1
View File
@@ -143,7 +143,6 @@ Modal.prototype.display = function(title,options) {
link.setAttribute("href",tiddler.fields.help); link.setAttribute("href",tiddler.fields.help);
link.setAttribute("target","_blank"); link.setAttribute("target","_blank");
link.setAttribute("rel","noopener noreferrer"); link.setAttribute("rel","noopener noreferrer");
link.setAttribute("class","tc-tiddlylink-external");
link.appendChild(this.srcDocument.createTextNode("Help")); link.appendChild(this.srcDocument.createTextNode("Help"));
modalFooterHelp.appendChild(link); modalFooterHelp.appendChild(link);
modalFooterHelp.style.float = "left"; modalFooterHelp.style.float = "left";
+4
View File
@@ -6,6 +6,8 @@ module-type: utils
Custom errors for TiddlyWiki. Custom errors for TiddlyWiki.
\*/ \*/
(function(){
function TranscludeRecursionError() { function TranscludeRecursionError() {
Error.apply(this,arguments); Error.apply(this,arguments);
this.signatures = Object.create(null); this.signatures = Object.create(null);
@@ -17,3 +19,5 @@ TranscludeRecursionError.MAX_WIDGET_TREE_DEPTH = 1000;
TranscludeRecursionError.prototype = Object.create(Error); TranscludeRecursionError.prototype = Object.create(Error);
exports.TranscludeRecursionError = TranscludeRecursionError; exports.TranscludeRecursionError = TranscludeRecursionError;
})();
+95
View File
@@ -0,0 +1,95 @@
/*\
title: $:/core/modules/utils/plugins.js
type: application/javascript
module-type: utils
Plugin utilities
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
var TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE = "$:/status/RequireReloadDueToPluginChange";
var PREFIX_CONFIG_REGISTER_PLUGIN_TYPE = "$:/config/RegisterPluginType/";
exports.installPluginChangeHandler = function(wiki) {
wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: "no"});
wiki.addEventListener("change",function(changes) {
// Work out which of the changed tiddlers are plugins that we need to (re)register
var changesToProcess = [];
$tw.utils.each(Object.keys(changes),function(title) {
var tiddler = wiki.getTiddler(title);
if(tiddler) {
// It is a plugin that has been added or modified and is of a type that we need to register
if(tiddler.isPlugin() && wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields["plugin-type"] || ""),"no") === "yes") {
changesToProcess.push(title);
}
} else {
if(wiki.isSubPlugin(title)) {
// It is a sub-plugin
changesToProcess.push(title);
} else {
// It is a plugin that has been deleted
var pluginInfo = wiki.getPluginInfo(title)
if(pluginInfo) {
changesToProcess.push(title);
}
}
}
});
if(changesToProcess.length > 0) {
// Read the plugin info of the changed tiddlers
var changedPluginInfo = wiki.readPluginInfo(changesToProcess);
if(changedPluginInfo.modifiedPlugins.length > 0 || changedPluginInfo.deletedPlugins.length > 0) {
var changedShadowTiddlers = {},
requireReloadDueToPluginChange = false;
// Collect the shadow tiddlers of any deleted plugins
$tw.utils.each(changedPluginInfo.deletedPlugins,function(pluginTitle) {
var contents = changedPluginInfo.deletedPluginContents[pluginTitle];
if(contents && contents.tiddlers) {
$tw.utils.each(Object.keys(contents.tiddlers),function(title) {
changedShadowTiddlers[title] = true;
if(contents.tiddlers[title].type === "application/javascript") {
requireReloadDueToPluginChange = true;
}
});
}
});
// Collect the shadow tiddlers of any modified plugins
$tw.utils.each(changedPluginInfo.modifiedPlugins,function(pluginTitle) {
var pluginInfo = wiki.getPluginInfo(pluginTitle);
if(pluginInfo && pluginInfo.tiddlers) {
$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {
changedShadowTiddlers[title] = false;
if(pluginInfo.tiddlers[title].type === "application/javascript") {
requireReloadDueToPluginChange = true;
}
});
}
});
// (Re-)register any modified plugins
wiki.registerPluginTiddlers(null,changedPluginInfo.modifiedPlugins);
// Unregister any deleted plugins
wiki.unregisterPluginTiddlers(null,changedPluginInfo.deletedPlugins);
// Unpack the shadow tiddlers
wiki.unpackPluginTiddlers();
// Queue change events for the changed shadow tiddlers
$tw.utils.each(changedShadowTiddlers,function(status,title) {
wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title], true);
});
// Issue warning if any of the tiddlers require a reload
if(requireReloadDueToPluginChange) {
wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: "yes"});
}
}
}
});
};
})();
+3
View File
@@ -6,6 +6,7 @@ module-type: utils
Utilities for working with the TiddlyWiki repository file structure Utilities for working with the TiddlyWiki repository file structure
\*/ \*/
(function(){
"use strict"; "use strict";
/* /*
@@ -44,3 +45,5 @@ exports.getAllPlugins = function(options) {
$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,options.ignoreEnvironmentVariables ? undefined : $tw.config.languagesEnvVar),collectPlugins); $tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,options.ignoreEnvironmentVariables ? undefined : $tw.config.languagesEnvVar),collectPlugins);
return tiddlers; return tiddlers;
}; };
})();
+3
View File
@@ -6,6 +6,7 @@ module-type: widget
Widget to dynamically represent one or more tiddlers Widget to dynamically represent one or more tiddlers
\*/ \*/
(function(){
"use strict"; "use strict";
var Widget = require("$:/core/modules/widgets/widget.js").widget; var Widget = require("$:/core/modules/widgets/widget.js").widget;
@@ -186,3 +187,5 @@ function hasPayloadChanged(a,b) {
} }
exports.data = DataWidget; exports.data = DataWidget;
})();
+33
View File
@@ -519,3 +519,36 @@ ListJoinWidget.prototype.render = function() {}
ListJoinWidget.prototype.refresh = function() { return false; } ListJoinWidget.prototype.refresh = function() { return false; }
exports["list-join"] = ListJoinWidget; exports["list-join"] = ListJoinWidget;
/*
Make <$list-template> and <$list-empty> widgets that do nothing
*/
var ListTemplateWidget = function(parseTreeNode,options) {
// Main initialisation inherited from widget.js
this.initialise(parseTreeNode,options);
};
ListTemplateWidget.prototype = new Widget();
ListTemplateWidget.prototype.render = function() {}
ListTemplateWidget.prototype.refresh = function() { return false; }
exports["list-template"] = ListTemplateWidget;
var ListEmptyWidget = function(parseTreeNode,options) {
// Main initialisation inherited from widget.js
this.initialise(parseTreeNode,options);
};
ListEmptyWidget.prototype = new Widget();
ListEmptyWidget.prototype.render = function() {}
ListEmptyWidget.prototype.refresh = function() { return false; }
exports["list-empty"] = ListEmptyWidget;
var ListJoinWidget = function(parseTreeNode,options) {
// Main initialisation inherited from widget.js
this.initialise(parseTreeNode,options);
};
ListJoinWidget.prototype = new Widget();
ListJoinWidget.prototype.render = function() {}
ListJoinWidget.prototype.refresh = function() { return false; }
exports["list-join"] = ListJoinWidget;
+26 -1
View File
@@ -6,6 +6,7 @@ module-type: widget
Widget to display a test case Widget to display a test case
\*/ \*/
(function(){
"use strict"; "use strict";
var Widget = require("$:/core/modules/widgets/widget.js").widget; var Widget = require("$:/core/modules/widgets/widget.js").widget;
@@ -65,11 +66,24 @@ TestCaseWidget.prototype.render = function(parent,nextSibling) {
}); });
var jsonPayload = JSON.stringify(tiddlers); var jsonPayload = JSON.stringify(tiddlers);
this.testcaseWiki.addTiddlers(tiddlers); this.testcaseWiki.addTiddlers(tiddlers);
// Suppress next tick dispatch for wiki change events
this.testcaseWiki.setDispatchMode(true);
// Unpack plugin tiddlers // Unpack plugin tiddlers
this.testcaseWiki.readPluginInfo(); this.testcaseWiki.readPluginInfo();
this.testcaseWiki.registerPluginTiddlers("plugin"); this.testcaseWiki.registerPluginTiddlers("plugin");
this.testcaseWiki.unpackPluginTiddlers(); this.testcaseWiki.unpackPluginTiddlers();
this.testcaseWiki.addIndexersToWiki(); this.testcaseWiki.addIndexersToWiki();
// Install the plugin change event handler
$tw.utils.installPluginChangeHandler(this.testcaseWiki);
// Install the language switcher
var languageSwitcher = new $tw.PluginSwitcher({
wiki: this.testcaseWiki,
pluginType: "language",
controllerTitle: "$:/language",
defaultPlugins: [
"$:/languages/en-GB"
]
});
// Generate a `transclusion` variable that depends on the values of the payload tiddlers so that the template can easily make unique state tiddlers // Generate a `transclusion` variable that depends on the values of the payload tiddlers so that the template can easily make unique state tiddlers
this.setVariable("transclusion",$tw.utils.hashString(jsonPayload)); this.setVariable("transclusion",$tw.utils.hashString(jsonPayload));
// Generate a `payloadTiddlers` variable that contains the payload in JSON format // Generate a `payloadTiddlers` variable that contains the payload in JSON format
@@ -91,13 +105,20 @@ TestCaseWidget.prototype.render = function(parent,nextSibling) {
} }
}); });
testcaseOutputWidget.render(testcaseOutputContainer); testcaseOutputWidget.render(testcaseOutputContainer);
// Install the wiki change event handler
this.testcaseWiki.addEventListener("change",function(changes) {
testcaseOutputWidget.refresh(changes,testcaseOutputContainer);
});
} }
// Clear changes queue // Clear changes queue
this.testcaseWiki.clearTiddlerEventQueue(); this.testcaseWiki.clearTiddlerEventQueue();
// Run the actions if provided // Run the actions if provided
if(this.testcaseWiki.tiddlerExists(this.testcaseTestActions)) { if(this.testcaseWiki.tiddlerExists(this.testcaseTestActions)) {
testcaseOutputWidget.invokeActionString(this.testcaseWiki.getTiddlerText(this.testcaseTestActions)); testcaseOutputWidget.invokeActionString(this.testcaseWiki.getTiddlerText(this.testcaseTestActions));
testcaseOutputWidget.refresh(this.testcaseWiki.changedTiddlers,testcaseOutputContainer); // Make sure all wiki events have been cleared
while(this.testcaseWiki.eventsTriggered) {
this.testcaseWiki.processOutstandingTiddlerEvents();
}
} }
// Set up the test result variables // Set up the test result variables
var testResult = "", var testResult = "",
@@ -127,6 +148,8 @@ TestCaseWidget.prototype.render = function(parent,nextSibling) {
parentWidget: this parentWidget: this
}); });
rootWidget.render(domNode); rootWidget.render(domNode);
// Re-enable next tick dispatch for wiki change events
this.testcaseWiki.setDispatchMode(false);
// Trap changes in the wiki and refresh the rendering // Trap changes in the wiki and refresh the rendering
this.testcaseWiki.addEventListener("change",function(changes) { this.testcaseWiki.addEventListener("change",function(changes) {
rootWidget.refresh(changes,domNode); rootWidget.refresh(changes,domNode);
@@ -159,3 +182,5 @@ TestCaseWidget.prototype.refresh = function(changedTiddlers) {
}; };
exports["testcase"] = TestCaseWidget; exports["testcase"] = TestCaseWidget;
})();
+22 -13
View File
@@ -132,6 +132,14 @@ exports.dispatchEvent = function(type /*, args */) {
} }
}; };
/*
false (default) to dispatch event tick as usual
true to suppress dispatching the event tick and allow outstanding events to be processed manually
*/
exports.setDispatchMode = function(mode) {
this.dispatchMode = mode;
}
/* /*
Causes a tiddler to be marked as changed, incrementing the change count, and triggers event handlers. Causes a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.
This method should be called after the changes it describes have been made to the wiki.tiddlers[] array. This method should be called after the changes it describes have been made to the wiki.tiddlers[] array.
@@ -156,17 +164,18 @@ exports.enqueueTiddlerEvent = function(title,isDeleted,isShadow) {
} }
// Trigger events // Trigger events
this.eventListeners = this.eventListeners || {}; this.eventListeners = this.eventListeners || {};
if(!this.eventsTriggered) { if(!this.eventsTriggered && !this.dispatchMode) {
var self = this; $tw.utils.nextTick(this.processOutstandingTiddlerEvents.bind(this));
$tw.utils.nextTick(function() { }
var changes = self.changedTiddlers; this.eventsTriggered = true;
self.changedTiddlers = Object.create(null); };
self.eventsTriggered = false;
if($tw.utils.count(changes) > 0) { exports.processOutstandingTiddlerEvents = function() {
self.dispatchEvent("change",changes); var changes = this.changedTiddlers;
} this.changedTiddlers = Object.create(null);
}); this.eventsTriggered = false;
this.eventsTriggered = true; if($tw.utils.count(changes) > 0) {
this.dispatchEvent("change",changes);
} }
}; };
@@ -1173,7 +1182,7 @@ exports.getSubstitutedText = function(text,widget,options) {
output = $tw.utils.replaceString(output,new RegExp("\\$" + $tw.utils.escapeRegExp(substitute.name) + "\\$","mg"),substitute.value); output = $tw.utils.replaceString(output,new RegExp("\\$" + $tw.utils.escapeRegExp(substitute.name) + "\\$","mg"),substitute.value);
}); });
// Substitute any variable references with their values // Substitute any variable references with their values
return output.replace(/\$\((.+?)\)\$/g, function(match,varname) { return output.replace(/\$\(([^\)\$]+)\)\$/g, function(match,varname) {
return widget.getVariable(varname,{defaultValue: ""}) return widget.getVariable(varname,{defaultValue: ""})
}); });
}; };
@@ -1740,7 +1749,7 @@ exports.invokeUpgraders = function(titles,tiddlers) {
// Determine whether a plugin by title is dynamically loadable // Determine whether a plugin by title is dynamically loadable
exports.doesPluginRequireReload = function(title) { exports.doesPluginRequireReload = function(title) {
var tiddler = this.getTiddler(title); var tiddler = this.getTiddler(title);
if(tiddler && tiddler.fields.type === "application/json" && tiddler.fields["plugin-type"]) { if(tiddler && tiddler.isPlugin()) {
if(tiddler.fields["plugin-type"] === "import") { if(tiddler.fields["plugin-type"] === "import") {
// The import plugin never requires reloading // The import plugin never requires reloading
return false; return false;
+13 -18
View File
@@ -18,7 +18,7 @@ code-background: #f7f7f9
code-border: #e1e1e8 code-border: #e1e1e8
code-foreground: #dd1144 code-foreground: #dd1144
dirty-indicator: #ff0000 dirty-indicator: #ff0000
download-background: #3aafaf download-background: #66cccc
download-foreground: <<colour background>> download-foreground: <<colour background>>
dragger-background: <<colour foreground>> dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>> dragger-foreground: <<colour background>>
@@ -26,7 +26,7 @@ dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>> dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: #fff dropdown-tab-background-selected: #fff
dropdown-tab-background: #ececec dropdown-tab-background: #ececec
dropzone-background: #00d900 dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit external-link-background-hover: inherit
external-link-background-visited: inherit external-link-background-visited: inherit
external-link-background: inherit external-link-background: inherit
@@ -52,30 +52,26 @@ notification-border: #999999
page-background: #ffffff page-background: #ffffff
pre-background: #f5f5f5 pre-background: #f5f5f5
pre-border: #cccccc pre-border: #cccccc
primary: #6387f1 primary: #7897f3
select-tag-background: select-tag-background:
select-tag-foreground: select-tag-foreground:
sidebar-button-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000 sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #aaaaaa sidebar-controls-foreground: #ccc
sidebar-foreground-shadow: #ffffff sidebar-foreground-shadow: rgba(255,255,255, 0.8)
sidebar-foreground: #acacac sidebar-foreground: #acacac
sidebar-muted-foreground-hover: #444444 sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: #aaaaaa sidebar-muted-foreground: #c0c0c0
sidebar-tab-background-selected: #ffffff sidebar-tab-background-selected: #ffffff
sidebar-tab-background: <<colour tab-background>> sidebar-tab-background: <<colour tab-background>>
sidebar-tab-border-selected: <<colour tab-border-selected>> sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: <<colour tab-border>> sidebar-tab-border: <<colour tab-border>>
sidebar-tab-divider: <<colour tab-divider>> sidebar-tab-divider: <<colour tab-divider>>
sidebar-tab-foreground-selected: <<colour tab-foreground>> sidebar-tab-foreground-selected:
sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #444444 sidebar-tiddler-link-foreground-hover: #444444
sidebar-tiddler-link-foreground: <<colour primary>> sidebar-tiddler-link-foreground: #7897f3
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-stable: #008000
stability-experimental: #c07c00
stability-deprecated: #ff0000
stability-legacy: #0000ff
static-alert-foreground: #aaaaaa static-alert-foreground: #aaaaaa
tab-background-selected: #ffffff tab-background-selected: #ffffff
tab-background: #eeeeee tab-background: #eeeeee
@@ -87,10 +83,10 @@ tab-foreground: #666666
table-border: #dddddd table-border: #dddddd
table-footer-background: #a8a8a8 table-footer-background: #a8a8a8
table-header-background: #f0f0f0 table-header-background: #f0f0f0
tag-background: #ffd5aa tag-background: #ffeedd
tag-foreground: #000000 tag-foreground: #000
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: #eeeeee tiddler-border: #eee
tiddler-controls-foreground-hover: #888888 tiddler-controls-foreground-hover: #888888
tiddler-controls-foreground-selected: #444444 tiddler-controls-foreground-selected: #444444
tiddler-controls-foreground: #cccccc tiddler-controls-foreground: #cccccc
@@ -101,7 +97,7 @@ tiddler-editor-fields-even: #e0e8e0
tiddler-editor-fields-odd: #f0f4f0 tiddler-editor-fields-odd: #f0f4f0
tiddler-info-background: #f8f8f8 tiddler-info-background: #f8f8f8
tiddler-info-border: #dddddd tiddler-info-border: #dddddd
tiddler-info-tab-background: <<colour tiddler-info-background>> tiddler-info-tab-background: #f8f8f8
tiddler-link-background: <<colour background>> tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>> tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: #c0c0c0 tiddler-subtitle-foreground: #c0c0c0
@@ -115,6 +111,5 @@ toolbar-close-button:
toolbar-delete-button: toolbar-delete-button:
toolbar-cancel-button: toolbar-cancel-button:
toolbar-done-button: toolbar-done-button:
untagged-background: #cccccc untagged-background: #999999
very-muted-foreground: #888888 very-muted-foreground: #888888
network-activity-foreground: <<colour primary>>
-1
View File
@@ -85,7 +85,6 @@ table-footer-background: #a8a8a8
table-header-background: #f0f0f0 table-header-background: #f0f0f0
tag-background: #d5ad34 tag-background: #d5ad34
tag-foreground: #ffffff tag-foreground: #ffffff
testcase-accent-level-1: #b1b3e3
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour background>> tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: #888888 tiddler-controls-foreground-hover: #888888
+27 -33
View File
@@ -5,11 +5,11 @@ description: High contrast and unambiguous (dark version)
tags: $:/tags/Palette tags: $:/tags/Palette
type: application/x-tiddler-dictionary type: application/x-tiddler-dictionary
alert-background: #ff0000 alert-background: #f00
alert-border: <<colour background>> alert-border: <<colour background>>
alert-highlight: <<colour foreground>> alert-highlight: <<colour foreground>>
alert-muted-foreground: #880000 alert-muted-foreground: #800
background: #000000 background: #000
blockquote-bar: <<colour muted-foreground>> blockquote-bar: <<colour muted-foreground>>
button-background: <<colour background>> button-background: <<colour background>>
button-foreground: <<colour foreground>> button-foreground: <<colour foreground>>
@@ -17,24 +17,24 @@ button-border: <<colour foreground>>
code-background: <<colour background>> code-background: <<colour background>>
code-border: <<colour foreground>> code-border: <<colour foreground>>
code-foreground: <<colour foreground>> code-foreground: <<colour foreground>>
dirty-indicator: #ff0000 dirty-indicator: #f00
download-background: #48ff48 download-background: #080
download-foreground: <<colour background>> download-foreground: <<colour background>>
dragger-background: <<colour foreground>> dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>> dragger-foreground: <<colour background>>
dropdown-background: <<colour background>> dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>> dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: #868686 dropdown-tab-background-selected: <<colour foreground>>
dropdown-tab-background: #515151 dropdown-tab-background: <<colour foreground>>
dropzone-background: #1aff1a dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit external-link-background-hover: inherit
external-link-background-visited: inherit external-link-background-visited: inherit
external-link-background: inherit external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #5353ff external-link-foreground-visited: #00a
external-link-foreground: #9595ff external-link-foreground: #00e
footnote-target-background: #4c4c4c footnote-target-background: #4c4c4c
foreground: #ffffff foreground: #fff
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000
message-background: <<colour foreground>> message-background: <<colour foreground>>
@@ -52,11 +52,11 @@ notification-border: <<colour foreground>>
page-background: <<colour background>> page-background: <<colour background>>
pre-background: <<colour background>> pre-background: <<colour background>>
pre-border: <<colour foreground>> pre-border: <<colour foreground>>
primary: #8a8aff primary: #00f
select-tag-background: select-tag-background:
select-tag-foreground: select-tag-foreground:
sidebar-button-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #ffff00 sidebar-controls-foreground-hover: <<colour background>>
sidebar-controls-foreground: <<colour foreground>> sidebar-controls-foreground: <<colour foreground>>
sidebar-foreground-shadow: rgba(0,0,0, 0) sidebar-foreground-shadow: rgba(0,0,0, 0)
sidebar-foreground: <<colour foreground>> sidebar-foreground: <<colour foreground>>
@@ -72,10 +72,6 @@ sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: <<colour foreground>> sidebar-tiddler-link-foreground-hover: <<colour foreground>>
sidebar-tiddler-link-foreground: <<colour primary>> sidebar-tiddler-link-foreground: <<colour primary>>
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-stable: #00f400
stability-experimental: #ffaf1c
stability-deprecated: #ff2b2b
stability-legacy: #ceceff
static-alert-foreground: #aaaaaa static-alert-foreground: #aaaaaa
tab-background-selected: <<colour background>> tab-background-selected: <<colour background>>
tab-background: <<colour foreground>> tab-background: <<colour foreground>>
@@ -85,15 +81,14 @@ tab-divider: <<colour foreground>>
tab-foreground-selected: <<colour foreground>> tab-foreground-selected: <<colour foreground>>
tab-foreground: <<colour background>> tab-foreground: <<colour background>>
table-border: #dddddd table-border: #dddddd
table-footer-background: #444444 table-footer-background: #a8a8a8
table-header-background: #444444 table-header-background: #f0f0f0
tag-background: #ffffff tag-background: #fff
tag-foreground: #000000 tag-foreground: #000
testcase-accent-level-1: #144a8c
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour foreground>> tiddler-border: <<colour foreground>>
tiddler-controls-foreground-hover: #ddd tiddler-controls-foreground-hover: #ddd
tiddler-controls-foreground-selected: #ae0000 tiddler-controls-foreground-selected: #fdd
tiddler-controls-foreground: <<colour foreground>> tiddler-controls-foreground: <<colour foreground>>
tiddler-editor-background: <<colour background>> tiddler-editor-background: <<colour background>>
tiddler-editor-border-image: <<colour foreground>> tiddler-editor-border-image: <<colour foreground>>
@@ -107,15 +102,14 @@ tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>> tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: <<colour foreground>> tiddler-subtitle-foreground: <<colour foreground>>
tiddler-title-foreground: <<colour foreground>> tiddler-title-foreground: <<colour foreground>>
toolbar-new-button: toolbar-new-button:
toolbar-options-button: toolbar-options-button:
toolbar-save-button: toolbar-save-button:
toolbar-info-button: toolbar-info-button:
toolbar-edit-button: toolbar-edit-button:
toolbar-close-button: toolbar-close-button:
toolbar-delete-button: toolbar-delete-button:
toolbar-cancel-button: toolbar-cancel-button:
toolbar-done-button: toolbar-done-button:
untagged-background: <<colour foreground>> untagged-background: <<colour foreground>>
very-muted-foreground: #888888 very-muted-foreground: #888888
network-activity-foreground: <<colour primary>>
+7 -12
View File
@@ -5,7 +5,7 @@ description: High contrast and unambiguous (light version)
tags: $:/tags/Palette tags: $:/tags/Palette
type: application/x-tiddler-dictionary type: application/x-tiddler-dictionary
alert-background: #ff4a4a alert-background: #f00
alert-border: <<colour background>> alert-border: <<colour background>>
alert-highlight: <<colour foreground>> alert-highlight: <<colour foreground>>
alert-muted-foreground: #800 alert-muted-foreground: #800
@@ -18,13 +18,13 @@ code-background: <<colour background>>
code-border: <<colour foreground>> code-border: <<colour foreground>>
code-foreground: <<colour foreground>> code-foreground: <<colour foreground>>
dirty-indicator: #f00 dirty-indicator: #f00
download-background: #008200 download-background: #080
download-foreground: <<colour background>> download-foreground: <<colour background>>
dragger-background: <<colour foreground>> dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>> dragger-foreground: <<colour background>>
dropdown-background: <<colour background>> dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>> dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: <<colour background>> dropdown-tab-background-selected: <<colour foreground>>
dropdown-tab-background: <<colour foreground>> dropdown-tab-background: <<colour foreground>>
dropzone-background: rgba(0,200,0,0.7) dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit external-link-background-hover: inherit
@@ -52,13 +52,13 @@ notification-border: <<colour foreground>>
page-background: <<colour background>> page-background: <<colour background>>
pre-background: <<colour background>> pre-background: <<colour background>>
pre-border: <<colour foreground>> pre-border: <<colour foreground>>
primary: #0000ff primary: #00f
select-tag-background: select-tag-background:
select-tag-foreground: select-tag-foreground:
sidebar-button-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #606060 sidebar-controls-foreground-hover: <<colour background>>
sidebar-controls-foreground: <<colour foreground>> sidebar-controls-foreground: <<colour foreground>>
sidebar-foreground-shadow: #000000 sidebar-foreground-shadow: rgba(0,0,0, 0)
sidebar-foreground: <<colour foreground>> sidebar-foreground: <<colour foreground>>
sidebar-muted-foreground-hover: #444444 sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: <<colour foreground>> sidebar-muted-foreground: <<colour foreground>>
@@ -72,10 +72,6 @@ sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: <<colour foreground>> sidebar-tiddler-link-foreground-hover: <<colour foreground>>
sidebar-tiddler-link-foreground: <<colour primary>> sidebar-tiddler-link-foreground: <<colour primary>>
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-deprecated: #ff0000
stability-experimental: #b37400
stability-legacy: #000075
stability-stable: #008000
static-alert-foreground: #aaaaaa static-alert-foreground: #aaaaaa
tab-background-selected: <<colour background>> tab-background-selected: <<colour background>>
tab-background: <<colour foreground>> tab-background: <<colour foreground>>
@@ -92,7 +88,7 @@ tag-foreground: #fff
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour foreground>> tiddler-border: <<colour foreground>>
tiddler-controls-foreground-hover: #ddd tiddler-controls-foreground-hover: #ddd
tiddler-controls-foreground-selected: #c5abf3 tiddler-controls-foreground-selected: #fdd
tiddler-controls-foreground: <<colour foreground>> tiddler-controls-foreground: <<colour foreground>>
tiddler-editor-background: <<colour background>> tiddler-editor-background: <<colour background>>
tiddler-editor-border-image: <<colour foreground>> tiddler-editor-border-image: <<colour foreground>>
@@ -117,4 +113,3 @@ toolbar-cancel-button:
toolbar-done-button: toolbar-done-button:
untagged-background: <<colour foreground>> untagged-background: <<colour foreground>>
very-muted-foreground: #888888 very-muted-foreground: #888888
network-activity-foreground: <<colour primary>>
+27 -33
View File
@@ -5,30 +5,30 @@ name: Cupertino Dark
description: A macOS inspired dark palette description: A macOS inspired dark palette
type: application/x-tiddler-dictionary type: application/x-tiddler-dictionary
alert-background: #ff4b42 alert-background: #FF453A
alert-border: #950700 alert-border: #FF453A
alert-highlight: #FFD60A alert-highlight: #FFD60A
alert-muted-foreground: #323234 alert-muted-foreground: <<colour muted-foreground>>
background: #282828 background: #282828
blockquote-bar: #8d8d8d blockquote-bar: <<colour page-background>>
button-foreground: <<colour foreground>> button-foreground: <<colour foreground>>
code-background: <<colour pre-background>> code-background: <<colour pre-background>>
code-border: <<colour pre-border>> code-border: <<colour pre-border>>
code-foreground: #c7c7c7 code-foreground: rgba(255, 255, 255, 0.54)
dirty-indicator: #FF453A dirty-indicator: #FF453A
download-background: <<colour primary>> download-background: <<colour primary>>
download-foreground: <<colour background>> download-foreground: <<colour foreground>>
dragger-background: <<colour foreground>> dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>> dragger-foreground: <<colour background>>
dropdown-background: <<colour tiddler-info-background>> dropdown-background: <<colour tiddler-info-background>>
dropdown-border: <<colour dropdown-background>> dropdown-border: <<colour dropdown-background>>
dropdown-tab-background-selected: #3F638B dropdown-tab-background-selected: #3F638B
dropdown-tab-background: #707070 dropdown-tab-background: #323232
dropzone-background: #30D158 dropzone-background: #30D158
external-link-background-hover: transparent external-link-background-hover: transparent
external-link-background-visited: transparent external-link-background-visited: transparent
external-link-background: transparent external-link-background: transparent
external-link-foreground-hover: #9511d5 external-link-foreground-hover:
external-link-foreground-visited: #BF5AF2 external-link-foreground-visited: #BF5AF2
external-link-foreground: #32D74B external-link-foreground: #32D74B
footnote-target-background: #747474 footnote-target-background: #747474
@@ -60,36 +60,31 @@ sidebar-controls-foreground-hover: #FF9F0A
sidebar-controls-foreground: #8E8E93 sidebar-controls-foreground: #8E8E93
sidebar-foreground-shadow: transparent sidebar-foreground-shadow: transparent
sidebar-foreground: rgba(255, 255, 255, 0.54) sidebar-foreground: rgba(255, 255, 255, 0.54)
sidebar-muted-foreground-hover: #acacac sidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)
sidebar-muted-foreground: #787878 sidebar-muted-foreground: rgba(255, 255, 255, 0.38)
sidebar-tab-background-selected: #3F638B sidebar-tab-background-selected: #3F638B
sidebar-tab-background: <<colour background>> sidebar-tab-background: <<colour background>>
sidebar-tab-border-selected: #313131 sidebar-tab-border-selected: <<colour background>>
sidebar-tab-border: #404040 sidebar-tab-border: <<colour background>>
sidebar-tab-divider: #282828 sidebar-tab-divider: <<colour background>>
sidebar-tab-foreground-selected: #d2d2d2 sidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)
sidebar-tab-foreground: #d2d2d2 sidebar-tab-foreground: rgba(255, 255, 255, 0.54)
sidebar-tiddler-link-foreground-hover: #535353 sidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)
sidebar-tiddler-link-foreground: #949494 sidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)
site-title-foreground: #ffffff site-title-foreground: #ffffff
stability-stable: #009f00
stability-experimental: #c07c00
stability-deprecated: #ff0000
stability-legacy: #6c6cff
static-alert-foreground: #B4B4B4 static-alert-foreground: #B4B4B4
tab-background-selected: #3F638B tab-background-selected: #3F638B
tab-background: <<colour page-background>> tab-background: <<colour page-background>>
tab-border-selected: <<colour page-background>> tab-border-selected: <<colour page-background>>
tab-border: #4a4a4a tab-border: <<colour page-background>>
tab-divider: <<colour page-background>> tab-divider: <<colour page-background>>
tab-foreground-selected: #ffffff tab-foreground-selected: rgba(255, 255, 255, 0.87)
tab-foreground: #adadad tab-foreground: rgba(255, 255, 255, 0.54)
table-border: #464646 table-border: #464646
table-footer-background: #7f7f7f table-footer-background: <<colour tiddler-editor-fields-odd>>
table-header-background: <<colour table-border>> table-header-background: <<colour tiddler-editor-fields-even>>
tag-background: #48484A tag-background: #48484A
tag-foreground: #323232 tag-foreground: #323232
testcase-accent-level-1: #345173
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: transparent tiddler-border: transparent
tiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>> tiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>
@@ -97,9 +92,9 @@ tiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover
tiddler-controls-foreground: #48484A tiddler-controls-foreground: #48484A
tiddler-editor-background: <<colour background>> tiddler-editor-background: <<colour background>>
tiddler-editor-border-image: tiddler-editor-border-image:
tiddler-editor-border: #444444 tiddler-editor-border: rgba(255, 255, 255, 0.08)
tiddler-editor-fields-even: #1f1f1f tiddler-editor-fields-even: rgba(255, 255, 255, 0.1)
tiddler-editor-fields-odd: #464646 tiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)
tiddler-info-background: #1E1E1E tiddler-info-background: #1E1E1E
tiddler-info-border: #1E1E1E tiddler-info-border: #1E1E1E
tiddler-info-tab-background: #3F638B tiddler-info-tab-background: #3F638B
@@ -116,8 +111,8 @@ toolbar-close-button:
toolbar-delete-button: toolbar-delete-button:
toolbar-cancel-button: toolbar-cancel-button:
toolbar-done-button: toolbar-done-button:
untagged-background: #5f5f5f untagged-background: <<colour very-muted-foreground>>
very-muted-foreground: #3f3f3f very-muted-foreground: #464646
selection-background: #3F638B selection-background: #3F638B
selection-foreground: #ffffff selection-foreground: #ffffff
wikilist-background: <<colour page-background>> wikilist-background: <<colour page-background>>
@@ -136,4 +131,3 @@ wikilist-title: <<colour foreground>>
wikilist-title-svg: <<colour foreground>> wikilist-title-svg: <<colour foreground>>
wikilist-toolbar-foreground: <<colour foreground>> wikilist-toolbar-foreground: <<colour foreground>>
wikilist-url: <<colour muted-foreground>> wikilist-url: <<colour muted-foreground>>
network-activity-foreground: <<colour primary>>
+15 -20
View File
@@ -20,7 +20,7 @@ code-background: #f7f7f9
code-border: #e1e1e8 code-border: #e1e1e8
code-foreground: #dd1144 code-foreground: #dd1144
dirty-indicator: #ff0000 dirty-indicator: #ff0000
download-background: #30b830 download-background: #34c734
download-foreground: <<colour background>> download-foreground: <<colour background>>
dragger-background: <<colour foreground>> dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>> dragger-foreground: <<colour background>>
@@ -58,26 +58,22 @@ primary: #5778d8
select-tag-background: select-tag-background:
select-tag-foreground: select-tag-foreground:
sidebar-button-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #a6a6ff sidebar-controls-foreground-hover: #ccf
sidebar-controls-foreground: #eeeeee sidebar-controls-foreground: #fff
sidebar-foreground-shadow: transparent sidebar-foreground-shadow: rgba(0,0,0, 0.5)
sidebar-foreground: #eeeeee sidebar-foreground: #fff
sidebar-muted-foreground-hover: #999999 sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: #eeeeee sidebar-muted-foreground: #eee
sidebar-tab-background-selected: <<colour page-background>> sidebar-tab-background-selected: rgba(255,255,255, 0.8)
sidebar-tab-background: #e0e0e0 sidebar-tab-background: rgba(255,255,255, 0.4)
sidebar-tab-border-selected: <<colour tab-border-selected>> sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: <<colour tab-border>> sidebar-tab-border: <<colour tab-border>>
sidebar-tab-divider: #e4e4e4 sidebar-tab-divider: rgba(255,255,255, 0.2)
sidebar-tab-foreground-selected: #ddddff sidebar-tab-foreground-selected:
sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #aaaaff sidebar-tiddler-link-foreground-hover: #aaf
sidebar-tiddler-link-foreground: #ddddff sidebar-tiddler-link-foreground: #ddf
site-title-foreground: #ffffff site-title-foreground: #fff
stability-stable: #008000
stability-experimental: #c07c00
stability-deprecated: #ff0000
stability-legacy: #0000ff
static-alert-foreground: #aaaaaa static-alert-foreground: #aaaaaa
tab-background-selected: #ffffff tab-background-selected: #ffffff
tab-background: #d8d8d8 tab-background: #d8d8d8
@@ -94,7 +90,7 @@ tag-foreground: #ffffff
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour background>> tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: #888888 tiddler-controls-foreground-hover: #888888
tiddler-controls-foreground-selected: #6a6aff tiddler-controls-foreground-selected: #444444
tiddler-controls-foreground: #cccccc tiddler-controls-foreground: #cccccc
tiddler-editor-background: #f8f8f8 tiddler-editor-background: #f8f8f8
tiddler-editor-border-image: #ffffff tiddler-editor-border-image: #ffffff
@@ -119,4 +115,3 @@ toolbar-cancel-button:
toolbar-done-button: toolbar-done-button:
untagged-background: #999999 untagged-background: #999999
very-muted-foreground: #888888 very-muted-foreground: #888888
network-activity-foreground: #11ff23
+6 -11
View File
@@ -22,9 +22,9 @@ diff-equal-foreground: <<colour foreground>>
diff-insert-background: #91c093 diff-insert-background: #91c093
diff-insert-foreground: <<colour foreground>> diff-insert-foreground: <<colour foreground>>
diff-invisible-background: diff-invisible-background:
diff-invisible-foreground: #d3d2cb diff-invisible-foreground: <<colour muted-foreground>>
dirty-indicator: #ad3434 dirty-indicator: #ad3434
download-background: #5eae62 download-background: #6ca16c
download-foreground: <<colour background>> download-foreground: <<colour background>>
dragger-background: <<colour foreground>> dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>> dragger-foreground: <<colour background>>
@@ -32,13 +32,14 @@ dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>> dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: #E9E0C7 dropdown-tab-background-selected: #E9E0C7
dropdown-tab-background: #BAB29C dropdown-tab-background: #BAB29C
dropzone-background: #00c600 dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit external-link-background-hover: inherit
external-link-background-visited: inherit external-link-background-visited: inherit
external-link-background: inherit external-link-background: inherit
external-link-foreground-hover: #7474ba external-link-foreground-hover: inherit
external-link-foreground-visited: #313163 external-link-foreground-visited: #313163
external-link-foreground: #555592 external-link-foreground: #555592
footnote-target-background: #fff7d9
foreground: #2D2A23 foreground: #2D2A23
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000
@@ -70,7 +71,7 @@ sidebar-controls-foreground: #867F69
sidebar-foreground-shadow: transparent sidebar-foreground-shadow: transparent
sidebar-foreground: #867F69 sidebar-foreground: #867F69
sidebar-muted-foreground-hover: #706A58 sidebar-muted-foreground-hover: #706A58
sidebar-muted-foreground: #aba081 sidebar-muted-foreground: #B3A98C
sidebar-tab-background-selected: #e0d3af sidebar-tab-background-selected: #e0d3af
sidebar-tab-background: #A6A193 sidebar-tab-background: #A6A193
sidebar-tab-border-selected: #C3BAA1 sidebar-tab-border-selected: #C3BAA1
@@ -81,10 +82,6 @@ sidebar-tab-foreground: #2D2A23
sidebar-tiddler-link-foreground-hover: #433F35 sidebar-tiddler-link-foreground-hover: #433F35
sidebar-tiddler-link-foreground: #706A58 sidebar-tiddler-link-foreground: #706A58
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-deprecated: #dc322f
stability-experimental: #b58900
stability-legacy: #268bd2
stability-stable: #859900
static-alert-foreground: #A6A193 static-alert-foreground: #A6A193
tab-background-selected: #E9E0C7 tab-background-selected: #E9E0C7
tab-background: #A6A193 tab-background: #A6A193
@@ -98,7 +95,6 @@ table-footer-background: #8A8885
table-header-background: #B0AA98 table-header-background: #B0AA98
tag-background: #706A58 tag-background: #706A58
tag-foreground: #E3D7B7 tag-foreground: #E3D7B7
testcase-accent-level-1: #b3adc9
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour background>> tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: #9D947B tiddler-controls-foreground-hover: #9D947B
@@ -144,4 +140,3 @@ wikilist-toolbar-foreground: #2D2A23
wikilist-droplink-dragover: rgba(255,192,192,0.5) wikilist-droplink-dragover: rgba(255,192,192,0.5)
wikilist-button-background: #A6A193 wikilist-button-background: #A6A193
wikilist-button-foreground: #161512 wikilist-button-foreground: #161512
network-activity-foreground: <<colour primary>>
+17 -19
View File
@@ -9,13 +9,13 @@ license: https://github.com/morhetz/gruvbox
alert-background: #cc241d alert-background: #cc241d
alert-border: #cc241d alert-border: #cc241d
alert-highlight: #d79921 alert-highlight: #d79921
alert-muted-foreground: #272321 alert-muted-foreground: #504945
background: #3c3836 background: #3c3836
blockquote-bar: <<colour muted-foreground>> blockquote-bar: <<colour muted-foreground>>
button-foreground: <<colour foreground>> button-foreground: <<colour foreground>>
code-background: #504945 code-background: #504945
code-border: #504945 code-border: #504945
code-foreground: #fc5e4b code-foreground: #fb4934
diff-delete-background: #fb4934 diff-delete-background: #fb4934
diff-delete-foreground: <<colour foreground>> diff-delete-foreground: <<colour foreground>>
diff-equal-background: diff-equal-background:
@@ -25,7 +25,7 @@ diff-insert-foreground: <<colour background>>
diff-invisible-background: #ffff97 diff-invisible-background: #ffff97
diff-invisible-foreground: #444347 diff-invisible-foreground: #444347
dirty-indicator: #fb4934 dirty-indicator: #fb4934
download-background: #1daf24 download-background: #b8bb26
download-foreground: <<colour background>> download-foreground: <<colour background>>
dragger-background: <<colour foreground>> dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>> dragger-foreground: <<colour background>>
@@ -46,53 +46,52 @@ highlight-background: #ffff79
highlight-foreground: #000000 highlight-foreground: #000000
menubar-background: #504945 menubar-background: #504945
menubar-foreground: <<colour foreground>> menubar-foreground: <<colour foreground>>
message-background: #b4c9c1 message-background: #83a598
message-border: #83a598 message-border: #83a598
message-foreground: #3c3836 message-foreground: #3c3836
modal-backdrop: #625a57 modal-backdrop: <<colour foreground>>
modal-background: <<colour background>> modal-background: <<colour background>>
modal-border: #504945 modal-border: #504945
modal-footer-background: #3c3836 modal-footer-background: #3c3836
modal-footer-border: #3c3836 modal-footer-border: #3c3836
modal-header-border: #3c3836 modal-header-border: #3c3836
muted-foreground: #d5c4a1 muted-foreground: #d5c4a1
network-activity-foreground: <<colour primary>>
notification-background: <<colour primary>> notification-background: <<colour primary>>
notification-border: <<colour primary>> notification-border: <<colour primary>>
page-background: #282828 page-background: #282828
pre-background: #504945 pre-background: #504945
pre-border: #504945 pre-border: #504945
primary: #da9921 primary: #d79921
select-tag-background: #665c54 select-tag-background: #665c54
select-tag-foreground: <<colour foreground>> select-tag-foreground: <<colour foreground>>
selection-background: #458588 selection-background: #458588
selection-foreground: <<colour foreground>> selection-foreground: <<colour foreground>>
sidebar-button-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #e3e0dd sidebar-controls-foreground-hover: #7c6f64
sidebar-controls-foreground: #978b84 sidebar-controls-foreground: #504945
sidebar-foreground-shadow: transparent sidebar-foreground-shadow: transparent
sidebar-foreground: #fbf1c7 sidebar-foreground: #fbf1c7
sidebar-muted-foreground-hover: <<colour sidebar-controls-foreground-hover>> sidebar-muted-foreground-hover: #7c6f64
sidebar-muted-foreground: <<colour sidebar-controls-foreground>> sidebar-muted-foreground: #504945
sidebar-tab-background-selected: #bdae93 sidebar-tab-background-selected: #bdae93
sidebar-tab-background: #3c3836 sidebar-tab-background: #3c3836
sidebar-tab-border-selected: <<colour tab-border-selected>> sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: #bdae93 sidebar-tab-border: #bdae93
sidebar-tab-divider: <<colour page-background>> sidebar-tab-divider: <<colour page-background>>
sidebar-tab-foreground-selected: <<colour page-background>> sidebar-tab-foreground-selected: #282828
sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #458588 sidebar-tiddler-link-foreground-hover: #458588
sidebar-tiddler-link-foreground: #98971a sidebar-tiddler-link-foreground: #98971a
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-deprecated: #cc241d stability-deprecated: #cc241d
stability-experimental: #b37d1c stability-experimental: #d79921
stability-legacy: #529ca0 stability-legacy: #458588
stability-stable: #649618 stability-stable: #98971a
static-alert-foreground: #B48EAD static-alert-foreground: #B48EAD
tab-background-selected: #ebdbb2 tab-background-selected: #ebdbb2
tab-background: #665c54 tab-background: #665c54
tab-border-selected: <<colour tab-background-selected>> tab-border-selected: #665c54
tab-border: #82746a tab-border: #665c54
tab-divider: #bdae93 tab-divider: #bdae93
tab-foreground-selected: #282828 tab-foreground-selected: #282828
tab-foreground: #ebdbb2 tab-foreground: #ebdbb2
@@ -101,7 +100,6 @@ table-footer-background: #665c54
table-header-background: #504945 table-header-background: #504945
tag-background: #d3869b tag-background: #d3869b
tag-foreground: #282828 tag-foreground: #282828
testcase-accent-level-1: #456d88
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour background>> tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: #7c6f64 tiddler-controls-foreground-hover: #7c6f64
@@ -128,7 +126,7 @@ toolbar-close-button:
toolbar-delete-button: toolbar-delete-button:
toolbar-cancel-button: toolbar-cancel-button:
toolbar-done-button: toolbar-done-button:
untagged-background: #887b75 untagged-background: #504945
very-muted-foreground: #bdae93 very-muted-foreground: #bdae93
wikilist-background: <<colour page-background>> wikilist-background: <<colour page-background>>
wikilist-button-background: #acacac wikilist-button-background: #acacac
+23 -25
View File
@@ -7,15 +7,15 @@ type: application/x-tiddler-dictionary
license: MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md license: MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md
alert-background: #D08770 alert-background: #D08770
alert-border: <<colour alert-background>> alert-border: #D08770
alert-highlight: #a3436f alert-highlight: #B48EAD
alert-muted-foreground: #495367 alert-muted-foreground: #4C566A
background: #3b4252 background: #3b4252
blockquote-bar: <<colour muted-foreground>> blockquote-bar: <<colour muted-foreground>>
button-foreground: <<colour foreground>> button-foreground: <<colour foreground>>
code-background: #2E3440 code-background: #2E3440
code-border: #2E3440 code-border: #2E3440
code-foreground: #c7747c code-foreground: #BF616A
diff-delete-background: #BF616A diff-delete-background: #BF616A
diff-delete-foreground: <<colour foreground>> diff-delete-foreground: <<colour foreground>>
diff-equal-background: diff-equal-background:
@@ -48,32 +48,31 @@ menubar-background: #2E3440
menubar-foreground: #d8dee9 menubar-foreground: #d8dee9
message-background: #2E3440 message-background: #2E3440
message-border: #2E3440 message-border: #2E3440
message-foreground: #6485aa message-foreground: #547599
modal-backdrop: #435678 modal-backdrop: <<colour foreground>>
modal-background: <<colour background>> modal-background: <<colour background>>
modal-border: #3b4252 modal-border: #3b4252
modal-footer-background: #3b4252 modal-footer-background: #3b4252
modal-footer-border: #3b4252 modal-footer-border: #3b4252
modal-header-border: #3b4252 modal-header-border: #3b4252
muted-foreground: #687693 muted-foreground: #4C566A
network-activity-foreground: <<colour primary>>
notification-background: <<colour primary>> notification-background: <<colour primary>>
notification-border: #EBCB8B notification-border: #EBCB8B
page-background: #2e3440 page-background: #2e3440
pre-background: #2E3440 pre-background: #2E3440
pre-border: #2E3440 pre-border: #2E3440
primary: #7b98bb primary: #5E81AC
select-tag-background: #3b4252 select-tag-background: #3b4252
select-tag-foreground: <<colour foreground>> select-tag-foreground: <<colour foreground>>
selection-background: #52749e selection-background: #5E81AC
selection-foreground: <<colour foreground>> selection-foreground: <<colour foreground>>
sidebar-button-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #D8DEE9 sidebar-controls-foreground-hover: #D8DEE9
sidebar-controls-foreground: #5e6a84 sidebar-controls-foreground: #4C566A
sidebar-foreground-shadow: transparent sidebar-foreground-shadow: transparent
sidebar-foreground: #D8DEE9 sidebar-foreground: #D8DEE9
sidebar-muted-foreground-hover: #9fa8bb sidebar-muted-foreground-hover: #4C566A
sidebar-muted-foreground: #6c7b97 sidebar-muted-foreground: #4C566A
sidebar-tab-background-selected: #ECEFF4 sidebar-tab-background-selected: #ECEFF4
sidebar-tab-background: #4C566A sidebar-tab-background: #4C566A
sidebar-tab-border-selected: <<colour tab-border-selected>> sidebar-tab-border-selected: <<colour tab-border-selected>>
@@ -84,40 +83,39 @@ sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #A3BE8C sidebar-tiddler-link-foreground-hover: #A3BE8C
sidebar-tiddler-link-foreground: #81A1C1 sidebar-tiddler-link-foreground: #81A1C1
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-deprecated: #ff595e stability-deprecated: #bf616a
stability-experimental: #f29d00 stability-experimental: #d08770
stability-legacy: #2ddbca stability-legacy: #88c0d0
stability-stable: #04ff04 stability-stable: #a3be8c
static-alert-foreground: #B48EAD static-alert-foreground: #B48EAD
tab-background-selected: #ECEFF4 tab-background-selected: #ECEFF4
tab-background: #4C566A tab-background: #4C566A
tab-border-selected: #4C566A tab-border-selected: #4C566A
tab-border: #5c6883 tab-border: #4C566A
tab-divider: #4C566A tab-divider: #4C566A
tab-foreground-selected: #6c7a97 tab-foreground-selected: #4C566A
tab-foreground: #D8DEE9 tab-foreground: #D8DEE9
table-border: #4C566A table-border: #4C566A
table-footer-background: #2e3440 table-footer-background: #2e3440
table-header-background: #2e3440 table-header-background: #2e3440
tag-background: #A3BE8C tag-background: #A3BE8C
tag-foreground: #4C566A tag-foreground: #4C566A
testcase-accent-level-1: #455e7d
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour background>> tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: tiddler-controls-foreground-hover:
tiddler-controls-foreground-selected: #EBCB8B tiddler-controls-foreground-selected: #EBCB8B
tiddler-controls-foreground: #5e6a84 tiddler-controls-foreground: #4C566A
tiddler-editor-background: #2e3440 tiddler-editor-background: #2e3440
tiddler-editor-border-image: #2e3440 tiddler-editor-border-image: #2e3440
tiddler-editor-border: #232732 tiddler-editor-border: #3b4252
tiddler-editor-fields-even: #2e3440 tiddler-editor-fields-even: #2e3440
tiddler-editor-fields-odd: #424a5b tiddler-editor-fields-odd: #2e3440
tiddler-info-background: #2e3440 tiddler-info-background: #2e3440
tiddler-info-border: #2e3440 tiddler-info-border: #2e3440
tiddler-info-tab-background: #2e3440 tiddler-info-tab-background: #2e3440
tiddler-link-background: <<colour background>> tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>> tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: #5c6881 tiddler-subtitle-foreground: #4C566A
tiddler-title-foreground: #81A1C1 tiddler-title-foreground: #81A1C1
toolbar-new-button: toolbar-new-button:
toolbar-options-button: toolbar-options-button:
@@ -140,4 +138,4 @@ wikilist-button-open-hover: #A3BE8C
wikilist-button-reveal: #81A1C1 wikilist-button-reveal: #81A1C1
wikilist-button-reveal-hover: #81A1C1 wikilist-button-reveal-hover: #81A1C1
wikilist-button-remove: #B48EAD wikilist-button-remove: #B48EAD
wikilist-button-remove-hover: #B48EAD wikilist-button-remove-hover: #B48EAD
+10 -16
View File
@@ -11,7 +11,7 @@ alert-highlight: #881122
alert-muted-foreground: #b99e2f alert-muted-foreground: #b99e2f
background: #ffffff background: #ffffff
blockquote-bar: <<colour muted-foreground>> blockquote-bar: <<colour muted-foreground>>
button-background: #adadad button-background:
button-foreground: button-foreground:
button-border: button-border:
code-background: #f7f7f9 code-background: #f7f7f9
@@ -47,41 +47,36 @@ modal-footer-background: #f5f5f5
modal-footer-border: #dddddd modal-footer-border: #dddddd
modal-header-border: #eeeeee modal-header-border: #eeeeee
muted-foreground: #999999 muted-foreground: #999999
network-activity-foreground: <<colour primary>>
notification-background: #ffffdd notification-background: #ffffdd
notification-border: #999999 notification-border: #999999
page-background: #000 page-background: #000
pre-background: #f5f5f5 pre-background: #f5f5f5
pre-border: #cccccc pre-border: #cccccc
primary: #cc0000 primary: #cc0000
select-tag-background: <<colour foreground>> select-tag-background:
select-tag-foreground: <<colour foreground>> select-tag-foreground:
sidebar-button-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #797979 sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #cacaca sidebar-controls-foreground: #ffffff
sidebar-foreground-shadow: rgba(255,255,255, 0.0) sidebar-foreground-shadow: rgba(255,255,255, 0.0)
sidebar-foreground: #acacac sidebar-foreground: #acacac
sidebar-muted-foreground-hover: #444444 sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: #c0c0c0 sidebar-muted-foreground: #c0c0c0
sidebar-tab-background-selected: #000000 sidebar-tab-background-selected: #000
sidebar-tab-background: <<colour tab-background>> sidebar-tab-background: <<colour tab-background>>
sidebar-tab-border-selected: #7c7c7c sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: <<colour tab-border>> sidebar-tab-border: <<colour tab-border>>
sidebar-tab-divider: <<colour tab-divider>> sidebar-tab-divider: <<colour tab-divider>>
sidebar-tab-foreground-selected: #ff0909 sidebar-tab-foreground-selected:
sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #ffbb99 sidebar-tiddler-link-foreground-hover: #ffbb99
sidebar-tiddler-link-foreground: #cc0000 sidebar-tiddler-link-foreground: #cc0000
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-deprecated: #ff0000
stability-experimental: #c07c00
stability-legacy: #0000ff
stability-stable: #008000
static-alert-foreground: #aaaaaa static-alert-foreground: #aaaaaa
tab-background-selected: #ffffff tab-background-selected: #ffffff
tab-background: #d8d8d8 tab-background: #d8d8d8
tab-border-selected: #d8d8d8 tab-border-selected: #d8d8d8
tab-border: #bbbbbb tab-border: #cccccc
tab-divider: #d8d8d8 tab-divider: #d8d8d8
tab-foreground-selected: <<colour tab-foreground>> tab-foreground-selected: <<colour tab-foreground>>
tab-foreground: #666666 tab-foreground: #666666
@@ -90,7 +85,6 @@ table-footer-background: #a8a8a8
table-header-background: #f0f0f0 table-header-background: #f0f0f0
tag-background: #ffbb99 tag-background: #ffbb99
tag-foreground: #000 tag-foreground: #000
testcase-accent-level-1: #9e9eff
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour background>> tiddler-border: <<colour background>>
tiddler-controls-foreground-hover: #888888 tiddler-controls-foreground-hover: #888888
@@ -118,4 +112,4 @@ toolbar-delete-button:
toolbar-cancel-button: toolbar-cancel-button:
toolbar-done-button: toolbar-done-button:
untagged-background: #999999 untagged-background: #999999
very-muted-foreground: #888888 very-muted-foreground: #888888
+36 -38
View File
@@ -5,24 +5,24 @@ description: Warm, relaxing earth colours
tags: $:/tags/Palette tags: $:/tags/Palette
type: application/x-tiddler-dictionary type: application/x-tiddler-dictionary
# Background Tones : Background Tones
base03: #002b36 base03: #002b36
base02: #073642 base02: #073642
# Content Tones : Content Tones
base01: #586e75 base01: #586e75
base00: #657b83 base00: #657b83
base0: #839496 base0: #839496
base1: #93a1a1 base1: #93a1a1
# Background Tones : Background Tones
base2: #eee8d5 base2: #eee8d5
base3: #fdf6e3 base3: #fdf6e3
# Accent Colors : Accent Colors
yellow: #b58900 yellow: #b58900
orange: #cb4b16 orange: #cb4b16
@@ -33,7 +33,7 @@ blue: #268bd2
cyan: #2aa198 cyan: #2aa198
green: #859900 green: #859900
# Additional Tones (RA) : Additional Tones (RA)
base10: #c0c4bb base10: #c0c4bb
violet-muted: #7c81b0 violet-muted: #7c81b0
@@ -45,9 +45,9 @@ red-hot: #ff2222
blue-hot: #2298ee blue-hot: #2298ee
green-hot: #98ee22 green-hot: #98ee22
# Palette : Palette
# Do not use colour macro for background and foreground : Do not use colour macro for background and foreground
background: #fdf6e3 background: #fdf6e3
download-foreground: <<colour background>> download-foreground: <<colour background>>
dragger-foreground: <<colour background>> dragger-foreground: <<colour background>>
@@ -68,28 +68,24 @@ foreground: #657b83
sidebar-button-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground: <<colour foreground>> sidebar-controls-foreground: <<colour foreground>>
sidebar-foreground: <<colour foreground>> sidebar-foreground: <<colour foreground>>
# base03 : base03
# base02 : base02
# base01 : base01
alert-muted-foreground: <<colour base01>> alert-muted-foreground: <<colour base01>>
# base00 : base00
code-foreground: <<colour base00>> code-foreground: <<colour base00>>
message-foreground: <<colour base00>> message-foreground: <<colour base00>>
tag-foreground: <<colour base00>> tag-foreground: <<colour base00>>
# base0 : base0
sidebar-tiddler-link-foreground: <<colour base0>> sidebar-tiddler-link-foreground: <<colour base0>>
# base1 : base1
muted-foreground: <<colour base1>> muted-foreground: <<colour base1>>
blockquote-bar: <<colour muted-foreground>> blockquote-bar: <<colour muted-foreground>>
dropdown-border: <<colour muted-foreground>> dropdown-border: <<colour muted-foreground>>
sidebar-muted-foreground: <<colour muted-foreground>> sidebar-muted-foreground: <<colour muted-foreground>>
tiddler-title-foreground: <<colour muted-foreground>> tiddler-title-foreground: <<colour muted-foreground>>
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
# base2 : base2
stability-deprecated: <<colour red>>
stability-experimental: <<colour yellow>>
stability-legacy: <<colour blue-hot>>
stability-stable: <<colour green>>
modal-footer-background: <<colour base2>> modal-footer-background: <<colour base2>>
page-background: <<colour base2>> page-background: <<colour base2>>
modal-backdrop: <<colour page-background>> modal-backdrop: <<colour page-background>>
@@ -103,31 +99,31 @@ foreground: #657b83
tag-background: <<colour base2>> tag-background: <<colour base2>>
tiddler-editor-background: <<colour base2>> tiddler-editor-background: <<colour base2>>
tiddler-info-background: <<colour base2>> tiddler-info-background: <<colour base2>>
tiddler-info-tab-background: <<colour tiddler-info-border>> tiddler-info-tab-background: <<colour base2>>
tab-background: <<colour base2>> tab-background: <<colour base2>>
dropdown-tab-background: <<colour tab-background>> dropdown-tab-background: <<colour tab-background>>
# base3 : base3
alert-background: <<colour base3>> alert-background: <<colour base3>>
message-background: <<colour base3>> message-background: <<colour base3>>
# yellow : yellow
# orange : orange
# red : red
# magenta : magenta
alert-highlight: <<colour magenta>> alert-highlight: <<colour magenta>>
# violet : violet
external-link-foreground: <<colour violet>> external-link-foreground: <<colour violet>>
: blue
# blue : cyan
# cyan : green
# green : base10
# base10
tiddler-controls-foreground: <<colour base10>> tiddler-controls-foreground: <<colour base10>>
# violet-muted : violet-muted
external-link-foreground-visited: <<colour violet-muted>> external-link-foreground-visited: <<colour violet-muted>>
# blue-muted : blue-muted
primary: <<colour blue-muted>> primary: <<colour blue-muted>>
download-background: #5bb83d download-background: <<colour primary>>
tiddler-link-foreground: <<colour primary>> tiddler-link-foreground: <<colour primary>>
alert-border: #b99e2f alert-border: #b99e2f
diff-delete-background: <<colour red>> diff-delete-background: <<colour red>>
diff-delete-foreground: <<colour background>> diff-delete-foreground: <<colour background>>
@@ -138,7 +134,7 @@ diff-insert-foreground: <<colour background>>
diff-invisible-background: <<colour yellow>> diff-invisible-background: <<colour yellow>>
diff-invisible-foreground: <<colour background>> diff-invisible-foreground: <<colour background>>
dirty-indicator: #ff0000 dirty-indicator: #ff0000
dropzone-background: #008800 dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit external-link-background-hover: inherit
external-link-background-visited: inherit external-link-background-visited: inherit
external-link-background: inherit external-link-background: inherit
@@ -150,10 +146,14 @@ message-border: #cfd6e6
modal-border: #999999 modal-border: #999999
select-tag-background: select-tag-background:
select-tag-foreground: select-tag-foreground:
sidebar-controls-foreground-hover: #000000 sidebar-controls-foreground-hover:
sidebar-muted-foreground-hover: sidebar-muted-foreground-hover:
sidebar-tab-background: #ded8c5 sidebar-tab-background: #ded8c5
sidebar-tiddler-link-foreground-hover: sidebar-tiddler-link-foreground-hover:
stability-deprecated: <<colour red>>
stability-experimental: <<colour yellow>>
stability-legacy: <<colour blue>>
stability-stable: <<colour green>>
static-alert-foreground: #aaaaaa static-alert-foreground: #aaaaaa
tab-border: #cccccc tab-border: #cccccc
modal-footer-border: <<colour tab-border>> modal-footer-border: <<colour tab-border>>
@@ -166,7 +166,6 @@ tab-divider: #d8d8d8
sidebar-tab-divider: <<colour tab-divider>> sidebar-tab-divider: <<colour tab-divider>>
table-border: #dddddd table-border: #dddddd
table-footer-background: #a8a8a8 table-footer-background: #a8a8a8
testcase-accent-level-1: #bec8cc
tiddler-controls-foreground-hover: #888888 tiddler-controls-foreground-hover: #888888
tiddler-controls-foreground-selected: #444444 tiddler-controls-foreground-selected: #444444
tiddler-editor-border-image: #ffffff tiddler-editor-border-image: #ffffff
@@ -186,4 +185,3 @@ toolbar-cancel-button:
toolbar-done-button: toolbar-done-button:
untagged-background: #999999 untagged-background: #999999
very-muted-foreground: #888888 very-muted-foreground: #888888
network-activity-foreground: <<colour primary>>
+6 -8
View File
@@ -40,7 +40,7 @@ external-link-background: inherit
external-link-background-hover: inherit external-link-background-hover: inherit
external-link-background-visited: inherit external-link-background-visited: inherit
external-link-foreground: #268bd2 external-link-foreground: #268bd2
external-link-foreground-hover: #1d669c external-link-foreground-hover:
external-link-foreground-visited: #268bd2 external-link-foreground-visited: #268bd2
footnote-target-background: #073642 footnote-target-background: #073642
foreground: #839496 foreground: #839496
@@ -56,7 +56,6 @@ modal-footer-background: #073642
modal-footer-border: #586e75 modal-footer-border: #586e75
modal-header-border: #586e75 modal-header-border: #586e75
muted-foreground: #93a1a1 muted-foreground: #93a1a1
network-activity-foreground: <<colour primary>>
notification-background: #002b36 notification-background: #002b36
notification-border: #586e75 notification-border: #586e75
page-background: #073642 page-background: #073642
@@ -82,10 +81,10 @@ sidebar-tab-foreground-selected: #93a1a1
sidebar-tiddler-link-foreground: #2aa198 sidebar-tiddler-link-foreground: #2aa198
sidebar-tiddler-link-foreground-hover: #eee8d5 sidebar-tiddler-link-foreground-hover: #eee8d5
site-title-foreground: #d33682 site-title-foreground: #d33682
stability-deprecated: #aa1a9f stability-deprecated: #dc322f
stability-experimental: #806000 stability-experimental: #b58900
stability-legacy: #1d669c stability-legacy: #268bd2
stability-stable: #00df11 stability-stable: #859900
static-alert-foreground: #93a1a1 static-alert-foreground: #93a1a1
tab-background: #073642 tab-background: #073642
tab-background-selected: #002b36 tab-background-selected: #002b36
@@ -99,7 +98,6 @@ table-footer-background: #073642
table-header-background: #073642 table-header-background: #073642
tag-background: #b58900 tag-background: #b58900
tag-foreground: #002b36 tag-foreground: #002b36
testcase-accent-level-1: #073642
tiddler-background: #002b36 tiddler-background: #002b36
tiddler-border: #586e75 tiddler-border: #586e75
tiddler-controls-foreground: inherit tiddler-controls-foreground: inherit
@@ -127,4 +125,4 @@ toolbar-new-button: #839496
toolbar-options-button: #839496 toolbar-options-button: #839496
toolbar-save-button: inherit toolbar-save-button: inherit
untagged-background: #586e75 untagged-background: #586e75
very-muted-foreground: #586e75 very-muted-foreground: #586e75
+5 -7
View File
@@ -27,7 +27,7 @@ diff-insert-foreground: #eee8d5
diff-invisible-background: #b58900 diff-invisible-background: #b58900
diff-invisible-foreground: #eee8d5 diff-invisible-foreground: #eee8d5
dirty-indicator: #dc322f dirty-indicator: #dc322f
download-background: #00910b download-background: #859900
download-foreground: #eee8d5 download-foreground: #eee8d5
dragger-background: #eee8d5 dragger-background: #eee8d5
dragger-foreground: #657b83 dragger-foreground: #657b83
@@ -56,7 +56,6 @@ modal-footer-background: #eee8d5
modal-footer-border: #93a1a1 modal-footer-border: #93a1a1
modal-header-border: #93a1a1 modal-header-border: #93a1a1
muted-foreground: #586e75 muted-foreground: #586e75
network-activity-foreground: <<colour primary>>
notification-background: #fdf6e3 notification-background: #fdf6e3
notification-border: #93a1a1 notification-border: #93a1a1
page-background: #eee8d5 page-background: #eee8d5
@@ -82,10 +81,10 @@ sidebar-tab-foreground-selected: #586e75
sidebar-tiddler-link-foreground: #2aa198 sidebar-tiddler-link-foreground: #2aa198
sidebar-tiddler-link-foreground-hover: #002b36 sidebar-tiddler-link-foreground-hover: #002b36
site-title-foreground: #d33682 site-title-foreground: #d33682
stability-deprecated: #d21a1a stability-deprecated: #dc322f
stability-experimental: #771e00 stability-experimental: #b58900
stability-legacy: #227abb stability-legacy: #268bd2
stability-stable: #576400 stability-stable: #859900
static-alert-foreground: #586e75 static-alert-foreground: #586e75
tab-background: #eee8d5 tab-background: #eee8d5
tab-background-selected: #fdf6e3 tab-background-selected: #fdf6e3
@@ -99,7 +98,6 @@ table-footer-background: #eee8d5
table-header-background: #eee8d5 table-header-background: #eee8d5
tag-background: #b58900 tag-background: #b58900
tag-foreground: #fdf6e3 tag-foreground: #fdf6e3
testcase-accent-level-1: #afc2db
tiddler-background: #fdf6e3 tiddler-background: #fdf6e3
tiddler-border: #93a1a1 tiddler-border: #93a1a1
tiddler-controls-foreground: inherit tiddler-controls-foreground: inherit
-1
View File
@@ -94,7 +94,6 @@ table-footer-background: rgba(0,0,0,.4)
table-header-background: rgba(0,0,0,.1) table-header-background: rgba(0,0,0,.1)
tag-background: rgb(255, 201, 102) tag-background: rgb(255, 201, 102)
tag-foreground: rgb(25, 25, 25) tag-foreground: rgb(25, 25, 25)
testcase-accent-level-1: rgb(13, 52, 99)
tiddler-background: rgb(38, 38, 38) tiddler-background: rgb(38, 38, 38)
tiddler-border: rgba(240, 196, 117, 0.7) tiddler-border: rgba(240, 196, 117, 0.7)
tiddler-controls-foreground: rgb(128, 128, 128) tiddler-controls-foreground: rgb(128, 128, 128)
+7 -7
View File
@@ -69,7 +69,7 @@ select-tag-foreground:
sidebar-button-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000 sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #aaaaaa sidebar-controls-foreground: #aaaaaa
sidebar-foreground-shadow: #ffffff sidebar-foreground-shadow: rgba(255,255,255, 0.8)
sidebar-foreground: #acacac sidebar-foreground: #acacac
sidebar-muted-foreground-hover: #444444 sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: #c0c0c0 sidebar-muted-foreground: #c0c0c0
@@ -83,7 +83,7 @@ sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #444444 sidebar-tiddler-link-foreground-hover: #444444
sidebar-tiddler-link-foreground: #999999 sidebar-tiddler-link-foreground: #999999
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-stable: #00b700 stability-stable: #008000
stability-experimental: #c07c00 stability-experimental: #c07c00
stability-deprecated: #ff0000 stability-deprecated: #ff0000
stability-legacy: #0000ff stability-legacy: #0000ff
@@ -138,13 +138,13 @@ wikilist-title: #666666
wikilist-title-svg: <<colour wikilist-title>> wikilist-title-svg: <<colour wikilist-title>>
wikilist-url: #aaaaaa wikilist-url: #aaaaaa
wikilist-button-open: #4fb82b wikilist-button-open: #4fb82b
wikilist-button-open-hover: #009300 wikilist-button-open-hover: green
wikilist-button-reveal: #5778d8 wikilist-button-reveal: #5778d8
wikilist-button-reveal-hover: #0000ff wikilist-button-reveal-hover: blue
wikilist-button-remove: #d85778 wikilist-button-remove: #d85778
wikilist-button-remove-hover: #ff0000 wikilist-button-remove-hover: red
wikilist-toolbar-background: #d3d3d3 wikilist-toolbar-background: #d3d3d3
wikilist-toolbar-foreground: #888888 wikilist-toolbar-foreground: #888888
wikilist-droplink-dragover: #ffc0c0 wikilist-droplink-dragover: rgba(255,192,192,0.5)
wikilist-button-background: #acacac wikilist-button-background: #acacac
wikilist-button-foreground: #000000 wikilist-button-foreground: #000000
+1 -1
View File
@@ -37,7 +37,7 @@ caption: {{$:/language/Search/Standard/Caption}}
inputCancelActions=<<cancel-search-actions>> inputCancelActions=<<cancel-search-actions>>
inputAcceptActions=<<input-accept-actions>> inputAcceptActions=<<input-accept-actions>>
inputAcceptVariantActions=<<input-accept-variant-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>>
configTiddlerFilter="[[$:/state/advancedsearch/standard/currentTab]!is[missing]get[text]] :else[{$:/config/SearchResults/Default}]" configTiddlerFilter="[[$:/state/search/currentTab]!is[missing]get[text]] :else[{$:/config/SearchResults/Default}]"
filterMinLength={{$:/config/Search/MinLength}}/> filterMinLength={{$:/config/Search/MinLength}}/>
</$keyboard> </$keyboard>
</$keyboard> </$keyboard>
+1 -1
View File
@@ -8,7 +8,7 @@ caption: {{$:/language/ControlPanel/Plugins/Caption}}
\whitespace trim \whitespace trim
<$set name="plugin-type" value="""$type$"""> <$set name="plugin-type" value="""$type$""">
<$set name="qualified-state" value=<<qualify "$:/state/plugin-info">>> <$set name="qualified-state" value=<<qualify "$:/state/plugin-info">>>
<$list filter="[!has[draft.of]plugin-type[$type$]sort[name]]" emptyMessage=<<lingo "Empty/Hint">> template="$:/core/ui/Components/plugin-info"/> <$list filter="[all[tiddlers+shadows]!has[draft.of]plugin-type[$type$]!field:hidden[yes]sort[name]]" emptyMessage=<<lingo "Empty/Hint">> template="$:/core/ui/Components/plugin-info"/>
</$set> </$set>
</$set> </$set>
\end \end
@@ -1,5 +1,5 @@
title: $:/core/ui/ControlPanel/Plugins/Installed/Languages title: $:/core/ui/ControlPanel/Plugins/Installed/Languages
tags: $:/tags/ControlPanel/Plugins tags: $:/tags/ControlPanel/Plugins
caption: {{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter="[!has[draft.of]plugin-type[language]]"/>) caption: {{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter="[all[tiddlers+shadows]is[plugin]!field:hidden[yes]plugin-type[language]]"/>)
<<plugin-table language>> <<plugin-table language>>
@@ -1,5 +1,5 @@
title: $:/core/ui/ControlPanel/Plugins/Installed/Plugins title: $:/core/ui/ControlPanel/Plugins/Installed/Plugins
tags: $:/tags/ControlPanel/Plugins tags: $:/tags/ControlPanel/Plugins
caption: {{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter="[!has[draft.of]plugin-type[plugin]]"/>) caption: {{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter="[all[tiddlers+shadows]is[plugin]plugin-type[plugin]]"/>)
<<plugin-table plugin>> <<plugin-table plugin>>
@@ -1,5 +1,5 @@
title: $:/core/ui/ControlPanel/Plugins/Installed/Themes title: $:/core/ui/ControlPanel/Plugins/Installed/Themes
tags: $:/tags/ControlPanel/Plugins tags: $:/tags/ControlPanel/Plugins
caption: {{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter="[!has[draft.of]plugin-type[theme]]"/>) caption: {{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter="[all[tiddlers+shadows]is[plugin]plugin-type[theme]]"/>)
<<plugin-table theme>> <<plugin-table theme>>
@@ -21,6 +21,12 @@ http://$(userName)$.tiddlyspot.com/$path$/
</$reveal> </$reveal>
\end \end
<div class="tc-message-box">
<<lingo ReadOnly>>
</div>
<<lingo Description>> <<lingo Description>>
|<<lingo UserName>> |<$edit-text tiddler="$:/UploadName" default="" tag="input"/> | |<<lingo UserName>> |<$edit-text tiddler="$:/UploadName" default="" tag="input"/> |
+1 -1
View File
@@ -3,7 +3,7 @@ tags: $:/tags/ControlPanel/Saving
caption: {{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}} caption: {{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}
\define lingo-base() $:/language/ControlPanel/Saving/GitService/ \define lingo-base() $:/language/ControlPanel/Saving/GitService/
\define service-name() Gitea \define service-name() ~Gitea
<<lingo Description>> <<lingo Description>>
@@ -1,19 +0,0 @@
caption: {{$:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/Caption}}
tags: $:/tags/ControlPanel/Settings
title: $:/core/ui/ControlPanel/Settings/DefaultTiddlerInfoTab
\whitespace trim
\define lingo-base() $:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/
<$link to="$:/config/TiddlerInfo/Default" class="tc-control-panel-item">
<<lingo Hint>>
</$link>
<$select tiddler="$:/config/TiddlerInfo/Default" class="tc-select">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!is[draft]]">
<option value=<<currentTiddler>>><$transclude field="caption">
<$text text=<<currentTiddler>>/>
</$transclude>
</option>
</$list>
</$select>
+3 -1
View File
@@ -17,7 +17,9 @@ tags: $:/tags/EditTemplate
<$let backgroundColor=<<colour>> > <$let backgroundColor=<<colour>> >
<span class="tc-tag-label tc-tag-list-item tc-small-gap-right" <span class="tc-tag-label tc-tag-list-item tc-small-gap-right"
data-tag-title=<<currentTiddler>> data-tag-title=<<currentTiddler>>
style=`color:$(foregroundColor)$; fill:$(foregroundColor)$; background-color:$(backgroundColor)$;` style.color=<<foregroundColor>>
style.fill=<<foregroundColor>>
style.background-color=<<backgroundColor>>
> >
<$transclude tiddler=<<icon>>/> <$transclude tiddler=<<icon>>/>
<$view field="title" format="text"/> <$view field="title" format="text"/>
+1 -1
View File
@@ -12,7 +12,7 @@ Export the TiddlyWiki core JavaScript code for running with external JavaScript:
tooltip="Export the TiddlyWiki core code for running with external JavaScript" tooltip="Export the TiddlyWiki core code for running with external JavaScript"
aria-label="export TiddlyWiki core" aria-label="export TiddlyWiki core"
class="tc-btn-big-green"> class="tc-btn-big-green">
<$action-sendmessage $message='tm-download-file' $param='$:/core/templates/tiddlywiki5.js' filename=<<jsFileName>> type="application/javascript"/> <$action-sendmessage $message='tm-download-file' $param='$:/core/templates/tiddlywiki5.js' filename=<<jsFileName>>/>
{{$:/core/images/download-button}} {{$:/core/images/download-button}}
<span class="tc-tiny-gap-left"> <span class="tc-tiny-gap-left">
Download TiddlyWiki core Download TiddlyWiki core
-2
View File
@@ -51,7 +51,6 @@ title: $:/core/ui/ImportListing
\end \end
\whitespace trim \whitespace trim
<div class="tc-table-wrapper">
<table class="tc-import-table"> <table class="tc-import-table">
<tbody> <tbody>
<tr> <tr>
@@ -130,4 +129,3 @@ title: $:/core/ui/ImportListing
</$list> </$list>
</tbody> </tbody>
</table> </table>
</div>
@@ -12,7 +12,7 @@ element, and right-click its `src` URI. Save the link as ''$(jsFileName)$''</p>
Export the ~TiddlyWiki core ~JavaScript code for running with external ~JavaScript: Export the ~TiddlyWiki core ~JavaScript code for running with external ~JavaScript:
<$button tooltip="Export the ~TiddlyWiki core code for running with external ~JavaScript" aria-label="export TiddlyWiki core" class="tc-btn-big-green"> <$button tooltip="Export the ~TiddlyWiki core code for running with external ~JavaScript" aria-label="export TiddlyWiki core" class="tc-btn-big-green">
<$list filter="[[$:/boot/boot.js]is[missing]]" variable="ignore" emptyMessage="""<$action-sendmessage $message="tm-download-file" $param="$:/core/templates/tiddlywiki5.js" filename=<<jsFileName>> type="application/javascript"/>""" > <$list filter="[[$:/boot/boot.js]is[missing]]" variable="ignore" emptyMessage="""<$action-sendmessage $message="tm-download-file" $param="$:/core/templates/tiddlywiki5.js" filename=<<jsFileName>>/>""" >
<$action-setfield $tiddler=<<qualify "$:/temp/alert">> text=<<noExportMsg>> subtitle="Export ~TiddllyWiki Core"/> <$action-setfield $tiddler=<<qualify "$:/temp/alert">> text=<<noExportMsg>> subtitle="Export ~TiddllyWiki Core"/>
<$action-sendmessage $message="tm-modal" $param=<<qualify "$:/temp/alert">>/> <$action-sendmessage $message="tm-modal" $param=<<qualify "$:/temp/alert">>/>
</$list> </$list>
+25 -20
View File
@@ -2,26 +2,31 @@ title: $:/core/ui/SideBar/Tools
tags: $:/tags/SideBar tags: $:/tags/SideBar
caption: {{$:/language/SideBar/Tools/Caption}} caption: {{$:/language/SideBar/Tools/Caption}}
\whitespace trim \define lingo-base() $:/language/ControlPanel/
\define config-title()
\procedure lingo-base() $:/language/ControlPanel/ $:/config/PageControlButtons/Visibility/$(listItem)$
\function config-title() [[$:/config/PageControlButtons/Visibility/$(listItem)$]substitute[]] \end
<<lingo Basics/Version/Prompt>> <<version>> <<lingo Basics/Version/Prompt>> <<version>>
<$let tv-config-toolbar-icons="yes" <$set name="tv-config-toolbar-icons" value="yes">
tv-config-toolbar-text="yes"
tv-config-toolbar-class="" <$set name="tv-config-toolbar-text" value="yes">
>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem"> <$set name="tv-config-toolbar-class" value="">
<div class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] tc-sidebar-tools-item +[join[ ]] }}}
data-title=<<listItem>> <$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">
>
<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show" class="tc-tiny-gap-right"/> <div style="position:relative;" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>
<$transclude $tiddler=<<listItem>>/>
<i class="tc-tiny-gap-left tc-muted"> <$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show"/> <$transclude tiddler=<<listItem>>/> <i class="tc-muted"><$transclude tiddler=<<listItem>> field="description"/></i>
<$transclude $tiddler=<<listItem>> $field="description"/>
</i> </div>
</div>
</$list> </$list>
</$let>
</$set>
</$set>
</$set>
+2 -1
View File
@@ -103,7 +103,8 @@ code-body: yes
-Description -Description
-Narrative -Narrative
-[[$:/temp/testcase/draft-title]] -[[$:/temp/testcase/draft-title]]
-[has[plugin-type]] -[[$:/status/RequireReloadDueToPluginChange]]
-[[$:/core]]
-[prefix<tf.state>] -[prefix<tf.state>]
-[prefix[$:/state/popup/export]] -[prefix[$:/state/popup/export]]
-[prefix[$:/HistoryList]] -[prefix[$:/HistoryList]]
+1 -1
View File
@@ -1,4 +1,4 @@
title: $:/core/ui/testcases/actions/Export title: $:/core/ui/testcases/actions/Export
tags: $:/tags/TestCase/Actions tags: $:/tags/TestCase/Actions
<$macrocall $name="exportButton" exportFilter="[all[tiddlers]sort[]] -[prefix[$:/state/]] -Description -Narrative -ExpectedResult -[has[plugin-type]]" lingoBase="$:/language/Buttons/ExportTiddlers/"/> <$macrocall $name="exportButton" exportFilter="[all[tiddlers]sort[]] -[prefix[$:/state/]] -Description -Narrative -ExpectedResult -[[$:/core]]" lingoBase="$:/language/Buttons/ExportTiddlers/"/>
-122
View File
@@ -1,122 +0,0 @@
title: $:/core/ui/ControlPanel/WikiInformation
tags: $:/tags/ControlPanel/Info
caption: <%if [[$:/language/ControlPanel/WikiInformation/Caption]is[shadow]] %>{{$:/language/ControlPanel/WikiInformation/Caption}}<%else%>Wiki Information<%endif%>
subtitle: <%if [[$:/language/ControlPanel/WikiInformation/Caption]is[shadow]] %>{{$:/language/ControlPanel/WikiInformation/Caption}}<%else%>Wiki Information<%endif%>
\procedure lingo-base() $:/language/ControlPanel/WikiInformation/
<!--
A custom implementation of the lingo macro that works even if this tiddler has been copied to an earlier version of TiddlyWiki that doesn't include the necessary lingo tiddlers in the core.
-->
\procedure intrinsic-lingo-Hint()
This page summarises high level information about the configuration of this ~TiddlyWiki. It is designed to enable users to quickly share relevant aspects of the configuration of their ~TiddlyWiki with others, for example when seeking help in one of the forums. No private or personal information is included, and nothing is shared without being explicitly copied and pasted elsewhere
\end intrinsic-lingo-Hint
\procedure intrinsic-lingo-Drag/Caption()
Drag this link to copy this tool to another wiki
\end intrinsic-lingo-Drag/Caption
\procedure lingo(title,mode:"inline")
<%if [<title>addprefix<lingo-base>is[shadow]] %>
<$transclude $tiddler={{{ [<title>addprefix<lingo-base>] }}} $mode=<<mode>>/>
<%else%>
<$transclude $variable={{{ [<title>addprefix[intrinsic-lingo-]] }}} $mode=<<mode>>/>
<%endif%>
\end lingo
\whitespace trim
\procedure capture-item(label,value)
<$action-setfield $tiddler=<<tempWikiInfo>> text={{{ [<tempWikiInfo>get[text]addsuffix<label>addsuffix[: ]addsuffix<value>addsuffix<crlf>] }}}/>
\end capture-item
\procedure capture-item-wikified(label,value)
<$wikify name="text" text=<<value>> mode="inline">
<$transclude
$variable="capture-item"
label=<<label>>
value=<<text>>
/>
</$wikify>
\end capture-item-wikified
\procedure capture-wiki-info(tempWikiInfo)
<$transclude $variable="capture-item-wikified" label="TiddlyWiki Version" value="<<version>>"/>
<$transclude $variable="capture-item" label="Current palette" value={{$:/palette}}/>
<$transclude $variable="capture-item" label="Current theme" value={{$:/theme}}/>
<$transclude $variable="capture-item" label="Current layout" value={{$:/layout}}/>
<$transclude $variable="capture-item" label="Browser language setting" value={{$:/info/browser/language}}/>
<$transclude $variable="capture-item" label="Default type for missing tiddlers" value={{$:/config/DefaultMissingType}}/>
<$transclude $variable="capture-item" label="Auto save setting" value={{$:/config/AutoSave}}/>
<$transclude $variable="capture-item" label="Code wrapping setting" value={{$:/themes/tiddlywiki/vanilla/options/codewrapping}}/>
<$transclude $variable="capture-item" label="Sticky titles setting" value={{$:/themes/tiddlywiki/vanilla/options/stickytitles}}/>
<$transclude $variable="capture-item" label="Sidebar layout setting" value={{$:/themes/tiddlywiki/vanilla/options/sidebarlayout}}/>
<$transclude $variable="capture-item" label="Auto focus field setting for new tiddlers" value={{$:/config/AutoFocus}}/>
<$transclude $variable="capture-item" label="Current storyview setting" value={{$:/view}}/>
<$transclude $variable="capture-item" label="Toolbar text setting" value={{$:/config/Toolbar/Text}}/>
<$transclude $variable="capture-item" label="Toolbar icon setting" value={{$:/config/Toolbar/Icons}}/>
<$transclude $variable="capture-item" label="Button class setting" value={{$:/config/Toolbar/ButtonClass}}/>
<$transclude $variable="capture-item" label="Navigation address bar setting" value={{$:/config/Navigation/UpdateAddressBar}}/>
<$transclude $variable="capture-item" label="Tiddler opening behaviour setting for navigations from outside the story river" value={{$:/config/Navigation/openLinkFromOutsideRiver}}/>
<$transclude $variable="capture-item" label="Tiddler opening behaviour setting for navigations from within the story river" value={{$:/config/Navigation/openLinkFromInsideRiver}}/>
<$transclude $variable="capture-item" label="CamelCase linking setting" value={{$:/config/WikiParserRules/Inline/wikilink}}/>
<$transclude $variable="capture-item" label="Keyboard shortcuts that have been customised" value={{{ [all[tiddlers]prefix[$:/config/shortcuts]] +[join[,]] }}}/>
<$transclude $variable="capture-item" label="Disabled plugins" value={{{ [all[tiddlers]prefix[$:/config/Plugins/Disabled/]] :filter[{!!text}match[yes]] :map[<currentTiddler>removeprefix[$:/config/Plugins/Disabled/]] +[join[,]] }}}/>
<$transclude $variable="capture-item" label="Plugins" value={{{ [has[plugin-type]sort[]] :filter[<currentTiddler>addprefix[$:/config/Plugins/Disabled/]get[text]else[no]!match[yes]] :map[{!!version}addprefix[ - ]addprefix<currentTiddler>] +[addprefix[ ]addprefix<crlf>join[]] }}}/>
\end capture-wiki-info
\procedure template-header()
<details><summary>Wiki Information</summary><pre><code>
\end template-header
\procedure template-footer()
</code></pre></details>
\end template-footer
\procedure display-wiki-info-modal()
<$let
tempWikiInfo="$:/temp/wiki-info"
crlf={{{ [charcode[13],[10]] }}}
>
<$action-sendmessage
$message="tm-modal"
$param="$:/core/ui/ControlPanel/WikiInformation"
isModal="yes"
tempWikiInfo=<<tempWikiInfo>>
/>
<$action-deletetiddler $tiddler=<<tempWikiInfo>>/>
<$action-setfield $tiddler=<<tempWikiInfo>> text=<<template-header>>/>
<$transclude
$variable="capture-wiki-info"
tempWikiInfo=<<tempWikiInfo>>
/>
<$action-setfield $tiddler=<<tempWikiInfo>> text={{{ [<tempWikiInfo>get[text]addsuffix<template-footer>] }}}/>
</$let>
\end display-wiki-info-modal
\procedure story-content()
<<lingo title:"Hint" mode:"block">>
<$button>
<<display-wiki-info-modal>>
Click to generate wiki information report
</$button>
<$link to="$:/core/ui/ControlPanel/WikiInformation">
<<lingo title:"Drag/Caption" mode:"inline">>
</$link>
\end story-content
\procedure modal-content()
<p>
<$transclude $variable="copy-to-clipboard" src={{{ [<tempWikiInfo>get[text]] }}}/>
</p>
<p>
<$edit-text tiddler=<<tempWikiInfo>> tag="textarea" disabled="yes" class="tc-max-width"/>
</p>
\end modal-content
<$transclude $variable={{{ [<isModal>match[yes]then[modal-content]else[story-content]] }}} $mode="block"/>
+1 -1
View File
@@ -1,6 +1,6 @@
title: $:/config/OfficialPluginLibrary title: $:/config/OfficialPluginLibrary
tags: $:/tags/PluginLibrary tags: $:/tags/PluginLibrary
url: https://tiddlywiki.com/library/v5.3.8/index.html url: https://tiddlywiki.com/library/v5.3.7/index.html
caption: {{$:/language/OfficialPluginLibrary}} caption: {{$:/language/OfficialPluginLibrary}}
{{$:/language/OfficialPluginLibrary/Hint}} {{$:/language/OfficialPluginLibrary/Hint}}
+19 -22
View File
@@ -1,58 +1,55 @@
title: $:/core/macros/colour-picker title: $:/core/macros/colour-picker
tags: $:/tags/Macro tags: $:/tags/Macro
\define colour-picker-update-recent() \procedure colour-picker-update-recent()
<$action-listops <$action-listops
$tiddler="$:/config/ColourPicker/Recent" $tiddler="$:/config/ColourPicker/Recent"
$subfilter="$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]" $subfilter="[<colour-picker-value>] [list[$:/config/ColourPicker/Recent]remove<colour-picker-value>] +[limit[8]]"
/> />
\end \end
\define colour-picker-inner(actions) \procedure colour-picker-inner(actions)
<$button tag="a" tooltip="""$(colour-picker-value)$"""> <$button tag="a" tooltip=<<colour-picker-value>>>
$(colour-picker-update-recent)$ <<colour-picker-update-recent>>
<$transclude $variable="__actions__"/> <$transclude $variable="actions"/>
<span style.display="inline-block" style.backgroundColor=<<colour-picker-value>> style.width="100%" style.height="100%" style.borderRadius="50%"/>
<span style="display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;"/>
</$button> </$button>
\end \end
\define colour-picker-recent-inner(actions)
\whitespace trim \whitespace trim
<$set name="colour-picker-value" value="$(recentColour)$"> \procedure colour-picker-recent-inner(actions)
<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/> <$set name="colour-picker-value" value=<<recentColour>>>
<$transclude $variable="colour-picker-inner" actions=<<actions>>/>
</$set> </$set>
\end \end
\define colour-picker-recent(actions) \procedure colour-picker-recent(actions)
\whitespace trim
{{$:/language/ColourPicker/Recent}}<$list filter="[list[$:/config/ColourPicker/Recent]]" variable="recentColour"> {{$:/language/ColourPicker/Recent}}<$list filter="[list[$:/config/ColourPicker/Recent]]" variable="recentColour">
&#32; &#32;
<$macrocall $name="colour-picker-recent-inner" actions=<<__actions__>>/> <$transclude $variable="colour-picker-recent-inner" actions=<<actions>>/>
</$list> </$list>
\end \end
\define colour-picker(actions) \procedure colour-picker(actions)
\whitespace trim
<div class="tc-colour-chooser"> <div class="tc-colour-chooser">
<$macrocall $name="colour-picker-recent" actions=<<__actions__>>/> <$transclude $variable="colour-picker-recent" actions=<<actions>>/>
--- ---
<$list filter="LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black" variable="colour-picker-value"> <$list filter="LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black" variable="colour-picker-value">
&#32; &#32;
<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/> <$transclude $variable="colour-picker-inner" actions=<<actions>>/>
</$list> </$list>
--- ---
<$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder=""/> <$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder="" class="tc-tiny-gap-right"/>
&#32;
<$edit-text tiddler="$:/config/ColourPicker/New" type="color" tag="input"/> <$edit-text tiddler="$:/config/ColourPicker/New" type="color" tag="input"/>
<$set name="colour-picker-value" value={{$:/config/ColourPicker/New}}> <$set name="colour-picker-value" value={{$:/config/ColourPicker/New}}>
<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/> <%if [{$:/config/ColourPicker/New}!is[blank]] %>
<$transclude $variable="colour-picker-inner" actions=<<actions>>/>
<%endif%>
</$set> </$set>
</div> </div>
+10 -8
View File
@@ -3,9 +3,11 @@ tags: $:/tags/Macro
\whitespace trim \whitespace trim
\procedure copy-to-clipboard(src,class:"tc-btn-invisible",style) \procedure copy-to-clipboard(src,class:"tc-btn-invisible",style,type:"text/plain",plain)
<$button message="tm-copy-to-clipboard" \procedure copy-to-clipboard-actions()
param=<<src>> <$action-sendmessage $message="tm-copy-to-clipboard" $param=<<src>> type=<<type>> plainText=<<plain>>/>
\end copy-to-clipboard-actions
<$button actions=<<copy-to-clipboard-actions>>
class=<<class>> class=<<class>>
style=<<style>> style=<<style>>
tooltip={{$:/language/Buttons/CopyToClipboard/Hint}} tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}
@@ -15,12 +17,12 @@ tags: $:/tags/Macro
<$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/> <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>
</span> </span>
</$button> </$button>
\end \end copy-to-clipboard
\procedure copy-to-clipboard-above-right(src,class:"tc-btn-invisible",style) \procedure copy-to-clipboard-above-right(src,class:"tc-btn-invisible",style,type:"text/plain")
<div style="position: relative;"> <div style.position="relative">
<div style="position: absolute; bottom: 0; right: 0;"> <div style.position="absolute" style.bottom="0" style.right="0">
<$macrocall $name="copy-to-clipboard" src=<<src>> class=<<class>> style=<<style>>/> <$transclude $variable="copy-to-clipboard" src=<<src>> class=<<class>> style=<<style>> type=<<type>> plain=<<plain>>/>
</div> </div>
</div> </div>
\end \end
+1 -1
View File
@@ -1,7 +1,7 @@
title: $:/core/macros/dumpvariables title: $:/core/macros/dumpvariables
tags: $:/tags/Macro tags: $:/tags/Macro
\define dumpvariables() \procedure dumpvariables()
\whitespace trim \whitespace trim
<ul> <ul>
<$list filter="[variables[]]" variable="varname"> <$list filter="[variables[]]" variable="varname">
+13 -16
View File
@@ -1,39 +1,36 @@
created: 20170715180840889
modified: 20170715180914005
tags: $:/tags/Macro tags: $:/tags/Macro
title: $:/core/macros/image-picker title: $:/core/macros/image-picker
type: text/vnd.tiddlywiki type: text/vnd.tiddlywiki
\define image-picker-thumbnail(actions) \procedure image-picker-thumbnail(actions)
<$button tag="a" tooltip="""$(imageTitle)$"""><$transclude $variable="__actions__"/><$transclude tiddler=<<imageTitle>>/></$button> <$button tag="a" tooltip=<<imageTitle>>><$transclude $variable="actions"/><$transclude tiddler=<<imageTitle>>/></$button>
\end \end
\define image-picker-list(filter,actions) \procedure image-picker-list(filter,actions)
\whitespace trim \whitespace trim
<$list filter="""$filter$""" variable="imageTitle"> <$list filter=<<filter>> variable="imageTitle">
<$macrocall $name="image-picker-thumbnail" actions=<<__actions__>>/> <$transclude $variable="image-picker-thumbnail" actions=<<actions>>/>
&#32; &#32;
</$list> </$list>
\end \end
\define image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]",subfilter:"") \procedure image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]",subfilter:"")
\whitespace trim \whitespace trim
<div class="tc-image-chooser"> <div class="tc-image-chooser">
<$vars state-system=<<qualify "$:/state/image-picker/system">>> <$let state-system=<<qualify "$:/state/image-picker/system">> tv-filter={{{ [<filter>search-replace[$subfilter$],<subfilter>] }}}>
<$checkbox tiddler=<<state-system>> field="text" checked="show" unchecked="hide" default="hide"> <$checkbox tiddler=<<state-system>> field="text" checked="show" unchecked="hide" default="hide">
&#32; <span class="tc-tiny-gap-left">{{$:/language/SystemTiddlers/Include/Prompt}}</span>
{{$:/language/SystemTiddlers/Include/Prompt}}
</$checkbox> </$checkbox>
<$reveal state=<<state-system>> type="match" text="hide" default="hide" tag="div"> <$reveal state=<<state-system>> type="match" text="hide" default="hide" tag="div">
<$macrocall $name="image-picker-list" filter="""$filter$ +[!is[system]]""" actions=<<__actions__>>/> <$transclude $variable="image-picker-list" filter=`$(tv-filter)$ +[!is[system]]` actions=<<actions>>/>
</$reveal> </$reveal>
<$reveal state=<<state-system>> type="nomatch" text="hide" default="hide" tag="div"> <$reveal state=<<state-system>> type="nomatch" text="hide" default="hide" tag="div">
<$macrocall $name="image-picker-list" filter="""$filter$""" actions=<<__actions__>>/> <$transclude $variable="image-picker-list" filter=<<tv-filter>> actions=<<actions>>/>
</$reveal> </$reveal>
</$vars> </$let>
</div> </div>
\end \end
\define image-picker-include-tagged-images(actions) \procedure image-picker-include-tagged-images(actions)
<$macrocall $name="image-picker" filter="[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]" actions=<<__actions__>>/> <$transclude $variable="image-picker" filter="[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]" actions=<<actions>>/>
\end \end
+36 -39
View File
@@ -1,14 +1,18 @@
title: $:/core/macros/list title: $:/core/macros/list
tags: $:/tags/Macro tags: $:/tags/Macro
\define list-links(filter,type:"ul",subtype:"li",class:"",emptyMessage,field:"caption") \procedure list-links-draggable-drop-actions()
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
\end
\whitespace trim \whitespace trim
<$genesis $type=<<__type__>> class=<<__class__>>> \procedure list-links(filter,type:"ul",subtype:"li",class:"",emptyMessage,field:"caption")
<$list filter=<<__filter__>> emptyMessage=<<__emptyMessage__>>> <$genesis $type=<<type>> class=<<class>>>
<$genesis $type=<<__subtype__>>> <$list filter=<<filter>> emptyMessage=<<emptyMessage>>>
<$genesis $type=<<subtype>>>
<$link to={{!!title}}> <$link to={{!!title}}>
<$let tv-wikilinks="no"> <$let tv-wikilinks="no">
<$transclude field=<<__field__>>> <$transclude field=<<field>>>
<$view field="title"/> <$view field="title"/>
</$transclude> </$transclude>
</$let> </$let>
@@ -18,24 +22,19 @@ tags: $:/tags/Macro
</$genesis> </$genesis>
\end \end
\define list-links-draggable-drop-actions() \procedure list-links-draggable(tiddler,field:"list",emptyMessage,type:"ul",subtype:"li",class:"",itemTemplate)
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
\end
\define list-links-draggable(tiddler,field:"list",emptyMessage,type:"ul",subtype:"li",class:"",itemTemplate)
\whitespace trim
<span class="tc-links-draggable-list"> <span class="tc-links-draggable-list">
<$vars targetTiddler="""$tiddler$""" targetField="""$field$"""> <$let targetTiddler=<<tiddler>> targetField=<<field>>>
<$genesis $type=<<__type__>> class="$class$"> <$genesis $type=<<type>> class=<<class>>>
<$list filter="[list[$tiddler$!!$field$]]" emptyMessage=<<__emptyMessage__>>> <$list filter="[<tiddler>get<field>enlist-input[]]" emptyMessage=<<emptyMessage>>>
<$droppable <$droppable
actions=<<list-links-draggable-drop-actions>> actions=<<list-links-draggable-drop-actions>>
tag="""$subtype$""" tag=<<subtype>>
enable=<<tv-enable-drag-and-drop>> enable=<<tv-enable-drag-and-drop>>
> >
<div class="tc-droppable-placeholder"/> <div class="tc-droppable-placeholder"/>
<div> <div>
<$transclude tiddler="""$itemTemplate$"""> <$transclude tiddler=<<itemTemplate>>>
<$link to={{!!title}}> <$link to={{!!title}}>
<$let tv-wikilinks="no"> <$let tv-wikilinks="no">
<$transclude field="caption"> <$transclude field="caption">
@@ -60,50 +59,48 @@ tags: $:/tags/Macro
</$droppable> </$droppable>
</$tiddler> </$tiddler>
</$genesis> </$genesis>
</$vars> </$let>
</span> </span>
\end \end
\define list-tagged-draggable-drop-actions(tag) \procedure list-tagged-draggable-drop-actions(tag)
\whitespace trim
<!-- Save the current ordering of the tiddlers with this tag --> <!-- Save the current ordering of the tiddlers with this tag -->
<$set name="order" filter="[<__tag__>tagging[]]"> <$set name="order" filter="[<tag>tagging[]]">
<!-- Remove any list-after or list-before fields from the tiddlers with this tag --> <!-- Remove any list-after or list-before fields from the tiddlers with this tag -->
<$list filter="[<__tag__>tagging[]]"> <$list filter="[<tag>tagging[]]">
<$action-deletefield $field="list-before"/> <$action-deletefield $field="list-before"/>
<$action-deletefield $field="list-after"/> <$action-deletefield $field="list-after"/>
</$list> </$list>
<!-- Save the new order to the Tag Tiddler --> <!-- Save the new order to the Tag Tiddler -->
<$action-listops $tiddler=<<__tag__>> $field="list" $filter="+[enlist<order>] +[insertbefore<actionTiddler>,<currentTiddler>]"/> <$action-listops $tiddler=<<tag>> $field="list" $filter="+[enlist<order>] +[insertbefore<actionTiddler>,<currentTiddler>]"/>
<!-- Make sure the newly added item has the right tag --> <!-- Make sure the newly added item has the right tag -->
<!-- Removing this line makes dragging tags within the dropdown work as intended --> <!-- Removing this line makes dragging tags within the dropdown work as intended -->
<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>--> <!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<tag>>/>-->
<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag --> <!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->
<$list filter="[<actionTiddler>!contains:tags<__tag__>]"> <$list filter="[<actionTiddler>!contains:tags<tag>]">
<$fieldmangler tiddler=<<actionTiddler>>> <$fieldmangler tiddler=<<actionTiddler>>>
<$action-sendmessage $message="tm-add-tag" $param=<<__tag__>>/> <$action-sendmessage $message="tm-add-tag" $param=<<tag>>/>
</$fieldmangler> </$fieldmangler>
</$list> </$list>
</$set> </$set>
\end \end
\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:"div",storyview:"") \procedure list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:"div",storyview:"")
\whitespace trim
<span class="tc-tagged-draggable-list"> <span class="tc-tagged-draggable-list">
<$set name="tag" value=<<__tag__>>> <$set name="tag" value=<<tag>>>
<$list <$list
filter="[<__tag__>tagging[]$subFilter$]" filter=`[<tag>tagging[]$(subFilter)$]`
emptyMessage=<<__emptyMessage__>> emptyMessage=<<emptyMessage>>
storyview=<<__storyview__>> storyview=<<storyview>>
> >
<$genesis $type=<<__elementTag__>> class="tc-menu-list-item"> <$genesis $type=<<elementTag>> class="tc-menu-list-item">
<$droppable <$droppable
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>""" actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<tag>>/>"""
enable=<<tv-enable-drag-and-drop>> enable=<<tv-enable-drag-and-drop>>
> >
<$genesis $type=<<__elementTag__>> class="tc-droppable-placeholder"/> <$genesis $type=<<elementTag>> class="tc-droppable-placeholder"/>
<$genesis $type=<<__elementTag__>>> <$genesis $type=<<elementTag>>>
<$transclude tiddler="""$itemTemplate$"""> <$transclude tiddler=<<itemTemplate>>>
<$link to={{!!title}}> <$link to={{!!title}}>
<$let tv-wikilinks="no"> <$let tv-wikilinks="no">
<$transclude field="caption"> <$transclude field="caption">
@@ -118,11 +115,11 @@ tags: $:/tags/Macro
</$list> </$list>
<$tiddler tiddler=""> <$tiddler tiddler="">
<$droppable <$droppable
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>""" actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<tag>>/>"""
enable=<<tv-enable-drag-and-drop>> enable=<<tv-enable-drag-and-drop>>
> >
<$genesis $type=<<__elementTag__>> class="tc-droppable-placeholder"/> <$genesis $type=<<elementTag>> class="tc-droppable-placeholder"/>
<$genesis $type=<<__elementTag__>> style="height:0.5em;"/> <$genesis $type=<<elementTag>> style="height:0.5em;"/>
</$droppable> </$droppable>
</$tiddler> </$tiddler>
</$set> </$set>
+13 -13
View File
@@ -1,28 +1,28 @@
title: $:/core/macros/translink title: $:/core/macros/translink
tags: $:/tags/Macro tags: $:/tags/Macro
\define translink(title,mode:"block") \procedure translink(title,mode:"block")
\whitespace trim \whitespace trim
<$list filter="[<__mode__>match[block]]"> <%if [<mode>match[block]] %>
<div class="tc-translink"> <div class="tc-translink">
<div> <div>
<$link to="""$title$"""> <$link to=<<title>>>
<h1><$text text="""$title$"""/></h1> <h1><$text text=<<title>>/></h1>
</$link> </$link>
<$transclude tiddler="""$title$""" mode="block"> <$transclude tiddler=<<title>> mode="block">
<$set name="currentTiddler" value="""$title$"""><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set> <$set name="currentTiddler" value=<<title>>><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
</$transclude> </$transclude>
</div> </div>
</div> </div>
</$list> <%endif%>
<$list filter="[<__mode__>match[inline]]"> <%if [<mode>match[inline]] %>
<span class="tc-translink"> <span class="tc-translink">
<$link to="""$title$"""> <$link to=<<title>> class="tc-tiny-gap-right">
<$text text="""$title$"""/> <$text text=<<title>>/>
</$link> </$link>
&#32;(<$transclude tiddler="""$title$""" mode="inline"> (<$transclude tiddler=<<title>> mode="inline">
<$set name="currentTiddler" value="""$title$"""><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set> <$set name="currentTiddler" value=<<title>>><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
</$transclude>) </$transclude>)
</span> </span>
</$list> <%endif%>
\end \end
+20 -24
View File
@@ -1,62 +1,58 @@
title: $:/core/macros/tree title: $:/core/macros/tree
tags: $:/tags/Macro tags: $:/tags/Macro
\define leaf-link(full-title,chunk,separator: "/") \procedure leaf-link(full-title,chunk,separator: "/")
<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link> <$link to=<<full-title>>><$text text=<<chunk>>/></$link>
\end \end
\define leaf-node(prefix,chunk)
\whitespace trim \whitespace trim
\procedure leaf-node(prefix,chunk)
<li> <li>
<$list filter="[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]" variable="full-title"> <$list filter="[<prefix>addsuffix<chunk>is[shadow]] [<prefix>addsuffix<chunk>is[tiddler]]" variable="full-title">
<$list filter="[<full-title>removeprefix<__prefix__>]" variable="chunk"> <$list filter="[<full-title>removeprefix<prefix>]" variable="chunk">
<span>{{$:/core/images/file}}</span>&#32;<$macrocall $name="leaf-link" full-title=<<full-title>> chunk=<<chunk>>/> <span class="tc-tiny-gap-right">{{$:/core/images/file}}</span><$transclude $variable="leaf-link" full-title=<<full-title>> chunk=<<chunk>>/>
</$list> </$list>
</$list> </$list>
</li> </li>
\end \end
\define branch-node(prefix,chunk,separator: "/") \procedure branch-node(prefix,chunk,separator: "/")
\whitespace trim
<li> <li>
<$set name="reveal-state" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}> <$set name="reveal-state" value={{{ [[$:/state/tree/]addsuffix<prefix>addsuffix<chunk>] }}}>
<$reveal type="nomatch" stateTitle=<<reveal-state>> text="show"> <$reveal type="nomatch" stateTitle=<<reveal-state>> text="show">
<$button setTitle=<<reveal-state>> setTo="show" class="tc-btn-invisible"> <$button setTitle=<<reveal-state>> setTo="show" class="tc-btn-invisible">
{{$:/core/images/folder}}&#32;<$text text=<<__chunk__>>/> {{$:/core/images/folder}}&#32;<$text text=<<chunk>>/>
</$button> </$button>
</$reveal> </$reveal>
<$reveal type="match" stateTitle=<<reveal-state>> text="show"> <$reveal type="match" stateTitle=<<reveal-state>> text="show">
<$button setTitle=<<reveal-state>> setTo="hide" class="tc-btn-invisible"> <$button setTitle=<<reveal-state>> setTo="hide" class="tc-btn-invisible">
{{$:/core/images/folder}}&#32;<$text text=<<__chunk__>>/> {{$:/core/images/folder}}&#32;<$text text=<<chunk>>/>
</$button> </$button>
</$reveal> </$reveal>
&#32; <span class="tc-tiny-gap-left">(<$count filter="[all[shadows+tiddlers]removeprefix<prefix>removeprefix<chunk>] -[<prefix>addsuffix<chunk>]"/>)</span>
<span>(<$count filter="[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]"/>)</span>
<$reveal type="match" stateTitle=<<reveal-state>> text="show"> <$reveal type="match" stateTitle=<<reveal-state>> text="show">
<$macrocall $name="tree-node" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/> <$transclude $variable="tree-node" prefix={{{ [<prefix>addsuffix<chunk>] }}} separator=<<separator>>/>
</$reveal> </$reveal>
</$set> </$set>
</li> </li>
\end \end
\define tree-node(prefix,separator: "/") \procedure tree-node(prefix,separator: "/")
\whitespace trim
<ol> <ol>
<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]" variable="chunk"> <$list filter="[all[shadows+tiddlers]removeprefix<prefix>splitbefore<separator>sort[]!suffix<separator>]" variable="chunk">
<$macrocall $name="leaf-node" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/> <$transclude $variable="leaf-node" prefix=<<prefix>> chunk=<<chunk>> separator=<<separator>>/>
</$list> </$list>
<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]" variable="chunk"> <$list filter="[all[shadows+tiddlers]removeprefix<prefix>splitbefore<separator>sort[]suffix<separator>]" variable="chunk">
<$macrocall $name="branch-node" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/> <$transclude $variable="branch-node" prefix=<<prefix>> chunk=<<chunk>> separator=<<separator>>/>
</$list> </$list>
</ol> </ol>
\end \end
\define tree(prefix: "$:/",separator: "/") \procedure tree(prefix: "$:/",separator: "/")
\whitespace trim
<div class="tc-tree"> <div class="tc-tree">
<span><$text text=<<__prefix__>>/></span> <span><$text text=<<prefix>>/></span>
<div> <div>
<$macrocall $name="tree-node" prefix=<<__prefix__>> separator=<<__separator__>>/> <$transclude $variable="tree-node" prefix=<<prefix>> separator=<<separator>>/>
</div> </div>
</div> </div>
\end \end
@@ -1,4 +0,0 @@
title: $:/coreURL
tags: $:/tags/Global
\function coreURL() [[../../../tiddlywikicore-$(version)$.js]substitute[]]
+1 -4
View File
@@ -11,9 +11,6 @@
], ],
"build": { "build": {
"index": [ "index": [
"--rendertiddler","$:/core/save/all","classicparserdemo.html","text/plain"], "--rendertiddler","$:/core/save/all","classicparserdemo.html","text/plain"]
"external": [
"--render","$:/core/save/all-external-js","classicparserdemo.html","text/plain"
]
} }
} }
@@ -1,4 +0,0 @@
title: $:/coreURL
tags: $:/tags/Global
\function coreURL() [[../../../tiddlywikicore-$(version)$.js]substitute[]]
@@ -11,7 +11,6 @@ The ~CodeMirror plugin can be extended with ~AddOns for more functionality:
* Keymaps in the style of Emacs, Sublime Text or Vim * Keymaps in the style of Emacs, Sublime Text or Vim
* Closing Brackets * Closing Brackets
* Closing Tags * Closing Tags
* Display trailing whitespace
NOTE: This demo has the ''Sublime Text'' keymap installed. NOTE: This demo has the ''Sublime Text'' keymap installed.
+2 -10
View File
@@ -8,16 +8,11 @@
"tiddlywiki/codemirror-search-replace", "tiddlywiki/codemirror-search-replace",
"tiddlywiki/codemirror-fullscreen-editing", "tiddlywiki/codemirror-fullscreen-editing",
"tiddlywiki/codemirror-mode-xml", "tiddlywiki/codemirror-mode-xml",
"tiddlywiki/codemirror-mode-htmlembedded",
"tiddlywiki/codemirror-mode-htmlmixed",
"tiddlywiki/codemirror-mode-javascript", "tiddlywiki/codemirror-mode-javascript",
"tiddlywiki/codemirror-mode-css", "tiddlywiki/codemirror-mode-css",
"tiddlywiki/codemirror-mode-x-tiddlywiki", "tiddlywiki/codemirror-mode-x-tiddlywiki",
"tiddlywiki/codemirror-mode-markdown", "tiddlywiki/codemirror-mode-markdown",
"tiddlywiki/codemirror-trailingspace", "tiddlywiki/codemirror-keymap-sublime-text"
"tiddlywiki/codemirror-keymap-emacs",
"tiddlywiki/codemirror-keymap-sublime-text",
"tiddlywiki/codemirror-keymap-vim"
], ],
"themes": [ "themes": [
"tiddlywiki/vanilla", "tiddlywiki/vanilla",
@@ -27,9 +22,6 @@
], ],
"build": { "build": {
"index": [ "index": [
"--rendertiddler","$:/core/save/all","codemirrordemo.html","text/plain"], "--rendertiddler","$:/core/save/all","codemirrordemo.html","text/plain"]
"external": [
"--render","$:/core/save/all-external-js","codemirrordemo.html","text/plain"
]
} }
} }
@@ -1,5 +1,5 @@
created: 20190809095728085 created: 20190809095728085
modified: 20250707151538845 modified: 20190809123445125
title: Releasing a new version of TiddlyWiki title: Releasing a new version of TiddlyWiki
type: text/vnd.tiddlywiki type: text/vnd.tiddlywiki
@@ -15,35 +15,32 @@ type: text/vnd.tiddlywiki
# Adjust the modified time of HelloThere # Adjust the modified time of HelloThere
# Make sure ''master'' is fully committed # Make sure ''master'' is fully committed
!! Update Readmes and release note !! Update Readmes
# Edit `package.json` to the new version number # Edit `package.json` to the new version number
# Run `./bin/readme-bld.sh` to build the readme files # Run `./bin/readme-bld.sh` to build the readme files
# Commit the new readme files to ''master'' # Commit the new readme files to ''master''
# Restore `package.json` to the previous version number # Restore `package.json` to the previous version number
# Adjust the link for "GitHub for detailed change history of this release" in the release note
# Add the credits for the new release banner to the release note, including a link to the GitHub instance of the image from the commit history
!! Make New Release !! Make New Release
# Run `./bin/verbump "5.1.3"` (substituting the correct version number) to update the version number and assign it a tag # Run `./bin/verbump "5.1.3"` (substituting the correct version number) to update the version number, assign it a tag
# Run `./bin/npm-publish.sh` to publish the release to npm # Run `./bin/npm-publish.sh` to publish the release to npm
# Verify that the new release of TiddlyWiki is available at https://www.npmjs.org/package/tiddlywiki # Verify that the new release of TiddlyWiki is available at https://www.npmjs.org/package/tiddlywiki
!! Update tiddlywiki.com release !! Update tiddlywiki.com release
# Update ''tiddlywiki-com'' from ''master'' and push to ~GitHub # Update ''tiddlywiki-com'' from ''master'' and push to ~GitHub
# Wait until https://tiddlywiki.com is updated with the new release
!! Announcements !! Cleaning Up
# Announce the new release on [[TalkTW|https://talk.tiddlywiki.org]] # Tweet the release with the text "TiddlyWiki v5.x.x released to https://tiddlywiki.com #newtiddlywikirelease"
!! Preparation for the next release in ''master'' !! Preparation for the next release in ''master''
# Adjust version number in `package.json` # Adjust version number in `package.json`
# Adjust version number in `bin/build-site.sh` # Adjust version number in `bin/build-site.sh`
# Adjust version number in [[$:/config/OfficialPluginLibrary]] (both in `editions/tw5.com` and `editions/prerelease/tiddlers/system`) and [[$:/config/LocalPluginLibrary]] # Adjust version number in [[$:/config/OfficialPluginLibrary]] (both in `editions/tw5.com` and `editions/prerelease/tiddlers/system`) and [[$:/config/LocalPluginLibrary]]
# Create temporary new release banner # Adjust new release banner
# Create the release note for the new release # Create the release note for the new release
# Commit changes to ''master'' and push to ~GitHub # Commit changes to ''master'' and push to ~GitHub
@@ -28,4 +28,5 @@ Note that JavaScript macros work on both the client and the server, and so do no
!! Macro Behaviour !! Macro Behaviour
Macros are just used to return a chunk of wikitext for further processing. They should not make modifications to tiddlers in the wiki store. The reason is that you cannot control when the macro is called; it may be called repeatedly as part of refresh processing. So it is important that macros do not have any other side effects beyond generating their text. Macros are just used to return a chunk of wikitext for further processing. They should not make modifications to tiddlers in the wiki store. The reason is that you cannott control when the macro is called; it may be called repeatedly as part of refresh processing. So it is important that macros do not have any other side effects beyond generating their text.
@@ -34,11 +34,13 @@ Suppose we want to make a filter operator that returns every other tiddler from
We make a new tiddler, set its `type` and `module-type` appropriately, and begin writing the code: We make a new tiddler, set its `type` and `module-type` appropriately, and begin writing the code:
``` ```
(function(){
"use strict"; "use strict";
exports.everyother = function(source, operator, options) { exports.everyother = function(source, operator, options) {
// TODO // TODO
} }
})();
``` ```
For the example filter syntax, our function will be called with For the example filter syntax, our function will be called with
@@ -52,6 +54,7 @@ As is usually the case, we don't care about `operator.operator` here (since that
We could implement the operator by iterating over the input tiddlers and explicitly building a result array of titles: We could implement the operator by iterating over the input tiddlers and explicitly building a result array of titles:
``` ```
(function(){
"use strict"; "use strict";
exports.everyother = function(source, operator, options) { exports.everyother = function(source, operator, options) {
@@ -63,6 +66,7 @@ exports.everyother = function(source, operator, options) {
}); });
return result; return result;
} }
})();
``` ```
That is, we supply a callback to `source` that negates `include` each time through (in order to grab every other result) and pushes the `title` of every other tiddler onto the result. That is, we supply a callback to `source` that negates `include` each time through (in order to grab every other result) and pushes the `title` of every other tiddler onto the result.
@@ -70,6 +74,7 @@ That is, we supply a callback to `source` that negates `include` each time throu
Alternatively, we can return our own iterator, by returning a function that accepts a similar callback and only calls it on every other tiddler: Alternatively, we can return our own iterator, by returning a function that accepts a similar callback and only calls it on every other tiddler:
``` ```
(function(){
"use strict"; "use strict";
exports.everyother = function(source, operator, options) { exports.everyother = function(source, operator, options) {
@@ -81,6 +86,7 @@ exports.everyother = function(source, operator, options) {
}); });
}; };
} }
})();
``` ```
Either way, we could interpret the `!` flag on the filter, if present, to mean that we want the //other// half of the tiddlers, by using it to set the initial value of `include`: `var include = operator.prefix !== "!";` Either way, we could interpret the `!` flag on the filter, if present, to mean that we want the //other// half of the tiddlers, by using it to set the initial value of `include`: `var include = operator.prefix !== "!";`
@@ -40,7 +40,10 @@ module-type: startup
YOUR DISCRCRIPTION COMES HERE! YOUR DISCRCRIPTION COMES HERE!
\*/ \*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false, exports: true */
"use strict"; "use strict";
// Export name and synchronous status // Export name and synchronous status
@@ -60,4 +63,6 @@ exports.startup = function() {
}); });
}; };
})();
``` ```
@@ -11,7 +11,10 @@ The wikitext parser subclassing mechanism makes it possible for custom parsers t
Here is an example of a subclass of the checkbox widget that adds logging to the event handler: Here is an example of a subclass of the checkbox widget that adds logging to the event handler:
```js ```js
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict"; "use strict";
var WikiParser = require("$:/core/modules/parsers/wikiparser/wikiparser.js")["text/vnd.tiddlywiki"], var WikiParser = require("$:/core/modules/parsers/wikiparser/wikiparser.js")["text/vnd.tiddlywiki"],
@@ -35,4 +38,5 @@ var MyCustomWikiParser = function(type,text,options) {
exports["text/vnd.my-custom-type"] = MyCustomWikiParser; exports["text/vnd.my-custom-type"] = MyCustomWikiParser;
})();
``` ```
@@ -26,7 +26,10 @@ module-type: widget-subclass
Widget base class Widget base class
\*/ \*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict"; "use strict";
exports.baseClass = "checkbox"; // Extend the <$checkbox> widget exports.baseClass = "checkbox"; // Extend the <$checkbox> widget
@@ -47,4 +50,5 @@ exports.prototype.handleChangeEvent = function(event) {
console.log("Checkbox status:",this.inputDomNode.checked); console.log("Checkbox status:",this.inputDomNode.checked);
}; };
})();
``` ```
@@ -1,4 +0,0 @@
title: $:/coreURL
tags: $:/tags/Global
\function coreURL() [[../../../tiddlywikicore-$(version)$.js]substitute[]]
+1 -4
View File
@@ -9,9 +9,6 @@
], ],
"build": { "build": {
"index": [ "index": [
"--rendertiddler","$:/core/save/all","index.html","text/plain"], "--rendertiddler","$:/core/save/all","index.html","text/plain"]
"external": [
"--render","$:/core/save/all-external-js","index.html","text/plain"
]
} }
} }
@@ -1,4 +0,0 @@
title: $:/coreURL
tags: $:/tags/Global
\function coreURL() [[../../../tiddlywikicore-$(version)$.js]substitute[]]
-3
View File
@@ -15,9 +15,6 @@
"build": { "build": {
"index": [ "index": [
"--render","$:/core/save/all","index.html","text/plain"], "--render","$:/core/save/all","index.html","text/plain"],
"external": [
"--render","$:/core/save/all-external-js","index.html","text/plain"
],
"favicon": [], "favicon": [],
"static": [], "static": [],
"empty": [], "empty": [],
@@ -1,4 +0,0 @@
title: $:/coreURL
tags: $:/tags/Global
\function coreURL() [[../../../tiddlywikicore-$(version)$.js]substitute[]]
+1 -4
View File
@@ -16,9 +16,6 @@
"--render","$:/core/templates/static.template.html","static.html","text/plain", "--render","$:/core/templates/static.template.html","static.html","text/plain",
"--render","$:/core/templates/alltiddlers.template.html","alltiddlers.html","text/plain", "--render","$:/core/templates/alltiddlers.template.html","alltiddlers.html","text/plain",
"--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain","$:/core/templates/static.tiddler.html", "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain","$:/core/templates/static.tiddler.html",
"--render","$:/core/templates/static.template.css","static/static.css","text/plain"], "--render","$:/core/templates/static.template.css","static/static.css","text/plain"]
"external": [
"--render","$:/core/save/all-external-js","highlightdemo.html","text/plain"
]
} }
} }
@@ -1,4 +0,0 @@
title: $:/coreURL
tags: $:/tags/Global
\function coreURL() [[../../../tiddlywikicore-$(version)$.js]substitute[]]
-3
View File
@@ -19,9 +19,6 @@
"--screenshot", "--screenshot",
"[[$:/plugins/tiddlywiki/innerwiki/examples]]", "[[$:/plugins/tiddlywiki/innerwiki/examples]]",
"4" "4"
],
"external": [
"--render","$:/core/save/all-external-js","index.html","text/plain"
] ]
} }
} }
@@ -1,30 +0,0 @@
created: 20130827080000000
list: [[Introduction to filter notation]] [[Filter Syntax]]
modified: 20250218103107943
original-modified: 20230710074511095
tags: Reference Concepts TableOfContents
title: Filters
ja-title: フィルタ
type: text/vnd.tiddlywiki
\define openAdvancedSearch()
<$action-setfield $tiddler="$:/state/tab--1498284803" text="$:/core/ui/AdvancedSearch/Filter"/>
<$action-setfield $tiddler="$:/temp/advancedsearch/input" text="[tag[Filters]]"/>
<$action-setfield $tiddler="$:/temp/advancedsearch" text="[tag[Filters]]"/>
\end
TiddlyWikiは、レコードがTiddlerであるデータベースと考えることができます。データベースは通常、どのレコードが特定のパターンに一致するかを発見する方法を提供します。~TiddlyWikiでは、これはフィルタを使用して行われます
<<.def フィルタ>>は、その<<.def "アウトプット">>として特定の[[Tiddlerセット|Title Selection]]を選択するための簡潔な表記法です。~TiddlyWikiはフィルタに遭遇するたびにアウトプットを計算します。その後、それらのTiddlerを使って、[[数を数え|CountWidget]]たり、[[リストし|ListWidget]]たりするなど、さらなる処理を行うことができます
次の例では、フィルタを<<.mlink list-links>>マクロに渡します。<<.olink2 tag tag>> <<.word フィルタ>>であるTiddlerのリストを表示します:
<<wikitext-example-without-html """<<list-links "[tag[Filters]]">>""" >>
Wiki内でTiddlerが追加や削除されると、フィルタのアウトプットが変更される可能性があります。~TiddlyWikiは即再計算し、フィルタベースのカウントやリストも自動的に更新します
''さらに詳細:''
* <$linkcatcher message="tm-navigate" actions=<<openAdvancedSearch>> >[[高度な検索|$:/AdvancedSearch]]</$linkcatcher> -- フィルタを簡単に試すことができる<<.advancedsearch-tab Filter>>タブがあります
* [[WikiTextでのフィルタされたトランスクルージョン|Transclusion in WikiText]] -- テキスト内でフィルタ結果を使用したい場合
@@ -1,19 +0,0 @@
created: 20150117204109000
modified: 20250222112113766
original-modified: 20240708201746542
tags: Filters
title: Selection Constructors
ja-title: セレクションコンストラクタ
type: text/vnd.tiddlywiki
[[フィルタステップ|Filter Step]]のアウトプットはその[[オペレータ|Filter Operators]]によって異なります:
* ほとんどのオペレータは、インプットからアウトプットを派生します。たとえば、それらの多くはインプットのサブセットをアウトプットし、まさに<<.word フィルタ>>の名にふさわしく、含んでいる[[ラン|Filter Run]]の全体的なアウトプットを絞り込みます。これらのオペレータは<<.def "セレクションモディファイア">>と呼ばれます。
* いくつかのオペレータはインプットを無視し、代わりに独立したアウトプットを生成します。これらは<<.def "セレクションコンストラクタ">>と呼ばれ、完全に新しい[[セレクション|Title Selection]]を構築します。
コンストラクタの良い例は<<.olink title>>です。`[title[A]title[B]]`のアウトプットは<<.tid B>>です。しかし、<<.olink field>>オペレータはモディファイアなので、`[title[A]field:title[B]`は何もアウトプットしません。
次の[[フィルタオペレータ|filter Operator]]は<<tag>>でタグ付けされています:
<<list-links "[tag<currentTiddler>]" class:"multi-columns">>
@@ -1,20 +0,0 @@
created: 20230316150731234
from-version: 5.1.23
modified: 20250303102704427
original-modified: 20230711084644541
rp-input: 前回のフィルタランからのすべてのタイトル
rp-output: アウトプットタイトルは、重複を排除せずに以前のフィルタランの出力に追加されます。
rp-purpose: 重複を排除しない和集合
tags: [[Named Filter Run Prefix]]
title: All Filter Run Prefix
ja-title: allフィルタランプレフィックス
type: text/vnd.tiddlywiki
<$railroad text="""
\start none
\end none
( ":all" | - )
[["ラン"|"Filter Run"]]
"""/>
このプレフィックスにはオプションの[[ショートカット構文|Shortcut Filter Run Prefix]]であるシンボル`=run`があります
@@ -1,20 +0,0 @@
created: 20230318142752854
from-version: 5.1.23
modified: 20250303103244036
original-modified: 20230711084712170
rp-purpose: フィルタステップの蓄積
rp-input: これまでのすべてのランのフィルタアウトプット
rp-output: アウトプットのタイトルは、以前のフィルターランのアウトプットを置換
tags: [[Named Filter Run Prefix]]
title: And Filter Run Prefix
ja-title: andフィルタランプレフィックス
type: text/vnd.tiddlywiki
<$railroad text="""
\start none
\end none
( ":and" | - )
[["ラン"|"Filter Run"]]
"""/>
このプレフィックスにはオプションの[[ショートカット構文|Shortcut Filter Run Prefix]]であるシンボル+runがあります
@@ -1,48 +0,0 @@
created: 20211130114857532
filter1: [prefix[ca]then[ca]]
filter2: [suffix[at]then[at]]
filter3: other
modified: 20250310110107153
original-modified: 20230305125250563
tags: [[Cascade Filter Run Prefix]]
title: Cascade Filter Run Prefix (Examples)
ja-title: cascadeフィルタランプレフィックス (例)
type: text/vnd.tiddlywiki
<<.op ":cascade">>フィルタランプレフィックスは、タグマクロによって生成されるタグピルで使用される各Tiddlerの配色を選択するために、~TiddlyWikiコアによって使用されます。
`:cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]]`
上記の<<.op :cascade>>フィルタラン内のフィルタ式は、<<tag $:/tags/TiddlerColourFilter>>でタグ付けされたTiddlerのテキストフィールドからフィルタのリストを返します。以下を参照:
<ul>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]]">
<li><pre><$text text=<<currentTiddler>>/></pre></li>
</$list>
</ul>
インプットタイトルごとに、これらのフィルタが順番に適用され、空でないリストを返す最初のフィルタが見つかるまで続きます。この空でないリストの最初の結果がそのインプットタイトルに置き換えられ、そのTiddlerの色として使用されます。
<<.operator-example 1 """[all[shadows+tiddlers]] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]] +[!is[blank]limit[10]]""">>
!! 拡張例
この例では、<<.op :cascade>>フィルタランがどのように機能するかを段階的に説明します。
アウトプットがフィルタのリストを返すフィルタ式が必要です。通常、このようなフィルタ式は、一連のTiddler内のいくつかのフィールドを照会して(おそらくタグ経由で)フィルタのリストを作成します。この例を自己完結型にするために、このTiddlerの//filter1//、//filter2//、//filter3//フィールドに、3つのフィルタが格納されます。[[テキスト参照|TextReference]]と[[appendオペレータ|append Operator]]のインスタンスを使用して、フィールドをフィルタのリストに結合します。
フィルター`[{!!filter1}append{!!filter2}append{!!filter3}]`は、次のフィルタリストを生成します:
<ul>
<$list filter="[{!!filter1}append{!!filter2}append{!!filter3}]">
<li><pre><$text text=<<currentTiddler>>/></pre></li>
</$list>
</ul>
この例では、`cat can bat bug`がインプットタイトルとして使用されます。各インプットタイトルは、上記の各フィルタに対して順番に<<.op :cascade>>で評価されます。<<.op :cascade>>の内部で何が起こっているかを理解しやすくするために、次の表では、[[mapフィルタランプレフィックス|Map Filter Run Prefix]]を使用して、各フィルタの結果を示しています。
|^<<.operator-example c1.1 "cat can bat bug :map[prefix[ca]then[ca]]">>|^<<.operator-example c1.2 "cat can bat bug :map[suffix[at]then[at]]">>|^<<.operator-example c1.3 "cat can bat bug :map[[other]]">>|
上記の3つの例で"Try it"をクリックします。<<.op :cascade>>を使用すると、各行の左から右に読み取られた最初の空白以外の値が返されます。最終結果を確認するには、下の"Try it"をクリックします。
<<.operator-example c1.4 "cat can bat bug :cascade[{!!filter1}append{!!filter2}append{!!filter3}]">>
@@ -1,27 +0,0 @@
created: 20211130114043280
from-version: 5.2.1
modified: 20250305112707026
original-modified: 20230710073343947
rp-input: これまでのすべてのランのフィルタアウトプット
rp-output: このフィルタランによって返されるフィルタによって変更されたインプットタイトル
rp-purpose: フィルターのリストを順に評価し、最初の結果を適用してインプットタイトルを変更
tags: [[Named Filter Run Prefix]]
title: Cascade Filter Run Prefix
ja-title: cascadeフィルタランプレフィックス
type: text/vnd.tiddlywiki
<$railroad text="""
\start none
\end none
( ":cascade" | - )
[["ラン"|"Filter Run"]]
"""/>
この[[フィルタラン|Filter Run]]の[[フィルタ式|Filter Expression]]が評価され、フィルタのリストが返されます。次に、各インプットタイトルが各フィルタに対して順番に評価され、インプットタイトルは空でないリストを返す最初のフィルタの最初の結果に置き換えられます。どのフィルタもインプットタイトルの結果を返さない場合は、空の文字列に置き換えられます。
フィルタラン内では、次の変数を使用できます:
* <<.var currentTiddler>> - インプットタイトル
* <<.var ..currentTiddler>> - フィルタラン外の変数<<.var currentTiddler>>の値。
[[cascadeフィルタランプレフィックス (例)|Cascade Filter Run Prefix (Examples)]]
@@ -1,22 +0,0 @@
created: 20230318142408662
from-version: 5.1.23
modified: 20250312102737003
original-modified: 20230322140756821
rp-input: 前のフィルタランからのすべてのタイトル
rp-output: これまでのフィルタアウトプットが空のリストの場合、ランのアウトプットタイトルがフィルタアウトプットに[[追加|Dominant Append]]されます<br>これまでのフィルタアウトプットが空のリストでない場合、ランは無視されます
rp-purpose: フィルタランは、これまでのすべてのランのフィルタアウトプットが空のリストである場合にのみ評価されます
tags: [[Named Filter Run Prefix]]
title: Else Filter Run Prefix
ja-title: elseフィルタランプレフィックス
type: text/vnd.tiddlywiki
<$railroad text="""
\start none
\end none
( ":else" | - )
[[run|"Filter Run"]]
"""/>
このプレフィックスには[[ショートカットフィルタランプレフィックス|Shortcut Filter Run Prefix]] シンボル`~run`があります
参照: [[thenフィルタランプレフィックス|Then Filter Run Prefix]] | [[thenオペレータ|then Operator]] と [[elseオペレータ|else Operator]]
@@ -1,20 +0,0 @@
created: 20230318142056008
from-version: 5.1.23
modified: 20250312104032308
original-modified: 20230322140643066
rp-input: 前のフィルタランからのすべてのタイトル
rp-output: アウトプットタイトルはフィルタのアウトプットから取り除かれます(そのようなTiddlerが存在する場合)
rp-purpose: このフィルタランのアウトプットタイトルが前のフィルタランのアウトプットに含まれている場合は取り除かれ、含まれていない場合は無視されます
tags: [[Named Filter Run Prefix]]
title: Except Filter Run Prefix
ja-title: exceptフィルタランプレフィックス
type: text/vnd.tiddlywiki
<$railroad text="""
\start none
\end none
( ":except" | - )
[[run|"Filter Run"]]
"""/>
このプレフィックスには[[ショートカットフィルタランプレフィックス|Shortcut Filter Run Prefix]]シンボル`-run`があります
@@ -1,23 +0,0 @@
created: 20150124182421000
modified: 20250219114110986
original-modified: 20230710074507466
tags: [[Filter Syntax]]
title: Filter Expression
ja-title: フィルタ式
type: text/vnd.tiddlywiki
<<.def "フィルタ式">>は、[[フィルタのシンタックス|Filter Syntax]]の最も外側のレベルです。これは、[[フィルタランプレフィックス|Filter Run Prefix]]を備えた [[フィルタラン|Filter Run]]で構成されます。複数のフィルタ実行は[[ホワイトスペース|Filter Whitespace]]で区切られます。
<$railroad text="""
{ (
- |
: [[<"プレフィックス">|"Filter Run Prefix"]]
)
[["ラン"|"Filter Run"]]
+ [["ホワイトスペース"|"Filter Whitespace"]]
}
"""/>
<<.tip """上に示したように、図に開始線と終了線が1つある場合は、リンクされた上位レベルにさらに情報があることを意味します。パンくずリストはナビゲーションに使用できます""">>
<<.tip """下位レベルで使用されているように、図に開始点と終了点がない場合は、読みやすさと単純さを高めるために、上位レベルのシンタックス要素が削除されていることを意味します。パンくずリストはナビゲーションに使用できます""">>
@@ -1,33 +0,0 @@
created: 20211129022707404
modified: 20250314105437481
original-modified: 20230305125338118
tags: [[Filter Filter Run Prefix]]
title: Filter Filter Run Prefix (Examples)
ja-title: filterフィルタランプレフィックス(例)
type: text/vnd.tiddlywiki
<<.operator-example 1 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]]">>
<<.operator-example 2 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:lteq[2000]]">>
<<.operator-example 3 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]] :filter[get[text]length[]compare:integer:lteq[2000]]">>
<<.operator-example 4 "[tag[Features]] :filter[links[]!is[shadow]is[missing]]">>
<<.operator-example 5 "A B C D E F :filter[<index>remainder[2]compare:integer:eq[0]]" "インプットリストの要素を1つおきに返す">>
<<.operator-example 6 "[tag[shopping]] :filter[{!!quantity}compare:integer:gt[4]] :map[addprefix[ ]addprefix{!!quantity}]">>
<<.operator-example 7 "[tag[shopping]] :filter[{!!quantity}compare:integer:lteq[4]] :map[addprefix[ ]addprefix{!!quantity}]">>
!! フィルタランプレフィックス`:filter`と`:and`/`+`の比較
<<.op :filter>>フィルタランプレフィックスの機能は、<<.op :and>>プレフィックス(エイリアス<<.op +>>)と一部重複しています。上記のフィルタ式にはすべて、次の2 つのプロパティがあることに注意してください:
# フィルタ式の先頭では、インプットタイトル(つまり、`get[text]length[]`、`links[]`、`<index>remainder[2]`、`{!!quantity}`)が変換されます。
# フィルタ式の最後では、インプット項目が何らかの条件(つまり`compare`、`is`)を満たす場合にのみアウトプットに送信されます。
<<.op :filter>>プレフィックスの目的はプロパティ#1によってインプットタイトルが変換されるにもかかわらず、元のインプットタイトルを返すことです。こうすることで、"何らかの条件を満たす"チェックを元のインプット以外のものに対して実行できます。一部のフィルタ式でプロパティ#1が必要ない場合は、代わりに<<.op :and>>プレフィックスを使用できます。
| <<.op :filter>> | <<.op :and>> |
|^<<.operator-example c1.1 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]]">>|^<<.operator-example c1.2 "[tag[HelloThere]] :and[get[text]length[]compare:integer:gteq[1000]]">>|
|^<<.operator-example c2.1 "[tag[Features]] :filter[links[]!is[shadow]is[missing]]">>|^<<.operator-example c2.2 "[tag[Features]] :and[links[]!is[shadow]is[missing]]">>|
|!結果は同じ|<|
|^<<.operator-example c3.1 "cat can bat bug :filter[suffix[at]minlength[3]]">>|^<<.operator-example c3.2 "cat can bat bug :and[suffix[at]minlength[3]]">>|
@@ -1,34 +0,0 @@
created: 20211129022455873
from-version: 5.1.23
modified: 20250314105047035
original-modified: 20230710073334078
rp-input: これまでのすべてのランのフィルタアウトプット
rp-output: フィルタランが空でないインプットタイトル
rp-purpose: フィルタランアウトプットが空のリストであるすべてのインプットタイトルを除外
tags: [[Named Filter Run Prefix]]
title: Filter Filter Run Prefix
ja-title: filterフィルタランプレフィックス
type: text/vnd.tiddlywiki
<$railroad text="""
\start none
\end none
( ":filter" | - )
[["ラン"|"Filter Run"]]
"""/>
これまでのフィルタアウトプットをインプットとして受け取ります。次のランはインプットの各タイトルに対して評価され、アウトプットが空のリストであるすべてのインプットタイトルが除かれます。
フィルタラン内では、<<.var currentTiddler>>変数は処理中のTiddlerのタイトルに設定されていることに注意してください。これにより、`:filter[{!!price}multiply{!!cost}compare:integer:gteq[5]]`のようなフィルタランを計算に使用できるようになります。ラン外のcurrentTiddlerの値は、<<.var ..currentTiddler>>変数で使用できます。
フィルターラン内では、次の変数を使用できます:
* <<.var currentTiddler>> - インプットタイトル
* <<.var ..currentTiddler>> - フィルタラン外の変数`currentTiddler`の値。
* <<.var index>> - <<.from-version "5.2.1">> 現在のリスト項目の数値インデックス(リストの最初の項目はゼロです)。
* <<.var revIndex>> - <<.from-version "5.2.1">> 現在のリスト項目の逆数値インデックス(リストの最後の項目はゼロです)。
* <<.var length>> - <<.from-version "5.2.1">> インプットリストの長さの合計。
<<.tip "名前付きフィルタランプレフィックス`:filter`を、この演算子は、すべてのインプットタイトルにサブフィルタを適用し、サブフィルタから空の結果を返すタイトルを除外する[[filterオペレータ|filter Operator]]と比べてください。">>
[[filterフィルタランプレフィックス(例)|Filter Filter Run Prefix (Examples)]]
@@ -1,40 +0,0 @@
created: 20150220152540000
modified: 20250223102930110
original-modified: 20240708202234843
tags: [[Filter Step]]
title: Filter Parameter
ja-title: フィルタパラメータ
type: text/vnd.tiddlywiki
<$railroad text="""
\start none
\end none
( "[" [: <-"ハード"-> /"]以外"/] "]"
|
"{" [: <-"間接"-> /"}以外"/] "}"
|
"<" [: <-"変数"-> /">以外"/] ">"
)
"""/>
[[フィルタオペレータ|Filter Operators]]のパラメーターは次のようになります:
;<<.def ハード>>
: `[パラメータ例]`
: パラメータは、角括弧内のテキストそのものです。
;<<.def ソフト>>
: <<.def 間接>>
:: `{パラメータ例}`
:: パラメータは、中括弧内の名前の[[テキスト参照|TextReference]]によって示されるテキスト、つまり、指定されたTiddlerの[[フィールド|TiddlerFields]]、または指定された[[データTiddler|DataTiddlers]]のプロパティの値です。
: <<.def 変数>>
:: `<パラメータ例>`
:: パラメータは、山括弧内の[[変数|Variables]]の現在値です。マクロパラメータは、v5.2.0まではサポートされて<<.em いません>>。
::<<.from-version "5.2.0">> リテラルマクロパラメータがサポートされています。例: `[<now [UTC]YYYY0MM0DD0hh0mm0ssXXX>]`。
<<.note """すべての[[フィルタオペレータ|filter Operator]]の後にはパラメータ式が続く必要があります。[[パラメータの無いオペレータ|Operators without parameters]]の場合、その式は空になります(`[<currentTiddler>links[]]`のフィルタオペレータ<<.olink links>>と同様)。""">>
---
<<.from-version "5.1.23">> [[フィルタステップ|Filter Step]]では、`,`文字で区切られた複数のパラメータがサポートされます。
例えば: `[param1],[param2]`や`<param1>,{param2}`

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