diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..9e586b92e --- /dev/null +++ b/.eslintignore @@ -0,0 +1,8 @@ +# Ignore "third party" code whose style we will not change. +/boot/sjcl.js +/core/modules/utils/base64-utf8/base64-utf8.module.js +/core/modules/utils/base64-utf8/base64-utf8.module.min.js +/core/modules/utils/diff-match-patch/diff_match_patch.js +/core/modules/utils/diff-match-patch/diff_match_patch_uncompressed.js +/core/modules/utils/dom/csscolorparser.js +/plugins/tiddlywiki/*/files/ diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 000000000..049af59e4 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,283 @@ +env: + browser: true + commonjs: true + es2021: true + node: true +extends: 'eslint:recommended' +globals: + "$tw": "writable" # temporary +parserOptions: + ecmaVersion: 5 +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 + 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: 'off' + 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: 'off' + 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' + + # temporary rules + 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" diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..1e644e161 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,67 @@ +name: Bug report +description: Create a report to help us improve TiddlyWiki 5 +title: "[BUG] " +body: + - type: textarea + id: Describe + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: textarea + id: Expected + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen. + validations: + required: false + - type: textarea + id: Reproduce + attributes: + label: To Reproduce + description: "Steps to reproduce the behavior:" + value: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: false + - type: textarea + id: Screenshots + attributes: + label: Screenshots + description: If applicable, add screenshots to help explain your problem. + placeholder: Drag image here to upload screenshot! + validations: + required: false + - type: textarea + id: Configuration + attributes: + label: TiddlyWiki Configuration + description: please complete the following information + value: | + - Version [e.g. v5.1.24] + - Saving mechanism [e.g. Node.js, TiddlyDesktop, TiddlyHost etc] + - Plugins installed [e.g. Freelinks, TiddlyMap] + + ### Desktop (please complete the following information): + + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + + ### Smartphone (please complete the following information): + + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + validations: + required: true + - type: textarea + id: Context + attributes: + label: Additional context + description: Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..556b93919 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Discuss feature request + url: https://github.com/Jermolene/TiddlyWiki5/discussions + about: Open new discussion about new feature + - name: Talk.Tiddlywiki Forum + url: https://talk.tiddlywiki.org + about: Join the Forum \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..6eb55dd6b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for TiddlyWiki 5 +title: "[IDEA]" +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 000000000..a1e80f7e3 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -0,0 +1,30 @@ +--- +name: Pull Request +about: Propose a change to TiddlyWiki 5 +title: "" +labels: '' +assignees: '' + +--- + +**Is your PR related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you are proposing** +A clear and concise description of the changes you are proposing. Include images to show visual changes. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. + +If you link to discussions elsewhere then please copy and paste the important text, and don't expect readers to scan the entire discussion to find the relevant part. + +## Checklist before requesting a review + +- [ ] Illustrate any visual changes (however minor) with before/after screenshots +- [ ] Self-review of code +- [ ] Documentation updates (for user-visible changes) +- [ ] Tests (for core code changes) +- [ ] Complies with coding style guidelines (for JavaScript code) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..8daf2f468 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,77 @@ +on: + pull_request: + push: + branches: + - master + - tiddlywiki-com +env: + NODE_VERSION: "12" +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: "${{ env.NODE_VERSION }}" + - run: "./bin/test.sh" + build-prerelease: + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/master' + needs: test + env: + TW5_BUILD_TIDDLYWIKI: "./tiddlywiki.js" + TW5_BUILD_MAIN_EDITION: "./editions/prerelease" + TW5_BUILD_OUTPUT: "./output/prerelease" + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: "${{ env.NODE_VERSION }}" + - run: "./bin/ci-pre-build.sh" + # There's another near-duplicate "Set dynamic environment variables" step in + # the `build-tiddlywiki-com` job. + # These _could_ be extracted as a script (or moved into `ci-pre-build.sh`) to do away with the + # duplication, but, the visibility that comes from having these in the workflow file seems + # valuable. Environment variables are global variables and setting them at the top-level + # makes sense. + # Time to reconsider this decision might be when this setup turns out to be mistake-prone. + - name: "Set dynamic environment variables" + run: | + TW5_BUILD_BRANCH=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }') + echo "TW5_BUILD_BRANCH=${TW5_BUILD_BRANCH}" >> $GITHUB_ENV + echo "TW5_BUILD_VERSION=$(./bin/get-plugin-library-version-number)" >> $GITHUB_ENV + echo "TW5_BUILD_DETAILS=Prerelease built from branch '$TW5_BUILD_BRANCH' at commit $(git rev-parse HEAD) of $(git remote get-url origin) at $(date +'%F %T %Z')" >> $GITHUB_ENV + - run: "./bin/build-site.sh" + - run: "./bin/ci-push.sh" + env: + GH_TOKEN: ${{ secrets.GITHUBPUSHTOKEN }} + build-tiddlywiki-com: + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/tiddlywiki-com' + needs: test + env: + TW5_BUILD_TIDDLYWIKI: "./node_modules/tiddlywiki/tiddlywiki.js" + TW5_BUILD_MAIN_EDITION: "./editions/tw5.com" + TW5_BUILD_OUTPUT: "./output" + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: "${{ env.NODE_VERSION }}" + - run: "./bin/ci-pre-build.sh" + # When making a change here, don't forget to see if it also applies to the step + # with the same name in the `build-prerelease` job. + - name: "Set dynamic environment variables" + run: | + TW5_BUILD_BRANCH=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }') + echo "TW5_BUILD_BRANCH=${TW5_BUILD_BRANCH}" >> $GITHUB_ENV + echo "TW5_BUILD_VERSION=$(./bin/get-plugin-library-version-number)" >> $GITHUB_ENV + echo "TW5_BUILD_DETAILS=Built from branch '$TW5_BUILD_BRANCH' at commit $(git rev-parse HEAD) of $(git remote get-url origin) at $(date +'%F %T %Z')" >> $GITHUB_ENV + - run: "./bin/build-site.sh" + - run: "./bin/ci-push.sh" + env: + GH_TOKEN: ${{ secrets.GITHUBPUSHTOKEN }} + - run: "./bin/build-tw-org.sh" + env: + GH_TOKEN: ${{ secrets.GITHUBPUSHTOKEN }} diff --git a/.gitignore b/.gitignore index 5d7cc4870..ad7e8e07f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .DS_Store .c9/ +.vscode/ tmp/ output/ node_modules/ + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d7f1a5566..000000000 --- a/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: node_js - - "node" - -stages: - - name: test - - name: build-prerelease - if: branch = "master" - - name: build-tiddlywiki-com - if: branch = "tiddlywiki-com" - -jobs: - include: - - stage: test - script: ./bin/test.sh - - stage: build-prerelease - script: - - ./bin/travis-pre-build.sh - - export TW5_BUILD_TIDDLYWIKI='./tiddlywiki.js' - - export TW5_BUILD_VERSION=$(./bin/get-plugin-library-version-number) - - export TW5_BUILD_DETAILS="Prerelease built from branch '$TRAVIS_BRANCH' at commit $(git rev-parse HEAD) of $(git remote get-url origin) at $(date +'%F %T %Z')" - - export TW5_BUILD_MAIN_EDITION='./editions/prerelease' - - export TW5_BUILD_OUTPUT='./output/prerelease' - - ./bin/build-site.sh - - ./bin/travis-push.sh - - stage: build-tiddlywiki-com - script: - - ./bin/travis-pre-build.sh - - export TW5_BUILD_TIDDLYWIKI='./node_modules/tiddlywiki/tiddlywiki.js' - - export TW5_BUILD_VERSION=$(./bin/get-plugin-library-version-number) - - export TW5_BUILD_DETAILS="Built from branch '$TRAVIS_BRANCH' at commit $(git rev-parse HEAD) of $(git remote get-url origin) at $(date +'%F %T %Z')" - - export TW5_BUILD_MAIN_EDITION='./editions/tw5.com' - - export TW5_BUILD_OUTPUT='./output' - - ./bin/build-site.sh - - ./bin/travis-push.sh diff --git a/bin/build-site.sh b/bin/build-site.sh index 42f709c60..b77a18434 100755 --- a/bin/build-site.sh +++ b/bin/build-site.sh @@ -5,7 +5,7 @@ # Default to the current version number for building the plugin library if [ -z "$TW5_BUILD_VERSION" ]; then - TW5_BUILD_VERSION=v5.1.19 + TW5_BUILD_VERSION=v5.2.8 fi echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]" @@ -34,6 +34,12 @@ fi echo "Using TW5_BUILD_DETAILS as [$TW5_BUILD_DETAILS]" +if [ -z "$TW5_BUILD_COMMIT" ]; then + TW5_BUILD_COMMIT="$(git rev-parse HEAD)" +fi + +echo "Using TW5_BUILD_COMMIT as [$TW5_BUILD_COMMIT]" + # Set up the build output directory if [ -z "$TW5_BUILD_OUTPUT" ]; then @@ -74,7 +80,7 @@ echo "Moved to http://tiddly # Put the build details into a .tid file so that it can be included in each build (deleted at the end of this script) -echo -e -n "title: $:/build\n\n$TW5_BUILD_DETAILS\n" > $TW5_BUILD_OUTPUT/build.tid +echo -e -n "title: $:/build\ncommit: $TW5_BUILD_COMMIT\n\n$TW5_BUILD_DETAILS\n" > $TW5_BUILD_OUTPUT/build.tid ###################################################### # @@ -101,7 +107,7 @@ node $TW5_BUILD_TIDDLYWIKI \ # /empty.html Empty # /empty.hta For Internet Explorer node $TW5_BUILD_TIDDLYWIKI \ - ./editions/empty \ + $TW5_BUILD_MAIN_EDITION \ --verbose \ --output $TW5_BUILD_OUTPUT \ --build empty \ @@ -130,6 +136,15 @@ node $TW5_BUILD_TIDDLYWIKI \ --build index favicon static \ || exit 1 +# /share.html Custom edition for sharing via the URL +node $TW5_BUILD_TIDDLYWIKI \ + ./editions/share \ + --verbose \ + --load $TW5_BUILD_OUTPUT/build.tid \ + --output $TW5_BUILD_OUTPUT \ + --build share \ + || exit 1 + # /upgrade.html Custom edition for performing upgrades node $TW5_BUILD_TIDDLYWIKI \ ./editions/upgrade \ @@ -218,6 +233,15 @@ node $TW5_BUILD_TIDDLYWIKI \ --build index \ || exit 1 +# /editions/twitter-archivist/index.html Twitter Archivist edition +node $TW5_BUILD_TIDDLYWIKI \ + ./editions/twitter-archivist \ + --verbose \ + --load $TW5_BUILD_OUTPUT/build.tid \ + --output $TW5_BUILD_OUTPUT/editions/twitter-archivist/ \ + --build index \ + || exit 1 + ###################################################### # # Plugin demos @@ -335,14 +359,14 @@ node $TW5_BUILD_TIDDLYWIKI \ # Delete any existing static content -rm $TW5_BUILD_OUTPUT/languages/de-AT/static/* -rm $TW5_BUILD_OUTPUT/languages/de-DE/static/* -rm $TW5_BUILD_OUTPUT/languages/es-ES/static/* -rm $TW5_BUILD_OUTPUT/languages/fr-FR/static/* -rm $TW5_BUILD_OUTPUT/languages/ja-JP/static/* -rm $TW5_BUILD_OUTPUT/languages/ko-KR/static/* -rm $TW5_BUILD_OUTPUT/languages/zh-Hans/static/* -rm $TW5_BUILD_OUTPUT/languages/zh-Hant/static/* +rm -rf $TW5_BUILD_OUTPUT/languages/de-AT/static/* +rm -rf $TW5_BUILD_OUTPUT/languages/de-DE/static/* +rm -rf $TW5_BUILD_OUTPUT/languages/es-ES/static/* +rm -rf $TW5_BUILD_OUTPUT/languages/fr-FR/static/* +rm -rf $TW5_BUILD_OUTPUT/languages/ja-JP/static/* +rm -rf $TW5_BUILD_OUTPUT/languages/ko-KR/static/* +rm -rf $TW5_BUILD_OUTPUT/languages/zh-Hans/static/* +rm -rf $TW5_BUILD_OUTPUT/languages/zh-Hant/static/* # /languages/de-AT/index.html Demo wiki with de-AT language # /languages/de-AT/empty.html Empty wiki with de-AT language @@ -435,7 +459,7 @@ node $TW5_BUILD_TIDDLYWIKI \ --verbose \ --load $TW5_BUILD_OUTPUT/build.tid \ --output $TW5_BUILD_OUTPUT/library/$TW5_BUILD_VERSION \ - --build \ + --build library\ || exit 1 # Delete the temporary build tiddler diff --git a/bin/build-tw-org.sh b/bin/build-tw-org.sh new file mode 100755 index 000000000..eb76baa85 --- /dev/null +++ b/bin/build-tw-org.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# Build tiddlywiki.org assets. + +# Default to the version of TiddlyWiki installed in this repo + +if [ -z "$TWORG_BUILD_TIDDLYWIKI" ]; then + TWORG_BUILD_TIDDLYWIKI=./tiddlywiki.js +fi + +echo "Using TWORG_BUILD_TIDDLYWIKI as [$TWORG_BUILD_TIDDLYWIKI]" + +# Set up the build details + +if [ -z "$TWORG_BUILD_DETAILS" ]; then + TWORG_BUILD_DETAILS="$(git symbolic-ref --short HEAD)-$(git rev-parse HEAD) from $(git remote get-url origin)" +fi + +echo "Using TWORG_BUILD_DETAILS as [$TWORG_BUILD_DETAILS]" + +if [ -z "$TWORG_BUILD_COMMIT" ]; then + TWORG_BUILD_COMMIT="$(git rev-parse HEAD)" +fi + +echo "Using TWORG_BUILD_COMMIT as [$TWORG_BUILD_COMMIT]" + +# Set up the build output directory + +if [ -z "$TWORG_BUILD_OUTPUT" ]; then + TWORG_BUILD_OUTPUT=$(mktemp -d) +fi + +mkdir -p $TWORG_BUILD_OUTPUT + +if [ ! -d "$TWORG_BUILD_OUTPUT" ]; then + echo 'A valid TWORG_BUILD_OUTPUT environment variable must be set' + exit 1 +fi + +echo "Using TWORG_BUILD_OUTPUT as [$TWORG_BUILD_OUTPUT]" + +# Pull existing GitHub pages content + +git clone --depth=1 --branch=main "https://github.com/TiddlyWiki/tiddlywiki.org-gh-pages.git" $TWORG_BUILD_OUTPUT + +# Make the CNAME file that GitHub Pages requires + +echo "tiddlywiki.org" > $TWORG_BUILD_OUTPUT/CNAME + +# Delete any existing static content + +mkdir -p $TWORG_BUILD_OUTPUT/static +rm $TWORG_BUILD_OUTPUT/static/* + +# Put the build details into a .tid file so that it can be included in each build (deleted at the end of this script) + +echo -e -n "title: $:/build\ncommit: $TWORG_BUILD_COMMIT\n\n$TWORG_BUILD_DETAILS\n" > $TWORG_BUILD_OUTPUT/build.tid + +###################################################### +# +# tiddlywiki.org distribution +# +###################################################### + +# /index.html Main site +# /favicon.ico Favicon for main site +# /static.html Static rendering of default tiddlers +# /alltiddlers.html Static rendering of all tiddlers +# /static/* Static single tiddlers +# /static/static.css Static stylesheet +# /static/favicon.ico Favicon for static pages +node $TWORG_BUILD_TIDDLYWIKI \ + editions/tw.org \ + --verbose \ + --version \ + --load $TWORG_BUILD_OUTPUT/build.tid \ + --output $TWORG_BUILD_OUTPUT \ + --build favicon static index \ + || exit 1 + +# Delete the temporary build tiddler + +rm $TWORG_BUILD_OUTPUT/build.tid || exit 1 + +# Push output back to GitHub + +# Exit script immediately if any command fails +set -e + +pushd $TWORG_BUILD_OUTPUT +git config --global user.email "actions@github.com" +git config --global user.name "GitHub Actions" +git add -A . +git commit --message "GitHub build: $GITHUB_RUN_NUMBER of $TW5_BUILD_BRANCH ($(date +'%F %T %Z'))" +git remote add deploy "https://$GH_TOKEN@github.com/TiddlyWiki/tiddlywiki.org-gh-pages.git" &>/dev/null +git push deploy main &>/dev/null +popd diff --git a/bin/travis-pre-build.sh b/bin/ci-pre-build.sh similarity index 100% rename from bin/travis-pre-build.sh rename to bin/ci-pre-build.sh diff --git a/bin/ci-push.sh b/bin/ci-push.sh new file mode 100755 index 000000000..dff297c80 --- /dev/null +++ b/bin/ci-push.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# Push output back to GitHub + +# Exit script immediately if any command fails +set -e + +cd output +git config --global user.email "actions@github.com" +git config --global user.name "GitHub Actions" +git add -A . +git commit --message "GitHub build: $GITHUB_RUN_NUMBER of $TW5_BUILD_BRANCH ($(date +'%F %T %Z'))" +git remote add deploy "https://$GH_TOKEN@github.com/Jermolene/jermolene.github.io.git" &>/dev/null +git push deploy master &>/dev/null +cd .. diff --git a/bin/npm-publish.sh b/bin/npm-publish.sh new file mode 100755 index 000000000..c37de5c24 --- /dev/null +++ b/bin/npm-publish.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# publish to npm + +./bin/clean.sh + +npm publish || exit 1 diff --git a/bin/optimise-svgs.js b/bin/optimise-svgs.js new file mode 100755 index 000000000..4920ab920 --- /dev/null +++ b/bin/optimise-svgs.js @@ -0,0 +1,79 @@ +#!/usr/bin/env node + +/* +Optimise the SVGs in ./core/images using SVGO from https://github.com/svg/svgo + +Install SVGO with the following command in the root of the repo: + +npm install svgo@2.3.0 +*/ + +"use strict"; + +var fs = require("fs"), + path = require("path"), + { optimize } = require("svgo"), + config = { + plugins: [ + 'cleanupAttrs', + 'removeDoctype', + 'removeXMLProcInst', + 'removeComments', + 'removeMetadata', + 'removeTitle', + 'removeDesc', + 'removeUselessDefs', + 'removeEditorsNSData', + 'removeEmptyAttrs', + 'removeHiddenElems', + 'removeEmptyText', + 'removeEmptyContainers', + // 'removeViewBox', + 'cleanupEnableBackground', + 'convertStyleToAttrs', + 'convertColors', + 'convertPathData', + 'convertTransform', + 'removeUnknownsAndDefaults', + 'removeNonInheritableGroupAttrs', + 'removeUselessStrokeAndFill', + 'removeUnusedNS', + 'cleanupIDs', + 'cleanupNumericValues', + 'moveElemsAttrsToGroup', + 'moveGroupAttrsToElems', + 'collapseGroups', + // 'removeRasterImages', + 'mergePaths', + 'convertShapeToPath', + 'sortAttrs', + //'removeDimensions', + {name: 'removeAttrs', params: { attrs: '(stroke|fill)' } } + ] + }; + +var basepath = "./core/images/", + files = fs.readdirSync(basepath).sort(); + +files.forEach(function(filename) { + if(filename.slice(-4) === ".tid") { + var filepath = path.resolve(basepath,filename), + data = fs.readFileSync(filepath,"utf8"), + lines = data.split("\n"), + blankLine = lines.indexOf(""), + header = lines.slice(0,blankLine), + body = lines.slice(blankLine + 1), + fakeSVG = body.join("\n"); + // A hack to make the new-journal-button work + fakeSVG = fakeSVG.replace("<>","<<now "DD">>"); + config.path = filepath; + var result = optimize(fakeSVG,config); + if(result) { + var newSVG = header.join("\n") + "\n\n" + result.data.replace("<<now "DD">>","<>"); + fs.writeFileSync(filepath,newSVG); + } else { + console.log("Error " + err + " with " + filename) + process.exit(); + }; + } +}); diff --git a/bin/quick-bld.sh b/bin/quick-bld.sh new file mode 100755 index 000000000..63da9aacc --- /dev/null +++ b/bin/quick-bld.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# Abbreviated build script for building prerelease + +tiddlywiki editions/prerelease \ + --verbose \ + --build favicon index empty \ + || exit 1 diff --git a/bin/readme-bld.sh b/bin/readme-bld.sh new file mode 100755 index 000000000..198c3abd0 --- /dev/null +++ b/bin/readme-bld.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Build readmes from corresponding tiddlers + +# Default to the version of TiddlyWiki installed in this repo + +if [ -z "$TW5_BUILD_TIDDLYWIKI" ]; then + TW5_BUILD_TIDDLYWIKI=./tiddlywiki.js +fi + +# tw5.com readmes +node $TW5_BUILD_TIDDLYWIKI \ + editions/tw5.com \ + --verbose \ + --output . \ + --build readmes \ + || exit 1 diff --git a/bin/readme.md b/bin/readme.md index 22cb2965e..d2014ca6b 100644 --- a/bin/readme.md +++ b/bin/readme.md @@ -1,3 +1,4 @@

Script Files

The TiddlyWiki5 repository contains several scripts in the bin folder that you can use to automate common tasks, or as a useful starting point for your own scripts. See Scripts for building tiddlywiki.com for details of the scripts used to build and release https://tiddlywiki.com/.

All the scripts expect to be run from the root folder of the repository.

serve: serves tw5.com

./bin/serve.sh -h
 ./bin/serve.sh [edition dir] [username] [password] [host] [port]

Or:

./bin/serve.cmd -h
-./bin/serve.cmd [edition dir] [username] [password] [host] [port]

This script starts TiddlyWiki5 running as an HTTP server, defaulting to the content from the tw5.com-server edition. By default, the Node.js serves on port 8080. If the optional username parameter is provided, it is used for signing edits. If the password is provided then HTTP basic authentication is used. Run the script with the -h parameter to see online help.

To experiment with this configuration, run the script and then visit http://127.0.0.1:8080 in a browser.

Changes made in the browser propagate to the server over HTTP (use the browser developer console to see these requests). The server then syncs changes to the file system (and logs each change to the screen).

test: build and run tests

This script runs the test edition of TiddlyWiki on the server to perform the server-side tests and to build test.html for running the tests in the browser.

lazy: serves tw5.com with lazily loaded images

./bin/lazy.sh <username> [<password>]

Or:

./bin/lazy.cmd <username> [<password>]

This script serves the tw5.com-server edition content with LazyLoading applied to images.

2bld: builds TiddlyWiki 2.6.5

This script builds TiddlyWiki 2.6.5 from the original source and then displays the differences between them (diff is used for *nix, fc for Windows).

\ No newline at end of file +./bin/serve.cmd [edition dir] [username] [password] [host] [port]

This script starts TiddlyWiki5 running as an HTTP server, defaulting to the content from the tw5.com-server edition. By default, the Node.js serves on port 8080. If the optional username parameter is provided, it is used for signing edits. If the password is provided then HTTP basic authentication is used. Run the script with the -h parameter to see online help.

To experiment with this configuration, run the script and then visit http://127.0.0.1:8080 in a browser.

Changes made in the browser propagate to the server over HTTP (use the browser developer console to see these requests). The server then syncs changes to the file system (and logs each change to the screen).

test: build and run tests

This script runs the test edition of TiddlyWiki on the server to perform the server-side tests and to build test.html for running the tests in the browser.

lazy: serves tw5.com with lazily loaded images

./bin/lazy.sh <username> [<password>]

Or:

./bin/lazy.cmd <username> [<password>]

This script serves the tw5.com-server edition content with LazyLoading applied to images. +

\ No newline at end of file diff --git a/bin/test.sh b/bin/test.sh index 2de66b1fd..61c7b7143 100755 --- a/bin/test.sh +++ b/bin/test.sh @@ -9,6 +9,7 @@ node ./tiddlywiki.js \ --verbose \ --version \ --rendertiddler $:/core/save/all test.html text/plain \ + --test \ || exit 1 echo To run the tests in a browser, open "editions/test/output/test.html" diff --git a/bin/travis-push.sh b/bin/travis-push.sh deleted file mode 100755 index aa16cd73c..000000000 --- a/bin/travis-push.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -# Push output back to GitHub - - -cd output || exit 1 - -git config --global user.email "travis@travis-ci.org" || exit 1 - -git config --global user.name "Travis CI" || exit 1 - -git add -A . || exit 1 - -git commit --message "Travis build: $TRAVIS_BUILD_NUMBER of $TRAVIS_BRANCH ($(date +'%F %T %Z'))" || exit 1 - -git remote add deploy "https://$GH_TOKEN@github.com/Jermolene/jermolene.github.io.git" &>/dev/null || exit 1 - -git push deploy master &>/dev/null || exit 1 - -cd .. || exit 1 diff --git a/bin/update-translation-from-html-file.sh b/bin/update-translation-from-html-file.sh new file mode 100755 index 000000000..3fe3d8967 --- /dev/null +++ b/bin/update-translation-from-html-file.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Process translation updates made via the translators edition + +# ./bin/update-translation-from-html-file.sh + +# Assign and check parameters + +LANGUAGE_CODE=$1 +HTML_FILE_PATH=$2 + +if [ -z "$LANGUAGE_CODE" ]; then + echo "Missing parameter: language code" + exit 1 +fi + +if [ -z "$HTML_FILE_PATH" ]; then + echo "Missing parameter: path to HTML file" + exit 1 +fi + +./tiddlywiki.js editions/translators/ --verbose --unpackplugin $:/languages/$LANGUAGE_CODE --load $HTML_FILE_PATH --build output-files || exit 1 + +cp -R ./editions/translators/output/language/. ./languages/$LANGUAGE_CODE/ || exit 1 + diff --git a/bin/verbump.sh b/bin/verbump.sh new file mode 100755 index 000000000..ae4b0da80 --- /dev/null +++ b/bin/verbump.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Bump to a new version number + +if [ -z "$1" ] + then + echo "Missing version (eg '5.1.38-prerelease')" + exit 1 +fi + +# Set the new version number (will also commit and tag the release) + +npm version $1 -m "Version number update for $1" || exit 1 + +# Make sure our tags are pushed to the origin server + +git push origin --tags || exit 1 diff --git a/boot/boot.js b/boot/boot.js index 1cade02c1..a1427061b 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -68,6 +68,26 @@ $tw.utils.isArrayEqual = function(array1,array2) { }); }; +/* +Add an entry to a sorted array if it doesn't already exist, while maintaining the sort order +*/ +$tw.utils.insertSortedArray = function(array,value) { + var low = 0, high = array.length - 1, mid, cmp; + while(low <= high) { + mid = (low + high) >> 1; + cmp = value.localeCompare(array[mid]); + if(cmp > 0) { + low = mid + 1; + } else if(cmp < 0) { + high = mid - 1; + } else { + return array; + } + } + array.splice(low,0,value); + return array; +}; + /* Push entries onto an array, removing them first if they already exist in the array array: array to modify (assumed to be free of duplicates) @@ -264,6 +284,28 @@ $tw.utils.deepDefaults = function(object /*, sourceObjectList */) { return object; }; +/* +Convert a URIComponent encoded string to a string safely +*/ +$tw.utils.decodeURIComponentSafe = function(s) { + var v = s; + try { + v = decodeURIComponent(s); + } catch(e) {} + return v; +}; + +/* +Convert a URI encoded string to a string safely +*/ +$tw.utils.decodeURISafe = function(s) { + var v = s; + try { + v = decodeURI(s); + } catch(e) {} + return v; +}; + /* Convert "&" to &, " " to nbsp, "<" to <, ">" to > and """ to " */ @@ -275,8 +317,16 @@ $tw.utils.htmlDecode = function(s) { Get the browser location.hash. We don't use location.hash because of the way that Firefox auto-urldecodes it (see http://stackoverflow.com/questions/1703552/encoding-of-window-location-hash) */ $tw.utils.getLocationHash = function() { - var parts = window.location.href.split('#'); - return "#" + (parts.length > 1 ? parts[1] : ""); + var href = window.location.href; + var idx = href.indexOf('#'); + if(idx === -1) { + return "#"; + } else if(href.substr(idx + 1,1) === "#" || href.substr(idx + 1,3) === "%23") { + // Special case: ignore location hash if it itself starts with a # + return "#"; + } else { + return href.substring(idx); + } }; /* @@ -305,13 +355,21 @@ $tw.utils.stringifyDate = function(value) { // Parse a date from a UTC YYYYMMDDHHMMSSmmm format string $tw.utils.parseDate = function(value) { if(typeof value === "string") { - return new Date(Date.UTC(parseInt(value.substr(0,4),10), + var negative = 1; + if(value.charAt(0) === "-") { + negative = -1; + value = value.substr(1); + } + var year = parseInt(value.substr(0,4),10) * negative, + d = new Date(Date.UTC(year, parseInt(value.substr(4,2),10)-1, parseInt(value.substr(6,2),10), parseInt(value.substr(8,2)||"00",10), parseInt(value.substr(10,2)||"00",10), parseInt(value.substr(12,2)||"00",10), parseInt(value.substr(14,3)||"000",10))); + d.setUTCFullYear(year); // See https://stackoverflow.com/a/5870822 + return d; } else if($tw.utils.isDate(value)) { return value; } else { @@ -322,13 +380,13 @@ $tw.utils.parseDate = function(value) { // Stringify an array of tiddler titles into a list string $tw.utils.stringifyList = function(value) { if($tw.utils.isArray(value)) { - var result = []; - for(var t=0; t 0) || (diff[0] === 0 && diff[1] > 0) || (diff[0] === 0 & diff[1] === 0 & diff[2] > 0)) { + return +1; + } else if((diff[0] < 0) || (diff[0] === 0 && diff[1] < 0) || (diff[0] === 0 & diff[1] === 0 & diff[2] < 0)) { + return -1; + } else { + return 0; + } +}; + /* Returns true if the version string A is greater than the version string B. Returns true if the versions are the same */ $tw.utils.checkVersions = function(versionStringA,versionStringB) { - var defaultVersion = { - major: 0, - minor: 0, - patch: 0 - }, - versionA = $tw.utils.parseVersion(versionStringA) || defaultVersion, - versionB = $tw.utils.parseVersion(versionStringB) || defaultVersion, - diff = [ - versionA.major - versionB.major, - versionA.minor - versionB.minor, - versionA.patch - versionB.patch - ]; - return (diff[0] > 0) || - (diff[0] === 0 && diff[1] > 0) || - (diff[0] === 0 && diff[1] === 0 && diff[2] >= 0); + return $tw.utils.compareVersions(versionStringA,versionStringB) !== -1; }; /* @@ -648,11 +731,13 @@ $tw.utils.PasswordPrompt.prototype.createPrompt = function(options) { var promptInfo = { serviceName: options.serviceName, callback: options.callback, - form: form + form: form, + owner: this }; this.passwordPrompts.push(promptInfo); // Make sure the wrapper is displayed this.setWrapperDisplay(); + return promptInfo; }; $tw.utils.PasswordPrompt.prototype.removePrompt = function(promptInfo) { @@ -870,6 +955,19 @@ $tw.modules.applyMethods = function(moduleType,targetObject) { return targetObject; }; +/* +Return a class created from a modules. The module should export the properties to be added to those of the optional base class +*/ +$tw.modules.createClassFromModule = function(moduleExports,baseClass) { + var newClass = function() {}; + if(baseClass) { + newClass.prototype = new baseClass(); + newClass.prototype.constructor = baseClass; + } + $tw.utils.extend(newClass.prototype,moduleExports); + return newClass; +}; + /* Return an array of classes created from the modules of a specified type. Each module should export the properties to be added to those of the optional base class */ @@ -877,13 +975,7 @@ $tw.modules.createClassesFromModules = function(moduleType,subType,baseClass) { var classes = Object.create(null); $tw.modules.forEachModuleOfType(moduleType,function(title,moduleExports) { if(!subType || moduleExports.types[subType]) { - var newClass = function() {}; - if(baseClass) { - newClass.prototype = new baseClass(); - newClass.prototype.constructor = baseClass; - } - $tw.utils.extend(newClass.prototype,moduleExports); - classes[moduleExports.name] = newClass; + classes[moduleExports.name] = $tw.modules.createClassFromModule(moduleExports,baseClass); } }); return classes; @@ -1021,7 +1113,7 @@ $tw.modules.define("$:/boot/tiddlerfields/list","tiddlerfield",{ /* Wiki constructor. State is stored in private members that only a small number of privileged accessor methods have direct access. Methods added via the prototype have to use these accessors and cannot access the state data directly. options include: -shadowTiddlers: Array of shadow tiddlers to be added +enableIndexers - Array of indexer names to enable, or null to use all available indexers */ $tw.Wiki = function(options) { options = options || {}; @@ -1030,20 +1122,37 @@ $tw.Wiki = function(options) { tiddlerTitles = null, // Array of tiddler titles getTiddlerTitles = function() { if(!tiddlerTitles) { - tiddlerTitles = Object.keys(tiddlers); + tiddlerTitles = Object.keys(tiddlers).sort(function(a,b) {return a.localeCompare(b);}); } return tiddlerTitles; }, pluginTiddlers = [], // Array of tiddlers containing registered plugins, ordered by priority pluginInfo = Object.create(null), // Hashmap of parsed plugin content - shadowTiddlers = options.shadowTiddlers || Object.create(null), // Hashmap by title of {source:, tiddler:} + shadowTiddlers = Object.create(null), // Hashmap by title of {source:, tiddler:} shadowTiddlerTitles = null, getShadowTiddlerTitles = function() { if(!shadowTiddlerTitles) { shadowTiddlerTitles = Object.keys(shadowTiddlers); } return shadowTiddlerTitles; - }; + }, + enableIndexers = options.enableIndexers || null, + indexers = [], + indexersByName = Object.create(null); + + this.addIndexer = function(indexer,name) { + // Bail if this indexer is not enabled + if(enableIndexers && enableIndexers.indexOf(name) === -1) { + return; + } + indexers.push(indexer); + indexersByName[name] = indexer; + indexer.init(); + }; + + this.getIndexer = function(name) { + return indexersByName[name] || null; + }; // Add a tiddler to the store this.addTiddler = function(tiddler) { @@ -1056,12 +1165,31 @@ $tw.Wiki = function(options) { if(title) { // Uncomment the following line for detailed logs of all tiddler writes // console.log("Adding",title,tiddler) - tiddlers[title] = tiddler; - if(tiddlerTitles && tiddlerTitles.indexOf(title) === -1) { - tiddlerTitles.push(title); + // Record the old tiddler state + var updateDescriptor = { + old: { + tiddler: this.getTiddler(title), + shadow: this.isShadowTiddler(title), + exists: this.tiddlerExists(title) + } } + // Save the new tiddler + tiddlers[title] = tiddler; + // Check we've got the title + tiddlerTitles = $tw.utils.insertSortedArray(tiddlerTitles || [],title); + // Record the new tiddler state + updateDescriptor["new"] = { + tiddler: tiddler, + shadow: this.isShadowTiddler(title), + exists: this.tiddlerExists(title) + } + // Update indexes this.clearCache(title); this.clearGlobalCache(); + $tw.utils.each(indexers,function(indexer) { + indexer.update(updateDescriptor); + }); + // Queue a change event this.enqueueTiddlerEvent(title); } } @@ -1072,15 +1200,36 @@ $tw.Wiki = function(options) { // Uncomment the following line for detailed logs of all tiddler deletions // console.log("Deleting",title) if($tw.utils.hop(tiddlers,title)) { + // Record the old tiddler state + var updateDescriptor = { + old: { + tiddler: this.getTiddler(title), + shadow: this.isShadowTiddler(title), + exists: this.tiddlerExists(title) + } + } + // Delete the tiddler delete tiddlers[title]; + // Delete it from the list of titles if(tiddlerTitles) { var index = tiddlerTitles.indexOf(title); if(index !== -1) { tiddlerTitles.splice(index,1); - } + } } + // Record the new tiddler state + updateDescriptor["new"] = { + tiddler: this.getTiddler(title), + shadow: this.isShadowTiddler(title), + exists: this.tiddlerExists(title) + } + // Update indexes this.clearCache(title); this.clearGlobalCache(); + $tw.utils.each(indexers,function(indexer) { + indexer.update(updateDescriptor); + }); + // Queue a change event this.enqueueTiddlerEvent(title,true); } }; @@ -1089,13 +1238,16 @@ $tw.Wiki = function(options) { this.getTiddler = function(title) { if(title) { var t = tiddlers[title]; - if(t instanceof $tw.Tiddler) { + if(t !== undefined) { return t; - } else if(title !== undefined && shadowTiddlers[title]) { - return shadowTiddlers[title].tiddler; + } else { + var s = shadowTiddlers[title]; + if(s !== undefined) { + return s.tiddler; + } } - return undefined; } + return undefined; }; // Get an array of all tiddler titles @@ -1124,8 +1276,12 @@ $tw.Wiki = function(options) { index,titlesLength,title; for(index = 0, titlesLength = titles.length; index < titlesLength; index++) { title = titles[index]; - var shadowInfo = shadowTiddlers[title]; - callback(shadowInfo.tiddler,title); + if(tiddlers[title]) { + callback(tiddlers[title],title); + } else { + var shadowInfo = shadowTiddlers[title]; + callback(shadowInfo.tiddler,title); + } } }; @@ -1167,7 +1323,6 @@ $tw.Wiki = function(options) { callback(tiddlers[title],title); } } - }; // Test for the existence of a tiddler (excludes shadow tiddlers) @@ -1187,15 +1342,39 @@ $tw.Wiki = function(options) { return null; }; - // Read plugin info for all plugins - this.readPluginInfo = function() { - for(var title in tiddlers) { - var tiddler = tiddlers[title]; - if(tiddler.fields.type === "application/json" && tiddler.hasField("plugin-type")) { - pluginInfo[tiddler.fields.title] = JSON.parse(tiddler.fields.text); + // Get an array of all the currently recognised plugin types + this.getPluginTypes = function() { + var types = []; + $tw.utils.each(pluginTiddlers,function(pluginTiddler) { + var pluginType = pluginTiddler.fields["plugin-type"]; + if(pluginType && types.indexOf(pluginType) === -1) { + types.push(pluginType); } + }); + return types; + }; - } + // Read plugin info for all plugins, or just an array of titles. Returns the number of plugins updated or deleted + this.readPluginInfo = function(titles) { + var results = { + modifiedPlugins: [], + deletedPlugins: [] + }; + $tw.utils.each(titles || getTiddlerTitles(),function(title) { + var tiddler = tiddlers[title]; + if(tiddler) { + if(tiddler.fields.type === "application/json" && tiddler.hasField("plugin-type") && tiddler.fields.text) { + pluginInfo[tiddler.fields.title] = $tw.utils.parseJSONSafe(tiddler.fields.text); + results.modifiedPlugins.push(tiddler.fields.title); + } + } else { + if(pluginInfo[title]) { + delete pluginInfo[title]; + results.deletedPlugins.push(title); + } + } + }); + return results; }; // Get plugin info for a plugin @@ -1203,14 +1382,15 @@ $tw.Wiki = function(options) { return pluginInfo[title]; }; - // Register the plugin tiddlers of a particular 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) { var self = this, registeredTitles = [], checkTiddler = function(tiddler,title) { - if(tiddler && tiddler.fields.type === "application/json" && tiddler.fields["plugin-type"] === pluginType) { + if(tiddler && tiddler.fields.type === "application/json" && tiddler.fields["plugin-type"] && (!pluginType || tiddler.fields["plugin-type"] === pluginType)) { var disablingTiddler = self.getTiddler("$:/config/Plugins/Disabled/" + title); if(title === "$:/core" || !disablingTiddler || (disablingTiddler.fields.text || "").trim() !== "yes") { + self.unregisterPluginTiddlers(null,[title]); // Unregister the plugin if it's already registered pluginTiddlers.push(tiddler); registeredTitles.push(tiddler.fields.title); } @@ -1228,19 +1408,19 @@ $tw.Wiki = function(options) { return registeredTitles; }; - // Unregister the plugin tiddlers of a particular type, returning an array of the titles affected - this.unregisterPluginTiddlers = function(pluginType) { + // Unregister the plugin tiddlers of a particular type, or null/undefined for any type, optionally restricting unregistering to an array of tiddler titles. Returns an array of the titles affected + this.unregisterPluginTiddlers = function(pluginType,titles) { var self = this, - titles = []; + unregisteredTitles = []; // Remove any previous registered plugins of this type for(var t=pluginTiddlers.length-1; t>=0; t--) { var tiddler = pluginTiddlers[t]; - if(tiddler.fields["plugin-type"] === pluginType) { - titles.push(tiddler.fields.title); + if(tiddler.fields["plugin-type"] && (!pluginType || tiddler.fields["plugin-type"] === pluginType) && (!titles || titles.indexOf(tiddler.fields.title) !== -1)) { + unregisteredTitles.push(tiddler.fields.title); pluginTiddlers.splice(t,1); } } - return titles; + return unregisteredTitles; }; // Unpack the currently registered plugins, creating shadow tiddlers for their constituent tiddlers @@ -1281,8 +1461,14 @@ $tw.Wiki = function(options) { shadowTiddlerTitles = null; this.clearCache(null); this.clearGlobalCache(); + $tw.utils.each(indexers,function(indexer) { + indexer.rebuild(); + }); }; + if(this.addIndexersToWiki) { + this.addIndexersToWiki(); + } }; // Dummy methods that will be filled in after boot @@ -1311,7 +1497,7 @@ $tw.Wiki.prototype.defineTiddlerModules = function() { } break; case "application/json": - $tw.modules.define(tiddler.fields.title,tiddler.fields["module-type"],JSON.parse(tiddler.fields.text)); + $tw.modules.define(tiddler.fields.title,tiddler.fields["module-type"],$tw.utils.parseJSONSafe(tiddler.fields.text)); break; case "application/x-tiddler-dictionary": $tw.modules.define(tiddler.fields.title,tiddler.fields["module-type"],$tw.utils.parseFields(tiddler.fields.text)); @@ -1477,8 +1663,40 @@ $tw.modules.define("$:/boot/tiddlerdeserializer/html","tiddlerdeserializer",{ }); $tw.modules.define("$:/boot/tiddlerdeserializer/json","tiddlerdeserializer",{ "application/json": function(text,fields) { - var data = JSON.parse(text); - return $tw.utils.isArray(data) ? data : [data]; + var isTiddlerValid = function(data) { + // Not valid if it's not an object with a title property + if(typeof(data) !== "object" || !$tw.utils.hop(data,"title")) { + return false; + } + for(var f in data) { + if($tw.utils.hop(data,f)) { + // Check field name doesn't contain control characters + if(typeof(data[f]) !== "string" || /[\x00-\x1F]/.test(f)) { + return false; + } + } + } + return true; + }, + isTiddlerArrayValid = function(data) { + for(var t=0; t 0){ + $tw.wiki.addTiddler({title: "$:/config/OriginalTiddlerPaths", type: "application/json", text: JSON.stringify(output)}); } - $tw.wiki.addTiddler({title: "$:/config/OriginalTiddlerPaths", type: "application/json", text: JSON.stringify(output)}); } - // Save the path to the tiddlers folder for the filesystemadaptor - $tw.boot.wikiTiddlersPath = path.resolve($tw.boot.wikiPath,config["default-tiddler-location"] || $tw.config.wikiTiddlersSubDir); // Load any plugins within the wiki folder var wikiPluginsPath = path.resolve(wikiPath,$tw.config.wikiPluginsSubDir); if(fs.existsSync(wikiPluginsPath)) { @@ -2014,6 +2283,21 @@ $tw.loadTiddlersNode = function() { }); // Load the core tiddlers $tw.wiki.addTiddler($tw.loadPluginFolder($tw.boot.corePath)); + // Load any extra plugins + $tw.utils.each($tw.boot.extraPlugins,function(name) { + if(name.charAt(0) === "+") { // Relative path to plugin + var pluginFields = $tw.loadPluginFolder(name.substring(1)); + if(pluginFields) { + $tw.wiki.addTiddler(pluginFields); + } + } else { + var parts = name.split("/"), + type = parts[0]; + if(parts.length === 3 && ["plugins","themes","languages"].indexOf(type) !== -1) { + $tw.loadPlugins([parts[1] + "/" + parts[2]],$tw.config[type + "Path"],$tw.config[type + "EnvVar"]); + } + } + }); // Load the tiddlers from the wiki directory if($tw.boot.wikiPath) { $tw.boot.wikiInfo = $tw.loadWikiTiddlers($tw.boot.wikiPath); @@ -2088,6 +2372,12 @@ $tw.boot.startup = function(options) { if($tw.boot.argv.length === 0) { $tw.boot.argv = ["--help"]; } + // Parse any extra plugin references + $tw.boot.extraPlugins = $tw.boot.extraPlugins || []; + while($tw.boot.argv[0] && $tw.boot.argv[0].indexOf("+") === 0) { + $tw.boot.extraPlugins.push($tw.boot.argv[0].substring(1)); + $tw.boot.argv.splice(0,1); + } // If the first command line argument doesn't start with `--` then we // interpret it as the path to the wiki folder, which will otherwise default // to the current folder @@ -2118,20 +2408,27 @@ $tw.boot.startup = function(options) { $tw.utils.registerFileType("application/json","utf8",".json"); $tw.utils.registerFileType("application/pdf","base64",".pdf",{flags:["image"]}); $tw.utils.registerFileType("application/zip","base64",".zip"); + $tw.utils.registerFileType("application/x-zip-compressed","base64",".zip"); $tw.utils.registerFileType("image/jpeg","base64",[".jpg",".jpeg"],{flags:["image"]}); + $tw.utils.registerFileType("image/jpg","base64",[".jpg",".jpeg"],{flags:["image"]}); $tw.utils.registerFileType("image/png","base64",".png",{flags:["image"]}); $tw.utils.registerFileType("image/gif","base64",".gif",{flags:["image"]}); $tw.utils.registerFileType("image/webp","base64",".webp",{flags:["image"]}); $tw.utils.registerFileType("image/heic","base64",".heic",{flags:["image"]}); $tw.utils.registerFileType("image/heif","base64",".heif",{flags:["image"]}); $tw.utils.registerFileType("image/svg+xml","utf8",".svg",{flags:["image"]}); + $tw.utils.registerFileType("image/vnd.microsoft.icon","base64",".ico",{flags:["image"]}); $tw.utils.registerFileType("image/x-icon","base64",".ico",{flags:["image"]}); $tw.utils.registerFileType("application/font-woff","base64",".woff"); $tw.utils.registerFileType("application/x-font-ttf","base64",".woff"); + $tw.utils.registerFileType("application/font-woff2","base64",".woff2"); $tw.utils.registerFileType("audio/ogg","base64",".ogg"); + $tw.utils.registerFileType("audio/mp4","base64",[".mp4",".m4a"]); + $tw.utils.registerFileType("video/ogg","base64",[".ogm",".ogv",".ogg"]); + $tw.utils.registerFileType("video/webm","base64",".webm"); $tw.utils.registerFileType("video/mp4","base64",".mp4"); $tw.utils.registerFileType("audio/mp3","base64",".mp3"); - $tw.utils.registerFileType("audio/mp4","base64",[".mp4",".m4a"]); + $tw.utils.registerFileType("audio/mpeg","base64"); $tw.utils.registerFileType("text/markdown","utf8",[".md",".markdown"],{deserializerType:"text/x-markdown"}); $tw.utils.registerFileType("text/x-markdown","utf8",[".md",".markdown"]); $tw.utils.registerFileType("application/enex+xml","utf8",".enex"); @@ -2143,7 +2440,7 @@ $tw.boot.startup = function(options) { $tw.utils.registerFileType("application/epub+zip","base64",".epub"); $tw.utils.registerFileType("application/octet-stream","base64",".octet-stream"); // Create the wiki store for the app - $tw.wiki = new $tw.Wiki(); + $tw.wiki = new $tw.Wiki($tw.safeMode && {enableIndexers: []}); // Install built in tiddler fields modules $tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap("tiddlerfield"); // Install the tiddler deserializer modules @@ -2163,6 +2460,9 @@ $tw.boot.startup = function(options) { return result; } } +}; +$tw.boot.loadStartup = function(options){ + // Load tiddlers if($tw.boot.tasks.readBrowserTiddlers) { $tw.loadTiddlersBrowser(); @@ -2175,6 +2475,8 @@ $tw.boot.startup = function(options) { } // Give hooks a chance to modify the store $tw.hooks.invokeHook("th-boot-tiddlers-loaded"); +} +$tw.boot.execStartup = function(options){ // Unpack plugin tiddlers $tw.wiki.readPluginInfo(); $tw.wiki.registerPluginTiddlers("plugin",$tw.safeMode ? ["$:/core"] : undefined); @@ -2211,6 +2513,16 @@ $tw.boot.startup = function(options) { $tw.boot.disabledStartupModules = $tw.boot.disabledStartupModules || []; // Repeatedly execute the next eligible task $tw.boot.executeNextStartupTask(options.callback); +} +/* +Startup TiddlyWiki +*/ +$tw.boot.startup = function(options) { + options = options || {}; + // Get the URL hash and check for safe mode + $tw.boot.initStartup(options); + $tw.boot.loadStartup(options); + $tw.boot.execStartup(options); }; /* @@ -2272,16 +2584,29 @@ $tw.boot.executeNextStartupTask = function(callback) { }; /* -Returns true if we are running on one platforms specified in a task modules `platforms` array +Returns true if we are running on one of the platforms specified in taskModule's +`platforms` array; or if `platforms` property is not defined. */ $tw.boot.doesTaskMatchPlatform = function(taskModule) { var platforms = taskModule.platforms; if(platforms) { for(var t=0; tContributing to TiddlyWiki5

We welcome contributions to the code and documentation of TiddlyWiki in several ways:

There are other ways to help TiddlyWiki too.

Contributor License Agreement

Like other OpenSource projects, TiddlyWiki5 needs a signed contributor license agreement from individual contributors. This is a legal agreement that allows contributors to assert that they own the copyright of their contribution, and that they agree to license it to the UnaMesa Association (the legal entity that owns TiddlyWiki on behalf of the community).

How to sign the CLA

Create a GitHub pull request to add your name to cla-individual.md or cla-entity.md, with the date in the format (YYYY/MM/DD).

step by step

  1. Navigate to licenses/CLA-individual or licenses/CLA-entity according to whether you are signing as an individual or representative of an organisation
  2. Click the "edit" button at the top-right corner (clicking this button will fork the project so you can edit the file)
  3. Add your name at the bottom
    • eg: Jeremy Ruston, @Jermolene, 2011/11/22
  4. Below the edit box for the CLA text you should see a box labelled Propose file change
  5. Enter a brief title to explain the change (eg, "Signing the CLA")
  6. Click the green button labelled Propose file change
  7. On the following screen, click the green button labelled Create pull request

The CLA documents used for this project were created using Harmony Project Templates. "HA-CLA-I-LIST Version 1.0" for "CLA-individual" and "HA-CLA-E-LIST Version 1.0" for "CLA-entity".

Remarks -----—

    • When not owning the copyright in the entire work of authorship**

In this case, please clearly state so, since otherwise we assume that you are the legal copyright holder of the contributed work! Please provide links and additional information that clarify under which license the rest of the code is distributed. +

Contributing to TiddlyWiki5

Here we focus on contributions via GitHub Pull Requests but there are many other ways that anyone can help the TiddlyWiki project, such as reporting bugs or helping to improve our documentation.

Rules for Pull Requests

PRs must meet these minimum requirements before they can be considered for merging:

  • The material in the PR must be free of licensing restrictions. Which means that either:
    • The author must hold the copyright in all of the material themselves
    • The material must be licensed under a license compatible with TiddlyWiki's BSD license
  • The author must sign the Contributors License Agreement (see below)
  • Each PR should only make a single feature change
  • The title of the PR should be 50 characters or less
  • The title of the PR should be capitalised, and should not end with a period
  • The title of the PR should be written in the imperative mood. See below
  • Adequate explanation in the body of the PR for the motivation and implementation of the change. Focus on the why and what, rather than the how
  • PRs must be self-contained. Although they can link to material elsewhere, everything needed to understand the intention of the PR should be included
  • Any visual changes introduced by the PR should be noted and illustrated with before/after screenshots
  • Documentation as appropriate for end-users or developers
  • Observe the coding style
  • Read the developers documentation
  • Please open a consultation issue prior to investing time in making a large PR

Imperative Mood for PR Titles

The "imperative mood" means written as if giving a command or instruction. See this post for more details, but the gist is that the title of the PR should make sense when used to complete the sentence "If applied, this commit will...". So for example, these are good PR titles:

  • If applied, this commit will update the contributing guidelines
  • If applied, this commit will change css-escape-polyfill to a $tw.utils method
  • If applied, this commit will make it easier to subclass the wikitext parser with a custom rule set

These a poorly worded PR titles:

  • If applied, this commit will edit text widgets should use default text for missing fields
  • If applied, this commit will signing the CLA
  • If applied, this commit will don't crash if options.event is missing

PR titles may also include a short prefix to indicate the subsystem to which they apply. For example:

  • Menu plugin: Include menu text in aerial rotator

Commenting on Pull Requests

One of the principles of open source is that many pairs of eyes on the code can improve quality. So, we welcome comments and critiques of pending PRs. Conventional Comments has some techniques to help make comments as constructive and actionable as possible. Notably, they recommend prefixing a comment with a label to clarify the intention:

praisePraises highlight something positive. Try to leave at least one of these comments per review. Do not leave false praise (which can actually be damaging). Do look for something to sincerely praise
nitpickNitpicks are small, trivial, but necessary changes. Distinguishing nitpick comments significantly helps direct the reader's attention to comments requiring more involvement
suggestionSuggestions are specific requests to improve the subject under review. It is assumed that we all want to do what's best, so these comments are never dismissed as “mere suggestions”, but are taken seriously
issueIssues represent user-facing problems. If possible, it's great to follow this kind of comment with a suggestion
questionQuestions are appropriate if you have a potential concern but are not quite sure if it's relevant or not. Asking the author for clarification or investigation can lead to a quick resolution
thoughtThoughts represent an idea that popped up from reviewing. These comments are non-blocking by nature, but they are extremely valuable and can lead to more focused initiatives and mentoring opportunities
choreChores are simple tasks that must be done before the subject can be “officially” accepted. Usually, these comments reference some common process. Try to leave a link to the process description so that the reader knows how to resolve the chore

Contributor License Agreement

Like other OpenSource projects, TiddlyWiki5 needs a signed contributor license agreement from individual contributors. This is a legal agreement that allows contributors to assert that they own the copyright of their contribution, and that they agree to license it to the UnaMesa Association (the legal entity that owns TiddlyWiki on behalf of the community).

How to sign the CLA

Create a GitHub pull request to add your name to cla-individual.md or cla-entity.md, with the date in the format (YYYY/MM/DD).

step by step

  1. Navigate to licenses/CLA-individual or licenses/CLA-entity according to whether you are signing as an individual or representative of an organisation
  2. Ensure that the "branch" dropdown at the top left is set to tiddlywiki-com
  3. Click the "edit" button at the top-right corner (clicking this button will fork the project so you can edit the file)
  4. Add your name at the bottom
    • eg: Jeremy Ruston, @Jermolene, 2011/11/22
  5. Below the edit box for the CLA text you should see a box labelled Propose file change
  6. Enter a brief title to explain the change (eg, "Signing the CLA")
  7. Click the green button labelled Propose file change
  8. On the following screen, click the green button labelled Create pull request

The CLA documents used for this project were created using Harmony Project Templates. "HA-CLA-I-LIST Version 1.0" for "CLA-individual" and "HA-CLA-E-LIST Version 1.0" for "CLA-entity".

This file was automatically generated by TiddlyWiki5

\ No newline at end of file diff --git a/core/copyright.tid b/core/copyright.tid index 21470e3c4..ce0d6b02f 100644 --- a/core/copyright.tid +++ b/core/copyright.tid @@ -4,7 +4,7 @@ type: text/plain TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com) Copyright (c) 2004-2007, Jeremy Ruston -Copyright (c) 2007-2018, UnaMesa Association +Copyright (c) 2007-2023, UnaMesa Association All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/core/images/add-comment.tid b/core/images/add-comment.tid index 3e77ed518..178221806 100644 --- a/core/images/add-comment.tid +++ b/core/images/add-comment.tid @@ -1,4 +1,4 @@ title: $:/core/images/add-comment tags: $:/tags/Image - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/advanced-search-button.tid b/core/images/advanced-search-button.tid index 5579193ac..6fda3fe8b 100755 --- a/core/images/advanced-search-button.tid +++ b/core/images/advanced-search-button.tid @@ -1,11 +1,4 @@ title: $:/core/images/advanced-search-button tags: $:/tags/Image - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/auto-height.tid b/core/images/auto-height.tid index e65b9c5b6..78f95418b 100755 --- a/core/images/auto-height.tid +++ b/core/images/auto-height.tid @@ -1,6 +1,4 @@ title: $:/core/images/auto-height tags: $:/tags/Image - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/blank.tid b/core/images/blank.tid index 17cd2e65a..731b55a5a 100755 --- a/core/images/blank.tid +++ b/core/images/blank.tid @@ -1,4 +1,4 @@ title: $:/core/images/blank tags: $:/tags/Image - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/bold.tid b/core/images/bold.tid index 0e5d9d8d6..67a00f894 100755 --- a/core/images/bold.tid +++ b/core/images/bold.tid @@ -1,8 +1,4 @@ title: $:/core/images/bold tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/cancel-button.tid b/core/images/cancel-button.tid index 2bca34874..c55620b06 100755 --- a/core/images/cancel-button.tid +++ b/core/images/cancel-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/cancel-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/chevron-down.tid b/core/images/chevron-down.tid index a20539d7a..f1b363dfc 100755 --- a/core/images/chevron-down.tid +++ b/core/images/chevron-down.tid @@ -1,9 +1,4 @@ title: $:/core/images/chevron-down tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/chevron-left.tid b/core/images/chevron-left.tid index 379db701e..e4c69d95a 100755 --- a/core/images/chevron-left.tid +++ b/core/images/chevron-left.tid @@ -1,9 +1,4 @@ title: $:/core/images/chevron-left tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/chevron-right.tid b/core/images/chevron-right.tid index 2d379867e..6ff5b6c0d 100755 --- a/core/images/chevron-right.tid +++ b/core/images/chevron-right.tid @@ -1,9 +1,4 @@ title: $:/core/images/chevron-right tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/chevron-up.tid b/core/images/chevron-up.tid index 29824211a..9acbdec40 100755 --- a/core/images/chevron-up.tid +++ b/core/images/chevron-up.tid @@ -1,9 +1,4 @@ title: $:/core/images/chevron-up tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/clone-button.tid b/core/images/clone-button.tid index 4aa1c9362..9ff4903ad 100755 --- a/core/images/clone-button.tid +++ b/core/images/clone-button.tid @@ -1,9 +1,4 @@ title: $:/core/images/clone-button tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/close-all-button.tid b/core/images/close-all-button.tid index d998e68e9..3334c5dbc 100755 --- a/core/images/close-all-button.tid +++ b/core/images/close-all-button.tid @@ -1,11 +1,4 @@ title: $:/core/images/close-all-button tags: $:/tags/Image - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/close-button.tid b/core/images/close-button.tid index da83fd5fb..c462c9bac 100755 --- a/core/images/close-button.tid +++ b/core/images/close-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/close-button tags: $:/tags/Image - - - - - + \ No newline at end of file diff --git a/core/images/close-others-button.tid b/core/images/close-others-button.tid index 78a163299..1cd54d797 100755 --- a/core/images/close-others-button.tid +++ b/core/images/close-others-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/close-others-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/copy-clipboard.tid b/core/images/copy-clipboard.tid index 583808bd4..e4e55b6e9 100644 --- a/core/images/copy-clipboard.tid +++ b/core/images/copy-clipboard.tid @@ -1,15 +1,4 @@ title: $:/core/images/copy-clipboard tags: $:/tags/Image - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/delete-button.tid b/core/images/delete-button.tid index 5dde6fe03..e8c9b6108 100755 --- a/core/images/delete-button.tid +++ b/core/images/delete-button.tid @@ -1,14 +1,4 @@ title: $:/core/images/delete-button tags: $:/tags/Image - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/done-button.tid b/core/images/done-button.tid index 069adafe9..265528d06 100755 --- a/core/images/done-button.tid +++ b/core/images/done-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/done-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/down-arrow.tid b/core/images/down-arrow.tid index 8315c8e49..4cac65a00 100755 --- a/core/images/down-arrow.tid +++ b/core/images/down-arrow.tid @@ -1,6 +1,4 @@ title: $:/core/images/down-arrow tags: $:/tags/Image - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/download-button.tid b/core/images/download-button.tid index 0c524b28f..e3a549639 100755 --- a/core/images/download-button.tid +++ b/core/images/download-button.tid @@ -1,4 +1,4 @@ title: $:/core/images/download-button tags: $:/tags/Image - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/edit-button.tid b/core/images/edit-button.tid index d65f94903..190dffc41 100755 --- a/core/images/edit-button.tid +++ b/core/images/edit-button.tid @@ -1,9 +1,4 @@ title: $:/core/images/edit-button tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/erase.tid b/core/images/erase.tid index ba18f5bd0..22b31e7cc 100755 --- a/core/images/erase.tid +++ b/core/images/erase.tid @@ -1,8 +1,4 @@ title: $:/core/images/erase tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/excise.tid b/core/images/excise.tid index 2360cb5a7..e6c2c9404 100755 --- a/core/images/excise.tid +++ b/core/images/excise.tid @@ -1,8 +1,4 @@ title: $:/core/images/excise tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/export-button.tid b/core/images/export-button.tid index 940ffe7d5..eb3284c80 100755 --- a/core/images/export-button.tid +++ b/core/images/export-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/export-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/file.tid b/core/images/file.tid index d66b19e50..67ebc22ac 100755 --- a/core/images/file.tid +++ b/core/images/file.tid @@ -1,14 +1,4 @@ title: $:/core/images/file tags: $:/tags/Image - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/fixed-height.tid b/core/images/fixed-height.tid index 3b53256ab..c15162267 100755 --- a/core/images/fixed-height.tid +++ b/core/images/fixed-height.tid @@ -1,8 +1,4 @@ title: $:/core/images/fixed-height tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/fold-all-button.tid b/core/images/fold-all-button.tid index c74ae421a..edff8b22b 100755 --- a/core/images/fold-all-button.tid +++ b/core/images/fold-all-button.tid @@ -1,11 +1,4 @@ title: $:/core/images/fold-all-button tags: $:/tags/Image - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/fold-button.tid b/core/images/fold-button.tid index 190e61d64..f0b2b474d 100755 --- a/core/images/fold-button.tid +++ b/core/images/fold-button.tid @@ -1,10 +1,4 @@ title: $:/core/images/fold-button tags: $:/tags/Image - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/fold-others-button.tid b/core/images/fold-others-button.tid index d19505cea..5cb086f85 100755 --- a/core/images/fold-others-button.tid +++ b/core/images/fold-others-button.tid @@ -1,10 +1,4 @@ title: $:/core/images/fold-others-button tags: $:/tags/Image - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/folder.tid b/core/images/folder.tid index 354e6e633..4b89418ff 100755 --- a/core/images/folder.tid +++ b/core/images/folder.tid @@ -1,9 +1,4 @@ title: $:/core/images/folder tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/full-screen-button.tid b/core/images/full-screen-button.tid index acc6edbd6..8572ff646 100755 --- a/core/images/full-screen-button.tid +++ b/core/images/full-screen-button.tid @@ -1,19 +1,4 @@ title: $:/core/images/full-screen-button tags: $:/tags/Image - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/github.tid b/core/images/github.tid index 98d9aeef3..6389f5cdc 100755 --- a/core/images/github.tid +++ b/core/images/github.tid @@ -1,8 +1,4 @@ title: $:/core/images/github tags: $:/tags/Image - - - - - + \ No newline at end of file diff --git a/core/images/gitter.tid b/core/images/gitter.tid index 0ac6deb4d..876fc3da1 100644 --- a/core/images/gitter.tid +++ b/core/images/gitter.tid @@ -1,9 +1,4 @@ title: $:/core/images/gitter tags: $:/tags/Image - - - - - - + \ No newline at end of file diff --git a/core/images/globe.tid b/core/images/globe.tid index 02b58e219..9448ed7a4 100755 --- a/core/images/globe.tid +++ b/core/images/globe.tid @@ -1,10 +1,4 @@ title: $:/core/images/globe tags: $:/tags/Image - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/heading-1.tid b/core/images/heading-1.tid index 94d57dee9..f8a98123b 100755 --- a/core/images/heading-1.tid +++ b/core/images/heading-1.tid @@ -1,8 +1,4 @@ title: $:/core/images/heading-1 tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/heading-2.tid b/core/images/heading-2.tid index 65b2e3750..ef0022cc6 100755 --- a/core/images/heading-2.tid +++ b/core/images/heading-2.tid @@ -1,8 +1,4 @@ title: $:/core/images/heading-2 tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/heading-3.tid b/core/images/heading-3.tid index 6899440a7..d706d067b 100755 --- a/core/images/heading-3.tid +++ b/core/images/heading-3.tid @@ -1,8 +1,4 @@ title: $:/core/images/heading-3 tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/heading-4.tid b/core/images/heading-4.tid index c30a44692..16d4440db 100755 --- a/core/images/heading-4.tid +++ b/core/images/heading-4.tid @@ -1,8 +1,4 @@ title: $:/core/images/heading-4 tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/heading-5.tid b/core/images/heading-5.tid index 8e0a7fdc8..8f34b7058 100755 --- a/core/images/heading-5.tid +++ b/core/images/heading-5.tid @@ -1,8 +1,4 @@ title: $:/core/images/heading-5 tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/heading-6.tid b/core/images/heading-6.tid index 93f7bcfd7..b348c70af 100755 --- a/core/images/heading-6.tid +++ b/core/images/heading-6.tid @@ -1,8 +1,4 @@ title: $:/core/images/heading-6 tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/help.tid b/core/images/help.tid index 33f924bc4..07167ae93 100755 --- a/core/images/help.tid +++ b/core/images/help.tid @@ -1,8 +1,4 @@ title: $:/core/images/help tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/home-button.tid b/core/images/home-button.tid index 5eabf6a98..10c00626a 100755 --- a/core/images/home-button.tid +++ b/core/images/home-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/home-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/import-button.tid b/core/images/import-button.tid index 54534bb6c..6850513ef 100755 --- a/core/images/import-button.tid +++ b/core/images/import-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/import-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/info-button.tid b/core/images/info-button.tid index 263fe9056..2679a135a 100755 --- a/core/images/info-button.tid +++ b/core/images/info-button.tid @@ -1,12 +1,4 @@ title: $:/core/images/info-button tags: $:/tags/Image - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/italic.tid b/core/images/italic.tid index f7c46b55c..06aada589 100755 --- a/core/images/italic.tid +++ b/core/images/italic.tid @@ -1,8 +1,4 @@ title: $:/core/images/italic tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/layout-button.tid b/core/images/layout-button.tid new file mode 100755 index 000000000..19371cde1 --- /dev/null +++ b/core/images/layout-button.tid @@ -0,0 +1,4 @@ +title: $:/core/images/layout-button +tags: $:/tags/Image + + \ No newline at end of file diff --git a/core/images/left-arrow.tid b/core/images/left-arrow.tid index 461aec452..a418581cd 100755 --- a/core/images/left-arrow.tid +++ b/core/images/left-arrow.tid @@ -3,6 +3,4 @@ modified: 20150315235324760 tags: $:/tags/Image title: $:/core/images/left-arrow - - - + \ No newline at end of file diff --git a/core/images/line-width.tid b/core/images/line-width.tid index 1e8854c4e..f77763ce6 100755 --- a/core/images/line-width.tid +++ b/core/images/line-width.tid @@ -1,9 +1,4 @@ title: $:/core/images/line-width tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/link.tid b/core/images/link.tid index 1e094a9b0..395307c42 100644 --- a/core/images/link.tid +++ b/core/images/link.tid @@ -1,9 +1,4 @@ title: $:/core/images/link tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/linkify.tid b/core/images/linkify.tid index 368d27490..40acdc19a 100644 --- a/core/images/linkify.tid +++ b/core/images/linkify.tid @@ -1,4 +1,4 @@ title: $:/core/images/linkify tags: $:/tags/Image - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/list-bullet.tid b/core/images/list-bullet.tid index 7951ad229..322dd4ae6 100755 --- a/core/images/list-bullet.tid +++ b/core/images/list-bullet.tid @@ -1,8 +1,4 @@ title: $:/core/images/list-bullet tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/list-number.tid b/core/images/list-number.tid index 768f16d25..161917823 100755 --- a/core/images/list-number.tid +++ b/core/images/list-number.tid @@ -1,8 +1,4 @@ title: $:/core/images/list-number tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/list.tid b/core/images/list.tid index c27a51647..22b784bfe 100644 --- a/core/images/list.tid +++ b/core/images/list.tid @@ -1,9 +1,4 @@ title: $:/core/images/list tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/locked-padlock.tid b/core/images/locked-padlock.tid index 28a6ea986..14d95560c 100755 --- a/core/images/locked-padlock.tid +++ b/core/images/locked-padlock.tid @@ -1,8 +1,4 @@ title: $:/core/images/locked-padlock tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/mail.tid b/core/images/mail.tid index 50d39f35f..cf0f4eab7 100755 --- a/core/images/mail.tid +++ b/core/images/mail.tid @@ -1,8 +1,4 @@ title: $:/core/images/mail tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/mastodon.tid b/core/images/mastodon.tid new file mode 100644 index 000000000..b27c751fd --- /dev/null +++ b/core/images/mastodon.tid @@ -0,0 +1,6 @@ +title: $:/core/images/mastodon +tags: $:/tags/Image + + + + diff --git a/core/images/menu-button.tid b/core/images/menu-button.tid index b2a9162d6..6d1872e4c 100755 --- a/core/images/menu-button.tid +++ b/core/images/menu-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/menu-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/minus-button.tid b/core/images/minus-button.tid new file mode 100644 index 000000000..7132ed3e9 --- /dev/null +++ b/core/images/minus-button.tid @@ -0,0 +1,4 @@ +title: $:/core/images/minus-button +tags: $:/tags/Image + + \ No newline at end of file diff --git a/core/images/mono-block.tid b/core/images/mono-block.tid index 1675e3854..f8695302b 100755 --- a/core/images/mono-block.tid +++ b/core/images/mono-block.tid @@ -1,8 +1,4 @@ title: $:/core/images/mono-block tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/mono-line.tid b/core/images/mono-line.tid index 81d0faf3f..09cfe513e 100755 --- a/core/images/mono-line.tid +++ b/core/images/mono-line.tid @@ -1,8 +1,4 @@ title: $:/core/images/mono-line tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/new-button.tid b/core/images/new-button.tid index 560d15350..6e592ada9 100755 --- a/core/images/new-button.tid +++ b/core/images/new-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/new-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/new-here-button.tid b/core/images/new-here-button.tid index ce8fd31bd..ab0f7a6f3 100755 --- a/core/images/new-here-button.tid +++ b/core/images/new-here-button.tid @@ -1,14 +1,4 @@ title: $:/core/images/new-here-button tags: $:/tags/Image - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/new-image-button.tid b/core/images/new-image-button.tid index 5109bf98d..16b63c3c3 100755 --- a/core/images/new-image-button.tid +++ b/core/images/new-image-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/new-image-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/new-journal-button.tid b/core/images/new-journal-button.tid index 86c3c589c..fb67c8007 100755 --- a/core/images/new-journal-button.tid +++ b/core/images/new-journal-button.tid @@ -1,16 +1,4 @@ title: $:/core/images/new-journal-button tags: $:/tags/Image - - - - - - - - <> - - - - - \ No newline at end of file +<> \ No newline at end of file diff --git a/core/images/opacity.tid b/core/images/opacity.tid index e9bb732e1..e9a29aea2 100755 --- a/core/images/opacity.tid +++ b/core/images/opacity.tid @@ -1,10 +1,4 @@ title: $:/core/images/opacity tags: $:/tags/Image - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/open-window.tid b/core/images/open-window.tid index 337c582a1..14b556484 100755 --- a/core/images/open-window.tid +++ b/core/images/open-window.tid @@ -1,9 +1,4 @@ title: $:/core/images/open-window tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/options-button.tid b/core/images/options-button.tid index 6b00b23f9..bd0ffcb1a 100755 --- a/core/images/options-button.tid +++ b/core/images/options-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/options-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/paint.tid b/core/images/paint.tid index c6dcab834..bb536b53a 100755 --- a/core/images/paint.tid +++ b/core/images/paint.tid @@ -1,8 +1,4 @@ title: $:/core/images/paint tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/palette.tid b/core/images/palette.tid index 083769bb6..d605fd853 100755 --- a/core/images/palette.tid +++ b/core/images/palette.tid @@ -1,8 +1,4 @@ title: $:/core/images/palette tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/permalink-button.tid b/core/images/permalink-button.tid index 28f1223a0..e8fd0aecd 100755 --- a/core/images/permalink-button.tid +++ b/core/images/permalink-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/permalink-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/permaview-button.tid b/core/images/permaview-button.tid index a501f6f6f..b2ad9a408 100755 --- a/core/images/permaview-button.tid +++ b/core/images/permaview-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/permaview-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/picture.tid b/core/images/picture.tid index 71d2bf1a6..7d035e2fc 100755 --- a/core/images/picture.tid +++ b/core/images/picture.tid @@ -1,8 +1,4 @@ title: $:/core/images/picture tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/plugin-generic-language.tid b/core/images/plugin-generic-language.tid index 1c5aa3ce5..5c777d98d 100755 --- a/core/images/plugin-generic-language.tid +++ b/core/images/plugin-generic-language.tid @@ -1,8 +1,4 @@ title: $:/core/images/plugin-generic-language tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/plugin-generic-plugin.tid b/core/images/plugin-generic-plugin.tid index 6f56da7a3..ab2e6670e 100755 --- a/core/images/plugin-generic-plugin.tid +++ b/core/images/plugin-generic-plugin.tid @@ -1,8 +1,4 @@ title: $:/core/images/plugin-generic-plugin tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/plugin-generic-theme.tid b/core/images/plugin-generic-theme.tid index 1f4224b10..9ae3cd779 100755 --- a/core/images/plugin-generic-theme.tid +++ b/core/images/plugin-generic-theme.tid @@ -1,8 +1,4 @@ title: $:/core/images/plugin-generic-theme tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/plus-button.tid b/core/images/plus-button.tid new file mode 100644 index 000000000..b001f3e2f --- /dev/null +++ b/core/images/plus-button.tid @@ -0,0 +1,4 @@ +title: $:/core/images/plus-button +tags: $:/tags/Image + + \ No newline at end of file diff --git a/core/images/preview-closed.tid b/core/images/preview-closed.tid index 1ca8f24ba..5986d8966 100755 --- a/core/images/preview-closed.tid +++ b/core/images/preview-closed.tid @@ -1,15 +1,4 @@ title: $:/core/images/preview-closed tags: $:/tags/Image - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/preview-open.tid b/core/images/preview-open.tid index 17f2319e1..4664990b4 100755 --- a/core/images/preview-open.tid +++ b/core/images/preview-open.tid @@ -1,9 +1,4 @@ title: $:/core/images/preview-open tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/print-button.tid b/core/images/print-button.tid index 5e7c1d8e0..55b33c896 100644 --- a/core/images/print-button.tid +++ b/core/images/print-button.tid @@ -1,12 +1,4 @@ title: $:/core/images/print-button tags: $:/tags/Image - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/quote.tid b/core/images/quote.tid index 882b1debc..7134306a6 100755 --- a/core/images/quote.tid +++ b/core/images/quote.tid @@ -1,8 +1,4 @@ title: $:/core/images/quote tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/refresh-button.tid b/core/images/refresh-button.tid index c28c7af32..2422b0679 100755 --- a/core/images/refresh-button.tid +++ b/core/images/refresh-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/refresh-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/right-arrow.tid b/core/images/right-arrow.tid index 14095b3b1..42e7dea56 100755 --- a/core/images/right-arrow.tid +++ b/core/images/right-arrow.tid @@ -1,6 +1,4 @@ title: $:/core/images/right-arrow tags: $:/tags/Image - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/rotate-left.tid b/core/images/rotate-left.tid index 7530aedde..188d3b45c 100644 --- a/core/images/rotate-left.tid +++ b/core/images/rotate-left.tid @@ -1,4 +1,4 @@ title: $:/core/images/rotate-left tags: $:/tags/Image - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/save-button-dynamic.tid b/core/images/save-button-dynamic.tid new file mode 100644 index 000000000..d0aa13f83 --- /dev/null +++ b/core/images/save-button-dynamic.tid @@ -0,0 +1,12 @@ +title: $:/core/images/save-button-dynamic +tags: $:/tags/Image + + + + + + + + + + \ No newline at end of file diff --git a/core/images/save-button.tid b/core/images/save-button.tid index dd57a92e5..a66756616 100755 --- a/core/images/save-button.tid +++ b/core/images/save-button.tid @@ -1,8 +1,4 @@ title: $:/core/images/save-button tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/size.tid b/core/images/size.tid index 4822dbb50..db84ecf9b 100755 --- a/core/images/size.tid +++ b/core/images/size.tid @@ -1,6 +1,4 @@ title: $:/core/images/size tags: $:/tags/Image - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/spiral.tid b/core/images/spiral.tid index 5ad004f46..ca4684cab 100755 --- a/core/images/spiral.tid +++ b/core/images/spiral.tid @@ -1,8 +1,4 @@ title: $:/core/images/spiral tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/stamp.tid b/core/images/stamp.tid index ab8949c1d..ba385aaae 100755 --- a/core/images/stamp.tid +++ b/core/images/stamp.tid @@ -1,8 +1,4 @@ title: $:/core/images/stamp tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/star-filled.tid b/core/images/star-filled.tid index 3199c14db..10b8f1c3d 100755 --- a/core/images/star-filled.tid +++ b/core/images/star-filled.tid @@ -1,8 +1,4 @@ title: $:/core/images/star-filled tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/storyview-classic.tid b/core/images/storyview-classic.tid index a0f7b7af0..86872817b 100755 --- a/core/images/storyview-classic.tid +++ b/core/images/storyview-classic.tid @@ -1,8 +1,4 @@ title: $:/core/images/storyview-classic tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/storyview-pop.tid b/core/images/storyview-pop.tid index f56cb58bc..a610c89d5 100755 --- a/core/images/storyview-pop.tid +++ b/core/images/storyview-pop.tid @@ -1,8 +1,4 @@ title: $:/core/images/storyview-pop tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/storyview-zoomin.tid b/core/images/storyview-zoomin.tid index 949f535e2..61b7ff273 100755 --- a/core/images/storyview-zoomin.tid +++ b/core/images/storyview-zoomin.tid @@ -1,8 +1,4 @@ title: $:/core/images/storyview-zoomin tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/strikethrough.tid b/core/images/strikethrough.tid index 80898c870..1f7a1c202 100755 --- a/core/images/strikethrough.tid +++ b/core/images/strikethrough.tid @@ -1,9 +1,4 @@ title: $:/core/images/strikethrough tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/subscript.tid b/core/images/subscript.tid index a56aa2f1d..96548bdb5 100755 --- a/core/images/subscript.tid +++ b/core/images/subscript.tid @@ -1,8 +1,4 @@ title: $:/core/images/subscript tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/superscript.tid b/core/images/superscript.tid index ca48636e0..149e44893 100755 --- a/core/images/superscript.tid +++ b/core/images/superscript.tid @@ -1,8 +1,4 @@ title: $:/core/images/superscript tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/tag-button.tid b/core/images/tag-button.tid index 9eb2a70d7..9f6cad8b4 100755 --- a/core/images/tag-button.tid +++ b/core/images/tag-button.tid @@ -1,9 +1,4 @@ title: $:/core/images/tag-button tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/theme-button.tid b/core/images/theme-button.tid index 8e14a45d5..d80a0e82a 100755 --- a/core/images/theme-button.tid +++ b/core/images/theme-button.tid @@ -1,9 +1,4 @@ title: $:/core/images/theme-button tags: $:/tags/Image - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/timestamp-off.tid b/core/images/timestamp-off.tid index 132dfc127..0d20f28d6 100644 --- a/core/images/timestamp-off.tid +++ b/core/images/timestamp-off.tid @@ -1,8 +1,4 @@ title: $:/core/images/timestamp-off tags: $:/tags/Image - - - - - + \ No newline at end of file diff --git a/core/images/timestamp-on.tid b/core/images/timestamp-on.tid index 292181b49..3a16df7eb 100644 --- a/core/images/timestamp-on.tid +++ b/core/images/timestamp-on.tid @@ -1,8 +1,4 @@ title: $:/core/images/timestamp-on tags: $:/tags/Image - - - - - + \ No newline at end of file diff --git a/core/images/tip.tid b/core/images/tip.tid index 88a622ab0..f8109ada4 100755 --- a/core/images/tip.tid +++ b/core/images/tip.tid @@ -1,8 +1,4 @@ title: $:/core/images/tip tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/transcludify.tid b/core/images/transcludify.tid index 33f7e0af1..0579feb10 100644 --- a/core/images/transcludify.tid +++ b/core/images/transcludify.tid @@ -1,4 +1,4 @@ title: $:/core/images/transcludify tags: $:/tags/Image - + \ No newline at end of file diff --git a/core/images/twitter.tid b/core/images/twitter.tid index 614cf762c..28cfccdbd 100755 --- a/core/images/twitter.tid +++ b/core/images/twitter.tid @@ -1,8 +1,4 @@ title: $:/core/images/twitter tags: $:/tags/Image - - - - - + \ No newline at end of file diff --git a/core/images/underline.tid b/core/images/underline.tid index 22465748b..768d2a199 100755 --- a/core/images/underline.tid +++ b/core/images/underline.tid @@ -1,8 +1,4 @@ title: $:/core/images/underline tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/unfold-all-button.tid b/core/images/unfold-all-button.tid index 29f217b94..e496bdd89 100755 --- a/core/images/unfold-all-button.tid +++ b/core/images/unfold-all-button.tid @@ -1,11 +1,4 @@ title: $:/core/images/unfold-all-button tags: $:/tags/Image - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/unfold-button.tid b/core/images/unfold-button.tid index bd4e9036d..cfad70570 100755 --- a/core/images/unfold-button.tid +++ b/core/images/unfold-button.tid @@ -1,10 +1,4 @@ title: $:/core/images/unfold-button tags: $:/tags/Image - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/unlocked-padlock.tid b/core/images/unlocked-padlock.tid index 6e24bb3b3..c5367c085 100755 --- a/core/images/unlocked-padlock.tid +++ b/core/images/unlocked-padlock.tid @@ -1,8 +1,4 @@ title: $:/core/images/unlocked-padlock tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/up-arrow.tid b/core/images/up-arrow.tid index b680b69df..a1bd132bf 100755 --- a/core/images/up-arrow.tid +++ b/core/images/up-arrow.tid @@ -3,7 +3,4 @@ modified: 20150316000831867 tags: $:/tags/Image title: $:/core/images/up-arrow - - - - + \ No newline at end of file diff --git a/core/images/video.tid b/core/images/video.tid index 6ae9fd46a..3bf0bb259 100755 --- a/core/images/video.tid +++ b/core/images/video.tid @@ -1,8 +1,4 @@ title: $:/core/images/video tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/images/warning.tid b/core/images/warning.tid index 1a34233dc..53bff59ec 100755 --- a/core/images/warning.tid +++ b/core/images/warning.tid @@ -1,8 +1,4 @@ title: $:/core/images/warning tags: $:/tags/Image - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/core/language/en-GB/Buttons.multids b/core/language/en-GB/Buttons.multids index cddf68485..85a71ac08 100644 --- a/core/language/en-GB/Buttons.multids +++ b/core/language/en-GB/Buttons.multids @@ -18,6 +18,8 @@ CopyToClipboard/Caption: copy to clipboard CopyToClipboard/Hint: Copy this text to the clipboard Delete/Caption: delete Delete/Hint: Delete this tiddler +DeleteTiddlers/Caption: delete tiddlers +DeleteTiddlers/Hint: Delete tiddlers Edit/Caption: edit Edit/Hint: Edit this tiddler Encryption/Caption: encryption @@ -32,6 +34,7 @@ ExportTiddler/Caption: export tiddler ExportTiddler/Hint: Export tiddler ExportTiddlers/Caption: export tiddlers ExportTiddlers/Hint: Export tiddlers +SidebarSearch/Hint: Select the sidebar search field Fold/Caption: fold tiddler Fold/Hint: Fold the body of this tiddler Fold/FoldBar/Caption: fold-bar @@ -56,6 +59,8 @@ Home/Caption: home Home/Hint: Open the default tiddlers Language/Caption: language Language/Hint: Choose the user interface language +LayoutSwitcher/Hint: Open layout switcher +LayoutSwitcher/Caption: layout Manager/Caption: tiddler manager Manager/Hint: Open tiddler manager More/Caption: more @@ -181,6 +186,7 @@ Subscript/Caption: subscript Subscript/Hint: Apply subscript formatting to selection Superscript/Caption: superscript Superscript/Hint: Apply superscript formatting to selection +ToggleSidebar/Hint: Toggle the sidebar visibility Transcludify/Caption: transclusion Transcludify/Hint: Wrap selection in curly brackets Underline/Caption: underline diff --git a/core/language/en-GB/ControlPanel.multids b/core/language/en-GB/ControlPanel.multids index 2b2358250..d8321edbf 100644 --- a/core/language/en-GB/ControlPanel.multids +++ b/core/language/en-GB/ControlPanel.multids @@ -4,29 +4,40 @@ Advanced/Caption: Advanced Advanced/Hint: Internal information about this TiddlyWiki Appearance/Caption: Appearance Appearance/Hint: Ways to customise the appearance of your TiddlyWiki. -Basics/AnimDuration/Prompt: Animation duration: +Basics/AnimDuration/Prompt: Animation duration +Basics/AutoFocus/Prompt: Default focus field for new tiddlers Basics/Caption: Basics -Basics/DefaultTiddlers/BottomHint: Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set="$:/DefaultTiddlers" setTo="[list[$:/StoryList]]">retain story ordering -Basics/DefaultTiddlers/Prompt: Default tiddlers: -Basics/DefaultTiddlers/TopHint: Choose which tiddlers are displayed at startup: +Basics/DefaultTiddlers/BottomHint: Use [[double square brackets]] for titles with spaces. Or you can choose to {{retain story ordering||$:/snippets/retain-story-ordering-button}} +Basics/DefaultTiddlers/Prompt: Default tiddlers +Basics/DefaultTiddlers/TopHint: Choose which tiddlers are displayed at startup Basics/Language/Prompt: Hello! Current language: Basics/NewJournal/Title/Prompt: Title of new journal tiddlers Basics/NewJournal/Text/Prompt: Text for new journal tiddlers Basics/NewJournal/Tags/Prompt: Tags for new journal tiddlers Basics/NewTiddler/Title/Prompt: Title of new tiddlers -Basics/OverriddenShadowTiddlers/Prompt: Number of overridden shadow tiddlers: -Basics/ShadowTiddlers/Prompt: Number of shadow tiddlers: -Basics/Subtitle/Prompt: Subtitle: -Basics/SystemTiddlers/Prompt: Number of system tiddlers: -Basics/Tags/Prompt: Number of tags: -Basics/Tiddlers/Prompt: Number of tiddlers: -Basics/Title/Prompt: Title of this ~TiddlyWiki: -Basics/Username/Prompt: Username for signing edits: -Basics/Version/Prompt: ~TiddlyWiki version: +Basics/NewTiddler/Tags/Prompt: Tags for new tiddlers +Basics/OverriddenShadowTiddlers/Prompt: Number of overridden shadow tiddlers +Basics/RemoveTags: Update to current format +Basics/RemoveTags/Hint: Update the tags configuration to the latest format +Basics/ShadowTiddlers/Prompt: Number of shadow tiddlers +Basics/Subtitle/Prompt: Subtitle +Basics/SystemTiddlers/Prompt: Number of system tiddlers +Basics/Tags/Prompt: Number of tags +Basics/Tiddlers/Prompt: Number of tiddlers +Basics/Title/Prompt: Title of this ~TiddlyWiki +Basics/Username/Prompt: Username for signing edits +Basics/Version/Prompt: ~TiddlyWiki version +Cascades/Caption: Cascades +Cascades/Hint: These global rules are used to dynamically choose certain templates. The result of the cascade is the result of the first filter in the sequence that returns a result +Cascades/TagPrompt: Filters tagged <$macrocall $name="tag" tag=<>/> EditorTypes/Caption: Editor Types EditorTypes/Editor/Caption: Editor EditorTypes/Hint: These tiddlers determine which editor is used to edit specific tiddler types. EditorTypes/Type/Caption: Type +EditTemplateBody/Caption: Edit Template Body +EditTemplateBody/Hint: This rule cascade is used by the default edit template to dynamically choose the template for editing the body of a tiddler. +FieldEditor/Caption: Field Editor +FieldEditor/Hint: This rules cascade is used to dynamically choose the template for rendering a tiddler field based on its name. It is used within the Edit Template. Info/Caption: Info Info/Hint: Information about this TiddlyWiki KeyboardShortcuts/Add/Prompt: Type shortcut here @@ -42,11 +53,14 @@ KeyboardShortcuts/Platform/Linux: Linux platform only KeyboardShortcuts/Platform/NonLinux: Non-Linux platforms only KeyboardShortcuts/Platform/Windows: Windows platform only KeyboardShortcuts/Platform/NonWindows: Non-Windows platforms only +LayoutSwitcher/Caption: Layout LoadedModules/Caption: Loaded Modules LoadedModules/Hint: These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process. Palette/Caption: Palette Palette/Editor/Clone/Caption: clone Palette/Editor/Clone/Prompt: It is recommended that you clone this shadow palette before editing it +Palette/Editor/Delete/Hint: delete this entry from the current palette +Palette/Editor/Names/External/Show: Show color names that are not part of the current palette Palette/Editor/Prompt/Modified: This shadow palette has been modified Palette/Editor/Prompt: Editing Palette/Editor/Reset/Caption: reset @@ -61,10 +75,12 @@ Parsing/Pragma/Caption: Pragma Parse Rules Plugins/Add/Caption: Get more plugins Plugins/Add/Hint: Install plugins from the official library Plugins/AlreadyInstalled/Hint: This plugin is already installed at version <$text text=<>/> +Plugins/AlsoRequires: Also requires: Plugins/Caption: Plugins Plugins/Disable/Caption: disable Plugins/Disable/Hint: Disable this plugin when reloading page Plugins/Disabled/Status: (disabled) +Plugins/Downgrade/Caption: downgrade Plugins/Empty/Hint: None Plugins/Enable/Caption: enable Plugins/Enable/Hint: Enable this plugin when reloading page @@ -74,13 +90,19 @@ Plugins/Languages/Caption: Languages Plugins/Languages/Hint: Language pack plugins Plugins/NoInfoFound/Hint: No ''"<$text text=<>/>"'' found Plugins/NotInstalled/Hint: This plugin is not currently installed -Plugins/OpenPluginLibrary: open plugin library -Plugins/ClosePluginLibrary: close plugin library +Plugins/OpenPluginLibrary: Open plugin library +Plugins/ClosePluginLibrary: Close plugin library +Plugins/PluginWillRequireReload: (requires reload) Plugins/Plugins/Caption: Plugins Plugins/Plugins/Hint: Plugins Plugins/Reinstall/Caption: reinstall Plugins/Themes/Caption: Themes Plugins/Themes/Hint: Theme plugins +Plugins/Update/Caption: update +Plugins/Updates/Caption: Updates +Plugins/Updates/Hint: Available updates to installed plugins +Plugins/Updates/UpdateAll/Caption: Update <> plugins +Plugins/SubPluginPrompt: With <> sub-plugins available Saving/Caption: Saving Saving/DownloadSaver/AutoSave/Description: Permit automatic saving for the download saver Saving/DownloadSaver/AutoSave/Hint: Enable Autosave for Download Saver @@ -89,15 +111,31 @@ Saving/DownloadSaver/Hint: These settings apply to the HTML5-compatible download Saving/General/Caption: General Saving/General/Hint: These settings apply to all the loaded savers Saving/Hint: Settings used for saving the entire TiddlyWiki as a single file via a saver module +Saving/GitService/Branch: Target branch for saving +Saving/GitService/CommitMessage: Saved by TiddlyWiki +Saving/GitService/Description: These settings are only used when saving to <> +Saving/GitService/Filename: Filename of target file (e.g. `index.html`) +Saving/GitService/Path: Path to target file (e.g. `/wiki/`) +Saving/GitService/Repo: Target repository (e.g. `Jermolene/TiddlyWiki5`) +Saving/GitService/ServerURL: Server API URL +Saving/GitService/UserName: Username +Saving/GitService/GitHub/Caption: ~GitHub Saver +Saving/GitService/GitHub/Password: Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details) +Saving/GitService/GitLab/Caption: ~GitLab Saver +Saving/GitService/GitLab/Password: Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details) +Saving/GitService/Gitea/Caption: Gitea Saver +Saving/GitService/Gitea/Password: Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`) Saving/TiddlySpot/Advanced/Heading: Advanced Settings Saving/TiddlySpot/BackupDir: Backup Directory +Saving/TiddlySpot/ControlPanel: ~TiddlySpot Control Panel Saving/TiddlySpot/Backups: Backups Saving/TiddlySpot/Caption: ~TiddlySpot Saver -Saving/TiddlySpot/Description: These settings are only used when saving to http://tiddlyspot.com or a compatible remote server +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/Heading: ~TiddlySpot Saving/TiddlySpot/Hint: //The server URL defaults to `http://.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/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/UploadDir: Upload Directory Saving/TiddlySpot/UserName: Wiki Name @@ -160,6 +198,8 @@ Settings/TitleLinks/Yes/Description: Display tiddler titles as links Settings/MissingLinks/Caption: Wiki Links Settings/MissingLinks/Hint: Choose whether to link to tiddlers that do not exist yet Settings/MissingLinks/Description: Enable links to missing tiddlers +StoryTiddler/Caption: Story Tiddler +StoryTiddler/Hint: This rule cascade is used to dynamically choose the template for displaying a tiddler in the story river. StoryView/Caption: Story View StoryView/Prompt: Current view: Stylesheets/Caption: Stylesheets @@ -170,6 +210,10 @@ Theme/Caption: Theme Theme/Prompt: Current theme: TiddlerFields/Caption: Tiddler Fields TiddlerFields/Hint: This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers). +TiddlerColour/Caption: Tiddler Colour +TiddlerColour/Hint: This rules cascade is used to dynamically choose the colour for a tiddler (used for the icon and the associated tag pill). +TiddlerIcon/Caption: Tiddler Icon +TiddlerIcon/Hint: This rules cascade is used to dynamically choose the icon for a tiddler. Toolbars/Caption: Toolbars Toolbars/EditToolbar/Caption: Edit Toolbar Toolbars/EditToolbar/Hint: Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering @@ -181,3 +225,7 @@ Toolbars/EditorToolbar/Hint: Choose which buttons are displayed in the editor to Toolbars/ViewToolbar/Caption: View Toolbar Toolbars/ViewToolbar/Hint: Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering Tools/Download/Full/Caption: Download full wiki +ViewTemplateBody/Caption: View Template Body +ViewTemplateBody/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the body of a tiddler. +ViewTemplateTitle/Caption: View Template Title +ViewTemplateTitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the title of a tiddler. diff --git a/core/language/en-GB/Docs/ModuleTypes.multids b/core/language/en-GB/Docs/ModuleTypes.multids index 1e1abd424..9a03d8887 100644 --- a/core/language/en-GB/Docs/ModuleTypes.multids +++ b/core/language/en-GB/Docs/ModuleTypes.multids @@ -23,6 +23,7 @@ tiddlerfield: Defines the behaviour of an individual tiddler field. tiddlermethod: Adds methods to the `$tw.Tiddler` prototype. upgrader: Applies upgrade processing to tiddlers during an upgrade/import. utils: Adds methods to `$tw.utils`. +utils-browser: Adds browser-specific methods to `$tw.utils`. utils-node: Adds Node.js-specific methods to `$tw.utils`. widget: Widgets encapsulate DOM rendering and refreshing. wikimethod: Adds methods to `$tw.Wiki`. diff --git a/core/language/en-GB/Docs/PaletteColours.multids b/core/language/en-GB/Docs/PaletteColours.multids index 5e13de9f3..98addbf85 100644 --- a/core/language/en-GB/Docs/PaletteColours.multids +++ b/core/language/en-GB/Docs/PaletteColours.multids @@ -29,6 +29,8 @@ external-link-foreground-hover: External link foreground hover external-link-foreground-visited: External link foreground visited external-link-foreground: External link foreground foreground: General foreground +menubar-background: Menu bar background +menubar-foreground: Menu bar foreground message-background: Message box background message-border: Message box border message-foreground: Message box foreground diff --git a/core/language/en-GB/EditTemplate.multids b/core/language/en-GB/EditTemplate.multids index 9a80300f0..c4bfa5e56 100644 --- a/core/language/en-GB/EditTemplate.multids +++ b/core/language/en-GB/EditTemplate.multids @@ -1,13 +1,17 @@ title: $:/language/EditTemplate/ +Caption: Editor Body/External/Hint: This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself Body/Placeholder: Type the text for this tiddler Body/Preview/Type/Output: output +Body/Preview/Type/DiffShadow: differences from shadow (if any) +Body/Preview/Type/DiffCurrent: differences from current Field/Remove/Caption: remove field Field/Remove/Hint: Remove field Field/Dropdown/Caption: field list Field/Dropdown/Hint: Show field list Fields/Add/Button: add +Fields/Add/Button/Hint: Add the new field to the tiddler Fields/Add/Name/Placeholder: field name Fields/Add/Prompt: Add a new field: Fields/Add/Value/Placeholder: field value @@ -16,7 +20,10 @@ Fields/Add/Dropdown/User: User fields Shadow/Warning: This is a shadow tiddler. Any changes you make will override the default version from the plugin <> Shadow/OverriddenWarning: This is a modified shadow tiddler. You can revert to the default version in the plugin <> by deleting this tiddler Tags/Add/Button: add +Tags/Add/Button/Hint: add tag Tags/Add/Placeholder: tag name +Tags/ClearInput/Caption: clear input +Tags/ClearInput/Hint: Clear tag input Tags/Dropdown/Caption: tag list Tags/Dropdown/Hint: Show tag list Title/BadCharacterWarning: Warning: avoid using any of the characters <> in tiddler titles diff --git a/core/language/en-GB/Fields.multids b/core/language/en-GB/Fields.multids index 12b46293a..1330e60a0 100644 --- a/core/language/en-GB/Fields.multids +++ b/core/language/en-GB/Fields.multids @@ -1,10 +1,13 @@ title: $:/language/Docs/Fields/ _canonical_uri: The full URI of an external image tiddler +author: Name of the author of a plugin bag: The name of the bag from which a tiddler came caption: The text to be displayed on a tab or button +code-body: The view template will display the tiddler as code if set to ''yes'' color: The CSS color value associated with a 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 current-tiddler: Used to cache the top tiddler in a [[history list|HistoryMechanism]] created: The date a tiddler was created creator: The name of the person who created a tiddler @@ -12,26 +15,29 @@ dependents: For a plugin, lists the dependent plugin titles description: The descriptive text for a plugin, or a modal dialogue draft.of: For draft tiddlers, contains the title of the tiddler of which this is a draft draft.title: For draft tiddlers, contains the proposed new title of the tiddler -footer: The footer text for a wizard -hack-to-give-us-something-to-compare-against: A temporary storage field used in [[$:/core/templates/static.content]] -hide-body: The view template will hide bodies of tiddlers if set to: ''yes'' +footer: The footer text for a modal +hide-body: The view template will hide bodies of tiddlers if set to ''yes'' icon: The title of the tiddler containing the icon associated with a tiddler -library: Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes'' +library: Indicates that a tiddler should be saved as a JavaScript library if set to ''yes'' list: An ordered list of tiddler titles associated with a tiddler list-before: If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty list-after: If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty modified: The date and time at which a tiddler was last modified modifier: The tiddler title associated with the person who last modified a tiddler +module-type: For javascript tiddlers, specifies what kind of module it is name: The human readable name associated with a plugin tiddler +parent-plugin: For a plugin, specifies which plugin of which it is a sub-plugin plugin-priority: A numerical value indicating the priority of a plugin tiddler plugin-type: The type of plugin in a plugin tiddler revision: The revision of the tiddler held at the server released: Date of a TiddlyWiki release source: The source URL associated with a tiddler -subtitle: The subtitle text for a wizard +subtitle: The subtitle text for a modal tags: A list of tags associated with a tiddler text: The body text of a tiddler +throttle.refresh: If present, throttles refreshes of this tiddler title: The unique name of a tiddler -toc-link: Suppresses the tiddler's link in a Table of Contents tree if set to: ''no'' +toc-link: Suppresses the tiddler's link in a Table of Contents tree if set to ''no'' type: The content type of a tiddler version: Version information for a plugin +_is_skinny: If present, indicates that the tiddler text field must be loaded from the server diff --git a/core/language/en-GB/GettingStarted.tid b/core/language/en-GB/GettingStarted.tid index ae6e3b167..a3073a521 100644 --- a/core/language/en-GB/GettingStarted.tid +++ b/core/language/en-GB/GettingStarted.tid @@ -9,9 +9,10 @@ Before you start storing important information in ~TiddlyWiki it is vital to mak
-|<$link to="$:/SiteTitle"><> |<$edit-text tiddler="$:/SiteTitle" default="" tag="input"/> | -|<$link to="$:/SiteSubtitle"><> |<$edit-text tiddler="$:/SiteSubtitle" default="" tag="input"/> | -|<$link to="$:/DefaultTiddlers"><> |<>
<$edit tag="textarea" tiddler="$:/DefaultTiddlers"/>
//<>// | +|tc-table-no-border tc-first-col-min-width tc-first-link-nowrap|k +| <$link to="$:/SiteTitle"><>|<$edit-text tiddler="$:/SiteTitle" default="" tag="input"/> | +| <$link to="$:/SiteSubtitle"><>|<$edit-text tiddler="$:/SiteSubtitle" default="" tag="input"/> | +|^ <$link to="$:/DefaultTiddlers"><>
<>|<$edit tag="textarea" tiddler="$:/DefaultTiddlers"/>
//<>// |
See the [[control panel|$:/ControlPanel]] for more options. diff --git a/core/language/en-GB/Help/commands.tid b/core/language/en-GB/Help/commands.tid new file mode 100644 index 000000000..454159b44 --- /dev/null +++ b/core/language/en-GB/Help/commands.tid @@ -0,0 +1,18 @@ +title: $:/language/Help/commands +description: Run commands returned from a filter + +Sequentially run the command tokens returned from a filter + +``` +--commands +``` + +Examples + +``` +--commands "[enlist{$:/build-commands-as-text}]" +``` + +``` +--commands "[{$:/build-commands-as-json}jsonindexes[]] :map[{$:/build-commands-as-json}jsonget]" +``` diff --git a/core/language/en-GB/Help/default.tid b/core/language/en-GB/Help/default.tid index 0a8fce44c..1ca0926a9 100644 --- a/core/language/en-GB/Help/default.tid +++ b/core/language/en-GB/Help/default.tid @@ -3,6 +3,7 @@ title: $:/language/Help/default \define commandTitle() $:/language/Help/$(command)$ \end +\whitespace trim ``` usage: tiddlywiki [] [-- [...]...] ``` @@ -11,7 +12,9 @@ Available commands:
    <$list filter="[commands[]sort[title]]" variable="command"> -
  • <$link to=<>><$macrocall $name="command" $type="text/plain" $output="text/plain"/>: <$transclude tiddler=<> field="description"/>
  • +
  • <$link to=<>><$macrocall $name="command" $type="text/plain" $output="text/plain"/>: + +<$transclude tiddler=<> field="description"/>
diff --git a/core/language/en-GB/Help/deletetiddlers.tid b/core/language/en-GB/Help/deletetiddlers.tid new file mode 100644 index 000000000..ec2b2cf94 --- /dev/null +++ b/core/language/en-GB/Help/deletetiddlers.tid @@ -0,0 +1,8 @@ +title: $:/language/Help/deletetiddlers +description: Deletes a group of tiddlers + +<<.from-version "5.1.20">> Deletes a group of tiddlers identified by a filter. + +``` +--deletetiddlers +``` diff --git a/core/language/en-GB/Help/listen.tid b/core/language/en-GB/Help/listen.tid index 88208ea29..45df72381 100644 --- a/core/language/en-GB/Help/listen.tid +++ b/core/language/en-GB/Help/listen.tid @@ -19,8 +19,8 @@ All parameters are optional with safe defaults, and can be specified in any orde * ''username'' - optional username for basic authentication * ''password'' - optional password for basic authentication * ''authenticated-user-header'' - optional name of header to be used for trusted authentication -* ''readers'' - comma separated list of principals allowed to read from this wiki -* ''writers'' - comma separated list of principals allowed to write to this wiki +* ''readers'' - comma-separated list of principals allowed to read from this wiki +* ''writers'' - comma-separated list of principals allowed to write to this wiki * ''csrf-disable'' - set to "yes" to disable CSRF checks (defaults to "no") * ''root-tiddler'' - the tiddler to serve at the root (defaults to "$:/core/save/all") * ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to "text/plain") @@ -29,6 +29,7 @@ All parameters are optional with safe defaults, and can be specified in any orde * ''tls-key'' - pathname of TLS key file (relative to wiki folder) * ''debug-level'' - optional debug level; set to "debug" to view request details (defaults to "none") * ''gzip'' - set to "yes" to enable gzip compression for some http endpoints (defaults to "no") +* ''use-browser-cache'' - set to "yes" to allow the browser to cache responses to save bandwidth (defaults to "no") For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com. diff --git a/core/language/en-GB/Help/load.tid b/core/language/en-GB/Help/load.tid index afc8642cb..2999f60c5 100644 --- a/core/language/en-GB/Help/load.tid +++ b/core/language/en-GB/Help/load.tid @@ -4,10 +4,12 @@ description: Load tiddlers from a file Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly. ``` ---load ---load +--load [noerror] +--load [noerror] ``` +By default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional "noerror" parameter. + To load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example: ``` diff --git a/core/language/en-GB/Help/render.tid b/core/language/en-GB/Help/render.tid index 9318b5cfa..f25390fea 100644 --- a/core/language/en-GB/Help/render.tid +++ b/core/language/en-GB/Help/render.tid @@ -8,15 +8,15 @@ Optionally, the title of a template tiddler can be specified. In this case, inst A name and value for an additional variable may optionally also be specified. ``` ---render [] [] [