diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed16d707d2..f6fb58f7d2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version: "${{ env.NODE_VERSION }}" @@ -30,7 +30,7 @@ jobs: TW5_BUILD_MAIN_EDITION: "./editions/prerelease" TW5_BUILD_OUTPUT: "./output/prerelease" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version: "${{ env.NODE_VERSION }}" @@ -62,7 +62,7 @@ jobs: TW5_BUILD_OUTPUT: "./output" TW5_BUILD_ARCHIVE: "./output" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version: "${{ env.NODE_VERSION }}" diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml new file mode 100644 index 0000000000..eae1d2c468 --- /dev/null +++ b/.github/workflows/eslint.yml @@ -0,0 +1,40 @@ +name: ESLint + +on: + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + +concurrency: + group: lint-${{ github.event.pull_request.number || github.ref_name }} + cancel-in-progress: true + +permissions: + contents: read + # Needed for GitHub Checks API + checks: write + +jobs: + eslint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + run: npm install --include=dev + + - name: Run ESLint with reviewdog (GitHub Checks) + uses: reviewdog/action-eslint@v1 + with: + eslint_flags: '.' + reporter: github-pr-check + fail_level: error + level: error + tool_name: ESLint PR code diff --git a/.github/workflows/pr-check-build-size.yml b/.github/workflows/pr-check-build-size.yml new file mode 100644 index 0000000000..8512a30d4e --- /dev/null +++ b/.github/workflows/pr-check-build-size.yml @@ -0,0 +1,55 @@ +name: Calculate PR build size +on: + pull_request_target: + types: [opened, reopened, synchronize] + paths: + - 'boot/**' + - 'core/**' + - 'themes/tiddlywiki/snowwhite/**' + - 'themes/tiddlywiki/vanilla/**' + +jobs: + calculate-build-size: + runs-on: ubuntu-latest + permissions: + pull-requests: read + contents: read + outputs: + pr_size: ${{ steps.get_sizes.outputs.pr_size }} + base_size: ${{ steps.get_sizes.outputs.base_size }} + steps: + - name: build-size-check + id: get_sizes + uses: TiddlyWiki/cerebrus@v4 + with: + pr_number: ${{ github.event.pull_request.number }} + repo: ${{ github.repository }} + base_ref: ${{ github.event.pull_request.base.ref }} + github_token: ${{ secrets.GITHUB_TOKEN }} + mode: size:calc + + dispatch-followup: + needs: calculate-build-size + runs-on: ubuntu-latest + permissions: + actions: write # Required to dispatch another workflow + pull-requests: write + contents: read + steps: + - name: Trigger follow-up workflow + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + await github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'pr-comment-build-size.yml', + ref: 'master', + inputs: { + pr_number: '${{ github.event.pull_request.number }}', + base_ref: '${{ github.event.pull_request.base.ref }}', + pr_size: '${{ needs.calculate-build-size.outputs.pr_size }}', + base_size: '${{ needs.calculate-build-size.outputs.base_size }}' + } + }); \ No newline at end of file diff --git a/.github/workflows/pr-comment-build-size.yml b/.github/workflows/pr-comment-build-size.yml new file mode 100644 index 0000000000..8421d99c8d --- /dev/null +++ b/.github/workflows/pr-comment-build-size.yml @@ -0,0 +1,36 @@ +name: Comment on PR build size (Trusted workflow) + +on: + workflow_dispatch: + inputs: + pr_number: + required: true + type: string + base_ref: + required: true + type: string + pr_size: + required: true + type: string + base_size: + required: true + type: string + +jobs: + comment-on-pr: + runs-on: ubuntu-latest + permissions: + pull-requests: write + contents: read + + steps: + - name: Build and check size + uses: TiddlyWiki/cerebrus@v4 + with: + pr_number: ${{ inputs.pr_number }} + repo: ${{ github.repository }} + base_ref: ${{ inputs.base_ref }} + github_token: ${{ secrets.GITHUB_TOKEN }} + mode: size:comment + pr_size: ${{ inputs.pr_size }} + base_size: ${{ inputs.base_size }} diff --git a/.github/workflows/pr-path-validation.yml b/.github/workflows/pr-path-validation.yml new file mode 100644 index 0000000000..674a9115bd --- /dev/null +++ b/.github/workflows/pr-path-validation.yml @@ -0,0 +1,18 @@ +name: Validate PR Paths + +on: + pull_request_target: + types: [opened, reopened, synchronize] + +jobs: + validate-pr: + runs-on: ubuntu-latest + + steps: + - name: Validate PR + uses: TiddlyWiki/cerebrus@v4 + with: + pr_number: ${{ github.event.pull_request.number }} + repo: ${{ github.repository }} + base_ref: ${{ github.base_ref }} + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/bin/build-site.sh b/bin/build-site.sh index 40b9b447e5..a68dc0752b 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.3.7 + TW5_BUILD_VERSION=v5.4.0 fi echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]" @@ -73,10 +73,8 @@ rm $TW5_BUILD_OUTPUT/dev/static/* echo "Moved to http://tiddlywiki.com/plugins/tiddlywiki/tw2parser/index.html" > $TW5_BUILD_OUTPUT/classicparserdemo.html echo "Moved to http://tiddlywiki.com/plugins/tiddlywiki/codemirror/index.html" > $TW5_BUILD_OUTPUT/codemirrordemo.html -echo "Moved to http://tiddlywiki.com/plugins/tiddlywiki/d3/index.html" > $TW5_BUILD_OUTPUT/d3demo.html echo "Moved to http://tiddlywiki.com/plugins/tiddlywiki/highlight/index.html" > $TW5_BUILD_OUTPUT/highlightdemo.html echo "Moved to http://tiddlywiki.com/plugins/tiddlywiki/markdown/index.html" > $TW5_BUILD_OUTPUT/markdowndemo.html -echo "Moved to http://tiddlywiki.com/plugins/tiddlywiki/tahoelafs/index.html" > $TW5_BUILD_OUTPUT/tahoelafs.html # Put the build details into a .tid file so that it can be included in each build (deleted at the end of this script) @@ -159,6 +157,13 @@ node $TW5_BUILD_TIDDLYWIKI \ --rendertiddler $:/core/save/all-external-js tour.html text/plain \ || exit 1 +# /surveys.html surveys edition +node $TW5_BUILD_TIDDLYWIKI \ + ./editions/tiddlywiki-surveys \ + --output $TW5_BUILD_OUTPUT \ + --build index \ + || exit 1 + # /share.html Custom edition for sharing via the URL node $TW5_BUILD_TIDDLYWIKI \ ./editions/share \ @@ -294,26 +299,6 @@ node $TW5_BUILD_TIDDLYWIKI \ --rendertiddler $:/core/save/empty plugins/tiddlywiki/katex/empty.html text/plain \ || exit 1 -# /plugins/tiddlywiki/tahoelafs/index.html Demo wiki with Tahoe-LAFS plugin -# /plugins/tiddlywiki/tahoelafs/empty.html Empty wiki with Tahoe-LAFS plugin -node $TW5_BUILD_TIDDLYWIKI \ - ./editions/tahoelafs \ - --load $TW5_BUILD_OUTPUT/build.tid \ - --output $TW5_BUILD_OUTPUT \ - --rendertiddler $:/core/save/all plugins/tiddlywiki/tahoelafs/index.html text/plain \ - --rendertiddler $:/core/save/empty plugins/tiddlywiki/tahoelafs/empty.html text/plain \ - || exit 1 - -# /plugins/tiddlywiki/d3/index.html Demo wiki with D3 plugin -# /plugins/tiddlywiki/d3/empty.html Empty wiki with D3 plugin -node $TW5_BUILD_TIDDLYWIKI \ - ./editions/d3demo \ - --load $TW5_BUILD_OUTPUT/build.tid \ - --output $TW5_BUILD_OUTPUT \ - --rendertiddler $:/core/save/all plugins/tiddlywiki/d3/index.html text/plain \ - --rendertiddler $:/core/save/empty plugins/tiddlywiki/d3/empty.html text/plain \ - || exit 1 - # /plugins/tiddlywiki/codemirror/index.html Demo wiki with codemirror plugin # /plugins/tiddlywiki/codemirror/empty.html Empty wiki with codemirror plugin node $TW5_BUILD_TIDDLYWIKI \ diff --git a/boot/boot.js b/boot/boot.js index 20a639731c..6ac64c5868 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -641,7 +641,7 @@ $tw.utils.evalGlobal = function(code,context,filename,sandbox,allowGlobals) { // Call the function and return the exports return fn.apply(null,contextValues); }; -$tw.utils.sandbox = !$tw.browser ? vm.createContext({}) : undefined; +$tw.utils.sandbox = !$tw.browser ? vm.createContext({}) : undefined; /* Run code in a sandbox with only the specified context variables in scope */ @@ -799,12 +799,13 @@ the password, and to encrypt/decrypt a block of text $tw.utils.Crypto = function() { var sjcl = $tw.node ? (global.sjcl || require("./sjcl.js")) : window.sjcl, currentPassword = null, - callSjcl = function(method,inputText,password) { + callSjcl = function(method,inputText,password,options) { + options = options || {}; password = password || currentPassword; var outputText; try { if(password) { - outputText = sjcl[method](password,inputText); + outputText = sjcl[method](password,inputText,options); } } catch(ex) { console.log("Crypto error:" + ex); @@ -830,7 +831,8 @@ $tw.utils.Crypto = function() { return !!currentPassword; } this.encrypt = function(text,password) { - return callSjcl("encrypt",text,password); + // set default ks:256 -- see: http://bitwiseshiftleft.github.io/sjcl/doc/convenience.js.html + return callSjcl("encrypt",text,password,{v:1,iter:10000,ks:256,ts:64,mode:"ccm",adata:"",cipher:"aes"}); }; this.decrypt = function(text,password) { return callSjcl("decrypt",text,password); @@ -1433,7 +1435,7 @@ $tw.Wiki = function(options) { checkTiddler = function(tiddler,title) { 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") { + if(title === "$:/core" || title === "$:/core-server" || !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); @@ -1530,7 +1532,8 @@ Define all modules stored in ordinary tiddlers */ $tw.Wiki.prototype.defineTiddlerModules = function() { this.each(function(tiddler,title) { - if(tiddler.hasField("module-type")) { + // Modules in draft tiddlers are disabled + if(tiddler.hasField("module-type") && (!tiddler.hasField("draft.of"))) { switch(tiddler.fields.type) { case "application/javascript": // We only define modules that haven't already been defined, because in the browser modules in system tiddlers are defined in inline script @@ -1557,6 +1560,11 @@ $tw.Wiki.prototype.defineShadowModules = function() { this.eachShadow(function(tiddler,title) { // Don't define the module if it is overidden by an ordinary tiddler if(!self.tiddlerExists(title) && tiddler.hasField("module-type")) { + if(tiddler.hasField("draft.of")) { + // Report a fundamental problem + console.warn(`TiddlyWiki: Plugins should not contain tiddlers with a 'draft.of' field: ${tiddler.fields.title}`); + return; + } // Define the module $tw.modules.define(tiddler.fields.title,tiddler.fields["module-type"],tiddler.fields.text); } @@ -1905,7 +1913,7 @@ $tw.loadTiddlersFromFile = function(filepath,fields) { fileSize = fs.statSync(filepath).size, data; if(fileSize > $tw.config.maxEditFileSize) { - data = "File " + filepath + "not loaded because it is too large"; + data = "File " + filepath + " not loaded because it is too large"; console.log("Warning: " + data); ext = ".txt"; } else { @@ -1976,22 +1984,41 @@ filepath: pathname of the directory containing the specification file $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) { var tiddlers = []; // Read the specification - var filesInfo = $tw.utils.parseJSONSafe(fs.readFileSync(filepath + path.sep + "tiddlywiki.files","utf8")); + var filesInfo = $tw.utils.parseJSONSafe(fs.readFileSync(filepath + path.sep + "tiddlywiki.files","utf8"), function(e) { + console.log("Warning: tiddlywiki.files in " + filepath + " invalid: " + e.message); + return {}; + }); + // Helper to process a file var processFile = function(filename,isTiddlerFile,fields,isEditableFile,rootPath) { var extInfo = $tw.config.fileExtensionInfo[path.extname(filename)], type = (extInfo || {}).type || fields.type || "text/plain", typeInfo = $tw.config.contentTypeInfo[type] || {}, pathname = path.resolve(filepath,filename), - text = fs.readFileSync(pathname,typeInfo.encoding || "utf8"), metadata = $tw.loadMetadataForFile(pathname) || {}, - fileTiddlers; + fileTooLarge = false, + text, fileTiddlers; + + if("_canonical_uri" in fields) { + text = ""; + } else if(fs.statSync(pathname).size > $tw.config.maxEditFileSize) { + var msg = "File " + pathname + " not loaded because it is too large"; + console.log("Warning: " + msg); + fileTooLarge = true; + text = isTiddlerFile ? msg : ""; + } else { + text = fs.readFileSync(pathname,typeInfo.encoding || "utf8"); + } + if(isTiddlerFile) { - fileTiddlers = $tw.wiki.deserializeTiddlers(path.extname(pathname),text,metadata) || []; + fileTiddlers = $tw.wiki.deserializeTiddlers(fileTooLarge ? ".txt" : path.extname(pathname),text,metadata) || []; } else { fileTiddlers = [$tw.utils.extend({text: text},metadata)]; } var combinedFields = $tw.utils.extend({},fields,metadata); + if(fileTooLarge && isTiddlerFile) { + delete combinedFields.type; // type altered + } $tw.utils.each(fileTiddlers,function(tiddler) { $tw.utils.each(combinedFields,function(fieldInfo,name) { if(typeof fieldInfo === "string" || $tw.utils.isArray(fieldInfo)) { @@ -2066,6 +2093,7 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) { } else if(tidInfo.suffix) { tidInfo.fields.text = {suffix: tidInfo.suffix}; } + tidInfo.fields = tidInfo.fields || {}; processFile(tidInfo.file,tidInfo.isTiddlerFile,tidInfo.fields); }); // Process any listed directories @@ -2087,6 +2115,7 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) { var thisPath = path.relative(filepath, files[t]), filename = path.basename(thisPath); if(filename !== "tiddlywiki.files" && !metaRegExp.test(filename) && fileRegExp.test(filename)) { + dirSpec.fields = dirSpec.fields || {}; processFile(thisPath,dirSpec.isTiddlerFile,dirSpec.fields,dirSpec.isEditableFile,dirSpec.path); } } @@ -2350,6 +2379,7 @@ $tw.loadTiddlersNode = function() { }); // Load the core tiddlers $tw.wiki.addTiddler($tw.loadPluginFolder($tw.boot.corePath)); + $tw.wiki.addTiddler($tw.loadPluginFolder($tw.boot.coreServerPath)); // Load any extra plugins $tw.utils.each($tw.boot.extraPlugins,function(name) { if(name.charAt(0) === "+") { // Relative path to plugin @@ -2423,6 +2453,7 @@ $tw.boot.initStartup = function(options) { // System paths and filenames $tw.boot.bootPath = options.bootPath || path.dirname(module.filename); $tw.boot.corePath = path.resolve($tw.boot.bootPath,"../core"); + $tw.boot.coreServerPath = path.resolve($tw.boot.bootPath,"../core-server"); // If there's no arguments then default to `--help` if($tw.boot.argv.length === 0) { $tw.boot.argv = ["--help"]; @@ -2547,10 +2578,10 @@ $tw.boot.execStartup = function(options){ if($tw.safeMode) { $tw.wiki.processSafeMode(); } - // Register typed modules from the tiddlers we've just loaded - $tw.wiki.defineTiddlerModules(); - // And any modules within plugins + // Register typed modules from the tiddlers we've just loaded and any modules within plugins + // Tiddlers should appear last so that they may overwrite shadows during module registration $tw.wiki.defineShadowModules(); + $tw.wiki.defineTiddlerModules(); // Make sure the crypto state tiddler is up to date if($tw.crypto) { $tw.crypto.updateCryptoStateTiddler(); @@ -2619,11 +2650,13 @@ $tw.boot.executeNextStartupTask = function(callback) { $tw.boot.log(s.join(" ")); // Execute task if(!$tw.utils.hop(task,"synchronous") || task.synchronous) { - task.startup(); - if(task.name) { - $tw.boot.executedStartupModules[task.name] = true; + const thenable = task.startup(); + if(thenable && typeof thenable.then === "function"){ + thenable.then(asyncTaskCallback); + return true; + } else { + return asyncTaskCallback(); } - return $tw.boot.executeNextStartupTask(callback); } else { task.startup(asyncTaskCallback); return true; diff --git a/community/docs/Community Cards Caveats.tid b/community/docs/Community Cards Caveats.tid new file mode 100644 index 0000000000..c63a29d63b --- /dev/null +++ b/community/docs/Community Cards Caveats.tid @@ -0,0 +1,5 @@ +title: Community Cards Caveats +created: 20250909171928024 +modified: 20250909171928024 + +''Please note that [[Community Cards]] are a new initiative started in September 2025. There is further work required to complete the team and people information.'' diff --git a/community/docs/Community Cards.tid b/community/docs/Community Cards.tid new file mode 100644 index 0000000000..087eaac651 --- /dev/null +++ b/community/docs/Community Cards.tid @@ -0,0 +1,11 @@ +title: Community Cards +tags: Community +modified: 20250909171928024 +created: 20250909171928024 + +The purpose of Community Cards is to allow project plans and other community activities to be linked to the people who are involved in them. They also allow people to share their interests and activities in the TiddlyWiki community, and to help people in the TiddlyWiki community get to know each other better. + +{{Community Cards Caveats}} + +* [[Submitting a Community Card]] +* [[Displaying Community Cards]] diff --git a/community/docs/Displaying Community Cards.tid b/community/docs/Displaying Community Cards.tid new file mode 100644 index 0000000000..3d371ccd89 --- /dev/null +++ b/community/docs/Displaying Community Cards.tid @@ -0,0 +1,26 @@ +title: Displaying Community Cards +tags: [[Community Cards]] +modified: 20250909171928024 +created: 20250909171928024 + +!! Cards for people + +This is an inline card for <> and <> which can be used in the middle of a sentence. + +This is a stack of inline cards: + +<> + +Here is a full format card: + +<> + +This is how the card looks when there is no such person: + +<> + +!! Cards for teams + +This is a card for a project team: + +<> \ No newline at end of file diff --git a/community/docs/Submitting a Community Card.tid b/community/docs/Submitting a Community Card.tid new file mode 100644 index 0000000000..195bf289f3 --- /dev/null +++ b/community/docs/Submitting a Community Card.tid @@ -0,0 +1,36 @@ +title: Submitting a Community Card +tags: [[Community Cards]] +modified: 20250909171928024 +created: 20250909171928024 + +Anyone associated with the TiddlyWiki community can submit a Community Card. The submission process currently involves making a GitHub pull request but we intend to provide a more user-friendly submission process in the future. + +Pull requests to add or update a community card should be made against the `tiddlywiki-com` branch of the [[TiddlyWiki repository|https://github.com/TiddlyWiki/TiddlyWiki5]] in the directory `community/people`. + +The card should be a TiddlyWiki tiddler with the following fields: + +|!Field |!Required|!Description | +|`title`|Yes |The username of the person represented by the card, starting with `@` (e.g. `@Jermolene`). This is the title of the card and should be unique | +|`tags`|Yes |The tags for the card, including `Community/Person` | +|`fullname`|Yes |The full name of the person or group represented by the card | +|`avatar`|Yes |The base64 representation of the 32x32 avatar image for the person represented by the card | +|`first-sighting`|No |The date of the first sighting in the community of the person represented by the card. This should be in ISO 8601 format (YYYY-MM-DD) | +|`talk.tiddlywiki.org`|Yes |The username of the person or group on the TiddlyWiki Talk forum | +|`github`|No |The username of the person or group on GitHub | +|`linkedin`|No |The URL of the LinkedIn profile for the person or group represented by the card | +|`flickr`|No |The URL of the Flickr profile for the person or group represented by the card | +|`homepage`|No |The URL of the homepage for the person or group represented by the card | +|`email`|No |The email address of the person or group represented by the card | +|`text`|Yes |The text of the card. This should include a brief description of the person or group represented by the card, and any other relevant information | + +! Rules for Community Cards + +Community cards must observe the following rules. It is intended to enforce them with an automated script, but for the moment they will be manually checked. + +* `title` must be unique and start with `@` +* `tags` must include `Community/Person` +* `fullname` must be provided +* `avatar` must be a base64 representation of a 32x32 image, with a limit of 1KB. [[Squoosh|https://squoosh.app/]] is recommended for resizing and compressing images +* `first-sighting` should be in ISO 8601 format (YYYY-MM-DD) +* `talk.tiddlywiki.org` must be provided +* `text` total size must not exceed 2KB diff --git a/community/people/Arlen22.tid b/community/people/Arlen22.tid new file mode 100644 index 0000000000..5bc1023121 --- /dev/null +++ b/community/people/Arlen22.tid @@ -0,0 +1,10 @@ +title: @Arlen22 +tags: Community/Person +fullname: Arlen Beiler +first-sighting: 2011-06-20 +talk.tiddlywiki.org: arlen22 +github: Arlen22 +homepage: arlen22.github.io +avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wEEEAAVABUAFQAVABYAFQAYABoAGgAYACEAIwAfACMAIQAwAC0AKQApAC0AMABJADQAOAA0ADgANABJAG8ARQBRAEUARQBRAEUAbwBiAHcAYQBaAGEAdwBiALEAiwB7AHsAiwCxAMwArACiAKwAzAD4AN0A3QD4ATgBKAE4AZcBlwIkEQAVABUAFQAVABYAFQAYABoAGgAYACEAIwAfACMAIQAwAC0AKQApAC0AMABJADQAOAA0ADgANABJAG8ARQBRAEUARQBRAEUAbwBiAHcAYQBaAGEAdwBiALEAiwB7AHsAiwCxAMwArACiAKwAzAD4AN0A3QD4ATgBKAE4AZcBlwIk/8IAEQgAQABAAwEiAAIRAQMRAf/EADAAAAIDAQEAAAAAAAAAAAAAAAMFAQQGAgABAQEBAQEAAAAAAAAAAAAAAAIDAQAE/9oADAMBAAIQAxAAAADIRMd3XctQlXtCTTmB6RFvANDouy4DYwEEar6YVM7ocz57mcqnZys+V2azZU4XZSoiZqhQt9TKOlnO+GOl1HyoUPXLn//EACYQAAICAQQCAgEFAAAAAAAAAAECABEDBBIhMUFRECITFCMycZH/2gAIAQEAAT8AI4Bv4ryAeBAnANHuNidWogEwYHNRsdfA8iruVMOIu6iYtK4c714vgTDpXyOfrQHdifoArEXxM2mR0NeOhUzI+LJzYbuHszCm5hYseZh0gXYWFIai4cWJgFJuFKYvtr2sJRuB9fUzgDHlGMHia2757uYsYc0TNHpsSmzzMONjl9iu74iK6PbWT7gv/RMiZDk+qcA3NXkAVl3gE+ADU1PDVdiaDCGJZjQEyowKANS1ZMwK+HJ+3a0KUDqYnYINxJ3eItDk81M2cZD+NVIrmanU/wAl2gCZiGNiaFziJ3LYIHcXMrLvDABe17EN1vCgqR2TNPnGTBSBbDTeV3c2amdlxPuD2C3H9epqmV628xqsUYmdiuwkVVTSZ0Q/dxwYdScrgBRsqONi2KQX7mo1G4WCK20B6j6p/VpcfMXPVQ9mbhx9eLgZrFGDUZB1DqMrCma4xN8mDcR5qK5Rgw7Hx//EABwRAQEBAQACAwAAAAAAAAAAAAECABEDIhIxQf/aAAgBAgEBPwDVQYpfzd66qDeOSn7yEmH23ffDAi66mug6DM9N8HTAY3//xAAcEQEBAQEAAgMAAAAAAAAAAAABAAIREBIiQVH/2gAIAQMBAT8AglC+rJbdCT1vVC33l83tj2OPLS+AJ3+Tf//Z + +I make random software. \ No newline at end of file diff --git a/community/people/EricShulman.tid b/community/people/EricShulman.tid new file mode 100644 index 0000000000..24201765f6 --- /dev/null +++ b/community/people/EricShulman.tid @@ -0,0 +1,29 @@ +title: @ericshulman +tags: Community/Person Community/Team/Contributors +fullname: Eric Shulman +first-sighting: 2005-06-21 +talk.tiddlywiki.org: ericshulman +github: ericshulman +homepage: tiddlytools.com +email: elsdesign@gmail.com +avatar: iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAD/ElEQVR42o2Tf2iUdRzH37e7rOa222233bab3mqKU9QihCAi+isKwX/sh5UQhGYQhNAvQowRUoghQWDOIJtQmOY0M92ZmVGm0WbTyZI1Nnft99S1jc3dPT9efffg/bHdLn19Hp4HPjzv9/fz+fL5aE58PwUkjzzFVC4P/G/k6E445Pc+uceeaqnv7Ogd6Rq68PPhrc+vkiERWOLT/+Ib8uQHNiXax3BIM0mC+CEtl2G7X9mIeCV+9Ejrr2MAtgkH14SNBRZXrYYPNF86nsXCkx/8dATAsp0JhknQTYJrTHg5SNI0qMekb+aw8Hr74WCKpNNu/0Kck5ymkRMcZz/1Jv5g2CUFbZYelrbMvlBMonHvJK3JuPsdTQxwExc8XG7SxF7OcxGScP6wRGCG/Asjf39VPydTzbQyRBrXBKToBCP/nQQ9VpIDO6SumU3EjUFLzX766HMG0mIvoJnXEbU47GGXc4TGBs3zWp5Jh7F47omdf56hy9lLIz3gyYfZSQMJztFEH3KEDg+bf1dkzkO9Savks7H9NLqnuEw3MEU314nTwABj/MV2R6y8JL+0wKdM8MtX23aFy04dF5mg08QI6XYsemmzRfiMDP5Mg1emK4ienZxi0p0gBfRwhSHAxgXGGeS6tYUdu6TPA3Ofr3Mfj9Bv4zHMDaCTMcBlnG4cJqx64sagN9Ngw3RJoa5R+MftI8k1Wm7NcSsH6KKPFGBbG1n1srQ+06DWpJ59cRhsGKGbo0wBFpDgNGcBcHGsl9BuSZmjfCRHWnv0BtgOcJVWwAZG2cw+3uErAKacZ6hq32PkGWuNSaxsHgIHxqjje5I4/Ms2dCt+BHpcUT4ai0j5sw22TCea2sCBbz3BOjaRFj+JeAE46IoHxlUmlfrmWuZT+8Ae935fjljDe3zpLdEJxGriLHdFtL8mKC2cbbAgIOXVBemwBhHibZq4xN/0YgPrESsRsiMs+C1zEwwFxqBqs4hY2yhlKeIUab5GLEM8SLlVRslu77jZhEwL/ofKKZ4uknxiiLO0cYFGFpJPMTGiRO0iQqtNrX7NxueTcahqv4/FTpgwFYinOcoxtiLKWEwF+U6Mqv5FuVlWSQHzvBWmKmUqIEg1YiMfIu6lhjKCRK0YkXelwoDmIjztWrCot5KQs5R5zKccIVZQwl3cTaVdQVGnfOkrzFbDuvuJWTVuBcXcQ5iFlFFAmBynlBKKH/f6z06pX6r6pJoSQlaeW2gsighi3na1E6HwNSkUUHbS45FXG7ajhIi68+1cO98qtqqJEHzTW6LbEfUstER1ef2llBKhiGqKW7VGUk6lT7dnmS/gnZMf1KPaoI16VWsrA1KhX3dObo5m9VqQpff/AFTcI4hMzFV+AAAAAElFTkSuQmCC + +\define wiki(text,topic) [[$text$|https://en.wikipedia.org/wiki/$topic$]] + +''Hello! My name is Eric Shulman''. I am the author of ''[[www.TiddlyTools.com|http://www.TiddlyTools.com]] (Small Tools for Big Ideas! ™)'', a popular collection of original plugins, macros, widgets, templates and stylesheets for TiddlyWiki that I have created and shared with the TiddlyWiki community. + +<<< +Think of TiddlyTools as a ''virtual hardware store and "demonstration showroom"'', offering tools, parts and techniques that provide a rich variety of new functionality and feature enhancements to help you ''turn a general-purpose TiddlyWiki "info-house" into a comfortable, custom-built "info-home"''. + +The TiddlyWiki core system provides the basic structure and utilities: the foundation, framing, walls, roof, windows/doors, plumbing, heating, and electrical systems. Then, TiddlyTools helps you with all the "finish work": the appliances, fixtures, lighting, cabinets, furniture, paint, wallpaper, carpeting, etc. ''to best suit your specific needs and personal style''. +<<< + +Since the early days of TiddlyWiki (April 2005), I have worked closely with its inventor, [[Jeremy Ruston|https://jermolene.com/]], to help develop and improve TiddlyWiki's core functions. I am also a key contributor and administrator of the online TiddlyWiki [[Discourse|https://talk.TiddlyWiki.org]] and [[GoogleGroups|https://groups.google.com/forum/#!forum/tiddlywiki]] discussion forums, providing ongoing assistance to the worldwide TiddlyWiki community. I have written over 15,000 detailed responses to individual questions posted online. For several years I was also the lead developer and maintainer of the [[TiddlyWiki Classic|https://classic.tiddlywiki.com/]] codebase. + +I was born and raised in suburban Long Island, NY, and attended [[Carnegie Mellon University (CMU)|https://www.cmu.edu/]] in Pittsburgh, PA, where I studied ''Computer Science, Cognitive Psychology, Sociology, Human Factors Design, and Artificial Intelligence''. As an undergraduate at CMU, I was privileged to work with some of the major luminaries in early software research and design, including <>, <>, <>, and <>. I was also employed in several Computer Science Department research projects, including the development of speech recognition technologies, graphical interface systems, and interactive applications for instruction in physics, art and music. I received a ''Bachelor of Science in "Interactive Systems Design"'' from CMU in 1985. + +During my early post-graduate years, I worked for several notable software development companies, including +<> and <>. I was an integral member of the <> development team where I helped create the first GUI-based application interfaces for Microsoft Windows and IBM OS/2. + +Since 1998, I have been an ''independent design consultant'', living and working in Silicon Valley, where I apply more than 40 years of experience to provide ''analysis, design and software development services'' for commercial companies and not-for-profit organizations, with emphasis on ''information architecture'' and ''interaction/visual design standards'' to improve ease-of-use for new and existing software products and online environments. diff --git a/community/people/Jermolene.tid b/community/people/Jermolene.tid new file mode 100644 index 0000000000..b75e410c78 --- /dev/null +++ b/community/people/Jermolene.tid @@ -0,0 +1,21 @@ +title: @Jermolene +tags: Community/Person +fullname: Jeremy Ruston +first-sighting: 2004-09-20 +talk.tiddlywiki.org: jeremyruston +github: Jermolene +linkedin: www.linkedin.com/in/jermy +flickr: www.flickr.com/photos/jermy/ +bluesky: https://bsky.app/profile/jermolene.bsky.social +homepage: jermolene.com +email: jeremy@jermolene.com +avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAgICAgJCAkKCgkNDgwODRMREBARExwUFhQWFBwrGx8bGx8bKyYuJSMlLiZENS8vNUROQj5CTl9VVV93cXecnNEBCAgICAkICQoKCQ0ODA4NExEQEBETHBQWFBYUHCsbHxsbHxsrJi4lIyUuJkQ1Ly81RE5CPkJOX1VVX3dxd5yc0f/CABEIACAAIAMBIgACEQEDEQH/xAAtAAEBAAMAAAAAAAAAAAAAAAAHBgIEBQEBAQEBAAAAAAAAAAAAAAAAAgQBBf/aAAwDAQACEAMQAAAANF4uTuPRhD2nBLnUiJvKM0DtMKy//8QAKxAAAgIBAwMDAQkAAAAAAAAAAQIDBBEABRITITEiMkFxFEJRUmFicoGR/9oACAEBAAE/AInTA6gUGP4ZOQbW1bPsmyUq1q+gmvFPUzZPDkPamtwqU75ks04JakroVcg5RwRjg66NUx25KbzqJYyMngfqSuq0M3NZYIebJIvZozIvI/iNPcp/aalSdJXsS4VcKeIzlvU3jVTcYLNiaGISrjkhWQYDfQ63pYAzCDBsOiu7Dsx4EHH6r2w2ttimjd2IsNErhhJHKI04/uzqxuCxpBYVVWKSHqwMyMSQ33SB7dUJFmlkMYRgnqZgCMf7rf8AeEt3A9YOhjXAb2k8u7dtT1RZeOtXmYxiOPj4ZWY/lb51skqUNnNW/wBNzC7IpB6gQeeB/jq/fqGOaLbowuYn5MAQOw8LjW5Vmeo0qIsqYLLKjHIZmwv9fB1//8QAHxEAAQMEAwEAAAAAAAAAAAAAEQABAgMSIWExMkFR/9oACAECAQE/AD9iTy2lJmHUB8BVKM4SNSOj46a29saX/8QAHREAAgICAwEAAAAAAAAAAAAAAQIAAwQRITGBkf/aAAgBAwEBPwDHpFpJZtamVSiBWT2Yt7hmCDsb+TKtsKqpGg3M/9k= + +I'm the original inventor of TiddlyWiki. You can hire me through my consultancy company [[Intertwingled Innovations|https://intertwingledinnovations.com]] or contact me directly. + +Further information: + +* A recording of the [[keynote I gave at QCon London in April 2024|https://www.infoq.com/presentations/bbc-micro/]], and the [[discussion on talk.tiddlywiki.org|https://talk.tiddlywiki.org/t/recording-of-jeremys-keynote-at-qcon-london-april-2024/10505]]. The talk mixes some nostalgia about my teenage activities with the BBC Micro with thoughts on the development of the software industry and insights gained from working with TiddlyWiki +* An [[interview with me in The Inquirer|https://web.archive.org/web/20111103225832/http://www.theinquirer.net/inquirer/feature/2105529/bt-software-engineer-tells-telco-source]] by Wendy Grossman +* A [[hilarious interview with me|https://www.youtube.com/watch?v=auyIhw8MTmQ]] from British television in 1983 +* Here's a video of a presentation I did in 2007 called [["How to Start an Open Source Project"|http://vimeo.com/856110]]. diff --git a/community/people/MotovunJack.tid b/community/people/MotovunJack.tid new file mode 100644 index 0000000000..0d8bee7ae4 --- /dev/null +++ b/community/people/MotovunJack.tid @@ -0,0 +1,11 @@ +title: @MotovunJack +tags: Community/Person Community/Robot +fullname: Motovun Jack +first-sighting: 2012-01-12 +github: MotovunJack +homepage: tiddlywiki.com +avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wEEEAAYABgAGAAYABkAGAAaAB0AHQAaACUAKAAjACgAJQA2ADIALgAuADIANgBSADsAPwA7AD8AOwBSAH0ATgBbAE4ATgBbAE4AfQBuAIYAbQBlAG0AhgBuAMYAnACKAIoAnADGAOUAwQC2AMEA5QEWAPgA+AEWAV4BTAFeAckByQJmEQAYABgAGAAYABkAGAAaAB0AHQAaACUAKAAjACgAJQA2ADIALgAuADIANgBSADsAPwA7AD8AOwBSAH0ATgBbAE4ATgBbAE4AfQBuAIYAbQBlAG0AhgBuAMYAnACKAIoAnADGAOUAwQC2AMEA5QEWAPgA+AEWAV4BTAFeAckByQJm/8IAEQgAQABAAwEiAAIRAQMRAf/EADAAAAIDAQEAAAAAAAAAAAAAAAMEAQIFBgABAQEBAQEAAAAAAAAAAAAAAAIDAQAE/9oADAMBAAIQAxAAAADZCfn5vZJz+rnODGtpbpm6O8xzG9lCiszXtikQhtkTBputBxURJuVVYlEdBaQ284mPDj6GmkNUblMxRmi7dKw//8QAKxAAAgIBAgUCBgMBAAAAAAAAAQIAAxESIQQTIkFRFGEjMUJxgaEyNGLR/9oACAEBAAE/AMmX3ilMkjPaV3ragZDtNRmoxpvA2sEqQcHEwJxlwa98nYbCU8TymDfSTvPVKMbZHkQcTU4yDH46tTiE8RxjLXnQp7Dx5MACgKuyqMAS1xXU7kjYTiEbWp3y0IucYbGx6e05hDAqMH/k59o3DfxAE5hss1MNzODdVraxu50ieppH1Tivi8O6eYQ1j4B6guAftChDMNjBqycHcCYJqdj2s3idRBHfpi/1Kie7PDo95w/EMxYM22n9yy5AzBc/iLe7dIqx7kyy2ypyOWoYTofhCyDAZtx4MOmpK9sncyx1NdSq2kBBt3EKf6mgIzDUPIiByuqk7faMLbOyEjuuxEAyo56AgeTA3KL1AYRm1CcvmkgAs2wHjEvPxGIMJPmHUQCQNothr32A0ggeYluplcAK2PlLbTytZUkdwI7V3lAQMgbAfP8AMoCV1AKMOR+pdsc5yD595mMmNIGD4h0vsfupHyBlTKW9znMd+TQnljPWqHYIqhwD1zKsqtjBzCAVAyBicnqG6jbOe0//xAAbEQEBAAMBAQEAAAAAAAAAAAABAAIRIRASQf/aAAgBAgEBPwBYbZDuXvnLE5OrkWJzxI4g33ift//EABsRAAMBAQADAAAAAAAAAAAAAAABEQIhEBJB/9oACAEDAQE/AMqjzHwjGoZXPHTb6Zp1/TRp1khYjW01xHqz/9k= + +Motovun Jack is a robot that helps maintain the TiddlyWiki project infrastructure. It is not a person, but rather a set of automated scripts and tools that assist in managing the various services and resources used by the TiddlyWiki community. + +The origin of the name "Motovun Jack" is a lovable and playful kitten encountered by [[@Jermolene]] in the beautiful medieval hill town of Motovun in Croatia. Jack was [[first adopted|https://github.com/TiddlyWiki/TiddlyWiki5/commit/ecfbaaa5641f14e1766ef17ef6416bf9aa992863]] as the TiddlyWiki 5 mascot in 2012. diff --git a/community/project/TiddlyWiki People.tid b/community/project/TiddlyWiki People.tid new file mode 100644 index 0000000000..64ac944d81 --- /dev/null +++ b/community/project/TiddlyWiki People.tid @@ -0,0 +1,10 @@ +title: TiddlyWiki People +modified: 20250909171928024 +created: 20250909171928024 +tags: Community About + +Members of the TiddlyWiki community who are involved in the development of TiddlyWiki and the running of the project are invited to [[create a Community Card|Submitting a Community Card]] so that they can be included in project plans and organisation charts. Community Cards can also showcase their interests and activities in the TiddlyWiki community. + +{{Community Cards Caveats}} + +<> \ No newline at end of file diff --git a/community/project/TiddlyWiki Project.tid b/community/project/TiddlyWiki Project.tid new file mode 100644 index 0000000000..b0d62cf1ff --- /dev/null +++ b/community/project/TiddlyWiki Project.tid @@ -0,0 +1,10 @@ +title: TiddlyWiki Project +modified: 20250909171928024 +created: 20250909171928024 +tags: Community About + +The TiddlyWiki Project is the coordinated, ongoing effort to maintain and improve TiddlyWiki, and to support the TiddlyWiki community. + +{{Community Cards Caveats}} + +<$list filter="[tag[Community/Team]]" template="$:/tiddlywiki/community/cards/ViewTemplateBodyTemplateTeam"/> \ No newline at end of file diff --git a/community/project/Vacant Positions.tid b/community/project/Vacant Positions.tid new file mode 100644 index 0000000000..8408c793bf --- /dev/null +++ b/community/project/Vacant Positions.tid @@ -0,0 +1,4 @@ +title: Vacant Positions +tags: [[TiddlyWiki Project]] + +If you are interested in volunteering to help the project please get in touch with <>. \ No newline at end of file diff --git a/community/project/teams/Core Team.tid b/community/project/teams/Core Team.tid new file mode 100644 index 0000000000..932477fc0f --- /dev/null +++ b/community/project/teams/Core Team.tid @@ -0,0 +1,8 @@ +title: Core Team +tags: Community/Team +modified: 20250909171928024 +created: 20250909171928024 +leader: @Jermolene +team: @saqimtiaz + +The core team is responsible for the maintenance and development of the TiddlyWiki core and official plugins. diff --git a/community/project/teams/Infrastructure Team.tid b/community/project/teams/Infrastructure Team.tid new file mode 100644 index 0000000000..e531aa4210 --- /dev/null +++ b/community/project/teams/Infrastructure Team.tid @@ -0,0 +1,14 @@ +title: Infrastructure Team +tags: Community/Team +modified: 20250909171928024 +created: 20250909171928024 +team: @MotovunJack + +The Infrastructure Team is responsible for maintaining and improving the infrastructure that supports the TiddlyWiki project. This includes the hosting, deployment, and management of the TiddlyWiki websites and services, as well as the tools and systems used by the TiddlyWiki community. + +The infrastructure includes: + +* talk.tiddlywiki.org +* github.com/TiddlyWiki +* tiddlywiki.com DNS +* Netlify account for PR previews diff --git a/community/project/teams/MultiWikiServer Team.tid b/community/project/teams/MultiWikiServer Team.tid new file mode 100644 index 0000000000..922cf7582b --- /dev/null +++ b/community/project/teams/MultiWikiServer Team.tid @@ -0,0 +1,8 @@ +title: MultiWikiServer Team +tags: Community/Team +modified: 20250909171928024 +created: 20250909171928024 +leader: @Arlen22 +team: + +The MultiWikiServer development repository is at https://github.com/TiddlyWiki/MultiWikiServer diff --git a/community/project/teams/Newsletter Team.tid b/community/project/teams/Newsletter Team.tid new file mode 100644 index 0000000000..2c20fd219b --- /dev/null +++ b/community/project/teams/Newsletter Team.tid @@ -0,0 +1,6 @@ +title: Newsletter Team +tags: Community/Team +modified: 20250909171928024 +created: 20250909171928024 + +The Newsletter Team is responsible for producing the TiddlyWiki Newsletter, a monthly email newsletter that highlights news, updates, and community contributions related to TiddlyWiki. \ No newline at end of file diff --git a/community/project/teams/Project Team.tid b/community/project/teams/Project Team.tid new file mode 100644 index 0000000000..5cd92cc3b3 --- /dev/null +++ b/community/project/teams/Project Team.tid @@ -0,0 +1,15 @@ +title: Project Team +tags: Community/Team +modified: 20250909171928024 +created: 20250909171928024 +icon: $:/tiddlywiki/community/icons/project-team +leader: @Jermolene +team: @saqimtiaz @ericshulman + +The project team is responsible for the overall TiddlyWiki project, its vision, mission and values, and ensuring that it meets the needs of the community. + +Areas of responsibility include: + +* Communicating and demonstrating the vision, mission and values of the project +* Continuously improve the development process and practices of the project +* more to come... diff --git a/community/project/teams/Succession Team.tid b/community/project/teams/Succession Team.tid new file mode 100644 index 0000000000..e57a7affd5 --- /dev/null +++ b/community/project/teams/Succession Team.tid @@ -0,0 +1,13 @@ +title: Succession Team +tags: Community/Team +modified: 20250909171928024 +created: 20250909171928024 +leader: @Jermolene +team: @saqimtiaz @ericshulman + +The Succession Team is responsible for ensuring that personnel changes do not impact access to the external infrastructure used by the project. + +* Work with the other teams to ensure that the project has a succession plan for key personnel +* Work with the other teams to ensure that they are using the appropriate, community-owned infrastructure +* Ensure that the members of the succession team share ownership of the key project resources (eg passwords and user accounts). The Succession Team is not expected to use their access rights apart from managing access in the event of personnel changes + diff --git a/community/project/teams/tagCommunityTeam.tid b/community/project/teams/tagCommunityTeam.tid new file mode 100644 index 0000000000..9ae81d76fb --- /dev/null +++ b/community/project/teams/tagCommunityTeam.tid @@ -0,0 +1,5 @@ +title: Community/Team +modified: 20250909171928024 +created: 20250909171928024 +list: [[Project Team]] [[Core Team]] [[Documentation Team]] [[MultiWikiServer Team]] [[Newsletter Team]] [[Infrastructure Team]] [[Succession Team]] + diff --git a/community/readme.md b/community/readme.md new file mode 100644 index 0000000000..09cd58c5b2 --- /dev/null +++ b/community/readme.md @@ -0,0 +1,3 @@ +# Community Records and Resources + +These raw tiddlers comprise the community records and resources for the TiddlyWiki project. They are packaged as a root directory outside of the usual "editions" folder so that they can be shared with other wikis. diff --git a/community/tools/cards/DefaultColourMappings.multids b/community/tools/cards/DefaultColourMappings.multids new file mode 100644 index 0000000000..6cab7fdc88 --- /dev/null +++ b/community/tools/cards/DefaultColourMappings.multids @@ -0,0 +1,15 @@ +title: $:/config/DefaultColourMappings/ + +community-card-background: #ffffee +community-card-foreground: #441111 +community-card-dark-shadow: rgba(188, 189, 189, 0.5) +community-card-shadow: rgba(212, 212, 213, 0.5) +community-card-header-background: #9e3060 +community-card-header-foreground: #ddddee +community-card-team-header-background: #306090 +community-card-team-header-foreground: #ddeedd +community-card-vacancy-header-background: #609030 +community-card-vacancy-header-foreground: #eedddd +community-card-info-background: #f3f38b +community-card-info-foreground: #444411 +community-card-field-name-foreground: #888844 diff --git a/community/tools/cards/Procedures.tid b/community/tools/cards/Procedures.tid new file mode 100644 index 0000000000..9d3879012e --- /dev/null +++ b/community/tools/cards/Procedures.tid @@ -0,0 +1,168 @@ +title: $:/tiddlywiki/community/cards/Procedures +tags: $:/tags/Global + +\procedure community-card-display-jpeg-field(fieldName,mode:"block",default) +<$genesis $type={{{ [match[block]then[div]else[span]] }}} class={{{ tc-community-card-field-image [[tc-community-card-field-image-]addsuffix] +[join[ ]] }}}> + <%if [has] %> + getaddprefix[data:image/jpeg;base64,]] }}} width="32"/> + <%else%> + <$transclude $tiddler=<> $mode=<>/> + <%endif%> + +\end community-card-display-jpeg-field + +\procedure community-card-display-transclusion(fieldName,mode:"inline",default) +<$genesis $type={{{ [match[block]then[div]else[span]] }}} class={{{ tc-community-card-field-image [[tc-community-card-field-image-]addsuffix] +[join[ ]] }}}> + <%if [has] %> + <$transclude $tiddler={{{ [get] }}} $mode=<>/> + <%else%> + <$transclude $tiddler=<> $mode=<>/> + <%endif%> + +\end community-card-display-transclusion + +\procedure community-card-display-text-field(fieldName,showLabel:"yes",linkPrefix,displayPrefix,mode:"block") +<%if [has] :or[match[title]] %> + <$genesis $type={{{ [match[block]then[div]else[span]] }}} class={{{ tc-community-card-field-text [[tc-community-card-field-text-]addsuffix] +[join[ ]] }}}> + <%if [match[yes]] %> + <$text text=<>/> + <%endif%> + <%if [!match[]] %> + getaddprefix] }}} + class="tc-community-card-field-text-value" + rel="noopener noreferrer" + target="_blank" + > + <$text text={{{ [get] :else[match[title]then] +[addprefix] }}}/> + + <%else%> + + <$text text={{{ [get] :else[match[title]then] +[addprefix] }}}/> + + <%endif%> + +<%endif%> +\end community-card-display-text-field + +\procedure community-card-person(title) + <$let currentTiddler=<>> + <div class="tc-community-card"> + <$link to=<<currentTiddler>> class="tc-community-card-header-link"> + <div class="tc-community-card-header"> + <<community-card-display-jpeg-field "avatar" default:"$:/tiddlywiki/community/icons/person">> + <<community-card-display-text-field "title" showLabel:"no">> + </div> + </$link> + <div class="tc-community-card-info"> + <<community-card-display-text-field "fullname">> + <<community-card-display-text-field "first-sighting">> + <<community-card-display-text-field "talk.tiddlywiki.org" linkPrefix:"https://talk.tiddlywiki.org/u/" displayPrefix:"@">> + <<community-card-display-text-field "github" linkPrefix:"https://github.com/" displayPrefix:"@">> + <<community-card-display-text-field "linkedin" linkPrefix:"https://">> + <<community-card-display-text-field "flickr" linkPrefix:"https://">> + <<community-card-display-text-field "homepage" linkPrefix:"https://">> + <<community-card-display-text-field "email" linkPrefix:"mailto:">> + <%if [all[tiddlers+shadows]tag[Community/Team]sort[title]] :filter[{!!leader}match<..currentTiddler>] +[count[]compare:number:gt[0]] %> + <div class="tc-community-card-field-text"> + <span class="tc-community-card-field-text-name">leader</span> + <span class="tc-community-card-field-text-value"> + <$list filter="[all[tiddlers+shadows]tag[Community/Team]sort[title]] :filter[{!!leader}match<..currentTiddler>]"> + <$transclude $variable="community-card-pill-team" title=<<currentTiddler>>/> + </$list> + </span> + </div> + <%endif%> + <%if [all[tiddlers+shadows]tag[Community/Team]sort[title]] :filter[enlist{!!team}match<..currentTiddler>] +[count[]compare:number:gt[0]] %> + <div class="tc-community-card-field-text"> + <span class="tc-community-card-field-text-name">member</span> + <span class="tc-community-card-field-text-value"> + <$list filter="[all[tiddlers+shadows]tag[Community/Team]sort[title]] :filter[enlist{!!team}match<..currentTiddler>]"> + <$transclude $variable="community-card-pill-team" title=<<currentTiddler>>/> + </$list> + </span> + </div> + <%endif%> + </div> + <div class="tc-community-card-body"> + <$transclude $tiddler=<<currentTiddler>> $field="text" $mode="block"/> + </div> + </div> + </$let> +\end community-card-person + +\procedure community-card-team(title) + <$let currentTiddler=<<title>>> + <div class="tc-community-card tc-community-card-team"> + <$link to=<<currentTiddler>> class="tc-community-card-header-link"> + <div class="tc-community-card-header"> + <<community-card-display-transclusion fieldName:"icon" default:"$:/tiddlywiki/community/icons/team">> + <<community-card-display-text-field "title" showLabel:"no">> + </div> + </$link> + <div class="tc-community-card-info"> + <div class="tc-community-card-field-text"> + <span class="tc-community-card-field-text-name">leader</span> + <span class="tc-community-card-field-text-value"> + <%if [<currentTiddler>has[leader]] %> + <$transclude $variable="community-card-pill-person" title={{!!leader}}/> + <%else%> + <$transclude $variable="community-card-vacancy"/> + <%endif%> + </span> + </div> + <div class="tc-community-card-field-text"> + <span class="tc-community-card-field-text-name">team</span> + <span class="tc-community-card-field-text-value"><$transclude $variable="community-card-pill-stack-person" personFilter={{!!team}}/></span> + </div> + </div> + <div class="tc-community-card-body"> + <$transclude $tiddler=<<currentTiddler>> $field="text" $mode="block"/> + </div> + </div> + </$let> +\end community-card-team + +\procedure community-card-pill-person(title) + <$let currentTiddler=<<title>>> + <$link to=<<currentTiddler>> class="tc-community-card-pill"> + <<community-card-display-jpeg-field "avatar" default:"$:/tiddlywiki/community/icons/person" mode="inline">> + <<community-card-display-text-field "title" showLabel:"no" mode:"inline">> + </$link> + </$let> +\end community-card-pill-person + +\procedure community-card-pill-stack-person(personFilter:"[tag[Community/Person]]") + <div class="tc-community-card-pill-stack"> + <$list filter=<<personFilter>>> + <$list-template> + <$transclude $variable="community-card-pill-person" title=<<currentTiddler>> mode="block"/> + </$list-template> + <$list-empty> + <$transclude $variable="community-card-vacancy"/> + </$list-empty> + </$list> + </div> +\end community-card-pill-stack-person + +\procedure community-card-pill-team(title) + <$let currentTiddler=<<title>>> + <$link to=<<currentTiddler>> class="tc-community-card-pill"> + <<community-card-display-transclusion fieldName:"icon" default:"$:/tiddlywiki/community/icons/team">> + <<community-card-display-text-field "title" showLabel:"no" mode:"inline">> + </$link> + </$let> +\end community-card-pill-team + +\procedure community-card-vacancy() + <$link to="Vacant Positions" class="tc-community-card-pill tc-community-card-pill-vacancy"> + <span class="tc-community-card-field-image tc-community-card-field-image-avatar"> + {{$:/core/images/help}} + </span> + <span class="tc-community-card-field-text tc-community-card-field-text-title"> + <span class="tc-community-card-field-text-value"> + Vacant + </span> + </span> + </$link> +\end community-card-vacancy diff --git a/community/tools/cards/Styles.tid b/community/tools/cards/Styles.tid new file mode 100644 index 0000000000..48322922c8 --- /dev/null +++ b/community/tools/cards/Styles.tid @@ -0,0 +1,158 @@ +title: $:/tiddlywiki/community/cards/Styles +tags: $:/tags/Stylesheet + +.tc-community-card { + display: flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: center; + border-radius: 8px; + width: 100%; + margin-bottom: 8px; + background: <<colour community-card-background>>; + color: <<colour community-card-foreground>>; + fill: <<colour community-card-foreground>>; + box-shadow: 0 1px 3px 0 <<colour community-card-shadow>>, 0 0 0 1px <<colour community-card-shadow>>; + transition: box-shadow 0.3s ease,transform .3s ease; +} + +.tc-community-card:hover { + box-shadow: 0 1px 6px 0 <<colour community-card-dark-shadow>>, 0 0 0 1px <<colour community-card-shadow>>; + transform: translateY(-2px); +} + +.tc-community-card .tc-community-card-header-link { + background-color: <<colour community-card-header-background>>; + color: <<colour community-card-header-foreground>>; + border-top-left-radius: 8px; + border-top-right-radius: 8px; +} + +.tc-community-card.tc-community-card-team .tc-community-card-header-link { + background: <<colour community-card-team-header-background>>; + color: <<colour community-card-team-header-foreground>>; + fill: <<colour community-card-team-header-foreground>>; +} + +.tc-community-card .tc-community-card-header-link:hover { + text-decoration: none; + background-color: <<colour community-card-header-foreground>>; + color: <<colour community-card-header-background>>; +} + +.tc-community-card-header { + margin: 0; + padding: 0.5em; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-start; + align-items: center; + line-height: 0; +} + +.tc-community-card-header .tc-community-card-field-text-title { + font-size: 1.5em; + font-weight: bold; +} + +.tc-community-card-header .tc-community-card-field-image { + display: table-row; + width: auto; + max-width: 100%; + margin-right: 12px; +} + +.tc-community-card-info { + display: table; + width: auto; + max-width: 100%; + padding: 8px; + margin: 0; + background-color: <<colour community-card-info-background>>; + color: <<colour community-card-info-foreground>>; +} + +.tc-community-card-body { + padding: 0 8px; +} + +.tc-community-card .tc-community-card-field-text { + display: table-row; +} + +.tc-community-card .tc-community-card-field-text-name, +.tc-community-card .tc-community-card-field-text-value { + display: table-cell; + padding: 2px 6px 2px 0; + vertical-align: top; +} + +.tc-community-card .tc-community-card-field-text-name { + color: <<colour community-card-field-name-foreground>>; + white-space: nowrap; + text-align: right; + padding-right: 8px; +} + +.tc-community-card .tc-community-card-field-text-value { + word-break: break-word; + font-weight: bold; + width: 100%; +} + +a.tc-community-card-pill { + display: inline-flex; + align-items: center; + gap: 4px; + width: auto; + min-width:0; + max-width: none; + align-self: auto; + font-size: 0.9em; + line-height: 1; + vertical-align: middle; + padding: 4px; + border-radius: 4px; + background: <<colour community-card-header-background>>; + color: <<colour community-card-header-foreground>>; + fill: <<colour community-card-header-foreground>>; + box-shadow: 0 1px 3px 0 <<colour community-card-shadow>>, 0 0 0 1px <<colour community-card-shadow>>; + transition: box-shadow 0.3s ease,transform .3s ease; +} + +a.tc-community-card-pill.tc-community-card-pill-vacancy { + background: <<colour community-card-vacancy-header-background>>; + color: <<colour community-card-vacancy-header-foreground>>; + fill: <<colour community-card-vacancy-header-foreground>>; +} + +a.tc-community-card-pill:hover { + text-decoration: none; + box-shadow: 0 1px 6px 0 <<colour community-card-dark-shadow>>, 0 0 0 1px <<colour community-card-shadow>>; + transform: translateY(-2px); + background: <<colour community-card-header-foreground>>; + color: <<colour community-card-header-background>>; + fill: <<colour community-card-header-background>>; +} + +a.tc-community-card-pill .tc-community-card-field-image img, +a.tc-community-card-pill .tc-community-card-field-image svg { + width: 16px; + height: 16px; + vertical-align: middle; + display: inline-block; +} + +a.tc-community-card-pill .tc-community-card-field-text { + display: inline; +} + +.tc-community-card-pill-stack { + display: inline-flex; + flex-direction: column; + align-items: stretch; + gap: 4px; + margin: 0; + padding: 0; +} \ No newline at end of file diff --git a/community/tools/cards/ViewTemplateBodyCascade.tid b/community/tools/cards/ViewTemplateBodyCascade.tid new file mode 100644 index 0000000000..db1338f2c1 --- /dev/null +++ b/community/tools/cards/ViewTemplateBodyCascade.tid @@ -0,0 +1,6 @@ +title: $:/tiddlywiki/community/cards/ViewTemplateBodyCascade +tags: $:/tags/ViewTemplateBodyFilter +list-before: + +[tag[Community/Person]then[$:/tiddlywiki/community/cards/ViewTemplateBodyTemplatePerson]] +[tag[Community/Team]then[$:/tiddlywiki/community/cards/ViewTemplateBodyTemplateTeam]] \ No newline at end of file diff --git a/community/tools/cards/ViewTemplateBodyTemplatePerson.tid b/community/tools/cards/ViewTemplateBodyTemplatePerson.tid new file mode 100644 index 0000000000..926393cddb --- /dev/null +++ b/community/tools/cards/ViewTemplateBodyTemplatePerson.tid @@ -0,0 +1,3 @@ +title: $:/tiddlywiki/community/cards/ViewTemplateBodyTemplatePerson + +<$transclude $variable="community-card-person" title=<<currentTiddler>>/> \ No newline at end of file diff --git a/community/tools/cards/ViewTemplateBodyTemplateTeam.tid b/community/tools/cards/ViewTemplateBodyTemplateTeam.tid new file mode 100644 index 0000000000..600c045185 --- /dev/null +++ b/community/tools/cards/ViewTemplateBodyTemplateTeam.tid @@ -0,0 +1,3 @@ +title: $:/tiddlywiki/community/cards/ViewTemplateBodyTemplateTeam + +<$transclude $variable="community-card-team" title=<<currentTiddler>>/> diff --git a/community/tools/icons/person.tid b/community/tools/icons/person.tid new file mode 100644 index 0000000000..373fb50ff4 --- /dev/null +++ b/community/tools/icons/person.tid @@ -0,0 +1,7 @@ +title: $:/tiddlywiki/community/icons/person +tags: $:/tags/Image + +\parameters (size:"22pt") +<svg width=<<size>> height=<<size>> viewBox="0 0 64 64"> + <path d="M43.127,29.612c-0.879,-0.378 -1.452,-1.25 -1.452,-2.207c-0.006,-0.678 0.27,-1.33 0.761,-1.797c0.147,-0.141 0.29,-0.28 0.397,-0.393c0.753,-0.791 1.416,-1.663 1.978,-2.6c1.392,-2.318 2.126,-4.974 2.126,-7.677c0,-8.196 -6.744,-14.938 -14.938,-14.938c-0.945,0 -1.886,0.088 -2.813,0.266c-5.891,1.031 -10.578,5.586 -11.781,11.446c-1.105,5.016 0.454,10.264 4.118,13.865c0.495,0.469 0.78,1.118 0.792,1.799l0,0.012c0.008,0.966 -0.567,1.848 -1.453,2.23c-5.949,2.466 -10.698,7.172 -13.217,13.099c-1.772,4.059 -2.66,8.45 -2.607,12.88l0,3.192c0,2.858 2.351,5.211 5.212,5.211l43.5,0c2.859,0 5.212,-2.353 5.212,-5.211l-0,-3.225c0.053,-4.427 -0.837,-8.816 -2.611,-12.873c-2.523,-5.922 -7.274,-10.621 -13.224,-13.079Z" style="fill-rule:nonzero;"/> +</svg> \ No newline at end of file diff --git a/community/tools/icons/project-team.tid b/community/tools/icons/project-team.tid new file mode 100644 index 0000000000..9d4a1e8f5f --- /dev/null +++ b/community/tools/icons/project-team.tid @@ -0,0 +1,7 @@ +title: $:/tiddlywiki/community/icons/project-team +tags: $:/tags/Image + +\parameters (size:"22pt") +<svg width=<<size>> height=<<size>> viewBox="0 0 64 64"> + <path d="M24.891,49.399l-3.521,0c-1.398,0 -2.547,-1.15 -2.547,-2.547l0,-1.56c-0.026,-2.165 0.408,-4.311 1.274,-6.295c1.231,-2.897 3.552,-5.197 6.46,-6.402c0.433,-0.187 0.714,-0.618 0.71,-1.09l0,-0.006c-0.006,-0.333 -0.145,-0.65 -0.387,-0.879c-1.791,-1.76 -2.553,-4.325 -2.013,-6.777c0.588,-2.864 2.879,-5.09 5.758,-5.594c0.453,-0.087 0.913,-0.13 1.375,-0.13c4.005,0 7.301,3.295 7.301,7.301c0,1.321 -0.359,2.619 -1.039,3.752c-0.275,0.458 -0.599,0.884 -0.967,1.271c-0.052,0.055 -0.122,0.123 -0.194,0.192c-0.24,0.228 -0.375,0.547 -0.372,0.878c0,0.468 0.28,0.894 0.71,1.079c2.908,1.201 5.23,3.498 6.463,6.392c0.815,1.865 1.248,3.872 1.276,5.904c-0.179,0.006 -0.351,0.007 -0.514,0.003c-0.556,-0.016 -1.375,-0.294 -2.288,-0.512c-1.295,-0.308 -2.719,-0.543 -4.01,-0.396l-0.013,0.001c-1.056,0.128 -2.116,0.325 -3.097,0.76c-0.385,0.171 -1.216,0.753 -1.446,0.916c-1.157,0.297 -2.564,0.475 -3.797,0.312c-0.713,-0.094 -1.402,-0.225 -1.703,-0.778c-0.207,-0.382 -0.181,-0.896 -0.031,-1.565c0.068,-0.3 0.11,-0.593 0.118,-0.842l-0.106,-0.887l-0.212,-0.491l-0.258,-0.36l-0.669,-0.514l-0.832,-0.231l-0.491,0.017l-0.459,0.12l-0.417,0.211l-0.415,0.342l-0.546,0.802l-0.033,0.067c-1.174,2.499 -0.945,4.643 0.013,6.317c0.251,0.437 0.56,0.845 0.919,1.219Zm22.984,-4.722c-0.052,-2.344 -0.566,-4.656 -1.514,-6.805c-1.232,-2.86 -3.339,-5.257 -6.018,-6.845c0.955,-0.816 2.033,-1.473 3.195,-1.949c0.434,-0.187 0.715,-0.618 0.71,-1.09l-0,-0.006c-0.005,-0.333 -0.144,-0.651 -0.386,-0.88c-1.791,-1.76 -2.553,-4.324 -2.013,-6.776c0.587,-2.864 2.878,-5.09 5.758,-5.594c0.453,-0.087 0.913,-0.131 1.375,-0.131c4.005,0 7.3,3.296 7.3,7.301c-0,1.322 -0.359,2.619 -1.038,3.753c-0.276,0.457 -0.6,0.883 -0.968,1.27c-0.052,0.055 -0.121,0.123 -0.194,0.192c-0.24,0.229 -0.375,0.547 -0.372,0.878c-0,0.468 0.28,0.894 0.71,1.079c2.908,1.201 5.229,3.498 6.462,6.392c0.756,1.728 1.184,3.578 1.264,5.458c-0.577,-0.341 -1.293,-0.373 -1.904,-0.07c-0.961,0.475 -1.861,1.117 -2.911,1.371c-0.49,-0.133 -0.983,-0.245 -1.485,-0.308c-0.253,-0.326 -0.536,-0.66 -0.84,-0.911l-0.813,-0.51l-0.752,-0.225c-0.327,-0.051 -0.662,-0.021 -0.974,0.089l-0.67,0.321l-0.569,0.448c-0.403,0.393 -0.733,0.911 -0.979,1.569c-0.202,0.54 -0.344,1.222 -0.492,2.014c-0.244,-0.027 -0.49,-0.047 -0.737,-0.058c-0.333,-0.02 -0.725,-0.006 -1.145,0.023Zm-24.215,-13.651c-2.683,1.591 -4.793,3.994 -6.024,6.861c-1.026,2.332 -1.542,4.857 -1.513,7.405l0,0.59l-11.735,0c-1.397,0 -2.547,-1.15 -2.547,-2.547l0,-1.561c-0.026,-2.165 0.409,-4.31 1.274,-6.295c1.231,-2.897 3.553,-5.197 6.46,-6.401c0.434,-0.187 0.715,-0.618 0.71,-1.09l0,-0.006c-0.005,-0.333 -0.144,-0.651 -0.386,-0.88c-1.791,-1.76 -2.553,-4.324 -2.013,-6.776c0.588,-2.864 2.879,-5.09 5.758,-5.594c0.453,-0.087 0.914,-0.131 1.375,-0.131c4.005,0 7.301,3.296 7.301,7.301c0,1.322 -0.359,2.619 -1.039,3.753c-0.275,0.457 -0.6,0.883 -0.967,1.27c-0.052,0.055 -0.122,0.123 -0.194,0.192c-0.24,0.228 -0.375,0.547 -0.372,0.878c0,0.468 0.28,0.894 0.71,1.079c1.164,0.476 2.246,1.135 3.202,1.952Zm29.027,33.111c-1.417,-0.04 -2.04,-0.037 -2.761,-1.223l-0.563,0.016c-0.654,-0.029 -0.381,-0.016 -0.818,-0.038c-0.73,-0.028 -0.613,-0.722 -0.742,-1.089c-0.205,-1.244 0.272,-2.494 0.257,-3.739c-0.005,-0.442 -0.63,-2.005 -0.854,-2.564c-0.7,0.131 -1.404,0.157 -2.114,0.192c-1.637,-0.004 -3.263,-0.205 -4.878,-0.459c-0.314,1.299 -1.249,3.118 -0.476,4.439c0.938,1.366 1.596,1.745 2.617,1.827c1.02,0.082 1.251,1.234 1.004,1.646c-0.219,0.284 -0.603,0.336 -0.929,0.405l-0.653,0.03c-0.513,-0.017 -0.973,-0.155 -1.43,-0.369c-0.765,-0.427 -1.554,-1.314 -2.141,-1.951c0.137,0.254 0.218,0.751 0.095,0.982c-0.347,0.491 -1.847,0.488 -2.534,0.183c-0.78,-0.347 -2.665,-2.781 -2.957,-4.604c0.776,-1.467 1.905,-2.744 2.477,-4.341c-1.246,-0.795 -1.913,-2.089 -1.827,-3.555l0.032,-0.17c-1.226,0.23 -0.59,0.144 -1.909,0.244c-4.2,-0.013 -7.893,-2.86 -5.813,-7.286c0.135,-0.262 0.263,-0.5 0.493,-0.386c0.184,0.091 0.157,0.457 0.065,0.863c-1.189,5.288 4.621,5.329 8.192,4.35c0.355,-0.097 1.06,-0.751 1.548,-0.968c0.798,-0.354 1.665,-0.498 2.524,-0.602c2.139,-0.244 4.709,0.883 6.015,0.92c1.306,0.037 3.164,-0.313 4.305,-0.239c0.827,0.037 1.64,0.187 2.438,0.4c0.517,-2.519 0.554,-4.374 1.779,-4.804c0.719,0.113 1.273,1.093 1.683,1.617l0.002,-0c0.835,-0.033 1.63,0.178 2.42,0.414c1.431,-0.203 2.631,-1.007 3.895,-1.632c-0.004,0.02 -0.025,0.027 -0.037,0.04c-1.244,1.005 -1.417,2.706 -1.271,4.278c0.054,0.816 -0.176,1.702 -0.461,2.538c-0.534,1.361 -1.564,2.796 -2.759,2.722c-0.452,-0.014 -0.715,-0.27 -1.051,-0.543c-0.065,0.553 -0.321,1.047 -0.568,1.536c-0.57,1.086 -2.06,1.564 -3.44,2.723c-1.379,1.159 0.442,5.297 0.883,6.052c0.442,0.754 1.674,1.03 1.196,1.71c-0.147,0.225 -0.37,0.305 -0.609,0.393l-0.325,0.042Zm-15.735,-3.096l0.206,0.06c0.258,-0.115 0.778,0.064 1.054,0.151c-0.508,-0.563 -1.273,-1.389 -1.824,-1.91c-0.181,-0.631 -0.103,-1.266 -0.065,-1.91l0.008,-0.053c-0.217,0.515 -0.493,1.016 -0.641,1.559c-0.173,0.732 0.771,1.522 1.137,1.975l0.125,0.128Z"/> +</svg> diff --git a/community/tools/icons/team.tid b/community/tools/icons/team.tid new file mode 100644 index 0000000000..ed98568b7b --- /dev/null +++ b/community/tools/icons/team.tid @@ -0,0 +1,9 @@ +title: $:/tiddlywiki/community/icons/team +tags: $:/tags/Image + +\parameters (size:"22pt") +<svg width=<<size>> height=<<size>> viewBox="0 0 64 64"> + <path d="M37.439,32.592c-0.43,-0.185 -0.71,-0.611 -0.71,-1.079c-0.003,-0.331 0.132,-0.65 0.372,-0.878c0.072,-0.069 0.142,-0.137 0.194,-0.192c0.368,-0.387 0.692,-0.813 0.967,-1.271c0.68,-1.133 1.039,-2.431 1.039,-3.752c-0,-4.006 -3.296,-7.301 -7.301,-7.301c-0.462,-0 -0.922,0.043 -1.375,0.13c-2.879,0.504 -5.17,2.73 -5.758,5.594c-0.54,2.452 0.222,5.017 2.013,6.777c0.242,0.229 0.381,0.546 0.387,0.879l-0,0.006c0.004,0.472 -0.277,0.903 -0.71,1.09c-2.908,1.205 -5.229,3.505 -6.46,6.402c-0.866,1.984 -1.3,4.13 -1.274,6.295l-0,1.56c-0,1.397 1.149,2.547 2.547,2.547c-0,-0 0,-0 0,-0l21.261,-0c1.397,-0 2.547,-1.15 2.547,-2.547l-0,-1.576c0.026,-2.164 -0.409,-4.309 -1.276,-6.292c-1.233,-2.894 -3.555,-5.191 -6.463,-6.392Z" style="fill-rule:nonzero;"/> + <path d="M60.882,35.466c-1.233,-2.894 -3.554,-5.191 -6.462,-6.392c-0.43,-0.185 -0.71,-0.611 -0.71,-1.079c-0.003,-0.331 0.132,-0.649 0.372,-0.878c0.073,-0.069 0.142,-0.137 0.194,-0.192c0.368,-0.387 0.692,-0.813 0.968,-1.27c0.679,-1.134 1.038,-2.431 1.038,-3.753c0,-4.005 -3.295,-7.301 -7.3,-7.301c-0.462,0 -0.922,0.044 -1.375,0.131c-2.88,0.504 -5.171,2.73 -5.758,5.594c-0.54,2.452 0.222,5.016 2.013,6.776c0.242,0.229 0.381,0.547 0.386,0.88l-0,0.006c0.005,0.472 -0.276,0.903 -0.71,1.09c-1.162,0.476 -2.24,1.133 -3.195,1.949c2.679,1.588 4.786,3.985 6.018,6.845c1.029,2.332 1.546,4.857 1.517,7.405l-0,0.605l11.734,-0c1.397,-0 2.547,-1.15 2.547,-2.547l-0,-1.576c0.026,-2.165 -0.409,-4.31 -1.277,-6.293Z" style="fill-rule:nonzero;"/> + <path d="M23.66,31.026c-0.956,-0.817 -2.038,-1.476 -3.202,-1.952c-0.43,-0.185 -0.71,-0.611 -0.71,-1.079c-0.003,-0.331 0.132,-0.65 0.372,-0.878c0.072,-0.069 0.142,-0.137 0.194,-0.192c0.367,-0.387 0.692,-0.813 0.967,-1.27c0.68,-1.134 1.039,-2.431 1.039,-3.753c-0,-4.005 -3.296,-7.301 -7.301,-7.301c-0.461,0 -0.922,0.044 -1.375,0.131c-2.879,0.504 -5.17,2.73 -5.758,5.594c-0.54,2.452 0.222,5.016 2.013,6.776c0.242,0.229 0.381,0.547 0.386,0.88l0,0.006c0.005,0.472 -0.276,0.903 -0.71,1.09c-2.907,1.204 -5.229,3.504 -6.46,6.401c-0.865,1.985 -1.3,4.13 -1.274,6.295c0,0 0,1.561 0,1.561c0,1.397 1.15,2.547 2.547,2.547c-0,-0 11.735,-0 11.735,-0l0,-0.59c-0.029,-2.548 0.487,-5.073 1.513,-7.405c1.231,-2.867 3.341,-5.27 6.024,-6.861Z" style="fill-rule:nonzero;"/> +</svg> diff --git a/core/modules/commander.js b/core-server/commander.js similarity index 92% rename from core/modules/commander.js rename to core-server/commander.js index b73e39b0f6..a6cdc81c94 100644 --- a/core/modules/commander.js +++ b/core-server/commander.js @@ -99,16 +99,18 @@ Commander.prototype.executeNextCommand = function() { } } if(command.info.synchronous) { - // Synchronous command + // Synchronous command (await thenables) c = new command.Command(params,this); err = c.execute(); - if(err) { + if(err && typeof err.then === "function") { + err.then(e => { e ? this.callback(e) : this.executeNextCommand(); }); + } else if(err) { this.callback(err); } else { this.executeNextCommand(); } } else { - // Asynchronous command + // Asynchronous command (await thenables) c = new command.Command(params,this,function(err) { if(err) { self.callback(err); @@ -117,7 +119,9 @@ Commander.prototype.executeNextCommand = function() { } }); err = c.execute(); - if(err) { + if(err && typeof err.then === "function") { + err.then(e => { if(e) this.callback(e); }); + } else if(err) { this.callback(err); } } diff --git a/core/modules/commands/build.js b/core-server/commands/build.js similarity index 100% rename from core/modules/commands/build.js rename to core-server/commands/build.js diff --git a/core/modules/commands/clearpassword.js b/core-server/commands/clearpassword.js similarity index 100% rename from core/modules/commands/clearpassword.js rename to core-server/commands/clearpassword.js diff --git a/core/modules/commands/commands.js b/core-server/commands/commands.js similarity index 100% rename from core/modules/commands/commands.js rename to core-server/commands/commands.js diff --git a/core/modules/commands/deletetiddlers.js b/core-server/commands/deletetiddlers.js similarity index 100% rename from core/modules/commands/deletetiddlers.js rename to core-server/commands/deletetiddlers.js diff --git a/core/modules/commands/editions.js b/core-server/commands/editions.js similarity index 100% rename from core/modules/commands/editions.js rename to core-server/commands/editions.js diff --git a/core/modules/commands/fetch.js b/core-server/commands/fetch.js similarity index 100% rename from core/modules/commands/fetch.js rename to core-server/commands/fetch.js diff --git a/core/modules/commands/help.js b/core-server/commands/help.js similarity index 100% rename from core/modules/commands/help.js rename to core-server/commands/help.js diff --git a/core/modules/commands/import.js b/core-server/commands/import.js similarity index 100% rename from core/modules/commands/import.js rename to core-server/commands/import.js diff --git a/core/modules/commands/init.js b/core-server/commands/init.js similarity index 100% rename from core/modules/commands/init.js rename to core-server/commands/init.js diff --git a/core/modules/commands/listen.js b/core-server/commands/listen.js similarity index 100% rename from core/modules/commands/listen.js rename to core-server/commands/listen.js diff --git a/core/modules/commands/load.js b/core-server/commands/load.js similarity index 100% rename from core/modules/commands/load.js rename to core-server/commands/load.js diff --git a/core/modules/commands/makelibrary.js b/core-server/commands/makelibrary.js similarity index 100% rename from core/modules/commands/makelibrary.js rename to core-server/commands/makelibrary.js diff --git a/core/modules/commands/output.js b/core-server/commands/output.js similarity index 100% rename from core/modules/commands/output.js rename to core-server/commands/output.js diff --git a/core/modules/commands/password.js b/core-server/commands/password.js similarity index 100% rename from core/modules/commands/password.js rename to core-server/commands/password.js diff --git a/core/modules/commands/render.js b/core-server/commands/render.js similarity index 100% rename from core/modules/commands/render.js rename to core-server/commands/render.js diff --git a/core/modules/commands/rendertiddler.js b/core-server/commands/rendertiddler.js similarity index 100% rename from core/modules/commands/rendertiddler.js rename to core-server/commands/rendertiddler.js diff --git a/core/modules/commands/rendertiddlers.js b/core-server/commands/rendertiddlers.js similarity index 100% rename from core/modules/commands/rendertiddlers.js rename to core-server/commands/rendertiddlers.js diff --git a/core/modules/commands/save.js b/core-server/commands/save.js similarity index 100% rename from core/modules/commands/save.js rename to core-server/commands/save.js diff --git a/core/modules/commands/savelibrarytiddlers.js b/core-server/commands/savelibrarytiddlers.js similarity index 100% rename from core/modules/commands/savelibrarytiddlers.js rename to core-server/commands/savelibrarytiddlers.js diff --git a/core/modules/commands/savetiddler.js b/core-server/commands/savetiddler.js similarity index 100% rename from core/modules/commands/savetiddler.js rename to core-server/commands/savetiddler.js diff --git a/core/modules/commands/savetiddlers.js b/core-server/commands/savetiddlers.js similarity index 100% rename from core/modules/commands/savetiddlers.js rename to core-server/commands/savetiddlers.js diff --git a/core/modules/commands/savewikifolder.js b/core-server/commands/savewikifolder.js similarity index 99% rename from core/modules/commands/savewikifolder.js rename to core-server/commands/savewikifolder.js index 751e0e54ea..b17246e866 100644 --- a/core/modules/commands/savewikifolder.js +++ b/core-server/commands/savewikifolder.js @@ -76,6 +76,7 @@ WikiFolderMaker.prototype.tiddlersToIgnore = [ "$:/boot/boot.js", "$:/boot/bootprefix.js", "$:/core", + "$:/core-server", "$:/library/sjcl.js", "$:/temp/info-plugin" ]; diff --git a/core/modules/commands/server.js b/core-server/commands/server.js similarity index 100% rename from core/modules/commands/server.js rename to core-server/commands/server.js diff --git a/core/modules/commands/setfield.js b/core-server/commands/setfield.js similarity index 100% rename from core/modules/commands/setfield.js rename to core-server/commands/setfield.js diff --git a/core/modules/commands/unpackplugin.js b/core-server/commands/unpackplugin.js similarity index 100% rename from core/modules/commands/unpackplugin.js rename to core-server/commands/unpackplugin.js diff --git a/core/modules/commands/verbose.js b/core-server/commands/verbose.js similarity index 100% rename from core/modules/commands/verbose.js rename to core-server/commands/verbose.js diff --git a/core/modules/commands/version.js b/core-server/commands/version.js similarity index 100% rename from core/modules/commands/version.js rename to core-server/commands/version.js diff --git a/core/modules/utils/filesystem.js b/core-server/filesystem.js similarity index 100% rename from core/modules/utils/filesystem.js rename to core-server/filesystem.js diff --git a/core-server/plugin.info b/core-server/plugin.info new file mode 100644 index 0000000000..21560a1ad4 --- /dev/null +++ b/core-server/plugin.info @@ -0,0 +1,11 @@ +{ + "title": "$:/core-server", + "name": "Core Server Components", + "description": "TiddlyWiki5 core server components", + "author": "JeremyRuston", + "core-version": ">=5.0.0", + "platform": "server", + "plugin-priority": "0", + "list": "readme", + "stability": "STABILITY_2_STABLE" +} diff --git a/core-server/readme.tid b/core-server/readme.tid new file mode 100644 index 0000000000..23efece016 --- /dev/null +++ b/core-server/readme.tid @@ -0,0 +1,7 @@ +title: $:/core-server/readme + +This plugin contains TiddlyWiki's core components that are only needed on the server, comprising: + +* Commands +* HTTP server code +* Utility functions for server diff --git a/core/modules/server/authenticators/basic.js b/core-server/server/authenticators/basic.js similarity index 100% rename from core/modules/server/authenticators/basic.js rename to core-server/server/authenticators/basic.js diff --git a/core/modules/server/authenticators/header.js b/core-server/server/authenticators/header.js similarity index 100% rename from core/modules/server/authenticators/header.js rename to core-server/server/authenticators/header.js diff --git a/core/modules/server/routes/delete-tiddler.js b/core-server/server/routes/delete-tiddler.js similarity index 87% rename from core/modules/server/routes/delete-tiddler.js rename to core-server/server/routes/delete-tiddler.js index 33cb40d550..17db39848d 100644 --- a/core/modules/server/routes/delete-tiddler.js +++ b/core-server/server/routes/delete-tiddler.js @@ -8,10 +8,14 @@ DELETE /recipes/default/tiddlers/:title \*/ "use strict"; -exports.method = "DELETE"; +exports.methods = ["DELETE"]; exports.path = /^\/bags\/default\/tiddlers\/(.+)$/; +exports.info = { + priority: 100 +}; + exports.handler = function(request,response,state) { var title = $tw.utils.decodeURIComponentSafe(state.params[0]); state.wiki.deleteTiddler(title); diff --git a/core/modules/server/routes/get-favicon.js b/core-server/server/routes/get-favicon.js similarity index 85% rename from core/modules/server/routes/get-favicon.js rename to core-server/server/routes/get-favicon.js index 8b757b2f7a..ce4bc55ed8 100644 --- a/core/modules/server/routes/get-favicon.js +++ b/core-server/server/routes/get-favicon.js @@ -8,10 +8,14 @@ GET /favicon.ico \*/ "use strict"; -exports.method = "GET"; +exports.methods = ["GET"]; exports.path = /^\/favicon.ico$/; +exports.info = { + priority: 100 +}; + exports.handler = function(request,response,state) { var buffer = state.wiki.getTiddlerText("$:/favicon.ico",""); state.sendResponse(200,{"Content-Type": "image/x-icon"},buffer,"base64"); diff --git a/core-server/server/routes/get-file.js b/core-server/server/routes/get-file.js new file mode 100644 index 0000000000..ec928319c7 --- /dev/null +++ b/core-server/server/routes/get-file.js @@ -0,0 +1,73 @@ +/*\ +title: $:/core/modules/server/routes/get-file.js +type: application/javascript +module-type: route + +GET /files/:filepath + +\*/ +"use strict"; + +exports.methods = ["GET"]; + +exports.path = /^\/files\/(.+)$/; + +exports.info = { + priority: 100 +}; + +exports.handler = function(request,response,state) { + var path = require("path"), + fs = require("fs"), + suppliedFilename = $tw.utils.decodeURIComponentSafe(state.params[0]), + baseFilename = path.resolve(state.boot.wikiPath,"files"), + filename = path.resolve(baseFilename,suppliedFilename), + extension = path.extname(filename); + // Check that the filename is inside the wiki files folder + if(path.relative(baseFilename,filename).indexOf("..") === 0) { + return state.sendResponse(404,{"Content-Type": "text/plain"},"File '" + suppliedFilename + "' not found"); + } + fs.stat(filename, function(err, stats) { + if(err) { + return state.sendResponse(404,{"Content-Type": "text/plain"},"File '" + suppliedFilename + "' not found"); + } else { + var type = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : "application/octet-stream"), + responseHeaders = { + "Content-Type": type, + "Accept-Ranges": "bytes" + }; + var rangeHeader = request.headers.range, + stream; + if(rangeHeader) { + // Handle range requests + var parts = rangeHeader.replace(/bytes=/, "").split("-"), + start = parseInt(parts[0], 10), + end = parts[1] ? parseInt(parts[1], 10) : stats.size - 1; + // Validate start and end + if(isNaN(start) || isNaN(end) || start < 0 || end < start || end >= stats.size) { + responseHeaders["Content-Range"] = "bytes */" + stats.size; + return response.writeHead(416, responseHeaders).end(); + } + var chunksize = (end - start) + 1; + responseHeaders["Content-Range"] = "bytes " + start + "-" + end + "/" + stats.size; + responseHeaders["Content-Length"] = chunksize; + response.writeHead(206, responseHeaders); + stream = fs.createReadStream(filename, {start: start, end: end}); + } else { + responseHeaders["Content-Length"] = stats.size; + response.writeHead(200, responseHeaders); + stream = fs.createReadStream(filename); + } + // Common stream error handling + stream.on("error", function(err) { + if(!response.headersSent) { + response.writeHead(500, {"Content-Type": "text/plain"}); + response.end("Read error"); + } else { + response.destroy(); + } + }); + stream.pipe(response); + } + }); +}; diff --git a/core/modules/server/routes/get-index.js b/core-server/server/routes/get-index.js similarity index 87% rename from core/modules/server/routes/get-index.js rename to core-server/server/routes/get-index.js index 7ba52faf60..f856bd511c 100644 --- a/core/modules/server/routes/get-index.js +++ b/core-server/server/routes/get-index.js @@ -8,10 +8,14 @@ GET / \*/ "use strict"; -exports.method = "GET"; +exports.methods = ["GET"]; exports.path = /^\/$/; +exports.info = { + priority: 100 +}; + exports.handler = function(request,response,state) { var text = state.wiki.renderTiddler(state.server.get("root-render-type"),state.server.get("root-tiddler")), responseHeaders = { diff --git a/core/modules/server/routes/get-login-basic.js b/core-server/server/routes/get-login-basic.js similarity index 92% rename from core/modules/server/routes/get-login-basic.js rename to core-server/server/routes/get-login-basic.js index bca3bd18d3..e9a73c856b 100644 --- a/core/modules/server/routes/get-login-basic.js +++ b/core-server/server/routes/get-login-basic.js @@ -8,10 +8,14 @@ GET /login-basic -- force a Basic Authentication challenge \*/ "use strict"; -exports.method = "GET"; +exports.methods = ["GET"]; exports.path = /^\/login-basic$/; +exports.info = { + priority: 100 +}; + exports.handler = function(request,response,state) { if(!state.authenticatedUsername) { // Challenge if there's no username diff --git a/core/modules/server/routes/get-status.js b/core-server/server/routes/get-status.js similarity index 91% rename from core/modules/server/routes/get-status.js rename to core-server/server/routes/get-status.js index d93c64037f..ed2c528063 100644 --- a/core/modules/server/routes/get-status.js +++ b/core-server/server/routes/get-status.js @@ -8,10 +8,14 @@ GET /status \*/ "use strict"; -exports.method = "GET"; +exports.methods = ["GET"]; exports.path = /^\/status$/; +exports.info = { + priority: 100 +}; + exports.handler = function(request,response,state) { var text = JSON.stringify({ username: state.authenticatedUsername || state.server.get("anon-username") || "", diff --git a/core/modules/server/routes/get-tiddler-html.js b/core-server/server/routes/get-tiddler-html.js similarity index 95% rename from core/modules/server/routes/get-tiddler-html.js rename to core-server/server/routes/get-tiddler-html.js index a891ea6e7a..b7a8aa8f62 100644 --- a/core/modules/server/routes/get-tiddler-html.js +++ b/core-server/server/routes/get-tiddler-html.js @@ -8,10 +8,14 @@ GET /:title \*/ "use strict"; -exports.method = "GET"; +exports.methods = ["GET"]; exports.path = /^\/([^\/]+)$/; +exports.info = { + priority: 100 +}; + exports.handler = function(request,response,state) { var title = $tw.utils.decodeURIComponentSafe(state.params[0]), tiddler = state.wiki.getTiddler(title); diff --git a/core/modules/server/routes/get-tiddler.js b/core-server/server/routes/get-tiddler.js similarity index 94% rename from core/modules/server/routes/get-tiddler.js rename to core-server/server/routes/get-tiddler.js index 58ecb8a43e..b5c4e11a06 100644 --- a/core/modules/server/routes/get-tiddler.js +++ b/core-server/server/routes/get-tiddler.js @@ -8,10 +8,14 @@ GET /recipes/default/tiddlers/:title \*/ "use strict"; -exports.method = "GET"; +exports.methods = ["GET"]; exports.path = /^\/recipes\/default\/tiddlers\/(.+)$/; +exports.info = { + priority: 100 +}; + exports.handler = function(request,response,state) { var title = $tw.utils.decodeURIComponentSafe(state.params[0]), tiddler = state.wiki.getTiddler(title), diff --git a/core/modules/server/routes/get-tiddlers-json.js b/core-server/server/routes/get-tiddlers-json.js similarity index 95% rename from core/modules/server/routes/get-tiddlers-json.js rename to core-server/server/routes/get-tiddlers-json.js index 89f91032ee..8c78dad9f4 100644 --- a/core/modules/server/routes/get-tiddlers-json.js +++ b/core-server/server/routes/get-tiddlers-json.js @@ -10,10 +10,14 @@ GET /recipes/default/tiddlers.json?filter=<filter> var DEFAULT_FILTER = "[all[tiddlers]!is[system]sort[title]]"; -exports.method = "GET"; +exports.methods = ["GET"]; exports.path = /^\/recipes\/default\/tiddlers.json$/; +exports.info = { + priority: 100 +}; + exports.handler = function(request,response,state) { var filter = state.queryParameters.filter || DEFAULT_FILTER; if(state.wiki.getTiddlerText("$:/config/Server/AllowAllExternalFilters") !== "yes") { diff --git a/core/modules/server/routes/put-tiddler.js b/core-server/server/routes/put-tiddler.js similarity index 95% rename from core/modules/server/routes/put-tiddler.js rename to core-server/server/routes/put-tiddler.js index 74327bd50d..55479b5700 100644 --- a/core/modules/server/routes/put-tiddler.js +++ b/core-server/server/routes/put-tiddler.js @@ -8,10 +8,14 @@ PUT /recipes/default/tiddlers/:title \*/ "use strict"; -exports.method = "PUT"; +exports.methods = ["PUT"]; exports.path = /^\/recipes\/default\/tiddlers\/(.+)$/; +exports.info = { + priority: 100 +}; + exports.handler = function(request,response,state) { var title = $tw.utils.decodeURIComponentSafe(state.params[0]), fields = $tw.utils.parseJSONSafe(state.data); diff --git a/core/modules/server/server.js b/core-server/server/server.js similarity index 98% rename from core/modules/server/server.js rename to core-server/server/server.js index 2118e9b503..e1741d08bb 100644 --- a/core/modules/server/server.js +++ b/core-server/server/server.js @@ -74,6 +74,11 @@ function Server(options) { // console.log("Loading server route " + title); self.addRoute(routeDefinition); }); + this.routes.sort((a, b) => { + const priorityA = a.info?.priority ?? 100, + priorityB = b.info?.priority ?? 100; + return priorityB - priorityA; + }); // Initialise the http vs https this.listenOptions = null; this.protocol = "http"; @@ -217,7 +222,7 @@ Server.prototype.findMatchingRoute = function(request,state) { } else { match = potentialRoute.path.exec(pathname); } - if(match && request.method === potentialRoute.method) { + if(match && (potentialRoute.methods?.includes(request.method) || potentialRoute.method === request.method)) { state.params = []; for(var p=1; p<match.length; p++) { state.params.push(match[p]); diff --git a/core/modules/startup/commands.js b/core-server/startup/commands.js similarity index 100% rename from core/modules/startup/commands.js rename to core-server/startup/commands.js diff --git a/core/modules/utils/edition-info.js b/core-server/utils/edition-info.js similarity index 100% rename from core/modules/utils/edition-info.js rename to core-server/utils/edition-info.js diff --git a/core/modules/utils/repository.js b/core-server/utils/repository.js similarity index 100% rename from core/modules/utils/repository.js rename to core-server/utils/repository.js diff --git a/core/acknowledgements.tid b/core/acknowledgements.tid index e1015e2c99..3d4010bfd3 100644 --- a/core/acknowledgements.tid +++ b/core/acknowledgements.tid @@ -4,4 +4,4 @@ TiddlyWiki incorporates code from these fine OpenSource projects: * [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]] * [[The Jasmine JavaScript Test Framework|https://jasmine.github.io/]] -* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]] +* [[modern-normalize by Sindre Sorhus|https://github.com/sindresorhus/modern-normalize]] diff --git a/core/language/en-GB/ControlPanel.multids b/core/language/en-GB/ControlPanel.multids index 129dab0b41..ce0a5b3cf7 100644 --- a/core/language/en-GB/ControlPanel.multids +++ b/core/language/en-GB/ControlPanel.multids @@ -131,15 +131,14 @@ 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/ControlPanel: ~TiddlyHost Control Panel Saving/TiddlySpot/Backups: Backups -Saving/TiddlySpot/Caption: ~TiddlySpot Saver -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/Caption: ~TiddlyHost Saver +Saving/TiddlySpot/Description: These settings are only used when saving to [[TiddlyHost|https://tiddlyhost.com]] or a compatible remote server. See [[here|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot]] for information on ~TiddlyHost saving configuration Saving/TiddlySpot/Filename: Upload Filename -Saving/TiddlySpot/Heading: ~TiddlySpot -Saving/TiddlySpot/Hint: //The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.// +Saving/TiddlySpot/Heading: ~TiddlyHost +Saving/TiddlySpot/Hint: //The server URL defaults to `http://<wikiname>.tiddlyspot.com/` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.// Saving/TiddlySpot/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 @@ -148,7 +147,7 @@ Settings/AutoSave/Disabled/Description: Do not save changes automatically Settings/AutoSave/Enabled/Description: Save changes automatically Settings/AutoSave/Hint: Attempt to automatically save changes during editing when using a supporting saver Settings/CamelCase/Caption: Camel Case Wiki Links -Settings/CamelCase/Hint: You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect +Settings/CamelCase/Hint: Requires reload to take effect Settings/CamelCase/Description: Enable automatic ~CamelCase linking Settings/Caption: Settings Settings/EditorToolbar/Caption: Editor Toolbar @@ -190,6 +189,8 @@ Settings/DefaultSidebarTab/Caption: Default Sidebar Tab Settings/DefaultSidebarTab/Hint: Specify which sidebar tab is displayed by default Settings/DefaultMoreSidebarTab/Caption: Default More Sidebar Tab Settings/DefaultMoreSidebarTab/Hint: Specify which More sidebar tab is displayed by default +Settings/DefaultTiddlerInfoTab/Caption: Default Tiddler Info Tab +Settings/DefaultTiddlerInfoTab/Hint: Specify which tab is displayed by default when tiddler info panel is opened Settings/LinkToBehaviour/Caption: Tiddler Opening Behaviour Settings/LinkToBehaviour/InsideRiver/Hint: Navigation from //within// the story river Settings/LinkToBehaviour/OutsideRiver/Hint: Navigation from //outside// the story river @@ -251,3 +252,6 @@ ViewTemplateSubtitle/Caption: View Template Subtitle ViewTemplateSubtitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the subtitle of a tiddler. ViewTemplateTags/Caption: View Template Tags ViewTemplateTags/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the tags area of a tiddler. +WikiInformation/Caption: Wiki Information +WikiInformation/Hint: This page summarises high level information about the configuration of this ~TiddlyWiki. It is designed to enable users to quickly share relevant aspects of the configuration of their ~TiddlyWiki with others, for example when seeking help in one of the forums. No private or personal information is included, and nothing is shared without being explicitly copied and pasted elsewhere +WikiInformation/Drag/Caption: Drag this link to copy this tool to another wiki \ No newline at end of file diff --git a/core/modules/editor/engines/framed.js b/core/modules/editor/engines/framed.js index 9b1c8cd81f..1a4b11c458 100644 --- a/core/modules/editor/engines/framed.js +++ b/core/modules/editor/engines/framed.js @@ -34,7 +34,7 @@ function FramedEngine(options) { var paletteTitle = this.widget.wiki.getTiddlerText("$:/palette"); var colorScheme = (this.widget.wiki.getTiddler(paletteTitle) || {fields: {}}).fields["color-scheme"] || "light"; this.iframeDoc.open(); - this.iframeDoc.write("<meta name='color-scheme' content='" + colorScheme + "'>"); + this.iframeDoc.write("<!DOCTYPE html><html><head><meta name='color-scheme' content='" + colorScheme + "'></head><body></body></html>"); this.iframeDoc.close(); // Style the iframe this.iframeNode.className = this.dummyTextArea.className; diff --git a/core/modules/editor/factory.js b/core/modules/editor/factory.js index 984cc76bad..2fd323c0bb 100644 --- a/core/modules/editor/factory.js +++ b/core/modules/editor/factory.js @@ -68,7 +68,7 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) { // Fix height this.engine.fixHeight(); // Focus if required - if(this.editFocus === "true" || this.editFocus === "yes") { + if($tw.browser && (this.editFocus === "true" || this.editFocus === "yes") && !$tw.utils.hasClass(this.parentDomNode.ownerDocument.activeElement,"tc-keep-focus")) { this.engine.focus(); } // Add widget message listeners diff --git a/core/modules/filters.js b/core/modules/filters.js index d9e87e4a35..56bc533ccc 100644 --- a/core/modules/filters.js +++ b/core/modules/filters.js @@ -267,8 +267,7 @@ exports.compileFilter = function(filterString) { // Create a function for the chain of operators in the operation var operationSubFunction = function(source,widget) { var accumulator = source, - results = [], - currTiddlerTitle = widget && widget.getVariable("currentTiddler"); + results = []; $tw.utils.each(operation.operators,function(operator) { var operands = [], multiValueOperands = [], @@ -286,6 +285,7 @@ exports.compileFilter = function(filterString) { } $tw.utils.each(operator.operands,function(operand) { if(operand.indirect) { + var currTiddlerTitle = widget && widget.getVariable("currentTiddler"); operand.value = self.getTextReference(operand.text,"",currTiddlerTitle); operand.multiValue = [operand.value]; } else if(operand.variable) { diff --git a/core/modules/filters/format/json.js b/core/modules/filters/format/json.js index 5db3658e74..98f85dd27b 100644 --- a/core/modules/filters/format/json.js +++ b/core/modules/filters/format/json.js @@ -16,12 +16,8 @@ exports.json = function(source,operand,options) { spaces = /^\d+$/.test(operand) ? parseInt(operand,10) : operand; } source(function(tiddler,title) { - var data = $tw.utils.parseJSONSafe(title); - try { - data = JSON.parse(title); - } catch(e) { - data = undefined; - } + var data = $tw.utils.parseJSONSafe(title,function(){return undefined;}); + if(data !== undefined) { results.push(JSON.stringify(data,null,spaces)); } diff --git a/core/modules/filters/math.js b/core/modules/filters/math.js index 4c2a9168a6..bdf2117eb7 100644 --- a/core/modules/filters/math.js +++ b/core/modules/filters/math.js @@ -217,6 +217,10 @@ function makeNumericReducingOperator(fnCalc,initialValue,fnFinal) { source(function(tiddler,title) { result.push($tw.utils.parseNumber(title)); }); + // We return an empty array if there are no input titles + if(result.length === 0) { + return []; + } var value = result.reduce(function(accumulator,currentValue) { return fnCalc(accumulator,currentValue); },initialValue); diff --git a/core/modules/info/dimensions.js b/core/modules/info/dimensions.js new file mode 100644 index 0000000000..48458dd0f0 --- /dev/null +++ b/core/modules/info/dimensions.js @@ -0,0 +1,86 @@ +/*\ +title: $:/core/modules/info/windowdimensions.js +type: application/javascript +module-type: info +\*/ + +exports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) { + if(!$tw.browser) { + return []; + } + + class WindowDimensionsTracker { + constructor(updateCallback) { + this.updateCallback = updateCallback; + this.resizeHandlers = new Map(); + this.dimensionsInfo = [ + ["outer/width", win => win.outerWidth], + ["outer/height", win => win.outerHeight], + ["inner/width", win => win.innerWidth], + ["inner/height", win => win.innerHeight], + ["client/width", win => win.document.documentElement.clientWidth], + ["client/height", win => win.document.documentElement.clientHeight] + ]; + } + + buildTiddlers(win,windowId) { + const prefix = `$:/info/browser/window/${windowId}/`; + return this.dimensionsInfo.map(([suffix, getter]) => ({ + title: prefix + suffix, + text: String(getter(win)) + })); + } + + clearTiddlers(windowId) { + const prefix = `$:/info/browser/window/${windowId}/`, + deletions = this.dimensionsInfo.map(([suffix]) => prefix + suffix); + this.updateCallback([], deletions); + } + + getUpdateHandler(win,windowId) { + let scheduled = false; + return () => { + if(!scheduled) { + scheduled = true; + requestAnimationFrame(() => { + this.updateCallback(this.buildTiddlers(win,windowId), []); + scheduled = false; + }); + } + }; + } + + trackWindow(win,windowId) { + const handler = this.getUpdateHandler(win, windowId); + handler(); // initial update + win.addEventListener("resize",handler,{passive:true}); + this.resizeHandlers.set(windowId,{win, handler}); + } + + untrackWindow(windowId) { + const entry = this.resizeHandlers.get(windowId); + if(entry) { + entry.win.removeEventListener("resize", entry.handler); + this.resizeHandlers.delete(windowId); + } + this.clearTiddlers(windowId); + } + } + + const tracker = new WindowDimensionsTracker(updateInfoTiddlersCallback); + + // Track main window + tracker.trackWindow(window,"system/main"); + + // Hook into event bus for user windows + if($tw.eventBus) { + $tw.eventBus.on("window:opened", ({window: win, windowID}) => { + tracker.trackWindow(win, "user/" + windowID); + }); + $tw.eventBus.on("window:closed", ({windowID}) => { + tracker.untrackWindow("user/" + windowID); + }); + } + + return []; +}; diff --git a/core/modules/parsers/audioparser.js b/core/modules/parsers/audioparser.js index 601de058e3..757703da40 100644 --- a/core/modules/parsers/audioparser.js +++ b/core/modules/parsers/audioparser.js @@ -7,23 +7,34 @@ The audio parser parses an audio tiddler into an embeddable HTML element \*/ +/*jslint node: true, browser: true */ +/*global $tw: false */ "use strict"; var AudioParser = function(type,text,options) { var element = { type: "element", - tag: "audio", + tag: "$audio", // Using $audio to enable widget interception attributes: { controls: {type: "string", value: "controls"}, style: {type: "string", value: "width: 100%; object-fit: contain"} } - }, - src; + }; + + // Pass through source information if(options._canonical_uri) { element.attributes.src = {type: "string", value: options._canonical_uri}; + element.attributes.type = {type: "string", value: type}; } else if(text) { element.attributes.src = {type: "string", value: "data:" + type + ";base64," + text}; + element.attributes.type = {type: "string", value: type}; } + + // Pass through tiddler title if available + if(options.title) { + element.attributes.tiddler = {type: "string", value: options.title}; + } + this.tree = [element]; this.source = text; this.type = type; @@ -33,3 +44,4 @@ exports["audio/ogg"] = AudioParser; exports["audio/mpeg"] = AudioParser; exports["audio/mp3"] = AudioParser; exports["audio/mp4"] = AudioParser; + \ No newline at end of file diff --git a/core/modules/parsers/parseutils.js b/core/modules/parsers/parseutils.js index 30bc395095..05a85e1ec7 100644 --- a/core/modules/parsers/parseutils.js +++ b/core/modules/parsers/parseutils.js @@ -82,6 +82,7 @@ exports.parseTokenString = function(source,pos,token) { /* Look for a token matching a regex. Returns null if not found, otherwise returns {type: "regexp", match:, start:, end:,} +Use the "Y" (sticky) flag to avoid searching the entire rest of the string */ exports.parseTokenRegExp = function(source,pos,reToken) { var node = { @@ -172,7 +173,7 @@ exports.parseMacroParameter = function(source,pos) { start: pos }; // Define our regexp - var reMacroParameter = /(?:([A-Za-z0-9\-_]+)\s*:)?(?:\s*(?:"""([\s\S]*?)"""|"([^"]*)"|'([^']*)'|\[\[([^\]]*)\]\]|((?:(?:>(?!>))|[^\s>"'])+)))/g; + const reMacroParameter = /(?:([A-Za-z0-9\-_]+)\s*:)?(?:\s*(?:"""([\s\S]*?)"""|"([^"]*)"|'([^']*)'|\[\[([^\]]*)\]\]|((?:(?:>(?!>))|[^\s>"'])+)))/y; // Skip whitespace pos = $tw.utils.skipWhiteSpace(source,pos); // Look for the parameter @@ -240,7 +241,7 @@ exports.parseMacroInvocation = function(source,pos) { params: [] }; // Define our regexps - var reMacroName = /([^\s>"'=]+)/g; + const reMacroName = /([^\s>"'=]+)/y; // Skip whitespace pos = $tw.utils.skipWhiteSpace(source,pos); // Look for a double less than sign @@ -277,7 +278,7 @@ exports.parseFilterVariable = function(source) { params: [], }, pos = 0, - reName = /([^\s"']+)/g; + reName = /([^\s"']+)/y; // If there is no whitespace or it is an empty string then there are no macro parameters if(/^\S*$/.test(source)) { node.name = source; @@ -302,11 +303,11 @@ exports.parseAttribute = function(source,pos) { start: pos }; // Define our regexps - var reAttributeName = /([^\/\s>"'`=]+)/g, - reUnquotedAttribute = /([^\/\s<>"'`=]+)/g, - reFilteredValue = /\{\{\{([\S\s]+?)\}\}\}/g, - reIndirectValue = /\{\{([^\}]+)\}\}/g, - reSubstitutedValue = /(?:```([\s\S]*?)```|`([^`]|[\S\s]*?)`)/g; + const reAttributeName = /([^\/\s>"'`=]+)/y, + reUnquotedAttribute = /([^\/\s<>"'`=]+)/y, + reFilteredValue = /\{\{\{([\S\s]+?)\}\}\}/y, + reIndirectValue = /\{\{([^\}]+)\}\}/y, + reSubstitutedValue = /(?:```([\s\S]*?)```|`([^`]|[\S\s]*?)`)/y; // Skip whitespace pos = $tw.utils.skipWhiteSpace(source,pos); // Get the attribute name diff --git a/core/modules/parsers/wikiparser/rules/commentblock.js b/core/modules/parsers/wikiparser/rules/commentblock.js index 96d3deb3dc..9e25587ba9 100644 --- a/core/modules/parsers/wikiparser/rules/commentblock.js +++ b/core/modules/parsers/wikiparser/rules/commentblock.js @@ -22,7 +22,7 @@ Note that the syntax for comments is simplified to an opening "<!--" sequence an "use strict"; exports.name = "commentblock"; -exports.types = {block:true, pragma:true}; +exports.types = {block: true, pragma: true}; exports.init = function(parser) { this.parser = parser; @@ -43,9 +43,18 @@ exports.findNextMatch = function(startPos) { return undefined; }; + exports.parse = function() { // Move past the match this.parser.pos = this.endMatchRegExp.lastIndex; - // Don't return any elements - return []; + // Return a node representing the comment that is not rendered + var commentStart = this.match.index; + var commentEnd = this.endMatch.index + this.endMatch[0].length; + return [{ + type: "void", + children: [], + text: this.parser.source.slice(commentStart, commentEnd), + start: commentStart, + end: commentEnd + }]; }; diff --git a/core/modules/parsers/wikiparser/rules/commentinline.js b/core/modules/parsers/wikiparser/rules/commentinline.js index e826b95e62..1b7ea8b5d1 100644 --- a/core/modules/parsers/wikiparser/rules/commentinline.js +++ b/core/modules/parsers/wikiparser/rules/commentinline.js @@ -40,6 +40,13 @@ exports.findNextMatch = function(startPos) { exports.parse = function() { // Move past the match this.parser.pos = this.endMatchRegExp.lastIndex; - // Don't return any elements - return []; + // Return a node representing the inline comment + var commentStart = this.match.index; + var commentEnd = this.endMatch.index + this.endMatch[0].length; + return [{ + type: "void", + text: this.parser.source.slice(commentStart, commentEnd), + start: commentStart, + end: commentEnd + }]; }; diff --git a/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js b/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js index 24380ed115..3c05bbe2c1 100644 --- a/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js +++ b/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js @@ -39,7 +39,7 @@ exports.parse = function() { // Return the classed span return [{ type: "element", - tag: "strike", + tag: "s", children: tree }]; }; diff --git a/core/modules/parsers/wikiparser/rules/extlink.js b/core/modules/parsers/wikiparser/rules/extlink.js index 2678e38735..7a2485f1cb 100644 --- a/core/modules/parsers/wikiparser/rules/extlink.js +++ b/core/modules/parsers/wikiparser/rules/extlink.js @@ -28,11 +28,11 @@ exports.init = function(parser) { exports.parse = function() { // Move past the match - var start = this.parser.pos; + var start = this.parser.pos; this.parser.pos = this.matchRegExp.lastIndex; // Create the link unless it is suppressed if(this.match[0].substr(0,1) === "~") { - return [{type: "text", text: this.match[0].substr(1)}]; + return [{type: "text", text: this.match[0].substr(1), start: start, end: this.parser.pos}]; } else { return [{ type: "element", diff --git a/core/modules/parsers/wikiparser/rules/fnprocdef.js b/core/modules/parsers/wikiparser/rules/fnprocdef.js index 8e675a3d1d..8c71372c5c 100644 --- a/core/modules/parsers/wikiparser/rules/fnprocdef.js +++ b/core/modules/parsers/wikiparser/rules/fnprocdef.js @@ -6,15 +6,15 @@ module-type: wikirule Wiki pragma rule for function, procedure and widget definitions ``` -\function name(param:defaultvalue,param2:defaultvalue) +\function name(param:"defaultvalue", param2:"defaultvalue") definition text \end -\procedure name(param:defaultvalue,param2:defaultvalue) +\procedure name(param:"defaultvalue", param2:"defaultvalue") definition text \end -\widget $mywidget(param:defaultvalue,param2:defaultvalue) +\widget $mywidget(param:"defaultvalue", param2:"defaultvalue") definition text \end ``` @@ -50,7 +50,7 @@ exports.parse = function() { var reEnd; if(this.match[5]) { // If so, it is a multiline definition and the end of the body is marked with \end - reEnd = new RegExp("((:?^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[2]) + ")?(?:$|\\r?\\n))","mg"); + reEnd = new RegExp("((:?^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[2]) + ")?\\s*?(?:$|\\r?\\n))","mg"); } else { // Otherwise, the end of the definition is marked by the end of the line reEnd = /($|\r?\n)/mg; diff --git a/core/modules/parsers/wikiparser/rules/hardlinebreaks.js b/core/modules/parsers/wikiparser/rules/hardlinebreaks.js index da28f78084..f229fe843e 100644 --- a/core/modules/parsers/wikiparser/rules/hardlinebreaks.js +++ b/core/modules/parsers/wikiparser/rules/hardlinebreaks.js @@ -50,6 +50,8 @@ exports.parse = function() { } } } while(match && !match[1]); - // Return the nodes + // Mark first and last node, and return the nodes + if(tree[0]) tree[0].isRuleStart = true; + if(tree[tree.length-1]) tree[tree.length-1].isRuleEnd = true; return tree; }; diff --git a/core/modules/parsers/wikiparser/rules/html.js b/core/modules/parsers/wikiparser/rules/html.js index c5f0e86c56..2d1a42a0b1 100644 --- a/core/modules/parsers/wikiparser/rules/html.js +++ b/core/modules/parsers/wikiparser/rules/html.js @@ -41,7 +41,7 @@ Parse the most recent match exports.parse = function() { // Retrieve the most recent match so that recursive calls don't overwrite it var tag = this.nextTag; - if (!tag.isSelfClosing) { + if(!tag.isSelfClosing) { tag.openTagStart = tag.start; tag.openTagEnd = tag.end; } @@ -49,7 +49,7 @@ exports.parse = function() { // Advance the parser position to past the tag this.parser.pos = tag.end; // Check for an immediately following double linebreak - var hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/g); + var hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/y); // Set whether we're in block mode tag.isBlock = this.is.block || hasLineBreak; // Parse the body if we need to @@ -63,22 +63,22 @@ exports.parse = function() { } tag.end = this.parser.pos; tag.closeTagEnd = tag.end; - if (tag.closeTagEnd === tag.openTagEnd || this.parser.source[tag.closeTagEnd - 1] !== '>') { + if(tag.closeTagEnd === tag.openTagEnd || this.parser.source[tag.closeTagEnd - 1] !== ">") { tag.closeTagStart = tag.end; } else { tag.closeTagStart = tag.closeTagEnd - 2; var closeTagMinPos = tag.children.length > 0 ? tag.children[tag.children.length-1].end : tag.openTagEnd; - if (!Number.isSafeInteger(closeTagMinPos)) closeTagMinPos = tag.openTagEnd; - while (tag.closeTagStart >= closeTagMinPos) { + if(!Number.isSafeInteger(closeTagMinPos)) closeTagMinPos = tag.openTagEnd; + while(tag.closeTagStart >= closeTagMinPos) { var char = this.parser.source[tag.closeTagStart]; - if (char === '>') { + if(char === ">") { tag.closeTagStart = -1; break; } - if (char === '<') break; + if(char === "<") break; tag.closeTagStart -= 1; } - if (tag.closeTagStart < closeTagMinPos) { + if(tag.closeTagStart < closeTagMinPos) { tag.closeTagStart = tag.end; } } @@ -100,7 +100,7 @@ exports.parseTag = function(source,pos,options) { orderedAttributes: [] }; // Define our regexps - var reTagName = /([a-zA-Z0-9\-\$\.]+)/g; + const reTagName = /([a-zA-Z0-9\-\$\.]+)/y; // Skip whitespace pos = $tw.utils.skipWhiteSpace(source,pos); // Look for a less than sign @@ -148,7 +148,7 @@ exports.parseTag = function(source,pos,options) { pos = token.end; // Check for a required line break if(options.requireLineBreak) { - token = $tw.utils.parseTokenRegExp(source,pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/g); + token = $tw.utils.parseTokenRegExp(source,pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/y); if(!token) { return null; } diff --git a/core/modules/parsers/wikiparser/rules/image.js b/core/modules/parsers/wikiparser/rules/image.js index 2bc90b80d3..9ae093380a 100644 --- a/core/modules/parsers/wikiparser/rules/image.js +++ b/core/modules/parsers/wikiparser/rules/image.js @@ -113,7 +113,7 @@ exports.parseImage = function(source,pos) { // Skip whitespace pos = $tw.utils.skipWhiteSpace(source,pos); // Get the source up to the terminating `]]` - token = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\]]*?)\|)?([^\]]+?)\]\]/g); + token = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\]]*?)\|)?([^\]]+?)\]\]/y); if(!token) { return null; } diff --git a/core/modules/parsers/wikiparser/rules/list.js b/core/modules/parsers/wikiparser/rules/list.js index 98cc5540fc..f3ad79450c 100644 --- a/core/modules/parsers/wikiparser/rules/list.js +++ b/core/modules/parsers/wikiparser/rules/list.js @@ -59,6 +59,7 @@ var listTypes = { ":": {listTag: "dl", itemTag: "dd"}, ">": {listTag: "blockquote", itemTag: "div"} }; +exports.listTypes = listTypes; /* Parse the most recent match diff --git a/core/modules/parsers/wikiparser/rules/macrocallblock.js b/core/modules/parsers/wikiparser/rules/macrocallblock.js index 3793d563d3..800af4e337 100644 --- a/core/modules/parsers/wikiparser/rules/macrocallblock.js +++ b/core/modules/parsers/wikiparser/rules/macrocallblock.js @@ -29,7 +29,7 @@ exports.findNextMatch = function(startPos) { var c = this.parser.source.charAt(nextCall.end); // Ensure EOL after parsed macro // If we didn't need to support IE, we'd just use /(?:\r?\n|$)/ym - if ((c === "") || (c === "\n") || ((c === "\r") && this.parser.source.charAt(nextCall.end+1) === "\n")) { + if((c === "") || (c === "\n") || ((c === "\r") && this.parser.source.charAt(nextCall.end+1) === "\n")) { this.nextCall = nextCall; return nextStart; } diff --git a/core/modules/parsers/wikiparser/rules/macrocallinline.js b/core/modules/parsers/wikiparser/rules/macrocallinline.js index bd6e777bbe..ba6070a773 100644 --- a/core/modules/parsers/wikiparser/rules/macrocallinline.js +++ b/core/modules/parsers/wikiparser/rules/macrocallinline.js @@ -42,3 +42,5 @@ exports.parse = function() { this.parser.pos = call.end; return [call]; }; + + diff --git a/core/modules/parsers/wikiparser/rules/macrodef.js b/core/modules/parsers/wikiparser/rules/macrodef.js index 342f5aacd2..72cd4b434b 100644 --- a/core/modules/parsers/wikiparser/rules/macrodef.js +++ b/core/modules/parsers/wikiparser/rules/macrodef.js @@ -52,10 +52,11 @@ exports.parse = function() { } } // Is the remainder of the \define line blank after the parameter close paren? - var reEnd; + var reEnd,isBlock = true; if(this.match[3]) { // If so, it is a multiline definition and the end of the body is marked with \end - reEnd = new RegExp("((?:^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[1]) + ")?(?:$|\\r?\\n))","mg"); + isBlock = false; + reEnd = new RegExp("((?:^|\\r?\\n)[^\\S\\n\\r]*\\\\end[^\\S\\n\\r]*(?:" + $tw.utils.escapeRegExp(this.match[1]) + ")?\\s*?(?:$|\\r?\\n))","mg"); } else { // Otherwise, the end of the definition is marked by the end of the line reEnd = /($|\r?\n)/mg; @@ -79,7 +80,8 @@ exports.parse = function() { attributes: {}, children: [], params: params, - isMacroDefinition: true + isMacroDefinition: true, + isBlock: isBlock && !!endMatch }]; $tw.utils.addAttributeToParseTreeNode(parseTreeNodes[0],"name",this.match[1]); $tw.utils.addAttributeToParseTreeNode(parseTreeNodes[0],"value",text); diff --git a/core/modules/parsers/wikiparser/rules/parsermode.js b/core/modules/parsers/wikiparser/rules/parsermode.js index 868db3e151..f2ee6da3a5 100644 --- a/core/modules/parsers/wikiparser/rules/parsermode.js +++ b/core/modules/parsers/wikiparser/rules/parsermode.js @@ -31,6 +31,7 @@ Parse the most recent match */ exports.parse = function() { // Move past the pragma invocation + var start = this.parser.pos; this.parser.pos = this.matchRegExp.lastIndex; // Parse whitespace delimited tokens terminated by a line break var reMatch = /[^\S\n]*(\S+)|(\r?\n)/mg, @@ -58,6 +59,11 @@ exports.parse = function() { this.parser.parseAsInline = true; } } - // No parse tree nodes to return - return []; + return [{ + type: "void", + children: [], + parseAsInline: this.parser.parseAsInline, + start: start, + end: this.parser.pos + }]; }; diff --git a/core/modules/parsers/wikiparser/rules/prettyextlink.js b/core/modules/parsers/wikiparser/rules/prettyextlink.js index 2c575c2271..ea22c9365f 100644 --- a/core/modules/parsers/wikiparser/rules/prettyextlink.js +++ b/core/modules/parsers/wikiparser/rules/prettyextlink.js @@ -113,3 +113,5 @@ exports.parseLink = function(source,pos) { node.end = closePos + 2; return node; }; + + diff --git a/core/modules/parsers/wikiparser/rules/prettylink.js b/core/modules/parsers/wikiparser/rules/prettylink.js index 91579256dc..4f4fa0d2e3 100644 --- a/core/modules/parsers/wikiparser/rules/prettylink.js +++ b/core/modules/parsers/wikiparser/rules/prettylink.js @@ -32,7 +32,7 @@ exports.parse = function() { var text = this.match[1], link = this.match[2] || text, textEndPos = this.parser.source.indexOf("|", start); - if (textEndPos < 0 || textEndPos > this.matchRegExp.lastIndex) { + if(textEndPos < 0 || textEndPos > this.matchRegExp.lastIndex) { textEndPos = this.matchRegExp.lastIndex - 2; } var linkStart = this.match[2] ? (start + this.match[1].length + 1) : start; diff --git a/core/modules/parsers/wikiparser/rules/rules.js b/core/modules/parsers/wikiparser/rules/rules.js index 7b37493087..a935bf238e 100644 --- a/core/modules/parsers/wikiparser/rules/rules.js +++ b/core/modules/parsers/wikiparser/rules/rules.js @@ -54,6 +54,13 @@ exports.parse = function() { if(tokens.length > 0) { this.parser.amendRules(tokens[0],tokens.slice(1)); } - // No parse tree nodes to return - return []; + // No widget to render, return void node. + return [{ + type: "void", + attributes: { + action: {type: "string", value: tokens[0]}, + rules: {type: "string", value: tokens.slice(1).join(" ")} + }, + children: [] + }]; }; diff --git a/core/modules/parsers/wikiparser/rules/styleblock.js b/core/modules/parsers/wikiparser/rules/styleblock.js index 2abf2fc9e9..da93e79612 100644 --- a/core/modules/parsers/wikiparser/rules/styleblock.js +++ b/core/modules/parsers/wikiparser/rules/styleblock.js @@ -64,5 +64,8 @@ exports.parse = function() { $tw.utils.addAttributeToParseTreeNode(tree[t],"style",styles.join("")); } } - return tree; + return [{ + type: "void", + children: tree + }] }; diff --git a/core/modules/parsers/wikiparser/rules/styleinline.js b/core/modules/parsers/wikiparser/rules/styleinline.js index 3aea0d266a..f8706f1379 100644 --- a/core/modules/parsers/wikiparser/rules/styleinline.js +++ b/core/modules/parsers/wikiparser/rules/styleinline.js @@ -21,7 +21,7 @@ exports.types = {inline: true}; exports.init = function(parser) { this.parser = parser; - // Regexp to match + // Regexp to match /@@(styles)?\s*(\.class\s+)?/ this.matchRegExp = /@@((?:[^\.\r\n\s:]+:[^\r\n;]+;)+)?(\.(?:[^\r\n\s]+)\s+)?/mg; }; diff --git a/core/modules/parsers/wikiparser/rules/transcludeblock.js b/core/modules/parsers/wikiparser/rules/transcludeblock.js index 525113d5d7..5c5367cb49 100644 --- a/core/modules/parsers/wikiparser/rules/transcludeblock.js +++ b/core/modules/parsers/wikiparser/rules/transcludeblock.js @@ -23,6 +23,27 @@ exports.init = function(parser) { this.matchRegExp = /\{\{([^\{\}\|]*)(?:\|\|([^\|\{\}]+))?(?:\|([^\{\}]+))?\}\}(?:\r?\n|$)/mg; }; +/* +Reject the match if we don't have a template or text reference +*/ +exports.findNextMatch = function(startPos) { + this.matchRegExp.lastIndex = startPos; + this.match = this.matchRegExp.exec(this.parser.source); + if(this.match) { + var template = $tw.utils.trim(this.match[2]), + textRef = $tw.utils.trim(this.match[1]); + // Bail if we don't have a template or text reference + if(!template && !textRef) { + return undefined; + } else { + return this.match.index; + } + } else { + return undefined; + } + return this.match ? this.match.index : undefined; +}; + exports.parse = function() { // Move past the match this.parser.pos = this.matchRegExp.lastIndex; diff --git a/core/modules/parsers/wikiparser/rules/transcludeinline.js b/core/modules/parsers/wikiparser/rules/transcludeinline.js index 4ae58e6175..57def3e33e 100644 --- a/core/modules/parsers/wikiparser/rules/transcludeinline.js +++ b/core/modules/parsers/wikiparser/rules/transcludeinline.js @@ -23,6 +23,27 @@ exports.init = function(parser) { this.matchRegExp = /\{\{([^\{\}\|]*)(?:\|\|([^\|\{\}]+))?(?:\|([^\{\}]+))?\}\}/mg; }; +/* +Reject the match if we don't have a template or text reference +*/ +exports.findNextMatch = function(startPos) { + this.matchRegExp.lastIndex = startPos; + this.match = this.matchRegExp.exec(this.parser.source); + if(this.match) { + var template = $tw.utils.trim(this.match[2]), + textRef = $tw.utils.trim(this.match[1]); + // Bail if we don't have a template or text reference + if(!template && !textRef) { + return undefined; + } else { + return this.match.index; + } + } else { + return undefined; + } + return this.match ? this.match.index : undefined; +}; + exports.parse = function() { // Move past the match this.parser.pos = this.matchRegExp.lastIndex; diff --git a/core/modules/parsers/wikiparser/rules/typedblock.js b/core/modules/parsers/wikiparser/rules/typedblock.js index 03fdc8e10c..7e988a9962 100644 --- a/core/modules/parsers/wikiparser/rules/typedblock.js +++ b/core/modules/parsers/wikiparser/rules/typedblock.js @@ -60,22 +60,37 @@ exports.parse = function() { var parser = this.parser.wiki.parseText(parseType,text,{defaultType: "text/plain"}); // If there's no render type, just return the parse tree if(!renderType) { - return parser.tree; + return [{ + type: "void", + children: $tw.utils.isArray(parser.tree) ? parser.tree : [parser.tree], + parseType: parseType, + renderType: renderType, + text: text, + start: start, + end: this.parser.pos + }]; } else { // Otherwise, render to the rendertype and return in a <PRE> tag var widgetNode = this.parser.wiki.makeWidget(parser), container = $tw.fakeDocument.createElement("div"); widgetNode.render(container,null); - text = renderType === "text/html" ? container.innerHTML : container.textContent; + var renderResult = renderType === "text/html" ? container.innerHTML : container.textContent; + // Use void node to carry important info for typedblock return [{ - type: "element", - tag: "pre", + type: "void", children: [{ - type: "text", - text: text, - start: start, - end: this.parser.pos - }] + type: "element", + tag: "pre", + children: [{ + type: "text", + text: renderResult, + }] + }], + parseType: parseType, + renderType: renderType, + text: text, + start: start, + end: this.parser.pos }]; } }; diff --git a/core/modules/parsers/wikiparser/wikiparser.js b/core/modules/parsers/wikiparser/wikiparser.js index 3d1379fd47..ab4bab11ea 100644 --- a/core/modules/parsers/wikiparser/wikiparser.js +++ b/core/modules/parsers/wikiparser/wikiparser.js @@ -215,8 +215,8 @@ WikiParser.prototype.parsePragmas = function() { var subTree = nextMatch.rule.parse(); if(subTree.length > 0) { // Set the start and end positions of the pragma rule if - if (subTree[0].start === undefined) subTree[0].start = start; - if (subTree[subTree.length - 1].end === undefined) subTree[subTree.length - 1].end = this.pos; + if(subTree[0].start === undefined) subTree[0].start = start; + if(subTree[subTree.length - 1].end === undefined) subTree[subTree.length - 1].end = this.pos; $tw.utils.each(subTree, function (node) { node.rule = nextMatch.rule.name; }); // Quick hack; we only cope with a single parse tree node being returned, which is true at the moment currentTreeBranch.push.apply(currentTreeBranch,subTree); @@ -245,9 +245,9 @@ WikiParser.prototype.parseBlock = function(terminatorRegExpString) { var start = this.pos; var subTree = nextMatch.rule.parse(); // Set the start and end positions of the first and last blocks if they're not already set - if (subTree.length > 0) { - if (subTree[0].start === undefined) subTree[0].start = start; - if (subTree[subTree.length - 1].end === undefined) subTree[subTree.length - 1].end = this.pos; + if(subTree.length > 0) { + if(subTree[0].start === undefined) subTree[0].start = start; + if(subTree[subTree.length - 1].end === undefined) subTree[subTree.length - 1].end = this.pos; } $tw.utils.each(subTree, function (node) { node.rule = nextMatch.rule.name; }); return subTree; @@ -256,7 +256,7 @@ WikiParser.prototype.parseBlock = function(terminatorRegExpString) { var start = this.pos; var children = this.parseInlineRun(terminatorRegExp); var end = this.pos; - return [{type: "element", tag: "p", children: children, start: start, end: end }]; + return [{type: "element", tag: "p", children: children, start: start, end: end, rule: "parseblock" }]; }; /* @@ -350,10 +350,10 @@ WikiParser.prototype.parseInlineRunUnterminated = function(options) { var start = this.pos; var subTree = nextMatch.rule.parse(); // Set the start and end positions of the first and last child if they're not already set - if (subTree.length > 0) { + if(subTree.length > 0) { // Set the start and end positions of the first and last child if they're not already set - if (subTree[0].start === undefined) subTree[0].start = start; - if (subTree[subTree.length - 1].end === undefined) subTree[subTree.length - 1].end = this.pos; + if(subTree[0].start === undefined) subTree[0].start = start; + if(subTree[subTree.length - 1].end === undefined) subTree[subTree.length - 1].end = this.pos; } $tw.utils.each(subTree, function (node) { node.rule = nextMatch.rule.name; }); tree.push.apply(tree,subTree); @@ -410,9 +410,9 @@ WikiParser.prototype.parseInlineRunTerminatedExtended = function(terminatorRegEx var start = this.pos; var subTree = inlineRuleMatch.rule.parse(); // Set the start and end positions of the first and last child if they're not already set - if (subTree.length > 0) { - if (subTree[0].start === undefined) subTree[0].start = start; - if (subTree[subTree.length - 1].end === undefined) subTree[subTree.length - 1].end = this.pos; + if(subTree.length > 0) { + if(subTree[0].start === undefined) subTree[0].start = start; + if(subTree[subTree.length - 1].end === undefined) subTree[subTree.length - 1].end = this.pos; } $tw.utils.each(subTree, function (node) { node.rule = inlineRuleMatch.rule.name; }); tree.push.apply(tree,subTree); diff --git a/core/modules/savers/download.js b/core/modules/savers/download.js index 9d046d24ac..156dea1444 100644 --- a/core/modules/savers/download.js +++ b/core/modules/savers/download.js @@ -35,7 +35,9 @@ DownloadSaver.prototype.save = function(text,method,callback,options) { } // Set up the link var link = document.createElement("a"); - if(Blob !== undefined) { + // We prefer Blobs if they're available, unless we're dealing with a tiddler type declaring itself full of base64 encoded content. + // Then we use data urls, because browsers will know to decode the stream and download the actual binary file as intended. + if(Blob !== undefined && !type.includes(";base64")) { var blob = new Blob([text], {type: type}); link.setAttribute("href", URL.createObjectURL(blob)); } else { diff --git a/core/modules/savers/postmessage.js b/core/modules/savers/postmessage.js new file mode 100644 index 0000000000..6483edc435 --- /dev/null +++ b/core/modules/savers/postmessage.js @@ -0,0 +1,66 @@ +/*\ +title: $:/core/modules/savers/postmessage.js +type: application/javascript +module-type: saver + +Handles saving changes via window.postMessage() to the window.parent + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +/* +Select the appropriate saver module and set it up +*/ +var PostMessageSaver = function(wiki) { + this.publisher = new $tw.utils.BrowserMessagingPublisher({type: "SAVE"}); +}; + +PostMessageSaver.prototype.save = function(text,method,callback,options) { + // Fail if the publisher hasn't been fully initialised + if(!this.publisher.canSend()) { + return false; + } + // Send the save request + this.publisher.send({ + verb: "SAVE", + body: text + },function(err) { + if(err) { + callback("PostMessageSaver Error: " + err); + } else { + callback(null); + } + }); + // Indicate that we handled the save + return true; +}; + +/* +Information about this saver +*/ +PostMessageSaver.prototype.info = { + name: "postmessage", + capabilities: ["save", "autosave"], + priority: 100 +}; + +/* +Static method that returns true if this saver is capable of working +*/ +exports.canSave = function(wiki) { + // Provisionally say that we can save + return true; +}; + +/* +Create an instance of this saver +*/ +exports.create = function(wiki) { + return new PostMessageSaver(wiki); +}; + +})(); diff --git a/core/modules/savers/upload.js b/core/modules/savers/upload.js index 7f17d77bde..35e05286e8 100644 --- a/core/modules/savers/upload.js +++ b/core/modules/savers/upload.js @@ -44,7 +44,7 @@ UploadSaver.prototype.save = function(text,method,callback) { } // Construct the url if not provided if(!url) { - url = "http://" + username + ".tiddlyspot.com/store.cgi"; + url = "http://" + username + ".tiddlyhost.com/"; } // Assemble the header var boundary = "---------------------------" + "AaB03x"; diff --git a/core/modules/server/routes/get-file.js b/core/modules/server/routes/get-file.js deleted file mode 100644 index 39681de4c3..0000000000 --- a/core/modules/server/routes/get-file.js +++ /dev/null @@ -1,42 +0,0 @@ -/*\ -title: $:/core/modules/server/routes/get-file.js -type: application/javascript -module-type: route - -GET /files/:filepath - -\*/ -"use strict"; - -exports.method = "GET"; - -exports.path = /^\/files\/(.+)$/; - -exports.handler = function(request,response,state) { - var path = require("path"), - fs = require("fs"), - util = require("util"), - suppliedFilename = $tw.utils.decodeURIComponentSafe(state.params[0]), - baseFilename = path.resolve(state.boot.wikiPath,"files"), - filename = path.resolve(baseFilename,suppliedFilename), - extension = path.extname(filename); - // Check that the filename is inside the wiki files folder - if(path.relative(baseFilename,filename).indexOf("..") !== 0) { - // Send the file - fs.readFile(filename,function(err,content) { - var status,content,type = "text/plain"; - if(err) { - console.log("Error accessing file " + filename + ": " + err.toString()); - status = 404; - content = "File '" + suppliedFilename + "' not found"; - } else { - status = 200; - content = content; - type = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : "application/octet-stream"); - } - state.sendResponse(status,{"Content-Type": type},content); - }); - } else { - state.sendResponse(404,{"Content-Type": "text/plain"},"File '" + suppliedFilename + "' not found"); - } -}; diff --git a/core/modules/startup/eventbus.js b/core/modules/startup/eventbus.js new file mode 100644 index 0000000000..0ad69fb27f --- /dev/null +++ b/core/modules/startup/eventbus.js @@ -0,0 +1,46 @@ +/*\ +title: $:/core/modules/startup/eventbus.js +type: application/javascript +module-type: startup + +Event bus for cross module communication +\*/ + +exports.name = "eventbus"; +exports.platforms = ["browser"]; +exports.before = ["windows"]; +exports.synchronous = true; + +$tw.eventBus = { + listenersMap: new Map(), + + on(event,handler) { + if(!this.listenersMap.has(event)) { + this.listenersMap.set(event,new Set()); + } + const listeners = this.listenersMap.get(event); + listeners.add(handler); + }, + + off(event,handler) { + const listeners = this.listenersMap.get(event); + if(listeners) { + listeners.delete(handler); + } + }, + + once(event,handler) { + const wrapper = (...args) => { + handler(...args); + this.off(event, wrapper); + }; + this.on(event, wrapper); + }, + + emit(event,data) { + const listeners = this.listenersMap.get(event); + if(listeners) { + listeners.forEach(fn => fn(data)); + } + } +}; diff --git a/core/modules/startup/favicon.js b/core/modules/startup/favicon.js index d1a7c56770..895b46f6c2 100644 --- a/core/modules/startup/favicon.js +++ b/core/modules/startup/favicon.js @@ -19,6 +19,16 @@ exports.synchronous = true; var FAVICON_TITLE = "$:/favicon.ico"; exports.startup = function() { + var setFavicon = function() { + var tiddler = $tw.wiki.getTiddler(FAVICON_TITLE); + if(tiddler) { + var faviconLink = document.getElementById("faviconLink"), + dataURI = $tw.utils.makeDataUri(tiddler.fields.text,tiddler.fields.type,tiddler.fields._canonical_uri); + faviconLink.setAttribute("href",dataURI); + $tw.faviconPublisher.send({verb: "FAVICON",body: dataURI}); + } + } + $tw.faviconPublisher = new $tw.utils.BrowserMessagingPublisher({type: "FAVICON", onsubscribe: setFavicon}); // Set up the favicon setFavicon(); // Reset the favicon when the tiddler changes @@ -28,11 +38,3 @@ exports.startup = function() { } }); }; - -function setFavicon() { - var tiddler = $tw.wiki.getTiddler(FAVICON_TITLE); - if(tiddler) { - var faviconLink = document.getElementById("faviconLink"); - faviconLink.setAttribute("href",$tw.utils.makeDataUri(tiddler.fields.text,tiddler.fields.type,tiddler.fields._canonical_uri)); - } -} diff --git a/core/modules/startup/info.js b/core/modules/startup/info.js index a5767ed341..dc65557c7d 100644 --- a/core/modules/startup/info.js +++ b/core/modules/startup/info.js @@ -19,11 +19,17 @@ var TITLE_INFO_PLUGIN = "$:/temp/info-plugin"; exports.startup = function() { // Function to bake the info plugin with new tiddlers - var updateInfoPlugin = function(tiddlerFieldsArray) { + // additions: array of tiddler field objects + // removals: array of titles to remove + var updateInfoPlugin = function(additions = [], removals = []) { // Get the existing tiddlers var json = $tw.wiki.getTiddlerData(TITLE_INFO_PLUGIN,{tiddlers: {}}); - // Add the new ones - $tw.utils.each(tiddlerFieldsArray,function(fields) { + $tw.utils.each(removals,function(title) { + if(json.tiddlers[title]) { + delete json.tiddlers[title]; + } + }); + $tw.utils.each(additions,function(fields) { if(fields && fields.title) { json.tiddlers[fields.title] = fields; } @@ -47,7 +53,7 @@ exports.startup = function() { } }); updateInfoPlugin(tiddlerFieldsArray); - var changes = $tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]); + $tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]); $tw.wiki.registerPluginTiddlers("info",[TITLE_INFO_PLUGIN]); $tw.wiki.unpackPluginTiddlers(); }; diff --git a/core/modules/startup/load-modules.js b/core/modules/startup/load-modules.js index cf0a8232dd..c94335fb7e 100644 --- a/core/modules/startup/load-modules.js +++ b/core/modules/startup/load-modules.js @@ -31,5 +31,7 @@ exports.startup = function() { $tw.modules.applyMethods("tiddlerdeserializer",$tw.Wiki.tiddlerDeserializerModules); $tw.macros = $tw.modules.getModulesByTypeAsHashmap("macro"); $tw.wiki.initParsers(); - $tw.Commander.initCommands(); + if($tw.node) { + $tw.Commander.initCommands(); + } }; diff --git a/core/modules/startup/render.js b/core/modules/startup/render.js index 13cbb03564..43ef48207a 100644 --- a/core/modules/startup/render.js +++ b/core/modules/startup/render.js @@ -33,10 +33,15 @@ exports.startup = function() { }); $tw.titleContainer = $tw.fakeDocument.createElement("div"); $tw.titleWidgetNode.render($tw.titleContainer,null); - document.title = $tw.titleContainer.textContent; + var publishTitle = function() { + $tw.titlePublisher.send({verb: "PAGETITLE",body: document.title}); + document.title = $tw.titleContainer.textContent; + }; + $tw.titlePublisher = new $tw.utils.BrowserMessagingPublisher({type: "PAGETITLE", onsubscribe: publishTitle}); + publishTitle(); $tw.wiki.addEventListener("change",function(changes) { if($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) { - document.title = $tw.titleContainer.textContent; + publishTitle(); } }); // Set up the styles diff --git a/core/modules/startup/rootwidget.js b/core/modules/startup/rootwidget.js index b30e03e7b8..30a6c960c8 100644 --- a/core/modules/startup/rootwidget.js +++ b/core/modules/startup/rootwidget.js @@ -74,9 +74,8 @@ exports.startup = function() { $tw.rootWidget.addEventListener("tm-copy-to-clipboard",function(event) { $tw.utils.copyToClipboard(event.param,{ successNotification: event.paramObject && event.paramObject.successNotification, - failureNotification: event.paramObject && event.paramObject.failureNotification, - plainText: event.paramObject && event.paramObject.plainText - },event.paramObject && event.paramObject.type); + failureNotification: event.paramObject && event.paramObject.failureNotification + }); }); // Install the tm-focus-selector message $tw.rootWidget.addEventListener("tm-focus-selector",function(event) { diff --git a/core/modules/startup/windows.js b/core/modules/startup/windows.js index 8506a9866a..39a2f59d62 100644 --- a/core/modules/startup/windows.js +++ b/core/modules/startup/windows.js @@ -56,9 +56,11 @@ exports.startup = function() { srcDocument.write("<!DOCTYPE html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>"); srcDocument.close(); srcDocument.title = windowTitle; + $tw.eventBus.emit("window:opened",{windowID, window: srcWindow}); srcWindow.addEventListener("beforeunload",function(event) { delete $tw.windows[windowID]; $tw.wiki.removeEventListener("change",refreshHandler); + $tw.eventBus.emit("window:closed",{windowID}); },false); // Set up the styles var styleWidgetNode = $tw.wiki.makeTranscludeWidget("$:/core/ui/PageStylesheet",{ diff --git a/core/modules/storyviews/classic.js b/core/modules/storyviews/classic.js index c1f1c0e0f1..341c512214 100644 --- a/core/modules/storyviews/classic.js +++ b/core/modules/storyviews/classic.js @@ -47,16 +47,16 @@ ClassicStoryView.prototype.insert = function(widget) { // Reset the margin once the transition is over setTimeout(function() { $tw.utils.setStyle(targetElement,[ - {transition: "none"}, {marginBottom: ""} ]); + $tw.utils.removeStyle(targetElement, "transition"); },duration); // Set up the initial position of the element $tw.utils.setStyle(targetElement,[ - {transition: "none"}, {marginBottom: (-currHeight) + "px"}, {opacity: "0.0"} ]); + $tw.utils.removeStyle(targetElement, "transition"); $tw.utils.forceLayout(targetElement); // Transition to the final position $tw.utils.setStyle(targetElement,[ @@ -64,7 +64,7 @@ ClassicStoryView.prototype.insert = function(widget) { "margin-bottom " + duration + "ms " + easing}, {marginBottom: currMarginBottom + "px"}, {opacity: "1.0"} - ]); + ]); } }; @@ -94,11 +94,9 @@ ClassicStoryView.prototype.remove = function(widget) { setTimeout(removeElement,duration); // Animate the closure $tw.utils.setStyle(targetElement,[ - {transition: "none"}, - {transform: "translateX(0px)"}, {marginBottom: currMarginBottom + "px"}, - {opacity: "1.0"} ]); + $tw.utils.removeStyles(targetElement, ["transition", "transform", "opacity"]); $tw.utils.forceLayout(targetElement); $tw.utils.setStyle(targetElement,[ {transition: $tw.utils.roundTripPropertyName("transform") + " " + duration + "ms " + easing + ", " + @@ -113,4 +111,4 @@ ClassicStoryView.prototype.remove = function(widget) { } }; -exports.classic = ClassicStoryView; +exports.classic = ClassicStoryView; \ No newline at end of file diff --git a/core/modules/storyviews/pop.js b/core/modules/storyviews/pop.js index cbf649b184..96bc6819ef 100644 --- a/core/modules/storyviews/pop.js +++ b/core/modules/storyviews/pop.js @@ -37,10 +37,7 @@ PopStoryView.prototype.insert = function(widget) { } // Reset once the transition is over setTimeout(function() { - $tw.utils.setStyle(targetElement,[ - {transition: "none"}, - {transform: "none"} - ]); + $tw.utils.removeStyles(targetElement, ["transition", "transform"]); $tw.utils.setStyle(widget.document.body,[ {"overflow-x": ""} ]); @@ -51,10 +48,10 @@ PopStoryView.prototype.insert = function(widget) { ]); // Set up the initial position of the element $tw.utils.setStyle(targetElement,[ - {transition: "none"}, {transform: "scale(2)"}, {opacity: "0.0"} ]); + $tw.utils.removeStyle(targetElement, "transition"); $tw.utils.forceLayout(targetElement); // Transition to the final position $tw.utils.setStyle(targetElement,[ @@ -63,6 +60,9 @@ PopStoryView.prototype.insert = function(widget) { {transform: "scale(1)"}, {opacity: "1.0"} ]); + setTimeout(function() { + $tw.utils.removeStyles(targetElement, ["transition", "transform", "opactity"]); + }, duration) }; PopStoryView.prototype.remove = function(widget) { @@ -81,11 +81,7 @@ PopStoryView.prototype.remove = function(widget) { // Remove the element at the end of the transition setTimeout(removeElement,duration); // Animate the closure - $tw.utils.setStyle(targetElement,[ - {transition: "none"}, - {transform: "scale(1)"}, - {opacity: "1.0"} - ]); + $tw.utils.removeStyles(targetElement, ["transition", "transform", "opacity"]); $tw.utils.forceLayout(targetElement); $tw.utils.setStyle(targetElement,[ {transition: $tw.utils.roundTripPropertyName("transform") + " " + duration + "ms ease-in-out, " + @@ -95,4 +91,4 @@ PopStoryView.prototype.remove = function(widget) { ]); }; -exports.pop = PopStoryView; +exports.pop = PopStoryView; \ No newline at end of file diff --git a/core/modules/storyviews/zoomin.js b/core/modules/storyviews/zoomin.js index e5c5b88a80..4ddba71742 100644 --- a/core/modules/storyviews/zoomin.js +++ b/core/modules/storyviews/zoomin.js @@ -96,6 +96,9 @@ ZoominListView.prototype.navigateTo = function(historyInfo) { {transform: "translateX(0px) translateY(0px) scale(1)"}, {zIndex: "500"}, ]); + setTimeout(function() { + $tw.utils.removeStyles(targetElement, ["transition", "opacity", "transform", "zIndex"]); + }, duration); // Transform the previous tiddler out of the way and then hide it if(prevCurrentTiddler && prevCurrentTiddler !== targetElement) { scale = zoomBounds.width / sourceBounds.width; @@ -207,6 +210,9 @@ ZoominListView.prototype.remove = function(widget) { {opacity: "0"}, {zIndex: "0"} ]); + setTimeout(function() { + $tw.utils.removeStyles(toWidgetDomNode, ["transformOrigin", "transform", "transition", "opacity", "zIndex"]); + }, duration); setTimeout(removeElement,duration); // Now the tiddler we're going back to if(toWidgetDomNode) { @@ -222,4 +228,4 @@ ZoominListView.prototype.logTextNodeRoot = function(node) { this.textNodeLogger.log($tw.language.getString("Error/ZoominTextNode") + " " + node.textContent); }; -exports.zoomin = ZoominListView; +exports.zoomin = ZoominListView; \ No newline at end of file diff --git a/core/modules/utils/base64-utf8/base64-utf8.module.js b/core/modules/utils/base64-utf8/base64-utf8.module.js deleted file mode 100644 index 8bd4e272de..0000000000 --- a/core/modules/utils/base64-utf8/base64-utf8.module.js +++ /dev/null @@ -1,142 +0,0 @@ -// From https://gist.github.com/Nijikokun/5192472 -// -// UTF8 Module -// -// Cleaner and modularized utf-8 encoding and decoding library for javascript. -// -// copyright: MIT -// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com -(function (name, definition, context, dependencies) { - if (typeof context['module'] !== 'undefined' && context['module']['exports']) { if (dependencies && context['require']) { for (var i = 0; i < dependencies.length; i++) context[dependencies[i]] = context['require'](dependencies[i]); } context['module']['exports'] = definition.apply(context); } - else if (typeof context['define'] !== 'undefined' && context['define'] === 'function' && context['define']['amd']) { define(name, (dependencies || []), definition); } - else { context[name] = definition.apply(context); } -})('utf8', function () { - return { - encode: function (string) { - if (typeof string !== 'string') return string; - else string = string.replace(/\r\n/g, "\n"); - var output = "", i = 0, charCode; - - for (i; i < string.length; i++) { - charCode = string.charCodeAt(i); - - if (charCode < 128) { - output += String.fromCharCode(charCode); - } else if ((charCode > 127) && (charCode < 2048)) { - output += String.fromCharCode((charCode >> 6) | 192); - output += String.fromCharCode((charCode & 63) | 128); - } else if ((charCode > 55295) && (charCode < 57344) && string.length > i+1) { - // Surrogate pair - var hiSurrogate = charCode; - var loSurrogate = string.charCodeAt(i+1); - i++; // Skip the low surrogate on the next loop pass - var codePoint = (((hiSurrogate - 55296) << 10) | (loSurrogate - 56320)) + 65536; - output += String.fromCharCode((codePoint >> 18) | 240); - output += String.fromCharCode(((codePoint >> 12) & 63) | 128); - output += String.fromCharCode(((codePoint >> 6) & 63) | 128); - output += String.fromCharCode((codePoint & 63) | 128); - } else { - // Not a surrogate pair, or a dangling surrogate without its partner that we'll just encode as-is - output += String.fromCharCode((charCode >> 12) | 224); - output += String.fromCharCode(((charCode >> 6) & 63) | 128); - output += String.fromCharCode((charCode & 63) | 128); - } - } - - return output; - }, - - decode: function (string) { - if (typeof string !== 'string') return string; - var output = "", i = 0, charCode = 0; - - while (i < string.length) { - charCode = string.charCodeAt(i); - - if (charCode < 128) { - output += String.fromCharCode(charCode), - i++; - } else if ((charCode > 191) && (charCode < 224)) { - output += String.fromCharCode(((charCode & 31) << 6) | (string.charCodeAt(i + 1) & 63)); - i += 2; - } else if ((charCode > 223) && (charCode < 240)) { - output += String.fromCharCode(((charCode & 15) << 12) | ((string.charCodeAt(i + 1) & 63) << 6) | (string.charCodeAt(i + 2) & 63)); - i += 3; - } else { - var codePoint = ((charCode & 7) << 18) | ((string.charCodeAt(i + 1) & 63) << 12) | ((string.charCodeAt(i + 2) & 63) << 6) | (string.charCodeAt(i + 3) & 63); - // output += String.fromCodePoint(codePoint); // Can't do this because Internet Explorer doesn't have String.fromCodePoint - output += String.fromCharCode(((codePoint - 65536) >> 10) + 55296) + String.fromCharCode(((codePoint - 65536) & 1023) + 56320); // So we do this instead - i += 4; - } - } - - return output; - } - }; -}, this); - -// Base64 Module -// -// Cleaner, modularized and properly scoped base64 encoding and decoding module for strings. -// -// copyright: MIT -// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com -(function (name, definition, context, dependencies) { - if (typeof context['module'] !== 'undefined' && context['module']['exports']) { if (dependencies && context['require']) { for (var i = 0; i < dependencies.length; i++) context[dependencies[i]] = context['require'](dependencies[i]); } context['module']['exports'] = definition.apply(context); } - else if (typeof context['define'] !== 'undefined' && context['define'] === 'function' && context['define']['amd']) { define(name, (dependencies || []), definition); } - else { context[name] = definition.apply(context); } -})('base64', function (utf8) { - var $this = this; - var $utf8 = utf8 || this.utf8; - var map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - - return { - encode: function (input) { - if (typeof $utf8 === 'undefined') throw { error: "MissingMethod", message: "UTF8 Module is missing." }; - if (typeof input !== 'string') return input; - else input = $utf8.encode(input); - var output = "", a, b, c, d, e, f, g, i = 0; - - while (i < input.length) { - a = input.charCodeAt(i++); - b = input.charCodeAt(i++); - c = input.charCodeAt(i++); - d = a >> 2; - e = ((a & 3) << 4) | (b >> 4); - f = ((b & 15) << 2) | (c >> 6); - g = c & 63; - - if (isNaN(b)) f = g = 64; - else if (isNaN(c)) g = 64; - - output += map.charAt(d) + map.charAt(e) + map.charAt(f) + map.charAt(g); - } - - return output; - }, - - decode: function (input) { - if (typeof $utf8 === 'undefined') throw { error: "MissingMethod", message: "UTF8 Module is missing." }; - if (typeof input !== 'string') return input; - else input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - var output = "", a, b, c, d, e, f, g, i = 0; - - while (i < input.length) { - d = map.indexOf(input.charAt(i++)); - e = map.indexOf(input.charAt(i++)); - f = map.indexOf(input.charAt(i++)); - g = map.indexOf(input.charAt(i++)); - - a = (d << 2) | (e >> 4); - b = ((e & 15) << 4) | (f >> 2); - c = ((f & 3) << 6) | g; - - output += String.fromCharCode(a); - if (f != 64) output += String.fromCharCode(b); - if (g != 64) output += String.fromCharCode(c); - } - - return $utf8.decode(output); - } - } -}, this, [ "utf8" ]); \ No newline at end of file diff --git a/core/modules/utils/base64-utf8/base64-utf8.module.min.js b/core/modules/utils/base64-utf8/base64-utf8.module.min.js deleted file mode 100644 index f2f808004a..0000000000 --- a/core/modules/utils/base64-utf8/base64-utf8.module.min.js +++ /dev/null @@ -1,9 +0,0 @@ -// From https://gist.github.com/Nijikokun/5192472 -// -// UTF8 Module -// -// Cleaner and modularized utf-8 encoding and decoding library for javascript. -// -// copyright: MIT -// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com -!function(r,e,o,t){void 0!==o.module&&o.module.exports?o.module.exports=e.apply(o):void 0!==o.define&&"function"===o.define&&o.define.amd?define("utf8",[],e):o.utf8=e.apply(o)}(0,function(){return{encode:function(r){if("string"!=typeof r)return r;r=r.replace(/\r\n/g,"\n");for(var e,o="",t=0;t<r.length;t++)if((e=r.charCodeAt(t))<128)o+=String.fromCharCode(e);else if(e>127&&e<2048)o+=String.fromCharCode(e>>6|192),o+=String.fromCharCode(63&e|128);else if(e>55295&&e<57344&&r.length>t+1){var i=e,n=r.charCodeAt(t+1);t++;var d=65536+(i-55296<<10|n-56320);o+=String.fromCharCode(d>>18|240),o+=String.fromCharCode(d>>12&63|128),o+=String.fromCharCode(d>>6&63|128),o+=String.fromCharCode(63&d|128)}else o+=String.fromCharCode(e>>12|224),o+=String.fromCharCode(e>>6&63|128),o+=String.fromCharCode(63&e|128);return o},decode:function(r){if("string"!=typeof r)return r;for(var e="",o=0,t=0;o<r.length;)if((t=r.charCodeAt(o))<128)e+=String.fromCharCode(t),o++;else if(t>191&&t<224)e+=String.fromCharCode((31&t)<<6|63&r.charCodeAt(o+1)),o+=2;else if(t>223&&t<240)e+=String.fromCharCode((15&t)<<12|(63&r.charCodeAt(o+1))<<6|63&r.charCodeAt(o+2)),o+=3;else{var i=(7&t)<<18|(63&r.charCodeAt(o+1))<<12|(63&r.charCodeAt(o+2))<<6|63&r.charCodeAt(o+3);e+=String.fromCharCode(55296+(i-65536>>10))+String.fromCharCode(56320+(i-65536&1023)),o+=4}return e}}},this),function(r,e,o,t){if(void 0!==o.module&&o.module.exports){if(t&&o.require)for(var i=0;i<t.length;i++)o[t[i]]=o.require(t[i]);o.module.exports=e.apply(o)}else void 0!==o.define&&"function"===o.define&&o.define.amd?define("base64",t||[],e):o.base64=e.apply(o)}(0,function(r){var e=r||this.utf8,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(r){if(void 0===e)throw{error:"MissingMethod",message:"UTF8 Module is missing."};if("string"!=typeof r)return r;r=e.encode(r);for(var t,i,n,d,f,a,h,C="",c=0;c<r.length;)d=(t=r.charCodeAt(c++))>>2,f=(3&t)<<4|(i=r.charCodeAt(c++))>>4,a=(15&i)<<2|(n=r.charCodeAt(c++))>>6,h=63&n,isNaN(i)?a=h=64:isNaN(n)&&(h=64),C+=o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return C},decode:function(r){if(void 0===e)throw{error:"MissingMethod",message:"UTF8 Module is missing."};if("string"!=typeof r)return r;r=r.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var t,i,n,d,f,a,h="",C=0;C<r.length;)t=o.indexOf(r.charAt(C++))<<2|(d=o.indexOf(r.charAt(C++)))>>4,i=(15&d)<<4|(f=o.indexOf(r.charAt(C++)))>>2,n=(3&f)<<6|(a=o.indexOf(r.charAt(C++))),h+=String.fromCharCode(t),64!=f&&(h+=String.fromCharCode(i)),64!=a&&(h+=String.fromCharCode(n));return e.decode(h)}}},this,["utf8"]); \ No newline at end of file diff --git a/core/modules/utils/base64-utf8/tiddlywiki.files b/core/modules/utils/base64-utf8/tiddlywiki.files deleted file mode 100644 index b12e7dfb92..0000000000 --- a/core/modules/utils/base64-utf8/tiddlywiki.files +++ /dev/null @@ -1,14 +0,0 @@ -{ - "tiddlers": [ - { - "file": "base64-utf8.module.min.js", - "fields": { - "type": "application/javascript", - "title": "$:/core/modules/utils/base64-utf8/base64-utf8.module.js", - "module-type": "library" - }, - "prefix": "(function(){", - "suffix": "}).call(exports);" - } - ] -} diff --git a/core/modules/utils/dom/browser.js b/core/modules/utils/dom/browser.js index 7501d4154c..11905a1fec 100644 --- a/core/modules/utils/dom/browser.js +++ b/core/modules/utils/dom/browser.js @@ -24,6 +24,26 @@ exports.setStyle = function(element,styles) { } }; +/* +Remove style properties of an element + element: dom node + styleProperties: ordered array of string property names +*/ +exports.removeStyles = function(element, styleProperties) { + for (var i=0; i<styleProperties.length; i++) { + element.style.removeProperty($tw.utils.convertStyleNameToPropertyName(styleProperties[i])); + } +} + +/* +Remove single style property of an element + element: dom node + styleProperty: string property name +*/ +exports.removeStyle = function(element, styleProperty) { + $tw.utils.removeStyles(element, [styleProperty]) +} + /* Converts a standard CSS property name into the local browser-specific equivalent. For example: "background-color" --> "backgroundColor" diff --git a/core/modules/utils/dom/dom.js b/core/modules/utils/dom/dom.js index a5b14ff784..849c5a88b6 100644 --- a/core/modules/utils/dom/dom.js +++ b/core/modules/utils/dom/dom.js @@ -265,10 +265,9 @@ exports.copyStyles = function(srcDomNode,dstDomNode) { /* Copy plain text to the clipboard on browsers that support it */ -exports.copyToClipboard = function(text,options,type) { - var text = text || ""; - var options = options || {}; - var type = type || "text/plain"; +exports.copyToClipboard = function(text,options) { + options = options || {}; + text = text || ""; var textArea = document.createElement("textarea"); textArea.style.position = "fixed"; textArea.style.top = 0; @@ -281,16 +280,10 @@ exports.copyToClipboard = function(text,options,type) { textArea.style.outline = "none"; textArea.style.boxShadow = "none"; textArea.style.background = "transparent"; + textArea.value = text; document.body.appendChild(textArea); textArea.select(); textArea.setSelectionRange(0,text.length); - textArea.addEventListener("copy",function(event) { - event.preventDefault(); - if (options.plainText) { - event.clipboardData.setData("text/plain",options.plainText); - } - event.clipboardData.setData(type,text); - }); var succeeded = false; try { succeeded = document.execCommand("copy"); diff --git a/core/modules/utils/dom/modal.js b/core/modules/utils/dom/modal.js index cd827c3be8..a7b538ec3a 100644 --- a/core/modules/utils/dom/modal.js +++ b/core/modules/utils/dom/modal.js @@ -143,6 +143,7 @@ Modal.prototype.display = function(title,options) { link.setAttribute("href",tiddler.fields.help); link.setAttribute("target","_blank"); link.setAttribute("rel","noopener noreferrer"); + link.setAttribute("class","tc-tiddlylink-external"); link.appendChild(this.srcDocument.createTextNode("Help")); modalFooterHelp.appendChild(link); modalFooterHelp.style.float = "left"; @@ -209,7 +210,7 @@ Modal.prototype.display = function(title,options) { bodyWidgetNode.addEventListener("tm-close-tiddler",closeHandler,false); footerWidgetNode.addEventListener("tm-close-tiddler",closeHandler,false); // Whether to close the modal dialog when the mask (area outside the modal) is clicked - if(tiddler.fields && (tiddler.fields["mask-closable"] === "yes" || tiddler.fields["mask-closable"] === "true")) { + if(tiddler.fields && (tiddler.fields["mask-closable"] === "yes" || tiddler.fields["mask-closable"] === "true" || tiddler.fields["mask-closable"] === "" || "mask-closable" in tiddler.fields === false)) { modalBackdrop.addEventListener("click",closeHandler,false); } // Set the initial styles for the message diff --git a/core/modules/utils/messaging.js b/core/modules/utils/messaging.js new file mode 100644 index 0000000000..c7467f8b9d --- /dev/null +++ b/core/modules/utils/messaging.js @@ -0,0 +1,126 @@ +/*\ +title: $:/core/modules/utils/messaging.js +type: application/javascript +module-type: utils-browser + +Messaging utilities for use with window.postMessage() etc. + +This module intentionally has no dependencies so that it can be included in non-TiddlyWiki projects + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +var RESPONSE_TIMEOUT = 2 * 1000; + +/* +Class to handle subscribing to publishers + +target: Target window (eg iframe.contentWindow) +type: String indicating type of item for which subscriptions are being provided (eg "SAVING") +onsubscribe: Function to be invoked with err parameter when the subscription is established, or there is a timeout +onmessage: Function to be invoked when a new message arrives, invoked with (data,callback). The callback is invoked with the argument (response) +*/ +function BrowserMessagingSubscriber(options) { + var self = this; + this.target = options.target; + this.type = options.type; + this.onsubscribe = options.onsubscribe || function() {}; + this.onmessage = options.onmessage; + this.hasConfirmed = false; + this.channel = new MessageChannel(); + this.channel.port1.addEventListener("message",function(event) { + if(this.timerID) { + clearTimeout(this.timerID); + this.timerID = null; + } + if(event.data) { + if(event.data.verb === "SUBSCRIBED") { + self.hasConfirmed = true; + self.onsubscribe(null); + } else if(event.data.verb === self.type) { + self.onmessage(event.data,function(response) { + // Send the response back on the supplied port, and then close it + event.ports[0].postMessage(response); + event.ports[0].close(); + }); + } + } + }); + // Set a timer so that if we don't hear from the iframe before a timeout we alert the user + this.timerID = setTimeout(function() { + if(!self.hasConfirmed) { + self.onsubscribe("NO_RESPONSE"); + } + },RESPONSE_TIMEOUT); + this.channel.port1.start(); + this.target.postMessage({verb: "SUBSCRIBE",to: self.type},"*",[this.channel.port2]); +} + +exports.BrowserMessagingSubscriber = BrowserMessagingSubscriber; + +/* +Class to handle publishing subscriptions + +type: String indicating type of item for which subscriptions are being provided (eg "SAVING") +onsubscribe: Function to be invoked when a subscription occurs +*/ +function BrowserMessagingPublisher(options) { + var self = this; + this.type = options.type; + this.hostIsListening = false; + this.port = null; + // Listen to connection requests from the host + window.addEventListener("message",function(event) { + if(event.data && event.data.verb === "SUBSCRIBE" && event.data.to === self.type) { + self.hostIsListening = true; + // Acknowledge + self.port = event.ports[0]; + self.port.postMessage({verb: "SUBSCRIBED", to: self.type}); + if(options.onsubscribe) { + options.onsubscribe(event.data); + } + } + }); +} + +BrowserMessagingPublisher.prototype.canSend = function() { + return !!this.hostIsListening && !!this.port; +}; + +BrowserMessagingPublisher.prototype.send = function(data,callback) { + var self = this; + callback = callback || function() {}; + // Check that we've been initialised by the host + if(!this.hostIsListening || !this.port) { + return false; + } + // Create a channel for the confirmation + var channel = new MessageChannel(); + channel.port1.addEventListener("message",function(event) { + if(event.data && event.data.verb === "OK") { + callback(null); + } else { + callback("BrowserMessagingPublisher for " + self.type + " error: " + (event.data || {}).verb); + } + channel.port1.close(); + }); + channel.port1.start(); + // Send the save request with the port for the response + this.port.postMessage(data,[channel.port2]); +}; + +BrowserMessagingPublisher.prototype.close = function() { + if(this.port) { + this.port.close(); + this.hostIsListening = false; + this.port = null; + } +}; + +exports.BrowserMessagingPublisher = BrowserMessagingPublisher; + +})(); diff --git a/core/modules/utils/parsetree.js b/core/modules/utils/parsetree.js index 410f921818..ba0e48b298 100644 --- a/core/modules/utils/parsetree.js +++ b/core/modules/utils/parsetree.js @@ -119,3 +119,19 @@ exports.getParseTreeText = function getParseTreeText(tree) { } return output.join(""); }; + +exports.getParser = function(type,options) { + options = options || {}; + // Select a parser + var Parser = $tw.Wiki.parsers[type]; + if(!Parser && $tw.utils.getFileExtensionInfo(type)) { + Parser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type]; + } + if(!Parser) { + Parser = $tw.Wiki.parsers[options.defaultType || "text/vnd.tiddlywiki"]; + } + if(!Parser) { + return null; + } + return Parser; +}; diff --git a/core/modules/utils/utils.js b/core/modules/utils/utils.js index da12bba2d8..a9c05975d0 100644 --- a/core/modules/utils/utils.js +++ b/core/modules/utils/utils.js @@ -9,8 +9,6 @@ Various static utility functions. "use strict"; -var base64utf8 = require("$:/core/modules/utils/base64-utf8/base64-utf8.module.js"); - /* Display a message, in colour if we're on a terminal */ @@ -854,22 +852,50 @@ if(typeof window !== 'undefined') { } } +exports.base64ToBytes = function(base64) { + const binString = exports.atob(base64); + return Uint8Array.from(binString, (m) => m.codePointAt(0)); +}; + +exports.bytesToBase64 = function(bytes) { + const binString = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join(""); + return exports.btoa(binString); +}; + +exports.base64EncodeUtf8 = function(str) { + if ($tw.browser) { + return exports.bytesToBase64(new TextEncoder().encode(str)); + } else { + const buff = Buffer.from(str, "utf-8"); + return buff.toString("base64"); + } +}; + +exports.base64DecodeUtf8 = function(str) { + if ($tw.browser) { + return new TextDecoder().decode(exports.base64ToBytes(str)); + } else { + const buff = Buffer.from(str, "base64"); + return buff.toString("utf-8"); + } +}; + /* Decode a base64 string */ exports.base64Decode = function(string64,binary,urlsafe) { - var encoded = urlsafe ? string64.replace(/_/g,'/').replace(/-/g,'+') : string64; + const encoded = urlsafe ? string64.replace(/_/g,'/').replace(/-/g,'+') : string64; if(binary) return exports.atob(encoded) - else return base64utf8.base64.decode.call(base64utf8,encoded); + else return exports.base64DecodeUtf8(encoded); }; /* Encode a string to base64 */ exports.base64Encode = function(string64,binary,urlsafe) { - var encoded; + let encoded; if(binary) encoded = exports.btoa(string64); - else encoded = base64utf8.base64.encode.call(base64utf8,string64); + else encoded = exports.base64EncodeUtf8(string64); if(urlsafe) { encoded = encoded.replace(/\+/g,'-').replace(/\//g,'_'); } @@ -1035,7 +1061,7 @@ exports.makeCompareFunction = function(type,options) { return compare(dateA,dateB); }, "version": function(a,b) { - return $tw.utils.compareVersions(a,b); + return compare($tw.utils.compareVersions(a,b),0); }, "alphanumeric": function(a,b) { if(!isCaseSensitive) { diff --git a/core/modules/widgets/audio.js b/core/modules/widgets/audio.js new file mode 100644 index 0000000000..7bd073c4f5 --- /dev/null +++ b/core/modules/widgets/audio.js @@ -0,0 +1,103 @@ +/*\ +title: $:/core/modules/widgets/audio.js +type: application/javascript +module-type: widget + +Basic Audio widget for displaying audio files. +This is a simple implementation that can be overridden by plugins +for more advanced functionality. + +\*/ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +var Widget = require("$:/core/modules/widgets/widget.js").widget; + +var AudioWidget = function(parseTreeNode,options) { + this.initialise(parseTreeNode,options); +}; + +/* +Inherit from the base widget class +*/ +AudioWidget.prototype = new Widget(); + +/* +Render this widget into the DOM +*/ +AudioWidget.prototype.render = function(parent,nextSibling) { + this.parentDomNode = parent; + this.computeAttributes(); + this.execute(); + + // Create audio element + var audioElement = this.document.createElement("audio"); + audioElement.setAttribute("controls", this.getAttribute("controls", "controls")); + audioElement.setAttribute("style", this.getAttribute("style", "width: 100%; object-fit: contain")); + audioElement.className = "tw-audio-element"; + + // Set source + if(this.audioSource) { + if (this.audioSource.indexOf("data:") === 0) { + audioElement.setAttribute("src", this.audioSource); + } else { + var sourceElement = this.document.createElement("source"); + sourceElement.setAttribute("src", this.audioSource); + if(this.audioType) { + sourceElement.setAttribute("type", this.audioType); + } + audioElement.appendChild(sourceElement); + } + } + + // Insert the audio into the DOM + parent.insertBefore(audioElement, nextSibling); + this.domNodes.push(audioElement); +}; + +/* +Compute the internal state of the widget +*/ +AudioWidget.prototype.execute = function() { + // Get the audio source and type + this.audioSource = this.getAttribute("src"); + this.audioType = this.getAttribute("type"); + this.audioControls = this.getAttribute("controls", "controls"); + + // Try to get from tiddler attribute + if(!this.audioSource && this.getAttribute("tiddler")) { + var tiddlerTitle = this.getAttribute("tiddler"); + var tiddler = this.wiki.getTiddler(tiddlerTitle); + if(tiddler) { + if(tiddler.fields._canonical_uri) { + this.audioSource = tiddler.fields._canonical_uri; + this.audioType = tiddler.fields.type; + } else if(tiddler.fields.text) { + this.audioSource = "data:" + tiddler.fields.type + ";base64," + tiddler.fields.text; + this.audioType = tiddler.fields.type; + } + } + } + + // Make sure we have a tiddler for saving timestamps + this.tiddlerTitle = this.getAttribute("tiddler"); +}; + +/* +Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering +*/ +AudioWidget.prototype.refresh = function(changedTiddlers) { + var changedAttributes = this.computeAttributes(); + if(changedAttributes.src || changedAttributes.type || changedAttributes.controls || changedAttributes.tiddler) { + this.refreshSelf(); + return true; + } else { + return false; + } +}; + +exports.audio = AudioWidget; + + diff --git a/core/modules/widgets/button.js b/core/modules/widgets/button.js index 68f2fcd119..8f6f143763 100644 --- a/core/modules/widgets/button.js +++ b/core/modules/widgets/button.js @@ -61,6 +61,10 @@ ButtonWidget.prototype.render = function(parent,nextSibling) { sourcePrefix: "data-", destPrefix: "data-" }); + this.assignAttributes(domNode,{ + sourcePrefix: "aria-", + destPrefix: "aria-" + }); // Assign other attributes if(this.style) { domNode.setAttribute("style",this.style); @@ -68,9 +72,6 @@ ButtonWidget.prototype.render = function(parent,nextSibling) { if(this.tooltip) { domNode.setAttribute("title",this.tooltip); } - if(this["aria-label"]) { - domNode.setAttribute("aria-label",this["aria-label"]); - } if (this.role) { domNode.setAttribute("role", this.role); } @@ -215,7 +216,6 @@ ButtonWidget.prototype.execute = function() { this.setTo = this.getAttribute("setTo"); this.popup = this.getAttribute("popup"); this.hover = this.getAttribute("hover"); - this["aria-label"] = this.getAttribute("aria-label"); this.role = this.getAttribute("role"); this.tooltip = this.getAttribute("tooltip"); this.style = this.getAttribute("style"); @@ -271,6 +271,10 @@ ButtonWidget.prototype.refresh = function(changedTiddlers) { sourcePrefix: "data-", destPrefix: "data-" }); + this.assignAttributes(this.domNodes[0],{ + sourcePrefix: "aria-", + destPrefix: "aria-" + }); } return this.refreshChildren(changedTiddlers); }; diff --git a/core/modules/widgets/element.js b/core/modules/widgets/element.js index 34fd3b9ffc..8b0a88e868 100755 --- a/core/modules/widgets/element.js +++ b/core/modules/widgets/element.js @@ -74,6 +74,8 @@ ElementWidget.prototype.render = function(parent,nextSibling) { // Create the DOM node and render children var domNode = this.document.createElementNS(this.namespace,this.tag); this.assignAttributes(domNode,{excludeEventAttributes: true}); + // Allow hooks to manipulate the DOM node. Eg: Add debug info + $tw.hooks.invokeHook("th-dom-rendering-element", domNode, this); parent.insertBefore(domNode,nextSibling); this.renderChildren(domNode,null); this.domNodes.push(domNode); diff --git a/core/modules/widgets/eventcatcher.js b/core/modules/widgets/eventcatcher.js index 70dc992021..aac6519a48 100644 --- a/core/modules/widgets/eventcatcher.js +++ b/core/modules/widgets/eventcatcher.js @@ -44,7 +44,7 @@ EventWidget.prototype.render = function(parent,nextSibling) { domNode.addEventListener(type,function(event) { var selector = self.getAttribute("selector"), matchSelector = self.getAttribute("matchSelector"), - actions = self.getAttribute("$"+type) || self.getAttribute("actions-"+type), + actions = self.getAttribute("$"+type), stopPropagation = self.getAttribute("stopPropagation","onaction"), selectedNode = event.target, selectedNodeRect, @@ -122,9 +122,6 @@ EventWidget.prototype.execute = function() { self.types.push(key.slice(1)); } }); - if(!this.types.length) { - this.types = this.getAttribute("events","").split(" "); - } this.elementTag = this.getAttribute("tag"); // Make child widgets this.makeChildWidgets(); diff --git a/core/modules/widgets/importvariables.js b/core/modules/widgets/importvariables.js index befee4a908..597b5bc565 100644 --- a/core/modules/widgets/importvariables.js +++ b/core/modules/widgets/importvariables.js @@ -49,7 +49,8 @@ ImportVariablesWidget.prototype.execute = function(tiddlerList) { var parser = widgetPointer.wiki.parseTiddler(title,{parseAsInline:true, configTrimWhiteSpace:false}); if(parser) { var parseTreeNode = parser.tree[0]; - while(parseTreeNode && ["setvariable","set","parameters"].indexOf(parseTreeNode.type) !== -1) { + // process AST nodes generated by pragma rules. + while(parseTreeNode && ["setvariable","set","parameters","void"].indexOf(parseTreeNode.type) !== -1) { var node = { type: "set", attributes: parseTreeNode.attributes, @@ -82,7 +83,7 @@ ImportVariablesWidget.prototype.execute = function(tiddlerList) { // this widget. If it needs to refresh, // it'll do so along with the the whole // importvariable tree. - if (widgetPointer != this) { + if(widgetPointer != this) { widgetPointer.makeChildWidgets = function(){}; } widgetPointer = widgetPointer.children[0]; @@ -93,7 +94,7 @@ ImportVariablesWidget.prototype.execute = function(tiddlerList) { } }); - if (widgetPointer != this) { + if(widgetPointer != this) { widgetPointer.parseTreeNode.children = this.parseTreeNode.children; } else { widgetPointer.makeChildWidgets(); diff --git a/core/modules/widgets/link.js b/core/modules/widgets/link.js index c8b54818dc..d2c5995424 100755 --- a/core/modules/widgets/link.js +++ b/core/modules/widgets/link.js @@ -45,6 +45,10 @@ LinkWidget.prototype.render = function(parent,nextSibling) { sourcePrefix: "data-", destPrefix: "data-" }); + this.assignAttributes(domNode,{ + sourcePrefix: "aria-", + destPrefix: "aria-" + }); parent.insertBefore(domNode,nextSibling); this.renderChildren(domNode,null); this.domNodes.push(domNode); @@ -125,9 +129,13 @@ LinkWidget.prototype.renderLink = function(parent,nextSibling) { }); domNode.setAttribute("title",tooltipText); } - if(this["aria-label"]) { - domNode.setAttribute("aria-label",this["aria-label"]); + if(this.role) { + domNode.setAttribute("role",this.role); } + this.assignAttributes(domNode,{ + sourcePrefix: "aria-", + destPrefix: "aria-" + }) // Add a click event handler $tw.utils.addEventListeners(domNode,[ {name: "click", handlerObject: this, handlerMethod: "handleClickEvent"}, @@ -139,6 +147,8 @@ LinkWidget.prototype.renderLink = function(parent,nextSibling) { dragTiddlerFn: function() {return self.to;}, widget: this }); + } else if(this.draggable === "no") { + domNode.setAttribute("draggable","false"); } // Assign data- attributes this.assignAttributes(domNode,{ @@ -188,7 +198,7 @@ LinkWidget.prototype.execute = function() { // Pick up our attributes this.to = this.getAttribute("to",this.getVariable("currentTiddler")); this.tooltip = this.getAttribute("tooltip"); - this["aria-label"] = this.getAttribute("aria-label"); + this.role = this.getAttribute("role"); this.linkClasses = this.getAttribute("class"); this.overrideClasses = this.getAttribute("overrideClass"); this.tabIndex = this.getAttribute("tabindex"); diff --git a/core/modules/widgets/list.js b/core/modules/widgets/list.js index f86d2d5719..96ea44db16 100755 --- a/core/modules/widgets/list.js +++ b/core/modules/widgets/list.js @@ -519,36 +519,3 @@ ListJoinWidget.prototype.render = function() {} ListJoinWidget.prototype.refresh = function() { return false; } exports["list-join"] = ListJoinWidget; - -/* -Make <$list-template> and <$list-empty> widgets that do nothing -*/ -var ListTemplateWidget = function(parseTreeNode,options) { - // Main initialisation inherited from widget.js - this.initialise(parseTreeNode,options); -}; -ListTemplateWidget.prototype = new Widget(); -ListTemplateWidget.prototype.render = function() {} -ListTemplateWidget.prototype.refresh = function() { return false; } - -exports["list-template"] = ListTemplateWidget; - -var ListEmptyWidget = function(parseTreeNode,options) { - // Main initialisation inherited from widget.js - this.initialise(parseTreeNode,options); -}; -ListEmptyWidget.prototype = new Widget(); -ListEmptyWidget.prototype.render = function() {} -ListEmptyWidget.prototype.refresh = function() { return false; } - -exports["list-empty"] = ListEmptyWidget; - -var ListJoinWidget = function(parseTreeNode,options) { - // Main initialisation inherited from widget.js - this.initialise(parseTreeNode,options); -}; -ListJoinWidget.prototype = new Widget(); -ListJoinWidget.prototype.render = function() {} -ListJoinWidget.prototype.refresh = function() { return false; } - -exports["list-join"] = ListJoinWidget; diff --git a/core/modules/widgets/range.js b/core/modules/widgets/range.js index 8d039b1f19..7c2d60c45c 100644 --- a/core/modules/widgets/range.js +++ b/core/modules/widgets/range.js @@ -94,8 +94,6 @@ RangeWidget.prototype.getActionVariables = function(options) { // actionsStart RangeWidget.prototype.handleMouseDownEvent = function(event) { - this.mouseDown = true; // TODO remove once IE is gone. - this.startValue = this.inputDomNode.value; // TODO remove this line once IE is gone! this.handleEvent(event); // Trigger actions if(this.actionsMouseDown) { @@ -106,26 +104,16 @@ RangeWidget.prototype.handleMouseDownEvent = function(event) { // actionsStop RangeWidget.prototype.handleMouseUpEvent = function(event) { - this.mouseDown = false; // TODO remove once IE is gone. this.handleEvent(event); // Trigger actions if(this.actionsMouseUp) { var variables = this.getActionVariables() this.invokeActionString(this.actionsMouseUp,this,event,variables); } - // TODO remove the following if() once IE is gone! - if ($tw.browser.isIE) { - if (this.startValue !== this.inputDomNode.value) { - this.handleChangeEvent(event); - this.startValue = this.inputDomNode.value; - } - } } RangeWidget.prototype.handleChangeEvent = function(event) { - if (this.mouseDown) { // TODO refactor this function once IE is gone. - this.handleInputEvent(event); - } + this.handleInputEvent(event); }; RangeWidget.prototype.handleInputEvent = function(event) { @@ -152,8 +140,6 @@ RangeWidget.prototype.handleEvent = function(event) { Compute the internal state of the widget */ RangeWidget.prototype.execute = function() { - // TODO remove the next 1 lines once IE is gone! - this.mouseUp = true; // Needed for IE10 // Get the parameters from the attributes this.tiddlerTitle = this.getAttribute("tiddler",this.getVariable("currentTiddler")); this.tiddlerField = this.getAttribute("field","text"); diff --git a/core/modules/widgets/scrollable.js b/core/modules/widgets/scrollable.js index f34d462e7f..42705a61bf 100644 --- a/core/modules/widgets/scrollable.js +++ b/core/modules/widgets/scrollable.js @@ -181,7 +181,7 @@ ScrollableWidget.prototype.render = function(parent,nextSibling) { }; ScrollableWidget.prototype.listenerFunction = function(event) { - self = this; + var self = this; clearTimeout(this.timeout); this.timeout = setTimeout(function() { var existingTiddler = self.wiki.getTiddler(self.scrollableBind), diff --git a/core/modules/widgets/void.js b/core/modules/widgets/void.js new file mode 100755 index 0000000000..de009c5065 --- /dev/null +++ b/core/modules/widgets/void.js @@ -0,0 +1,23 @@ +/*\ +title: $:/core/modules/widgets/void.js +type: application/javascript +module-type: widget + +Void widget that corresponds to pragma and comment AST nodes, etc. It does not render itself but renders all its children. + +\*/ + +"use strict"; + +var Widget = require("$:/core/modules/widgets/widget.js").widget; + +var VoidNodeWidget = function(parseTreeNode,options) { + this.initialise(parseTreeNode,options); +}; + +/* +Inherit from the base widget class +*/ +VoidNodeWidget.prototype = new Widget(); + +exports.void = VoidNodeWidget; diff --git a/core/modules/wiki.js b/core/modules/wiki.js index 878b34eb25..eb690af236 100755 --- a/core/modules/wiki.js +++ b/core/modules/wiki.js @@ -1059,17 +1059,7 @@ Options include: exports.parseText = function(type,text,options) { text = text || ""; options = options || {}; - // Select a parser - var Parser = $tw.Wiki.parsers[type]; - if(!Parser && $tw.utils.getFileExtensionInfo(type)) { - Parser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type]; - } - if(!Parser) { - Parser = $tw.Wiki.parsers[options.defaultType || "text/vnd.tiddlywiki"]; - } - if(!Parser) { - return null; - } + var Parser = $tw.utils.getParser(type,options) // Return the parser instance return new Parser(type,text,{ parseAsInline: options.parseAsInline, @@ -1083,7 +1073,7 @@ exports.parseText = function(type,text,options) { Parse a tiddler according to its MIME type */ exports.parseTiddler = function(title,options) { - options = $tw.utils.extend({},options); + options = options || {}; var cacheType = options.parseAsInline ? "inlineParseTree" : "blockParseTree", tiddler = this.getTiddler(title), self = this; @@ -1173,7 +1163,7 @@ exports.getSubstitutedText = function(text,widget,options) { output = $tw.utils.replaceString(output,new RegExp("\\$" + $tw.utils.escapeRegExp(substitute.name) + "\\$","mg"),substitute.value); }); // Substitute any variable references with their values - return output.replace(/\$\(([^\)\$]+)\)\$/g, function(match,varname) { + return output.replace(/\$\((.+?)\)\$/g, function(match,varname) { return widget.getVariable(varname,{defaultValue: ""}) }); }; @@ -1443,7 +1433,7 @@ exports.search = function(text,options) { // Don't search the text field if the content type is binary var fieldName = searchFields[fieldIndex]; if(fieldName === "text" && contentTypeInfo.encoding !== "utf8") { - break; + continue; } var str = tiddler.fields[fieldName], t; diff --git a/core/palettes/Blanca.tid b/core/palettes/Blanca.tid index 7a6e7d97bb..dc68c23ffa 100644 --- a/core/palettes/Blanca.tid +++ b/core/palettes/Blanca.tid @@ -18,7 +18,7 @@ code-background: #f7f7f9 code-border: #e1e1e8 code-foreground: #dd1144 dirty-indicator: #ff0000 -download-background: #66cccc +download-background: #3aafaf download-foreground: <<colour background>> dragger-background: <<colour foreground>> dragger-foreground: <<colour background>> @@ -26,7 +26,7 @@ dropdown-background: <<colour background>> dropdown-border: <<colour muted-foreground>> dropdown-tab-background-selected: #fff dropdown-tab-background: #ececec -dropzone-background: rgba(0,200,0,0.7) +dropzone-background: #00d900 external-link-background-hover: inherit external-link-background-visited: inherit external-link-background: inherit @@ -52,26 +52,30 @@ notification-border: #999999 page-background: #ffffff pre-background: #f5f5f5 pre-border: #cccccc -primary: #7897f3 +primary: #6387f1 select-tag-background: select-tag-foreground: sidebar-button-foreground: <<colour foreground>> sidebar-controls-foreground-hover: #000000 -sidebar-controls-foreground: #ccc -sidebar-foreground-shadow: rgba(255,255,255, 0.8) +sidebar-controls-foreground: #aaaaaa +sidebar-foreground-shadow: #ffffff sidebar-foreground: #acacac sidebar-muted-foreground-hover: #444444 -sidebar-muted-foreground: #c0c0c0 +sidebar-muted-foreground: #aaaaaa sidebar-tab-background-selected: #ffffff sidebar-tab-background: <<colour tab-background>> sidebar-tab-border-selected: <<colour tab-border-selected>> sidebar-tab-border: <<colour tab-border>> sidebar-tab-divider: <<colour tab-divider>> -sidebar-tab-foreground-selected: +sidebar-tab-foreground-selected: <<colour tab-foreground>> sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tiddler-link-foreground-hover: #444444 -sidebar-tiddler-link-foreground: #7897f3 +sidebar-tiddler-link-foreground: <<colour primary>> site-title-foreground: <<colour tiddler-title-foreground>> +stability-stable: #008000 +stability-experimental: #c07c00 +stability-deprecated: #ff0000 +stability-legacy: #0000ff static-alert-foreground: #aaaaaa tab-background-selected: #ffffff tab-background: #eeeeee @@ -83,10 +87,10 @@ tab-foreground: #666666 table-border: #dddddd table-footer-background: #a8a8a8 table-header-background: #f0f0f0 -tag-background: #ffeedd -tag-foreground: #000 +tag-background: #ffd5aa +tag-foreground: #000000 tiddler-background: <<colour background>> -tiddler-border: #eee +tiddler-border: #eeeeee tiddler-controls-foreground-hover: #888888 tiddler-controls-foreground-selected: #444444 tiddler-controls-foreground: #cccccc @@ -97,7 +101,7 @@ tiddler-editor-fields-even: #e0e8e0 tiddler-editor-fields-odd: #f0f4f0 tiddler-info-background: #f8f8f8 tiddler-info-border: #dddddd -tiddler-info-tab-background: #f8f8f8 +tiddler-info-tab-background: <<colour tiddler-info-background>> tiddler-link-background: <<colour background>> tiddler-link-foreground: <<colour primary>> tiddler-subtitle-foreground: #c0c0c0 @@ -111,5 +115,6 @@ toolbar-close-button: toolbar-delete-button: toolbar-cancel-button: toolbar-done-button: -untagged-background: #999999 +untagged-background: #cccccc very-muted-foreground: #888888 +network-activity-foreground: <<colour primary>> \ No newline at end of file diff --git a/core/palettes/BrightMute.tid b/core/palettes/BrightMute.tid index 2762a995de..bda0282b37 100644 --- a/core/palettes/BrightMute.tid +++ b/core/palettes/BrightMute.tid @@ -47,6 +47,7 @@ modal-footer-background: #f5f5f5 modal-footer-border: #dddddd modal-header-border: #eeeeee muted-foreground: #bbb +network-activity-foreground: <<colour primary>> notification-background: #ffffdd notification-border: #999999 page-background: #6f6f70 @@ -56,22 +57,26 @@ primary: #29a6ee select-tag-background: select-tag-foreground: sidebar-button-foreground: <<colour foreground>> -sidebar-controls-foreground-hover: #000000 +sidebar-controls-foreground-hover: #222222 sidebar-controls-foreground: #c2c1c2 -sidebar-foreground-shadow: rgba(255,255,255,0) +sidebar-foreground-shadow: transparent sidebar-foreground: #d3d2d4 -sidebar-muted-foreground-hover: #444444 +sidebar-muted-foreground-hover: #333333 sidebar-muted-foreground: #c0c0c0 sidebar-tab-background-selected: #6f6f70 sidebar-tab-background: #666667 sidebar-tab-border-selected: #999 sidebar-tab-border: #515151 sidebar-tab-divider: #999 -sidebar-tab-foreground-selected: -sidebar-tab-foreground: #999 +sidebar-tab-foreground-selected: #bfbfbf +sidebar-tab-foreground: #b0b0b0 sidebar-tiddler-link-foreground-hover: #444444 -sidebar-tiddler-link-foreground: #d1d0d2 +sidebar-tiddler-link-foreground: #aaaaaa site-title-foreground: <<colour tiddler-title-foreground>> +stability-deprecated: #bf616a +stability-experimental: #d08770 +stability-legacy: #88c0d0 +stability-stable: #a3be8c static-alert-foreground: #aaaaaa tab-background-selected: #ffffff tab-background: #d8d8d8 @@ -85,6 +90,7 @@ table-footer-background: #a8a8a8 table-header-background: #f0f0f0 tag-background: #d5ad34 tag-foreground: #ffffff +testcase-accent-level-1: #b1b3e3 tiddler-background: <<colour background>> tiddler-border: <<colour background>> tiddler-controls-foreground-hover: #888888 diff --git a/core/palettes/ContrastDark.tid b/core/palettes/ContrastDark.tid index 67552b30ef..cb40e015b1 100644 --- a/core/palettes/ContrastDark.tid +++ b/core/palettes/ContrastDark.tid @@ -5,11 +5,11 @@ description: High contrast and unambiguous (dark version) tags: $:/tags/Palette type: application/x-tiddler-dictionary -alert-background: #f00 +alert-background: #ff0000 alert-border: <<colour background>> alert-highlight: <<colour foreground>> -alert-muted-foreground: #800 -background: #000 +alert-muted-foreground: #880000 +background: #000000 blockquote-bar: <<colour muted-foreground>> button-background: <<colour background>> button-foreground: <<colour foreground>> @@ -17,24 +17,24 @@ button-border: <<colour foreground>> code-background: <<colour background>> code-border: <<colour foreground>> code-foreground: <<colour foreground>> -dirty-indicator: #f00 -download-background: #080 +dirty-indicator: #ff0000 +download-background: #48ff48 download-foreground: <<colour background>> dragger-background: <<colour foreground>> dragger-foreground: <<colour background>> dropdown-background: <<colour background>> dropdown-border: <<colour muted-foreground>> -dropdown-tab-background-selected: <<colour foreground>> -dropdown-tab-background: <<colour foreground>> -dropzone-background: rgba(0,200,0,0.7) +dropdown-tab-background-selected: #868686 +dropdown-tab-background: #515151 +dropzone-background: #1aff1a external-link-background-hover: inherit external-link-background-visited: inherit external-link-background: inherit external-link-foreground-hover: inherit -external-link-foreground-visited: #00a -external-link-foreground: #00e +external-link-foreground-visited: #5353ff +external-link-foreground: #9595ff footnote-target-background: #4c4c4c -foreground: #fff +foreground: #ffffff highlight-background: #ffff00 highlight-foreground: #000000 message-background: <<colour foreground>> @@ -52,11 +52,11 @@ notification-border: <<colour foreground>> page-background: <<colour background>> pre-background: <<colour background>> pre-border: <<colour foreground>> -primary: #00f +primary: #8a8aff select-tag-background: select-tag-foreground: sidebar-button-foreground: <<colour foreground>> -sidebar-controls-foreground-hover: <<colour background>> +sidebar-controls-foreground-hover: #ffff00 sidebar-controls-foreground: <<colour foreground>> sidebar-foreground-shadow: rgba(0,0,0, 0) sidebar-foreground: <<colour foreground>> @@ -72,6 +72,10 @@ sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tiddler-link-foreground-hover: <<colour foreground>> sidebar-tiddler-link-foreground: <<colour primary>> site-title-foreground: <<colour tiddler-title-foreground>> +stability-stable: #00f400 +stability-experimental: #ffaf1c +stability-deprecated: #ff2b2b +stability-legacy: #ceceff static-alert-foreground: #aaaaaa tab-background-selected: <<colour background>> tab-background: <<colour foreground>> @@ -81,14 +85,15 @@ tab-divider: <<colour foreground>> tab-foreground-selected: <<colour foreground>> tab-foreground: <<colour background>> table-border: #dddddd -table-footer-background: #a8a8a8 -table-header-background: #f0f0f0 -tag-background: #fff -tag-foreground: #000 +table-footer-background: #444444 +table-header-background: #444444 +tag-background: #ffffff +tag-foreground: #000000 +testcase-accent-level-1: #144a8c tiddler-background: <<colour background>> tiddler-border: <<colour foreground>> tiddler-controls-foreground-hover: #ddd -tiddler-controls-foreground-selected: #fdd +tiddler-controls-foreground-selected: #ae0000 tiddler-controls-foreground: <<colour foreground>> tiddler-editor-background: <<colour background>> tiddler-editor-border-image: <<colour foreground>> @@ -102,14 +107,15 @@ tiddler-link-background: <<colour background>> tiddler-link-foreground: <<colour primary>> tiddler-subtitle-foreground: <<colour foreground>> tiddler-title-foreground: <<colour foreground>> -toolbar-new-button: -toolbar-options-button: -toolbar-save-button: -toolbar-info-button: -toolbar-edit-button: -toolbar-close-button: -toolbar-delete-button: -toolbar-cancel-button: -toolbar-done-button: +toolbar-new-button: +toolbar-options-button: +toolbar-save-button: +toolbar-info-button: +toolbar-edit-button: +toolbar-close-button: +toolbar-delete-button: +toolbar-cancel-button: +toolbar-done-button: untagged-background: <<colour foreground>> very-muted-foreground: #888888 +network-activity-foreground: <<colour primary>> \ No newline at end of file diff --git a/core/palettes/ContrastLight.tid b/core/palettes/ContrastLight.tid index a10a1b8ebd..4a68e59c78 100644 --- a/core/palettes/ContrastLight.tid +++ b/core/palettes/ContrastLight.tid @@ -5,7 +5,7 @@ description: High contrast and unambiguous (light version) tags: $:/tags/Palette type: application/x-tiddler-dictionary -alert-background: #f00 +alert-background: #ff4a4a alert-border: <<colour background>> alert-highlight: <<colour foreground>> alert-muted-foreground: #800 @@ -18,13 +18,13 @@ code-background: <<colour background>> code-border: <<colour foreground>> code-foreground: <<colour foreground>> dirty-indicator: #f00 -download-background: #080 +download-background: #008200 download-foreground: <<colour background>> dragger-background: <<colour foreground>> dragger-foreground: <<colour background>> dropdown-background: <<colour background>> dropdown-border: <<colour muted-foreground>> -dropdown-tab-background-selected: <<colour foreground>> +dropdown-tab-background-selected: <<colour background>> dropdown-tab-background: <<colour foreground>> dropzone-background: rgba(0,200,0,0.7) external-link-background-hover: inherit @@ -52,13 +52,13 @@ notification-border: <<colour foreground>> page-background: <<colour background>> pre-background: <<colour background>> pre-border: <<colour foreground>> -primary: #00f +primary: #0000ff select-tag-background: select-tag-foreground: sidebar-button-foreground: <<colour foreground>> -sidebar-controls-foreground-hover: <<colour background>> +sidebar-controls-foreground-hover: #606060 sidebar-controls-foreground: <<colour foreground>> -sidebar-foreground-shadow: rgba(0,0,0, 0) +sidebar-foreground-shadow: #000000 sidebar-foreground: <<colour foreground>> sidebar-muted-foreground-hover: #444444 sidebar-muted-foreground: <<colour foreground>> @@ -72,6 +72,10 @@ sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tiddler-link-foreground-hover: <<colour foreground>> sidebar-tiddler-link-foreground: <<colour primary>> site-title-foreground: <<colour tiddler-title-foreground>> +stability-deprecated: #ff0000 +stability-experimental: #b37400 +stability-legacy: #000075 +stability-stable: #008000 static-alert-foreground: #aaaaaa tab-background-selected: <<colour background>> tab-background: <<colour foreground>> @@ -88,7 +92,7 @@ tag-foreground: #fff tiddler-background: <<colour background>> tiddler-border: <<colour foreground>> tiddler-controls-foreground-hover: #ddd -tiddler-controls-foreground-selected: #fdd +tiddler-controls-foreground-selected: #c5abf3 tiddler-controls-foreground: <<colour foreground>> tiddler-editor-background: <<colour background>> tiddler-editor-border-image: <<colour foreground>> @@ -113,3 +117,4 @@ toolbar-cancel-button: toolbar-done-button: untagged-background: <<colour foreground>> very-muted-foreground: #888888 +network-activity-foreground: <<colour primary>> \ No newline at end of file diff --git a/core/palettes/CupertinoDark.tid b/core/palettes/CupertinoDark.tid index f13fc1e16d..7031fb560d 100644 --- a/core/palettes/CupertinoDark.tid +++ b/core/palettes/CupertinoDark.tid @@ -5,30 +5,30 @@ name: Cupertino Dark description: A macOS inspired dark palette type: application/x-tiddler-dictionary -alert-background: #FF453A -alert-border: #FF453A +alert-background: #ff4b42 +alert-border: #950700 alert-highlight: #FFD60A -alert-muted-foreground: <<colour muted-foreground>> +alert-muted-foreground: #323234 background: #282828 -blockquote-bar: <<colour page-background>> +blockquote-bar: #8d8d8d button-foreground: <<colour foreground>> code-background: <<colour pre-background>> code-border: <<colour pre-border>> -code-foreground: rgba(255, 255, 255, 0.54) +code-foreground: #c7c7c7 dirty-indicator: #FF453A download-background: <<colour primary>> -download-foreground: <<colour foreground>> +download-foreground: <<colour background>> dragger-background: <<colour foreground>> dragger-foreground: <<colour background>> dropdown-background: <<colour tiddler-info-background>> dropdown-border: <<colour dropdown-background>> dropdown-tab-background-selected: #3F638B -dropdown-tab-background: #323232 +dropdown-tab-background: #707070 dropzone-background: #30D158 external-link-background-hover: transparent external-link-background-visited: transparent external-link-background: transparent -external-link-foreground-hover: +external-link-foreground-hover: #9511d5 external-link-foreground-visited: #BF5AF2 external-link-foreground: #32D74B footnote-target-background: #747474 @@ -60,31 +60,36 @@ sidebar-controls-foreground-hover: #FF9F0A sidebar-controls-foreground: #8E8E93 sidebar-foreground-shadow: transparent sidebar-foreground: rgba(255, 255, 255, 0.54) -sidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54) -sidebar-muted-foreground: rgba(255, 255, 255, 0.38) +sidebar-muted-foreground-hover: #acacac +sidebar-muted-foreground: #787878 sidebar-tab-background-selected: #3F638B sidebar-tab-background: <<colour background>> -sidebar-tab-border-selected: <<colour background>> -sidebar-tab-border: <<colour background>> -sidebar-tab-divider: <<colour background>> -sidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87) -sidebar-tab-foreground: rgba(255, 255, 255, 0.54) -sidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7) -sidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54) +sidebar-tab-border-selected: #313131 +sidebar-tab-border: #404040 +sidebar-tab-divider: #282828 +sidebar-tab-foreground-selected: #d2d2d2 +sidebar-tab-foreground: #d2d2d2 +sidebar-tiddler-link-foreground-hover: #535353 +sidebar-tiddler-link-foreground: #949494 site-title-foreground: #ffffff +stability-stable: #009f00 +stability-experimental: #c07c00 +stability-deprecated: #ff0000 +stability-legacy: #6c6cff static-alert-foreground: #B4B4B4 tab-background-selected: #3F638B tab-background: <<colour page-background>> tab-border-selected: <<colour page-background>> -tab-border: <<colour page-background>> +tab-border: #4a4a4a tab-divider: <<colour page-background>> -tab-foreground-selected: rgba(255, 255, 255, 0.87) -tab-foreground: rgba(255, 255, 255, 0.54) +tab-foreground-selected: #ffffff +tab-foreground: #adadad table-border: #464646 -table-footer-background: <<colour tiddler-editor-fields-odd>> -table-header-background: <<colour tiddler-editor-fields-even>> +table-footer-background: #7f7f7f +table-header-background: <<colour table-border>> tag-background: #48484A tag-foreground: #323232 +testcase-accent-level-1: #345173 tiddler-background: <<colour background>> tiddler-border: transparent tiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>> @@ -92,9 +97,9 @@ tiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover tiddler-controls-foreground: #48484A tiddler-editor-background: <<colour background>> tiddler-editor-border-image: -tiddler-editor-border: rgba(255, 255, 255, 0.08) -tiddler-editor-fields-even: rgba(255, 255, 255, 0.1) -tiddler-editor-fields-odd: rgba(255, 255, 255, 0.04) +tiddler-editor-border: #444444 +tiddler-editor-fields-even: #1f1f1f +tiddler-editor-fields-odd: #464646 tiddler-info-background: #1E1E1E tiddler-info-border: #1E1E1E tiddler-info-tab-background: #3F638B @@ -111,8 +116,8 @@ toolbar-close-button: toolbar-delete-button: toolbar-cancel-button: toolbar-done-button: -untagged-background: <<colour very-muted-foreground>> -very-muted-foreground: #464646 +untagged-background: #5f5f5f +very-muted-foreground: #3f3f3f selection-background: #3F638B selection-foreground: #ffffff wikilist-background: <<colour page-background>> @@ -131,3 +136,4 @@ wikilist-title: <<colour foreground>> wikilist-title-svg: <<colour foreground>> wikilist-toolbar-foreground: <<colour foreground>> wikilist-url: <<colour muted-foreground>> +network-activity-foreground: <<colour primary>> \ No newline at end of file diff --git a/core/palettes/DarkPhotos.tid b/core/palettes/DarkPhotos.tid index 5d086fc279..31afc138d4 100644 --- a/core/palettes/DarkPhotos.tid +++ b/core/palettes/DarkPhotos.tid @@ -20,7 +20,7 @@ code-background: #f7f7f9 code-border: #e1e1e8 code-foreground: #dd1144 dirty-indicator: #ff0000 -download-background: #34c734 +download-background: #30b830 download-foreground: <<colour background>> dragger-background: <<colour foreground>> dragger-foreground: <<colour background>> @@ -58,22 +58,26 @@ primary: #5778d8 select-tag-background: select-tag-foreground: sidebar-button-foreground: <<colour foreground>> -sidebar-controls-foreground-hover: #ccf -sidebar-controls-foreground: #fff -sidebar-foreground-shadow: rgba(0,0,0, 0.5) -sidebar-foreground: #fff -sidebar-muted-foreground-hover: #444444 -sidebar-muted-foreground: #eee -sidebar-tab-background-selected: rgba(255,255,255, 0.8) -sidebar-tab-background: rgba(255,255,255, 0.4) +sidebar-controls-foreground-hover: #a6a6ff +sidebar-controls-foreground: #eeeeee +sidebar-foreground-shadow: transparent +sidebar-foreground: #eeeeee +sidebar-muted-foreground-hover: #999999 +sidebar-muted-foreground: #eeeeee +sidebar-tab-background-selected: <<colour page-background>> +sidebar-tab-background: #e0e0e0 sidebar-tab-border-selected: <<colour tab-border-selected>> sidebar-tab-border: <<colour tab-border>> -sidebar-tab-divider: rgba(255,255,255, 0.2) -sidebar-tab-foreground-selected: +sidebar-tab-divider: #e4e4e4 +sidebar-tab-foreground-selected: #ddddff sidebar-tab-foreground: <<colour tab-foreground>> -sidebar-tiddler-link-foreground-hover: #aaf -sidebar-tiddler-link-foreground: #ddf -site-title-foreground: #fff +sidebar-tiddler-link-foreground-hover: #aaaaff +sidebar-tiddler-link-foreground: #ddddff +site-title-foreground: #ffffff +stability-stable: #008000 +stability-experimental: #c07c00 +stability-deprecated: #ff0000 +stability-legacy: #0000ff static-alert-foreground: #aaaaaa tab-background-selected: #ffffff tab-background: #d8d8d8 @@ -90,7 +94,7 @@ tag-foreground: #ffffff tiddler-background: <<colour background>> tiddler-border: <<colour background>> tiddler-controls-foreground-hover: #888888 -tiddler-controls-foreground-selected: #444444 +tiddler-controls-foreground-selected: #6a6aff tiddler-controls-foreground: #cccccc tiddler-editor-background: #f8f8f8 tiddler-editor-border-image: #ffffff @@ -115,3 +119,4 @@ toolbar-cancel-button: toolbar-done-button: untagged-background: #999999 very-muted-foreground: #888888 +network-activity-foreground: #11ff23 \ No newline at end of file diff --git a/core/palettes/DesertSand.tid b/core/palettes/DesertSand.tid index 12b06c948a..632d1f66cc 100644 --- a/core/palettes/DesertSand.tid +++ b/core/palettes/DesertSand.tid @@ -22,9 +22,9 @@ diff-equal-foreground: <<colour foreground>> diff-insert-background: #91c093 diff-insert-foreground: <<colour foreground>> diff-invisible-background: -diff-invisible-foreground: <<colour muted-foreground>> +diff-invisible-foreground: #d3d2cb dirty-indicator: #ad3434 -download-background: #6ca16c +download-background: #5eae62 download-foreground: <<colour background>> dragger-background: <<colour foreground>> dragger-foreground: <<colour background>> @@ -32,14 +32,13 @@ dropdown-background: <<colour background>> dropdown-border: <<colour muted-foreground>> dropdown-tab-background-selected: #E9E0C7 dropdown-tab-background: #BAB29C -dropzone-background: rgba(0,200,0,0.7) +dropzone-background: #00c600 external-link-background-hover: inherit external-link-background-visited: inherit external-link-background: inherit -external-link-foreground-hover: inherit +external-link-foreground-hover: #7474ba external-link-foreground-visited: #313163 external-link-foreground: #555592 -footnote-target-background: #fff7d9 foreground: #2D2A23 highlight-background: #ffff00 highlight-foreground: #000000 @@ -71,7 +70,7 @@ sidebar-controls-foreground: #867F69 sidebar-foreground-shadow: transparent sidebar-foreground: #867F69 sidebar-muted-foreground-hover: #706A58 -sidebar-muted-foreground: #B3A98C +sidebar-muted-foreground: #aba081 sidebar-tab-background-selected: #e0d3af sidebar-tab-background: #A6A193 sidebar-tab-border-selected: #C3BAA1 @@ -82,6 +81,10 @@ sidebar-tab-foreground: #2D2A23 sidebar-tiddler-link-foreground-hover: #433F35 sidebar-tiddler-link-foreground: #706A58 site-title-foreground: <<colour tiddler-title-foreground>> +stability-deprecated: #dc322f +stability-experimental: #b58900 +stability-legacy: #268bd2 +stability-stable: #859900 static-alert-foreground: #A6A193 tab-background-selected: #E9E0C7 tab-background: #A6A193 @@ -95,6 +98,7 @@ table-footer-background: #8A8885 table-header-background: #B0AA98 tag-background: #706A58 tag-foreground: #E3D7B7 +testcase-accent-level-1: #b3adc9 tiddler-background: <<colour background>> tiddler-border: <<colour background>> tiddler-controls-foreground-hover: #9D947B @@ -140,3 +144,4 @@ wikilist-toolbar-foreground: #2D2A23 wikilist-droplink-dragover: rgba(255,192,192,0.5) wikilist-button-background: #A6A193 wikilist-button-foreground: #161512 +network-activity-foreground: <<colour primary>> \ No newline at end of file diff --git a/core/palettes/FlexokiDark.tid b/core/palettes/FlexokiDark.tid index 05e53edf5d..5c9bb8edef 100644 --- a/core/palettes/FlexokiDark.tid +++ b/core/palettes/FlexokiDark.tid @@ -70,7 +70,7 @@ alert-border: <<colour flexoki-ye>> alert-highlight: <<colour flexoki-re>> alert-muted-foreground: <<colour flexoki-ye>> background: #100F0F -blockquote-bar: <<colour flexoki-ma-2>> +blockquote-bar: <<colour flexoki-ma>> button-background: <<colour flexoki-bg-2>> button-foreground: <<colour flexoki-paper>> button-border: <<colour flexoki-600>> @@ -106,7 +106,7 @@ foreground: #CECDC3 highlight-background: <<colour flexoki-yellow-900>> highlight-foreground: inherit menubar-background: <<colour primary>> -menubar-foreground: <<colour flexoki-paper>> +menubar-foreground: <<colour flexoki-999>> message-background: <<colour background>> message-border: <<colour foreground>> message-foreground: <<colour foreground>> diff --git a/core/palettes/GruvBoxDark.tid b/core/palettes/GruvBoxDark.tid index 16ac22d65d..60d1c702e5 100644 --- a/core/palettes/GruvBoxDark.tid +++ b/core/palettes/GruvBoxDark.tid @@ -9,13 +9,13 @@ license: https://github.com/morhetz/gruvbox alert-background: #cc241d alert-border: #cc241d alert-highlight: #d79921 -alert-muted-foreground: #504945 +alert-muted-foreground: #272321 background: #3c3836 blockquote-bar: <<colour muted-foreground>> button-foreground: <<colour foreground>> code-background: #504945 code-border: #504945 -code-foreground: #fb4934 +code-foreground: #fc5e4b diff-delete-background: #fb4934 diff-delete-foreground: <<colour foreground>> diff-equal-background: @@ -25,7 +25,7 @@ diff-insert-foreground: <<colour background>> diff-invisible-background: #ffff97 diff-invisible-foreground: #444347 dirty-indicator: #fb4934 -download-background: #b8bb26 +download-background: #1daf24 download-foreground: <<colour background>> dragger-background: <<colour foreground>> dragger-foreground: <<colour background>> @@ -46,52 +46,53 @@ highlight-background: #ffff79 highlight-foreground: #000000 menubar-background: #504945 menubar-foreground: <<colour foreground>> -message-background: #83a598 +message-background: #b4c9c1 message-border: #83a598 message-foreground: #3c3836 -modal-backdrop: <<colour foreground>> +modal-backdrop: #625a57 modal-background: <<colour background>> modal-border: #504945 modal-footer-background: #3c3836 modal-footer-border: #3c3836 modal-header-border: #3c3836 muted-foreground: #d5c4a1 +network-activity-foreground: <<colour primary>> notification-background: <<colour primary>> notification-border: <<colour primary>> page-background: #282828 pre-background: #504945 pre-border: #504945 -primary: #d79921 +primary: #da9921 select-tag-background: #665c54 select-tag-foreground: <<colour foreground>> selection-background: #458588 selection-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>> -sidebar-controls-foreground-hover: #7c6f64 -sidebar-controls-foreground: #504945 +sidebar-controls-foreground-hover: #e3e0dd +sidebar-controls-foreground: #978b84 sidebar-foreground-shadow: transparent sidebar-foreground: #fbf1c7 -sidebar-muted-foreground-hover: #7c6f64 -sidebar-muted-foreground: #504945 +sidebar-muted-foreground-hover: <<colour sidebar-controls-foreground-hover>> +sidebar-muted-foreground: <<colour sidebar-controls-foreground>> sidebar-tab-background-selected: #bdae93 sidebar-tab-background: #3c3836 sidebar-tab-border-selected: <<colour tab-border-selected>> sidebar-tab-border: #bdae93 sidebar-tab-divider: <<colour page-background>> -sidebar-tab-foreground-selected: #282828 +sidebar-tab-foreground-selected: <<colour page-background>> sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tiddler-link-foreground-hover: #458588 sidebar-tiddler-link-foreground: #98971a site-title-foreground: <<colour tiddler-title-foreground>> stability-deprecated: #cc241d -stability-experimental: #d79921 -stability-legacy: #458588 -stability-stable: #98971a +stability-experimental: #b37d1c +stability-legacy: #529ca0 +stability-stable: #649618 static-alert-foreground: #B48EAD tab-background-selected: #ebdbb2 tab-background: #665c54 -tab-border-selected: #665c54 -tab-border: #665c54 +tab-border-selected: <<colour tab-background-selected>> +tab-border: #82746a tab-divider: #bdae93 tab-foreground-selected: #282828 tab-foreground: #ebdbb2 @@ -100,6 +101,7 @@ table-footer-background: #665c54 table-header-background: #504945 tag-background: #d3869b tag-foreground: #282828 +testcase-accent-level-1: #456d88 tiddler-background: <<colour background>> tiddler-border: <<colour background>> tiddler-controls-foreground-hover: #7c6f64 @@ -126,7 +128,7 @@ toolbar-close-button: toolbar-delete-button: toolbar-cancel-button: toolbar-done-button: -untagged-background: #504945 +untagged-background: #887b75 very-muted-foreground: #bdae93 wikilist-background: <<colour page-background>> wikilist-button-background: #acacac diff --git a/core/palettes/Nord.tid b/core/palettes/Nord.tid index 87e9189270..b662c2bfad 100644 --- a/core/palettes/Nord.tid +++ b/core/palettes/Nord.tid @@ -7,15 +7,15 @@ type: application/x-tiddler-dictionary license: MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md alert-background: #D08770 -alert-border: #D08770 -alert-highlight: #B48EAD -alert-muted-foreground: #4C566A +alert-border: <<colour alert-background>> +alert-highlight: #a3436f +alert-muted-foreground: #495367 background: #3b4252 blockquote-bar: <<colour muted-foreground>> button-foreground: <<colour foreground>> code-background: #2E3440 code-border: #2E3440 -code-foreground: #BF616A +code-foreground: #c7747c diff-delete-background: #BF616A diff-delete-foreground: <<colour foreground>> diff-equal-background: @@ -48,31 +48,32 @@ menubar-background: #2E3440 menubar-foreground: #d8dee9 message-background: #2E3440 message-border: #2E3440 -message-foreground: #547599 -modal-backdrop: <<colour foreground>> +message-foreground: #6485aa +modal-backdrop: #435678 modal-background: <<colour background>> modal-border: #3b4252 modal-footer-background: #3b4252 modal-footer-border: #3b4252 modal-header-border: #3b4252 -muted-foreground: #4C566A +muted-foreground: #687693 +network-activity-foreground: <<colour primary>> notification-background: <<colour primary>> notification-border: #EBCB8B page-background: #2e3440 pre-background: #2E3440 pre-border: #2E3440 -primary: #5E81AC +primary: #7b98bb select-tag-background: #3b4252 select-tag-foreground: <<colour foreground>> -selection-background: #5E81AC +selection-background: #52749e selection-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>> sidebar-controls-foreground-hover: #D8DEE9 -sidebar-controls-foreground: #4C566A +sidebar-controls-foreground: #5e6a84 sidebar-foreground-shadow: transparent sidebar-foreground: #D8DEE9 -sidebar-muted-foreground-hover: #4C566A -sidebar-muted-foreground: #4C566A +sidebar-muted-foreground-hover: #9fa8bb +sidebar-muted-foreground: #6c7b97 sidebar-tab-background-selected: #ECEFF4 sidebar-tab-background: #4C566A sidebar-tab-border-selected: <<colour tab-border-selected>> @@ -83,39 +84,40 @@ sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tiddler-link-foreground-hover: #A3BE8C sidebar-tiddler-link-foreground: #81A1C1 site-title-foreground: <<colour tiddler-title-foreground>> -stability-deprecated: #bf616a -stability-experimental: #d08770 -stability-legacy: #88c0d0 -stability-stable: #a3be8c +stability-deprecated: #ff595e +stability-experimental: #f29d00 +stability-legacy: #2ddbca +stability-stable: #04ff04 static-alert-foreground: #B48EAD tab-background-selected: #ECEFF4 tab-background: #4C566A tab-border-selected: #4C566A -tab-border: #4C566A +tab-border: #5c6883 tab-divider: #4C566A -tab-foreground-selected: #4C566A +tab-foreground-selected: #6c7a97 tab-foreground: #D8DEE9 table-border: #4C566A table-footer-background: #2e3440 table-header-background: #2e3440 tag-background: #A3BE8C tag-foreground: #4C566A +testcase-accent-level-1: #455e7d tiddler-background: <<colour background>> tiddler-border: <<colour background>> tiddler-controls-foreground-hover: tiddler-controls-foreground-selected: #EBCB8B -tiddler-controls-foreground: #4C566A +tiddler-controls-foreground: #5e6a84 tiddler-editor-background: #2e3440 tiddler-editor-border-image: #2e3440 -tiddler-editor-border: #3b4252 +tiddler-editor-border: #232732 tiddler-editor-fields-even: #2e3440 -tiddler-editor-fields-odd: #2e3440 +tiddler-editor-fields-odd: #424a5b tiddler-info-background: #2e3440 tiddler-info-border: #2e3440 tiddler-info-tab-background: #2e3440 tiddler-link-background: <<colour background>> tiddler-link-foreground: <<colour primary>> -tiddler-subtitle-foreground: #4C566A +tiddler-subtitle-foreground: #5c6881 tiddler-title-foreground: #81A1C1 toolbar-new-button: toolbar-options-button: @@ -138,4 +140,4 @@ wikilist-button-open-hover: #A3BE8C wikilist-button-reveal: #81A1C1 wikilist-button-reveal-hover: #81A1C1 wikilist-button-remove: #B48EAD -wikilist-button-remove-hover: #B48EAD +wikilist-button-remove-hover: #B48EAD \ No newline at end of file diff --git a/core/palettes/Rocker.tid b/core/palettes/Rocker.tid index c6693eb523..9e3e89f010 100644 --- a/core/palettes/Rocker.tid +++ b/core/palettes/Rocker.tid @@ -11,7 +11,7 @@ alert-highlight: #881122 alert-muted-foreground: #b99e2f background: #ffffff blockquote-bar: <<colour muted-foreground>> -button-background: +button-background: #adadad button-foreground: button-border: code-background: #f7f7f9 @@ -47,36 +47,41 @@ modal-footer-background: #f5f5f5 modal-footer-border: #dddddd modal-header-border: #eeeeee muted-foreground: #999999 +network-activity-foreground: <<colour primary>> notification-background: #ffffdd notification-border: #999999 page-background: #000 pre-background: #f5f5f5 pre-border: #cccccc primary: #cc0000 -select-tag-background: -select-tag-foreground: +select-tag-background: <<colour foreground>> +select-tag-foreground: <<colour foreground>> sidebar-button-foreground: <<colour foreground>> -sidebar-controls-foreground-hover: #000000 -sidebar-controls-foreground: #ffffff +sidebar-controls-foreground-hover: #797979 +sidebar-controls-foreground: #cacaca sidebar-foreground-shadow: rgba(255,255,255, 0.0) sidebar-foreground: #acacac sidebar-muted-foreground-hover: #444444 sidebar-muted-foreground: #c0c0c0 -sidebar-tab-background-selected: #000 +sidebar-tab-background-selected: #000000 sidebar-tab-background: <<colour tab-background>> -sidebar-tab-border-selected: <<colour tab-border-selected>> +sidebar-tab-border-selected: #7c7c7c sidebar-tab-border: <<colour tab-border>> sidebar-tab-divider: <<colour tab-divider>> -sidebar-tab-foreground-selected: +sidebar-tab-foreground-selected: #ff0909 sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tiddler-link-foreground-hover: #ffbb99 sidebar-tiddler-link-foreground: #cc0000 site-title-foreground: <<colour tiddler-title-foreground>> +stability-deprecated: #ff0000 +stability-experimental: #c07c00 +stability-legacy: #0000ff +stability-stable: #008000 static-alert-foreground: #aaaaaa tab-background-selected: #ffffff tab-background: #d8d8d8 tab-border-selected: #d8d8d8 -tab-border: #cccccc +tab-border: #bbbbbb tab-divider: #d8d8d8 tab-foreground-selected: <<colour tab-foreground>> tab-foreground: #666666 @@ -85,6 +90,7 @@ table-footer-background: #a8a8a8 table-header-background: #f0f0f0 tag-background: #ffbb99 tag-foreground: #000 +testcase-accent-level-1: #9e9eff tiddler-background: <<colour background>> tiddler-border: <<colour background>> tiddler-controls-foreground-hover: #888888 @@ -112,4 +118,4 @@ toolbar-delete-button: toolbar-cancel-button: toolbar-done-button: untagged-background: #999999 -very-muted-foreground: #888888 +very-muted-foreground: #888888 \ No newline at end of file diff --git a/core/palettes/SolarFlare.tid b/core/palettes/SolarFlare.tid index ff6ddcf1db..08476ebcd3 100644 --- a/core/palettes/SolarFlare.tid +++ b/core/palettes/SolarFlare.tid @@ -5,24 +5,24 @@ description: Warm, relaxing earth colours tags: $:/tags/Palette type: application/x-tiddler-dictionary -: Background Tones +# Background Tones base03: #002b36 base02: #073642 -: Content Tones +# Content Tones base01: #586e75 base00: #657b83 base0: #839496 base1: #93a1a1 -: Background Tones +# Background Tones base2: #eee8d5 base3: #fdf6e3 -: Accent Colors +# Accent Colors yellow: #b58900 orange: #cb4b16 @@ -33,7 +33,7 @@ blue: #268bd2 cyan: #2aa198 green: #859900 -: Additional Tones (RA) +# Additional Tones (RA) base10: #c0c4bb violet-muted: #7c81b0 @@ -45,9 +45,9 @@ red-hot: #ff2222 blue-hot: #2298ee green-hot: #98ee22 -: Palette +# Palette -: Do not use colour macro for background and foreground +# Do not use colour macro for background and foreground background: #fdf6e3 download-foreground: <<colour background>> dragger-foreground: <<colour background>> @@ -68,24 +68,28 @@ foreground: #657b83 sidebar-button-foreground: <<colour foreground>> sidebar-controls-foreground: <<colour foreground>> sidebar-foreground: <<colour foreground>> -: base03 -: base02 -: base01 +# base03 +# base02 +# base01 alert-muted-foreground: <<colour base01>> -: base00 +# base00 code-foreground: <<colour base00>> message-foreground: <<colour base00>> tag-foreground: <<colour base00>> -: base0 +# base0 sidebar-tiddler-link-foreground: <<colour base0>> -: base1 +# base1 muted-foreground: <<colour base1>> blockquote-bar: <<colour muted-foreground>> dropdown-border: <<colour muted-foreground>> sidebar-muted-foreground: <<colour muted-foreground>> tiddler-title-foreground: <<colour muted-foreground>> site-title-foreground: <<colour tiddler-title-foreground>> -: base2 +# base2 + stability-deprecated: <<colour red>> + stability-experimental: <<colour yellow>> + stability-legacy: <<colour blue-hot>> + stability-stable: <<colour green>> modal-footer-background: <<colour base2>> page-background: <<colour base2>> modal-backdrop: <<colour page-background>> @@ -99,31 +103,31 @@ foreground: #657b83 tag-background: <<colour base2>> tiddler-editor-background: <<colour base2>> tiddler-info-background: <<colour base2>> - tiddler-info-tab-background: <<colour base2>> + tiddler-info-tab-background: <<colour tiddler-info-border>> tab-background: <<colour base2>> - dropdown-tab-background: <<colour tab-background>> -: base3 +dropdown-tab-background: <<colour tab-background>> +# base3 alert-background: <<colour base3>> message-background: <<colour base3>> -: yellow -: orange -: red -: magenta +# yellow +# orange +# red +# magenta alert-highlight: <<colour magenta>> -: violet +# violet external-link-foreground: <<colour violet>> -: blue -: cyan -: green -: base10 - tiddler-controls-foreground: <<colour base10>> -: violet-muted - external-link-foreground-visited: <<colour violet-muted>> -: blue-muted - primary: <<colour blue-muted>> - download-background: <<colour primary>> - tiddler-link-foreground: <<colour primary>> +# blue +# cyan +# green +# base10 + tiddler-controls-foreground: <<colour base10>> +# violet-muted + external-link-foreground-visited: <<colour violet-muted>> +# blue-muted + primary: <<colour blue-muted>> + download-background: #5bb83d + tiddler-link-foreground: <<colour primary>> alert-border: #b99e2f diff-delete-background: <<colour red>> diff-delete-foreground: <<colour background>> @@ -134,7 +138,7 @@ diff-insert-foreground: <<colour background>> diff-invisible-background: <<colour yellow>> diff-invisible-foreground: <<colour background>> dirty-indicator: #ff0000 -dropzone-background: rgba(0,200,0,0.7) +dropzone-background: #008800 external-link-background-hover: inherit external-link-background-visited: inherit external-link-background: inherit @@ -146,14 +150,10 @@ message-border: #cfd6e6 modal-border: #999999 select-tag-background: select-tag-foreground: -sidebar-controls-foreground-hover: +sidebar-controls-foreground-hover: #000000 sidebar-muted-foreground-hover: sidebar-tab-background: #ded8c5 sidebar-tiddler-link-foreground-hover: -stability-deprecated: <<colour red>> -stability-experimental: <<colour yellow>> -stability-legacy: <<colour blue>> -stability-stable: <<colour green>> static-alert-foreground: #aaaaaa tab-border: #cccccc modal-footer-border: <<colour tab-border>> @@ -166,6 +166,7 @@ tab-divider: #d8d8d8 sidebar-tab-divider: <<colour tab-divider>> table-border: #dddddd table-footer-background: #a8a8a8 +testcase-accent-level-1: #bec8cc tiddler-controls-foreground-hover: #888888 tiddler-controls-foreground-selected: #444444 tiddler-editor-border-image: #ffffff @@ -185,3 +186,4 @@ toolbar-cancel-button: toolbar-done-button: untagged-background: #999999 very-muted-foreground: #888888 +network-activity-foreground: <<colour primary>> \ No newline at end of file diff --git a/core/palettes/SolarizedDark.tid b/core/palettes/SolarizedDark.tid index 9338998e9f..2069797f16 100644 --- a/core/palettes/SolarizedDark.tid +++ b/core/palettes/SolarizedDark.tid @@ -40,7 +40,7 @@ external-link-background: inherit external-link-background-hover: inherit external-link-background-visited: inherit external-link-foreground: #268bd2 -external-link-foreground-hover: +external-link-foreground-hover: #1d669c external-link-foreground-visited: #268bd2 footnote-target-background: #073642 foreground: #839496 @@ -56,6 +56,7 @@ modal-footer-background: #073642 modal-footer-border: #586e75 modal-header-border: #586e75 muted-foreground: #93a1a1 +network-activity-foreground: <<colour primary>> notification-background: #002b36 notification-border: #586e75 page-background: #073642 @@ -81,10 +82,10 @@ sidebar-tab-foreground-selected: #93a1a1 sidebar-tiddler-link-foreground: #2aa198 sidebar-tiddler-link-foreground-hover: #eee8d5 site-title-foreground: #d33682 -stability-deprecated: #dc322f -stability-experimental: #b58900 -stability-legacy: #268bd2 -stability-stable: #859900 +stability-deprecated: #aa1a9f +stability-experimental: #806000 +stability-legacy: #1d669c +stability-stable: #00df11 static-alert-foreground: #93a1a1 tab-background: #073642 tab-background-selected: #002b36 @@ -98,6 +99,7 @@ table-footer-background: #073642 table-header-background: #073642 tag-background: #b58900 tag-foreground: #002b36 +testcase-accent-level-1: #073642 tiddler-background: #002b36 tiddler-border: #586e75 tiddler-controls-foreground: inherit @@ -125,4 +127,4 @@ toolbar-new-button: #839496 toolbar-options-button: #839496 toolbar-save-button: inherit untagged-background: #586e75 -very-muted-foreground: #586e75 +very-muted-foreground: #586e75 \ No newline at end of file diff --git a/core/palettes/SolarizedLight.tid b/core/palettes/SolarizedLight.tid index c01ff88218..ce2354fb04 100644 --- a/core/palettes/SolarizedLight.tid +++ b/core/palettes/SolarizedLight.tid @@ -27,7 +27,7 @@ diff-insert-foreground: #eee8d5 diff-invisible-background: #b58900 diff-invisible-foreground: #eee8d5 dirty-indicator: #dc322f -download-background: #859900 +download-background: #00910b download-foreground: #eee8d5 dragger-background: #eee8d5 dragger-foreground: #657b83 @@ -56,6 +56,7 @@ modal-footer-background: #eee8d5 modal-footer-border: #93a1a1 modal-header-border: #93a1a1 muted-foreground: #586e75 +network-activity-foreground: <<colour primary>> notification-background: #fdf6e3 notification-border: #93a1a1 page-background: #eee8d5 @@ -81,10 +82,10 @@ sidebar-tab-foreground-selected: #586e75 sidebar-tiddler-link-foreground: #2aa198 sidebar-tiddler-link-foreground-hover: #002b36 site-title-foreground: #d33682 -stability-deprecated: #dc322f -stability-experimental: #b58900 -stability-legacy: #268bd2 -stability-stable: #859900 +stability-deprecated: #d21a1a +stability-experimental: #771e00 +stability-legacy: #227abb +stability-stable: #576400 static-alert-foreground: #586e75 tab-background: #eee8d5 tab-background-selected: #fdf6e3 @@ -98,6 +99,7 @@ table-footer-background: #eee8d5 table-header-background: #eee8d5 tag-background: #b58900 tag-foreground: #fdf6e3 +testcase-accent-level-1: #afc2db tiddler-background: #fdf6e3 tiddler-border: #93a1a1 tiddler-controls-foreground: inherit diff --git a/core/palettes/Twilight.tid b/core/palettes/Twilight.tid index d6b54673ad..bbd077218f 100644 --- a/core/palettes/Twilight.tid +++ b/core/palettes/Twilight.tid @@ -94,6 +94,7 @@ table-footer-background: rgba(0,0,0,.4) table-header-background: rgba(0,0,0,.1) tag-background: rgb(255, 201, 102) tag-foreground: rgb(25, 25, 25) +testcase-accent-level-1: rgb(13, 52, 99) tiddler-background: rgb(38, 38, 38) tiddler-border: rgba(240, 196, 117, 0.7) tiddler-controls-foreground: rgb(128, 128, 128) diff --git a/core/palettes/Vanilla.tid b/core/palettes/Vanilla.tid index d981a485ef..2228fddf13 100644 --- a/core/palettes/Vanilla.tid +++ b/core/palettes/Vanilla.tid @@ -69,7 +69,7 @@ select-tag-foreground: sidebar-button-foreground: <<colour foreground>> sidebar-controls-foreground-hover: #000000 sidebar-controls-foreground: #aaaaaa -sidebar-foreground-shadow: rgba(255,255,255, 0.8) +sidebar-foreground-shadow: #ffffff sidebar-foreground: #acacac sidebar-muted-foreground-hover: #444444 sidebar-muted-foreground: #c0c0c0 @@ -83,7 +83,7 @@ sidebar-tab-foreground: <<colour tab-foreground>> sidebar-tiddler-link-foreground-hover: #444444 sidebar-tiddler-link-foreground: #999999 site-title-foreground: <<colour tiddler-title-foreground>> -stability-stable: #008000 +stability-stable: #00b700 stability-experimental: #c07c00 stability-deprecated: #ff0000 stability-legacy: #0000ff @@ -138,13 +138,13 @@ wikilist-title: #666666 wikilist-title-svg: <<colour wikilist-title>> wikilist-url: #aaaaaa wikilist-button-open: #4fb82b -wikilist-button-open-hover: green +wikilist-button-open-hover: #009300 wikilist-button-reveal: #5778d8 -wikilist-button-reveal-hover: blue +wikilist-button-reveal-hover: #0000ff wikilist-button-remove: #d85778 -wikilist-button-remove-hover: red +wikilist-button-remove-hover: #ff0000 wikilist-toolbar-background: #d3d3d3 wikilist-toolbar-foreground: #888888 -wikilist-droplink-dragover: rgba(255,192,192,0.5) +wikilist-droplink-dragover: #ffc0c0 wikilist-button-background: #acacac -wikilist-button-foreground: #000000 +wikilist-button-foreground: #000000 \ No newline at end of file diff --git a/core/templates/external-js/save-all-external-js.tid b/core/templates/external-js/save-all-external-js.tid index 1f49088781..36bdd9f68a 100644 --- a/core/templates/external-js/save-all-external-js.tid +++ b/core/templates/external-js/save-all-external-js.tid @@ -3,7 +3,7 @@ title: $:/core/save/all-external-js \whitespace trim \import [subfilter{$:/core/config/GlobalImportFilter}] \define saveTiddlerFilter() -[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$ +[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] $(publishFilter)$ \end <!-- Important: core library is provided by serving URI encoded $:/core/templates/tiddlywiki5.js --> diff --git a/core/templates/external-js/save-offline-external-js.tid b/core/templates/external-js/save-offline-external-js.tid index 70cb8bbc0d..bae0d16fdb 100644 --- a/core/templates/external-js/save-offline-external-js.tid +++ b/core/templates/external-js/save-offline-external-js.tid @@ -3,7 +3,7 @@ title: $:/core/save/offline-external-js \whitespace trim \import [subfilter{$:/core/config/GlobalImportFilter}] \define saveTiddlerFilter() -[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/plugins/tiddlywiki/filesystem]] -[[$:/plugins/tiddlywiki/tiddlyweb]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$ +[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/plugins/tiddlywiki/filesystem]] -[[$:/plugins/tiddlywiki/tiddlyweb]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] $(publishFilter)$ \end \define defaultCoreURL() tiddlywikicore-$(version)$.js <$let coreURL={{{ [[coreURL]is[variable]then<coreURL>else<defaultCoreURL>] }}}> diff --git a/core/templates/external-js/tiddlywiki5-external-js.html.tid b/core/templates/external-js/tiddlywiki5-external-js.html.tid index b161584d71..39ded2b5e3 100644 --- a/core/templates/external-js/tiddlywiki5-external-js.html.tid +++ b/core/templates/external-js/tiddlywiki5-external-js.html.tid @@ -1,12 +1,13 @@ title: $:/core/templates/tiddlywiki5-external-js.html <$set name="saveTiddlerAndShadowsFilter" filter="[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]"> +<$set name="rawMarkupFilter" filter="[enlist<saveTiddlerAndShadowsFilter>] +[[$:/core]plugintiddlers[]]"> `<!doctype html> `{{$:/core/templates/MOTW.html}}`<html lang="`<$text text={{{ [{$:/language}get[name]] }}}/>`"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <!--~~ Raw markup for the top of the head section ~~--> -`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}` +`{{{ [enlist<rawMarkupFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}` <meta http-equiv="X-UA-Compatible" content="IE=Edge"/> <meta name="application-name" content="TiddlyWiki" /> <meta name="generator" content="TiddlyWiki" /> @@ -22,13 +23,13 @@ title: $:/core/templates/tiddlywiki5-external-js.html <!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~--> <!--~~ Raw markup ~~--> -`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}` -`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}` -`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}` +`{{{ [enlist<rawMarkupFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}` +`{{{ [enlist<rawMarkupFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}` +`{{{ [enlist<rawMarkupFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}` </head> <body class="tc-body"> <!--~~ Raw markup for the top of the body section ~~--> -`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}` +`{{{ [enlist<rawMarkupFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}` <!--~~ Static styles ~~--> <div id="styleArea"> `{{$:/boot/boot.css||$:/core/templates/css-tiddler}}` @@ -42,9 +43,10 @@ title: $:/core/templates/tiddlywiki5-external-js.html <!--~~ Ordinary tiddlers ~~--> `{{$:/core/templates/store.area.template.html}}` <!--~~ Raw markup for the bottom of the body section ~~--> -`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}` +`{{{ [enlist<rawMarkupFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}` <!--~~ Load external JavaScripts ~~--> <script src="`{{{ [<coreURL>] }}}`" onerror="alert('Error: Cannot load `{{{ [<coreURL>] }}}`');"></script> </body> </html>` +</$set> </$set> \ No newline at end of file diff --git a/core/templates/save-all.tid b/core/templates/save-all.tid index a316d1954c..72fb9548dd 100644 --- a/core/templates/save-all.tid +++ b/core/templates/save-all.tid @@ -2,6 +2,6 @@ title: $:/core/save/all \import [subfilter{$:/core/config/GlobalImportFilter}] \define saveTiddlerFilter() -[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$ +[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] $(publishFilter)$ \end {{$:/core/templates/tiddlywiki5.html}} diff --git a/core/templates/save-empty.tid b/core/templates/save-empty.tid index 0b1c33b595..372d1c4a1f 100644 --- a/core/templates/save-empty.tid +++ b/core/templates/save-empty.tid @@ -1,6 +1,6 @@ title: $:/core/save/empty \define saveTiddlerFilter() -[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] +[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] \end {{$:/core/templates/tiddlywiki5.html}} diff --git a/core/templates/save-lazy-all.tid b/core/templates/save-lazy-all.tid index da4353fba6..1162b1155d 100644 --- a/core/templates/save-lazy-all.tid +++ b/core/templates/save-lazy-all.tid @@ -1,7 +1,7 @@ title: $:/core/save/lazy-all \define saveTiddlerFilter() -[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] [is[tiddler]type[application/javascript]] +[sort[title]] +[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] [is[tiddler]type[application/javascript]] +[sort[title]] \end \define skinnySaveTiddlerFilter() [!is[system]] -[type[application/javascript]] diff --git a/core/templates/save-lazy-images.tid b/core/templates/save-lazy-images.tid index b23b348f0a..369c1e7e06 100644 --- a/core/templates/save-lazy-images.tid +++ b/core/templates/save-lazy-images.tid @@ -1,7 +1,7 @@ title: $:/core/save/lazy-images \define saveTiddlerFilter() -[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] +[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[is[system]type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] -[!is[system]is[image]] +[sort[title]] \end \define skinnySaveTiddlerFilter() [!is[system]is[image]] diff --git a/core/ui/AdvancedSearch/Filter.tid b/core/ui/AdvancedSearch/Filter.tid index 7369e4c400..4005ebbdc7 100644 --- a/core/ui/AdvancedSearch/Filter.tid +++ b/core/ui/AdvancedSearch/Filter.tid @@ -62,28 +62,34 @@ caption: {{$:/language/Search/Filter/Caption}} </$list> \end +\procedure input-actions() +<%if [<event-key-descriptor>match[((input-tab-right))]] %> +<<set-next-input-tab>> +<%elseif [<event-key-descriptor>match[((input-tab-left))]] %> +<<set-previous-input-tab>> +<%endif%> +\end + \whitespace trim <<lingo Filter/Hint>> <div class="tc-search tc-advanced-search"> - <$keyboard key="((input-tab-right))" actions=<<set-next-input-tab>> class="tc-small-gap-right"> - <$keyboard key="((input-tab-left))" actions=<<set-previous-input-tab>>> - <$transclude $variable="keyboard-driven-input" - tiddler="$:/temp/advancedsearch/input" - storeTitle="$:/temp/advancedsearch" - refreshTitle="$:/temp/advancedsearch/refresh" - selectionStateTitle="$:/temp/advancedsearch/selected-item" - type="search" - tag="input" - focus={{$:/config/Search/AutoFocus}} - configTiddlerFilter="[[$:/temp/advancedsearch]]" - firstSearchFilterField="text" - inputAcceptActions=<<input-accept-actions>> - inputAcceptVariantActions=<<input-accept-variant-actions>> - inputCancelActions=<<cancel-search-actions>> - /> - </$keyboard> + <$keyboard key="((input-tab-right)) ((input-tab-left))" actions=<<input-actions>> class="tc-small-gap-right"> + <$transclude $variable="keyboard-driven-input" + tiddler="$:/temp/advancedsearch/input" + storeTitle="$:/temp/advancedsearch" + refreshTitle="$:/temp/advancedsearch/refresh" + selectionStateTitle="$:/temp/advancedsearch/selected-item" + type="search" + tag="input" + focus={{$:/config/Search/AutoFocus}} + configTiddlerFilter="[[$:/temp/advancedsearch]]" + firstSearchFilterField="text" + inputAcceptActions=<<input-accept-actions>> + inputAcceptVariantActions=<<input-accept-variant-actions>> + inputCancelActions=<<cancel-search-actions>> + /> </$keyboard> <$list filter="[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]"> <$transclude/> diff --git a/core/ui/AdvancedSearch/Shadows.tid b/core/ui/AdvancedSearch/Shadows.tid index 1c7f15087a..6225dc3e68 100644 --- a/core/ui/AdvancedSearch/Shadows.tid +++ b/core/ui/AdvancedSearch/Shadows.tid @@ -53,13 +53,20 @@ first-search-filter: [all[shadows]search<userInput>sort[title]limit[250]] -[[$:/ </$list></$list> \end +\procedure input-actions() +<%if [<event-key-descriptor>match[((input-tab-right))]] %> +<<set-next-input-tab>> +<%elseif [<event-key-descriptor>match[((input-tab-left))]] %> +<<set-previous-input-tab>> +<%endif%> +\end + \whitespace trim <<lingo Shadows/Hint>> <div class="tc-search"> -<$keyboard key="((input-tab-right))" actions=<<set-next-input-tab>>> -<$keyboard key="((input-tab-left))" actions=<<set-previous-input-tab>>> +<$keyboard key="((input-tab-right)) ((input-tab-left))" actions=<<input-actions>>> <$transclude $variable="keyboard-driven-input" tiddler="$:/temp/advancedsearch/input" storeTitle="$:/temp/advancedsearch" @@ -74,7 +81,6 @@ first-search-filter: [all[shadows]search<userInput>sort[title]limit[250]] -[[$:/ inputAcceptVariantActions=<<input-accept-variant-actions>> filterMinLength={{$:/config/Search/MinLength}}/> </$keyboard> -</$keyboard> <$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> <$button class="tc-btn-invisible"> diff --git a/core/ui/AdvancedSearch/Standard.tid b/core/ui/AdvancedSearch/Standard.tid index ae80ced350..cdf84f183d 100644 --- a/core/ui/AdvancedSearch/Standard.tid +++ b/core/ui/AdvancedSearch/Standard.tid @@ -17,15 +17,24 @@ caption: {{$:/language/Search/Standard/Caption}} \procedure input-accept-variant-actions() <$list filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]" emptyMessage="<$list filter='[<tiddler>get[text]!is[missing]] :else[<tiddler>get[text]is[shadow]]'><$list filter='[<tiddler>get[text]minlength[1]]'><$action-sendmessage $message='tm-edit-tiddler' $param={{{ [<tiddler>get[text]] }}}/></$list></$list>"><$list filter="[<tiddler>get[text]minlength[1]]"><$action-sendmessage $message="tm-edit-tiddler" $param={{{ [<tiddler>get[text]] }}}/></$list></$list> +\procedure input-actions() +<%if [<event-code>match[ArrowRight]] :and[<modifier>match[alt-shift]] %> +<<next-search-tab>> +<%elseif [<event-code>match[ArrowLeft]] :and[<modifier>match[alt-shift]] %> +<<previous-search-tab>> +<%elseif [<event-key-descriptor>match[((input-tab-right))]] %> +<<set-next-input-tab>> +<%elseif [<event-key-descriptor>match[((input-tab-left))]] %> +<<set-previous-input-tab>> +<%endif%> +\end + \whitespace trim <<lingo Standard/Hint>> <div class="tc-search"> -<$keyboard key="((input-tab-right))" actions=<<set-next-input-tab>>> -<$keyboard key="((input-tab-left))" actions=<<set-previous-input-tab>>> -<$keyboard key="shift-alt-Right" actions=<<next-search-tab>>> -<$keyboard key="shift-alt-Left" actions=<<previous-search-tab>>> +<$keyboard key="((input-tab-right)) ((input-tab-left)) shift-alt-Right shift-alt-Left" actions=<<input-actions>>> <$transclude $variable="keyboard-driven-input" tiddler="$:/temp/advancedsearch/input" storeTitle="$:/temp/advancedsearch" @@ -40,9 +49,6 @@ caption: {{$:/language/Search/Standard/Caption}} configTiddlerFilter="[[$:/state/advancedsearch/standard/currentTab]!is[missing]get[text]] :else[{$:/config/SearchResults/Default}]" filterMinLength={{$:/config/Search/MinLength}}/> </$keyboard> -</$keyboard> -</$keyboard> -</$keyboard> <$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> <$button class="tc-btn-invisible"> diff --git a/core/ui/AdvancedSearch/System.tid b/core/ui/AdvancedSearch/System.tid index 90b5a95010..f9288d50be 100644 --- a/core/ui/AdvancedSearch/System.tid +++ b/core/ui/AdvancedSearch/System.tid @@ -52,13 +52,20 @@ first-search-filter: [is[system]search<userInput>sort[title]limit[250]] :except[ </$list></$list> \end +\procedure input-actions() +<%if [<event-key-descriptor>match[((input-tab-right))]] %> +<<set-next-input-tab>> +<%elseif [<event-key-descriptor>match[((input-tab-left))]] %> +<<set-previous-input-tab>> +<%endif%> +\end + \whitespace trim <<lingo System/Hint>> <div class="tc-search"> -<$keyboard key="((input-tab-right))" actions=<<set-next-input-tab>>> -<$keyboard key="((input-tab-left))" actions=<<set-previous-input-tab>>> +<$keyboard key="((input-tab-right)) ((input-tab-left))" actions=<<input-actions>>> <$transclude $variable="keyboard-driven-input" tiddler="$:/temp/advancedsearch/input" storeTitle="$:/temp/advancedsearch" @@ -73,7 +80,6 @@ first-search-filter: [is[system]search<userInput>sort[title]limit[250]] :except[ inputAcceptVariantActions=<<input-accept-variant-actions>> filterMinLength={{$:/config/Search/MinLength}}/> </$keyboard> -</$keyboard> <$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> <$button class="tc-btn-invisible"> diff --git a/core/ui/AlertTemplate.tid b/core/ui/AlertTemplate.tid index d67586b8d3..de96121c28 100644 --- a/core/ui/AlertTemplate.tid +++ b/core/ui/AlertTemplate.tid @@ -2,9 +2,9 @@ code-body: yes title: $:/core/ui/AlertTemplate \whitespace trim -<div class="tc-alert"> +<div class="tc-alert" role="alertdialog"> <div class="tc-alert-toolbar"> -<$button class="tc-btn-invisible"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/cancel-button}}</$button> +<$button class="tc-btn-invisible" aria-label={{$:/language/Buttons/Close/Caption}}><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/cancel-button}}</$button> </div> <div class="tc-alert-subtitle"> <$wikify name="format" text=<<lingo Tiddler/DateFormat>>> @@ -19,7 +19,7 @@ title: $:/core/ui/AlertTemplate </$reveal> </$wikify> </div> -<div class="tc-alert-body"> +<div class="tc-alert-body" role="alert" aria-atomic="true"> <$transclude/> diff --git a/core/ui/ControlPanel/Saving/TiddlySpot.tid b/core/ui/ControlPanel/Saving/TiddlySpot.tid index 65613d87de..9cbdf57266 100644 --- a/core/ui/ControlPanel/Saving/TiddlySpot.tid +++ b/core/ui/ControlPanel/Saving/TiddlySpot.tid @@ -21,12 +21,6 @@ http://$(userName)$.tiddlyspot.com/$path$/ </$reveal> \end -<div class="tc-message-box"> - -<<lingo ReadOnly>> - -</div> - <<lingo Description>> |<<lingo UserName>> |<$edit-text tiddler="$:/UploadName" default="" tag="input"/> | diff --git a/core/ui/ControlPanel/Saving/gitea.tid b/core/ui/ControlPanel/Saving/gitea.tid index cc4d833692..c73973d174 100644 --- a/core/ui/ControlPanel/Saving/gitea.tid +++ b/core/ui/ControlPanel/Saving/gitea.tid @@ -3,7 +3,7 @@ tags: $:/tags/ControlPanel/Saving caption: {{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}} \define lingo-base() $:/language/ControlPanel/Saving/GitService/ -\define service-name() ~Gitea +\define service-name() Gitea <<lingo Description>> diff --git a/core/ui/ControlPanel/Settings/DefaultTiddlerInfoTab.tid b/core/ui/ControlPanel/Settings/DefaultTiddlerInfoTab.tid new file mode 100644 index 0000000000..a662d6ff49 --- /dev/null +++ b/core/ui/ControlPanel/Settings/DefaultTiddlerInfoTab.tid @@ -0,0 +1,19 @@ +caption: {{$:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/Caption}} +tags: $:/tags/ControlPanel/Settings +title: $:/core/ui/ControlPanel/Settings/DefaultTiddlerInfoTab + +\whitespace trim +\define lingo-base() $:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/ + +<$link to="$:/config/TiddlerInfo/Default" class="tc-control-panel-item"> + <<lingo Hint>> +</$link> + +<$select tiddler="$:/config/TiddlerInfo/Default" class="tc-select"> + <$list filter="[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!is[draft]]"> + <option value=<<currentTiddler>>><$transclude field="caption"> + <$text text=<<currentTiddler>>/> + </$transclude> + </option> + </$list> +</$select> diff --git a/core/ui/EditTemplate/tags.tid b/core/ui/EditTemplate/tags.tid index c8d4131feb..298120606d 100644 --- a/core/ui/EditTemplate/tags.tid +++ b/core/ui/EditTemplate/tags.tid @@ -17,15 +17,11 @@ tags: $:/tags/EditTemplate <$let backgroundColor=<<colour>> > <span class="tc-tag-label tc-tag-list-item tc-small-gap-right" data-tag-title=<<currentTiddler>> - style.color=<<foregroundColor>> - style.fill=<<foregroundColor>> - style.background-color=<<backgroundColor>> + style=`color:$(foregroundColor)$; background-color:$(backgroundColor)$;` > <$transclude tiddler=<<icon>>/> <$view field="title" format="text"/> - <$button class="tc-btn-invisible tc-remove-tag-button" - style.fill=<<foregroundColor>> - > + <$button class="tc-btn-invisible tc-remove-tag-button"> <$action-listops $tiddler=<<saveTiddler>> $field=<<tagField>> $subfilter="-[{!!title}]"/> {{$:/core/images/close-button}} </$button> diff --git a/core/ui/EditTemplate/type.tid b/core/ui/EditTemplate/type.tid index 259a701b76..eae2ebfee1 100644 --- a/core/ui/EditTemplate/type.tid +++ b/core/ui/EditTemplate/type.tid @@ -10,7 +10,7 @@ first-search-filter: [all[shadows+tiddlers]prefix[$:/language/Docs/Types/]sort[d <em class="tc-edit tc-small-gap-right"><<lingo Type/Prompt>></em> <div class="tc-type-selector-dropdown-wrapper"> <div class="tc-type-selector"><$fieldmangler> -<$transclude $variable="keyboard-driven-input" tiddler=<<currentTiddler>> storeTitle=<<typeInputTiddler>> refreshTitle=<<refreshTitle>> selectionStateTitle=<<typeSelectionTiddler>> field="type" tag="input" default="" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify "$:/state/popup/type-dropdown">> class="tc-edit-typeeditor tc-edit-texteditor tc-popup-handle" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] :else[[false]] }}} cancelPopups="yes" configTiddlerFilter="[[$:/core/ui/EditTemplate/type]]" inputCancelActions=<<input-cancel-actions>>/><$button popup=<<qualify "$:/state/popup/type-dropdown">> class="tc-btn-invisible tc-btn-dropdown tc-small-gap" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$button message="tm-remove-field" param="type" class="tc-btn-invisible tc-btn-icon" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}<$action-deletetiddler $filter="[<typeInputTiddler>] [<storeTitle>] [<refreshTitle>] [<selectionStateTitle>]"/></$button> +<$transclude $variable="keyboard-driven-input" tiddler=<<currentTiddler>> storeTitle=<<typeInputTiddler>> refreshTitle=<<refreshTitle>> selectionStateTitle=<<typeSelectionTiddler>> field="type" tag="input" default="" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify "$:/state/popup/type-dropdown">> class="tc-edit-typeeditor tc-edit-texteditor tc-popup-handle tc-keep-focus" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] :else[[false]] }}} cancelPopups="yes" configTiddlerFilter="[[$:/core/ui/EditTemplate/type]]" inputCancelActions=<<input-cancel-actions>>/><$button popup=<<qualify "$:/state/popup/type-dropdown">> class="tc-btn-invisible tc-btn-dropdown tc-small-gap" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$button message="tm-remove-field" param="type" class="tc-btn-invisible tc-btn-icon" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}<$action-deletetiddler $filter="[<typeInputTiddler>] [<storeTitle>] [<refreshTitle>] [<selectionStateTitle>]"/></$button> </$fieldmangler></div> <div class="tc-block-dropdown-wrapper"> diff --git a/core/ui/ImportListing.tid b/core/ui/ImportListing.tid index 4db1d4757f..5bd89ba2b5 100644 --- a/core/ui/ImportListing.tid +++ b/core/ui/ImportListing.tid @@ -37,8 +37,6 @@ title: $:/core/ui/ImportListing \define suppressedField() suppressed-$(payloadTiddler)$ -\define newImportTitleTiddler() $:/temp/NewImportTitle-$(payloadTiddler)$ - \define previewPopupState() $(currentTiddler)$!!popup-$(payloadTiddler)$ \define renameFieldState() $(currentTiddler)$!!state-rename-$(payloadTiddler)$ @@ -51,6 +49,7 @@ title: $:/core/ui/ImportListing \end \whitespace trim +<div class="tc-table-wrapper"> <table class="tc-import-table"> <tbody> <tr> @@ -101,19 +100,7 @@ title: $:/core/ui/ImportListing <$reveal type="match" state=<<renameFieldState>> text="yes" tag="tr"> <td colspan="3"> <div class="tc-flex"> - <$edit-text tiddler=<<newImportTitleTiddler>> default={{{[subfilter<payloadTitleFilter>]}}} tag="input" class="tc-import-rename tc-flex-grow-1"/> - <span class="tc-small-gap-left"> - <$button class="tc-btn-invisible" set=<<renameFieldState>> setTo="no" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/CancelRename]get[text]]}}}> - {{$:/core/images/close-button}} - <$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/> - </$button> - <span class="tc-small-gap-right"/> - </span> - <$button class="tc-btn-invisible" set=<<renameFieldState>> setTo="no" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/ConfirmRename]get[text]]}}}> - {{$:/core/images/done-button}} - <$action-setfield $field=<<renameField>> $value={{{[<newImportTitleTiddler>get[text]minlength[1]else<payloadTiddler>]}}} /> - <$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/> - </$button> + <$edit-text field=<<renameField>> default={{{[<payloadTiddler>]}}} tag="input" class="tc-import-rename tc-flex-grow-1"/> </div> </td> </$reveal> @@ -129,3 +116,4 @@ title: $:/core/ui/ImportListing </$list> </tbody> </table> +</div> diff --git a/core/ui/LayoutSwitcher.tid b/core/ui/LayoutSwitcher.tid index 0f7e3f15e0..4b85083406 100644 --- a/core/ui/LayoutSwitcher.tid +++ b/core/ui/LayoutSwitcher.tid @@ -3,27 +3,26 @@ tags: $:/tags/ControlPanel/Appearance caption: {{$:/language/ControlPanel/LayoutSwitcher/Caption}} \whitespace trim +\function layout.filter() [all[current]field:title[$:/core/ui/PageTemplate]] +\function layout.empty.filter() [all[current]field:title{$:/layout}] + <$linkcatcher to="$:/layout"> -<div class="tc-chooser"> +<div class="tc-chooser" role="listbox"> <$list filter="[all[tiddlers+shadows]tag[$:/tags/Layout]] [[$:/core/ui/PageTemplate]] +[!is[draft]sort[name]]"> -<$list - filter="[{$:/layout}!has[text]]" - variable="ignore" - emptyMessage="""\whitespace trim - <$set name="cls" filter="[all[current]field:title{$:/layout}]" value="tc-chooser-item tc-chosen" emptyValue="tc-chooser-item"> - <div class=<<cls>>> - <$link to={{!!title}}> - ''<$transclude tiddler={{{ [<currentTiddler>get[icon]] }}}/><$transclude field="name"/>'' - <$transclude field="description"/> - </$link></div></$set> -"""> -<$set name="cls" filter="[all[current]field:title[$:/core/ui/PageTemplate]]" value="tc-chooser-item tc-chosen" emptyValue="tc-chooser-item"> -<div class=<<cls>>> -<$link to={{!!title}}> -''<$transclude tiddler={{{ [<currentTiddler>get[icon]] }}}/><$transclude field="name"/>'' - <$transclude field="description"/> -</$link> -</div> -</$set> -</$list> + <$list filter="[{$:/layout}!has[text]]" variable="ignore"> + <$list-empty> + <div class={{{ [layout.empty.filter[]then[tc-chooser-item tc-chosen]else[tc-chooser-item]] }}}> + <$link to={{!!title}} role="option" aria-selected={{{ [layout.empty.filter[]then[true]else[false]] }}}> + ''<$transclude tiddler={{{ [<currentTiddler>get[icon]] }}}/><$transclude field="name"/>'' - <$transclude field="description"/> + </$link> + </div> + </$list-empty> + <div class={{{ [layout.filter[]then[tc-chooser-item tc-chosen]else[tc-chooser-item]] }}}> + <$link to={{!!title}} role="option" aria-selected={{{ [layout.filter[]then[true]else[false]] }}}> + ''<$transclude tiddler={{{ [<currentTiddler>get[icon]] }}}/><$transclude field="name"/>'' - <$transclude field="description"/> + </$link> + </div> + </$list> </$list> </div> </$linkcatcher> diff --git a/core/ui/PageTemplate/alerts.tid b/core/ui/PageTemplate/alerts.tid index ce1b93db9a..339f642366 100644 --- a/core/ui/PageTemplate/alerts.tid +++ b/core/ui/PageTemplate/alerts.tid @@ -1,8 +1,8 @@ title: $:/core/ui/PageTemplate/alerts tags: $:/tags/PageTemplate -<div class="tc-alerts"> +<div class="tc-alerts" role="region" aria-label="Alerts"> -<$list filter="[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]" template="$:/core/ui/AlertTemplate" storyview="pop"/> +<$list filter="[all[shadows+tiddlers]tag[$:/tags/Alert]!is[draft]]" template="$:/core/ui/AlertTemplate" storyview="pop"/> </div> diff --git a/core/ui/SideBar/Tools.tid b/core/ui/SideBar/Tools.tid index 8a123b1c79..98b11b3a8f 100644 --- a/core/ui/SideBar/Tools.tid +++ b/core/ui/SideBar/Tools.tid @@ -2,31 +2,26 @@ title: $:/core/ui/SideBar/Tools tags: $:/tags/SideBar caption: {{$:/language/SideBar/Tools/Caption}} -\define lingo-base() $:/language/ControlPanel/ -\define config-title() -$:/config/PageControlButtons/Visibility/$(listItem)$ -\end +\whitespace trim -<<lingo Basics/Version/Prompt>> <<version>> +\procedure lingo-base() $:/language/ControlPanel/ +\function config-title() [[$:/config/PageControlButtons/Visibility/$(listItem)$]substitute[]] -<$set name="tv-config-toolbar-icons" value="yes"> +<<lingo Basics/Version/Prompt>><span class="tc-tiny-gap-left"><<version>></span> -<$set name="tv-config-toolbar-text" value="yes"> - -<$set name="tv-config-toolbar-class" value=""> - -<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem"> - -<div style="position:relative;" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}> - -<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show"/> <$transclude tiddler=<<listItem>>/> <i class="tc-muted"><$transclude tiddler=<<listItem>> field="description"/></i> - -</div> - -</$list> - -</$set> - -</$set> - -</$set> +<$let tv-config-toolbar-icons="yes" + tv-config-toolbar-text="yes" + tv-config-toolbar-class="" +> + <$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem"> + <div class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] tc-sidebar-tools-item +[join[ ]] }}} + data-title=<<listItem>> + > + <$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show" class="tc-tiny-gap-right"/> + <$transclude $tiddler=<<listItem>>/> + <i class="tc-tiny-gap-left tc-muted"> + <$transclude $tiddler=<<listItem>> $field="description"/> + </i> + </div> + </$list> +</$let> diff --git a/core/ui/SideBarSegments/search.tid b/core/ui/SideBarSegments/search.tid index d4aa7923f8..2af442281f 100644 --- a/core/ui/SideBarSegments/search.tid +++ b/core/ui/SideBarSegments/search.tid @@ -46,13 +46,21 @@ tags: $:/tags/SideBarSegment \procedure advanced-search-actions() <$action-setfield $tiddler="$:/temp/advancedsearch" text={{$:/temp/search/input}}/><$action-setfield $tiddler="$:/temp/advancedsearch/input" text={{$:/temp/search/input}}/><<delete-state-tiddlers>><$action-navigate $to="$:/AdvancedSearch"/><$action-setfield $tiddler="$:/temp/advancedsearch/refresh" text="yes"/><$action-sendmessage $message="tm-focus-selector" $param="""[data-tiddler-title="$:/AdvancedSearch"] .tc-search input""" preventScroll="true"/><$action-deletetiddler $filter="$:/temp/search $:/temp/search/input $:/temp/search/refresh [<searchListState>]"/> +\procedure input-actions() +<%if [<event-key-descriptor>match[((input-tab-right))]] %> +<<set-next-input-tab>> +<%elseif [<event-key-descriptor>match[((input-tab-left))]] %> +<<set-previous-input-tab>> +<%elseif [<event-key-descriptor>match[((advanced-search-sidebar))]] %> +<<advanced-search-actions>> +<%endif%> +\end + <div class="tc-sidebar-lists tc-sidebar-search"> <$vars editTiddler="$:/temp/search" searchTiddler="$:/temp/search/input" searchListState=<<qualify "$:/state/search-list/selected-item">>> <div class="tc-search"> -<$keyboard key="((input-tab-right))" actions=<<set-next-input-tab>>> -<$keyboard key="((input-tab-left))" actions=<<set-previous-input-tab>>> -<$keyboard key="((advanced-search-sidebar))" actions=<<advanced-search-actions>>> +<$keyboard key="((input-tab-right)) ((input-tab-left)) ((advanced-search-sidebar))" actions=<<input-actions>>> <form class="tc-form-inline"> <$transclude $variable="keyboard-driven-input" tiddler=<<editTiddler>> storeTitle=<<searchTiddler>> selectionStateTitle=<<searchListState>> refreshTitle="$:/temp/search/refresh" type="search" @@ -62,8 +70,6 @@ tags: $:/tags/SideBarSegment configTiddlerFilter="[[$:/state/search/currentTab]!is[missing]get[text]] :else[{$:/config/SearchResults/Default}]"/> </form> </$keyboard> -</$keyboard> -</$keyboard> <$reveal state=<<searchTiddler>> type="nomatch" text=""> <$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class="tc-btn-invisible"> <<advanced-search-actions>> diff --git a/core/ui/ViewTemplate/title.tid b/core/ui/ViewTemplate/title.tid index b2cf1bd8e9..56b92efe84 100644 --- a/core/ui/ViewTemplate/title.tid +++ b/core/ui/ViewTemplate/title.tid @@ -2,7 +2,7 @@ title: $:/core/ui/ViewTemplate/title tags: $:/tags/ViewTemplate \whitespace trim -\define title-styles() fill:$(foregroundColor)$; +\define title-styles() color:$(foregroundColor)$; <div class="tc-tiddler-title tc-clearfix"> <div class="tc-titlebar"> diff --git a/core/ui/WikiInformation.tid b/core/ui/WikiInformation.tid new file mode 100644 index 0000000000..8b959d61db --- /dev/null +++ b/core/ui/WikiInformation.tid @@ -0,0 +1,122 @@ +title: $:/core/ui/ControlPanel/WikiInformation +tags: $:/tags/ControlPanel/Info +caption: <%if [[$:/language/ControlPanel/WikiInformation/Caption]is[shadow]] %>{{$:/language/ControlPanel/WikiInformation/Caption}}<%else%>Wiki Information<%endif%> +subtitle: <%if [[$:/language/ControlPanel/WikiInformation/Caption]is[shadow]] %>{{$:/language/ControlPanel/WikiInformation/Caption}}<%else%>Wiki Information<%endif%> + +\procedure lingo-base() $:/language/ControlPanel/WikiInformation/ + +<!-- +A custom implementation of the lingo macro that works even if this tiddler has been copied to an earlier version of TiddlyWiki that doesn't include the necessary lingo tiddlers in the core. +--> + +\procedure intrinsic-lingo-Hint() +This page summarises high level information about the configuration of this ~TiddlyWiki. It is designed to enable users to quickly share relevant aspects of the configuration of their ~TiddlyWiki with others, for example when seeking help in one of the forums. No private or personal information is included, and nothing is shared without being explicitly copied and pasted elsewhere +\end intrinsic-lingo-Hint + +\procedure intrinsic-lingo-Drag/Caption() +Drag this link to copy this tool to another wiki +\end intrinsic-lingo-Drag/Caption + +\procedure lingo(title,mode:"inline") +<%if [<title>addprefix<lingo-base>is[shadow]] %> + <$transclude $tiddler={{{ [<title>addprefix<lingo-base>] }}} $mode=<<mode>>/> +<%else%> + <$transclude $variable={{{ [<title>addprefix[intrinsic-lingo-]] }}} $mode=<<mode>>/> +<%endif%> +\end lingo + +\whitespace trim + +\procedure capture-item(label,value) +<$action-setfield $tiddler=<<tempWikiInfo>> text={{{ [<tempWikiInfo>get[text]addsuffix<label>addsuffix[: ]addsuffix<value>addsuffix<crlf>] }}}/> +\end capture-item + +\procedure capture-item-wikified(label,value) +<$wikify name="text" text=<<value>> mode="inline"> + <$transclude + $variable="capture-item" + label=<<label>> + value=<<text>> + /> +</$wikify> +\end capture-item-wikified + +\procedure capture-wiki-info(tempWikiInfo) +<$transclude $variable="capture-item-wikified" label="TiddlyWiki Version" value="<<version>>"/> +<$transclude $variable="capture-item" label="Current palette" value={{$:/palette}}/> +<$transclude $variable="capture-item" label="Current theme" value={{$:/theme}}/> +<$transclude $variable="capture-item" label="Current layout" value={{$:/layout}}/> +<$transclude $variable="capture-item" label="Browser language setting" value={{$:/info/browser/language}}/> +<$transclude $variable="capture-item" label="Default type for missing tiddlers" value={{$:/config/DefaultMissingType}}/> +<$transclude $variable="capture-item" label="Auto save setting" value={{$:/config/AutoSave}}/> +<$transclude $variable="capture-item" label="Code wrapping setting" value={{$:/themes/tiddlywiki/vanilla/options/codewrapping}}/> +<$transclude $variable="capture-item" label="Sticky titles setting" value={{$:/themes/tiddlywiki/vanilla/options/stickytitles}}/> +<$transclude $variable="capture-item" label="Sidebar layout setting" value={{$:/themes/tiddlywiki/vanilla/options/sidebarlayout}}/> +<$transclude $variable="capture-item" label="Auto focus field setting for new tiddlers" value={{$:/config/AutoFocus}}/> +<$transclude $variable="capture-item" label="Current storyview setting" value={{$:/view}}/> +<$transclude $variable="capture-item" label="Toolbar text setting" value={{$:/config/Toolbar/Text}}/> +<$transclude $variable="capture-item" label="Toolbar icon setting" value={{$:/config/Toolbar/Icons}}/> +<$transclude $variable="capture-item" label="Button class setting" value={{$:/config/Toolbar/ButtonClass}}/> +<$transclude $variable="capture-item" label="Navigation address bar setting" value={{$:/config/Navigation/UpdateAddressBar}}/> +<$transclude $variable="capture-item" label="Tiddler opening behaviour setting for navigations from outside the story river" value={{$:/config/Navigation/openLinkFromOutsideRiver}}/> +<$transclude $variable="capture-item" label="Tiddler opening behaviour setting for navigations from within the story river" value={{$:/config/Navigation/openLinkFromInsideRiver}}/> +<$transclude $variable="capture-item" label="CamelCase linking setting" value={{$:/config/WikiParserRules/Inline/wikilink}}/> +<$transclude $variable="capture-item" label="Keyboard shortcuts that have been customised" value={{{ [all[tiddlers]prefix[$:/config/shortcuts]] +[join[,]] }}}/> +<$transclude $variable="capture-item" label="Disabled plugins" value={{{ [all[tiddlers]prefix[$:/config/Plugins/Disabled/]] :filter[{!!text}match[yes]] :map[<currentTiddler>removeprefix[$:/config/Plugins/Disabled/]] +[join[,]] }}}/> +<$transclude $variable="capture-item" label="Plugins" value={{{ [has[plugin-type]sort[]] :filter[<currentTiddler>addprefix[$:/config/Plugins/Disabled/]get[text]else[no]!match[yes]] :map[{!!version}addprefix[ - ]addprefix<currentTiddler>] +[addprefix[ ]addprefix<crlf>join[]] }}}/> +\end capture-wiki-info + +\procedure template-header() +<details><summary>Wiki Information</summary><pre><code> + +\end template-header + +\procedure template-footer() + +</code></pre></details> +\end template-footer + +\procedure display-wiki-info-modal() +<$let + tempWikiInfo="$:/temp/wiki-info" + crlf={{{ [charcode[13],[10]] }}} +> + <$action-sendmessage + $message="tm-modal" + $param="$:/core/ui/ControlPanel/WikiInformation" + isModal="yes" + tempWikiInfo=<<tempWikiInfo>> + /> + <$action-deletetiddler $tiddler=<<tempWikiInfo>>/> + <$action-setfield $tiddler=<<tempWikiInfo>> text=<<template-header>>/> + <$transclude + $variable="capture-wiki-info" + tempWikiInfo=<<tempWikiInfo>> + /> + <$action-setfield $tiddler=<<tempWikiInfo>> text={{{ [<tempWikiInfo>get[text]addsuffix<template-footer>] }}}/> +</$let> +\end display-wiki-info-modal + +\procedure story-content() +<<lingo title:"Hint" mode:"block">> + +<$button> +<<display-wiki-info-modal>> +Click to generate wiki information report +</$button> + +<$link to="$:/core/ui/ControlPanel/WikiInformation"> +<<lingo title:"Drag/Caption" mode:"inline">> +</$link> +\end story-content + +\procedure modal-content() +<p> + <$transclude $variable="copy-to-clipboard" src={{{ [<tempWikiInfo>get[text]] }}}/> +</p> +<p> + <$edit-text tiddler=<<tempWikiInfo>> tag="textarea" disabled="yes" class="tc-max-width"/> +</p> +\end modal-content + +<$transclude $variable={{{ [<isModal>match[yes]then[modal-content]else[story-content]] }}} $mode="block"/> diff --git a/core/wiki/config/OfficialPluginLibrary.tid b/core/wiki/config/OfficialPluginLibrary.tid index 88fd39abe7..bb55927a30 100644 --- a/core/wiki/config/OfficialPluginLibrary.tid +++ b/core/wiki/config/OfficialPluginLibrary.tid @@ -1,6 +1,6 @@ title: $:/config/OfficialPluginLibrary tags: $:/tags/PluginLibrary -url: https://tiddlywiki.com/library/v5.3.7/index.html +url: https://tiddlywiki.com/library/v5.4.0/index.html caption: {{$:/language/OfficialPluginLibrary}} {{$:/language/OfficialPluginLibrary/Hint}} diff --git a/core/wiki/config/TiddlerInfoMode.tid b/core/wiki/config/TiddlerInfoMode.tid index 80947122b4..080165e0b5 100644 --- a/core/wiki/config/TiddlerInfoMode.tid +++ b/core/wiki/config/TiddlerInfoMode.tid @@ -1,2 +1,2 @@ title: $:/config/TiddlerInfo/Mode -text: popup \ No newline at end of file +text: sticky \ No newline at end of file diff --git a/core/wiki/languageswitcher.tid b/core/wiki/languageswitcher.tid index 7d79c0f5c4..a3c5ca97f2 100644 --- a/core/wiki/languageswitcher.tid +++ b/core/wiki/languageswitcher.tid @@ -1,20 +1,20 @@ title: $:/snippets/languageswitcher \whitespace trim +\function language.filter() [all[current]field:title{$:/language}] + <$linkcatcher to="$:/language"> -<div class="tc-chooser tc-language-chooser"> +<div class="tc-chooser tc-language-chooser" role="listbox"> <$list filter="[[$:/languages/en-GB]] [plugin-type[language]sort[description]]"> -<$set name="cls" filter="[all[current]field:title{$:/language}]" value="tc-chooser-item tc-chosen" emptyValue="tc-chooser-item"> -<div class=<<cls>> lang={{!!name}}> -<$link> -<$view field="description"> -<$view field="name"> -<$view field="title"/> -</$view> -</$view> -</$link> -</div> -</$set> + <div class={{{ [language.filter[]then[tc-chooser-item tc-chosen]else[tc-chooser-item]] }}} lang={{!!name}}> + <$link role="option" aria-selected={{{ [language.filter[]then[true]else[false]] }}}> + <$view field="description"> + <$view field="name"> + <$view field="title"/> + </$view> + </$view> + </$link> + </div> </$list> </div> </$linkcatcher> \ No newline at end of file diff --git a/core/wiki/macros/colour-picker.tid b/core/wiki/macros/colour-picker.tid index 3c37dc9b5a..7a607a5512 100644 --- a/core/wiki/macros/colour-picker.tid +++ b/core/wiki/macros/colour-picker.tid @@ -1,55 +1,58 @@ title: $:/core/macros/colour-picker tags: $:/tags/Macro -\procedure colour-picker-update-recent() +\define colour-picker-update-recent() <$action-listops $tiddler="$:/config/ColourPicker/Recent" - $subfilter="[<colour-picker-value>] [list[$:/config/ColourPicker/Recent]remove<colour-picker-value>] +[limit[8]]" + $subfilter="$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]" /> \end -\procedure colour-picker-inner(actions) -<$button tag="a" tooltip=<<colour-picker-value>>> -<<colour-picker-update-recent>> -<$transclude $variable="actions"/> -<span style.display="inline-block" style.backgroundColor=<<colour-picker-value>> style.width="100%" style.height="100%" style.borderRadius="50%"/> +\define colour-picker-inner(actions) +<$button tag="a" tooltip="""$(colour-picker-value)$"""> +$(colour-picker-update-recent)$ +<$transclude $variable="__actions__"/> + +<span style="display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;"/> + </$button> \end +\define colour-picker-recent-inner(actions) \whitespace trim -\procedure colour-picker-recent-inner(actions) -<$set name="colour-picker-value" value=<<recentColour>>> -<$transclude $variable="colour-picker-inner" actions=<<actions>>/> +<$set name="colour-picker-value" value="$(recentColour)$"> +<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/> </$set> \end -\procedure colour-picker-recent(actions) +\define colour-picker-recent(actions) +\whitespace trim {{$:/language/ColourPicker/Recent}}<$list filter="[list[$:/config/ColourPicker/Recent]]" variable="recentColour"> -<$transclude $variable="colour-picker-recent-inner" actions=<<actions>>/> +<$macrocall $name="colour-picker-recent-inner" actions=<<__actions__>>/> </$list> \end -\procedure colour-picker(actions) +\define colour-picker(actions) +\whitespace trim <div class="tc-colour-chooser"> -<$transclude $variable="colour-picker-recent" actions=<<actions>>/> +<$macrocall $name="colour-picker-recent" actions=<<__actions__>>/> --- <$list filter="LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black" variable="colour-picker-value"> -<$transclude $variable="colour-picker-inner" actions=<<actions>>/> +<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/> </$list> --- -<$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder="" class="tc-tiny-gap-right"/> +<$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder=""/> + <$edit-text tiddler="$:/config/ColourPicker/New" type="color" tag="input"/> <$set name="colour-picker-value" value={{$:/config/ColourPicker/New}}> -<%if [{$:/config/ColourPicker/New}!is[blank]] %> -<$transclude $variable="colour-picker-inner" actions=<<actions>>/> -<%endif%> +<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/> </$set> </div> diff --git a/core/wiki/macros/copy-to-clipboard.tid b/core/wiki/macros/copy-to-clipboard.tid index f299cf955d..d05d014e2c 100644 --- a/core/wiki/macros/copy-to-clipboard.tid +++ b/core/wiki/macros/copy-to-clipboard.tid @@ -3,11 +3,9 @@ tags: $:/tags/Macro \whitespace trim -\procedure copy-to-clipboard(src,class:"tc-btn-invisible",style,type:"text/plain",plain) -\procedure copy-to-clipboard-actions() -<$action-sendmessage $message="tm-copy-to-clipboard" $param=<<src>> type=<<type>> plainText=<<plain>>/> -\end copy-to-clipboard-actions -<$button actions=<<copy-to-clipboard-actions>> +\procedure copy-to-clipboard(src,class:"tc-btn-invisible",style) +<$button message="tm-copy-to-clipboard" + param=<<src>> class=<<class>> style=<<style>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}} @@ -17,12 +15,12 @@ tags: $:/tags/Macro <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/> </span> </$button> -\end copy-to-clipboard +\end -\procedure copy-to-clipboard-above-right(src,class:"tc-btn-invisible",style,type:"text/plain") -<div style.position="relative"> - <div style.position="absolute" style.bottom="0" style.right="0"> - <$transclude $variable="copy-to-clipboard" src=<<src>> class=<<class>> style=<<style>> type=<<type>> plain=<<plain>>/> +\procedure copy-to-clipboard-above-right(src,class:"tc-btn-invisible",style) +<div style="position: relative;"> + <div style="position: absolute; bottom: 0; right: 0;"> + <$macrocall $name="copy-to-clipboard" src=<<src>> class=<<class>> style=<<style>>/> </div> </div> \end diff --git a/core/wiki/macros/dumpvariables.tid b/core/wiki/macros/dumpvariables.tid index 835cddabe0..0ab9e20010 100644 --- a/core/wiki/macros/dumpvariables.tid +++ b/core/wiki/macros/dumpvariables.tid @@ -1,7 +1,7 @@ title: $:/core/macros/dumpvariables tags: $:/tags/Macro -\procedure dumpvariables() +\define dumpvariables() \whitespace trim <ul> <$list filter="[variables[]]" variable="varname"> diff --git a/core/wiki/macros/image-picker.tid b/core/wiki/macros/image-picker.tid index 5bda45bcae..5f09ced0db 100644 --- a/core/wiki/macros/image-picker.tid +++ b/core/wiki/macros/image-picker.tid @@ -1,36 +1,39 @@ +created: 20170715180840889 +modified: 20170715180914005 tags: $:/tags/Macro title: $:/core/macros/image-picker type: text/vnd.tiddlywiki -\procedure image-picker-thumbnail(actions) -<$button tag="a" tooltip=<<imageTitle>>><$transclude $variable="actions"/><$transclude tiddler=<<imageTitle>>/></$button> +\define image-picker-thumbnail(actions) +<$button tag="a" tooltip="""$(imageTitle)$"""><$transclude $variable="__actions__"/><$transclude tiddler=<<imageTitle>>/></$button> \end -\procedure image-picker-list(filter,actions) +\define image-picker-list(filter,actions) \whitespace trim -<$list filter=<<filter>> variable="imageTitle"> -<$transclude $variable="image-picker-thumbnail" actions=<<actions>>/> +<$list filter="""$filter$""" variable="imageTitle"> +<$macrocall $name="image-picker-thumbnail" actions=<<__actions__>>/> </$list> \end -\procedure image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]",subfilter:"") +\define image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]",subfilter:"") \whitespace trim <div class="tc-image-chooser"> -<$let state-system=<<qualify "$:/state/image-picker/system">> tv-filter={{{ [<filter>search-replace[$subfilter$],<subfilter>] }}}> +<$vars state-system=<<qualify "$:/state/image-picker/system">>> <$checkbox tiddler=<<state-system>> field="text" checked="show" unchecked="hide" default="hide"> -<span class="tc-tiny-gap-left">{{$:/language/SystemTiddlers/Include/Prompt}}</span> + +{{$:/language/SystemTiddlers/Include/Prompt}} </$checkbox> <$reveal state=<<state-system>> type="match" text="hide" default="hide" tag="div"> -<$transclude $variable="image-picker-list" filter=`$(tv-filter)$ +[!is[system]]` actions=<<actions>>/> +<$macrocall $name="image-picker-list" filter="""$filter$ +[!is[system]]""" actions=<<__actions__>>/> </$reveal> <$reveal state=<<state-system>> type="nomatch" text="hide" default="hide" tag="div"> -<$transclude $variable="image-picker-list" filter=<<tv-filter>> actions=<<actions>>/> +<$macrocall $name="image-picker-list" filter="""$filter$""" actions=<<__actions__>>/> </$reveal> -</$let> +</$vars> </div> \end -\procedure image-picker-include-tagged-images(actions) -<$transclude $variable="image-picker" filter="[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]" actions=<<actions>>/> +\define image-picker-include-tagged-images(actions) +<$macrocall $name="image-picker" filter="[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]" actions=<<__actions__>>/> \end diff --git a/core/wiki/macros/keyboard-driven-input.tid b/core/wiki/macros/keyboard-driven-input.tid index 5d28f1125c..a514f4c133 100644 --- a/core/wiki/macros/keyboard-driven-input.tid +++ b/core/wiki/macros/keyboard-driven-input.tid @@ -120,11 +120,21 @@ tags: $:/tags/Macro \procedure keyboard-driven-input(tiddler,storeTitle,field:"text",index:"",tag:"input",type,focus:"",inputAcceptActions,inputAcceptVariantActions,inputCancelActions,placeholder:"",default:"",class,focusPopup,rows,minHeight,tabindex,size,autoHeight,filterMinLength:"0",refreshTitle,selectionStateTitle,cancelPopups:"",configTiddlerFilter,firstSearchFilterField:"first-search-filter",secondSearchFilterField:"second-search-filter") \whitespace trim -<$keyboard key="((input-accept))" actions=<<inputAcceptActions>>> -<$keyboard key="((input-accept-variant))" actions=<<inputAcceptVariantActions>>> -<$keyboard key="((input-up))" actions=<<input-next-actions-before>>> -<$keyboard key="((input-down))" actions=<<input-next-actions-after>>> -<$keyboard key="((input-cancel))" actions=<<inputCancelActions>>> +\procedure keyboard-driven-input-actions() +<%if [<event-key-descriptor>match[((input-accept))]] %> +<<inputAcceptActions>> +<%elseif [<event-key-descriptor>match[((input-accept-variant))]] %> +<<inputAcceptVariantActions>> +<%elseif [<event-key-descriptor>match[((input-up))]] %> +<<input-next-actions-before>> +<%elseif [<event-key-descriptor>match[((input-down))]] %> +<<input-next-actions-after>> +<%elseif [<event-key-descriptor>match[((input-cancel))]] %> +<<inputCancelActions>> +<%endif%> +\end keyboard-driven-input-actions + +<$keyboard key="((input-accept)) ((input-accept-variant)) ((input-up)) ((input-down)) ((input-cancel))" actions=<<keyboard-driven-input-actions>>> <$edit-text tiddler=<<tiddler>> field=<<field>> index=<<index>> inputActions=<<keyboard-input-actions>> tag=<<tag>> class=<<class>> @@ -134,8 +144,4 @@ tags: $:/tags/Macro refreshTitle=<<refreshTitle>> cancelPopups=<<cancelPopups>> /> </$keyboard> -</$keyboard> -</$keyboard> -</$keyboard> -</$keyboard> -\end +\end keyboard-driven-input diff --git a/core/wiki/macros/list.tid b/core/wiki/macros/list.tid index 4019e6617a..d4b0b0a0cb 100644 --- a/core/wiki/macros/list.tid +++ b/core/wiki/macros/list.tid @@ -1,18 +1,14 @@ title: $:/core/macros/list tags: $:/tags/Macro -\procedure list-links-draggable-drop-actions() -<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/> -\end - +\define list-links(filter,type:"ul",subtype:"li",class:"",emptyMessage,field:"caption") \whitespace trim -\procedure list-links(filter,type:"ul",subtype:"li",class:"",emptyMessage,field:"caption") -<$genesis $type=<<type>> class=<<class>>> - <$list filter=<<filter>> emptyMessage=<<emptyMessage>>> - <$genesis $type=<<subtype>>> +<$genesis $type=<<__type__>> class=<<__class__>>> + <$list filter=<<__filter__>> emptyMessage=<<__emptyMessage__>>> + <$genesis $type=<<__subtype__>>> <$link to={{!!title}}> <$let tv-wikilinks="no"> - <$transclude field=<<field>>> + <$transclude field=<<__field__>>> <$view field="title"/> </$transclude> </$let> @@ -22,91 +18,99 @@ tags: $:/tags/Macro </$genesis> \end -\procedure list-links-draggable(tiddler,field:"list",emptyMessage,type:"ul",subtype:"li",class:"",itemTemplate) -<span class="tc-links-draggable-list"> - <$let targetTiddler=<<tiddler>> targetField=<<field>>> - <$genesis $type=<<type>> class=<<class>>> - <$list filter="[<tiddler>get<field>enlist-input[]]" emptyMessage=<<emptyMessage>>> - <$droppable - actions=<<list-links-draggable-drop-actions>> - tag=<<subtype>> - enable=<<tv-enable-drag-and-drop>> - > - <div class="tc-droppable-placeholder"/> - <div> - <$transclude tiddler=<<itemTemplate>>> - <$link to={{!!title}}> - <$let tv-wikilinks="no"> - <$transclude field="caption"> - <$view field="title"/> - </$transclude> - </$let> - </$link> - </$transclude> - </div> - </$droppable> - </$list> - <$tiddler tiddler=""> - <$droppable - actions=<<list-links-draggable-drop-actions>> - tag="div" - enable=<<tv-enable-drag-and-drop>> - > - <div class="tc-droppable-placeholder"> - {{$:/core/images/blank}} - </div> - <div style="height:0.5em;"/> - </$droppable> - </$tiddler> - </$genesis> - </$let> -</span> +\define list-links-draggable-drop-actions() +<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/> \end -\procedure list-tagged-draggable-drop-actions(tag) +\define list-links-draggable(tiddler,field:"list",emptyMessage,type:"ul",subtype:"li",class:"",itemTemplate) +\whitespace trim +<$set name="_tiddler" value="""$tiddler$""" emptyValue=<<currentTiddler>> > + <$let field-reference={{{ [<_tiddler>] "!!" [[$field$]] +[join[]] }}} + targetTiddler=<<_tiddler>> + targetField="""$field$""" + > + <span class="tc-links-draggable-list"> + <$genesis $type=<<__type__>> class="$class$"> + <$list filter="[list<field-reference>]" emptyMessage=<<__emptyMessage__>>> + <$droppable + actions=<<list-links-draggable-drop-actions>> + tag="""$subtype$""" + enable=<<tv-enable-drag-and-drop>> + > + <div class="tc-droppable-placeholder"/> + <div> + <$transclude tiddler="""$itemTemplate$"""> + <$link to={{!!title}}> + <$let tv-wikilinks="no"> + <$transclude field="caption"> + <$view field="title"/> + </$transclude> + </$let> + </$link> + </$transclude> + </div> + </$droppable> + </$list> + <$tiddler tiddler=""> + <$droppable + actions=<<list-links-draggable-drop-actions>> + tag="div" + enable=<<tv-enable-drag-and-drop>> + > + <div class="tc-droppable-placeholder"> + {{$:/core/images/blank}} + </div> + <div style="height:0.5em;"/> + </$droppable> + </$tiddler> + </$genesis> + </span> + </$let> +</$set> +\end + +\define list-tagged-draggable-drop-actions(tag) +\whitespace trim <!-- Save the current ordering of the tiddlers with this tag --> -<$set name="order" filter="[<tag>tagging[]]"> +<$set name="order" filter="[<__tag__>tagging[]]"> <!-- Remove any list-after or list-before fields from the tiddlers with this tag --> - <$list filter="[<tag>tagging[]]"> + <$list filter="[<__tag__>tagging[]]"> <$action-deletefield $field="list-before"/> <$action-deletefield $field="list-after"/> </$list> <!-- Save the new order to the Tag Tiddler --> - <$action-listops $tiddler=<<tag>> $field="list" $filter="+[enlist<order>] +[insertbefore<actionTiddler>,<currentTiddler>]"/> + <$action-listops $tiddler=<<__tag__>> $field="list" $filter="+[enlist<order>] +[insertbefore<actionTiddler>,<currentTiddler>]"/> <!-- Make sure the newly added item has the right tag --> <!-- Removing this line makes dragging tags within the dropdown work as intended --> - <!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<tag>>/>--> + <!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>--> <!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag --> - <$list filter="[<actionTiddler>!contains:tags<tag>]"> + <$list filter="[<actionTiddler>!contains:tags<__tag__>]"> <$fieldmangler tiddler=<<actionTiddler>>> - <$action-sendmessage $message="tm-add-tag" $param=<<tag>>/> + <$action-sendmessage $message="tm-add-tag" $param=<<__tag__>>/> </$fieldmangler> </$list> </$set> \end -\procedure list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:"div",storyview:"") +\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:"div",storyview:"") +\whitespace trim <span class="tc-tagged-draggable-list"> - <$set name="tag" value=<<tag>>> + <$set name="tag" value=<<__tag__>>> <$list - filter=`[<tag>tagging[]$(subFilter)$]` - emptyMessage=<<emptyMessage>> - storyview=<<storyview>> + filter="[<__tag__>tagging[]$subFilter$]" + emptyMessage=<<__emptyMessage__>> + storyview=<<__storyview__>> > - <$genesis $type=<<elementTag>> class="tc-menu-list-item"> + <$genesis $type=<<__elementTag__>> class="tc-menu-list-item"> <$droppable - actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<tag>>/>""" + actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>""" enable=<<tv-enable-drag-and-drop>> > - <$genesis $type=<<elementTag>> class="tc-droppable-placeholder"/> - <$genesis $type=<<elementTag>>> - <$transclude tiddler=<<itemTemplate>>> + <$genesis $type=<<__elementTag__>> class="tc-droppable-placeholder"/> + <$genesis $type=<<__elementTag__>>> + <$transclude tiddler="""$itemTemplate$"""> <$link to={{!!title}}> - <$let tv-wikilinks="no"> - <$transclude field="caption"> - <$view field="title"/> - </$transclude> - </$let> + <$view field="title"/> </$link> </$transclude> </$genesis> @@ -115,11 +119,11 @@ tags: $:/tags/Macro </$list> <$tiddler tiddler=""> <$droppable - actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<tag>>/>""" + actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>""" enable=<<tv-enable-drag-and-drop>> > - <$genesis $type=<<elementTag>> class="tc-droppable-placeholder"/> - <$genesis $type=<<elementTag>> style="height:0.5em;"/> + <$genesis $type=<<__elementTag__>> class="tc-droppable-placeholder"/> + <$genesis $type=<<__elementTag__>> style="height:0.5em;"/> </$droppable> </$tiddler> </$set> diff --git a/core/wiki/macros/tag.tid b/core/wiki/macros/tag.tid index 2c539b42ef..1424036028 100644 --- a/core/wiki/macros/tag.tid +++ b/core/wiki/macros/tag.tid @@ -3,7 +3,6 @@ tags: $:/tags/Macro \define tag-pill-styles() background-color:$(backgroundColor)$; -fill:$(foregroundColor)$; color:$(foregroundColor)$; \end diff --git a/core/wiki/macros/thumbnails.tid b/core/wiki/macros/thumbnails.tid index 213b6520c5..83e03b906c 100644 --- a/core/wiki/macros/thumbnails.tid +++ b/core/wiki/macros/thumbnails.tid @@ -21,7 +21,7 @@ tags: $:/tags/Macro style="width:$width$px;height:$height$px;background-color:$background-color$;" ></$reveal></div><div class="tc-thumbnail-icon" - style="fill:$color$;color:$color$;" + style="color:$color$;" >$icon$</div><div class="tc-thumbnail-caption">$caption$</div></div></$link> \end diff --git a/core/wiki/macros/translink.tid b/core/wiki/macros/translink.tid index 34faaa7815..9cc4654228 100644 --- a/core/wiki/macros/translink.tid +++ b/core/wiki/macros/translink.tid @@ -1,28 +1,28 @@ title: $:/core/macros/translink tags: $:/tags/Macro -\procedure translink(title,mode:"block") +\define translink(title,mode:"block") \whitespace trim -<%if [<mode>match[block]] %> +<$list filter="[<__mode__>match[block]]"> <div class="tc-translink"> <div> -<$link to=<<title>>> -<h1><$text text=<<title>>/></h1> +<$link to="""$title$"""> +<h1><$text text="""$title$"""/></h1> </$link> -<$transclude tiddler=<<title>> mode="block"> -<$set name="currentTiddler" value=<<title>>><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set> +<$transclude tiddler="""$title$""" mode="block"> +<$set name="currentTiddler" value="""$title$"""><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set> </$transclude> </div> </div> -<%endif%> -<%if [<mode>match[inline]] %> +</$list> +<$list filter="[<__mode__>match[inline]]"> <span class="tc-translink"> -<$link to=<<title>> class="tc-tiny-gap-right"> -<$text text=<<title>>/> +<$link to="""$title$"""> +<$text text="""$title$"""/> </$link> -(<$transclude tiddler=<<title>> mode="inline"> -<$set name="currentTiddler" value=<<title>>><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set> + (<$transclude tiddler="""$title$""" mode="inline"> +<$set name="currentTiddler" value="""$title$"""><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set> </$transclude>) </span> -<%endif%> +</$list> \end diff --git a/core/wiki/macros/tree.tid b/core/wiki/macros/tree.tid index 0d6d67b963..f73bd54fd0 100644 --- a/core/wiki/macros/tree.tid +++ b/core/wiki/macros/tree.tid @@ -1,58 +1,62 @@ title: $:/core/macros/tree tags: $:/tags/Macro -\procedure leaf-link(full-title,chunk,separator: "/") -<$link to=<<full-title>>><$text text=<<chunk>>/></$link> +\define leaf-link(full-title,chunk,separator: "/") +<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link> \end +\define leaf-node(prefix,chunk) \whitespace trim -\procedure leaf-node(prefix,chunk) <li> -<$list filter="[<prefix>addsuffix<chunk>is[shadow]] [<prefix>addsuffix<chunk>is[tiddler]]" variable="full-title"> -<$list filter="[<full-title>removeprefix<prefix>]" variable="chunk"> -<span class="tc-tiny-gap-right">{{$:/core/images/file}}</span><$transclude $variable="leaf-link" full-title=<<full-title>> chunk=<<chunk>>/> +<$list filter="[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]" variable="full-title"> +<$list filter="[<full-title>removeprefix<__prefix__>]" variable="chunk"> +<span>{{$:/core/images/file}}</span> <$macrocall $name="leaf-link" full-title=<<full-title>> chunk=<<chunk>>/> </$list> </$list> </li> \end -\procedure branch-node(prefix,chunk,separator: "/") +\define branch-node(prefix,chunk,separator: "/") +\whitespace trim <li> -<$set name="reveal-state" value={{{ [[$:/state/tree/]addsuffix<prefix>addsuffix<chunk>] }}}> +<$set name="reveal-state" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}> <$reveal type="nomatch" stateTitle=<<reveal-state>> text="show"> <$button setTitle=<<reveal-state>> setTo="show" class="tc-btn-invisible"> -{{$:/core/images/folder}} <$text text=<<chunk>>/> +{{$:/core/images/folder}} <$text text=<<__chunk__>>/> </$button> </$reveal> <$reveal type="match" stateTitle=<<reveal-state>> text="show"> <$button setTitle=<<reveal-state>> setTo="hide" class="tc-btn-invisible"> -{{$:/core/images/folder}} <$text text=<<chunk>>/> +{{$:/core/images/folder}} <$text text=<<__chunk__>>/> </$button> </$reveal> -<span class="tc-tiny-gap-left">(<$count filter="[all[shadows+tiddlers]removeprefix<prefix>removeprefix<chunk>] -[<prefix>addsuffix<chunk>]"/>)</span> + +<span>(<$count filter="[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]"/>)</span> <$reveal type="match" stateTitle=<<reveal-state>> text="show"> -<$transclude $variable="tree-node" prefix={{{ [<prefix>addsuffix<chunk>] }}} separator=<<separator>>/> +<$macrocall $name="tree-node" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/> </$reveal> </$set> </li> \end -\procedure tree-node(prefix,separator: "/") +\define tree-node(prefix,separator: "/") +\whitespace trim <ol> -<$list filter="[all[shadows+tiddlers]removeprefix<prefix>splitbefore<separator>sort[]!suffix<separator>]" variable="chunk"> -<$transclude $variable="leaf-node" prefix=<<prefix>> chunk=<<chunk>> separator=<<separator>>/> +<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]" variable="chunk"> +<$macrocall $name="leaf-node" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/> </$list> -<$list filter="[all[shadows+tiddlers]removeprefix<prefix>splitbefore<separator>sort[]suffix<separator>]" variable="chunk"> -<$transclude $variable="branch-node" prefix=<<prefix>> chunk=<<chunk>> separator=<<separator>>/> +<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]" variable="chunk"> +<$macrocall $name="branch-node" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/> </$list> </ol> \end -\procedure tree(prefix: "$:/",separator: "/") +\define tree(prefix: "$:/",separator: "/") +\whitespace trim <div class="tc-tree"> -<span><$text text=<<prefix>>/></span> +<span><$text text=<<__prefix__>>/></span> <div> -<$transclude $variable="tree-node" prefix=<<prefix>> separator=<<separator>>/> +<$macrocall $name="tree-node" prefix=<<__prefix__>> separator=<<__separator__>>/> </div> </div> \end diff --git a/core/wiki/themeswitcher.tid b/core/wiki/themeswitcher.tid index 6259af063f..79f4a09ba6 100644 --- a/core/wiki/themeswitcher.tid +++ b/core/wiki/themeswitcher.tid @@ -1,17 +1,18 @@ title: $:/snippets/themeswitcher \whitespace trim +\function theme.filter() [all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]] + <$linkcatcher to="$:/theme"> -<div class="tc-chooser"> +<div class="tc-chooser" role="listbox"> <$list filter="[plugin-type[theme]sort[title]]"> -<$set name="cls" filter="[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]]" value="tc-chooser-item tc-chosen" emptyValue="tc-chooser-item"> -<div class=<<cls>>><$link to={{!!title}}> -''<$view field="name" format="text"/>'' - -<$view field="description" format="text"/> -</$link> -</div> -</$set> + <div class={{{ [theme.filter[]then[tc-chooser-item tc-chosen]else[tc-chooser-item]] }}}> + <$link to={{!!title}} role="option" aria-selected={{{ [theme.filter[]then[true]else[false]] }}}> + ''<$view field="name" format="text"/>'' + + <$view field="description" format="text"/> + </$link> + </div> </$list> </div> </$linkcatcher> \ No newline at end of file diff --git a/core/wiki/viewswitcher.tid b/core/wiki/viewswitcher.tid index b82fcb2642..1ff289cdfe 100644 --- a/core/wiki/viewswitcher.tid +++ b/core/wiki/viewswitcher.tid @@ -4,13 +4,14 @@ title: $:/snippets/viewswitcher $:/core/images/storyview-$(storyview)$ \end \whitespace trim +\function view.filter() [<storyview>prefix{$:/view}] + <$linkcatcher to="$:/view"> -<div class="tc-chooser tc-viewswitcher"> +<div class="tc-chooser tc-viewswitcher" role="listbox"> <$list filter="[storyviews[]]" variable="storyview"> -<$set name="cls" filter="[<storyview>prefix{$:/view}]" value="tc-chooser-item tc-chosen" emptyValue="tc-chooser-item"><div class=<<cls>>> -<$button tag="a" class="tc-tiddlylink tc-btn-invisible" to=<<storyview>>><$transclude tiddler=<<icon>>/><$text text=<<storyview>>/></$button> +<div class={{{ [view.filter[]then[tc-chooser-item tc-chosen]else[tc-chooser-item]] }}}> +<$button tag="a" class="tc-tiddlylink tc-btn-invisible" role="option" to=<<storyview>> aria-selected={{{ [view.filter[]then[true]else[false]] }}}><$transclude tiddler=<<icon>>/><$text text=<<storyview>>/></$button> </div> -</$set> </$list> </div> </$linkcatcher> diff --git a/editions/codemirrordemo/tiddlers/HelloThere.tid b/editions/codemirrordemo/tiddlers/HelloThere.tid index 11ec8ce0e3..85e3902d86 100644 --- a/editions/codemirrordemo/tiddlers/HelloThere.tid +++ b/editions/codemirrordemo/tiddlers/HelloThere.tid @@ -11,6 +11,7 @@ The ~CodeMirror plugin can be extended with ~AddOns for more functionality: * Keymaps in the style of Emacs, Sublime Text or Vim * Closing Brackets * Closing Tags +* Display trailing whitespace NOTE: This demo has the ''Sublime Text'' keymap installed. diff --git a/editions/codemirrordemo/tiddlywiki.info b/editions/codemirrordemo/tiddlywiki.info index ef71f55c9a..fbcf8d6947 100644 --- a/editions/codemirrordemo/tiddlywiki.info +++ b/editions/codemirrordemo/tiddlywiki.info @@ -8,11 +8,16 @@ "tiddlywiki/codemirror-search-replace", "tiddlywiki/codemirror-fullscreen-editing", "tiddlywiki/codemirror-mode-xml", + "tiddlywiki/codemirror-mode-htmlembedded", + "tiddlywiki/codemirror-mode-htmlmixed", "tiddlywiki/codemirror-mode-javascript", "tiddlywiki/codemirror-mode-css", "tiddlywiki/codemirror-mode-x-tiddlywiki", "tiddlywiki/codemirror-mode-markdown", - "tiddlywiki/codemirror-keymap-sublime-text" + "tiddlywiki/codemirror-trailingspace", + "tiddlywiki/codemirror-keymap-emacs", + "tiddlywiki/codemirror-keymap-sublime-text", + "tiddlywiki/codemirror-keymap-vim" ], "themes": [ "tiddlywiki/vanilla", diff --git a/editions/d3demo/tiddlers/CloudData.tid b/editions/d3demo/tiddlers/CloudData.tid deleted file mode 100644 index 890f2c3f53..0000000000 --- a/editions/d3demo/tiddlers/CloudData.tid +++ /dev/null @@ -1,44 +0,0 @@ -title: CloudData -type: application/json - -[ - {"text": "Tokyo/Yokohama", "size": 33.200}, - {"text": "New York Metro", "size": 17.800}, - {"text": "Sao Paulo", "size": 17.700}, - {"text": "Seoul/Incheon", "size": 17.500}, - {"text": "Mexico City", "size": 17.400}, - {"text": "Osaka/Kobe/Kyoto", "size": 16.425}, - {"text": "Manila", "size": 14.750}, - {"text": "Mumbai", "size": 14.350}, - {"text": "Delhi", "size": 14.300}, - {"text": "Jakarta", "size": 14.250}, - {"text": "Lagos", "size": 13.400}, - {"text": "Kolkata", "size": 12.700}, - {"text": "Cairo", "size": 12.200}, - {"text": "Los Angeles", "size": 11.789}, - {"text": "Buenos Aires", "size": 11.200}, - {"text": "Rio de Janeiro", "size": 10.800}, - {"text": "Moscow", "size": 10.500}, - {"text": "Shanghai", "size": 10.000}, - {"text": "Karachi", "size": 9.800}, - {"text": "Paris", "size": 9.645}, - {"text": "Istanbul", "size": 9.000}, - {"text": "Nagoya", "size": 9.000}, - {"text": "Beijing", "size": 8.614}, - {"text": "Chicago", "size": 8.308}, - {"text": "London", "size": 8.278}, - {"text": "Shenzhen", "size": 8.000}, - {"text": "Essen/Dusseldorf", "size": 7.350}, - {"text": "Tehran", "size": 7.250}, - {"text": "Bogota", "size": 7.000}, - {"text": "Lima", "size": 7.000}, - {"text": "Bangkok", "size": 6.500}, - {"text": "Johannesburg/East Rand", "size": 6.000}, - {"text": "Chennai", "size": 5.950}, - {"text": "Taipei", "size": 5.700}, - {"text": "Baghdad", "size": 5.500}, - {"text": "Santiago", "size": 5.425}, - {"text": "Bangalore", "size": 5.400}, - {"text": "Hyderabad", "size": 5.300}, - {"text": "St Petersburg", "size": 5.300} -] diff --git a/editions/d3demo/tiddlers/DefaultTiddlers.tid b/editions/d3demo/tiddlers/DefaultTiddlers.tid deleted file mode 100644 index fe86054a58..0000000000 --- a/editions/d3demo/tiddlers/DefaultTiddlers.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/DefaultTiddlers - -[[HelloThere]] diff --git a/editions/d3demo/tiddlers/GraphData.tid b/editions/d3demo/tiddlers/GraphData.tid deleted file mode 100644 index 017131127e..0000000000 --- a/editions/d3demo/tiddlers/GraphData.tid +++ /dev/null @@ -1,10 +0,0 @@ -title: GraphData -type: application/json - -{ - "layers": 4, - "samples": 58, - "data": [[{"x":0,"y":1.5465653425978438,"y0":0},{"x":1,"y":1.685317173883538,"y0":0},{"x":2,"y":1.8574362488718479,"y0":0},{"x":3,"y":1.8955971722736493,"y0":0},{"x":4,"y":1.9097577836599329,"y0":0},{"x":5,"y":1.8465434425997016,"y0":0},{"x":6,"y":1.633439930626274,"y0":0},{"x":7,"y":1.52631967808687,"y0":0},{"x":8,"y":1.254071127423236,"y0":0},{"x":9,"y":1.0827254551382322,"y0":0},{"x":10,"y":0.8638985445997883,"y0":0},{"x":11,"y":0.6413689486056139,"y0":0},{"x":12,"y":0.5413942661821705,"y0":0},{"x":13,"y":0.36278061239443893,"y0":0},{"x":14,"y":0.3256964071352306,"y0":0},{"x":15,"y":0.2137255237212198,"y0":0},{"x":16,"y":0.19963582829410498,"y0":0},{"x":17,"y":0.16830706117875752,"y0":0},{"x":18,"y":0.17206850583228236,"y0":0},{"x":19,"y":0.10830681834972318,"y0":0},{"x":20,"y":0.11873772657810025,"y0":0},{"x":21,"y":0.11084964578647072,"y0":0},{"x":22,"y":0.1484696893575204,"y0":0},{"x":23,"y":0.1867012666922508,"y0":0},{"x":24,"y":0.12949785228379762,"y0":0},{"x":25,"y":0.13160216135876143,"y0":0},{"x":26,"y":0.17191603579071696,"y0":0},{"x":27,"y":0.13015751294359376,"y0":0},{"x":28,"y":0.14401777421011913,"y0":0},{"x":29,"y":0.10201715281901944,"y0":0},{"x":30,"y":0.13096141940224687,"y0":0},{"x":31,"y":0.13007539913630495,"y0":0},{"x":32,"y":0.1548329677287279,"y0":0},{"x":33,"y":0.12825426147451768,"y0":0},{"x":34,"y":0.11173963750950311,"y0":0},{"x":35,"y":0.10009802752875707,"y0":0},{"x":36,"y":0.15986871614703402,"y0":0},{"x":37,"y":0.13176775383781347,"y0":0},{"x":38,"y":0.11931081113873895,"y0":0},{"x":39,"y":0.16285687568597873,"y0":0},{"x":40,"y":0.17962864991277508,"y0":0},{"x":41,"y":0.12206525453366346,"y0":0},{"x":42,"y":0.18058574651367965,"y0":0},{"x":43,"y":0.17203539919573813,"y0":0},{"x":44,"y":0.14411348106805236,"y0":0},{"x":45,"y":0.11210963563062251,"y0":0},{"x":46,"y":0.1381196621572599,"y0":0},{"x":47,"y":0.13853569640778007,"y0":0},{"x":48,"y":0.1413255832623691,"y0":0},{"x":49,"y":0.1174182482529442,"y0":0},{"x":50,"y":0.10530492262916305,"y0":0},{"x":51,"y":0.10311489694306446,"y0":0},{"x":52,"y":0.11639756702594588,"y0":0},{"x":53,"y":0.1319517292574534,"y0":0},{"x":54,"y":0.11580932540132466,"y0":0},{"x":55,"y":0.14951149305133773,"y0":0},{"x":56,"y":0.13733844893200403,"y0":0},{"x":57,"y":0.15683227159202287,"y0":0}],[{"x":0,"y":0.4205513236112361,"y0":1.5465653425978438},{"x":1,"y":0.5468517829897288,"y0":1.685317173883538},{"x":2,"y":0.968925897059711,"y0":1.8574362488718479},{"x":3,"y":1.4906540525791687,"y0":1.8955971722736493},{"x":4,"y":2.0955950901132407,"y0":1.9097577836599329},{"x":5,"y":2.4548437717415097,"y0":1.8465434425997016},{"x":6,"y":2.3871398992501094,"y0":1.633439930626274},{"x":7,"y":1.8956592631335767,"y0":1.52631967808687},{"x":8,"y":1.3310277640299937,"y0":1.254071127423236},{"x":9,"y":0.740004500538676,"y0":1.0827254551382322},{"x":10,"y":0.41341056933113224,"y0":0.8638985445997883},{"x":11,"y":0.25508869446689425,"y0":0.6413689486056139},{"x":12,"y":0.21465672884279616,"y0":0.5413942661821705},{"x":13,"y":0.2030322655655626,"y0":0.36278061239443893},{"x":14,"y":0.17778946560320333,"y0":0.3256964071352306},{"x":15,"y":0.13993989381581068,"y0":0.2137255237212198},{"x":16,"y":0.1509842264651427,"y0":0.19963582829410498},{"x":17,"y":0.14400590082193815,"y0":0.16830706117875752},{"x":18,"y":0.30062332723788887,"y0":0.17206850583228236},{"x":19,"y":0.47865475204719965,"y0":0.10830681834972318},{"x":20,"y":0.911871360864478,"y0":0.11873772657810025},{"x":21,"y":1.5099221362867215,"y0":0.11084964578647072},{"x":22,"y":1.9414749203225334,"y0":0.1484696893575204},{"x":23,"y":1.9571455162890212,"y0":0.1867012666922508},{"x":24,"y":1.4064503011974243,"y0":0.12949785228379762},{"x":25,"y":0.8310477425188015,"y0":0.13160216135876143},{"x":26,"y":0.4000029514079704,"y0":0.17191603579071696},{"x":27,"y":0.27666872064180015,"y0":0.13015751294359376},{"x":28,"y":0.1732079458981994,"y0":0.14401777421011913},{"x":29,"y":0.16434562900185226,"y0":0.10201715281901944},{"x":30,"y":0.10902278389939715,"y0":0.13096141940224687},{"x":31,"y":0.12130552647880047,"y0":0.13007539913630495},{"x":32,"y":0.13189499389209813,"y0":0.1548329677287279},{"x":33,"y":0.16701788078384439,"y0":0.12825426147451768},{"x":34,"y":0.19748827143641204,"y0":0.11173963750950311},{"x":35,"y":0.10048470402153871,"y0":0.10009802752875707},{"x":36,"y":0.1589328406733382,"y0":0.15986871614703402},{"x":37,"y":0.1260306214335577,"y0":0.13176775383781347},{"x":38,"y":0.12310005807202623,"y0":0.11931081113873895},{"x":39,"y":0.19081063238544746,"y0":0.16285687568597873},{"x":40,"y":0.11915995362201988,"y0":0.17962864991277508},{"x":41,"y":0.16775608610181492,"y0":0.12206525453366346},{"x":42,"y":0.11689659197281145,"y0":0.18058574651367965},{"x":43,"y":0.10478702228876778,"y0":0.17203539919573813},{"x":44,"y":0.11845520244093624,"y0":0.14411348106805236},{"x":45,"y":0.12148839301915355,"y0":0.11210963563062251},{"x":46,"y":0.10516531708389541,"y0":0.1381196621572599},{"x":47,"y":0.1443174046222646,"y0":0.13853569640778007},{"x":48,"y":0.21339332873273398,"y0":0.1413255832623691},{"x":49,"y":0.2712006000742741,"y0":0.1174182482529442},{"x":50,"y":0.5050451567911616,"y0":0.10530492262916305},{"x":51,"y":0.909821514076055,"y0":0.10311489694306446},{"x":52,"y":1.5406349016176095,"y0":0.11639756702594588},{"x":53,"y":1.9406928968291974,"y0":0.1319517292574534},{"x":54,"y":2.1437324147686923,"y0":0.11580932540132466},{"x":55,"y":1.8465368739328496,"y0":0.14951149305133773},{"x":56,"y":1.4092532224974688,"y0":0.13733844893200403},{"x":57,"y":0.8817856427333232,"y0":0.15683227159202287}],[{"x":0,"y":0.1944409988255144,"y0":1.96711666620908},{"x":1,"y":0.15033225801417882,"y0":2.2321689568732666},{"x":2,"y":0.14925294980475312,"y0":2.826362145931559},{"x":3,"y":0.13370916755531753,"y0":3.386251224852818},{"x":4,"y":0.19872840374154924,"y0":4.005352873773173},{"x":5,"y":0.13950762000676847,"y0":4.3013872143412115},{"x":6,"y":0.16267251262861193,"y0":4.020579829876383},{"x":7,"y":0.1577907670976032,"y0":3.4219789412204467},{"x":8,"y":0.21860201765439113,"y0":2.58509889145323},{"x":9,"y":0.18971610615072376,"y0":1.822729955676908},{"x":10,"y":0.3651241384995914,"y0":1.2773091139309205},{"x":11,"y":0.40364878074449406,"y0":0.8964576430725082},{"x":12,"y":0.641325222983355,"y0":0.7560509950249666},{"x":13,"y":0.7970356614298015,"y0":0.5658128779600016},{"x":14,"y":1.035079540774146,"y0":0.5034858727384339},{"x":15,"y":1.2114900571612826,"y0":0.3536654175370305},{"x":16,"y":1.2955027464964213,"y0":0.3506200547592477},{"x":17,"y":1.2704279232237192,"y0":0.3123129620006957},{"x":18,"y":1.1110482804839328,"y0":0.47269183307017126},{"x":19,"y":0.95265250419215,"y0":0.5869615703969229},{"x":20,"y":0.7625642407866274,"y0":1.0306090874425782},{"x":21,"y":0.48432505597654985,"y0":1.6207717820731922},{"x":22,"y":0.3605975129100767,"y0":2.089944609680054},{"x":23,"y":0.25079581943021645,"y0":2.143846782981272},{"x":24,"y":0.17992789872009896,"y0":1.5359481534812218},{"x":25,"y":0.15831991003627732,"y0":0.962649903877563},{"x":26,"y":0.209545591944138,"y0":0.5719189871986874},{"x":27,"y":0.1815386065993288,"y0":0.40682623358539394},{"x":28,"y":0.22451288616655046,"y0":0.3172257201083185},{"x":29,"y":0.18631048531302957,"y0":0.2663627818208717},{"x":30,"y":0.2693049686300363,"y0":0.23998420330164402},{"x":31,"y":0.4390040968595268,"y0":0.2513809256151054},{"x":32,"y":0.5561378323665368,"y0":0.28672796162082603},{"x":33,"y":0.9278805101372621,"y0":0.29527214225836207},{"x":34,"y":1.3353385179667492,"y0":0.3092279089459151},{"x":35,"y":1.7554694271042415,"y0":0.20058273155029577},{"x":36,"y":2.308524602434114,"y0":0.31880155682037226},{"x":37,"y":2.7798378587096577,"y0":0.25779837527137117},{"x":38,"y":3.0871471730848987,"y0":0.24241086921076518},{"x":39,"y":3.19362118064261,"y0":0.3536675080714262},{"x":40,"y":3.0580826674114436,"y0":0.29878860353479497},{"x":41,"y":2.8290814192483107,"y0":0.2898213406354784},{"x":42,"y":2.403204319807294,"y0":0.2974823384864911},{"x":43,"y":1.979503686260371,"y0":0.2768224214845059},{"x":44,"y":1.5386751122848177,"y0":0.2625686835089886},{"x":45,"y":1.22746871167621,"y0":0.23359802864977608},{"x":46,"y":1.0047814505063442,"y0":0.24328497924115533},{"x":47,"y":0.920231760634797,"y0":0.2828531010300447},{"x":48,"y":1.194396098267215,"y0":0.3547189119951031},{"x":49,"y":1.4579447933613743,"y0":0.38861884832721827},{"x":50,"y":1.8332767350779728,"y0":0.6103500794203246},{"x":51,"y":1.785497637913814,"y0":1.0129364110191195},{"x":52,"y":1.3961662093621368,"y0":1.6570324686435554},{"x":53,"y":0.9233138020734465,"y0":2.072644626086651},{"x":54,"y":0.535039156141422,"y0":2.259541740170017},{"x":55,"y":0.2889374100548123,"y0":1.9960483669841873},{"x":56,"y":0.1537458202547387,"y0":1.5465916714294727},{"x":57,"y":0.1883149606515614,"y0":1.038617914325346}],[{"x":0,"y":0.11051783803850412,"y0":2.1615576650345942},{"x":1,"y":0.13068661955185235,"y0":2.382501214887445},{"x":2,"y":0.1578517352230847,"y0":2.975615095736312},{"x":3,"y":0.1728128878166899,"y0":3.5199603924081355},{"x":4,"y":0.10202869654167444,"y0":4.204081277514723},{"x":5,"y":0.17840681280940773,"y0":4.44089483434798},{"x":6,"y":0.17828655322082343,"y0":4.1832523425049954},{"x":7,"y":0.19687224281951787,"y0":3.5797697083180497},{"x":8,"y":0.15308661116287114,"y0":2.803700909107621},{"x":9,"y":0.16337432491127402,"y0":2.0124460618276316},{"x":10,"y":0.19935019137337806,"y0":1.6424332524305119},{"x":11,"y":0.12992399381473663,"y0":1.3001064238170024},{"x":12,"y":0.19960449892096221,"y0":1.3973762180083216},{"x":13,"y":0.10027564393822104,"y0":1.362848539389803},{"x":14,"y":0.12569230108056217,"y0":1.53856541351258},{"x":15,"y":0.17503334458451777,"y0":1.565155474698313},{"x":16,"y":0.19269541966194062,"y0":1.646122801255669},{"x":17,"y":0.1962713932455704,"y0":1.582740885224415},{"x":18,"y":0.19479403514149154,"y0":1.583740113554104},{"x":19,"y":0.18478477013321984,"y0":1.539614074589073},{"x":20,"y":0.3903502085015326,"y0":1.7931733282292055},{"x":21,"y":2.113535902304932,"y0":2.105096838049742},{"x":22,"y":4.817339276092961,"y0":2.4505421225901305},{"x":23,"y":2.7301424058386385,"y0":2.394642602411489},{"x":24,"y":0.5160762371843461,"y0":1.7158760522013208},{"x":25,"y":0.18540916174249022,"y0":1.1209698139138404},{"x":26,"y":0.5677074867030829,"y0":0.7814645791428254},{"x":27,"y":1.1464075745324163,"y0":0.5883648401847228},{"x":28,"y":1.2876248090555846,"y0":0.541738606274869},{"x":29,"y":0.6980320380328242,"y0":0.45267326713390127},{"x":30,"y":0.24283358972081664,"y0":0.5092891719316803},{"x":31,"y":0.11682030700960003,"y0":0.6903850224746322},{"x":32,"y":0.15527601995343537,"y0":0.8428657939873628},{"x":33,"y":0.12116465080341,"y0":1.2231526523956242},{"x":34,"y":0.11856791414918837,"y0":1.6445664269126643},{"x":35,"y":0.18425266326500114,"y0":1.9560521586545372},{"x":36,"y":0.1885328239909346,"y0":2.627326159254486},{"x":37,"y":0.22762141668860758,"y0":3.0376362339810288},{"x":38,"y":0.30843369961151645,"y0":3.329558042295664},{"x":39,"y":0.5150686859947133,"y0":3.547288688714036},{"x":40,"y":0.7904080489023975,"y0":3.3568712709462387},{"x":41,"y":0.9969372223042159,"y0":3.118902759883789},{"x":42,"y":1.1835681067174746,"y0":2.700686658293785},{"x":43,"y":1.1976013965051904,"y0":2.256326107744877},{"x":44,"y":1.0675440751484562,"y0":1.8012437957938063},{"x":45,"y":0.7788761831088342,"y0":1.461066740325986},{"x":46,"y":0.5260592994869968,"y0":1.2480664297474995},{"x":47,"y":0.32297373237592664,"y0":1.2030848616648417},{"x":48,"y":0.23281612172581895,"y0":1.5491150102623181},{"x":49,"y":0.15490821516916609,"y0":1.8465636416885927},{"x":50,"y":0.19289989359183243,"y0":2.4436268144982973},{"x":51,"y":0.19691381881928033,"y0":2.7984340489329336},{"x":52,"y":0.16966840994286328,"y0":3.053198678005692},{"x":53,"y":0.10215978941475964,"y0":2.9959584281600975},{"x":54,"y":0.1131423233217642,"y0":2.7945808963114387},{"x":55,"y":0.11913954267715618,"y0":2.2849857770389996},{"x":56,"y":0.12786382707962554,"y0":1.7003374916842113},{"x":57,"y":0.1917928157522389,"y0":1.2269328749769075}]] -} - - diff --git a/editions/d3demo/tiddlers/HelloThere.tid b/editions/d3demo/tiddlers/HelloThere.tid deleted file mode 100644 index 4923373462..0000000000 --- a/editions/d3demo/tiddlers/HelloThere.tid +++ /dev/null @@ -1,17 +0,0 @@ -title: HelloThere - -This is a demo of TiddlyWiki5 incorporating a plugin for the [[D3.js]] visualisation library. - -! Word Cloud - -<$d3cloud data="CloudData" spiral={{$:/spiral}}/> - - -//[[Raw data|CloudData]]// - -! Bar Chart - -<$d3bar grouped={{$:/grouped}} data="GraphData"/> -<$button set="$:/grouped" setTo="yes">grouped</$button> <$button set="$:/grouped" setTo="no">stacked</$button> - -//[[Raw data|GraphData]]// \ No newline at end of file diff --git a/editions/d3demo/tiddlers/SiteSubtitle.tid b/editions/d3demo/tiddlers/SiteSubtitle.tid deleted file mode 100644 index 4b80d85ac0..0000000000 --- a/editions/d3demo/tiddlers/SiteSubtitle.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/SiteSubtitle - -a demo of the D3.js plugin for TiddlyWiki5 \ No newline at end of file diff --git a/editions/d3demo/tiddlers/SiteTitle.tid b/editions/d3demo/tiddlers/SiteTitle.tid deleted file mode 100644 index a3eebd2cf5..0000000000 --- a/editions/d3demo/tiddlers/SiteTitle.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/SiteTitle - -d3demo \ No newline at end of file diff --git a/editions/d3demo/tiddlers/grouped.tid b/editions/d3demo/tiddlers/grouped.tid deleted file mode 100644 index 545960efce..0000000000 --- a/editions/d3demo/tiddlers/grouped.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/grouped - -yes \ No newline at end of file diff --git a/editions/d3demo/tiddlers/spiral.tid b/editions/d3demo/tiddlers/spiral.tid deleted file mode 100644 index 62b6b38fd2..0000000000 --- a/editions/d3demo/tiddlers/spiral.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/spiral - -archimedean \ No newline at end of file diff --git a/editions/d3demo/tiddlywiki.info b/editions/d3demo/tiddlywiki.info deleted file mode 100644 index e7a4dc3f8b..0000000000 --- a/editions/d3demo/tiddlywiki.info +++ /dev/null @@ -1,16 +0,0 @@ -{ - "description": "Demo of the D3 plugin", - "plugins": [ - "tiddlywiki/d3" - ], - "themes": [ - "tiddlywiki/vanilla", - "tiddlywiki/snowwhite" - ], - "includeWikis": [ - ], - "build": { - "index": [ - "--rendertiddler","$:/core/save/all","d3demo.html","text/plain"] - } -} \ No newline at end of file diff --git a/editions/de-AT/tiddlers/external/tiddlywiki.files b/editions/de-AT/tiddlers/external/tiddlywiki.files index fd714a0df2..d1cc8572fe 100644 --- a/editions/de-AT/tiddlers/external/tiddlywiki.files +++ b/editions/de-AT/tiddlers/external/tiddlywiki.files @@ -1,9 +1,9 @@ { "tiddlers": [ { - "file": "../../../tw5.com/tiddlers/images/New Release Banner.png", + "file": "../../../tw5.com/tiddlers/images/New Release Banner.webp", "fields": { - "type": "image/jpeg", + "type": "image/webp", "title": "New Release Banner", "tags": "picture" } diff --git a/editions/de-AT/tiddlers/system/$__editions_de-AT-DE_download-empty.tid b/editions/de-AT/tiddlers/system/$__editions_de-AT-DE_download-empty.tid index d14f6c4c99..0bc96ec9a1 100755 --- a/editions/de-AT/tiddlers/system/$__editions_de-AT-DE_download-empty.tid +++ b/editions/de-AT/tiddlers/system/$__editions_de-AT-DE_download-empty.tid @@ -4,7 +4,7 @@ title: $:/editions/de-AT-DE/download-empty type: text/vnd.tiddlywiki \define saveTiddlerFilter() -[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/de-DE]] [[$:/languages/de-AT]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] +[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/de-DE]] [[$:/languages/de-AT]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] \end \define savingEmpty() yes diff --git a/editions/dev/tiddlers/How to Create a Custom Cascade Entry.tid b/editions/dev/tiddlers/How to Create a Custom Cascade Entry.tid new file mode 100644 index 0000000000..d96ceb2bb7 --- /dev/null +++ b/editions/dev/tiddlers/How to Create a Custom Cascade Entry.tid @@ -0,0 +1,127 @@ +created: 20240802065815656 +modified: 20240802065836064 +title: How to Create a Custom Cascade Entry +type: text/vnd.tiddlywiki + +This guide explains how to add a new [[cascade|https://tiddlywiki.com/#Cascades]] to the ~TiddlyWiki core or your own plugins. This allows third-party plugins to extend the functionality of the core or your plugin. + +!! How Cascade Works in the Core + +This section explains how the existing WikiText in the core interacts with the new WikiText you’ll add, only for learning purpose. You don’t need to modify the core WikiText when adding a new cascade. + +!!! The Default Template as a Fallback + +The default behavior in ~TiddlyWiki is defined by [[$:/core/ui/ViewTemplate/tags/default]]. + +<pre> +<$view tiddler="$:/core" subtiddler="$:/core/ui/ViewTemplate/tags/default" mode=block format=text/> +</pre> + +!!! Transclusion of the Active Template + +[[$:/core/ui/ViewTemplate/tags]] uses a filter expression to find the cascade filter and the view template you’ll add. + +<pre> +<$view tiddler="$:/core" subtiddler="$:/core/ui/ViewTemplate/tags" mode=block format=text/> +</pre> + +The `:cascade` clause collects all tiddlers it finds and uses their filter text sequentially. Most filters won’t return any text and will be skipped. The first filter that returns a tiddler title becomes the result of the `:cascade` clause. If no filters return a result, the fallback default filter will be used. + +The `:and[!is[blank]else` clause provides additional fallback protection, though it’s often redundant because a fallback is typically tagged with `$:/tags/ViewTemplateTagsFilter`. However, including fallbacks is a good practice for defensive programming. + +!! Adding a New Cascade Entry + +This section contains the WikiText you’ll need to add to the core. Modify it to suit your needs instead of copying it directly. + +!!! Creating a Control Panel Tab + +To create a new tab under [[ControlPanel|$:/ControlPanel]] → Advanced → [[Cascade|$:/core/ui/ControlPanel/Cascades]], use the following code: + +[[$:/core/ui/ControlPanel/ViewTemplateTags]] uses a filter expression to find the cascade filter and the view template you’ll add. + +<pre> +<$view tiddler="$:/core" subtiddler="$:/core/ui/ControlPanel/ViewTemplateTags" mode=block format=text/> +</pre> + +Add the following metadata: + +```tid +tags: $:/tags/ControlPanel/Cascades +caption: {{$:/language/ControlPanel/ViewTemplateTags/Caption}} +``` + +!!! Adding a New Language Entry + +It’s important to add related language files. Create a file starting with `title: $:/language/ControlPanel/`: + +```multid +title: $:/language/ControlPanel/ + +ViewTemplateTags/Caption: View Template Tags +ViewTemplateTags/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the tags area of a tiddler. +``` + +!!! Adding Default Configuration + +Similar to the language file, add a config file starting with `title: $:/config/ViewTemplateTagsFilters/`. For example: + +```tid +title: $:/config/ViewTemplateTagsFilters/ +tags: $:/tags/ViewTemplateTagsFilter + +default: [[$:/core/ui/ViewTemplate/tags/default]] +``` + +Different templates may have their own config files. Ensure you’re adding to the correct file or creating a new one if it doesn’t exist. + +!! Using the New Cascade + +This section provides a simplified example based on a real-world use case. It demonstrates how to override the default template with a custom template. + +!!! Your Template + +Add the content you want to display conditionally. Update `publisher/plugin-name` to your plugin’s name. + +```tid +code-body: yes +title: $:/plugins/publisher/plugin-name/EditMode + +\whitespace trim +<$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes"> + <div class="tc-tags-wrapper" style="display:flex"> + <$transclude tiddler="$:/core/ui/EditTemplate/tags"/> + <$button class="tc-btn-invisible" style="margin-left:1em;"> + {{$:/core/images/done-button}} + <$action-deletetiddler $tiddler={{{ [[$:/state/edit-view-mode-tags/]addsuffix<storyTiddler>] }}}/> + </$button> + </div> +</$reveal> +``` + +!!! The Condition + +Write a filter that ends with `then[$:/plugins/publisher/plugin-name/EditMode]`. + +```tid +code-body: yes +tags: $:/tags/ViewTemplateTagsFilter +title: $:/plugins/publisher/plugin-name/CascadeEditMode +list-before: $:/config/ViewTemplateTagsFilters/default + +[[$:/state/edit-view-mode-tags/]addsuffix<currentTiddler>get[text]compare:string:eq[yes]then[$:/plugins/publisher/plugin-name/EditMode]] +``` + +!!! A Button to Trigger the Condition + +```tid +code-body: yes +tags: $:/tags/ViewTemplate/Tags +title: $:/plugins/publisher/plugin-name/TriggerEdit + +\whitespace trim +<%if [<storyTiddler>get[tags]!is[blank]] %> + <$button class="tc-btn-invisible" set={{{ [[$:/state/edit-view-mode-tags/]addsuffix<storyTiddler>] }}} setTo="yes" tooltip="add tags"> + {{$:/core/images/new-here-button}} + </$button> +<%endif%> +``` diff --git a/editions/dev/tiddlers/build/Releasing a new version of TiddlyWiki.tid b/editions/dev/tiddlers/build/Releasing a new version of TiddlyWiki.tid index 47ee3115c3..adf8ad0b3f 100644 --- a/editions/dev/tiddlers/build/Releasing a new version of TiddlyWiki.tid +++ b/editions/dev/tiddlers/build/Releasing a new version of TiddlyWiki.tid @@ -1,5 +1,5 @@ created: 20190809095728085 -modified: 20190809123445125 +modified: 20250707151538845 title: Releasing a new version of TiddlyWiki type: text/vnd.tiddlywiki @@ -11,36 +11,40 @@ type: text/vnd.tiddlywiki # Move the latest release note from the prerelease edition into the tw5.com edition # Adjust the release date and the ''released'' field of the latest release tiddler (eg, [[Release 5.1.3]]) # Also adjust the github.com comparison link to point to the tag for the new release +# Adjust the tiddler [[TiddlyWiki Archive]] to include the new version number # Ensure [[TiddlyWiki Releases]] has the new version as the default tab # Adjust the modified time of HelloThere # Make sure ''master'' is fully committed -!! Update Readmes +!! Update Readmes and release note # Edit `package.json` to the new version number # Run `./bin/readme-bld.sh` to build the readme files # Commit the new readme files to ''master'' # Restore `package.json` to the previous version number +# Adjust the link for "GitHub for detailed change history of this release" in the release note +# Add the credits for the new release banner to the release note, including a link to the GitHub instance of the image from the commit history !! Make New Release -# Run `./bin/verbump "5.1.3"` (substituting the correct version number) to update the version number, assign it a tag +# Run `./bin/verbump "5.1.3"` (substituting the correct version number) to update the version number and assign it a tag # Run `./bin/npm-publish.sh` to publish the release to npm # Verify that the new release of TiddlyWiki is available at https://www.npmjs.org/package/tiddlywiki !! Update tiddlywiki.com release # Update ''tiddlywiki-com'' from ''master'' and push to ~GitHub +# Wait until https://tiddlywiki.com is updated with the new release -!! Cleaning Up +!! Announcements -# Tweet the release with the text "TiddlyWiki v5.x.x released to https://tiddlywiki.com #newtiddlywikirelease" +# Announce the new release on [[TalkTW|https://talk.tiddlywiki.org]] !! Preparation for the next release in ''master'' # Adjust version number in `package.json` # Adjust version number in `bin/build-site.sh` # Adjust version number in [[$:/config/OfficialPluginLibrary]] (both in `editions/tw5.com` and `editions/prerelease/tiddlers/system`) and [[$:/config/LocalPluginLibrary]] -# Adjust new release banner +# Create temporary new release banner # Create the release note for the new release # Commit changes to ''master'' and push to ~GitHub diff --git a/editions/dev/tiddlers/from Heigele and Jurke/RootWidget and Rendering Startup.tid b/editions/dev/tiddlers/from Heigele and Jurke/RootWidget and Rendering Startup.tid index d6943c5590..165a98df69 100644 --- a/editions/dev/tiddlers/from Heigele and Jurke/RootWidget and Rendering Startup.tid +++ b/editions/dev/tiddlers/from Heigele and Jurke/RootWidget and Rendering Startup.tid @@ -1,9 +1,10 @@ chapter.of: UI and Rendering Pipeline created: 20140717175203036 -modified: 20140717182314488 +modified: 20240802065804331 sub.num: 5 tags: doc title: RootWidget and Rendering Startup +type: text/vnd.tiddlywiki The previous parts of this chapter showed how WikiText is transformed to DOM nodes which dynamically react to tiddler changes and a way to compose tiddlers from other tiddlers. This last part describes how the TiddlyWiki core plug-in starts up a UI build from tiddlers and WikiText. @@ -29,6 +30,9 @@ and a listener is registered at the store which executes the refresh function of [[Techniques for including other tiddlers and Templates|Transclusion and TextReference]] are finally used in [[$:/core/ui/PageTemplate]] to build the TiddlyWiki UI only from tiddlers written in WikiText (with widgets implemented in javascript): For example to implement the list of open wiki pages the [[$:/core/ui/PageTemplate]] contains a [[navigator widget|$:/core/modules/widgets/navigator.js]] which maintains a list of open tiddlers in a field of [[$:/StoryList]] and handles events like ``tm-navigate`` by adding a tiddler specified as parameter to the top of the list in [[$:/StoryList]]. + The [[story tiddler|$:/core/ui/PageTemplate/story]] transcluded in [[$:/core/ui/PageTemplate]] then uses a ~ListWidget to transclude all tiddlers in [[$:/StoryList]] through a special template [[$:/core/ui/ViewTemplate]]. +The ViewTemplate here is a combination of different fragments, like title fragment and body fragment, each fragment can be override individually using [[Cascade Mechanism|How to Create a Custom Cascade Entry]]. + A event of the type ``tm-close-tiddler`` would remove a specified tiddler from [[$:/StoryList]]. The [[Event Mechanism]] would trigger a changed event which triggers a call of the ~ListWidget's refresh function which would remove the tiddler from the list, closing the tiddler. diff --git a/editions/es-ES/tiddlers/system/download-empty.tid b/editions/es-ES/tiddlers/system/download-empty.tid index 64928eb2f4..8113ba50ad 100755 --- a/editions/es-ES/tiddlers/system/download-empty.tid +++ b/editions/es-ES/tiddlers/system/download-empty.tid @@ -2,7 +2,7 @@ title: $:/editions/es-ES/download-empty type: text/vnd.tiddlywiki \define saveTiddlerFilter() -[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/es-ES]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] +[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/es-ES]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] \end \define savingEmpty() yes diff --git a/editions/fr-FR/tiddlers/ReleaseTemplate.tid b/editions/fr-FR/tiddlers/ReleaseTemplate.tid index bde81b1ea3..bc7fc1bfa7 100644 --- a/editions/fr-FR/tiddlers/ReleaseTemplate.tid +++ b/editions/fr-FR/tiddlers/ReleaseTemplate.tid @@ -1,5 +1,6 @@ created: 20141115211411211 title: ReleaseTemplate +code-body: yes type: text/vnd.tiddlywiki <h2><$link to=<<currentTab>>><$view tiddler=<<currentTab>> field="title"/></$link></h2> diff --git a/editions/fr-FR/tiddlers/system/download-empty.tid b/editions/fr-FR/tiddlers/system/download-empty.tid index d07088b63c..f90e602059 100755 --- a/editions/fr-FR/tiddlers/system/download-empty.tid +++ b/editions/fr-FR/tiddlers/system/download-empty.tid @@ -2,7 +2,7 @@ title: $:/editions/fr-FR/download-empty type: text/vnd.tiddlywiki \define saveTiddlerFilter() -[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/fr-FR]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] +[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/fr-FR]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] \end \define savingEmpty() yes diff --git a/editions/ja-JP/tiddlers/concepts/Filters.tid b/editions/ja-JP/tiddlers/concepts/Filters.tid new file mode 100644 index 0000000000..0938f0dd55 --- /dev/null +++ b/editions/ja-JP/tiddlers/concepts/Filters.tid @@ -0,0 +1,30 @@ +created: 20130827080000000 +list: [[Introduction to filter notation]] [[Filter Syntax]] +modified: 20250218103107943 +original-modified: 20230710074511095 +tags: Reference Concepts TableOfContents +title: Filters +ja-title: フィルタ +type: text/vnd.tiddlywiki + +\define openAdvancedSearch() +<$action-setfield $tiddler="$:/state/tab--1498284803" text="$:/core/ui/AdvancedSearch/Filter"/> +<$action-setfield $tiddler="$:/temp/advancedsearch/input" text="[tag[Filters]]"/> +<$action-setfield $tiddler="$:/temp/advancedsearch" text="[tag[Filters]]"/> +\end + +TiddlyWikiは、レコードがTiddlerであるデータベースと考えることができます。データベースは通常、どのレコードが特定のパターンに一致するかを発見する方法を提供します。~TiddlyWikiでは、これはフィルタを使用して行われます + +<<.def フィルタ>>は、その<<.def "アウトプット">>として特定の[[Tiddlerセット|Title Selection]]を選択するための簡潔な表記法です。~TiddlyWikiはフィルタに遭遇するたびにアウトプットを計算します。その後、それらのTiddlerを使って、[[数を数え|CountWidget]]たり、[[リストし|ListWidget]]たりするなど、さらなる処理を行うことができます + +次の例では、フィルタを<<.mlink list-links>>マクロに渡します。<<.olink2 tag tag>> <<.word フィルタ>>であるTiddlerのリストを表示します: + +<<wikitext-example-without-html """<<list-links "[tag[Filters]]">>""" >> + +Wiki内でTiddlerが追加や削除されると、フィルタのアウトプットが変更される可能性があります。~TiddlyWikiは即再計算し、フィルタベースのカウントやリストも自動的に更新します + +''さらに詳細:'' + +* <$linkcatcher message="tm-navigate" actions=<<openAdvancedSearch>> >[[高度な検索|$:/AdvancedSearch]]</$linkcatcher> -- フィルタを簡単に試すことができる<<.advancedsearch-tab Filter>>タブがあります + +* [[WikiTextでのフィルタされたトランスクルージョン|Transclusion in WikiText]] -- テキスト内でフィルタ結果を使用したい場合 \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/concepts/Selection Constructors.tid b/editions/ja-JP/tiddlers/concepts/Selection Constructors.tid new file mode 100644 index 0000000000..2e1682d553 --- /dev/null +++ b/editions/ja-JP/tiddlers/concepts/Selection Constructors.tid @@ -0,0 +1,19 @@ +created: 20150117204109000 +modified: 20250222112113766 +original-modified: 20240708201746542 +tags: Filters +title: Selection Constructors +ja-title: セレクションコンストラクタ +type: text/vnd.tiddlywiki + +[[フィルタステップ|Filter Step]]のアウトプットはその[[オペレータ|Filter Operators]]によって異なります: + +* ほとんどのオペレータは、インプットからアウトプットを派生します。たとえば、それらの多くはインプットのサブセットをアウトプットし、まさに<<.word フィルタ>>の名にふさわしく、含んでいる[[ラン|Filter Run]]の全体的なアウトプットを絞り込みます。これらのオペレータは<<.def "セレクションモディファイア">>と呼ばれます。 + +* いくつかのオペレータはインプットを無視し、代わりに独立したアウトプットを生成します。これらは<<.def "セレクションコンストラクタ">>と呼ばれ、完全に新しい[[セレクション|Title Selection]]を構築します。 + +コンストラクタの良い例は<<.olink title>>です。`[title[A]title[B]]`のアウトプットは<<.tid B>>です。しかし、<<.olink field>>オペレータはモディファイアなので、`[title[A]field:title[B]`は何もアウトプットしません。 + +次の[[フィルタオペレータ|filter Operator]]は<<tag>>でタグ付けされています: + +<<list-links "[tag<currentTiddler>]" class:"multi-columns">> diff --git a/editions/ja-JP/tiddlers/filters/syntax/All Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/All Filter Run Prefix.tid new file mode 100644 index 0000000000..fc13d06b5c --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/All Filter Run Prefix.tid @@ -0,0 +1,20 @@ +created: 20230316150731234 +from-version: 5.1.23 +modified: 20250303102704427 +original-modified: 20230711084644541 +rp-input: 前回のフィルタランからのすべてのタイトル +rp-output: アウトプットタイトルは、重複を排除せずに以前のフィルタランの出力に追加されます。 +rp-purpose: 重複を排除しない和集合 +tags: [[Named Filter Run Prefix]] +title: All Filter Run Prefix +ja-title: allフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":all" | - ) +[["ラン"|"Filter Run"]] +"""/> + +このプレフィックスにはオプションの[[ショートカット構文|Shortcut Filter Run Prefix]]であるシンボル`=run`があります \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/And Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/And Filter Run Prefix.tid new file mode 100644 index 0000000000..76c1389204 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/And Filter Run Prefix.tid @@ -0,0 +1,20 @@ +created: 20230318142752854 +from-version: 5.1.23 +modified: 20250303103244036 +original-modified: 20230711084712170 +rp-purpose: フィルタステップの蓄積 +rp-input: これまでのすべてのランのフィルタアウトプット +rp-output: アウトプットのタイトルは、以前のフィルターランのアウトプットを置換 +tags: [[Named Filter Run Prefix]] +title: And Filter Run Prefix +ja-title: andフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":and" | - ) +[["ラン"|"Filter Run"]] +"""/> + +このプレフィックスにはオプションの[[ショートカット構文|Shortcut Filter Run Prefix]]であるシンボル+runがあります \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Cascade Filter Run Prefix (Examples).tid b/editions/ja-JP/tiddlers/filters/syntax/Cascade Filter Run Prefix (Examples).tid new file mode 100644 index 0000000000..8d4afe5317 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Cascade Filter Run Prefix (Examples).tid @@ -0,0 +1,48 @@ +created: 20211130114857532 +filter1: [prefix[ca]then[ca]] +filter2: [suffix[at]then[at]] +filter3: other +modified: 20250310110107153 +original-modified: 20230305125250563 +tags: [[Cascade Filter Run Prefix]] +title: Cascade Filter Run Prefix (Examples) +ja-title: cascadeフィルタランプレフィックス (例) +type: text/vnd.tiddlywiki + +<<.op ":cascade">>フィルタランプレフィックスは、タグマクロによって生成されるタグピルで使用される各Tiddlerの配色を選択するために、~TiddlyWikiコアによって使用されます。 + +`:cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]]` + +上記の<<.op :cascade>>フィルタラン内のフィルタ式は、<<tag $:/tags/TiddlerColourFilter>>でタグ付けされたTiddlerのテキストフィールドからフィルタのリストを返します。以下を参照: + +<ul> +<$list filter="[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]]"> +<li><pre><$text text=<<currentTiddler>>/></pre></li> +</$list> +</ul> + +インプットタイトルごとに、これらのフィルタが順番に適用され、空でないリストを返す最初のフィルタが見つかるまで続きます。この空でないリストの最初の結果がそのインプットタイトルに置き換えられ、そのTiddlerの色として使用されます。 + +<<.operator-example 1 """[all[shadows+tiddlers]] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]] +[!is[blank]limit[10]]""">> + +!! 拡張例 + +この例では、<<.op :cascade>>フィルタランがどのように機能するかを段階的に説明します。 + +アウトプットがフィルタのリストを返すフィルタ式が必要です。通常、このようなフィルタ式は、一連のTiddler内のいくつかのフィールドを照会して(おそらくタグ経由で)フィルタのリストを作成します。この例を自己完結型にするために、このTiddlerの//filter1//、//filter2//、//filter3//フィールドに、3つのフィルタが格納されます。[[テキスト参照|TextReference]]と[[appendオペレータ|append Operator]]のインスタンスを使用して、フィールドをフィルタのリストに結合します。 + +フィルター`[{!!filter1}append{!!filter2}append{!!filter3}]`は、次のフィルタリストを生成します: + +<ul> +<$list filter="[{!!filter1}append{!!filter2}append{!!filter3}]"> +<li><pre><$text text=<<currentTiddler>>/></pre></li> +</$list> +</ul> + +この例では、`cat can bat bug`がインプットタイトルとして使用されます。各インプットタイトルは、上記の各フィルタに対して順番に<<.op :cascade>>で評価されます。<<.op :cascade>>の内部で何が起こっているかを理解しやすくするために、次の表では、[[mapフィルタランプレフィックス|Map Filter Run Prefix]]を使用して、各フィルタの結果を示しています。 + +|^<<.operator-example c1.1 "cat can bat bug :map[prefix[ca]then[ca]]">>|^<<.operator-example c1.2 "cat can bat bug :map[suffix[at]then[at]]">>|^<<.operator-example c1.3 "cat can bat bug :map[[other]]">>| + +上記の3つの例で"Try it"をクリックします。<<.op :cascade>>を使用すると、各行の左から右に読み取られた最初の空白以外の値が返されます。最終結果を確認するには、下の"Try it"をクリックします。 + +<<.operator-example c1.4 "cat can bat bug :cascade[{!!filter1}append{!!filter2}append{!!filter3}]">> \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Cascade Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Cascade Filter Run Prefix.tid new file mode 100644 index 0000000000..aeaeca3265 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Cascade Filter Run Prefix.tid @@ -0,0 +1,27 @@ +created: 20211130114043280 +from-version: 5.2.1 +modified: 20250305112707026 +original-modified: 20230710073343947 +rp-input: これまでのすべてのランのフィルタアウトプット +rp-output: このフィルタランによって返されるフィルタによって変更されたインプットタイトル +rp-purpose: フィルターのリストを順に評価し、最初の結果を適用してインプットタイトルを変更 +tags: [[Named Filter Run Prefix]] +title: Cascade Filter Run Prefix +ja-title: cascadeフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":cascade" | - ) +[["ラン"|"Filter Run"]] +"""/> + +この[[フィルタラン|Filter Run]]の[[フィルタ式|Filter Expression]]が評価され、フィルタのリストが返されます。次に、各インプットタイトルが各フィルタに対して順番に評価され、インプットタイトルは空でないリストを返す最初のフィルタの最初の結果に置き換えられます。どのフィルタもインプットタイトルの結果を返さない場合は、空の文字列に置き換えられます。 + +フィルタラン内では、次の変数を使用できます: + +* <<.var currentTiddler>> - インプットタイトル +* <<.var ..currentTiddler>> - フィルタラン外の変数<<.var currentTiddler>>の値。 + +[[cascadeフィルタランプレフィックス (例)|Cascade Filter Run Prefix (Examples)]] diff --git a/editions/ja-JP/tiddlers/filters/syntax/Else Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Else Filter Run Prefix.tid new file mode 100644 index 0000000000..1ea57814d9 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Else Filter Run Prefix.tid @@ -0,0 +1,22 @@ +created: 20230318142408662 +from-version: 5.1.23 +modified: 20250312102737003 +original-modified: 20230322140756821 +rp-input: 前のフィルタランからのすべてのタイトル +rp-output: これまでのフィルタアウトプットが空のリストの場合、ランのアウトプットタイトルがフィルタアウトプットに[[追加|Dominant Append]]されます<br>これまでのフィルタアウトプットが空のリストでない場合、ランは無視されます +rp-purpose: フィルタランは、これまでのすべてのランのフィルタアウトプットが空のリストである場合にのみ評価されます +tags: [[Named Filter Run Prefix]] +title: Else Filter Run Prefix +ja-title: elseフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":else" | - ) +[[run|"Filter Run"]] +"""/> + +このプレフィックスには[[ショートカットフィルタランプレフィックス|Shortcut Filter Run Prefix]] シンボル`~run`があります + +参照: [[thenフィルタランプレフィックス|Then Filter Run Prefix]] | [[thenオペレータ|then Operator]] と [[elseオペレータ|else Operator]] diff --git a/editions/ja-JP/tiddlers/filters/syntax/Except Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Except Filter Run Prefix.tid new file mode 100644 index 0000000000..58a6bdda8c --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Except Filter Run Prefix.tid @@ -0,0 +1,20 @@ +created: 20230318142056008 +from-version: 5.1.23 +modified: 20250312104032308 +original-modified: 20230322140643066 +rp-input: 前のフィルタランからのすべてのタイトル +rp-output: アウトプットタイトルはフィルタのアウトプットから取り除かれます(そのようなTiddlerが存在する場合) +rp-purpose: このフィルタランのアウトプットタイトルが前のフィルタランのアウトプットに含まれている場合は取り除かれ、含まれていない場合は無視されます +tags: [[Named Filter Run Prefix]] +title: Except Filter Run Prefix +ja-title: exceptフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":except" | - ) +[[run|"Filter Run"]] +"""/> + +このプレフィックスには[[ショートカットフィルタランプレフィックス|Shortcut Filter Run Prefix]]シンボル`-run`があります \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Expression.tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Expression.tid new file mode 100644 index 0000000000..8b2dbc7ffc --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Expression.tid @@ -0,0 +1,23 @@ +created: 20150124182421000 +modified: 20250219114110986 +original-modified: 20230710074507466 +tags: [[Filter Syntax]] +title: Filter Expression +ja-title: フィルタ式 +type: text/vnd.tiddlywiki + +<<.def "フィルタ式">>は、[[フィルタのシンタックス|Filter Syntax]]の最も外側のレベルです。これは、[[フィルタランプレフィックス|Filter Run Prefix]]を備えた [[フィルタラン|Filter Run]]で構成されます。複数のフィルタ実行は[[ホワイトスペース|Filter Whitespace]]で区切られます。 + +<$railroad text=""" +{ ( + - | + : [[<"プレフィックス">|"Filter Run Prefix"]] + ) + [["ラン"|"Filter Run"]] + + [["ホワイトスペース"|"Filter Whitespace"]] +} +"""/> + +<<.tip """上に示したように、図に開始線と終了線が1つある場合は、リンクされた上位レベルにさらに情報があることを意味します。パンくずリストはナビゲーションに使用できます""">> + +<<.tip """下位レベルで使用されているように、図に開始点と終了点がない場合は、読みやすさと単純さを高めるために、上位レベルのシンタックス要素が削除されていることを意味します。パンくずリストはナビゲーションに使用できます""">> diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Filter Run Prefix (Examples).tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Filter Run Prefix (Examples).tid new file mode 100644 index 0000000000..47d2129fda --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Filter Run Prefix (Examples).tid @@ -0,0 +1,33 @@ +created: 20211129022707404 +modified: 20250314105437481 +original-modified: 20230305125338118 +tags: [[Filter Filter Run Prefix]] +title: Filter Filter Run Prefix (Examples) +ja-title: filterフィルタランプレフィックス(例) +type: text/vnd.tiddlywiki + +<<.operator-example 1 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]]">> +<<.operator-example 2 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:lteq[2000]]">> +<<.operator-example 3 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]] :filter[get[text]length[]compare:integer:lteq[2000]]">> +<<.operator-example 4 "[tag[Features]] :filter[links[]!is[shadow]is[missing]]">> + +<<.operator-example 5 "A B C D E F :filter[<index>remainder[2]compare:integer:eq[0]]" "インプットリストの要素を1つおきに返す">> + + +<<.operator-example 6 "[tag[shopping]] :filter[{!!quantity}compare:integer:gt[4]] :map[addprefix[ ]addprefix{!!quantity}]">> +<<.operator-example 7 "[tag[shopping]] :filter[{!!quantity}compare:integer:lteq[4]] :map[addprefix[ ]addprefix{!!quantity}]">> + +!! フィルタランプレフィックス`:filter`と`:and`/`+`の比較 + +<<.op :filter>>フィルタランプレフィックスの機能は、<<.op :and>>プレフィックス(エイリアス<<.op +>>)と一部重複しています。上記のフィルタ式にはすべて、次の2 つのプロパティがあることに注意してください: + +# フィルタ式の先頭では、インプットタイトル(つまり、`get[text]length[]`、`links[]`、`<index>remainder[2]`、`{!!quantity}`)が変換されます。 +# フィルタ式の最後では、インプット項目が何らかの条件(つまり`compare`、`is`)を満たす場合にのみアウトプットに送信されます。 + +<<.op :filter>>プレフィックスの目的はプロパティ#1によってインプットタイトルが変換されるにもかかわらず、元のインプットタイトルを返すことです。こうすることで、"何らかの条件を満たす"チェックを元のインプット以外のものに対して実行できます。一部のフィルタ式でプロパティ#1が必要ない場合は、代わりに<<.op :and>>プレフィックスを使用できます。 + +| <<.op :filter>> | <<.op :and>> | +|^<<.operator-example c1.1 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]]">>|^<<.operator-example c1.2 "[tag[HelloThere]] :and[get[text]length[]compare:integer:gteq[1000]]">>| +|^<<.operator-example c2.1 "[tag[Features]] :filter[links[]!is[shadow]is[missing]]">>|^<<.operator-example c2.2 "[tag[Features]] :and[links[]!is[shadow]is[missing]]">>| +|!結果は同じ|<| +|^<<.operator-example c3.1 "cat can bat bug :filter[suffix[at]minlength[3]]">>|^<<.operator-example c3.2 "cat can bat bug :and[suffix[at]minlength[3]]">>| \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Filter Run Prefix.tid new file mode 100644 index 0000000000..b98e7b9d4e --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Filter Run Prefix.tid @@ -0,0 +1,34 @@ +created: 20211129022455873 +from-version: 5.1.23 +modified: 20250314105047035 +original-modified: 20230710073334078 +rp-input: これまでのすべてのランのフィルタアウトプット +rp-output: フィルタランが空でないインプットタイトル +rp-purpose: フィルタランアウトプットが空のリストであるすべてのインプットタイトルを除外 +tags: [[Named Filter Run Prefix]] +title: Filter Filter Run Prefix +ja-title: filterフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":filter" | - ) +[["ラン"|"Filter Run"]] +"""/> + +これまでのフィルタアウトプットをインプットとして受け取ります。次のランはインプットの各タイトルに対して評価され、アウトプットが空のリストであるすべてのインプットタイトルが除かれます。 + +フィルタラン内では、<<.var currentTiddler>>変数は処理中のTiddlerのタイトルに設定されていることに注意してください。これにより、`:filter[{!!price}multiply{!!cost}compare:integer:gteq[5]]`のようなフィルタランを計算に使用できるようになります。ラン外のcurrentTiddlerの値は、<<.var ..currentTiddler>>変数で使用できます。 + +フィルターラン内では、次の変数を使用できます: + +* <<.var currentTiddler>> - インプットタイトル +* <<.var ..currentTiddler>> - フィルタラン外の変数`currentTiddler`の値。 +* <<.var index>> - <<.from-version "5.2.1">> 現在のリスト項目の数値インデックス(リストの最初の項目はゼロです)。 +* <<.var revIndex>> - <<.from-version "5.2.1">> 現在のリスト項目の逆数値インデックス(リストの最後の項目はゼロです)。 +* <<.var length>> - <<.from-version "5.2.1">> インプットリストの長さの合計。 + +<<.tip "名前付きフィルタランプレフィックス`:filter`を、この演算子は、すべてのインプットタイトルにサブフィルタを適用し、サブフィルタから空の結果を返すタイトルを除外する[[filterオペレータ|filter Operator]]と比べてください。">> + +[[filterフィルタランプレフィックス(例)|Filter Filter Run Prefix (Examples)]] diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Parameter.tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Parameter.tid new file mode 100644 index 0000000000..5b5bf953a7 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Parameter.tid @@ -0,0 +1,40 @@ +created: 20150220152540000 +modified: 20250223102930110 +original-modified: 20240708202234843 +tags: [[Filter Step]] +title: Filter Parameter +ja-title: フィルタパラメータ +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( "[" [: <-"ハード"-> /"]以外"/] "]" + | + "{" [: <-"間接"-> /"}以外"/] "}" + | + "<" [: <-"変数"-> /">以外"/] ">" +) +"""/> + +[[フィルタオペレータ|Filter Operators]]のパラメーターは次のようになります: + +;<<.def ハード>> +: `[パラメータ例]` +: パラメータは、角括弧内のテキストそのものです。 +;<<.def ソフト>> +: <<.def 間接>> +:: `{パラメータ例}` +:: パラメータは、中括弧内の名前の[[テキスト参照|TextReference]]によって示されるテキスト、つまり、指定されたTiddlerの[[フィールド|TiddlerFields]]、または指定された[[データTiddler|DataTiddlers]]のプロパティの値です。 +: <<.def 変数>> +:: `<パラメータ例>` +:: パラメータは、山括弧内の[[変数|Variables]]の現在値です。マクロパラメータは、v5.2.0まではサポートされて<<.em いません>>。 +::<<.from-version "5.2.0">> リテラルマクロパラメータがサポートされています。例: `[<now [UTC]YYYY0MM0DD0hh0mm0ssXXX>]`。 + +<<.note """すべての[[フィルタオペレータ|filter Operator]]の後にはパラメータ式が続く必要があります。[[パラメータの無いオペレータ|Operators without parameters]]の場合、その式は空になります(`[<currentTiddler>links[]]`のフィルタオペレータ<<.olink links>>と同様)。""">> + +--- + +<<.from-version "5.1.23">> [[フィルタステップ|Filter Step]]では、`,`文字で区切られた複数のパラメータがサポートされます。 + +例えば: `[param1],[param2]`や`<param1>,{param2}` diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Run Prefix.tid new file mode 100644 index 0000000000..54e79a2594 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Run Prefix.tid @@ -0,0 +1,21 @@ +created: 20230305130600148 +modified: 20250223105142349 +original-modified: 20230711090913687 +tags: [[Filter Expression]] +title: Filter Run Prefix +ja-title: フィルタランプレフィックス +type: text/vnd.tiddlywiki + +There are 2 types of filter run prefixes that are interchangeable; [[named prefixes|Named Filter Run Prefix]] and [[shortcut prefixes|Shortcut Filter Run Prefix]]. +交換可能なフィルタランプレフィックスには、[[名前付きプレフィックス|Named Filter Run Prefix]]と[[ショートカットプレフィックス|Shortcut Filter Run Prefix]]の2種類があります。 + +<$railroad text=""" +\start none +\end none +( + - | +: [[<":名前付きプレフィクス"> /"v5.1.23以降"/ |"Named Filter Run Prefix"]] | + [[<"ショートカットプレフィックス"> /"v5.1.23以前"/ |"Shortcut Filter Run Prefix"]] +) +[[<"ラン">|"Filter Run"]] +"""/> diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Run.tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Run.tid new file mode 100644 index 0000000000..00470a5dcf --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Run.tid @@ -0,0 +1,29 @@ +created: 20150124182117000 +modified: 20250220111652831 +original-modified: 20230710074357002 +tags: [[Filter Expression]] +title: Filter Run +ja-title: フィルタラン +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( "[" { [[<"フィルタステップ">|"Filter Step"]] } "]" + | + [:{/"[ ]または空白以外の文字"/}] + | + '"' [:{/'"以外の文字'/}] '"' + | + "'" [:{/"'以外の文字"/}] "'" +) +"""/> + +<<.def ラン>>は[[ステップ|Filter Step]]で構成され、より大きな[[フィルタ式|Filter Expression]]に貢献する[[選択|Title Selection]]を出力します。 + +ステップは左から右に処理されます。最初のステップへのインプットはランへのインプットと同じです。後続の各ステップのインプットは、前のステップのアウトプットです。 + + +図の下の3つのオプションは`HelloThere`、`"HelloThere"`、`'HelloThere'`と`"Filter Operators"`の構文と一致します。これらは`[title[...]]`の短縮形です。 + +引用符で囲まれたオプションは、`"An [[[[Unusual]]]] Tiddler"`のように角括弧を含むタイトルをサポートするために存在します。 diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Step.tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Step.tid new file mode 100644 index 0000000000..0c81c7c250 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Step.tid @@ -0,0 +1,37 @@ +created: 20150124182127000 +modified: 20250222110925130 +original-modified: 20230710074414361 +tags: [[Filter Run]] +title: Filter Step +ja-title: フィルタステップ +type: text/vnd.tiddlywiki + +<<.def "フィルタステップ">>は、<<.def "フィルタラン">>内の単一の操作を表します。 + +プログラミング用語では、ステップのインプットがパラメータとして渡される関数呼び出しに似ています。ステップのアウトプットは、[[フィルタラン|Filter Run]]、つまりそれを含む[[フィルタ式|Filter Expression]]全体に貢献する[[タイトルセレクション|Title Selection]]です。 + +<$railroad text=""" +\start none +\end none +[:"!"] +( / "省略の場合のデフォルト: title" /|: +( - | :[[<"オペレータ">|"Filter Operators"]] ) +{ [:":" [[<"サフィックス">|"Filter Operators"]] ] } ) +{ [[<"パラメータ">|"Filter Parameter"]] + "," } +"""/> + +ステップの<<.def オペレータ>>は、[[フィルタオペレータ|Filter Operators]]として知られている定義済みキーワードのリストです。 + +多くのステップでは、ステップの実行内容をさらに定義する明示的な<<.def パラメータ>>が必要です。 + +<<.def サフィックス>>は、特定のオペレータの意味を拡張する追加テキスト(多くの場合、[[フィールド|TiddlerFields]]名)です。 + +ステップの<<.def オペレータ>>と<<.def サフィックス>>がすべて省略されている場合は、デフォルトで[[title|title Operator]]オペレータが使用されます。 + +<<.from-version "5.1.23">> いくつかのステップでは、`,`文字で区切られた複数の<<.def パラメータ>>を受け入れます。 + +認識されないオペレータは、<<.olink field>>オペレータのサフィックスであるかのように扱われます。 + +フィルタオペレータはプラグインによって拡張できます。 + +{{Selection Constructors}} diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Syntax.tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Syntax.tid new file mode 100644 index 0000000000..5d29f60130 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Syntax.tid @@ -0,0 +1,26 @@ +created: 20140210141217955 +list: [[Filter Expression]] [[Filter Run]] [[Filter Step]] [[Filter Parameter]] [[Filter Whitespace]] +modified: 20250219112710650 +original-modified: 20230710074340943 +tags: Filters +title: Filter Syntax +ja-title: フィルタのシンタックス +type: text/vnd.tiddlywiki + +<<.preamble """[[フィルタ|Filters]]は、正式な構文の説明が役立つと思われる人向けに、[[Railroadダイアグラム|Railroad Diagrams]]を使用して示されている文法に従います。ただし、このグループのTiddlerを理解していなくても、[[フィルタの書き方を学ぶ|Introduction to filter notation]]ことができます""">> + +<<.def フィルタ>>は、<<.def インプット>>を<<.def アウトプット>>に変換するためのパイプラインです。インプットとアウトプットはどちらも、Tiddlerとフィールドの[[タイトルの順序付き集合|Title Selection]]です + +フィルタは、''ラン''と呼ばれる小さな構成要素から構成される''式''であり、''ラン''は''ステップ''を使用して構築されます。それぞれがインプットをアウトプットに変換します + +フィルタは空のアウトプットから始まります。その実行は左から右に処理され、アウトプットが徐々に修正されます。 + +"フィルタのシンタックス"の記述は次で始まります: + +<$railroad text=""" +\start double +\end double +[[<"フィルタ式">|"Filter Expression"]] +"""/> + +<<.tip "上記のようなRailroadボックスを使用して移動できます。">> \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Whitespace.tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Whitespace.tid new file mode 100644 index 0000000000..e478a19f3a --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Whitespace.tid @@ -0,0 +1,15 @@ +created: 20150124182304000 +modified: 20250510104756224 +original-modified: 20230710074447240 +tags: [[Filter Expression]] +title: Filter Whitespace +ja-title: フィルタホワイトスペース +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +{( "スペース" | "タブ" | "ラインフィード" | "リターン" | "垂直タブ" | "改ページ" )} +"""/> + +[[フィルタ式|Filter Expression]]の各ランの間にはホワイトスペース文字が出現します。 \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Interchangeable Filter Run Prefixes.tid b/editions/ja-JP/tiddlers/filters/syntax/Interchangeable Filter Run Prefixes.tid new file mode 100644 index 0000000000..d1eda102ef --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Interchangeable Filter Run Prefixes.tid @@ -0,0 +1,47 @@ +created: 20230316151518640 +modified: 20250225113139787 +original-modified: 20230327130626715 +tags: [[Filter Run Prefix]] +title: Interchangeable Filter Run Prefixes +ja-title: 交換可能なフィルターランプレフィックス +type: text/vnd.tiddlywiki + +!! 交換可能なフィルターランプレフィックス + +技術的/論理的な用語で言えば: + +|!ラン |!同等の名前付きプレフィックス |!解釈 |!アウトプット | +|`[run]` |`:or[run]` |重複を排除した和集合 |... OR ラン | +|`+[run]` |`:and[run]` |フィルタステップの蓄積 |... AND ラン | +|`-[run]` |`:except[run]` |差集合 |... AND NOT ラン | +|`~[run]` |`:else[run]` |それ以外 |... ELSE ラン | +|`=[run]` |`:all[run]` |重複を排除しない和集合 |... OR ラン | + +ランのインプットは通常、Wiki内の[[隠し|ShadowTiddlers]]Tiddler以外のすべてのTiddlerタイトルのリストです(順不同)。<br>ただし、`+`プレフィックスによってこれを変更できます: + +|プレフィックス|インプット|h +|`-`, `~`, `=`, `:intersection` あるいは、無し| 最初の[[フィルタオペレータ|Filter Operators]]によって特に指定されない限り、<$link to="all Operator">`[all[]]`</$link> Tiddlerのタイトル| +|`+`, `:filter`, `:map`, `:reduce`,`:sort` |これまでのすべてのランのフィルタアウトプット| + +インプットが変化するため、`-`と`+`の両方のプレフィックスが互いに逆の動作をしないことに注意してください。 + +たとえば、次の2つの例では、`$:/baz`は実際に存在する場合にのみ削除されます: + +* <$link to="is Operator"> `foo bar $:/baz -[is[system]]`</$link> +* <$link to="prefix Operator">`foo bar $:/baz -[prefix[$:/]]`</$link> + +理由を理解するには、両方の最後のランのインプットとその`-`プレフィックスを考慮してください。 + +存在するかどうかに関係なく、`$:/baz`を削除するには、[[否定のフィルタオペレータ|Filter Operators]]とともに`+`プレフィックスを使用するだけです: + +* <$link to="is Operator">`foo bar $:/baz +[!is[system]]`</$link> +* <$link to="prefix Operator">`foo bar $:/baz +[!prefix[$:/]]`</$link> + +!! +と和集合の違い + +`+`と`:intersection`の違いについては[[和集合フィルタランプレフィックス(例)|Intersection Filter Run Prefix (Examples)]]を参照してください。 + +!! 開発者向け + +新しいフィルタランプレフィックスを作成するには、`filterrunprefix`の[[モジュールタイプ|ModuleType]]で +[[Javascriptモジュール|Modules]]を作成します。 diff --git a/editions/ja-JP/tiddlers/filters/syntax/Intersection Filter Run Prefix (Examples).tid b/editions/ja-JP/tiddlers/filters/syntax/Intersection Filter Run Prefix (Examples).tid new file mode 100644 index 0000000000..851d2ad2e4 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Intersection Filter Run Prefix (Examples).tid @@ -0,0 +1,38 @@ +created: 20211128212902292 +modified: 20250319104544220 +original-modified: 20230305125354209 +tags: [[Intersection Filter Run Prefix]] +title: Intersection Filter Run Prefix (Examples) +ja-title: intersectionフィルタランプレフィックス(例) +type: text/vnd.tiddlywiki + +<<.operator-example 1 "A B C D :intersection[enlist[C D E F]]">> + +<<.operator-example 2 "A B C D :intersection[enlist[A B C D]]">> + +<<.operator-example 3 "A B C D :intersection[enlist[E F G H]]">> + +<<.operator-example 4 ":intersection[enlist[A B C D]]" "最初のフィルタランでintersectionを使用することはあまり役に立ちません。結果は常に空になります。">> + +!! `+`と`:intersection`の違い + +プレフィックス`+`は、形式論理における"AND"として考えてください。たとえば、"条件A ''かつ'' 条件Bを満たすすべてのタイトルを取得する"などです。ただし、すべてのケースに適しているわけではありません。条件Bがインプットを置き換えるフィルタオペレータを使用する場合、プレフィックス`+`の使用は難しくなります。たとえば、2つのTiddlerに共通するタグを見つけたい場合は、次のようなフィルタ式を記述します: + +* <$link to="tags Operator">`[[field Operator]tags[]] +[[compare Operator]tags[]]`</$link> + +しかし、これは機能しません。2回目のフィルタランでインプットが破棄され、単一のtitle`[[compare Operator]]`で構成されるインプットに置き換えられるからです。そのため、このフィルタ式から得られる結果は、`compare Operator`Tiddlerのタグだけになります。 + +このような場合、必要なのは`:intersection`プレフィックスです。これまでのフィルタアウトプットを取得して、//保留し//、すべてのTiddlerタイトルをインプットとして次のフィルタランを開始します。その後、最新のフィルタランが完了すると、最新のアウトプットを取得して保留していたアウトプットと比較し、保留していたアウトプットと最新のアウトプットの両方に表示されたタイトルのみを含む新しいアウトプットを生成します。したがって、`field Operator`と`compare Operator`に共通するタグのみを取得するには、次のようなフィルタ式を記述します。 + +* <$link to="tags Operator">`[[field Operator]tags[]] :intersection[[compare Operator]tags[]]`</$link> + +次の例では、[[field Operator]]と[[compare Operator]]を使用して、Tiddlerとそれぞれのタグを比較します。 + +<<.operator-example 5 "[[field Operator]tags[]]">> +<<.operator-example 6 "[[compare Operator]tags[]]">> + +<<.operator-example 7 "[[field Operator]tags[]] +[[compare Operator]tags[]]" """"field Operator"Tiddlerのタグは失われるため、"compare Operator"Tiddlerのタグのみが返されます""">> + +<<.operator-example 8 "[[field Operator]tags[]] :intersection[[compare Operator]tags[]]" """両方のTiddlerに共通するタグを返します""">> + + diff --git a/editions/ja-JP/tiddlers/filters/syntax/Intersection Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Intersection Filter Run Prefix.tid new file mode 100644 index 0000000000..61872df3c3 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Intersection Filter Run Prefix.tid @@ -0,0 +1,22 @@ +created: 20211128212902292 +from-version: 5.1.23 +modified: 20250317105829721 +original-modified: 20230710073322863 +rp-input: 前のフィルタランからのすべてのタイトル +rp-output: このフィルタランの結果と前のランのアウトプットの両方に存在するタイトル +rp-purpose: 前のランからのタイトルとこのフィルタのタイトルの共通部分を見つける +tags: [[Named Filter Run Prefix]] +title: Intersection Filter Run Prefix +ja-title: intersectionフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":intersection" | - ) +[["ラン"|"Filter Run"]] +"""/> + +前のランからのフィルタアウトプットは保留されます。`:intersection`フィルタランは、すべてのTiddlerタイトルをインプットとして開始されます。この最後のフィルタランが完了すると、最後のアウトプットが保留アウトプットと比較されます。保留アウトプットと最新アウトプットの両方に表われるタイトルのみを含む新しいアウトプットが生成されます。 + +[[intersectionフィルタランプレフィックス(例)|Intersection Filter Run Prefix (Examples)]] diff --git a/editions/ja-JP/tiddlers/filters/syntax/Map Filter Run Prefix (Examples).tid b/editions/ja-JP/tiddlers/filters/syntax/Map Filter Run Prefix (Examples).tid new file mode 100644 index 0000000000..4132486df4 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Map Filter Run Prefix (Examples).tid @@ -0,0 +1,60 @@ +created: 20210618134753828 +modified: 20250416110748088 +original-modified: 20230305125405422 +tags: [[Map Filter Run Prefix]] +title: Map Filter Run Prefix (Examples) +ja-title: mapフィルタランプレフィックス(例) +type: text/vnd.tiddlywiki + +インプットタイトルが存在する場合はキャプションフィールドで置き換え、存在しない場合はインプットタイトルを保持します: + +<<.operator-example 1 "[tag[Widgets]] :map[get[caption]else{!!title}]">> + +<<.tip "上記の例は`[tag[Widgets]] :map[{!!caption}!is[blank]else{!!title}]`と同等です。フィールドを`{!!caption}`のようにテキスト参照として参照する場合、存在しない、または空のキャプションフィールドに対しては空文字列が返されることに注意してください。したがって、`else`オペレータの前に`is[blank]`のチェックが必要です。">> + +買い物リストの各タイトルについて、各アイテムの購入にかかる合計コストを計算します: + +<<.operator-example 2 "[tag[shopping]] :map[get[quantity]else[0]multiply{!!price}]">> + +`Widget:`でタグ付けされたすべてのTiddlerのタグを取得します: + +<<.operator-example 3 "[tag[Widgets]] :map:flat[tagging[]] :and[!is[blank]unique[]]">> +<<.tip "`flat`サフィックスがない場合、`:map`フィルタランは各インプットタイトルの最初の結果のみを返します">> + +!! `:map`の`flat`サフィックスの有無の比較 + +`:map`フィルタランは、少なくともインプットと同じ数のアウトプットを返します。デフォルトでは、1つのインプット項目に対して1つのアウトプット項目が生成されます。フィルタランによってインプット項目が空の結果に変換された場合、その項目のアウトプットは空の文字列になります。フィルタランによってインプット項目が複数の項目に変換された場合、アウトプットには最初の項目のみが表われます。この動作は、`flat`サフィックスを指定することで上書きできます。`flat`サフィックスを指定すると、すべての項目がアウトプットに表れます。 + +| `:map` | `:map:flat` | +|^<<.operator-example m0.1 "[range[4]] :map[match[this matches nothing]]">>|^<<.operator-example m0.2 "[range[4]] :map:flat[match[this matches nothing]]">>| +|^<<.operator-example m1.1 "[range[4]] :map[range<currentTiddler>]">>|^<<.operator-example m1.2 "[range[4]] :map:flat[range<currentTiddler>]">>| +|^<<.operator-example m2.1 "[range[4]] :map[range<currentTiddler>]">>|^<<.operator-example m2.2 "[range[4]] :map:flat[range<currentTiddler>first[]]">>| +|^<<.operator-example m3.1 "[range[4]] :map[range<currentTiddler>sum[]]">>|^<<.operator-example m3.2 "[range[4]] :map:flat[range<currentTiddler>sum[]]">>| +|^<<.operator-example m4.1 "[[1,2,3]] [[4,5]] :map[split[,]]">>|^<<.operator-example m4.2 "[[1,2,3]] [[4,5]] :map:flat[split[,]]">>| +|^<<.operator-example m5.1 "[[1,2,3]] [[4,5]] :map[split[,]]">>|^<<.operator-example m5.2 "[[1,2,3]] [[4,5]] :map:flat[split[,]first[]]">>| + + +!! `:map`と`:and`/`+`フィルタランプレフィックスの比較 + +`:map`フィルタランプレフィックスの機能は、`:and` プレフィックス(別名`+`)と一部重複しています。これらは同じ結果を返す場合もありますが、少なくとも以下の場合には結果が異なります: + +# `:and`フィルタランによってアイテム数が変更される(増加や減少)場合があります。`:map`フィルタランによってアイテム数が変更されることはありません。 +# `:and`フィルタランのアイテム数は、[[重複排除|Dominant Append]]により減少します。`:map`ランは[[重複排除|Dominant Append]]は行われません。 +# "currentTiddler"変数への明示的な参照は異なる動作をします +# TextReferenceを使用した"currentTiddler"への暗黙的な参照は異なる動作をします。 + +| `:map` | `:and` | +|!結果は同じ|<| +|^<<.operator-example 1.1 "[range[5]] :map[add[1]]">>|^<<.operator-example 1.2 "[range[5]] :and[add[1]]">>| +|^<<.operator-example 2.1 "[range[5]] :map[addsuffix[ hello]]">>|^<<.operator-example 2.2 "[range[5]] :and[addsuffix[ hello]]">>| +|^<<.operator-example 3.1 "[tag[shopping]] :map[get[quantity]]">>|^<<.operator-example 3.2 "[tag[shopping]] :and[get[quantity]]">>| +|!項目数が減少|<| +|^<<.operator-example 4.1 "[range[5]] :map[sum[]]">>|^<<.operator-example 4.2 "[range[5]] :and[sum[]]">>| +|^<<.operator-example 5.1 "[range[5]] :map[join[,]]">>|^<<.operator-example 5.2 "[range[5]] :and[join[,]]">>| +|!項目数が増加|<| +|^<<.operator-example 6.1 "[[1,2,3]] [[4,5]] :map[split[,]]">>|^<<.operator-example 6.2 "[[1,2,3]] [[4,5]] :and[split[,]]">>| +|!重複排除|<| +|^<<.operator-example 7.1 "[range[5]] :map[[hello]]">>|^<<.operator-example 7.2 "[range[5]] :and[[hello]]">>| +|!currentTiddler|<| +|^<<.operator-example 8.1 "[tag[shopping]] :map[<currentTiddler>]">>|^<<.operator-example 8.2 "[tag[shopping]] :and[<currentTiddler>]">>| +|^<<.operator-example 9.1 "[tag[shopping]] :map[{!!quantity}]">>|^<<.operator-example 9.2 "[tag[shopping]] :and[{!!quantity}]">>| diff --git a/editions/ja-JP/tiddlers/filters/syntax/Map Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Map Filter Run Prefix.tid new file mode 100644 index 0000000000..401a13a89d --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Map Filter Run Prefix.tid @@ -0,0 +1,35 @@ +created: 20210618133745003 +from-version: 5.2.0 +modified: 20250319105451115 +original-modified: 20240312202834547 +rp-input: 前回までのすべてのランのフィルタアウトプット +rp-output: このフィルタランの結果によって変更されたインプットタイトル +rp-purpose: 各項目に対してこのフィルタを実行した結果に基づいてインプットタイトルを変更 +rp-suffix: <<.from-version "5.2.3">> フィルタランからすべての結果を返す場合は<<.value flat>>、最初の結果のみを返す場合は省略(デフォルト) +tags: [[Named Filter Run Prefix]] +title: Map Filter Run Prefix +ja-title: mapフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":map" (: ":flat" | - ) | - ) +[["ラン"|"Filter Run"]] +"""/> + +以前のランからの各インプットタイトルは、順番にこのランに渡されます。フィルタランはインプットタイトルを変換し、このランのアウトプットはインプットタイトルを置き換えます。たとえば、フィルタラン`[get[caption]else{!!title}]`は、タイトルが保持されるフィールドが存在しない場合以外、各インプットタイトルをそのキャプションフィールドに置き換えます。 + +フィルタラン内では、<<.var currentTiddler>>変数は処理中のTiddlerのタイトルに設定されていることに注意してください。これにより、`:map[{!!price}multiply{!!cost}]`のようなフィルタランが計算に使用できるようになります。 + +フィルタラン内では、次の変数を使用できます: + +* <<.var currentTiddler>> - インプットタイトル +* <<.var ..currentTiddler>> - フィルタランの外での変数`currentTiddler`の値。 +* <<.var index>> - <<.from-version "5.2.1">> 現在のリスト項目の数値インデックス(リストの最初の項目はゼロ)。 +* <<.var revIndex>> - <<.from-version "5.2.1">> 現在のリスト項目の逆数値インデックス(リストの最後の項目はゼロ)。 +* <<.var length>> - <<.from-version "5.2.1">> インプットリストの合計の長さ。 + +`:map`プレフィックス付きで使用されるフィルタランは、渡された項目と少なくとも同じ数の項目を返す必要があります。フィルタランがアウトプットを返さないインプットタイトルは、空の文字列に置き換えられます。特に、[[getオペレータ|get Operator]]を使用してフィールドの値を取得する場合は、[[elseオペレータ|else Operator]] を使用してフィールド値が欠落しないようにすると役立ちます。たとえば、`[get[myfield]else[default-value]...`のようにします。 + +[[mapフィルタランプレフィックス(例)|Map Filter Run Prefix (Examples)]] \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Named Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Named Filter Run Prefix.tid new file mode 100644 index 0000000000..bb856eee44 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Named Filter Run Prefix.tid @@ -0,0 +1,38 @@ +created: 20201214044413473 +modified: 20250227102948619 +original-modified: 20230711090833212 +tags: [[Filter Run Prefix]] +title: Named Filter Run Prefix +ja-title: 名前付きフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<<.from-version "5.1.23">>で、名前付きフィルタランプレフィックスが実装されました。図に示すように、`:cascade`、`:map`、`:sort`が後から追加されました。 + +名前付きフィルタランプレフィックスは、[[ショートカットランプレフィックス|Shortcut Filter Run Prefix]]の代わりに、[[フィルタ式|Filter Expression]]の[[ラン|Filter Run]]の前に置くことができます。 + +<$railroad text=""" +\start none +\end none +( +[[<":all"> |"All Filter Run Prefix"]] | +[[<":and"> |"And Filter Run Prefix"]] | +[[<":cascade"> /"v5.2.1"/ |"Cascade Filter Run Prefix"]] | +[[<":else"> |"Else Filter Run Prefix"]] | +[[<":except"> |"Except Filter Run Prefix"]] | +[[<":filter"> |"Filter Filter Run Prefix"]] | +[[<":intersection"> |"Intersection Filter Run Prefix"]] | +[[<":map"> /"v5.2.0"/ |"Map Filter Run Prefix"]] | +[[<":or"> |"Or Filter Run Prefix"]] | +[[<":reduce"> |"Reduce Filter Run Prefix"]] | +[[<":sort"> /"v5.2.0"/ |"Sort Filter Run Prefix"]] | +[[<":then"> /"v5.3.0"/ |"Then Filter Run Prefix"]]) [[run|"Filter Run"]] +"""/> + + +<<.tip "名前付きフィルタランプレフィックス`:filter`を、すべてのインプットタイトルにサブフィルタを適用し、サブフィルタから空の結果を返すタイトルを除外する[[filterオペレータ|filter Operator]]と比較します">> + +<<.tip "名前付きフィルタランプレフィックス`:reduce`を、サブフィルタを繰り返し適用してアイテムのリストを単一のアイテムに平坦化するために使用される[[reduceオペレータ|reduce Operator]]と比較します">> + +<<.tip """フィルタランプレフィックス`:reduce`、`:sort`、`:map`、`:filter`内では、変数<<.var currentTiddler>>は処理中のTiddlerのタイトルに設定されます。<br>サブフィルタ外のcurrentTiddlerの値は、変数<<.var "..currentTiddler">>で使用できます <<.from-version "5.2.0">>""" >> + +参照: [[交換可能なフィルターランプレフィックス|Interchangeable Filter Run Prefixes]] diff --git a/editions/ja-JP/tiddlers/filters/syntax/Or Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Or Filter Run Prefix.tid new file mode 100644 index 0000000000..5bb7928dae --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Or Filter Run Prefix.tid @@ -0,0 +1,20 @@ +created: 20230318135743766 +from-version: 5.1.23 +modified: 20250417105150020 +original-modified: 20230322140708372 +rp-input: 前回のフィルタランからのすべてのタイトル +rp-output: アウトプットタイトルは主に、前回のフィルタランのアウトプットに[[重複排除して追加|Dominant Append]]されます。 +rp-purpose: Tiddlerセットの重複排除した結合 +tags: [[Named Filter Run Prefix]] +title: Or Filter Run Prefix +ja-title: orフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":or" | - ) +[["ラン"|"Filter Run Prefix"]] +"""/> + +:or プレフィックスはプレフィックスを全く使用しないのと同じです。[[フィルタランプレフィックスのショートカット|Shortcut Filter Run Prefix]]で`run`を参照してください diff --git a/editions/ja-JP/tiddlers/filters/syntax/Reduce Filter Run Prefix (Examples).tid b/editions/ja-JP/tiddlers/filters/syntax/Reduce Filter Run Prefix (Examples).tid new file mode 100644 index 0000000000..2e006b52a9 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Reduce Filter Run Prefix (Examples).tid @@ -0,0 +1,29 @@ +created: 20211124151912931 +modified: 20250419111355942 +original-modified: 20230305125430544 +tags: [[Reduce Filter Run Prefix]] +title: Reduce Filter Run Prefix (Examples) +ja-title: reduceフィルタランプレフィックス(例) +type: text/vnd.tiddlywiki + +\define multiply-input() [multiply<accumulator>] + +次の例では、これらのデータTiddlerを使用します: + +<ul> +<$list filter="[tag[shopping]!has[draft.of]]"> +<li> +''<$link><$text text=<<currentTiddler>>/></$link>'' quantity: <$text text={{!!quantity}}/>, price: <$text text={{!!price}}/> +</li> +</$list> +</ul> + +<<.operator-example 1 "[tag[shopping]] :reduce[get[quantity]add<accumulator>]">> +<<.operator-example 2 "[tag[shopping]] :reduce[get[price]multiply{!!quantity}add<accumulator>]">> +<<.operator-example 3 "[tag[shopping]] :reduce[<index>compare:number:gt[0]then<accumulator>addsuffix[, ]addsuffix<currentTiddler>else<currentTiddler>]" "最初の項目に対して他の項目とは異なる動作をさせるために`<index>`を使用します。これはあくまでもデモンストレーションです。このタスクを実行するには、[[joinオペレータ|join Operator]]を使うのがよいです">> +<<.operator-example 4 "[tag[non-existent]] :reduce[get[price]multiply{!!quantity}add<accumulator>]" "空のインプットは空のアウトプットを生成します">> +<<.operator-example 5 "[tag[non-existent]] :reduce[get[price]multiply{!!quantity}add<accumulator>] :else[[0]]" "インプットが空の場合に確実にアウトプットするために`:else`使用します">> + +<$macrocall $name=".tip" _="""[[reduceオペレータ|reduce Operator]]とは異なり、`:reduce`プレフィックスはaccumulatorの初期値を指定できないため、初期値は常に空(数学オペレータでは0として扱われます)になります。したがって`=1 =2 =3 :reduce[multiply<accumulator>]`は、6ではなく0が生成されます。accumulatorの初期値を指定する必要がある場合は、[[reduceオペレータ|reduce Operator]]を使用します。"""/> +<<.operator-example 6 "=1 =2 =3 :reduce[multiply<accumulator>]" "空の初期値は数学オペレータによって0として扱われます">> +<<.operator-example 7 "=1 =2 =3 +[reduce<multiply-input>,[1]]" "正しい結果を得るためには初期値の設定が必要な場合があります">> \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Reduce Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Reduce Filter Run Prefix.tid new file mode 100644 index 0000000000..5d314b15bf --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Reduce Filter Run Prefix.tid @@ -0,0 +1,49 @@ +created: 20211124151912931 +from-version: 5.1.23 +modified: 20250417105804821 +original-modified: 20230710073305239 +rp-input: 前回のフィルタランからのすべてのフィルタアウトプット +rp-output: 累積された単一アイテム +rp-purpose: 各インプットタイトルにフィルタランを繰り返し適用して、前回までのすべてのフィルタアウトプットを単一の項目に置き換え +tags: [[Named Filter Run Prefix]] +title: Reduce Filter Run Prefix +ja-title: reduceフィルタランプレフィックス +type: text/vnd.tiddlywiki + + +<$railroad text=""" +\start none +\end none +( ":reduce" | - ) +[["ラン"|"Filter Run"]] +"""/> + + +前回のランからの各インプットタイトルは、順番にこのランに渡されます。このランへの以前の呼び出しの結果は、変数<<.var accumulator>>を介して次の呼び出しで使用できます。このランへの最後の呼び出しの結果がアウトプットとして返されます。典型的な使用法は、各インプットタイトルの特定のフィールドの値を合計することです。 + +上記のように、数式を各インプットタイトルに繰り返し適用して、これまでのすべてのフィルタアウトプットを1つの項目に置き換えます。 + +フィルタラン内では、次の変数を使用できます: + +* <<.var accumulator>> - 前回のフィルタランの結果 +* <<.var currentTiddler>> - インプットタイトル +* <<.var ..currentTiddler>> - フィルタラン外での変数`currentTiddler`の値。 <<.from-version "5.2.0">> +* <<.var index>> - 現在のリスト項目の数値インデックス(リストの最初の項目は0) +* <<.var revIndex>> - 現在のリスト項目の逆の数値インデックス(リストの最後の項目は0) +* <<.var length>> - インプットリストの長さの合計 + +<<.tip "名前付きフィルタランプレフィックス`:reduce`を、サブフィルタを繰り返し適用して項目リストを1つの項目に平坦化するために使用される[[reduceオペレータ|reduce Operator]]`:reduce`と比べてください。">> + +``` +[tag[shopping]] :reduce[get[quantity]add<accumulator>] +``` + +は以下と同等です: + +``` +\define num-items() [get[quantity]add<accumulator>] + +[tag[shopping]reduce<num-items>] +``` + +[[reduceフィルタランプレフィックス(例)|Reduce Filter Run Prefix (Examples)]] \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Shortcut Filter Run Prefixes.tid b/editions/ja-JP/tiddlers/filters/syntax/Shortcut Filter Run Prefixes.tid new file mode 100644 index 0000000000..ca286b3e7b --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Shortcut Filter Run Prefixes.tid @@ -0,0 +1,30 @@ +created: 20230305131705188 +modified: 20250510102220175 +original-modified: 20230710074438655 +tags: [[Filter Run Prefix]] +title: Shortcut Filter Run Prefix +ja-title: ショートカットフィルタランプレフィックス +type: text/vnd.tiddlywiki + +ショートカットのプレフィックスはタイピングが速いため、上級ユーザーによく使用されますが、経験の浅いユーザーには読みにくいという欠点があります。そのため、より詳細な情報を持つ[[名前付きプレフィックス|Named Filter Run Prefix]]が作成されました。ショートカットと名前付きフィルタランプレフィックスは、以下の表に示すように互換性があります。 + +<$railroad text=""" +\start none +\end none +(-|:"+"|"-"|"~"|"=") +[["ラン"|"Filter Run"]] +"""/> + +ランに次の内容が含まれている場合: + +* プレフィックスが無い場合、アウトプットタイトルはフィルタのアウトプットに[[優先的に追加|Dominant Append]]されます + +* プレフィックス`+`は、前回までのフィルタアウトプットをインプットとして受け取り、そのアウトプットはこれまでのすべてのフィルタアウトプットを<<.em "置き換え">>、次のランのインプットを形成します + +* プレフィックス`-`は、アウトプットタイトルがフィルタのアウトプットから<<.em 取り除か>>れます(そのようなTiddlerが存在する場合) + +* プレフィックス`~`は、フィルタアウトプットが空リストの場合、ランの結果のタイトルがフィルタアウトプットに[[優先的に追加|Dominant Append]]されます。フィルタアウトプットが空リストでない場合、ランは無視されます。<<.from-version "5.1.18">> + +* プレフィックス`=`は、アウトプットタイトルが重複排除されずにフィルタのアウトプットに追加されます。<<.from-version "5.1.20">> + +{{Interchangeable Filter Run Prefixes}} \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Sort Filter Run Prefix (Examples).tid b/editions/ja-JP/tiddlers/filters/syntax/Sort Filter Run Prefix (Examples).tid new file mode 100644 index 0000000000..8df6adb1a6 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Sort Filter Run Prefix (Examples).tid @@ -0,0 +1,35 @@ +created: 20210428074912172 +modified: 20250420104606860 +original-modified: 20230315165343329 +tags: [[Sort Filter Run Prefix]] +title: Sort Filter Run Prefix (Examples) +ja-title: sortフィルタランプレフィックス(例) +type: text/vnd.tiddlywiki + +タイトルの長さで並べ替え: + +<<.operator-example 1 "[all[tiddlers]] :sort:number[length[]] +[limit[10]]">> + +タイトルの長さを逆順に並べ替え: + +<<.operator-example 2 "[all[tiddlers]] :sort:number:reverse[length[]] +[limit[10]]">> + +テキストの長さで並べ替え: + +<<.operator-example 3 "[all[tiddlers]] :sort:number[get[text]length[]] +[limit[10]]">> + +修正日の新しい順に並べ替え: + +<<.operator-example 4 "[tag[Field Operators]] :sort:date[get[modified]else[19700101]] +[limit[10]]">> + +タイトルで並べ替え: +<<.operator-example 5 "[tag[Field Operators]] :sort:string:casesensitive[get[caption]] +[limit[10]]">> + +タイトルの逆順に並べ替え: +<<.operator-example 6 "[tag[Field Operators]] :sort:string:casesensitive,reverse[get[caption]] +[limit[10]]">> + +大文字と小文字を区別してテキストとして並べ替え: +<<.operator-example 7 "Apple Banana Orange Grapefruit guava DragonFruit Kiwi apple orange :sort:string:casesensitive[{!!title}]">> + +大文字と小文字を区別せずにテキストとして並べ替え: +<<.operator-example 8 "Apple Banana Orange Grapefruit guava DragonFruit Kiwi apple orange :sort:string:caseinsensitive[{!!title}]">> diff --git a/editions/ja-JP/tiddlers/filters/syntax/Sort Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/Sort Filter Run Prefix.tid new file mode 100644 index 0000000000..7dce33f71b --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Sort Filter Run Prefix.tid @@ -0,0 +1,61 @@ +created: 20210428083929749 +from-version: 5.2.0 +modified: 20250419111702297 +original-modified: 20240717120111427 +rp-input: 前回までのすべてのランのフィルタアウトプット +rp-output: アウトプットタイトルは、以前のフィルタランのアウトプットを置き換え +rp-purpose: 各項目に対して実行されたこのフィルタの評価結果によってインプットタイトルを並べ替え +rp-suffix: :sortフィルタランプレフィックスはリッチサフィックスを使用します。詳細については以下を参照 +rp-suffix-name: S +tags: [[Named Filter Run Prefix]] +title: Sort Filter Run Prefix +ja-title: sortフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +( ":sort" ) +( ":" ) +( : "string" | "alphanumeric" | "number" | "integer" | "version" | "date" ) +( ":" ) +{ + ( + ( + ( : "caseinsensitive" /"stringとalphanumericには必須"/ | "casesensitive" /"stringとalphanumericには必須"/) + | "reverse" /"オプション"/ + ) + ) + +"," +} +[["ラン"|"Filter Run"]] +"""/> + +前回のランからインプットされた各タイトルは、今回のランに順番に渡されます。フィルタランは、インプットタイトルをソートに必要な形式に変換します。例えば、フィルタラン`[length[]]`は各インプットタイトルをその長さを表す数値に変換し、インプットタイトルを長さに基づいてソートします。 + +フィルタラン内では、<<.var currentTiddler>>変数が処理中のTiddlerのタイトルに設定されていることに注意してください。これにより、`:sort:number[{!!value}divide{!!cost}]`のようなフィルタランを計算に使用できます。ラン外の<<.var currentTiddler>>の値は、<<.var "..currentTiddler">>変数で使用できます。 + +`:sort` <<.place S>>フィルタランプレフィックスでは、複数のサフィックスを許可する拡張構文が使用されます。その一部は必須です: + +``` +:sort:<type>:<flaglist>[...filter run...] + +``` + +* ''type'': 必須。項目の比較方法を決定し、''string''、''alphanumeric''、''number''、''integer''、''version''、''date''のいずれかになります。 + +* ''flaglist'': 次のフラグのコンマ区切りリスト: + +** ''casesensitive'' または ''caseinsensitive'' (typeが`string`や`alphanumeric`のとき必須)。 +*** フラグがない場合、デフォルトは: //caseinsensitive// です。 +*** 明確にするために、このパラメータは常に定義する必要があります。 + +** フィルター実行の順序を反転するには、''reverse''を使用します(オプション)。 + +<<.tip """`:sort`プレフィックス付きのフィルタランは、''渡された項目と同じ数の項目が返される''ことに注意してください。特に、[[getオペレータ|get Operator]]を使用してフィールドの値を取得する場合は、[[elseオペレータ|else Operator]]を使用してフィールド値が欠落するのを防ぐと便利です。例えば`...[get[myfield]else[default-value]]`。<br><br> + +''missing''エントリは''ゼロ''または''空文字列''として扱われます。 + +参照: <<.olink sortsub>>オペレータ + +[[例|Sort Filter Run Prefix (Examples)]] \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/Then Filter Run Prefix (Examples).tid b/editions/ja-JP/tiddlers/filters/syntax/Then Filter Run Prefix (Examples).tid new file mode 100644 index 0000000000..5d08134638 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/Then Filter Run Prefix (Examples).tid @@ -0,0 +1,53 @@ +created: 20230617183745774 +modified: 20250504103912315 +original-modified: 20230617183745774 +tags: [[Then Filter Run Prefix]] +title: Then Filter Run Prefix (Examples) +ja-title: thenフィルタランプレフィックス(例) +type: text/vnd.tiddlywiki + + +!! 条件実行 + +<<.op :then>>フィルタランプレフィックスを使用すると、ネストした[[ListWidget]]や[[WikiText内のマクロ定義|Macro Definitions in WikiText]]の必要性を回避できます。 + +<$macrocall $name='wikitext-example-without-html' +src="""<$edit-text field="search" placeholder="Search title"/> + +<$let searchTerm={{!!search}}> +<$list filter="[<searchTerm>minlength[3]] :then[!is[system]search:title<searchTerm>]" template="$:/core/ui/ListItemTemplate"/> +</$let>"""/> + + +!! 条件(サブ)フィルタ + +<<.op :then>>フィルターランプレフィックスを<<.op :else>>プレフィックスと組み合わせて条件フィルタを作成できます。この例では、<<.var searchSubfilter>>内の検索に使用されるフィールドは[[$:/temp/searchFields]]の値に依存し、<<.var sortSubfilter>>による並べ替え順序は[[$:/temp/searchSort]]の値に依存します。これらのTiddlerの値を設定するには、チェックボックスを使用します。 + +<<.tip "サブフィルタ内の各フィルタランは、<<.olink subfilter>>オペレータのインプットをインプットとして受け取ることに注意してください">> + +<<.olink then>>と<<.olink else>>オペレータはサブフィルタを呼び出したり追加のフィルタステップを実行できないため、このようなアプリケーションには使用できません。 + +<$macrocall $name='wikitext-example-without-html' +src="""<$checkbox tiddler="$:/temp/searchSort" + field="text" + checked="chrono" unchecked="alpha" default="alpha"> + 時系列順に並べ替え(新しい順) +</$checkbox><br/> +<$checkbox tiddler="$:/temp/searchFields" + field="text" + checked="title" unchecked="default" default="title"> + <<.field title>>のみを検索 +</$checkbox><p/> +<$let searchSubfilter="[{$:/temp/searchFields}match[default]] :then[search[prefix]] :else[search:title[prefix]]" + sortSubfilter="[{$:/temp/searchSort}match[chrono]] :then[!nsort[modified]] :else[sort[title]]" + limit=10 > + <$list filter="[all[tiddlers]!is[system]subfilter<searchSubfilter>subfilter<sortSubfilter>first<limit>]"> + <$link/> (<$text text={{{ [{!!modified}format:date[YYYY-0MM-0DD]] }}} />)<br/> + </$list> + <$list filter="[all[tiddlers]!is[system]subfilter<searchSubfilter>rest<limit>count[]]"> + ... and <<currentTiddler>> more. + </$list> +</$let>"""/> + +時系列順に並べ替える(新しい順) +検索titleのみ \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/filters/syntax/then Filter Run Prefix.tid b/editions/ja-JP/tiddlers/filters/syntax/then Filter Run Prefix.tid new file mode 100644 index 0000000000..4a483b2b75 --- /dev/null +++ b/editions/ja-JP/tiddlers/filters/syntax/then Filter Run Prefix.tid @@ -0,0 +1,41 @@ +created: 20210618133745003 +from-version: 5.3.0 +modified: 20250423104147235 +original-modified: 20230710074225410 +rp-input: <<.olink すべて>>のTiddlerタイトル +rp-output: フィルタランのアウトプットは、空のリストでない限り、前回までのランのアウトプットを置き換えます(以下を参照)。 +rp-purpose: フィルタランへのインプットをそのアウトプットで置き換え、インプットがある場合にのみランを評価 +search: +tags: [[Named Filter Run Prefix]] +title: Then Filter Run Prefix +ja-title: thenフィルタランプレフィックス +type: text/vnd.tiddlywiki + +<$railroad text=""" +\start none +\end none +":then" +[["ラン"|"Filter Run"]] +"""/> + +<<.op :then>>フィルターランプレフィックスは、前回までのすべてのフィルタランの結果をそのアウトプットに置き換えるために使用されます。 + +前回までのすべてのランの結果が空のリストの場合、<<.op :then>>プレフィックス付きフィルタランは評価されません。 + +<<.op :then>>プレフィックス付きフィルタランのアウトプット自体が空のリストである場合、前回までのすべてのフィルタランの結果は変更されずに渡されます。 + +<<.tip "空の文字列項目が1つ含まれるリストは空のリストではないことに注意してください。">> + +!! <<.op :then>>ランプレフィックスと<<.olink then>>オペレータの比較 + +<<.op then>>オペレータと<<.op :then>>プレフィックス付きフィルタランの主な違いは、オペレータはインプット[[タイトルリスト|Title List]]の//各項目//をそのパラメータで置き換えるのに対し、<<.op :then>>オペレータは//インプットリスト全体//をそのラン結果で置き換える点です。 + +|doc-op-comparison tc-center|k +| !<<.op :then>>フィルタランプレフィックス | !<<.op then>>オペレータ | +|^<<.operator-example m1-1 "[tag[WikiText]] :then[[true]]">>|^<<.operator-example m1-2 "[tag[WikiText]then[true]]">><p>これらを同等にするには、追加のフィルタステップを追加します:</p> <<.operator-example m1-3 "[tag[WikiText]count[]compare:number:gt[0]then[true]]">>| + + +[[thenフィルタランプレフィックス(例)|Then Filter Run Prefix (Examples)]] + +参照: [[elseフィルタランプレフィックス|Else Filter Run Prefix]] | [[thenオペレータ|then Operator]] と [[elseオペレータ|else Operator]] + diff --git a/editions/ja-JP/tiddlers/system/download-empty.tid b/editions/ja-JP/tiddlers/system/download-empty.tid index 79b98e462f..a61a20258f 100644 --- a/editions/ja-JP/tiddlers/system/download-empty.tid +++ b/editions/ja-JP/tiddlers/system/download-empty.tid @@ -2,7 +2,7 @@ title: $:/editions/ja-JP/download-empty type: text/vnd.tiddlywiki \define saveTiddlerFilter() -[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/ja-JP]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] +[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/ja-JP]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] \end \define savingEmpty() yes diff --git a/editions/ko-KR/tiddlers/system/download-empty.tid b/editions/ko-KR/tiddlers/system/download-empty.tid index 75f80307ff..940d087284 100644 --- a/editions/ko-KR/tiddlers/system/download-empty.tid +++ b/editions/ko-KR/tiddlers/system/download-empty.tid @@ -2,7 +2,7 @@ title: $:/editions/ko-KR/download-empty type: text/vnd.tiddlywiki \define saveTiddlerFilter() -[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/ko-KR]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] +[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] [[$:/languages/ko-KR]] [[$:/language]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] \end \define savingEmpty() yes diff --git a/editions/prerelease/tiddlers/Release 5.3.7.tid b/editions/prerelease/tiddlers/Release 5.3.7.tid deleted file mode 100644 index 1644c93000..0000000000 --- a/editions/prerelease/tiddlers/Release 5.3.7.tid +++ /dev/null @@ -1,98 +0,0 @@ -caption: 5.3.7 -created: 20241115171024144 -modified: 20241115171024144 -tags: ReleaseNotes -title: Release 5.3.7 -type: text/vnd.tiddlywiki -description: Under development - -//[[See GitHub for detailed change history of this release|https://github.com/TiddlyWiki/TiddlyWiki5/compare/v5.3.6...master]]// - - -! Major Improvements - -! Translation improvements - -* French -* German -* Japanese - -! Plugin Improvements - - -! Widget Improvements - -* - -! Filter Improvements - -* - -! Usability Improvements - -* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8783"> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/commit/028c80782d105beb90f5d58a7f22e865c7e8c6f4">>) [[Hidden Setting: Default Type for Missing Tiddlers]] -* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8661">> DiffTextWidget colours to several core palettes -* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8807">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8911">>) Flexoki palette with additional colours -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8837">> [[incorrect|https://localizejs.com/articles/why-using-flag-icons-can-confuse-your-users/]] use of national flags to represent languages - -! Hackability Improvements - -* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8768">> several macros such as [[colour-picker Macro]], [[dumpvariables Macro]], [[image-picker Macro]], [[translink Macro]], [[tree Macro]] and [[list-links-draggable Macro]] to use the newer syntax -* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8780">> rendered plain text template to support more languages -* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8816">> 'disabled' attribute to SelectWidget and BrowseWidget -* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8819">> 'tabindex' attribute to BrowseWidget, RangeWidget, CheckboxWidget and RadioWidget -* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8821">> the editor link dropdown to use newer syntax -* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8911">> support for images in AVIF format -* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8912">> support for custom MIME types to the [[WidgetMessage: tm-copy-to-clipboard]] - -! Bug Fixes - -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8800">> problem with overwriting shadow tiddlers from plugins that do not have a `plugin-priority` field -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8831">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8835">>) problem with switching language not correctly updating the `lang` attribute of the root `<html>` element -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8842">> bug with refreshing ExternalImages with a `_canonical_uri` field -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8882">> [[unusedtitle Macro]] to trim whitespace from the generated title -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8898">> file extensions and MIME types for font files -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8903">> bug where the wiki would be marked as dirty when a shadow tiddler is changed -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8895">> unnecessary refresh with GenesisWidget -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/d4bc3fcd998902c17cd6bcefdc8d380e5c224458">> [[WidgetMessage: tm-http-request]] to pass custom variables to the progress actions -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8930">> FillWidget to no longer display its content -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8921">> inconsistent whitespace in page toolbar "More" dropdown -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8931">> RSOD with [[contains Operator]] if created field is accessed -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8881">> incorrect .html file extension of exported tiddlers on Android -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8951">> Arabic text using sans-serif font by adding "system-ui" to default font family -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8955">> refresh problem with "save" button -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8721">> [[list-tagged-draggable Macro]] to use the "caption" field if available -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8959">> problem with missing expandable arrow in [[toc-selective-expandable|Table-of-Contents Macros]] -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/5930">> the default value does not working for the CheckboxWidget if it is bound to an index in a data tiddler -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8970">> [[median Operator]] to order values as numbers, not strings - -! Node.js Improvements - -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8789">> incorrect redirect when combining a custom [[path-prefix|WebServer Parameter: path-prefix]] with manual HTTP Basic Authentication via the [[/login-basic|WebServer API: Force Basic Authentication Login]] endpoint - -! Developer Improvements - -* - -! Acknowledgements - -[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki: - -<<.contributors """ -DesignThinkerer -flibbles -galenhuntington -IchijikuIchigo -jeremyredhead -jrbntt -jryans -Leilei332 -linonetwo -michaeljmcd -opn -pmario -Rhys-T -saqimtiaz -well-noted -xcazin -""">> diff --git a/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid b/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid index 0ad81e302f..bc2c62e1eb 100644 --- a/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid +++ b/editions/prerelease/tiddlers/system/PrereleaseLocalPluginLibrary.tid @@ -1,6 +1,6 @@ title: $:/config/LocalPluginLibrary tags: $:/tags/PluginLibrary -url: http://127.0.0.1:8080/prerelease/library/v5.3.7/index.html +url: http://127.0.0.1:8080/prerelease/library/v5.4.0/index.html caption: {{$:/language/OfficialPluginLibrary}} (Prerelease Local) A locally installed version of the official ~TiddlyWiki plugin library at tiddlywiki.com for testing and debugging. //Requires a local web server to share the library// diff --git a/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid b/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid index 2162c3b4b4..1ca7cbdb82 100644 --- a/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid +++ b/editions/prerelease/tiddlers/system/PrereleaseOfficialPluginLibrary.tid @@ -1,6 +1,6 @@ title: $:/config/OfficialPluginLibrary tags: $:/tags/PluginLibrary -url: https://tiddlywiki.com/prerelease/library/v5.3.7/index.html +url: https://tiddlywiki.com/prerelease/library/v5.4.0/index.html caption: {{$:/language/OfficialPluginLibrary}} (Prerelease) The prerelease version of the official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team. diff --git a/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid b/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid index f35234cbfb..7483128e20 100644 --- a/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid +++ b/editions/prerelease/tiddlers/system/TiddlyWiki Pre-release.tid @@ -19,4 +19,5 @@ The pre-release is also available as an [[empty wiki|https://tiddlywiki.com/prer </div> <div class="tc-subtitle">Updated: <$view field="modified" format="date" template={{$:/language/Tiddler/DateFormat}}/></div> <$transclude mode="block"/> + </$list> diff --git a/editions/prerelease/tiddlers/system/download-empty.tid b/editions/prerelease/tiddlers/system/download-empty.tid index 2c0eaa259a..0d91b9da6b 100644 --- a/editions/prerelease/tiddlers/system/download-empty.tid +++ b/editions/prerelease/tiddlers/system/download-empty.tid @@ -2,7 +2,7 @@ title: $:/editions/tw5.com/download-empty code-body: yes \define saveTiddlerFilter() -[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] [[$:/config/OfficialPluginLibrary]] +[sort[title]] +[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] [[$:/config/OfficialPluginLibrary]] +[sort[title]] \end \define savingEmpty() yes diff --git a/editions/prerelease/tiddlywiki.info b/editions/prerelease/tiddlywiki.info index c469dcf996..9b37efef3f 100644 --- a/editions/prerelease/tiddlywiki.info +++ b/editions/prerelease/tiddlywiki.info @@ -3,20 +3,16 @@ "plugins": [ "tiddlywiki/browser-sniff", "tiddlywiki/help", - "tiddlywiki/stacked-view", "tiddlywiki/powered-by-tiddlywiki", "tiddlywiki/internals", "tiddlywiki/highlight", "tiddlywiki/bibtex", - "tiddlywiki/savetrail", - "tiddlywiki/external-attachments", "tiddlywiki/dynaview", "tiddlywiki/dynannotate", "tiddlywiki/codemirror", "tiddlywiki/menubar", "tiddlywiki/jszip", "tiddlywiki/confetti", - "tiddlywiki/dynannotate", "tiddlywiki/tour" ], "themes": [ diff --git a/editions/tahoelafs/tiddlers/DefaultTiddlers.tid b/editions/tahoelafs/tiddlers/DefaultTiddlers.tid deleted file mode 100644 index cc98f9dd61..0000000000 --- a/editions/tahoelafs/tiddlers/DefaultTiddlers.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/DefaultTiddlers - -HelloThere diff --git a/editions/tahoelafs/tiddlers/HelloThere.tid b/editions/tahoelafs/tiddlers/HelloThere.tid deleted file mode 100644 index c1ddb4949f..0000000000 --- a/editions/tahoelafs/tiddlers/HelloThere.tid +++ /dev/null @@ -1,6 +0,0 @@ -title: HelloThere - -This is an experimental edition of TiddlyWiki5 for use with [[Tahoe-LAFS|https://tahoe-lafs.org/]]. At this point it is largely for experimentation by @zooko. Click the ''save changes'' button to PUT the updated TiddlyWiki HTML file back to the server. - -<$button message="tm-new-tiddler">New Tiddler</$button> -<$button message="tm-save-wiki">Save Changes</$button> diff --git a/editions/tahoelafs/tiddlers/SiteSubtitle.tid b/editions/tahoelafs/tiddlers/SiteSubtitle.tid deleted file mode 100644 index e7d536396e..0000000000 --- a/editions/tahoelafs/tiddlers/SiteSubtitle.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/SiteSubtitle - -Tahoe-LAFS edition \ No newline at end of file diff --git a/editions/tahoelafs/tiddlers/SiteTitle.tid b/editions/tahoelafs/tiddlers/SiteTitle.tid deleted file mode 100644 index a6d5ea43fd..0000000000 --- a/editions/tahoelafs/tiddlers/SiteTitle.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/SiteTitle - -TiddlyWiki5 \ No newline at end of file diff --git a/editions/tahoelafs/tiddlywiki.info b/editions/tahoelafs/tiddlywiki.info deleted file mode 100644 index 53675187e6..0000000000 --- a/editions/tahoelafs/tiddlywiki.info +++ /dev/null @@ -1,14 +0,0 @@ -{ - "description": "Demo of TahoeLAFS plugin", - "plugins": [ - "tiddlywiki/tahoelafs" - ], - "themes": [ - "tiddlywiki/vanilla", - "tiddlywiki/snowwhite" - ], - "build": { - "index": [ - "--rendertiddler","$:/core/save/all","tahoelafs.html","text/plain"] - } -} \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/Attribute.tid b/editions/test/tiddlers/tests/data/serialize/Attribute.tid new file mode 100644 index 0000000000..3f986784ad --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Attribute.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Attribute +type: text/vnd.tiddlywiki + +<$macrocall $name="rpn" a=<<rpn 2 2 *>> b="pi" operation="*" decimals="4"/> diff --git a/editions/test/tiddlers/tests/data/serialize/BlockRule.tid b/editions/test/tiddlers/tests/data/serialize/BlockRule.tid new file mode 100644 index 0000000000..316f745c6f --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/BlockRule.tid @@ -0,0 +1,7 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/BlockRule +type: text/vnd.tiddlywiki + +The speed of sound + +The light of speed \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/BoldEmphasis.tid b/editions/test/tiddlers/tests/data/serialize/BoldEmphasis.tid new file mode 100644 index 0000000000..2caac9172a --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/BoldEmphasis.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/BoldEmphasis +type: text/vnd.tiddlywiki + +This is ''bold'' text \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/CodeBlock.tid b/editions/test/tiddlers/tests/data/serialize/CodeBlock.tid new file mode 100644 index 0000000000..7a03f3aeaa --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/CodeBlock.tid @@ -0,0 +1,17 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/CodeBlock +type: text/vnd.tiddlywiki + +Simple `JS` and complex + +--- + +```js +var match = reEnd.exec(this.parser.source) +``` + +```tid +<$list filter="[tag[ExampleTag]sort[title]]"/> +``` + +end \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/CommentBlock.tid b/editions/test/tiddlers/tests/data/serialize/CommentBlock.tid new file mode 100644 index 0000000000..c90b67c25c --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/CommentBlock.tid @@ -0,0 +1,11 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/CommentBlock +type: text/vnd.tiddlywiki + +<!-- This is a comment --> + +Some text + +<!-- Another comment --> + +More text \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/CommentInline.tid b/editions/test/tiddlers/tests/data/serialize/CommentInline.tid new file mode 100644 index 0000000000..2d0e98513b --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/CommentInline.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/CommentInline +type: text/vnd.tiddlywiki + +This is some text with an inline comment <!-- This is a comment --> and some more text. \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/Conditional.tid b/editions/test/tiddlers/tests/data/serialize/Conditional.tid new file mode 100644 index 0000000000..4540e6eb44 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Conditional.tid @@ -0,0 +1,21 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Conditional +type: text/vnd.tiddlywiki + +This is a <%if [{something}] %>Elephant<%elseif [{else}] %>Pelican<%else%>Crocodile<%endif%> <%if [{something}] %>Elephant<%else%>Crocodile<%endif%> + +<%if [{$:/info/url/protocol}match[file:]]%> + Loaded from a file URI +<%elseif [{$:/info/url/protocol}match[https:]]%> + Loaded from an HTTPS URI +<%elseif [{$:/info/url/protocol}match[http:]]%> + Loaded from an HTTP URI +<%else%> + Loaded from an unknown protocol +<%endif%> + +Plain text in next paragraph. + +<%if [{$:/info/url/protocol}match[file:]]%> + Hidden. +<%endif%> diff --git a/editions/test/tiddlers/tests/data/serialize/Dash.tid b/editions/test/tiddlers/tests/data/serialize/Dash.tid new file mode 100644 index 0000000000..b0a7ddc55f --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Dash.tid @@ -0,0 +1,7 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Dash +type: text/vnd.tiddlywiki + +This is an en-dash: -- + +This is an em-dash: --- \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/Entity.tid b/editions/test/tiddlers/tests/data/serialize/Entity.tid new file mode 100644 index 0000000000..d8891e4ed9 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Entity.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Entity +type: text/vnd.tiddlywiki + +This is a copyright symbol: © \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/ExtLink.tid b/editions/test/tiddlers/tests/data/serialize/ExtLink.tid new file mode 100644 index 0000000000..de966452f3 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/ExtLink.tid @@ -0,0 +1,7 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/ExtLink +type: text/vnd.tiddlywiki + +An external link: https://www.tiddlywiki.com/ + +A suppressed external link: ~http://www.tiddlyspace.com/ \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/FilteredTranscludeBlock.tid b/editions/test/tiddlers/tests/data/serialize/FilteredTranscludeBlock.tid new file mode 100644 index 0000000000..b1c526d9db --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/FilteredTranscludeBlock.tid @@ -0,0 +1,13 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/FilteredTranscludeBlock +type: text/vnd.tiddlywiki + +{{{ [tag[docs]] }}} + +{{{ [tag[docs]] |tooltip}}} + +{{{ [tag[docs]] ||TemplateTitle}}} + +{{{ [tag[docs]] |tooltip||TemplateTitle}}} + +{{{ [tag[docs]] }}width:40;height:50;}.class.class diff --git a/editions/test/tiddlers/tests/data/serialize/FilteredTranscludeInline.tid b/editions/test/tiddlers/tests/data/serialize/FilteredTranscludeInline.tid new file mode 100644 index 0000000000..8b3155882f --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/FilteredTranscludeInline.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/FilteredTranscludeInline +type: text/vnd.tiddlywiki + +{{{ [tag[docs]] }}} {{{ [tag[docs]] |tooltip}}} {{{ [tag[docs]] ||TemplateTitle}}} {{{ [tag[docs]] |tooltip||TemplateTitle}}} {{{ [tag[docs]] }}width:40;height:50;}.class.class \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/FunctionDefinition.tid b/editions/test/tiddlers/tests/data/serialize/FunctionDefinition.tid new file mode 100644 index 0000000000..3585564a98 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/FunctionDefinition.tid @@ -0,0 +1,15 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/FunctionDefinition +type: text/vnd.tiddlywiki + +\function name(param:"defaultvalue", param2:"defaultvalue") +definition text +\end + +\procedure name(param:"defaultvalue", param2:"defaultvalue") +definition text +\end + +\widget $mywidget(param:"defaultvalue", param2:"defaultvalue") +definition text +\end \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/HardLineBreaks.tid b/editions/test/tiddlers/tests/data/serialize/HardLineBreaks.tid new file mode 100644 index 0000000000..b6ea0b9852 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/HardLineBreaks.tid @@ -0,0 +1,12 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/HardLineBreaks +type: text/vnd.tiddlywiki + +""" +This is some text +That is set like +It is a Poem +When it is +Clearly +Not +""" diff --git a/editions/test/tiddlers/tests/data/serialize/Heading.tid b/editions/test/tiddlers/tests/data/serialize/Heading.tid new file mode 100644 index 0000000000..34152e50a3 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Heading.tid @@ -0,0 +1,29 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Heading +type: text/vnd.tiddlywiki + +! Heading 1 + +!! Heading 2 + +!!! Heading 3 + +!!!! Heading 4 + +!!!!! Heading 5 + +!!!!!! Heading 6 + +! AAA + +!! AAA + +!!! AAA + +!!!! AAA + +!!!!! AAA + +!!!!!! AAA + +AAA diff --git a/editions/test/tiddlers/tests/data/serialize/Html.tid b/editions/test/tiddlers/tests/data/serialize/Html.tid new file mode 100644 index 0000000000..76b86d5708 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Html.tid @@ -0,0 +1,15 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Html +type: text/vnd.tiddlywiki + +<aside> +This is an HTML5 aside element +</aside> + +<$slider target="MyTiddler"> +This is a widget invocation +</$slider> + +<$list filter="[tag[ExampleTag]sort[title]]"/> + +Plain text in next paragraph. \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/Image.tid b/editions/test/tiddlers/tests/data/serialize/Image.tid new file mode 100644 index 0000000000..8641df4cb5 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Image.tid @@ -0,0 +1,10 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Image +type: text/vnd.tiddlywiki + +[img[https://tiddlywiki.com/fractalveg.jpg]] +[img width="23" height="24" [https://tiddlywiki.com/fractalveg.jpg]] +[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]] +[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]] +[img[TiddlerTitle]] +[img[Description of image|TiddlerTitle]] \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/Import.tid b/editions/test/tiddlers/tests/data/serialize/Import.tid new file mode 100644 index 0000000000..e467de5346 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Import.tid @@ -0,0 +1,6 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Import +type: text/vnd.tiddlywiki + +\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]] +\import [[$:/core/ui/PageMacros]] \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/ItalicEmphasis.tid b/editions/test/tiddlers/tests/data/serialize/ItalicEmphasis.tid new file mode 100644 index 0000000000..a06ca62cef --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/ItalicEmphasis.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/ItalicEmphasis +type: text/vnd.tiddlywiki + +This is //italic// text \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/List.tid b/editions/test/tiddlers/tests/data/serialize/List.tid new file mode 100644 index 0000000000..d25397799d --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/List.tid @@ -0,0 +1,40 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/List +type: text/vnd.tiddlywiki + +* This is an unordered list +* It has two items + +# This is a numbered list +## With a subitem +# And a third item + +; This is a term that is being defined +: This is the definition of that term + +#** One +#* Two +#** Three +#**** Four +#**# Five +#**## Six +## Seven +### Eight +## Nine + +* List item one +*.active List item two has the class `active` +* List item three + +# AAA +## [[BBB]] +### CCC +# AAA +## CCC +## DDD +## EEE +# BBB +## FF `/` FFF +## FFF +## GGG +## diff --git a/editions/test/tiddlers/tests/data/serialize/MacroCallBlock.tid b/editions/test/tiddlers/tests/data/serialize/MacroCallBlock.tid new file mode 100644 index 0000000000..4bd30d4513 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/MacroCallBlock.tid @@ -0,0 +1,9 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/MacroCallBlock +type: text/vnd.tiddlywiki + +<<name "value" "value2">> + +<<.def "macro calls">> + +<<alert "primary" "primary alert" width:"60%">> diff --git a/editions/test/tiddlers/tests/data/serialize/MacroCallInline.tid b/editions/test/tiddlers/tests/data/serialize/MacroCallInline.tid new file mode 100644 index 0000000000..09127dce09 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/MacroCallInline.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/MacroCallInline +type: text/vnd.tiddlywiki + +These are macro calls in a line: <<name "value" "value2">> and <<.def "macro calls">> <<alert "primary" "primary alert" width:"60%">> diff --git a/editions/test/tiddlers/tests/data/serialize/MacroDef.tid b/editions/test/tiddlers/tests/data/serialize/MacroDef.tid new file mode 100644 index 0000000000..132ee7053f --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/MacroDef.tid @@ -0,0 +1,9 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/MacroDef +type: text/vnd.tiddlywiki + +\define name(param:defaultvalue,param2:defaultvalue) +definition text, including $param$ markers +\end + +\define lingo-base() $:/language/ControlPanel/Basics/ diff --git a/editions/test/tiddlers/tests/data/serialize/Parameters.tid b/editions/test/tiddlers/tests/data/serialize/Parameters.tid new file mode 100644 index 0000000000..5b107a73d9 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Parameters.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Parameters +type: text/vnd.tiddlywiki + +\parameters(param:defaultvalue,param2:defaultvalue) \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/ParserMode.tid b/editions/test/tiddlers/tests/data/serialize/ParserMode.tid new file mode 100644 index 0000000000..b4c31b66b3 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/ParserMode.tid @@ -0,0 +1,9 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/ParserMode +type: text/vnd.tiddlywiki + +\parsermode block + +\parsermode inline + +Test. \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/PrettyExtLink.tid b/editions/test/tiddlers/tests/data/serialize/PrettyExtLink.tid new file mode 100644 index 0000000000..1b4002b94e --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/PrettyExtLink.tid @@ -0,0 +1,6 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/PrettyExtLink +type: text/vnd.tiddlywiki + +[ext[https://tiddlywiki.com/fractalveg.jpg]] +[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]] \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/PrettyLink.tid b/editions/test/tiddlers/tests/data/serialize/PrettyLink.tid new file mode 100644 index 0000000000..8c7afbc7f1 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/PrettyLink.tid @@ -0,0 +1,6 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/PrettyLink +type: text/vnd.tiddlywiki + +[[Introduction]] +[[Link description|TiddlerTitle]] \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/QuoteBlock.tid b/editions/test/tiddlers/tests/data/serialize/QuoteBlock.tid new file mode 100644 index 0000000000..a2f698846c --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/QuoteBlock.tid @@ -0,0 +1,7 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/QuoteBlock +type: text/vnd.tiddlywiki + +<<<tc-quote +Quote text +<<< \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/RulesPragma.tid b/editions/test/tiddlers/tests/data/serialize/RulesPragma.tid new file mode 100644 index 0000000000..c3e79f5ea4 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/RulesPragma.tid @@ -0,0 +1,6 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/RulesPragma +type: text/vnd.tiddlywiki + +\rules except ruleone ruletwo rulethree +\rules only ruleone ruletwo rulethree \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/SimpleText.tid b/editions/test/tiddlers/tests/data/serialize/SimpleText.tid new file mode 100644 index 0000000000..c05b5044d7 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/SimpleText.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/SimpleText +type: text/vnd.tiddlywiki + +The quick brown fox \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/SoftLineBreak.tid b/editions/test/tiddlers/tests/data/serialize/SoftLineBreak.tid new file mode 100644 index 0000000000..e22202549c --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/SoftLineBreak.tid @@ -0,0 +1,6 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/SoftLineBreak +type: text/vnd.tiddlywiki + +The rain in Spain +falls mainly on the plain \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/StrikethroughEmphasis.tid b/editions/test/tiddlers/tests/data/serialize/StrikethroughEmphasis.tid new file mode 100644 index 0000000000..5ca1b1d2ea --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/StrikethroughEmphasis.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/StrikethroughEmphasis +type: text/vnd.tiddlywiki + +This is ~~strikethrough~~ text \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/StyleBlock.tid b/editions/test/tiddlers/tests/data/serialize/StyleBlock.tid new file mode 100644 index 0000000000..4d0ac83b65 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/StyleBlock.tid @@ -0,0 +1,17 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/StyleBlock +type: text/vnd.tiddlywiki + +@@background-color:red; +@@.myClass +This paragraph will have the CSS class `myClass`. + +* The `<ul>` around this list will also have the class `myClass` +* List item 2 +@@ + +@@font-size:1.5em; +@@.coloured-text.coloured-bg +* Block content +* With custom style and classes +@@ \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/StyleBlock2.tid b/editions/test/tiddlers/tests/data/serialize/StyleBlock2.tid new file mode 100644 index 0000000000..cdd31254e9 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/StyleBlock2.tid @@ -0,0 +1,13 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/StyleBlock2 +type: text/vnd.tiddlywiki + +@@width:100px; +@@.myFirstClass.mySecondClass.myThirdClass +This is a paragraph +@@ + +@@background-color:lightcyan; +* Item one +* Item two +@@ \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/StyleInline.tid b/editions/test/tiddlers/tests/data/serialize/StyleInline.tid new file mode 100644 index 0000000000..c491767f53 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/StyleInline.tid @@ -0,0 +1,7 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/StyleInline +type: text/vnd.tiddlywiki + +@@.myClass This is some text with a class@@ +@@background-color:red; This is some text with a background colour@@ +@@width:100px;.myClass This is some text with a class and a width@@ \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/SubscriptEmphasis.tid b/editions/test/tiddlers/tests/data/serialize/SubscriptEmphasis.tid new file mode 100644 index 0000000000..b39d7f6d5f --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/SubscriptEmphasis.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/SubscriptEmphasis +type: text/vnd.tiddlywiki + +This is ,,subscript,, text \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/SuperscriptEmphasis.tid b/editions/test/tiddlers/tests/data/serialize/SuperscriptEmphasis.tid new file mode 100644 index 0000000000..9683f9e54b --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/SuperscriptEmphasis.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/SuperscriptEmphasis +type: text/vnd.tiddlywiki + +This is ^^superscript^^ text \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/SysLink.tid b/editions/test/tiddlers/tests/data/serialize/SysLink.tid new file mode 100644 index 0000000000..fdbc982fe7 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/SysLink.tid @@ -0,0 +1,6 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/SysLink +type: text/vnd.tiddlywiki + +$:TiddlerTitle +~$:TiddlerTitle \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/Table.tid b/editions/test/tiddlers/tests/data/serialize/Table.tid new file mode 100644 index 0000000000..bd92db4bcc --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/Table.tid @@ -0,0 +1,11 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/Table +type: text/vnd.tiddlywiki + +|!|!Alpha|!Beta|!Gamma|!Delta| +|!One||||| +|!Two||||| +|!Three||||| + +|cell one|cell two| +|cell three|cell four| diff --git a/editions/test/tiddlers/tests/data/serialize/TranscludeBlock.tid b/editions/test/tiddlers/tests/data/serialize/TranscludeBlock.tid new file mode 100644 index 0000000000..344171af04 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/TranscludeBlock.tid @@ -0,0 +1,21 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/TranscludeBlock +type: text/vnd.tiddlywiki + +{{MyTiddler}} + +{{MyTiddler||TemplateTitle}} + +{{||TemplateTitle}} + +{{MyTiddler|Parameter}} + +{{MyTiddler||TemplateTitle|Parameter|SecondParameter}} + +{{MyTiddler!!field}} + +{{!!field}} + +{{MyTiddler##index}} + +{{##index}} \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/TranscludeInline.tid b/editions/test/tiddlers/tests/data/serialize/TranscludeInline.tid new file mode 100644 index 0000000000..df20658cf6 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/TranscludeInline.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/TranscludeInline +type: text/vnd.tiddlywiki + +{{MyTiddler}} {{MyTiddler||TemplateTitle}} \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/TypedBlock1.tid b/editions/test/tiddlers/tests/data/serialize/TypedBlock1.tid new file mode 100644 index 0000000000..06362d0624 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/TypedBlock1.tid @@ -0,0 +1,15 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/TypedBlock1 +type: text/vnd.tiddlywiki + +$$$text/vnd.tiddlywiki > text/plain +This is ''some'' wikitext +$$$ + +$$$text/unknown +Some plain text, which will not be //formatted//. + +$$$text/vnd.tiddlywiki > text/html +This is ''some'' wikitext +$$$ + diff --git a/editions/test/tiddlers/tests/data/serialize/TypedBlock2.tid b/editions/test/tiddlers/tests/data/serialize/TypedBlock2.tid new file mode 100644 index 0000000000..082ca533aa --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/TypedBlock2.tid @@ -0,0 +1,19 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/TypedBlock2 +type: text/vnd.tiddlywiki + +$$$.js +This will be rendered as JavaScript +$$$ + +$$$.svg +<svg xmlns="http://www.w3.org/2000/svg" width="150" height="100"> + <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> +</svg> +$$$ + +$$$image/svg+xml +<svg xmlns="http://www.w3.org/2000/svg" width="150" height="100"> + <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="green" /> +</svg> +$$$ \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/UnderscoreEmphasis.tid b/editions/test/tiddlers/tests/data/serialize/UnderscoreEmphasis.tid new file mode 100644 index 0000000000..73dc6425c1 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/UnderscoreEmphasis.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/UnderscoreEmphasis +type: text/vnd.tiddlywiki + +This is __underscore__ text \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/WikiLink.tid b/editions/test/tiddlers/tests/data/serialize/WikiLink.tid new file mode 100644 index 0000000000..18b04caf18 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/WikiLink.tid @@ -0,0 +1,7 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/WikiLink +type: text/vnd.tiddlywiki + +AWikiLink +AnotherLink +~SuppressedLink \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/serialize/WikiLinkPrefix.tid b/editions/test/tiddlers/tests/data/serialize/WikiLinkPrefix.tid new file mode 100644 index 0000000000..982ed90711 --- /dev/null +++ b/editions/test/tiddlers/tests/data/serialize/WikiLinkPrefix.tid @@ -0,0 +1,5 @@ +tags: $:/tags/wikitext-serialize-test-spec +title: Serialize/WikiLinkPrefix +type: text/vnd.tiddlywiki + +~SuppressedLink \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/transclude/Parameterised-ParseTreeNodes.tid b/editions/test/tiddlers/tests/data/transclude/Parameterised-ParseTreeNodes.tid index 916e2abfb8..fc0d785f8a 100644 --- a/editions/test/tiddlers/tests/data/transclude/Parameterised-ParseTreeNodes.tid +++ b/editions/test/tiddlers/tests/data/transclude/Parameterised-ParseTreeNodes.tid @@ -26,4 +26,4 @@ title: TiddlerOne + title: ExpectedResult -<p>[{"type":"element","tag":"p","children":[{"type":"text","text":"This is a block","start":68,"end":83}],"start":68,"end":83}]</p><p>[{"type":"text","text":"This is inline","start":136,"end":152}]</p> \ No newline at end of file +<p>[{"type":"element","tag":"p","children":[{"type":"text","text":"This is a block","start":68,"end":83}],"start":68,"end":83,"rule":"parseblock"}]</p><p>[{"type":"text","text":"This is inline","start":136,"end":152}]</p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/widgets/SubstitutedAttributes.tid b/editions/test/tiddlers/tests/data/widgets/SubstitutedAttributes.tid index 9d5538573e..cdaee17d18 100644 --- a/editions/test/tiddlers/tests/data/widgets/SubstitutedAttributes.tid +++ b/editions/test/tiddlers/tests/data/widgets/SubstitutedAttributes.tid @@ -7,9 +7,9 @@ title: Output \whitespace trim <$set name="var with spaces" value="spaces"> -<$let project="TiddlyWiki" disabled="true" var-with-dashes="dashes"> +<$let project="TiddlyWiki" disabled="true" $tiddler="Getting Started" var-with-dashes="dashes"> <div class=`$(project)$ -${ [[Hello]addsuffix[There]] }$` attrib=`myvalue` otherattrib=`$(1)$` blankattrib=`` quoted="here" disabled=```$(disabled)$``` dashes=`$(var-with-dashes)$` spaces=`$(var with spaces)$`> +${ [[Hello]addsuffix[There]] }$` attrib=`myvalue` otherattrib=`$(1)$` blankattrib=`` quoted="here" disabled=```$(disabled)$``` dollar=`p-$($tiddler)$-s` dashes=`$(var-with-dashes)$` spaces=`$(var with spaces)$`> </div> </$let> </$set> @@ -18,4 +18,4 @@ ${ [[Hello]addsuffix[There]] }$` attrib=`myvalue` otherattrib=`$(1)$` blankattri title: ExpectedResult <p><div attrib="myvalue" blankattrib="" class="TiddlyWiki -HelloThere" dashes="dashes" disabled="true" otherattrib="" quoted="here" spaces="spaces"></div></p> \ No newline at end of file +HelloThere" dashes="dashes" disabled="true" dollar="p-Getting Started-s" otherattrib="" quoted="here" spaces="spaces"></div></p> \ No newline at end of file diff --git a/editions/test/tiddlers/tests/test-checkbox-widget.js b/editions/test/tiddlers/tests/test-checkbox-widget.js index 83ed66421f..52a71d0c0a 100644 --- a/editions/test/tiddlers/tests/test-checkbox-widget.js +++ b/editions/test/tiddlers/tests/test-checkbox-widget.js @@ -103,7 +103,7 @@ Tests the checkbox widget thoroughly. ]; var indexModeTests = fieldModeTests.map(data => { - var newData = {...data}; + var newData = Object.assign({}, data); var newName = data.testName.replace('field mode', 'index mode'); var tiddlerOneAlreadyExists = false; var newTiddlers = data.tiddlers.map(tiddler => { @@ -274,14 +274,13 @@ Tests the checkbox widget thoroughly. listModeTests .filter(data => data.widgetText.includes("listField='colors'")) .map(data => { - var newData = { - ...data, - tiddlers: data.tiddlers.map(tiddler => ({...tiddler, list: tiddler.colors, colors: undefined})), + var newData = Object.assign({}, data, { + tiddlers: data.tiddlers.map(tiddler => Object.assign({}, tiddler, {list: tiddler.colors, colors: undefined})), widgetText: data.widgetText.replace("listField='colors'", "listField='list'"), expectedChange: { "Colors": { list: data.expectedChange.Colors.colors.split(' ') } }, - } + }) return newData; }) ); @@ -289,20 +288,19 @@ Tests the checkbox widget thoroughly. listModeTests .filter(data => data.widgetText.includes("listField='colors'")) .map(data => { - var newData = { - ...data, - tiddlers: data.tiddlers.map(tiddler => ({...tiddler, tags: tiddler.colors, colors: undefined})), + var newData = Object.assign({}, data, { + tiddlers: data.tiddlers.map(tiddler => Object.assign({}, tiddler, {tags: tiddler.colors, colors: undefined})), widgetText: data.widgetText.replace("listField='colors'", "listField='tags'"), expectedChange: { "Colors": { tags: data.expectedChange.Colors.colors.split(' ') } }, - } + }) return newData; }) ); var indexListModeTests = listModeTests.map(data => { - var newData = {...data}; + var newData = Object.assign({}, data); var newName = data.testName.replace('list mode', 'index list mode'); var newTiddlers = data.tiddlers.map(tiddler => { if (tiddler.hasOwnProperty('colors')) { diff --git a/editions/test/tiddlers/tests/test-deserialize-operator.js b/editions/test/tiddlers/tests/test-deserialize-operator.js index cc465dfbb6..0acd4ff018 100644 --- a/editions/test/tiddlers/tests/test-deserialize-operator.js +++ b/editions/test/tiddlers/tests/test-deserialize-operator.js @@ -29,11 +29,11 @@ Tests deserialize[] filter operator with various core deserializers expect($tw.wiki.filterTiddlers("[{dezerializer test data case 5}deserialize[text/html]]")).toEqual(['[{"type":"text/vnd.tiddlywiki","text":"Abacus","title":"Hello \\"There\\""},{"title":"Hello \\"There\\"","text":"Calculator"},{"title":"Hello \\"There\\"","text":"Protractor"}]']); // Deserialize JSON payload containing tiddlers - expect($tw.wiki.filterTiddlers("[{dezerializer test data case 6}deserialize[application/json]]")).toEqual( [ `[{"created":"20230601125557184","text":"Before you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\\n\\n","title":"GettingStarted","modified":"20230601125601619"},{"created":"20230601125507054","text":"Welcome to \\"TiddlyWiki\\".\\n\\nThis is a test tiddler.","tags":"","title":"Hello There \\"Welcome\\"","modified":"20230601125551144"},{"title":"TiddlyWiki","created":"20130822170700000","modified":"20170127221451610","tags":"Concepts","type":"text/vnd.tiddlywiki","text":"~TiddlyWiki is a rich, interactive tool for manipulating complex data with structure that doesn't easily fit into conventional tools like spreadsheets or wordprocessors.\\n\\n~TiddlyWiki is designed to fit around your brain, helping you deal with the things that won't fit."}]` ]); - expect($tw.wiki.filterTiddlers("[{dezerializer test data case 6}deserialize[application/json]jsonindexes[]] :map[{dezerializer test data case 6}jsonget<currentTiddler>,[title]]")).toEqual([ 'GettingStarted', 'Hello There "Welcome"', 'TiddlyWiki' ]); + expect($tw.wiki.filterTiddlers("[{dezerializer test data case 6}deserialize[application/json]]")).toEqual( [ "[{\"created\":\"20230601125557184\",\"text\":\"Before you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\\n\\n\",\"title\":\"GettingStarted\",\"modified\":\"20230601125601619\"},{\"created\":\"20230601125507054\",\"text\":\"Welcome to \\\"TiddlyWiki\\\".\\n\\nThis is a test tiddler.\",\"tags\":\"\",\"title\":\"Hello There \\\"Welcome\\\"\",\"modified\":\"20230601125551144\"},{\"title\":\"TiddlyWiki\",\"created\":\"20130822170700000\",\"modified\":\"20170127221451610\",\"tags\":\"Concepts\",\"type\":\"text/vnd.tiddlywiki\",\"text\":\"~TiddlyWiki is a rich, interactive tool for manipulating complex data with structure that doesn't easily fit into conventional tools like spreadsheets or wordprocessors.\\n\\n~TiddlyWiki is designed to fit around your brain, helping you deal with the things that won't fit.\"}]" ]); + expect($tw.wiki.filterTiddlers("[{dezerializer test data case 6}deserialize[application/json]jsonindexes[]] :map[{dezerializer test data case 6}jsonget<currentTiddler>,[title]]")).toEqual([ "GettingStarted", 'Hello There "Welcome"', "TiddlyWiki" ]); //Deserialize TiddlyWiki file with an mismatched deserializer - expect($tw.wiki.filterTiddlers("[{dezerializer test data case 5}deserialize[application/json]]")).toEqual([jasmine.stringMatching('JSON error')]); + expect($tw.wiki.filterTiddlers("[{dezerializer test data case 5}deserialize[application/json]]")).toEqual([jasmine.stringMatching("JSON error")]); }); }); diff --git a/editions/test/tiddlers/tests/test-deserializers.js b/editions/test/tiddlers/tests/test-deserializers.js index d207debf1a..497f618aaa 100644 --- a/editions/test/tiddlers/tests/test-deserializers.js +++ b/editions/test/tiddlers/tests/test-deserializers.js @@ -22,14 +22,14 @@ Tests various core deserializers }); } - executeTestCase("dezerializer test data case 1",[ { text: '<!doctype html>\n', type: 'text/html' } ]); + executeTestCase("dezerializer test data case 1",[ { text: "<!doctype html>\n", type: "text/html" } ]); - executeTestCase("dezerializer test data case 2",[ { text: '<!doctype html>\n<html lang="en">\n<head>\n\t<meta charset="utf-8">\n\t<title>Test Data\n\n\n\n\n', type: 'text/html' } ]); + executeTestCase("dezerializer test data case 2",[ { text: '\n\n\n\t\n\tTest Data\n\n\n\n\n', type: "text/html" } ]); - executeTestCase("dezerializer test data case 3",[ { title: 'Hello "There"', text: 'Abacus', type: 'text/vnd.tiddlywiki' } ]); + executeTestCase("dezerializer test data case 3",[ { title: 'Hello "There"', text: "Abacus", type: "text/vnd.tiddlywiki" } ]); - executeTestCase("dezerializer test data case 4",[ { title: 'Hello "There"', text: 'Abacus', type: 'text/vnd.tiddlywiki' }, { title: 'Hello "There"', text: 'Calculator'} ]); + executeTestCase("dezerializer test data case 4",[ { title: 'Hello "There"', text: "Abacus", type: "text/vnd.tiddlywiki" }, { title: 'Hello "There"', text: "Calculator"} ]); - executeTestCase("dezerializer test data case 5",[ { title: 'Hello "There"', text: 'Abacus', type: 'text/vnd.tiddlywiki' }, { title: 'Hello "There"', text: 'Calculator'} , { title: 'Hello "There"', text: 'Protractor'} ]); + executeTestCase("dezerializer test data case 5",[ { title: 'Hello "There"', text: "Abacus", type: "text/vnd.tiddlywiki" }, { title: 'Hello "There"', text: "Calculator"} , { title: 'Hello "There"', text: "Protractor"} ]); }); diff --git a/editions/test/tiddlers/tests/test-filters.js b/editions/test/tiddlers/tests/test-filters.js index 96100e2f7d..dee9128bf6 100644 --- a/editions/test/tiddlers/tests/test-filters.js +++ b/editions/test/tiddlers/tests/test-filters.js @@ -1137,7 +1137,16 @@ Tests the filtering mechanism. // No such tiddlers. Nothing to return. expect(wiki.filterTiddlers("[[nonexistent]moduleproperty[name]]").length).toBe(0); // Non string properties should get toStringed. - expect(wiki.filterTiddlers("[[$:/core/modules/commands/init.js]moduleproperty[info]]").join(" ")).toBe('{"name":"init","synchronous":true}'); + expect(wiki.filterTiddlers("[[$:/core/modules/startup.js]moduleproperty[synchronous]]").join(" ")).toBe('true'); + }); + + it("should minimize unnecessary variable lookup", function() { + var widget = wiki.makeWidget(); + var getVar = spyOn(widget, "getVariableInfo").and.callThrough(); + expect(wiki.filterTiddlers("[all[]prefix[anything]]", widget).length).toBe(0); + // We didn't use any indirect operands or variables. + // No variable lookup should have occurred. + expect(getVar).not.toHaveBeenCalled(); }); } diff --git a/editions/test/tiddlers/tests/test-html-parser.js b/editions/test/tiddlers/tests/test-html-parser.js index 9fc1082358..c6c160bb35 100644 --- a/editions/test/tiddlers/tests/test-html-parser.js +++ b/editions/test/tiddlers/tests/test-html-parser.js @@ -24,7 +24,7 @@ describe("HTML tag new parser tests", function() { null ); expect($tw.utils.parseWhiteSpace("p ",1)).toEqual( - { type : 'whitespace', start : 1, end : 3 } + { type : "whitespace", start : 1, end : 3 } ); }); @@ -33,7 +33,7 @@ describe("HTML tag new parser tests", function() { null ); expect($tw.utils.parseTokenString("p= ",1,"=")).toEqual( - { type : 'token', value : '=', start : 1, end : 2 } + { type : "token", value : "=", start : 1, end : 2 } ); }); @@ -42,10 +42,10 @@ describe("HTML tag new parser tests", function() { null ); expect($tw.utils.parseTokenRegExp("p=' ",1,/(=(?:'|"))/g).match[0]).toEqual( - '=\'' + "='" ); expect($tw.utils.parseTokenRegExp("p=blah ",2,/([^\s>]+)/g).match[0]).toEqual( - 'blah' + "blah" ); }); @@ -54,40 +54,40 @@ describe("HTML tag new parser tests", function() { null ); expect($tw.utils.parseStringLiteral("p='blah' ",2)).toEqual( - { type : 'string', start : 2, value : 'blah', end : 8 } + { type : "string", start : 2, value : "blah", end : 8 } ); expect($tw.utils.parseStringLiteral("p='' ",2)).toEqual( - { type : 'string', start : 2, value : '', end : 4 } + { type : "string", start : 2, value : "", end : 4 } ); expect($tw.utils.parseStringLiteral("p=\"blah' ",2)).toEqual( null ); expect($tw.utils.parseStringLiteral("p=\"\" ",2)).toEqual( - { type : 'string', start : 2, value : '', end : 4 } + { type : "string", start : 2, value : "", end : 4 } ); }); it("should parse macro parameters", function() { expect($tw.utils.parseMacroParameter("me",0)).toEqual( - { type : 'macro-parameter', start : 0, value : 'me', end : 2 } + { type : "macro-parameter", start : 0, value : "me", end : 2 } ); expect($tw.utils.parseMacroParameter("me:one",0)).toEqual( - { type : 'macro-parameter', start : 0, value : 'one', name : 'me', end : 6 } + { type : "macro-parameter", start : 0, value : "one", name : "me", end : 6 } ); expect($tw.utils.parseMacroParameter("me:'one two three'",0)).toEqual( - { type : 'macro-parameter', start : 0, value : 'one two three', name : 'me', end : 18 } + { type : "macro-parameter", start : 0, value : "one two three", name : "me", end : 18 } ); expect($tw.utils.parseMacroParameter("'one two three'",0)).toEqual( - { type : 'macro-parameter', start : 0, value : 'one two three', end : 15 } + { type : "macro-parameter", start : 0, value : "one two three", end : 15 } ); expect($tw.utils.parseMacroParameter("me:[[one two three]]",0)).toEqual( - { type : 'macro-parameter', start : 0, value : 'one two three', name : 'me', end : 20 } + { type : "macro-parameter", start : 0, value : "one two three", name : "me", end : 20 } ); expect($tw.utils.parseMacroParameter("[[one two three]]",0)).toEqual( - { type : 'macro-parameter', start : 0, value : 'one two three', end : 17 } + { type : "macro-parameter", start : 0, value : "one two three", end : 17 } ); expect($tw.utils.parseMacroParameter("myparam>",0)).toEqual( - { type : 'macro-parameter', start : 0, value : 'myparam>', end : 8 } + { type : "macro-parameter", start : 0, value : "myparam>", end : 8 } ); }); @@ -96,22 +96,22 @@ describe("HTML tag new parser tests", function() { null ); expect($tw.utils.parseMacroInvocation("<>",0)).toEqual( - { type : 'macrocall', start : 0, params : [ ], name : 'mymacro', end : 11 } + { type : "macrocall", start : 0, params : [ ], name : "mymacro", end : 11 } ); expect($tw.utils.parseMacroInvocation("<>",0)).toEqual( - { type : 'macrocall', start : 0, params : [ { type : 'macro-parameter', start : 9, value : 'one', end : 13 }, { type : 'macro-parameter', start : 13, value : 'two', end : 17 }, { type : 'macro-parameter', start : 17, value : 'three', end : 23 } ], name : 'mymacro', end : 25 } + { type : "macrocall", start : 0, params : [ { type : "macro-parameter", start : 9, value : "one", end : 13 }, { type : "macro-parameter", start : 13, value : "two", end : 17 }, { type : "macro-parameter", start : 17, value : "three", end : 23 } ], name : "mymacro", end : 25 } ); expect($tw.utils.parseMacroInvocation("<>",0)).toEqual( - { type : 'macrocall', start : 0, params : [ { type : 'macro-parameter', start : 9, value : 'one', name : 'p', end : 15 }, { type : 'macro-parameter', start : 15, value : 'two', name : 'q', end : 21 }, { type : 'macro-parameter', start : 21, value : 'three', end : 27 } ], name : 'mymacro', end : 29 } + { type : "macrocall", start : 0, params : [ { type : "macro-parameter", start : 9, value : "one", name : "p", end : 15 }, { type : "macro-parameter", start : 15, value : "two", name : "q", end : 21 }, { type : "macro-parameter", start : 21, value : "three", end : 27 } ], name : "mymacro", end : 29 } ); expect($tw.utils.parseMacroInvocation("<>",0)).toEqual( - { type : 'macrocall', start : 0, params : [ { type : 'macro-parameter', start : 9, value : 'one two three', end : 25 } ], name : 'mymacro', end : 27 } + { type : "macrocall", start : 0, params : [ { type : "macro-parameter", start : 9, value : "one two three", end : 25 } ], name : "mymacro", end : 27 } ); expect($tw.utils.parseMacroInvocation("<>",0)).toEqual( - { type : 'macrocall', start : 0, params : [ { type : 'macro-parameter', start : 9, value : 'one two three', name : 'r', end : 27 } ], name : 'mymacro', end : 29 } + { type : "macrocall", start : 0, params : [ { type : "macro-parameter", start : 9, value : "one two three", name : "r", end : 27 } ], name : "mymacro", end : 29 } ); expect($tw.utils.parseMacroInvocation("<>",0)).toEqual( - { type : 'macrocall', start : 0, params : [ { type : 'macro-parameter', start : 9, value : 'two', name : 'one', end : 17 }, { type : 'macro-parameter', start : 17, value : 'four and five', name : 'three', end : 39 } ], name : 'myMacro', end : 41 } + { type : "macrocall", start : 0, params : [ { type : "macro-parameter", start : 9, value : "two", name : "one", end : 17 }, { type : "macro-parameter", start : 17, value : "four and five", name : "three", end : 39 } ], name : "myMacro", end : 41 } ); }); @@ -120,56 +120,87 @@ describe("HTML tag new parser tests", function() { null ); expect($tw.utils.parseAttribute("p='blah' ",0)).toEqual( - { type : 'string', start : 0, name : 'p', value : 'blah', end : 8 } + { type : "string", start : 0, name : "p", value : "blah", end : 8 } ); expect($tw.utils.parseAttribute("p=\"blah\" ",0)).toEqual( - { type : 'string', start : 0, name : 'p', value : 'blah', end : 8 } + { type : "string", start : 0, name : "p", value : "blah", end : 8 } ); expect($tw.utils.parseAttribute("p=\"bl\nah\" ",0)).toEqual( - { type : 'string', start : 0, name : 'p', value : 'bl\nah', end : 9 } + { type : "string", start : 0, name : "p", value : "bl\nah", end : 9 } ); expect($tw.utils.parseAttribute("p={{{blah}}} ",0)).toEqual( - { type : 'filtered', start : 0, name : 'p', filter : 'blah', end : 12 } + { type : "filtered", start : 0, name : "p", filter : "blah", end : 12 } ); expect($tw.utils.parseAttribute("p={{{bl\nah}}} ",0)).toEqual( - { type : 'filtered', start : 0, name : 'p', filter : 'bl\nah', end : 13 } + { type : "filtered", start : 0, name : "p", filter : "bl\nah", end : 13 } ); expect($tw.utils.parseAttribute("p={{{ [{$:/layout}] }}} ",0)).toEqual( - { type : 'filtered', start : 0, name : 'p', filter : ' [{$:/layout}] ', end : 23 } + { type : "filtered", start : 0, name : "p", filter : " [{$:/layout}] ", end : 23 } ); expect($tw.utils.parseAttribute("p={{blah}} ",0)).toEqual( - { type : 'indirect', start : 0, name : 'p', textReference : 'blah', end : 10 } + { type : "indirect", start : 0, name : "p", textReference : "blah", end : 10 } ); expect($tw.utils.parseAttribute("p=blah ",0)).toEqual( - { type : 'string', start : 0, name : 'p', value : 'blah', end : 6 } + { type : "string", start : 0, name : "p", value : "blah", end : 6 } ); expect($tw.utils.parseAttribute("p =blah ",0)).toEqual( - { type : 'string', start : 0, name : 'p', value : 'blah', end : 7 } + { type : "string", start : 0, name : "p", value : "blah", end : 7 } ); expect($tw.utils.parseAttribute("p= blah ",0)).toEqual( - { type : 'string', start : 0, name : 'p', value : 'blah', end : 7 } + { type : "string", start : 0, name : "p", value : "blah", end : 7 } ); expect($tw.utils.parseAttribute("p = blah ",0)).toEqual( - { type : 'string', start : 0, name : 'p', value : 'blah', end : 8 } + { type : "string", start : 0, name : "p", value : "blah", end : 8 } ); expect($tw.utils.parseAttribute("p = >blah ",0)).toEqual( - { type : 'string', value : 'true', start : 0, name : 'p', end : 4 } + { type : "string", value : "true", start : 0, name : "p", end : 4 } ); expect($tw.utils.parseAttribute(" attrib1>",0)).toEqual( - { type : 'string', value : 'true', start : 0, name : 'attrib1', end : 8 } + { type : "string", value : "true", start : 0, name : "attrib1", end : 8 } ); expect($tw.utils.parseAttribute("p=`blah` ",1)).toEqual(null); expect($tw.utils.parseAttribute("p=`blah` ",0)).toEqual( - { start: 0, name: 'p', type: 'substituted', rawValue: 'blah', end: 8 } + { start: 0, name: "p", type: "substituted", rawValue: "blah", end: 8 } ); expect($tw.utils.parseAttribute("p=```blah``` ",0)).toEqual( - { start: 0, name: 'p', type: 'substituted', rawValue: 'blah', end: 12 } + { start: 0, name: "p", type: "substituted", rawValue: "blah", end: 12 } ); expect($tw.utils.parseAttribute("p=`Hello \"There\"`",0)).toEqual( - { start: 0, name: 'p', type: 'substituted', rawValue: 'Hello "There"', end: 17 } + { start: 0, name: "p", type: "substituted", rawValue: 'Hello "There"', end: 17 } ); }); + + describe("serializeAttribute", function () { + it("should serialize string attributes", function () { + expect($tw.utils.serializeAttribute({ type: "string", name: "p", value: "blah" })).toBe('p="blah"'); + expect($tw.utils.serializeAttribute({ type: "string", name: "p", value: "true" })).toBe("p"); + }); + + it("should serialize filtered attributes", function () { + expect($tw.utils.serializeAttribute({ type: "filtered", name: "p", filter: "blah" })).toBe("p={{{blah}}}"); + }); + + it("should serialize indirect attributes", function () { + expect($tw.utils.serializeAttribute({ type: "indirect", name: "p", textReference: "blah" })).toBe("p={{blah}}"); + }); + + it("should serialize substituted attributes", function () { + expect($tw.utils.serializeAttribute({ type: "substituted", name: "p", rawValue: "blah" })).toBe("p=`blah`"); + }); + + it("should return null for unsupported types", function () { + expect($tw.utils.serializeAttribute({ type: "unknown", name: "p", value: "blah" })).toBeNull(); + }); + + it("should return null for invalid input", function () { + expect($tw.utils.serializeAttribute(null)).toBeNull(); + expect($tw.utils.serializeAttribute({})).toBeNull(); + expect($tw.utils.serializeAttribute({ type: "string" })).toBeNull(); + expect($tw.utils.serializeAttribute({ name: "p" })).toBeNull(); + }); + }); + it("should parse HTML tags", function() { expect(parser.parseTag("",1)).toEqual( null @@ -178,52 +209,52 @@ describe("HTML tag new parser tests", function() { null ); expect(parser.parseTag("",0)).toEqual( - { type : 'element', start : 0, attributes : { }, orderedAttributes: [ ], tag : 'mytag', end : 7 } + { type : "element", start : 0, attributes : { }, orderedAttributes: [ ], tag : "mytag", end : 7 } ); expect(parser.parseTag("",0)).toEqual( - { type : 'element', start : 0, attributes : { attrib1 : { type : 'string', value : 'true', start : 6, name : 'attrib1', end : 14 } }, orderedAttributes: [ { start: 6, name: 'attrib1', type: 'string', value: 'true', end: 14 } ], tag : 'mytag', end : 15 } + { type : "element", start : 0, attributes : { attrib1 : { type : "string", value : "true", start : 6, name : "attrib1", end : 14 } }, orderedAttributes: [ { start: 6, name: "attrib1", type: "string", value: "true", end: 14 } ], tag : "mytag", end : 15 } ); expect(parser.parseTag("",0)).toEqual( - { type : 'element', start : 0, attributes : { attrib1 : { type : 'string', value : 'true', start : 6, name : 'attrib1', end : 14 } }, orderedAttributes: [ { start: 6, name: 'attrib1', type: 'string', value: 'true', end: 14 } ], tag : 'mytag', isSelfClosing : true, end : 16 } + { type : "element", start : 0, attributes : { attrib1 : { type : "string", value : "true", start : 6, name : "attrib1", end : 14 } }, orderedAttributes: [ { start: 6, name: "attrib1", type: "string", value: "true", end: 14 } ], tag : "mytag", isSelfClosing : true, end : 16 } ); expect(parser.parseTag("<$view field=\"title\" format=\"link\"/>",0)).toEqual( - { type : 'view', start : 0, attributes : { field : { start : 6, name : 'field', type : 'string', value : 'title', end : 20 }, format : { start : 20, name : 'format', type : 'string', value : 'link', end : 34 } }, orderedAttributes: [ { start: 6, name: 'field', type: 'string', value: 'title', end: 20 }, { start: 20, name: 'format', type: 'string', value: 'link', end: 34 } ], tag : '$view', isSelfClosing : true, end : 36 } + { type : "view", start : 0, attributes : { field : { start : 6, name : "field", type : "string", value : "title", end : 20 }, format : { start : 20, name : "format", type : "string", value : "link", end : 34 } }, orderedAttributes: [ { start: 6, name: "field", type: "string", value: "title", end: 20 }, { start: 20, name: "format", type: "string", value: "link", end: 34 } ], tag : "$view", isSelfClosing : true, end : 36 } ); expect(parser.parseTag("",0)).toEqual( - { type : 'element', start : 0, attributes : { attrib1 : { type : 'string', start : 6, name : 'attrib1', value : 'something', end : 26 } }, orderedAttributes: [ { start: 6, name: 'attrib1', type: 'string', value: 'something', end: 26 } ], tag : 'mytag', end : 27 } + { type : "element", start : 0, attributes : { attrib1 : { type : "string", start : 6, name : "attrib1", value : "something", end : 26 } }, orderedAttributes: [ { start: 6, name: "attrib1", type: "string", value: "something", end: 26 } ], tag : "mytag", end : 27 } ); expect(parser.parseTag("",0)).toEqual( - { type : 'element', start : 0, attributes : { attrib1 : { type : 'string', start : 15, name : 'attrib1', value : 'something', end : 34 } }, orderedAttributes: [ { start: 6, name: 'attrib1', type: 'string', value: 'true', end: 15 }, { start: 15, name: 'attrib1', type: 'string', value: 'something', end: 34 } ], tag : 'mytag', end : 35 } + { type : "element", start : 0, attributes : { attrib1 : { type : "string", start : 15, name : "attrib1", value : "something", end : 34 } }, orderedAttributes: [ { start: 6, name: "attrib1", type: "string", value: "true", end: 15 }, { start: 15, name: "attrib1", type: "string", value: "something", end: 34 } ], tag : "mytag", end : 35 } ); expect(parser.parseTag("",0)).toEqual( - { type : 'element', start : 0, attributes : { attrib1 : { type : 'string', start : 34, name : 'attrib1', value : 'else', end : 49 } }, orderedAttributes: [ { start: 6, name: 'attrib1', type: 'string', value: 'true', end: 15 }, { start: 15, name: 'attrib1', type: 'string', value: 'something', end: 34 }, { start: 34, name: 'attrib1', type: 'string', value: 'else', end: 49 } ], tag : 'mytag', end : 50 } + { type : "element", start : 0, attributes : { attrib1 : { type : "string", start : 34, name : "attrib1", value : "else", end : 49 } }, orderedAttributes: [ { start: 6, name: "attrib1", type: "string", value: "true", end: 15 }, { start: 15, name: "attrib1", type: "string", value: "something", end: 34 }, { start: 34, name: "attrib1", type: "string", value: "else", end: 49 } ], tag : "mytag", end : 50 } ); expect(parser.parseTag("<$mytag attrib1='something' attrib2=else thing>",0)).toEqual( - { type : 'mytag', start : 0, attributes : { attrib1 : { type : 'string', start : 7, name : 'attrib1', value : 'something', end : 27 }, attrib2 : { type : 'string', start : 27, name : 'attrib2', value : 'else', end : 40 }, thing : { type : 'string', start : 40, name : 'thing', value : 'true', end : 46 } }, orderedAttributes: [ { start: 7, name: 'attrib1', type: 'string', value: 'something', end: 27 }, { start: 27, name: 'attrib2', type: 'string', value: 'else', end: 40 }, { start: 40, name: 'thing', type: 'string', value: 'true', end: 46 } ], tag : '$mytag', end : 47 } + { type : "mytag", start : 0, attributes : { attrib1 : { type : "string", start : 7, name : "attrib1", value : "something", end : 27 }, attrib2 : { type : "string", start : 27, name : "attrib2", value : "else", end : 40 }, thing : { type : "string", start : 40, name : "thing", value : "true", end : 46 } }, orderedAttributes: [ { start: 7, name: "attrib1", type: "string", value: "something", end: 27 }, { start: 27, name: "attrib2", type: "string", value: "else", end: 40 }, { start: 40, name: "thing", type: "string", value: "true", end: 46 } ], tag : "$mytag", end : 47 } ); expect(parser.parseTag("< $mytag attrib1='something' attrib2=else thing>",0)).toEqual( null ); expect(parser.parseTag("<$mytag attrib3=<>>",0)).toEqual( - { type : 'mytag', start : 0, attributes : { attrib3 : { type : 'macro', start : 7, name : 'attrib3', value : { type : 'macrocall', start : 16, params : [ { type : 'macro-parameter', start : 25, value : 'two', name : 'one', end : 33 }, { type : 'macro-parameter', start : 33, value : 'four and five', name : 'three', end : 55 } ], name : 'myMacro', end : 57 }, end : 57 } }, orderedAttributes: [ { type : 'macro', start : 7, name : 'attrib3', value : { type : 'macrocall', start : 16, params : [ { type : 'macro-parameter', start : 25, value : 'two', name : 'one', end : 33 }, { type : 'macro-parameter', start : 33, value : 'four and five', name : 'three', end : 55 } ], name : 'myMacro', end : 57 }, end : 57 } ], tag : '$mytag', end : 58 } + { type : "mytag", start : 0, attributes : { attrib3 : { type : "macro", start : 7, name : "attrib3", value : { type : "macrocall", start : 16, params : [ { type : "macro-parameter", start : 25, value : "two", name : "one", end : 33 }, { type : "macro-parameter", start : 33, value : "four and five", name : "three", end : 55 } ], name : "myMacro", end : 57 }, end : 57 } }, orderedAttributes: [ { type : "macro", start : 7, name : "attrib3", value : { type : "macrocall", start : 16, params : [ { type : "macro-parameter", start : 25, value : "two", name : "one", end : 33 }, { type : "macro-parameter", start : 33, value : "four and five", name : "three", end : 55 } ], name : "myMacro", end : 57 }, end : 57 } ], tag : "$mytag", end : 58 } ); expect(parser.parseTag("<$mytag attrib1='something' attrib2=else thing attrib3=<>>",0)).toEqual( - { type : 'mytag', start : 0, attributes : { attrib1 : { type : 'string', start : 7, name : 'attrib1', value : 'something', end : 27 }, attrib2 : { type : 'string', start : 27, name : 'attrib2', value : 'else', end : 40 }, thing : { type : 'string', start : 40, name : 'thing', value : 'true', end : 47 }, attrib3 : { type : 'macro', start : 47, name : 'attrib3', value : { type : 'macrocall', start : 55, params : [ { type : 'macro-parameter', start : 64, value : 'two', name : 'one', end : 72 }, { type : 'macro-parameter', start : 72, value : 'four and five', name : 'three', end : 94 } ], name : 'myMacro', end : 96 }, end : 96 } }, orderedAttributes: [ { type : 'string', start : 7, name : 'attrib1', value : 'something', end : 27 }, { type : 'string', start : 27, name : 'attrib2', value : 'else', end : 40 }, { type : 'string', start : 40, name : 'thing', value : 'true', end : 47 }, { type : 'macro', start : 47, name : 'attrib3', value : { type : 'macrocall', start : 55, params : [ { type : 'macro-parameter', start : 64, value : 'two', name : 'one', end : 72 }, { type : 'macro-parameter', start : 72, value : 'four and five', name : 'three', end : 94 } ], name : 'myMacro', end : 96 }, end : 96 } ], tag : '$mytag', end : 97 } + { type : "mytag", start : 0, attributes : { attrib1 : { type : "string", start : 7, name : "attrib1", value : "something", end : 27 }, attrib2 : { type : "string", start : 27, name : "attrib2", value : "else", end : 40 }, thing : { type : "string", start : 40, name : "thing", value : "true", end : 47 }, attrib3 : { type : "macro", start : 47, name : "attrib3", value : { type : "macrocall", start : 55, params : [ { type : "macro-parameter", start : 64, value : "two", name : "one", end : 72 }, { type : "macro-parameter", start : 72, value : "four and five", name : "three", end : 94 } ], name : "myMacro", end : 96 }, end : 96 } }, orderedAttributes: [ { type : "string", start : 7, name : "attrib1", value : "something", end : 27 }, { type : "string", start : 27, name : "attrib2", value : "else", end : 40 }, { type : "string", start : 40, name : "thing", value : "true", end : 47 }, { type : "macro", start : 47, name : "attrib3", value : { type : "macrocall", start : 55, params : [ { type : "macro-parameter", start : 64, value : "two", name : "one", end : 72 }, { type : "macro-parameter", start : 72, value : "four and five", name : "three", end : 94 } ], name : "myMacro", end : 96 }, end : 96 } ], tag : "$mytag", end : 97 } ); }); it("should find and parse HTML tags", function() { expect(parser.findNextTag("",1)).toEqual( - { type : 'element', start : 11, attributes : { }, orderedAttributes: [ ], tag : 'mytag', end : 18 } + { type : "element", start : 11, attributes : { }, orderedAttributes: [ ], tag : "mytag", end : 18 } ); expect(parser.findNextTag("something else ",0)).toEqual( null ); expect(parser.findNextTag("<> ",0)).toEqual( - { type : 'element', start : 1, attributes : { other : { type : 'string', value : 'true', start : 6, name : 'other', end : 13 }, stuff : { type : 'string', value : 'true', start : 13, name : 'stuff', end : 18 } }, orderedAttributes: [ { type : 'string', value : 'true', start : 6, name : 'other', end : 13 }, { type : 'string', value : 'true', start : 13, name : 'stuff', end : 18 } ], tag : 'some', end : 19 } + { type : "element", start : 1, attributes : { other : { type : "string", value : "true", start : 6, name : "other", end : 13 }, stuff : { type : "string", value : "true", start : 13, name : "stuff", end : 18 } }, orderedAttributes: [ { type : "string", value : "true", start : 6, name : "other", end : 13 }, { type : "string", value : "true", start : 13, name : "stuff", end : 18 } ], tag : "some", end : 19 } ); expect(parser.findNextTag("<> ",2)).toEqual( - { type : 'element', start : 21, attributes : { }, orderedAttributes: [ ], tag : 'mytag', end : 28 } + { type : "element", start : 21, attributes : { }, orderedAttributes: [ ], tag : "mytag", end : 28 } ); }); diff --git a/editions/test/tiddlers/tests/test-prefixes-filter.js b/editions/test/tiddlers/tests/test-prefixes-filter.js index c71d325855..68be6fe542 100644 --- a/editions/test/tiddlers/tests/test-prefixes-filter.js +++ b/editions/test/tiddlers/tests/test-prefixes-filter.js @@ -372,13 +372,13 @@ describe("'reduce' and 'intersection' filter prefix tests", function() { it("should handle the variance operator", function() { expect(parseFloat(wiki.filterTiddlers("[tag[shopping]get[price]variance[]]").join(","))).toBeCloseTo(2.92); expect(parseFloat(wiki.filterTiddlers("[tag[food]get[price]variance[]]").join(","))).toBeCloseTo(3.367); - expect(wiki.filterTiddlers(" +[variance[]]").toString()).toBe("NaN"); + expect(wiki.filterTiddlers(" +[variance[]]").toString()).toBe(""); }); it("should handle the standard-deviation operator", function() { expect(parseFloat(wiki.filterTiddlers("[tag[shopping]get[price]standard-deviation[]]").join(","))).toBeCloseTo(1.71); expect(parseFloat(wiki.filterTiddlers("[tag[food]get[price]standard-deviation[]]").join(","))).toBeCloseTo(1.835); - expect(wiki.filterTiddlers(" +[standard-deviation[]]").toString()).toBe("NaN"); + expect(wiki.filterTiddlers(" +[standard-deviation[]]").toString()).toBe(""); }); it("should handle the :intersection prefix", function() { @@ -420,6 +420,8 @@ describe("'reduce' and 'intersection' filter prefix tests", function() { expect(wiki.filterTiddlers("[tag[cakes]] :sort:string[{!!title}]").join(",")).toBe("cheesecake,Cheesecake,chocolate cake,Chocolate Cake,Persian love cake,Pound cake"); expect(wiki.filterTiddlers("[tag[cakes]] :sort:string:casesensitive[{!!title}]").join(",")).toBe("Cheesecake,Chocolate Cake,Persian love cake,Pound cake,cheesecake,chocolate cake"); expect(wiki.filterTiddlers("[tag[cakes]] :sort:string:casesensitive,reverse[{!!title}]").join(",")).toBe("chocolate cake,cheesecake,Pound cake,Persian love cake,Chocolate Cake,Cheesecake"); + expect(wiki.filterTiddlers("1.2.0 1.0.0 1.0.5 :sort:version[{!!title}]").join(",")).toBe("1.0.0,1.0.5,1.2.0"); + expect(wiki.filterTiddlers("1.2.0 1.0.0 1.0.5 :sort:version:reverse[{!!title}]").join(",")).toBe("1.2.0,1.0.5,1.0.0"); }); it("should handle the :map prefix", function() { diff --git a/editions/test/tiddlers/tests/test-wikitext-parser.js b/editions/test/tiddlers/tests/test-wikitext-parser.js index c35ad1dce7..59172f8675 100644 --- a/editions/test/tiddlers/tests/test-wikitext-parser.js +++ b/editions/test/tiddlers/tests/test-wikitext-parser.js @@ -23,87 +23,87 @@ describe("WikiText parser tests", function() { it("should parse tags", function() { expect(parse("
")).toEqual( - [ { type : 'element', tag : 'p', start : 0, end : 4, children : [ { type : 'element', tag : 'br', start : 0, end : 4, openTagStart: 0, openTagEnd: 4, rule: 'html', isBlock : false, attributes : { }, orderedAttributes: [ ] } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start : 0, end : 4, children : [ { type : "element", tag : "br", start : 0, end : 4, openTagStart: 0, openTagEnd: 4, rule: "html", isBlock : false, attributes : { }, orderedAttributes: [ ] } ] } ] ); expect(parse("
")).toEqual( - [ { type : 'element', tag : 'p', start : 0, end : 5, children : [ { type : 'text', text : '
', start : 0, end : 5 } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start : 0, end : 5, children : [ { type : "text", text : "
", start : 0, end : 5 } ] } ] ); expect(parse("
")).toEqual( - [ { type : 'element', tag : 'p', start : 0, end : 5, children : [ { type : 'element', tag : 'div', start : 0, end : 5, openTagStart: 0, openTagEnd: 5, closeTagStart: 5, closeTagEnd: 5, rule: 'html', isBlock : false, attributes : { }, orderedAttributes: [ ], children : [ ] } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start : 0, end : 5, children : [ { type : "element", tag : "div", start : 0, end : 5, openTagStart: 0, openTagEnd: 5, closeTagStart: 5, closeTagEnd: 5, rule: "html", isBlock : false, attributes : { }, orderedAttributes: [ ], children : [ ] } ] } ] ); expect(parse("
")).toEqual( - [ { type : 'element', tag : 'p', start : 0, end : 6, children : [ { type : 'element', tag : 'div', isSelfClosing : true, isBlock : false, attributes : { }, orderedAttributes: [ ], start : 0, end : 6, rule: 'html' } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start : 0, end : 6, children : [ { type : "element", tag : "div", isSelfClosing : true, isBlock : false, attributes : { }, orderedAttributes: [ ], start : 0, end : 6, rule: "html" } ] } ] ); expect(parse("
")).toEqual( - [ { type : 'element', tag : 'p', start : 0, end : 11, children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { }, orderedAttributes: [ ], children : [ ], start : 0, end : 11, openTagStart: 0, openTagEnd: 5, closeTagStart: 5, closeTagEnd: 11, rule: 'html' } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start : 0, end : 11, children : [ { type : "element", tag : "div", isBlock : false, attributes : { }, orderedAttributes: [ ], children : [ ], start : 0, end : 11, openTagStart: 0, openTagEnd: 5, closeTagStart: 5, closeTagEnd: 11, rule: "html" } ] } ] ); expect(parse("
some text
")).toEqual( - [ { type : 'element', tag : 'p', start : 0, end : 20, children : [ { type : 'element', tag : 'div', openTagStart: 0, openTagEnd: 5, closeTagStart: 14, closeTagEnd: 20, rule: 'html', isBlock : false, attributes : { }, orderedAttributes: [ ], children : [ { type : 'text', text : 'some text', start : 5, end : 14 } ], start : 0, end : 20 } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start : 0, end : 20, children : [ { type : "element", tag : "div", openTagStart: 0, openTagEnd: 5, closeTagStart: 14, closeTagEnd: 20, rule: "html", isBlock : false, attributes : { }, orderedAttributes: [ ], children : [ { type : "text", text : "some text", start : 5, end : 14 } ], start : 0, end : 20 } ] } ] ); expect(parse("
some text
")).toEqual( - [ { type : 'element', tag : 'p', start : 0, end : 30, children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'string', value : 'true', start : 4, end : 14, name: 'attribute' } }, orderedAttributes: [ { type : 'string', value : 'true', start : 4, end : 14, name: 'attribute' } ], children : [ { type : 'text', text : 'some text', start : 15, end : 24 } ], start : 0, end : 30, openTagStart: 0, openTagEnd: 15, closeTagStart: 24, closeTagEnd: 30, rule: 'html' } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start : 0, end : 30, children : [ { type : "element", tag : "div", isBlock : false, attributes : { attribute : { type : "string", value : "true", start : 4, end : 14, name: "attribute" } }, orderedAttributes: [ { type : "string", value : "true", start : 4, end : 14, name: "attribute" } ], children : [ { type : "text", text : "some text", start : 15, end : 24 } ], start : 0, end : 30, openTagStart: 0, openTagEnd: 15, closeTagStart: 24, closeTagEnd: 30, rule: "html" } ] } ] ); expect(parse("
some text
")).toEqual( - [ { type : 'element', tag : 'p', start : 0, end : 38, children : [ { type : 'element', tag : 'div', openTagStart: 0, openTagEnd: 23, closeTagStart: 32, closeTagEnd: 38, rule: 'html', isBlock : false, attributes : { attribute : { type : 'string', name: 'attribute', value : 'value', start: 4, end: 22 } }, orderedAttributes: [ { type: 'string', name: 'attribute', value : 'value', start: 4, end: 22 } ], children : [ { type : 'text', text : 'some text', start : 23, end : 32 } ], start : 0, end : 38 } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start : 0, end : 38, children : [ { type : "element", tag : "div", openTagStart: 0, openTagEnd: 23, closeTagStart: 32, closeTagEnd: 38, rule: "html", isBlock : false, attributes : { attribute : { type : "string", name: "attribute", value : "value", start: 4, end: 22 } }, orderedAttributes: [ { type: "string", name: "attribute", value : "value", start: 4, end: 22 } ], children : [ { type : "text", text : "some text", start : 23, end : 32 } ], start : 0, end : 38 } ] } ] ); expect(parse("
some text
")).toEqual( - [ { type : 'element', tag : 'p', start: 0, end: 47, children : [ { type : 'element', tag : 'div', isBlock : false, attributes : { attribute : { type : 'indirect', name: 'attribute', textReference : 'TiddlerTitle', start : 4, end : 31 } }, orderedAttributes: [ { type : 'indirect', name: 'attribute', textReference : 'TiddlerTitle', start : 4, end : 31 } ], children : [ { type : 'text', text : 'some text', start : 32, end : 41 } ], start : 0, end : 47, openTagStart: 0, openTagEnd: 32, closeTagStart: 41, closeTagEnd: 47, rule: 'html' } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start: 0, end: 47, children : [ { type : "element", tag : "div", isBlock : false, attributes : { attribute : { type : "indirect", name: "attribute", textReference : "TiddlerTitle", start : 4, end : 31 } }, orderedAttributes: [ { type : "indirect", name: "attribute", textReference : "TiddlerTitle", start : 4, end : 31 } ], children : [ { type : "text", text : "some text", start : 32, end : 41 } ], start : 0, end : 47, openTagStart: 0, openTagEnd: 32, closeTagStart: 41, closeTagEnd: 47, rule: "html" } ] } ] ); expect(parse("<$reveal state='$:/temp/search' type='nomatch' text=''>")).toEqual( - [ { type : 'element', tag : 'p', start: 0, end: 55, children : [ { type : 'reveal', tag: '$reveal', rule: 'html', attributes : { state : { start : 8, name : 'state', type : 'string', value : '$:/temp/search', end : 31 }, type : { start : 31, name : 'type', type : 'string', value : 'nomatch', end : 46 }, text : { start : 46, name : 'text', type : 'string', value : '', end : 54 } }, orderedAttributes: [ { start : 8, name : 'state', type : 'string', value : '$:/temp/search', end : 31 }, { start : 31, name : 'type', type : 'string', value : 'nomatch', end : 46 }, { start : 46, name : 'text', type : 'string', value : '', end : 54 } ], start: 0, end : 55, openTagStart: 0, openTagEnd: 55, closeTagStart: 55, closeTagEnd: 55, isBlock : false, children : [ ] } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start: 0, end: 55, children : [ { type : "reveal", tag: "$reveal", rule: "html", attributes : { state : { start : 8, name : "state", type : "string", value : "$:/temp/search", end : 31 }, type : { start : 31, name : "type", type : "string", value : "nomatch", end : 46 }, text : { start : 46, name : "text", type : "string", value : "", end : 54 } }, orderedAttributes: [ { start : 8, name : "state", type : "string", value : "$:/temp/search", end : 31 }, { start : 31, name : "type", type : "string", value : "nomatch", end : 46 }, { start : 46, name : "text", type : "string", value : "", end : 54 } ], start: 0, end : 55, openTagStart: 0, openTagEnd: 55, closeTagStart: 55, closeTagEnd: 55, isBlock : false, children : [ ] } ] } ] ); expect(parse("
some text
")).toEqual( - [ { type : 'element', tag : 'p', start: 0, end: 54, children : [ { type : 'element', tag : 'div', rule: 'html', isBlock : false, attributes : { attribute : { type : 'indirect', name : 'attribute', textReference : 'TiddlerTitle!!field', start : 4, end : 38 } }, orderedAttributes: [ { type : 'indirect', name : 'attribute', textReference : 'TiddlerTitle!!field', start : 4, end : 38 } ], children : [ { type : 'text', text : 'some text', start : 39, end : 48 } ], start : 0, end : 54, openTagStart: 0, openTagEnd: 39, closeTagStart: 48, closeTagEnd: 54 } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start: 0, end: 54, children : [ { type : "element", tag : "div", rule: "html", isBlock : false, attributes : { attribute : { type : "indirect", name : "attribute", textReference : "TiddlerTitle!!field", start : 4, end : 38 } }, orderedAttributes: [ { type : "indirect", name : "attribute", textReference : "TiddlerTitle!!field", start : 4, end : 38 } ], children : [ { type : "text", text : "some text", start : 39, end : 48 } ], start : 0, end : 54, openTagStart: 0, openTagEnd: 39, closeTagStart: 48, closeTagEnd: 54 } ] } ] ); expect(parse("
some text
")).toEqual( - [ { type : 'element', tag : 'p', start: 0, end: 55, children : [ { type : 'element', tag : 'div', rule: 'html', isBlock : false, attributes : { attribute : { type : 'indirect', name : 'attribute', textReference : 'Tiddler Title!!field', start : 4, end : 39 } }, orderedAttributes: [ { type : 'indirect', name : 'attribute', textReference : 'Tiddler Title!!field', start : 4, end : 39 } ], children : [ { type : 'text', text : 'some text', start : 40, end : 49 } ], start : 0, end : 55, openTagStart: 0, openTagEnd: 40, closeTagStart: 49, closeTagEnd: 55 } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start: 0, end: 55, children : [ { type : "element", tag : "div", rule: "html", isBlock : false, attributes : { attribute : { type : "indirect", name : "attribute", textReference : "Tiddler Title!!field", start : 4, end : 39 } }, orderedAttributes: [ { type : "indirect", name : "attribute", textReference : "Tiddler Title!!field", start : 4, end : 39 } ], children : [ { type : "text", text : "some text", start : 40, end : 49 } ], start : 0, end : 55, openTagStart: 0, openTagEnd: 40, closeTagStart: 49, closeTagEnd: 55 } ] } ] ); expect(parse("
\n\nsome text
")).toEqual( - [ { type : 'element', start : 0, attributes : { attribute : { start : 4, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 38 } }, orderedAttributes: [ { start : 4, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 38 } ], tag : 'div', rule: 'html', end : 56, openTagStart: 0, openTagEnd: 39, closeTagStart: 50, closeTagEnd: 56, isBlock : true, children : [ { type : 'element', tag : 'p', start : 41, end : 50, children : [ { type : 'text', text : 'some text', start : 41, end : 50 } ] } ] } ] + [ { type : "element", start : 0, attributes : { attribute : { start : 4, name : "attribute", type : "indirect", textReference : "TiddlerTitle!!field", end : 38 } }, orderedAttributes: [ { start : 4, name : "attribute", type : "indirect", textReference : "TiddlerTitle!!field", end : 38 } ], tag : "div", rule: "html", end : 56, openTagStart: 0, openTagEnd: 39, closeTagStart: 50, closeTagEnd: 56, isBlock : true, children : [ { type : "element", tag : "p", rule: "parseblock", start : 41, end : 50, children : [ { type : "text", text : "some text", start : 41, end : 50 } ] } ] } ] ); expect(parse("
\n\nsome text
")).toEqual( - [ { type : 'element', tag : 'p', start: 0, end: 67, children : [ { type : 'element', start : 0, end: 67, openTagStart: 0, openTagEnd: 5, closeTagStart: 61, closeTagEnd: 67, attributes : { }, orderedAttributes: [ ], tag : 'div', rule: 'html', isBlock : false, children : [ { type : 'element', start : 5, attributes : { attribute : { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } }, orderedAttributes: [ { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } ], tag : 'div', end : 61, openTagStart: 5, openTagEnd: 44, closeTagStart: 55, closeTagEnd: 61, rule: 'html', isBlock : true, children : [ { type : 'element', tag : 'p', start : 46, end : 55, children : [ { type : 'text', text : 'some text', start : 46, end : 55 } ] } ] } ] } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start: 0, end: 67, children : [ { type : "element", start : 0, end: 67, openTagStart: 0, openTagEnd: 5, closeTagStart: 61, closeTagEnd: 67, attributes : { }, orderedAttributes: [ ], tag : "div", rule: "html", isBlock : false, children : [ { type : "element", start : 5, attributes : { attribute : { start : 9, name : "attribute", type : "indirect", textReference : "TiddlerTitle!!field", end : 43 } }, orderedAttributes: [ { start : 9, name : "attribute", type : "indirect", textReference : "TiddlerTitle!!field", end : 43 } ], tag : "div", end : 61, openTagStart: 5, openTagEnd: 44, closeTagStart: 55, closeTagEnd: 61, rule: "html", isBlock : true, children : [ { type : "element", tag : "p", rule: "parseblock", start : 46, end : 55, children : [ { type : "text", text : "some text", start : 46, end : 55 } ] } ] } ] } ] } ] ); expect(parse("
\n\n!some heading
")).toEqual( - [ { type : 'element', tag : 'p', start: 0, end: 71, children : [ { type : 'element', start : 0, end: 71, openTagStart: 0, openTagEnd: 5, closeTagStart: 71, closeTagEnd: 71, attributes : { }, orderedAttributes: [ ], tag : 'div', rule: 'html', isBlock : false, children : [ { type : 'element', start : 5, attributes : { attribute : { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } }, orderedAttributes: [ { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } ], tag : 'div', end : 71, openTagStart: 5, openTagEnd: 44, closeTagStart: 71, closeTagEnd: 71, rule: 'html', isBlock : true, children : [ { type : 'element', tag : 'h1', start: 46, end: 71, rule: 'heading', attributes : { class : { type : 'string', value : '', start: 47, end: 47 } }, children : [ { type : 'text', text : 'some heading
', start : 47, end : 71 } ] } ] } ] } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start: 0, end: 71, children : [ { type : "element", start : 0, end: 71, openTagStart: 0, openTagEnd: 5, closeTagStart: 71, closeTagEnd: 71, attributes : { }, orderedAttributes: [ ], tag : "div", rule: "html", isBlock : false, children : [ { type : "element", start : 5, attributes : { attribute : { start : 9, name : "attribute", type : "indirect", textReference : "TiddlerTitle!!field", end : 43 } }, orderedAttributes: [ { start : 9, name : "attribute", type : "indirect", textReference : "TiddlerTitle!!field", end : 43 } ], tag : "div", end : 71, openTagStart: 5, openTagEnd: 44, closeTagStart: 71, closeTagEnd: 71, rule: "html", isBlock : true, children : [ { type : "element", tag : "h1", start: 46, end: 71, rule: "heading", attributes : { class : { type : "string", value : "", start: 47, end: 47 } }, children : [ { type : "text", text : "some heading", start : 47, end : 71 } ] } ] } ] } ] } ] ); expect(parse("
\n!some heading
")).toEqual( - [ { type : 'element', tag : 'p', start: 0, end: 70, children : [ { type : 'element', start : 0, end: 70, openTagStart: 0, openTagEnd: 5, closeTagStart: 64, closeTagEnd: 70, attributes : { }, orderedAttributes: [ ], tag : 'div', rule: 'html', isBlock : false, children : [ { type : 'element', start : 5, attributes : { attribute : { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } }, orderedAttributes: [ { start : 9, name : 'attribute', type : 'indirect', textReference : 'TiddlerTitle!!field', end : 43 } ], tag : 'div', end : 64, openTagStart: 5, openTagEnd: 44, closeTagStart: 58, closeTagEnd: 64, rule: 'html', isBlock : false, children : [ { type : 'text', text : '\n!some heading', start : 44, end : 58 } ] } ] } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start: 0, end: 70, children : [ { type : "element", start : 0, end: 70, openTagStart: 0, openTagEnd: 5, closeTagStart: 64, closeTagEnd: 70, attributes : { }, orderedAttributes: [ ], tag : "div", rule: "html", isBlock : false, children : [ { type : "element", start : 5, attributes : { attribute : { start : 9, name : "attribute", type : "indirect", textReference : "TiddlerTitle!!field", end : 43 } }, orderedAttributes: [ { start : 9, name : "attribute", type : "indirect", textReference : "TiddlerTitle!!field", end : 43 } ], tag : "div", end : 64, openTagStart: 5, openTagEnd: 44, closeTagStart: 58, closeTagEnd: 64, rule: "html", isBlock : false, children : [ { type : "text", text : "\n!some heading", start : 44, end : 58 } ] } ] } ] } ] ); // Regression test for issue (#3306) expect(parse("
\n\nSome text
")).toEqual( - [ { type : 'element', tag : 'p', start: 0, end: 48, children : [ { type : 'element', start : 0, end: 48, openTagStart: 0, openTagEnd: 5, closeTagStart: 42, closeTagEnd: 48, attributes : { }, orderedAttributes: [ ], tag : 'div', rule: 'html', isBlock : false, children : [ { type : 'element', start : 5, attributes : { }, orderedAttributes: [ ], tag : 'span', end : 42, openTagStart: 5, openTagEnd: 11, closeTagStart: 35, closeTagEnd: 42, rule: 'html', isBlock : false, children : [ { type : 'element', start : 11, attributes : { }, orderedAttributes: [ ], tag : 'span', end : 35, openTagStart: 11, openTagEnd: 17, closeTagStart: 28, closeTagEnd: 35, rule: 'html', isBlock : true, children : [ { type : 'element', tag : 'p', start : 19, end : 28, children : [ { type : 'text', text : 'Some text', start : 19, end : 28 } ] } ] } ] } ] } ] } ] + [ { type : "element", tag : "p", rule: "parseblock", start: 0, end: 48, children : [ { type : "element", start : 0, end: 48, openTagStart: 0, openTagEnd: 5, closeTagStart: 42, closeTagEnd: 48, attributes : { }, orderedAttributes: [ ], tag : "div", rule: "html", isBlock : false, children : [ { type : "element", start : 5, attributes : { }, orderedAttributes: [ ], tag : "span", end : 42, openTagStart: 5, openTagEnd: 11, closeTagStart: 35, closeTagEnd: 42, rule: "html", isBlock : false, children : [ { type : "element", start : 11, attributes : { }, orderedAttributes: [ ], tag : "span", end : 35, openTagStart: 11, openTagEnd: 17, closeTagStart: 28, closeTagEnd: 35, rule: "html", isBlock : true, children : [ { type : "element", tag : "p", rule: "parseblock", start : 19, end : 28, children : [ { type : "text", text : "Some text", start : 19, end : 28 } ] } ] } ] } ] } ] } ] ); }); @@ -111,7 +111,28 @@ describe("WikiText parser tests", function() { it("should parse macro definitions", function() { expect(parse("\\define myMacro()\nnothing\n\\end\n")).toEqual( - [{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"isMacroDefinition":true,"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"start":0,"end":30,"rule":"macrodef"}] + [{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"isMacroDefinition":true,"isBlock":false,"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"start":0,"end":30,"rule":"macrodef"}] + + ); + expect(parse("\\define myMacro() nothing\n\n")).toEqual( + + [{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"isMacroDefinition":true,"isBlock":true,"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"start":0,"end":25,"rule":"macrodef"}] + + ); + }); + + it("should parse macro definitions with end statements followed by spaces", function() { + expect(parse("\\define myMacro()\nnothing\n\\end \n")).toEqual( + + [{"type":"set","isBlock": false,"attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"isMacroDefinition":true,"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"start":0,"end":33,"rule":"macrodef"}] + + ); + }); + + it("should parse macro definitions with named end statements followed by spaces", function() { + expect(parse("\\define myMacro()\nnothing\n\\end myMacro \n")).toEqual( + + [{"type":"set","isBlock": false,"attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"isMacroDefinition":true,"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"start":0,"end":40,"rule":"macrodef"}] ); }); @@ -132,6 +153,22 @@ describe("WikiText parser tests", function() { ); }); + it("should parse procedure definitions with end statements followed by spaces", function() { + expect(parse("\\procedure myMacro()\nnothing\n\\end \n")).toEqual( + + [{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"isProcedureDefinition":true,"start":0,"end":36,"rule":"fnprocdef"}] + + ); + }); + + it("should parse procedure definitions with named end statements followed by spaces", function() { + expect(parse("\\procedure myMacro()\nnothing\n\\end myMacro \n")).toEqual( + + [{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"isProcedureDefinition":true,"start":0,"end":43,"rule":"fnprocdef"}] + + ); + }); + it("should parse procedure definitions with parameters", function() { expect(parse("\\procedure myMacro(one,two,three,four:elephant)\nnothing\n\\end\n")).toEqual( @@ -155,6 +192,22 @@ describe("WikiText parser tests", function() { ); }); + it("should parse function definitions with end statements followed by spaces", function() { + expect(parse("\\function myMacro()\nnothing\n\\end \n")).toEqual( + + [{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"isFunctionDefinition":true,"start":0,"end":35,"rule":"fnprocdef"}] + + ); + }); + + it("should parse function definitions with named end statements followed by spaces", function() { + expect(parse("\\function myMacro()\nnothing\n\\end myMacro \n")).toEqual( + + [{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"isFunctionDefinition":true,"start":0,"end":42,"rule":"fnprocdef"}] + + ); + }); + it("should parse single line function definitions with no parameters", function() { expect(parse("\\function myMacro() nothing\n")).toEqual( @@ -182,7 +235,7 @@ describe("WikiText parser tests", function() { it("should parse comment in pragma area. Comment will be invisible", function() { expect(parse("\n\\define aMacro()\nnothing\n\\end\n")).toEqual( - [{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"aMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"isMacroDefinition":true,"orderedAttributes":[{"name":"name","type":"string","value":"aMacro"},{"name":"value","type":"string","value":"nothing"}],"start":32,"end":61,"rule":"macrodef"}] + [{"type":"void","children":[{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"aMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"isMacroDefinition":true,"isBlock":false,"orderedAttributes":[{"name":"name","type":"string","value":"aMacro"},{"name":"value","type":"string","value":"nothing"}],"start":32,"end":61,"rule":"macrodef"}],"text":"","start":0,"end":31,"rule":"commentblock"}] ); }); @@ -190,12 +243,12 @@ describe("WikiText parser tests", function() { it("should block mode filtered transclusions", function() { expect(parse("{{{ filter }}}")).toEqual( - [ { type: 'list', attributes: { filter: { type: 'string', value: ' filter ', start: 3, end: 11 } }, isBlock: true, start: 0, end: 14, rule: "filteredtranscludeblock" } ] + [ { type: "list", attributes: { filter: { type: "string", value: " filter ", start: 3, end: 11 } }, isBlock: true, start: 0, end: 14, rule: "filteredtranscludeblock" } ] ); expect(parse("{{{ fil\nter }}}")).toEqual( - [ { type: 'list', attributes: { filter: { type: 'string', value: ' fil\nter ', start: 3, end: 12 } }, isBlock: true, start: 0, end: 15, rule: "filteredtranscludeblock" } ] + [ { type: "list", attributes: { filter: { type: "string", value: " fil\nter ", start: 3, end: 12 } }, isBlock: true, start: 0, end: 15, rule: "filteredtranscludeblock" } ] ); }); @@ -203,38 +256,38 @@ describe("WikiText parser tests", function() { it("should parse inline macro calls", function() { expect(parse("<><><><>")).toEqual( - [{"type":"element","tag":"p","children":[{"type":"transclude","start":0,"end":8,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"}]},{"type":"transclude","start":8,"end":16,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"paul"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"paul"}]},{"type":"transclude","start":16,"end":26,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"george"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"george"}]},{"type":"transclude","start":26,"end":35,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"ringo"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"ringo"}]}],"start":0,"end":35}] + [{"type":"element","tag":"p",rule:"parseblock","children":[{"type":"transclude","start":0,"end":8,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"}]},{"type":"transclude","start":8,"end":16,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"paul"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"paul"}]},{"type":"transclude","start":16,"end":26,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"george"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"george"}]},{"type":"transclude","start":26,"end":35,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"ringo"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"ringo"}]}],"start":0,"end":35}] ); expect(parse("text <>")).toEqual( - [{"type":"element","tag":"p","children":[{"type":"text","text":"text ","start":0,"end":5},{"type":"transclude","start":5,"end":92,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"},"one":{"name":"one","type":"string","value":"val1","start":11,"end":20},"two":{"name":"two","type":"string","value":"val \"2\"","start":20,"end":35},"three":{"name":"three","type":"string","value":"val '3'","start":35,"end":52},"four":{"name":"four","type":"string","value":"val 4\"5'","start":52,"end":73},"five":{"name":"five","type":"string","value":"val 5","start":73,"end":89}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"},{"name":"one","type":"string","value":"val1","start":11,"end":20},{"name":"two","type":"string","value":"val \"2\"","start":20,"end":35},{"name":"three","type":"string","value":"val '3'","start":35,"end":52},{"name":"four","type":"string","value":"val 4\"5'","start":52,"end":73},{"name":"five","type":"string","value":"val 5","start":73,"end":89}]}],"start":0,"end":92}] + [{"type":"element","tag":"p",rule:"parseblock","children":[{"type":"text","text":"text ","start":0,"end":5},{"type":"transclude","start":5,"end":92,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"},"one":{"name":"one","type":"string","value":"val1","start":11,"end":20},"two":{"name":"two","type":"string","value":"val \"2\"","start":20,"end":35},"three":{"name":"three","type":"string","value":"val '3'","start":35,"end":52},"four":{"name":"four","type":"string","value":"val 4\"5'","start":52,"end":73},"five":{"name":"five","type":"string","value":"val 5","start":73,"end":89}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"},{"name":"one","type":"string","value":"val1","start":11,"end":20},{"name":"two","type":"string","value":"val \"2\"","start":20,"end":35},{"name":"three","type":"string","value":"val '3'","start":35,"end":52},{"name":"four","type":"string","value":"val 4\"5'","start":52,"end":73},{"name":"five","type":"string","value":"val 5","start":73,"end":89}]}],"start":0,"end":92}] ); expect(parse("ignored << carrots <>")).toEqual( - [{"type":"element","tag":"p","children":[{"type":"text","text":"ignored << carrots ","start":0,"end":19},{"type":"transclude","start":19,"end":27,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"}]}],"start":0,"end":27}] + [{"type":"element","tag":"p",rule:"parseblock","children":[{"type":"text","text":"ignored << carrots ","start":0,"end":19},{"type":"transclude","start":19,"end":27,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"}]}],"start":0,"end":27}] ); expect(parse("text <<>")).toEqual( - [{"type":"element","tag":"p","children":[{"type":"text","text":"text ","start":0,"end":5},{"type":"transclude","start":5,"end":14,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":">")).toEqual( - [{"type":"element","tag":"p","children":[{"type":"text","text":"before\n","start":0,"end":7},{"type":"transclude","start":7,"end":15,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"}]}],"start":0,"end":15}] + [{"type":"element","tag":"p",rule:"parseblock","children":[{"type":"text","text":"before\n","start":0,"end":7},{"type":"transclude","start":7,"end":15,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"}]}],"start":0,"end":15}] ); // A single space will cause it to be inline expect(parse("<> ")).toEqual( - [{"type":"element","tag":"p","children":[{"type":"transclude","start":0,"end":8,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"}]},{"type":"text","text":" ","start":8,"end":9}],"start":0,"end":9}] + [{"type":"element","tag":"p",rule:"parseblock","children":[{"type":"transclude","start":0,"end":8,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"}]},{"type":"text","text":" ","start":8,"end":9}],"start":0,"end":9}] ); expect(parse("text <>' >>")).toEqual( - [{"type":"element","tag":"p","children":[{"type":"text","text":"text ","start":0,"end":5},{"type":"transclude","start":5,"end":34,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"outie"},"one":{"name":"one","type":"string","value":"my <>","start":12,"end":31}},"orderedAttributes":[{"name":"$variable","type":"string","value":"outie"},{"name":"one","type":"string","value":"my <>","start":12,"end":31}]}],"start":0,"end":34}] + [{"type":"element","tag":"p",rule:"parseblock","children":[{"type":"text","text":"text ","start":0,"end":5},{"type":"transclude","start":5,"end":34,"rule":"macrocallinline","attributes":{"$variable":{"name":"$variable","type":"string","value":"outie"},"one":{"name":"one","type":"string","value":"my <>","start":12,"end":31}},"orderedAttributes":[{"name":"$variable","type":"string","value":"outie"},{"name":"one","type":"string","value":"my <>","start":12,"end":31}]}],"start":0,"end":34}] ); @@ -243,7 +296,7 @@ describe("WikiText parser tests", function() { it("should parse block macro calls", function() { expect(parse("<>\n<>\r\n<>\n<>")).toEqual( - [ { type: 'transclude', start: 0, rule: 'macrocallblock', attributes: { $variable: { name: "$variable", type: "string", value: "john" }}, orderedAttributes: [ { name: "$variable", type: "string", value: "john" }], end: 8, isBlock: true }, { type: 'transclude', start: 9, rule: 'macrocallblock', attributes: { $variable: { name: "$variable", type: "string", value: "paul" }}, orderedAttributes: [ { name: "$variable", type: "string", value: "paul" }], end: 17, isBlock: true }, { type: 'transclude', start: 19, rule: 'macrocallblock', attributes: { $variable: { name: "$variable", type: "string", value: "george" }}, orderedAttributes: [ { name: "$variable", type: "string", value: "george" }], end: 29, isBlock: true }, { type: 'transclude', start: 30, rule: 'macrocallblock', attributes: { $variable: { name: "$variable", type: "string", value: "ringo" }}, orderedAttributes: [ { name: "$variable", type: "string", value: "ringo" }], end: 39, isBlock: true } ] + [ { type: "transclude", start: 0, rule: "macrocallblock", attributes: { $variable: { name: "$variable", type: "string", value: "john" }}, orderedAttributes: [ { name: "$variable", type: "string", value: "john" }], end: 8, isBlock: true }, { type: "transclude", start: 9, rule: "macrocallblock", attributes: { $variable: { name: "$variable", type: "string", value: "paul" }}, orderedAttributes: [ { name: "$variable", type: "string", value: "paul" }], end: 17, isBlock: true }, { type: "transclude", start: 19, rule: "macrocallblock", attributes: { $variable: { name: "$variable", type: "string", value: "george" }}, orderedAttributes: [ { name: "$variable", type: "string", value: "george" }], end: 29, isBlock: true }, { type: "transclude", start: 30, rule: "macrocallblock", attributes: { $variable: { name: "$variable", type: "string", value: "ringo" }}, orderedAttributes: [ { name: "$variable", type: "string", value: "ringo" }], end: 39, isBlock: true } ] ); expect(parse("<>")).toEqual( @@ -253,17 +306,17 @@ describe("WikiText parser tests", function() { ); expect(parse("<< carrots\n\n<>")).toEqual( - [ { type: 'element', tag: 'p', start : 0, end : 10, children: [ { type: 'text', text: '<< carrots', start : 0, end : 10 } ] }, { type: 'transclude', start: 12, rule: 'macrocallblock', attributes: { $variable: {name: "$variable", type:"string", value: "john"} }, orderedAttributes: [ {name: "$variable", type:"string", value: "john"} ], end: 20, isBlock: true } ] + [ { type: "element", tag: "p", rule: "parseblock", start : 0, end : 10, children: [ { type: "text", text: "<< carrots", start : 0, end : 10 } ] }, { type: "transclude", start: 12, rule: "macrocallblock", attributes: { $variable: {name: "$variable", type:"string", value: "john"} }, orderedAttributes: [ {name: "$variable", type:"string", value: "john"} ], end: 20, isBlock: true } ] ); expect(parse("before\n\n<>")).toEqual( - [ { type: 'element', tag: 'p', start : 0, end : 6, children: [ { type: 'text', text: 'before', start : 0, end : 6 } ] }, { type: 'transclude', start: 8, rule: 'macrocallblock', attributes: { $variable: {name: "$variable", type:"string", value: "john"} }, orderedAttributes: [ {name: "$variable", type:"string", value: "john"} ], end: 16, isBlock: true } ] + [ { type: "element", tag: "p", rule: "parseblock", start : 0, end : 6, children: [ { type: "text", text: "before", start : 0, end : 6 } ] }, { type: "transclude", start: 8, rule: "macrocallblock", attributes: { $variable: {name: "$variable", type:"string", value: "john"} }, orderedAttributes: [ {name: "$variable", type:"string", value: "john"} ], end: 16, isBlock: true } ] ); expect(parse("<>\nafter")).toEqual( - [ { type: 'transclude', start: 0, rule: 'macrocallblock', attributes: { $variable: {name: "$variable", type:"string", value: "john"} }, orderedAttributes: [ {name: "$variable", type:"string", value: "john"} ], end: 8, isBlock: true }, { type: 'element', tag: 'p', start: 9, end: 14, children: [ { type: 'text', text: 'after', start: 9, end: 14 } ] } ] + [ { type: "transclude", start: 0, rule: "macrocallblock", attributes: { $variable: {name: "$variable", type:"string", value: "john"} }, orderedAttributes: [ {name: "$variable", type:"string", value: "john"} ], end: 8, isBlock: true }, { type: "element", tag: "p", rule: "parseblock", start: 9, end: 14, children: [ { type: "text", text: "after", start: 9, end: 14 } ] } ] ); expect(parse("<>")).toEqual( @@ -273,7 +326,7 @@ describe("WikiText parser tests", function() { ); expect(parse("<>' >>")).toEqual( - [ { type: 'transclude', start: 0, rule: 'macrocallblock', attributes: { $variable: {name: "$variable", type:"string", value: "outie"}, one: {name: "one", type:"string", value: "my <>", start: 7, end: 26} }, orderedAttributes: [ {name: "$variable", type:"string", value: "outie"}, {name: "one", type:"string", value: "my <>", start: 7, end: 26} ], end: 29, isBlock: true } ] + [ { type: "transclude", start: 0, rule: "macrocallblock", attributes: { $variable: {name: "$variable", type:"string", value: "outie"}, one: {name: "one", type:"string", value: "my <>", start: 7, end: 26} }, orderedAttributes: [ {name: "$variable", type:"string", value: "outie"}, {name: "one", type:"string", value: "my <>", start: 7, end: 26} ], end: 29, isBlock: true } ] ); }); @@ -291,7 +344,7 @@ describe("WikiText parser tests", function() { ); expect(parse("<>>")).toEqual( - [{"type":"element","tag":"p","children":[{"type":"transclude","start":0,"end":14,"rule":"macrocallinline","attributes":{"0":{"name":"0","type":"string","value":"param","start":6,"end":12},"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"},{"name":"0","type":"string","value":"param","start":6,"end":12}]},{"type":"text","text":">","start":14,"end":15}],"start":0,"end":15}] + [{"type":"element","tag":"p",rule:"parseblock","children":[{"type":"transclude","start":0,"end":14,"rule":"macrocallinline","attributes":{"0":{"name":"0","type":"string","value":"param","start":6,"end":12},"$variable":{"name":"$variable","type":"string","value":"john"}},"orderedAttributes":[{"name":"$variable","type":"string","value":"john"},{"name":"0","type":"string","value":"param","start":6,"end":12}]},{"type":"text","text":">","start":14,"end":15}],"start":0,"end":15}] ); // equals signs should be allowed @@ -306,7 +359,7 @@ describe("WikiText parser tests", function() { it("should parse horizontal rules", function() { expect(parse("---Not a rule\n\n----\n\nBetween\n\n---")).toEqual( - [ { type : 'element', tag : 'p', start : 0, end : 13, children : [ { type : 'entity', entity : '—', start: 0, end: 3, rule: 'dash' }, { type : 'text', text : 'Not a rule', start : 3, end : 13 } ] }, { type : 'element', tag : 'hr', start: 15, end: 20, rule: 'horizrule' }, { type : 'element', tag : 'p', start : 21, end : 28, children : [ { type : 'text', text : 'Between', start : 21, end : 28 } ] }, { type : 'element', tag : 'hr', start: 30, end: 33, rule: 'horizrule' } ] + [ { type : "element", tag : "p", rule: "parseblock", start : 0, end : 13, children : [ { type : "entity", entity : "—", start: 0, end: 3, rule: "dash" }, { type : "text", text : "Not a rule", start : 3, end : 13 } ] }, { type : "element", tag : "hr", start: 15, end: 20, rule: "horizrule" }, { type : "element", tag : "p", rule: "parseblock", start : 21, end : 28, children : [ { type : "text", text : "Between", start : 21, end : 28 } ] }, { type : "element", tag : "hr", start: 30, end: 33, rule: "horizrule" } ] ); @@ -315,7 +368,7 @@ describe("WikiText parser tests", function() { it("should parse hard linebreak areas", function() { expect(parse("\"\"\"Something\nin the\nway she moves\n\"\"\"\n\n")).toEqual( - [ { type : 'element', tag : 'p', children : [ { type : 'text', text : 'Something', start : 3, end : 12, rule: 'hardlinebreaks' }, { type : 'element', tag : 'br', rule: 'hardlinebreaks', start: 12, end: 13 }, { type : 'text', text : 'in the', start : 13, end : 19, rule: 'hardlinebreaks' }, { type : 'element', tag : 'br', rule: 'hardlinebreaks', start: 19, end: 20 }, { type : 'text', text : 'way she moves', start : 20, end : 33, rule: 'hardlinebreaks' }, { type : 'element', tag : 'br', rule: 'hardlinebreaks', start: 33, end: 34 } ], start : 0, end : 37 } ] + [ { type : "element", tag : "p", rule: "parseblock", children : [ { type : "text", text : "Something", start : 3, end : 12, rule: "hardlinebreaks", isRuleStart: true }, { type : "element", tag : "br", rule: "hardlinebreaks", start: 12, end: 13 }, { type : "text", text : "in the", start : 13, end : 19, rule: "hardlinebreaks" }, { type : "element", tag : "br", rule: "hardlinebreaks", start: 19, end: 20 }, { type : "text", text : "way she moves", start : 20, end : 33, rule: "hardlinebreaks" }, { type : "element", tag : "br", rule: "hardlinebreaks", start: 33, end: 34, isRuleEnd: true } ], start : 0, end : 37 } ] ); @@ -327,87 +380,87 @@ describe("WikiText parser tests", function() { |Cell3 |Cell4 |`.trim(); let expectedParseTree = [{ - type: 'element', - tag: 'table', + type: "element", + tag: "table", start: 0, end: 33, - rule: 'table', + rule: "table", children: [{ - type: 'element', - tag: 'tbody', + type: "element", + tag: "tbody", start: 0, end: 33, children: [{ - type: 'element', - tag: 'tr', + type: "element", + tag: "tr", attributes: { - 'class': { name: 'class', type: 'string', value: 'evenRow' }, + "class": { name: "class", type: "string", value: "evenRow" }, }, orderedAttributes: [ - { name: 'class', type: 'string', value: 'evenRow' }, + { name: "class", type: "string", value: "evenRow" }, ], start: 0, end: 18, children: [{ - type: 'element', - tag: 'th', + type: "element", + tag: "th", attributes: { - 'align': { name: 'align', type: 'string', value: 'left' }, + "align": { name: "align", type: "string", value: "left" }, }, orderedAttributes: [ - { name: 'align', type: 'string', value: 'left' }, + { name: "align", type: "string", value: "left" }, ], start: 1, end: 8, - children: [{type: 'text', text: 'Cell1', start: 2, end: 7}], + children: [{type: "text", text: "Cell1", start: 2, end: 7}], }, { - type: 'element', - tag: 'th', + type: "element", + tag: "th", attributes: { - 'align': { name: 'align', type: 'string', value: 'left' }, + "align": { name: "align", type: "string", value: "left" }, }, orderedAttributes: [ - { name: 'align', type: 'string', value: 'left' }, + { name: "align", type: "string", value: "left" }, ], start: 9, end: 16, - children: [{type: 'text', text: 'Cell2', start: 10, end: 15}], + children: [{type: "text", text: "Cell2", start: 10, end: 15}], }], }, { - type: 'element', - tag: 'tr', + type: "element", + tag: "tr", attributes: { - 'class': { name: 'class', type: 'string', value: 'oddRow' }, + "class": { name: "class", type: "string", value: "oddRow" }, }, orderedAttributes: [ - { name: 'class', type: 'string', value: 'oddRow' }, + { name: "class", type: "string", value: "oddRow" }, ], start: 18, end: 33, children: [{ - type: 'element', - tag: 'td', + type: "element", + tag: "td", attributes: { - 'align': { name: 'align', type: 'string', value: 'left' }, + "align": { name: "align", type: "string", value: "left" }, }, orderedAttributes: [ - { name: 'align', type: 'string', value: 'left' }, + { name: "align", type: "string", value: "left" }, ], start: 19, end: 25, - children: [{type: 'text', text: 'Cell3', start: 19, end: 24}], + children: [{type: "text", text: "Cell3", start: 19, end: 24}], }, { - type: 'element', - tag: 'td', + type: "element", + tag: "td", attributes: { - 'align': { name: 'align', type: 'string', value: 'left' }, + "align": { name: "align", type: "string", value: "left" }, }, orderedAttributes: [ - { name: 'align', type: 'string', value: 'left' }, + { name: "align", type: "string", value: "left" }, ], start: 26, end: 32, - children: [{type: 'text', text: 'Cell4', start: 26, end: 31}], + children: [{type: "text", text: "Cell4", start: 26, end: 31}], }], }], }], diff --git a/editions/test/tiddlers/tests/test-wikitext-serialize.js b/editions/test/tiddlers/tests/test-wikitext-serialize.js new file mode 100644 index 0000000000..b6d684570a --- /dev/null +++ b/editions/test/tiddlers/tests/test-wikitext-serialize.js @@ -0,0 +1,18 @@ +/*\ +title: test-wikitext-serialize.js +type: application/javascript +tags: [[$:/tags/test-spec]] + +Tests the wikitext inverse-rendering from Wiki AST. + +\*/ + +describe("WikiAST serialization unit tests", function () { + var cases = $tw.wiki.filterTiddlers("[all[shadows+tiddlers]tag[$:/tags/wikitext-serialize-test-spec]]"); + $tw.utils.each(cases, function (title) { + it("should serialize correctly for " + title, function () { + var serialized = $tw.utils.serializeWikitextParseTree($tw.wiki.parseTiddler(title).tree).trimEnd(); + expect(serialized).toBe($tw.wiki.getTiddlerText(title).trimEnd()); + }); + }); +}); diff --git a/editions/test/tiddlywiki.info b/editions/test/tiddlywiki.info index 4a77f2a84e..cfaa65c0ee 100644 --- a/editions/test/tiddlywiki.info +++ b/editions/test/tiddlywiki.info @@ -2,6 +2,7 @@ "description": "TiddlyWiki core tests", "plugins": [ "tiddlywiki/jasmine", + "tiddlywiki/wikitext-serialize", "tiddlywiki/geospatial" ], "themes": [ diff --git a/editions/tiddlywiki-surveys/scripts/extract-text-tiddlers-via-console.js b/editions/tiddlywiki-surveys/scripts/extract-text-tiddlers-via-console.js new file mode 100644 index 0000000000..1e9f7a163d --- /dev/null +++ b/editions/tiddlywiki-surveys/scripts/extract-text-tiddlers-via-console.js @@ -0,0 +1,73 @@ +function stringifyList(value) { + if(Array.isArray(value)) { + var result = new Array(value.length); + for(var t=0, l=value.length; t div.viewer > div.resultsArea > ul > li") : child.querySelectorAll("div.resultsArea > ul > li"); + for(const answer of children) { + const siteIconName = answer.querySelector(".siteIcon img").src.split("/").pop(); + const username = answer.innerText.split("\n\n")[0].split(" ")[1]; + const answerDate = new Date(answer.innerText.split("\n\n")[0].split(" on ")[1]); + const answerHTML = answer.querySelector("blockquote").innerHTML; + const childTitle = titlePrefix + title + " - " + username + " - " + answerDate.toISOString(); + // console.log(`${username} has site icon ${siteIconName}`); + siteIconByUsername[username] = siteIconName; + childTitles.push(childTitle); + tiddlers.push({ + title: childTitle, + text: answerHTML, + icon: `$:/avatars/${username}`, + modifier: username, + modified: answerDate.toISOString().slice(0, 10).replace(/-/g, '') + "000000000", + tags: stringifyList([titlePrefix + title,"2010 - Interview Answer"]) + }); + } + tiddlers.push({ + title: titlePrefix + title, + list: stringifyList(childTitles.reverse()), + tags: "[[2010 - Interview Question]]" + }); + } +} +tiddlers.push({ + title: "2010 - Interview Question", + list: stringifyList(questions) +}) +copy(JSON.stringify(tiddlers,null,4)); + +const commands = [ + "mkdir -p ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/" +]; +for(const username in siteIconByUsername) { + + commands.push(`cp './editions/tiddlywiki-surveys/great-interview-project-2010/The great TiddlyWiki interview project_files/${siteIconByUsername[username]}' './editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/${username}.jpg'`); +const metafile = `title: $:/avatars/${username} +type: image/jpeg +tags: $:/tags/Avatar +modifier: ${username} +`; + +commands.push(`echo "${metafile}" > './editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/${username}.jpg.meta'`); +} +console.log(commands.join(" && ")); \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/scripts/import-great-interview-project-json.sh b/editions/tiddlywiki-surveys/scripts/import-great-interview-project-json.sh new file mode 100755 index 0000000000..4bebec862e --- /dev/null +++ b/editions/tiddlywiki-surveys/scripts/import-great-interview-project-json.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# Load the Great Interview Project JSON data into TiddlyWiki and then save it to the specified folder as .tid files +rm -rf ./tmp/2010-great-interview-project +node ./tiddlywiki.js --load ./tmp/2010-great-interview-project.json --savewikifolder ./tmp/2010-great-interview-project + +# Copy the tiddlers into this wiki +rm -rf ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project +mkdir ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project +mkdir ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text +mkdir ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images +cp ./tmp/2010-great-interview-project/tiddlers/2010* ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text diff --git a/editions/tiddlywiki-surveys/scripts/readme.md b/editions/tiddlywiki-surveys/scripts/readme.md new file mode 100644 index 0000000000..50272199df --- /dev/null +++ b/editions/tiddlywiki-surveys/scripts/readme.md @@ -0,0 +1,16 @@ +# Utility Scripts + +This folder contains tools used to extract the tiddlers from the original HTML file. + +All pathnames in these instructions are relative to the root of this repository. + +1. Load `./editions/tiddlywiki-surveys/great-interview-project-2010/The great TiddlyWiki interview project.htm` in a browser +2. Open the developer console and paste the script from `./editions/tiddlywiki-surveys/scripts/extract-text-tiddlers-via-console.js`. The JSON representation of the text tiddlers will be generated and copied to the clipboard +3. Paste the resulting JSON into `2010-great-interview-project.json` in the `./tmp` folder in the root of this repository +4. Open a terminal console in the root of this repository +5. Run the script `./editions/tiddlywiki-surveys/scripts/import-great-interview-project-json.sh` +6. Go back to the developer console and copy the text that was output by the previous line. This is quite tricky: it's a big block of text including newlines. It is easiest to scroll back up to find the line starting with `mkdir -p` and then select down to the bottom +7. Paste the results of the previous into the terminal +8. Build the wiki with `node ./tiddlywiki.js ./editions/tiddlywiki-surveys --build index` + +The resulting wiki will be found in `./editions/tiddlywiki-surveys/output/index.html`. diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/aamaadmitw5.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/aamaadmitw5.jpg new file mode 100644 index 0000000000..3d3299f304 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/aamaadmitw5.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/aamaadmitw5.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/aamaadmitw5.jpg.meta new file mode 100644 index 0000000000..ddb63d87dc --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/aamaadmitw5.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/aamaadmitw5 +type: image/jpeg +tags: $:/tags/Avatar +modifier: aamaadmitw5 + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/alexhough.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/alexhough.jpg new file mode 100644 index 0000000000..b8295e6d70 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/alexhough.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/alexhough.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/alexhough.jpg.meta new file mode 100644 index 0000000000..1b282d8ea0 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/alexhough.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/alexhough +type: image/jpeg +tags: $:/tags/Avatar +modifier: alexhough + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/amalfaro-wrk.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/amalfaro-wrk.jpg new file mode 100644 index 0000000000..80f60cf552 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/amalfaro-wrk.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/amalfaro-wrk.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/amalfaro-wrk.jpg.meta new file mode 100644 index 0000000000..1ce232c378 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/amalfaro-wrk.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/amalfaro-wrk +type: image/jpeg +tags: $:/tags/Avatar +modifier: amalfaro-wrk + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/andrewbarbour.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/andrewbarbour.jpg new file mode 100644 index 0000000000..3d3299f304 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/andrewbarbour.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/andrewbarbour.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/andrewbarbour.jpg.meta new file mode 100644 index 0000000000..9694f852ed --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/andrewbarbour.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/andrewbarbour +type: image/jpeg +tags: $:/tags/Avatar +modifier: andrewbarbour + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/calmo.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/calmo.jpg new file mode 100644 index 0000000000..3d3299f304 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/calmo.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/calmo.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/calmo.jpg.meta new file mode 100644 index 0000000000..f17a110176 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/calmo.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/calmo +type: image/jpeg +tags: $:/tags/Avatar +modifier: calmo + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/climatechange3.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/climatechange3.jpg new file mode 100644 index 0000000000..c76b7e1a14 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/climatechange3.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/climatechange3.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/climatechange3.jpg.meta new file mode 100644 index 0000000000..9f1d23eead --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/climatechange3.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/climatechange3 +type: image/jpeg +tags: $:/tags/Avatar +modifier: climatechange3 + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/colmbritton.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/colmbritton.jpg new file mode 100644 index 0000000000..95d57fe960 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/colmbritton.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/colmbritton.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/colmbritton.jpg.meta new file mode 100644 index 0000000000..9301c54797 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/colmbritton.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/colmbritton +type: image/jpeg +tags: $:/tags/Avatar +modifier: colmbritton + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/dickon.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/dickon.jpg new file mode 100644 index 0000000000..216c5c1897 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/dickon.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/dickon.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/dickon.jpg.meta new file mode 100644 index 0000000000..19e0512e81 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/dickon.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/dickon +type: image/jpeg +tags: $:/tags/Avatar +modifier: dickon + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/frankfurtkid.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/frankfurtkid.jpg new file mode 100644 index 0000000000..31f2358e00 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/frankfurtkid.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/frankfurtkid.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/frankfurtkid.jpg.meta new file mode 100644 index 0000000000..b990d7080e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/frankfurtkid.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/frankfurtkid +type: image/jpeg +tags: $:/tags/Avatar +modifier: frankfurtkid + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/gjrobert.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/gjrobert.jpg new file mode 100644 index 0000000000..d6db8278ad Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/gjrobert.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/gjrobert.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/gjrobert.jpg.meta new file mode 100644 index 0000000000..7d5022d639 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/gjrobert.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/gjrobert +type: image/jpeg +tags: $:/tags/Avatar +modifier: gjrobert + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/kosmaton.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/kosmaton.jpg new file mode 100644 index 0000000000..c7ee1035b4 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/kosmaton.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/kosmaton.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/kosmaton.jpg.meta new file mode 100644 index 0000000000..7d933079e2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/kosmaton.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/kosmaton +type: image/jpeg +tags: $:/tags/Avatar +modifier: kosmaton + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/mama.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/mama.jpg new file mode 100644 index 0000000000..d496150b37 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/mama.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/mama.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/mama.jpg.meta new file mode 100644 index 0000000000..02163b6473 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/mama.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/mama +type: image/jpeg +tags: $:/tags/Avatar +modifier: mama + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/martinlindner.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/martinlindner.jpg new file mode 100644 index 0000000000..3d3299f304 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/martinlindner.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/martinlindner.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/martinlindner.jpg.meta new file mode 100644 index 0000000000..676b2b2a3d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/martinlindner.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/martinlindner +type: image/jpeg +tags: $:/tags/Avatar +modifier: martinlindner + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/matt.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/matt.jpg new file mode 100644 index 0000000000..b93f1fd9f5 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/matt.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/matt.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/matt.jpg.meta new file mode 100644 index 0000000000..d108af1550 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/matt.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/matt +type: image/jpeg +tags: $:/tags/Avatar +modifier: matt + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/passingby.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/passingby.jpg new file mode 100644 index 0000000000..3d3299f304 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/passingby.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/passingby.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/passingby.jpg.meta new file mode 100644 index 0000000000..2dcbfab9a4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/passingby.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/passingby +type: image/jpeg +tags: $:/tags/Avatar +modifier: passingby + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/pmario.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/pmario.jpg new file mode 100644 index 0000000000..ab515ee038 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/pmario.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/pmario.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/pmario.jpg.meta new file mode 100644 index 0000000000..1eb937ce21 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/pmario.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/pmario +type: image/jpeg +tags: $:/tags/Avatar +modifier: pmario + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/poulstaugaard.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/poulstaugaard.jpg new file mode 100644 index 0000000000..7787a2ffe0 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/poulstaugaard.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/poulstaugaard.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/poulstaugaard.jpg.meta new file mode 100644 index 0000000000..5373df82ed --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/poulstaugaard.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/poulstaugaard +type: image/jpeg +tags: $:/tags/Avatar +modifier: poulstaugaard + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/rouilj.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/rouilj.jpg new file mode 100644 index 0000000000..3d3299f304 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/rouilj.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/rouilj.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/rouilj.jpg.meta new file mode 100644 index 0000000000..07901e9b5a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/rouilj.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/rouilj +type: image/jpeg +tags: $:/tags/Avatar +modifier: rouilj + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/smandoli.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/smandoli.jpg new file mode 100644 index 0000000000..010ada03d0 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/smandoli.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/smandoli.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/smandoli.jpg.meta new file mode 100644 index 0000000000..5ab3d00a4f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/smandoli.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/smandoli +type: image/jpeg +tags: $:/tags/Avatar +modifier: smandoli + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/ubi.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/ubi.jpg new file mode 100644 index 0000000000..3d3299f304 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/ubi.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/ubi.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/ubi.jpg.meta new file mode 100644 index 0000000000..15bff9b1e2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/ubi.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/ubi +type: image/jpeg +tags: $:/tags/Avatar +modifier: ubi + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/webid4me.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/webid4me.jpg new file mode 100644 index 0000000000..3d3299f304 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/webid4me.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/webid4me.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/webid4me.jpg.meta new file mode 100644 index 0000000000..05964045aa --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/webid4me.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/webid4me +type: image/jpeg +tags: $:/tags/Avatar +modifier: webid4me + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/yakov.jpg b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/yakov.jpg new file mode 100644 index 0000000000..3d3299f304 Binary files /dev/null and b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/yakov.jpg differ diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/yakov.jpg.meta b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/yakov.jpg.meta new file mode 100644 index 0000000000..a84ac7a32e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/yakov.jpg.meta @@ -0,0 +1,5 @@ +title: $:/avatars/yakov +type: image/jpeg +tags: $:/tags/Avatar +modifier: yakov + diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - amalfaro-wrk - 2013-07-01T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - amalfaro-wrk - 2013-07-01T23_00_00.000Z.tid new file mode 100644 index 0000000000..329a97448f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - amalfaro-wrk - 2013-07-01T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/amalfaro-wrk +modified: 20130701000000000 +modifier: amalfaro-wrk +tags: [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - amalfaro-wrk - 2013-07-01T23:00:00.000Z + +"Features" to me means plugins and I don't really change those up. I've really settled on one set at this point, but I tweak the way it looks or the way it shows me the information pretty regularly. I get bored with the same interface all the time ;) .
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid new file mode 100644 index 0000000000..0f6abf6f5e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/climatechange3 +modified: 20101201000000000 +modifier: climatechange3 +tags: [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - climatechange3 - 2010-12-01T00:00:00.000Z + +Yes, the ability to reorganize the presentation of my content through using new plugins, or making fuller use of plugins I have used for a while, is one of the joys of TiddlyWiki for me. This does pose a challenge, however, in that I have yet to develop or use a consistent process for integrating the new features into the steadily growing number of TiddlyWiki pages/sites that I maintain.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - dickon - 2012-03-18T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - dickon - 2012-03-18T00_00_00.000Z.tid new file mode 100644 index 0000000000..8421ba9493 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - dickon - 2012-03-18T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/dickon +modified: 20120318000000000 +modifier: dickon +tags: [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - dickon - 2012-03-18T00:00:00.000Z + +To some extent, but I find that it is a "marker" of where the task (that underlies the reason for setting up the TW in the first place) has got to when I slow down on the modifications! I hasten to add I only do pretty simple modifications, and tend to use the same small number of plugins or techniques again and again.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..8953a4acf2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - frankfurtkid - 2010-11-16T00:00:00.000Z + +My standalone Tiddlywikis are pretty static now, although I find the odd plugin from time to time. Tiddlyspace is completely different as its changing all the time - so its still very much a learning as I go along experience, and adding in new features as I discover them. I still need to really think about how I want to use TiddlySpace - not there yet. the songs.tiddlyspace.com project is more geared to multiple people accessing the same site - and I want to get that working in a more collaborative fashion - so following / sharing information etc is important.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - mama - 2010-11-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - mama - 2010-11-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..fd250163cd --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - mama - 2010-11-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101124000000000 +modifier: mama +tags: [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - mama - 2010-11-24T00:00:00.000Z + +Oh yes :-)
I often create "forks" from my original TWs to see how far I can take it - or I reorganize all content with new tools and plugins - just to see if its better...
Sometimes a new theme suggests a total rewrite or reorganization of content...
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..97afdde72b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - passingby - 2010-11-27T00:00:00.000Z + +Since I do not use a tiddlywiki very regularly, most of the features are brought in in the first phase, when I am setting up a TW
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - pmario - 2011-04-06T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - pmario - 2011-04-06T23_00_00.000Z.tid new file mode 100644 index 0000000000..a6ffe3c2f5 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - pmario - 2011-04-06T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/pmario +modified: 20110406000000000 +modifier: pmario +tags: [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - pmario - 2011-04-06T23:00:00.000Z + +
  • If they are nice and small in size: yes.

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..3a18c8927b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - rouilj - 2010-11-27T00:00:00.000Z + +With the esception of the Coursebook tiddlywiki, most of my TW's are static with a core set of plugins. I do update the plugins occasionally as well as the tw core but I don't need to add too many features.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_.tid new file mode 100644 index 0000000000..33e9d7d6e7 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Do you keep adding new features to your existing TiddlyWiki(s)_.tid @@ -0,0 +1,3 @@ +list: [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - mama - 2010-11-24T00:00:00.000Z]] [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - climatechange3 - 2010-12-01T00:00:00.000Z]] [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - pmario - 2011-04-06T23:00:00.000Z]] [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - dickon - 2012-03-18T00:00:00.000Z]] [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)? - amalfaro-wrk - 2013-07-01T23:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - Do you keep adding new features to your existing TiddlyWiki(s)? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - aamaadmitw5 - 2014-09-23T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - aamaadmitw5 - 2014-09-23T23_00_00.000Z.tid new file mode 100644 index 0000000000..e037c2a3bf --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - aamaadmitw5 - 2014-09-23T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/aamaadmitw5 +modified: 20140923000000000 +modifier: aamaadmitw5 +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - aamaadmitw5 - 2014-09-23T23:00:00.000Z + +in reply to How did you first discover TiddlyWiki?:

After trying evernote and extensively using Google docs , I was searching for some note taking software which dont have the restrictions like
1. I was not happy with WYSIWYG editor because it breaks my flow.
2. At the back of my mind , i knew google was moving towards a card design for displaying information , and i found the same concept in TW5.

I found it through wikipedia
http://en.wikipedia.org/wiki/Comparison_of_notetaking_software

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - calmo - 2010-12-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - calmo - 2010-12-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..43bb3dd3fb --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - calmo - 2010-12-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/calmo +modified: 20101216000000000 +modifier: calmo +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - calmo - 2010-12-16T00:00:00.000Z + +In 2004 I was researching use of wikis for collaborative content development within IBM. I found tiddlywiki. But I really didn't "discover" it until I realized how it actually works - what makes it different from standard wikis.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid new file mode 100644 index 0000000000..2161236a4b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/climatechange3 +modified: 20101201000000000 +modifier: climatechange3 +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - climatechange3 - 2010-12-01T00:00:00.000Z + +I first heard about TW on a Moodle group in the fall of 2006, in the process of trying, without much success, to use the wiki feature in Moodle. I loved TW - and the TW Google Group - right away.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - dickon - 2012-03-18T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - dickon - 2012-03-18T00_00_00.000Z.tid new file mode 100644 index 0000000000..4897502ead --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - dickon - 2012-03-18T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/dickon +modified: 20120318000000000 +modifier: dickon +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - dickon - 2012-03-18T00:00:00.000Z + +I have known and loved Jeremy Ruston for many years, so it was word of (horse's) mouth.

It is strange when you have known someone for many years; suddenly to discover how something so excellent has been going on in their work (that had always seemed so far away from your own) - and that it absolutely answers what you are after... kerrr-ching!

I got curious about what this Tiddly stuff was about in conversation, and Jeremy sent me a link, which I started looking at in about 2005 I think. As a total non-techy I commend my own bravery in trying to get past the somewhat opaque documentation, but there was a fairly sudden "lights came on" moment when I saw massive potential in what was on offer, that I had seen nowhere else.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..ee77c29d24 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - frankfurtkid - 2010-11-16T00:00:00.000Z + +i was looking for a simple wiki to use for note keeping, action tracking and the like - I think I was reading "Getting Things Done" at the time. I came across TiddlyWiki and decided to give it a try. I liked the idea of not needing to be online - which at the time was less frequent than now. I then discovered that the guys involved worked for the same company as I do - and that made me really interested in using it for work as well as private applications.

Then server side became more important - ability to share info and access. I used cctiddly for a while and am now starting to use the BT green side implementation of TiddlySpace for work related projects - as well as the usual tiddlyspace.com.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - gjrobert - 2013-09-15T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - gjrobert - 2013-09-15T23_00_00.000Z.tid new file mode 100644 index 0000000000..b91fc9de3b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - gjrobert - 2013-09-15T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/gjrobert +modified: 20130915000000000 +modifier: gjrobert +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - gjrobert - 2013-09-15T23:00:00.000Z + + Around mid-2004, when I was searching for ideal wiki engines. I forgot actually how I find TW, either via Google or via some introduction on blog posts.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..abfa618a3f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - passingby - 2010-11-27T00:00:00.000Z + +It was a long time ago, while searching for free and open source softwares
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - pmario - 2011-04-05T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - pmario - 2011-04-05T23_00_00.000Z.tid new file mode 100644 index 0000000000..a597d1080e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - pmario - 2011-04-05T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/pmario +modified: 20110405000000000 +modifier: pmario +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - pmario - 2011-04-05T23:00:00.000Z + +I was looking for a browser notebook, with the possibility to work online and/or offline. And if possible with good syncing. I found http://lewcid.org/2009/02/03/a-busy-year-and-a-student-notebook/

Some more reading lead to a very active TiddlyWiki user group, and some specs about an alpha TiddlyWeb (mother of all server sides.) So I thought, let's see how fast the development is going on. That's it.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - poulstaugaard - 2011-03-06T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - poulstaugaard - 2011-03-06T00_00_00.000Z.tid new file mode 100644 index 0000000000..de81d09530 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - poulstaugaard - 2011-03-06T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/poulstaugaard +modified: 20110306000000000 +modifier: poulstaugaard +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - poulstaugaard - 2011-03-06T00:00:00.000Z + +I am quite a veteran TW addict. The wiki idea first caught my fancy when I stumbled on FlexWiki in 2003. Initially I hung out at MeatBallWiki for inspiration while scanning the landscape and finding my direction. This is how i discovered TW while it was still a baby. Coming from the Microsoft/IT services world, with a wide interest in web technology, my first serious efford was a .NET (C# + SQL) based serverside that I called iewiki (spelled like that not to be misread as LeWiki). It was built on unmodified TW 2.0.6 client-side, and I used it myself on the web for a few years (as iewiki.net, now defunct). I was never quite happy with the end product though, and it never quite made it past beta status - partly due to the rather high cost of quality hosting for .NET. So when I found Google's App engine, I decided to start again from scratch, an efford which I have called giewiki for natural reasons. By this time (late 2008), I figured TW had reached a level of maturity (2.4.1) that made branching a good strategy for a hosted derivative.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..7f1800e825 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z + +I saw a mention of it while I was looking for a simple personel wiki.
The single file and easy portability of it intrigued me.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - smandoli - 2010-12-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - smandoli - 2010-12-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..7ddf4bdd9a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - smandoli - 2010-12-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/smandoli +modified: 20101224000000000 +modifier: smandoli +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - smandoli - 2010-12-24T00:00:00.000Z + +I spent 2009 in a part-time and solitary obsession with knowledge-management tools, trying to figure out how to harness my chaotic, distracted, eclectic and adventurous thought life. This was encouraged by a re-read of the famous 1946 "Memex" proposal, discovery of the "TheBrain" online demo. and personally productive work in mind mapping. (More at http://themanthursday.com/wiki-first-taste/.) I would run google searches that returned nothing, but eventually I lined up the right keywords and landed at TiddlyWiki.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - ubi - 2010-11-29T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - ubi - 2010-11-29T00_00_00.000Z.tid new file mode 100644 index 0000000000..79596be44c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - ubi - 2010-11-29T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/ubi +modified: 20101129000000000 +modifier: ubi +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - ubi - 2010-11-29T00:00:00.000Z + +I was searching the net for a personal wiki software and found WoaS and TiddlyWiki. I started with WoaS, because it's traditional website look-and-feel met my habits more than TW, still playing around with TiddlyWiki occasionally. After digging the core concepts and discovering the wealth of plugins, I switched to TW.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - webid4me - 2014-09-23T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - webid4me - 2014-09-23T23_00_00.000Z.tid new file mode 100644 index 0000000000..c617027e43 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - webid4me - 2014-09-23T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/webid4me +modified: 20140923000000000 +modifier: webid4me +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - webid4me - 2014-09-23T23:00:00.000Z + +in reply to How did you first discover TiddlyWiki?:

After few months into my graduate studies in Brain Imaging I realized that my poor brain, by itself, won't suffice to keep all the information related to various projects organized. I started looking into various softwares like Evernote, OneNote, google docs etc etc. I quiickly realized that: (1) all these tools are proprietary solutions to attract people by visual cues and, ironically, do not work well in academic workflow like mine. (2) Most of them lacked native support for Linux OS. (3) Almost all of them lacked proper math typesetting support.

I gave up and started using mix of plain text and latex (notes.txt, notes_math.txt). It kind of worked for about an year. Then I realized that I really need support for hypertext in my notes - That led me to start fiddling with markdown - but it was not covenient as I needed to convert to html each time I made changes. Some more surfing and searching brought me to Tiddlywiki (now called Classic TW).

I was stunned by Tiddlywiki not only because it is a singlefile wiki application but also because it is a useful example of Quine :) I always understood that I need a 'wiki' for my note taking habbits but I could never imagine that a wiki software could be as portable as a single file.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - yakov - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - yakov - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..a92e7d4d29 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_ - yakov - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/yakov +modified: 20101116000000000 +modifier: yakov +tags: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How did you first discover TiddlyWiki? - yakov - 2010-11-16T00:00:00.000Z + +I write loads of things and some time ago I realized that hypertext is the only form that would be flexible enough for me. Next I get the idea that since there are quite limited tools for creating hypertext on my handheld it would be good to create one based on web-technologies since they are totally cross-platform and imply hypertext. Then I realized that JavaScript has far too limited access to the file system (usually no access at all), so I asked about this thing in google.quesions. Few answers contained mentioning of Java and flash and also there was one with "see TiddlyWiki". And so, that was it.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_.tid new file mode 100644 index 0000000000..f175a3d2bb --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How did you first discover TiddlyWiki_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How did you first discover TiddlyWiki? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - yakov - 2010-11-16T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - ubi - 2010-11-29T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - climatechange3 - 2010-12-01T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - calmo - 2010-12-16T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - smandoli - 2010-12-24T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - poulstaugaard - 2011-03-06T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - pmario - 2011-04-05T23:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - dickon - 2012-03-18T00:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - gjrobert - 2013-09-15T23:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - aamaadmitw5 - 2014-09-23T23:00:00.000Z]] [[2010 - How did you first discover TiddlyWiki? - webid4me - 2014-09-23T23:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How did you first discover TiddlyWiki? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for you as an information publisher_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for you as an information publisher_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..b71b52cb63 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for you as an information publisher_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - How has TiddlyWiki saved time for you as an information publisher?]] [[2010 - Interview Answer]] +title: 2010 - How has TiddlyWiki saved time for you as an information publisher? - frankfurtkid - 2010-11-16T00:00:00.000Z + +For standalone websites - its quick and easy to put up content. In the corporate world its about document control and sharing of information
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for you as an information publisher_ - mama - 2010-11-25T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for you as an information publisher_ - mama - 2010-11-25T00_00_00.000Z.tid new file mode 100644 index 0000000000..cb0534a10f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for you as an information publisher_ - mama - 2010-11-25T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101125000000000 +modifier: mama +tags: [[2010 - How has TiddlyWiki saved time for you as an information publisher?]] [[2010 - Interview Answer]] +title: 2010 - How has TiddlyWiki saved time for you as an information publisher? - mama - 2010-11-25T00:00:00.000Z + +I'm not sure it has... I've found a new tool which let me explore things which were inaccesible (at least to me) untill now..
Sometimes I use much more time preparing a TWsetup, than I would if I just used some office program, Notepad - or a piece of paper for that matter...
However TW allows me to organize and reuse things in a way that no other software does - and It certainly helps me to fight a reoccuring writers block.
On the other hand I setup simple TWwebpages for my students in no time, because I have readymade templates.
Its an incredible fast cms - I update lists and appointments on the fly. My students update their browsers and all is well.
When I want my pupils to focus on things, I give them links, iframes and popouts from a TW hosted on TiddlySpace, TiddlySpot or one of my own TiddlyHome installations.
I really like to be able to deliver pages without any commercials and other distracting factors.
I've even implemented a webversion of "DarkRoom" to help my students focus on their writing. A little pradox considering my personal stategy - I know, however my students like the seamless and simple integration of browserbased tools.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for you as an information publisher_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for you as an information publisher_.tid new file mode 100644 index 0000000000..9566c46824 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for you as an information publisher_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How has TiddlyWiki saved time for you as an information publisher? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - How has TiddlyWiki saved time for you as an information publisher? - mama - 2010-11-25T00:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How has TiddlyWiki saved time for you as an information publisher? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for your target audience_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for your target audience_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..a63db984b3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for your target audience_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - How has TiddlyWiki saved time for your target audience?]] [[2010 - Interview Answer]] +title: 2010 - How has TiddlyWiki saved time for your target audience? - frankfurtkid - 2010-11-16T00:00:00.000Z + +Great in the BT environment for document / content collaboration - No LiveMeeting, no version control problems, less storage issues, fewer Word documents flying around all out of date. Notepad also saves me time and keeps things "together" in my world.


\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for your target audience_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for your target audience_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..5d2342693a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for your target audience_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - How has TiddlyWiki saved time for your target audience?]] [[2010 - Interview Answer]] +title: 2010 - How has TiddlyWiki saved time for your target audience? - rouilj - 2010-11-27T00:00:00.000Z + +I'm not sure. For the people who used the coursebook and liked it during
the class I think it saved them time. Also I have contacted one former student
who found it useful when he was actually working at implementing particular
corrleation patterns.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for your target audience_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for your target audience_.tid new file mode 100644 index 0000000000..952b566eda --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has TiddlyWiki saved time for your target audience_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How has TiddlyWiki saved time for your target audience? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - How has TiddlyWiki saved time for your target audience? - rouilj - 2010-11-27T00:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How has TiddlyWiki saved time for your target audience? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - andrewbarbour - 2010-11-28T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - andrewbarbour - 2010-11-28T00_00_00.000Z.tid new file mode 100644 index 0000000000..d69fe84cdb --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - andrewbarbour - 2010-11-28T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/andrewbarbour +modified: 20101128000000000 +modifier: andrewbarbour +tags: [[2010 - How has the TiddlyWiki community helped you?]] [[2010 - Interview Answer]] +title: 2010 - How has the TiddlyWiki community helped you? - andrewbarbour - 2010-11-28T00:00:00.000Z + +The TW community is incredible. I have never been exposed to a group of folks that have more passion and are so willing to give of their time and expertise.

I was looking for a tool to pull back search results for individual lines in tiddlers so I posted on the google groups page.... I had a large number of direct responses with ideas as well as postings to the forum. The input invaluable - and the outcome entirely satisfactory - someone had already written the code (Thanks Eric!) and I was able to integrate it into my tiddlywiki within minutes.

Everyone is incredibly friendly and helpful!
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid new file mode 100644 index 0000000000..aa2128a44e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/climatechange3 +modified: 20101201000000000 +modifier: climatechange3 +tags: [[2010 - How has the TiddlyWiki community helped you?]] [[2010 - Interview Answer]] +title: 2010 - How has the TiddlyWiki community helped you? - climatechange3 - 2010-12-01T00:00:00.000Z + +Countless ways. Whether in the responses to questions I have posed, or in offering insight and understanding through responses to questions from others in the community, the TW Google Group community has been consistently brilliant as a source of help.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - dickon - 2012-03-18T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - dickon - 2012-03-18T00_00_00.000Z.tid new file mode 100644 index 0000000000..045712525c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - dickon - 2012-03-18T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/dickon +modified: 20120318000000000 +modifier: dickon +tags: [[2010 - How has the TiddlyWiki community helped you?]] [[2010 - Interview Answer]] +title: 2010 - How has the TiddlyWiki community helped you? - dickon - 2012-03-18T00:00:00.000Z + +Amazingly helpful and quick to respond - knowledgeably and creatively - via the Google Group.

I worry that as TW gets bigger as a "movement" (?!) there could be a loss of capacity from the small group of utterly dedicated 'evangelists' for TW who do seem to have an extraordinary capacity to be massively helpful almost instantaneously, whenever I have posted with a confusion or glitch...
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..02d72545b3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - How has the TiddlyWiki community helped you?]] [[2010 - Interview Answer]] +title: 2010 - How has the TiddlyWiki community helped you? - frankfurtkid - 2010-11-16T00:00:00.000Z + +The Osmosoft guys have been very helpful in sorting out problems and questions. The Google group is a good place to find others sharing the same problems - and also getting answers.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - mama - 2010-11-26T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - mama - 2010-11-26T00_00_00.000Z.tid new file mode 100644 index 0000000000..c9936ee2ae --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - mama - 2010-11-26T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101126000000000 +modifier: mama +tags: [[2010 - How has the TiddlyWiki community helped you?]] [[2010 - Interview Answer]] +title: 2010 - How has the TiddlyWiki community helped you? - mama - 2010-11-26T00:00:00.000Z + +I don't think I would use (or be able to use) TW today if it hadn't been for the TiddlyWiki googlegroup.
People on the discussionboard, has always been very kind and helpfull - and sometimes I have learned a lesson or two about discipline as well :-)
There's a lot to learn from the threads, and its great to ask a question and get (almost) immediate response.
For a newbie it's a fantastic and inspiring experience to get help from a gifted programmer, who explains things in a way that is enligtening and thoughtprovoking... It's a joy, when someone steps into a thread with a snippet of code, which solves everything :-)
It's communication at a level, I don't find many other places, and it's certainly an oasis, a sanctuary to find in a web which is mostly a marketplace where everyone is considered to be a potential customer...
The generousity of really great programmers like Eric Shulmann (on the other hand, Eric MUST be one of a kind...), the Osmosoftteam and several/many individuals who invest their sparetime, helping other people to use TiddlyWiki, is an outstanding example of a meltingpot of ressources, that you simply NEED to follow, because it's unique, magic and active.
You don't know for how long it will last - and I sometimes think that the community survives/thrives because different "teams" of really enthusiastic people choose to discuss matters that could be discussed in the privacy of their own mailboxes :-)
That's ok - and certainly gives you a window to a world of things, you wouldn't know existed elsewise....
If it wasn't for the community I don't think there would be a TiddlyWiki - on the other hand I'm not sure if TiddlyWiki would be considered to be a serious project if it wasn't for the Osmosoft Team - so congratulations to everybody :-)

It's an inspiring meltingpot of users, programmers and enthusiasts - communicating and helping each other to achieve both practical and magic stuff with a onepage html/javascript application

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..b0ce02c83c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - How has the TiddlyWiki community helped you?]] [[2010 - Interview Answer]] +title: 2010 - How has the TiddlyWiki community helped you? - passingby - 2010-11-27T00:00:00.000Z + +Its the Best community. People help out each other like nowhere else. Infact Eric whips out code like magic.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - pmario - 2011-04-06T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - pmario - 2011-04-06T23_00_00.000Z.tid new file mode 100644 index 0000000000..009ee69b03 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - pmario - 2011-04-06T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/pmario +modified: 20110406000000000 +modifier: pmario +tags: [[2010 - How has the TiddlyWiki community helped you?]] [[2010 - Interview Answer]] +title: 2010 - How has the TiddlyWiki community helped you? - pmario - 2011-04-06T23:00:00.000Z + +
  • Because of fast responses, to questions.

What I like: The friendly conversation in the forum, compared to other forums.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..903fa7558f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - How has the TiddlyWiki community helped you?]] [[2010 - Interview Answer]] +title: 2010 - How has the TiddlyWiki community helped you? - rouilj - 2010-11-27T00:00:00.000Z + +The coursebook wouldn't have been possible without the help of a number of TW regulars including: Eric L. Shulman and Paulo Soares.

They modified plugins to suit my needs and provided extensive debugging and other help.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_.tid new file mode 100644 index 0000000000..6912533558 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How has the TiddlyWiki community helped you_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How has the TiddlyWiki community helped you? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - How has the TiddlyWiki community helped you? - mama - 2010-11-26T00:00:00.000Z]] [[2010 - How has the TiddlyWiki community helped you? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - How has the TiddlyWiki community helped you? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - How has the TiddlyWiki community helped you? - andrewbarbour - 2010-11-28T00:00:00.000Z]] [[2010 - How has the TiddlyWiki community helped you? - climatechange3 - 2010-12-01T00:00:00.000Z]] [[2010 - How has the TiddlyWiki community helped you? - pmario - 2011-04-06T23:00:00.000Z]] [[2010 - How has the TiddlyWiki community helped you? - dickon - 2012-03-18T00:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How has the TiddlyWiki community helped you? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..c5b063506a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - How have you been able to contribute back to the TiddlyWiki community?]] [[2010 - Interview Answer]] +title: 2010 - How have you been able to contribute back to the TiddlyWiki community? - frankfurtkid - 2010-11-16T00:00:00.000Z + +Not much to date - I still have loads of questions, rather than good answers, and I'm more of a user than a coder. But I am happy to share ideas and solutions.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..2a4500a350 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - How have you been able to contribute back to the TiddlyWiki community?]] [[2010 - Interview Answer]] +title: 2010 - How have you been able to contribute back to the TiddlyWiki community? - rouilj - 2010-11-27T00:00:00.000Z + +I put up a copy of the coursebook at coursebook.tiddlyspot.com but it's not yet complete. Also I have answered a few questions in google groups.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - smandoli - 2010-12-25T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - smandoli - 2010-12-25T00_00_00.000Z.tid new file mode 100644 index 0000000000..86cb694249 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - smandoli - 2010-12-25T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/smandoli +modified: 20101225000000000 +modifier: smandoli +tags: [[2010 - How have you been able to contribute back to the TiddlyWiki community?]] [[2010 - Interview Answer]] +title: 2010 - How have you been able to contribute back to the TiddlyWiki community? - smandoli - 2010-12-25T00:00:00.000Z + +I haven't yet. I am looking forward to answering questions from complete newbies ... after I'm not one myself. I am a communicator, and I'd like to develop tutorial pieces. I'm not a coder and I'm not very tech (my tutorial would not be a video). I wouldn't mind sending some money but I feel it's not appropriate with my finances.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - yakov - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - yakov - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..72310f1216 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_ - yakov - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/yakov +modified: 20101116000000000 +modifier: yakov +tags: [[2010 - How have you been able to contribute back to the TiddlyWiki community?]] [[2010 - Interview Answer]] +title: 2010 - How have you been able to contribute back to the TiddlyWiki community? - yakov - 2010-11-16T00:00:00.000Z + +Just a tiny bit.. I know CSS to extent of 2d specification and other things like DOM so I'm capable to answer questions that are rather not about TW.. And so I did twice, perhaps)
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_.tid new file mode 100644 index 0000000000..07f7a38dd0 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you been able to contribute back to the TiddlyWiki community_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How have you been able to contribute back to the TiddlyWiki community? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - How have you been able to contribute back to the TiddlyWiki community? - yakov - 2010-11-16T00:00:00.000Z]] [[2010 - How have you been able to contribute back to the TiddlyWiki community? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - How have you been able to contribute back to the TiddlyWiki community? - smandoli - 2010-12-25T00:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How have you been able to contribute back to the TiddlyWiki community? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..b1a218d363 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - How have you found training novice users to use and understand TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How have you found training novice users to use and understand TiddlyWiki? - frankfurtkid - 2010-11-16T00:00:00.000Z + +More difficult than I would like
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - mama - 2010-11-25T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - mama - 2010-11-25T00_00_00.000Z.tid new file mode 100644 index 0000000000..4f8e74bcd8 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - mama - 2010-11-25T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101125000000000 +modifier: mama +tags: [[2010 - How have you found training novice users to use and understand TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How have you found training novice users to use and understand TiddlyWiki? - mama - 2010-11-25T00:00:00.000Z + +The most difficult part is to explain TiddlyWiki to tech-sawy people.
They tend to see TiddlyWiki as alfa-software, because it's so transparent and customizable.
The fact that a user can delete a button is considered to be a serious bug.

When I started using TiddlyWiki, I made different tools for my students and collegues, however crossbrowser problems stopped my work in this direction. Most of my students and collegues use IE. My experience is that IE is the worst possible (almost...) browser for javascriptapplications, rendering of css and images etc....
I don't spend any time trying to make any of my students or collegues understand how TiddlyWiki works anymore.
On the other hand collegues and students often ask me to create lists, imagegalleries and faqs for quick delivery - and I get positive feedback.
Sometimes some of them have a glimpse over my shoulder, and I always get outbursts like - "Wauw, I'd like to be able to do that" ... however nobody really wants to invest time in learning how to do it themselves..
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..6846f0621d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - How have you found training novice users to use and understand TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How have you found training novice users to use and understand TiddlyWiki? - passingby - 2010-11-27T00:00:00.000Z + +Uptil now I have found just one person in my circle who had a 'real need' for storing data. She was fellow teacher and was very new to computers so it was a bit difficult, but she succeeded in using it functionally and effectively.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..47394859e5 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - How have you found training novice users to use and understand TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How have you found training novice users to use and understand TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z + +The coursebook I created was well received by a couple of participants, but there were also three people who found it difficult to use and understand. They found it got in the way of learning the material compared to the pdf format that other teachers used for their classes.

Plus I had a couple of people with old version of firefox (1.x) that made it unusable.

If I could teach the course again, I think I would have to spend time teaching how to use tiddlywiki (and the coursebook) to even a technologically experienced audience.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - smandoli - 2010-12-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - smandoli - 2010-12-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..52152cb899 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_ - smandoli - 2010-12-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/smandoli +modified: 20101224000000000 +modifier: smandoli +tags: [[2010 - How have you found training novice users to use and understand TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How have you found training novice users to use and understand TiddlyWiki? - smandoli - 2010-12-24T00:00:00.000Z + +It's reminiscent of entering the Linux world as a home user. The information is there, but you may have to search. Advice is plenteous, but you must learn to sort through it for the bits that apply. Advisors are friendly, but you must be brave enough and interested enough to participate in a forum.

Suggested Question (related): What is your experience introducing TiddlyWiki to other people?
  • The hard part is convincing them it's useful and they should take it on. I start by explaining "personal information management" and then I check the eyes for any spark of interest.
  • The obvious solution is to present not TiddlyWiki but rather a largish wiki of interesting information, and then make them aware of the vehicle.

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_.tid new file mode 100644 index 0000000000..7699bcf145 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How have you found training novice users to use and understand TiddlyWiki_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How have you found training novice users to use and understand TiddlyWiki? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - How have you found training novice users to use and understand TiddlyWiki? - mama - 2010-11-25T00:00:00.000Z]] [[2010 - How have you found training novice users to use and understand TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - How have you found training novice users to use and understand TiddlyWiki? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - How have you found training novice users to use and understand TiddlyWiki? - smandoli - 2010-12-24T00:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How have you found training novice users to use and understand TiddlyWiki? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - andrewbarbour - 2010-11-28T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - andrewbarbour - 2010-11-28T00_00_00.000Z.tid new file mode 100644 index 0000000000..a2e37f2cb2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - andrewbarbour - 2010-11-28T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/andrewbarbour +modified: 20101128000000000 +modifier: andrewbarbour +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - andrewbarbour - 2010-11-28T00:00:00.000Z + +I created 15-20 different ones to try different configurations /concepts for organization. Once that was over with... I am down to three:

In Use
  • Day-to-day note taking and task tracking
  • Project Notebook for storing all of my notes

Active Development
  • Help file for business procedures and system documentation

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - colmbritton - 2010-12-21T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - colmbritton - 2010-12-21T00_00_00.000Z.tid new file mode 100644 index 0000000000..fe166531f8 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - colmbritton - 2010-12-21T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/colmbritton +modified: 20101221000000000 +modifier: colmbritton +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - colmbritton - 2010-12-21T00:00:00.000Z + +All in all I have created a fair few, however I have 3 main ones (or used to until Tiddlyspace came around). They are one for general notes, one for recording info and ideas about the projects I was working on and a third, which was a test TW that I used to try out new plugins and combinations of plugins.
Now that I am on Tiddlyspace I have a lot!
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - dickon - 2012-03-18T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - dickon - 2012-03-18T00_00_00.000Z.tid new file mode 100644 index 0000000000..7b77275752 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - dickon - 2012-03-18T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/dickon +modified: 20120318000000000 +modifier: dickon +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - dickon - 2012-03-18T00:00:00.000Z + +At least 20

Some I use all the time (the ambit manual is probably my peak!)

My NHS team uses an offline TW (securely stored) to track and document all the clients we treat, documenting team discussion in the TW, and printing out these tiddlers for pasting into the conventional paper notes. The TW is projected and edited during every team meeting, and the act of typing into it has become part of our efforts towards "transparent practice"...

I use TW's for major literature reviews - fantastic for cross referencing, tagging, ensuring that I have integrated a disparate body of literature.

I use TW's in management meetings to make wikified minutes - people get intrigued and wnat to understand and that often deepens the discussion - what are the underlying themes (Tags) that we are REALLY trying to crack in this meeting?

etc...


\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..fbc1c27149 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - frankfurtkid - 2010-11-16T00:00:00.000Z + +I have a main notepad for private use at work, a website which is a static file, one or two standalone files and a current project on the BT greenside implementation, plus a new project on songs.tiddlyspace.com for song writing, collaboration and publishing.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - mama - 2010-11-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - mama - 2010-11-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..3abe201bdc --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - mama - 2010-11-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101124000000000 +modifier: mama +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - mama - 2010-11-24T00:00:00.000Z + +I've made so many TiddlyWikis that I've lost track of them... Some of them are floating in cyberspace, others were lost in broken or erased harddisks and some has gone into hibernation in some dropbox directory. Seriously - I think I've created hundreds of them - all very different TiddlyWikis for different uses..
TiddlySpace has helped me get a little more organized, as it provides an overview of created spaces.
At the moment I use 4 dedicated TiddlyWikis (spaces) for everyday tasks. All jobrelated. Two of them I share with my students (read only, except for embedded/iframed typewith.me-documents) and one of them I share with my collegues (with writepermission, however I'm the only one contributing to it at the moment...). The last and most important one is working as my "controlcenter". Some of my tiddlers are loaded into the other spaces - so I don't have to edit them all directly to push content...
At least once or twice a week I visit some (ca. 4 or 5) of my other TiddlyWikis, which are hosted at TiddlySpot or at one of my own TiddlyHome services (I've got two working/customized installations of Bidix's TiddlyHome service).
The number of TiddlyWiki's I use (just for reference or edits) in one week is 8 - 10 or more... I also checkout other people's TiddlyWikis - so I'm not sure.
Every year I prepare multiple TWs for exams (I have new students who graduate every summer). Some of those TWs contain notes for my students and other TWs contain or refer to material prepared for my censors. I print my TiddlyWikis to pdf-portefolios and mail links to online versions of both.
3 years ago I would use notepad/OpenOffice or MsOffice to write/create this sort of material. Today I prefer to use a customized TiddlyWiki.
When I occasionally use MsOffice programs at work, it's often just to be able to copy/paste material from a TW for printing - or work with tables in MsExcel - which I will often copy back into a TiddlyWiki :-)
At every meeting I attend, I use TiddlyWiki as a note/write tool, as a portefolio and as a working database containing data, images and notes about all my students, collegues, calendar with notifications, workplans, ideas, iframed webmail etc ... I even use single local network TWs as Faq-documents which I prepare for my collegues. TW is my swiss armyknife at my job, and it certainly helps me to stay organized at all times... When I publish material for my students I use a TW. Sometimes I set it up as a presentation, which I use in education.
When I'm at home, I have small projects which also involve TW to some extent. TWScrapbooks with bookmarks, iframes etc.. I create private or public tutorials, embed images, make small or big changes to the layout, add plugins or scripts from other TWs I've made etc...
Today TiddlyWiki is my single most important tool for everything which involves using a computer.... and sometimes I think that all I need from an operating system is a browser, so I can use a TW....

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - matt - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - matt - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..b5349c7b49 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - matt - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/matt +modified: 20101116000000000 +modifier: matt +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - matt - 2010-11-16T00:00:00.000Z + +I've created a number of TiddlyWiki's – the first was stored locally and I used it for capturing notes, lists and actions. I've now imported this into my matt space where the majority of the content remains private.

I plan to use mattlucht for capturing random thoughts that I'd like to make public. I've also used TiddlySpace to create a website for a music festival I organised, this I used the bring-your-own-domain function for http://brixtonoxjam.com
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..aa2a026172 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - passingby - 2010-11-27T00:00:00.000Z + +I have created many. I have a bad habit of starting a new Tiddlywiki whenever I get excited about a topic but I usually never complete a project 100%.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..48aba69534 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - rouilj - 2010-11-27T00:00:00.000Z + +I use four on a regular basis:

  • tbGTD - for getting things done
  • twab - for an address book and I have extended it to allow tracking things like who gets christmas cards etc
  • coursebook - was created as a textbook/exercise-quiz/presentation tool/student notebook for a class I was teaching.
  • TiddlySnip - sadly this has been abandoned, but it is my primary mechanism for keeping bookmarks, research notes and how to's for the firefox browser.

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - smandoli - 2010-12-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - smandoli - 2010-12-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..0bf094ce4b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - smandoli - 2010-12-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/smandoli +modified: 20101224000000000 +modifier: smandoli +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - smandoli - 2010-12-24T00:00:00.000Z + +
  1. Summary of Materials Resource Planning (MRP) functions for my work place.
  2. Getting Things Done (GTD) organizer for personal and work use.
  3. Notes about my study of the Bible (topical as well as passage-specific).
  4. Computer information such as code snippets in a variety of languages.
  5. A personal information manager for everything else.

If I can find the right tools to overcome a sense of content overload, I will combine #3 and #5.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - yakov - 2011-02-21T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - yakov - 2011-02-21T00_00_00.000Z.tid new file mode 100644 index 0000000000..bd226124bf --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_ - yakov - 2011-02-21T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/yakov +modified: 20110221000000000 +modifier: yakov +tags: [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Interview Answer]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? - yakov - 2011-02-21T00:00:00.000Z + +My answer won't be very interesting since I'm only studying TW now. I've already created 3 TW for some science and one for making a deep TW tutorial (with many practical aspects).

However, I'm going to make much more TWs for different purposes from questions aggregating to making a site.

UPD: As for now, I use 9 tw-documents. 3 of them very often and others from time to time. I feel that an offline analogue of TiddlyWeb becomes more more desirable thing.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_.tid new file mode 100644 index 0000000000..30df39b104 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many TiddlyWikis have you created and do you use regularly_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How many TiddlyWikis have you created and do you use regularly? - matt - 2010-11-16T00:00:00.000Z]] [[2010 - How many TiddlyWikis have you created and do you use regularly? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - How many TiddlyWikis have you created and do you use regularly? - mama - 2010-11-24T00:00:00.000Z]] [[2010 - How many TiddlyWikis have you created and do you use regularly? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - How many TiddlyWikis have you created and do you use regularly? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - How many TiddlyWikis have you created and do you use regularly? - andrewbarbour - 2010-11-28T00:00:00.000Z]] [[2010 - How many TiddlyWikis have you created and do you use regularly? - colmbritton - 2010-12-21T00:00:00.000Z]] [[2010 - How many TiddlyWikis have you created and do you use regularly? - smandoli - 2010-12-24T00:00:00.000Z]] [[2010 - How many TiddlyWikis have you created and do you use regularly? - yakov - 2011-02-21T00:00:00.000Z]] [[2010 - How many TiddlyWikis have you created and do you use regularly? - dickon - 2012-03-18T00:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How many TiddlyWikis have you created and do you use regularly? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - dickon - 2012-03-18T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - dickon - 2012-03-18T00_00_00.000Z.tid new file mode 100644 index 0000000000..a335f35cce --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - dickon - 2012-03-18T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/dickon +modified: 20120318000000000 +modifier: dickon +tags: [[2010 - How many other people have you introduced to TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many other people have you introduced to TiddlyWiki? - dickon - 2012-03-18T00:00:00.000Z + +I get about 4-500 hits a month to my Tiddlymanuals at present, which compared to how many people regularly read treatment manuals is, in my book, quite good going for a new project.

There are about 17 teams starting to use and adapt their own local versions of a TiddlyManual around the UK, and these vary in size from about 4 or 5 up to about 25.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - mama - 2011-08-17T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - mama - 2011-08-17T23_00_00.000Z.tid new file mode 100644 index 0000000000..474d323c19 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - mama - 2011-08-17T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20110817000000000 +modifier: mama +tags: [[2010 - How many other people have you introduced to TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many other people have you introduced to TiddlyWiki? - mama - 2011-08-17T23:00:00.000Z + +Directly or indirectly??

Indirectly

Indirectly I have presented jobrelated material in TWs for about 5 or 600 people over a period of three years.
I have used TWs as container for all kinds of material for reference, when having mailcorrespondences. They are for the most part hosted by dropbox, sometimes attached..

Direct introduction:

One year ago the administrator of linux-abc.dk (Danish Linux community powered by MyBB) made me administrator of the forum TiddlyWiki (12 tutorials and a description) and a support forum...
There has been some hits 2 - 300, however there's been no activity for a long time.
I haven't bothered to fake questions/answers or setup fake members.
I recon there are not that many danes using TiddlyWiki therefore no demand for support in Danish...
Maybe my tutorials aren't good enough. Don't know really. Linux-abc's administrator has praised my work - though - even if he doesn't use TiddlyWiki himself.

When I attend groupdiscussions i.e puppy linux forums, I setup online TiddlyWikis to serve as Faq, tutorials and projectdescription. I've recieved positive feedback from developer in charge of the Puppy Studio project - however I have no idea how many hits my TWs have had...
Everytime I use a TW for this kind of work, I explain what TiddlyWiki is and that you can download it for personal use. I don't know if anyone has done that yet...

I have setup a Danish FaceBook group (TiddlyWiki_da), a posterous blog (http://tiddlywiki-da.posterous.com) and a hootcourse (http://hootcourse.com/course/312/) No activity except some hits....

A year ago a publisher of educational material ("Forlaget for ildsjæle" - "Imprint for Enthusiasts") encouraged me to create tutorials on how to use TiddlyWiki in a classroomsetting... Alas I haven't reached a point where I've got the time needed to pursue this request - and I'm very busy working as an IT-administrator, teaching undergraduate students on a boarding school (http://himmerlands-ungdomsskole.dk). 4 kids, a cat and two turtles need my full attention - so I guess I just have to wait untill I'm retired....
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - martinlindner - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - martinlindner - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..6cc7ae6928 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - martinlindner - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/martinlindner +modified: 20101116000000000 +modifier: martinlindner +tags: [[2010 - How many other people have you introduced to TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many other people have you introduced to TiddlyWiki? - martinlindner - 2010-11-16T00:00:00.000Z + +hmm, 10 or so? (who got the idea, but i mentioned it more often.)
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..93c4c6caea --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - How many other people have you introduced to TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many other people have you introduced to TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z + +60 or so between teaching from the tiddlywiki as well as presenting on tiddlywiki.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - yakov - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - yakov - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..1ae5590d3d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_ - yakov - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/yakov +modified: 20101116000000000 +modifier: yakov +tags: [[2010 - How many other people have you introduced to TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many other people have you introduced to TiddlyWiki? - yakov - 2010-11-16T00:00:00.000Z + +For the moment just one philosopher) See, ragged (no offence; I'm not sure this word has same tinge as in russian) tutorials and very few possibilities for those who want to get russian interface, russian help and tutorials and complicity of TW.. As for now this is a tool for those who need it, not a comfortable platform for everything (at least for my friends).
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_.tid new file mode 100644 index 0000000000..3429d8673a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many other people have you introduced to TiddlyWiki_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How many other people have you introduced to TiddlyWiki? - martinlindner - 2010-11-16T00:00:00.000Z]] [[2010 - How many other people have you introduced to TiddlyWiki? - yakov - 2010-11-16T00:00:00.000Z]] [[2010 - How many other people have you introduced to TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - How many other people have you introduced to TiddlyWiki? - mama - 2011-08-17T23:00:00.000Z]] [[2010 - How many other people have you introduced to TiddlyWiki? - dickon - 2012-03-18T00:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How many other people have you introduced to TiddlyWiki? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - dickon - 2012-03-18T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - dickon - 2012-03-18T00_00_00.000Z.tid new file mode 100644 index 0000000000..9a8bc69214 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - dickon - 2012-03-18T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/dickon +modified: 20120318000000000 +modifier: dickon +tags: [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - dickon - 2012-03-18T00:00:00.000Z + +The main ambit tiddlymanual (see tiddlymanuals) is over 2Mb now - still works fine!
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..4af9ddce72 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - frankfurtkid - 2010-11-16T00:00:00.000Z + +2.6 MB - probably pretty modest I guess.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..364e4852ee --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - passingby - 2010-11-27T00:00:00.000Z + +Not very large I am afraid. But wait! I have a 'contactsbook' which probably has around 137 tiddlers containing basically names, address and phone numbers of people I know. Not much in MBs I am afraid
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..862110485d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z + +The coursebook is 2.1 MB and 441 tiddlers.

My Tiddlysnip tiddlywiki is 1.5MB and 661 tiddlers.

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - yakov - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - yakov - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..bc60bad751 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_ - yakov - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/yakov +modified: 20101116000000000 +modifier: yakov +tags: [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - yakov - 2010-11-16T00:00:00.000Z + +No big one yet. Just somewhat about 1Mb. But this is an issue: I still don't know if TW has some "limit" (would it get slower if become too big?) and this is why I'm not sure if it's proper to make only one TW for everything or I have to split the things mindfully.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_.tid new file mode 100644 index 0000000000..14b97a571d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - yakov - 2010-11-16T00:00:00.000Z]] [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? - dickon - 2012-03-18T00:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - mama - 2010-12-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - mama - 2010-12-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..d237cf04e6 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - mama - 2010-12-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101216000000000 +modifier: mama +tags: [[2010 - How might you use TiddlyWiki in the future?]] [[2010 - Interview Answer]] +title: 2010 - How might you use TiddlyWiki in the future? - mama - 2010-12-16T00:00:00.000Z + +I guess I'm waiting to implement some future version of TiddlySpace on our servers, for quick and easy delivery of personal spaces with preincluded plugins and theme tailored for intranetuse...
All students and collegues already have a single loginname and password for network & wireless internetconnection, moodle, Zimbra (email), educational material services etc...
If TiddlySpace should be implemented - I would need a way to setup users/spaces from a csv (or a shared database) and a way to add members to a new space template from a shared/known list of users.
I would need two versions of TiddlySpace, one for collegues and another one for students, to run from our two seperate servers. ..
If TiddlySpace could interact with Moodle - I think it would be a seamless integration..

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - martinlindner - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - martinlindner - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..a649e6f62d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - martinlindner - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/martinlindner +modified: 20101116000000000 +modifier: martinlindner +tags: [[2010 - How might you use TiddlyWiki in the future?]] [[2010 - Interview Answer]] +title: 2010 - How might you use TiddlyWiki in the future? - martinlindner - 2010-11-16T00:00:00.000Z + +I'd love to have a fully working version of TiddlyDocs, all by myself, which would be able to import docs.
And I can imagine a lot uf uses as soon as i would be able to read/write/edit tiddlers from a client, (something like a twitter client where i could search for a thread of tiddlers, or subscribe to a tag).
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - pmario - 2011-04-06T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - pmario - 2011-04-06T23_00_00.000Z.tid new file mode 100644 index 0000000000..91f349835f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - pmario - 2011-04-06T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/pmario +modified: 20110406000000000 +modifier: pmario +tags: [[2010 - How might you use TiddlyWiki in the future?]] [[2010 - Interview Answer]] +title: 2010 - How might you use TiddlyWiki in the future? - pmario - 2011-04-06T23:00:00.000Z + +
  • As my main knowledge database (private)
  • and presentation plattform. (private / public)

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - yakov - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - yakov - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..ace6419144 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_ - yakov - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/yakov +modified: 20101116000000000 +modifier: yakov +tags: [[2010 - How might you use TiddlyWiki in the future?]] [[2010 - Interview Answer]] +title: 2010 - How might you use TiddlyWiki in the future? - yakov - 2010-11-16T00:00:00.000Z + +Aside those many writings including scientific ones, aggregation uses like GTD or question or news aggregation and possible use for site I'd like to mention the concept which TW allows to implement.

The IT world is very conservative in one thing: tree-based file systems. This just limits the mind. For instance, I used to sort music in my mobile phone by making folders so that I can accent the value of different tracks and this helps me to introduce some harmony in searching music that's proper for the moment. But eventually this came to too branched tree and tracks that has value in more than one sences became binded with this separation.

Such a thing happens sometimes with all other things: notes, books.. whatever. TW makes a breakthrough here and after some tweaking can reorganize things so that I can forget about the eclectic branched limits. I haven't dig in this direction yet but I know that there are already somewhat player plugins based on web-technologies.. So this may be of interest.

Hi-hi. Perhaps TW also will be usefull for organizing code for programming but this sounds rather fansy (as for now).
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_.tid new file mode 100644 index 0000000000..8b327aba59 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - How might you use TiddlyWiki in the future_.tid @@ -0,0 +1,3 @@ +list: [[2010 - How might you use TiddlyWiki in the future? - martinlindner - 2010-11-16T00:00:00.000Z]] [[2010 - How might you use TiddlyWiki in the future? - yakov - 2010-11-16T00:00:00.000Z]] [[2010 - How might you use TiddlyWiki in the future? - mama - 2010-12-16T00:00:00.000Z]] [[2010 - How might you use TiddlyWiki in the future? - pmario - 2011-04-06T23:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - How might you use TiddlyWiki in the future? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Interview Question.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Interview Question.tid new file mode 100644 index 0000000000..a692cf7991 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Interview Question.tid @@ -0,0 +1,2 @@ +list: [[2010 - How did you first discover TiddlyWiki?]] [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Which aspects of TiddlyWiki do you find most valuable?]] [[2010 - How many TiddlyWikis have you created and do you use regularly?]] [[2010 - Do you keep adding new features to your existing TiddlyWiki(s)?]] [[2010 - Who is the target audience for your TiddlyWiki(s)?]] [[2010 - What features of TiddlyWiki made it suitable for your target audience?]] [[2010 - How have you found training novice users to use and understand TiddlyWiki?]] [[2010 - How many tiddlers and how many megabytes in your largest TiddlyWiki?]] [[2010 - How has TiddlyWiki saved time for you as an information publisher?]] [[2010 - How has TiddlyWiki saved time for your target audience?]] [[2010 - How has the TiddlyWiki community helped you?]] [[2010 - How have you been able to contribute back to the TiddlyWiki community?]] [[2010 - How many other people have you introduced to TiddlyWiki?]] [[2010 - What is the most challenging thing about using TiddlyWiki?]] [[2010 - Which plugins do you rely on the most?]] [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - How might you use TiddlyWiki in the future?]] +title: 2010 - Interview Question \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - andrewbarbour - 2010-11-28T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - andrewbarbour - 2010-11-28T00_00_00.000Z.tid new file mode 100644 index 0000000000..f9e6d80bef --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - andrewbarbour - 2010-11-28T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/andrewbarbour +modified: 20101128000000000 +modifier: andrewbarbour +tags: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - Interview Answer]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - andrewbarbour - 2010-11-28T00:00:00.000Z + +"Tiddlywiki" - kind of 'folksy' and quaint. Has a bit of charm.

"Tiddler" - is a bit of a barrier to adoption. I have tried to give overviews to a few people and used the term 'tiddler' - at least 50% of the time there are chuckles and references to 'diddlers'. I would suggest calling them 'items' or 'posting'.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..38c3bf9fac --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - Interview Answer]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - frankfurtkid - 2010-11-16T00:00:00.000Z + +I got used to it - but when introducing people to these terms for the first time, they have to get over the smiles. Usually the functionality wins over, but I've had feedback that it does not sound very professional - but hey what does Google or Twitter sound like ? Also sounds much better than Edit Conflict - which I just got saving this tiddler
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - gjrobert - 2013-09-15T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - gjrobert - 2013-09-15T23_00_00.000Z.tid new file mode 100644 index 0000000000..8c85801378 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - gjrobert - 2013-09-15T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/gjrobert +modified: 20130915000000000 +modifier: gjrobert +tags: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - Interview Answer]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - gjrobert - 2013-09-15T23:00:00.000Z + + "tiddler" was a whole new word to me at first (I'm no native English speaker). "TiddlyWiki" sounds impressive, bit funny and enjoyable.

I like the idea to store ideas and knowledge (like dictionary entries) as small chunks in tiddlers, while preserving the ability to transclude and organize them together into a big knowledge base or long articles or even an e-book.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - kosmaton - 2011-03-10T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - kosmaton - 2011-03-10T00_00_00.000Z.tid new file mode 100644 index 0000000000..99c0167dd6 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - kosmaton - 2011-03-10T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/kosmaton +modified: 20110310000000000 +modifier: kosmaton +tags: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - Interview Answer]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - kosmaton - 2011-03-10T00:00:00.000Z + +I think unfortunately the cons outweigh the pros.

Pros:
  • non-stuffy
  • unique (rare/peculiar word: gives it more of a story)
  • rolls off the tongue easily
Cons:
  • dealing with silly associations
  • yet another half-childish sounding Web2.0 name?

Personally, I would love to use a "GrooveWiki" made up of a bunch of cool "grooves".

Or go for something meaningful and nice-sounding in Indo-European or Lojban...

I'd ultimately rather present this software saying "Folks, behold this GrooveWiki" than "Folks, behold this TiddlyWiki... yes... indeed... no... it's sticklebacks." First impressions, you know.


\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - mama - 2010-12-02T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - mama - 2010-12-02T00_00_00.000Z.tid new file mode 100644 index 0000000000..ebabb795cc --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - mama - 2010-12-02T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101202000000000 +modifier: mama +tags: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - Interview Answer]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - mama - 2010-12-02T00:00:00.000Z + +I like those words. For some reason they remind me of Puppy Linux and the penguin Linux Logo.... and I'm a fan of those.
I must admit that there a no Danish words that sounds like "TiddlyWiki" and "tiddler". They are very foreign words - and some times I just replace them with "Wiki" and "article" - however it depends on the context, and if the audience are people who already have a hunch of what a wiki is... If they don't I would most likely use grouping of words as "Instantly editable blog or homepage" and "editable posts".
The use of the words "TiddlyWiki" and "tiddler" implies originality and an entrance into a new terminology, which is very much what TiddlyWiki demands from new users anyway - so please keep the words, they make sense after a while..
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - pmario - 2011-04-06T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - pmario - 2011-04-06T23_00_00.000Z.tid new file mode 100644 index 0000000000..350ace664b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - pmario - 2011-04-06T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/pmario +modified: 20110406000000000 +modifier: pmario +tags: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - Interview Answer]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - pmario - 2011-04-06T23:00:00.000Z + +TiddlyWiki for me is just a name for a wiki.
The term tiddler, has to be explaind, whenever you use it. For me "The smallest part of content in a TiddlyWiki" works best.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - poulstaugaard - 2011-03-06T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - poulstaugaard - 2011-03-06T00_00_00.000Z.tid new file mode 100644 index 0000000000..ba29c574cc --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - poulstaugaard - 2011-03-06T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/poulstaugaard +modified: 20110306000000000 +modifier: poulstaugaard +tags: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - Interview Answer]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - poulstaugaard - 2011-03-06T00:00:00.000Z + +I agree with Andrew but I haven't found a better term, except perhaps 'item' or 'entry'. I've hesitated to drop 'tiddler' though, choosing to stick with the virtual village parlance.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - smandoli - 2010-12-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - smandoli - 2010-12-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..a1e25c6b38 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - smandoli - 2010-12-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/smandoli +modified: 20101224000000000 +modifier: smandoli +tags: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - Interview Answer]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - smandoli - 2010-12-24T00:00:00.000Z + +Those are good terms. I have nothing better. That said, I always introduce the terms with just a bit of anxiety! And i explain them with a big roll of the eyes and a chuckle. Once I'm past that, all is well. And it may be all for the good. Enough with haughty tech terms, with applications that impress the new user with fear before anything else.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - yakov - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - yakov - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..30bc2da6bb --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__ - yakov - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/yakov +modified: 20101116000000000 +modifier: yakov +tags: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"?]] [[2010 - Interview Answer]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - yakov - 2010-11-16T00:00:00.000Z + +I use the term "tiddler" for communication in google.groups; I prefer a "tw-entry" ("tw-запись" in russian) since it looks closer to IT terms.. just more brief and exact. Yeap, I think this actually not important.

TiddlyWiki sound just as Coca-Cola - you never think of what it means, so it's ok, I think. Keep in mind however that english is not my native language.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__.tid new file mode 100644 index 0000000000..5c4b0793ff --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What do you think of the name TiddlyWiki and the term _tiddler__.tid @@ -0,0 +1,3 @@ +list: [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - yakov - 2010-11-16T00:00:00.000Z]] [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - andrewbarbour - 2010-11-28T00:00:00.000Z]] [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - mama - 2010-12-02T00:00:00.000Z]] [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - smandoli - 2010-12-24T00:00:00.000Z]] [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - poulstaugaard - 2011-03-06T00:00:00.000Z]] [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - kosmaton - 2011-03-10T00:00:00.000Z]] [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - pmario - 2011-04-06T23:00:00.000Z]] [[2010 - What do you think of the name TiddlyWiki and the term "tiddler"? - gjrobert - 2013-09-15T23:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - What do you think of the name TiddlyWiki and the term "tiddler"? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_ - mama - 2010-11-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_ - mama - 2010-11-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..155fdf6d1f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_ - mama - 2010-11-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101124000000000 +modifier: mama +tags: [[2010 - What features of TiddlyWiki made it suitable for your target audience?]] [[2010 - Interview Answer]] +title: 2010 - What features of TiddlyWiki made it suitable for your target audience? - mama - 2010-11-24T00:00:00.000Z + +TiddlyWiki can be shared online as a normal website, work from a shared networkfolder or attached to an email - all very different delivery methods allowing for different levels/degrees of security and different levels/degrees of technological sawyness.
In my experience, people just see another webpage - One, if not the most, frequent complaint I get is: "Why can't I go back in my browserhistory - to find a recently opened page"..
TiddlersBarPlugin, HistoryPlugin or breadcrumbsPlugin, helps...
Features I use to enhance user experience are:
  • Dropdown menus (sometimes from vertical mainmenu).
  • Lists of different kinds
    • tagged tiddlers
    • fETs delivering some degree of preview (images, custom fields etc..)
Search engines:
Optional hiding/showing sidepanels or fullscreen display of tiddler content..
Most of my jobrelated TiddlyWikis hide SideBarOptions when opened.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..e49ccead97 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - What features of TiddlyWiki made it suitable for your target audience?]] [[2010 - Interview Answer]] +title: 2010 - What features of TiddlyWiki made it suitable for your target audience? - passingby - 2010-11-27T00:00:00.000Z + +Menus and lists and search abilities
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_ - pmario - 2011-04-06T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_ - pmario - 2011-04-06T23_00_00.000Z.tid new file mode 100644 index 0000000000..a2f3f99a0d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_ - pmario - 2011-04-06T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/pmario +modified: 20110406000000000 +modifier: pmario +tags: [[2010 - What features of TiddlyWiki made it suitable for your target audience?]] [[2010 - Interview Answer]] +title: 2010 - What features of TiddlyWiki made it suitable for your target audience? - pmario - 2011-04-06T23:00:00.000Z + +
  • A very minimalistic presentation mode is possible.
  • Which keeps the focus of the audience at the basics.
  • But powerfull editing can be activated, which creates a WOW

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_.tid new file mode 100644 index 0000000000..ff85589b57 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What features of TiddlyWiki made it suitable for your target audience_.tid @@ -0,0 +1,3 @@ +list: [[2010 - What features of TiddlyWiki made it suitable for your target audience? - mama - 2010-11-24T00:00:00.000Z]] [[2010 - What features of TiddlyWiki made it suitable for your target audience? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - What features of TiddlyWiki made it suitable for your target audience? - pmario - 2011-04-06T23:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - What features of TiddlyWiki made it suitable for your target audience? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..78b8e37d2f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - What is the most challenging thing about using TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - What is the most challenging thing about using TiddlyWiki? - frankfurtkid - 2010-11-16T00:00:00.000Z + +(1) Trying to work out how to do something when you have no clue. (2) Trying to keep up with the changes in TiddlySpace
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..d767756af1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - What is the most challenging thing about using TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - What is the most challenging thing about using TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z + +The horrible debugging environment. I have been trying to fix the Quiz plugin for a while but the debugging environment compared to other tools (perl, python, C) is primitive.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_ - smandoli - 2010-12-25T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_ - smandoli - 2010-12-25T00_00_00.000Z.tid new file mode 100644 index 0000000000..1545397d50 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_ - smandoli - 2010-12-25T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/smandoli +modified: 20101225000000000 +modifier: smandoli +tags: [[2010 - What is the most challenging thing about using TiddlyWiki?]] [[2010 - Interview Answer]] +title: 2010 - What is the most challenging thing about using TiddlyWiki? - smandoli - 2010-12-25T00:00:00.000Z + +Figuring out what plug-ins may help and how to use them. You can read my blog entry about this.

Suggest Other Question: What secondary software tool or application is most useful for you in working with TiddlyWiki? My answer is Notepad++ (for regex search-and-replace) and python (for converting a big notes document into a TW).
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_.tid new file mode 100644 index 0000000000..fdea2ea527 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What is the most challenging thing about using TiddlyWiki_.tid @@ -0,0 +1,3 @@ +list: [[2010 - What is the most challenging thing about using TiddlyWiki? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - What is the most challenging thing about using TiddlyWiki? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - What is the most challenging thing about using TiddlyWiki? - smandoli - 2010-12-25T00:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - What is the most challenging thing about using TiddlyWiki? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - aamaadmitw5 - 2014-09-23T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - aamaadmitw5 - 2014-09-23T23_00_00.000Z.tid new file mode 100644 index 0000000000..9470ca8351 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - aamaadmitw5 - 2014-09-23T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/aamaadmitw5 +modified: 20140923000000000 +modifier: aamaadmitw5 +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - aamaadmitw5 - 2014-09-23T23:00:00.000Z + +in reply to What was it about TiddlyWiki that captured your interest?:

1. Simplicity
2. Tagging
3. Default fonts and line spacing
4. Unusual
5. Single file

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - climatechange3 - 2010-12-02T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - climatechange3 - 2010-12-02T00_00_00.000Z.tid new file mode 100644 index 0000000000..afde5eaa3e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - climatechange3 - 2010-12-02T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/climatechange3 +modified: 20101202000000000 +modifier: climatechange3 +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - climatechange3 - 2010-12-02T00:00:00.000Z + +Its versatility, built-in macros, the wonderful & creative 3rd party plugins, a diversity of ways to present and organize content and layout and the responsiveness of the TW Google Group. In examining the structure of tiddlers, I became aware of the possibility of generating sets of tiddlers from the extensive body of information I have gathered in a set of DataPerfect databases.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - dickon - 2012-03-18T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - dickon - 2012-03-18T00_00_00.000Z.tid new file mode 100644 index 0000000000..5edf6c4f72 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - dickon - 2012-03-18T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/dickon +modified: 20120318000000000 +modifier: dickon +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - dickon - 2012-03-18T00:00:00.000Z + +It was the fact that it was a document, but that it had certain aspects that seemed extraordinarily "three-dimensional": pages (tiddlers) have depth insofar as each chunk of content that you write has what I think of as both centrifugal force (stimulating interest to go and explore links and tags that offered related material) balanced by centripetal force (the intrinsic interest of what is here on this page/tiddler, that holds my attention and delivers what I want/need.)

But more than that, TiddlyWiki has EDGES; this is like other documents I know about (chiefly paper based), and is reassuring in relation to the scary 'anarchy of limitlessness' that, say, Wikipedia has. As a TW could be a thing - downloaded, uploaded - so it was a definable entity; there could be a balance of authorial control with the wiki-like sharing and co-construction.

I was writing a large treatment manual at the time (with a great group of co-authors based around the Anna Freud Centre) at the time, and we were trying to integrate a whole range of "schools" of thinking and practising into a concentrated, integrated set of principles and practices that could 'steer' workers in the field towards more effective practice in doing therapy with some of the most vulnerable, complex, troubled youth around. The "eureka" moment (and it was something like that) was the recognition of a number of things almost simultaneously:

'Integrative' format


1. That the way to mount all this information was in a TiddlyWiki: this format could emphasise underlying links/commonalities/shared concepts between disparate schools (that had often, in my view, wasted precious energy on "turf wars"... this seemed to me to be a radically integrative format, insofar as any tiddler that I wrote automatically begged the questions: "How does my content fit in with the rest of what is written? How are you going to tag me? What links are you going to place in me, and to me?"

Funkier than a book


2. The format (with its promise of embedded video, downloadable documents, clickable links...) offered a much more tempting "front door" to what is conventionally a massively boring kind of book. (Research demonstrates that the "treatment manual" is frequently despised by therapists, who find them rigid, condescending, crushing of creativity and spontaneity, and often ill-fitting to their local setting and cultural context.) Most treatment manuals are not inviting to the casual browser!

Open source works for therapy, too


3. The whole "open source" ethos that Tiddlywiki abounds with, absolutely fitted with the slant on human behaviour/psychology that we were using as the "integrating principle" in our treatment approach, which is "Mentalization". The motto of open source programmers ("Release Early, Release Often") fits the mentalization-based therapist's assumption that "I only see with partial vision" and his or her willingness to mark their best guesses as just that - hypotheses, to be built on and improved...

Multiple iterations around a developing shared core


4. The final "Bingo!" moment was the realisation that with TiddlyWiki it was possible to conceive of multiple locally-adapted versions of a centrally-curated 'basic core' offering. Thus local teams (the "small trusted groups" that TiddlySpace refers to) can work out place- and population-specific iterations of "Practice-based Evidence" - that fit the more rarefied/less 'attuned' "Evidence-based Practice" into local settings, local populations. I think of it as being like adapting a basic car for use in different parts of the world - some places need air-con, others need 4 wheel drive and a good in-cabin heater, still others need an excellent paint job, etc... but all rely on a basic car that basically runs.

With the development of TiddlyWeb and TiddlySpace this vision (no. 4 above) has become increasingly possible, so that now the ambit core manual is included in the local versions of just under 20 teams across the UK (see tiddlymanuals and follow the links for AMBIT), working with diverse populations, and in diverse ways, with "hard to reach" young people.

These teams are beginning to build their own locally-attuned versions of a treatment manual, building on (and often improving on) the ambit 'core'. As time goes on, and evidence is gathered about what works for whom, we hope to bring excellent local adaptations that would have more general relevance into the core, so that they are automatically available to all other local teams including this core.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..797108f7ee --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - frankfurtkid - 2010-11-16T00:00:00.000Z + +I could create simple notepad applications, very quickly and easily - but also the more I used it, the more I realized I could change the way it looked and worked. This has been both liberating, and frustrating.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - mama - 2010-11-20T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - mama - 2010-11-20T00_00_00.000Z.tid new file mode 100644 index 0000000000..6b4302f42f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - mama - 2010-11-20T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101120000000000 +modifier: mama +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - mama - 2010-11-20T00:00:00.000Z + +I'm sure that it was the "tiddler-approach" which caught my attention... Other wikis I tried in the past, always made me a little uneasy because of the "one article one page" layout. I quickly understood that TiddlyWiki could be tweaked to my own liking - and when I eventually overcame my reluctance to enroll in a community, the googlegroup convinced me that even I, could create/modify a copy to my own liking, a total noob, with no education or knowledge whatsoever about html, css or javascript.
As far as I remember, I tried to figure things out for myself for about six months untill I finally gave up - and posted a question on the usergroup. At that time I was trying to create a tiddlywikiapp to be used on a mobile phone for administration of students at my school. http://himmerlands-ungdomsskole.dk. I even purchased an old HTC (tytn II) to be able to test the thing....
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - martinlindner - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - martinlindner - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..c6c2e0aacd --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - martinlindner - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/martinlindner +modified: 20101116000000000 +modifier: martinlindner +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - martinlindner - 2010-11-16T00:00:00.000Z + +initially: i think i was fascinated by the idea of having a "page" made of dynamic paragraphs, back then. i'm still interested in the (abandoned?) TW project of importing docs, transforming paragraphs to tiddlers, and back again.

the other concept i have been obsessed with since 2004 is "microcontent": to play with small units of meaning, meme-like chunks. like the microweb that exploded after that, with twitter & any kind of 'microformatted' apps (for questions, for trips, for reviewas, for nearly anything).
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..ce0fa5c3e4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - passingby - 2010-11-27T00:00:00.000Z + +That it was:
  1. Single file software
  2. It opened in a browser
  3. It was kind of a closet, you could stash away things in it
  4. You could 'own' it, for free, have as many copies as you want
  5. It had a world of fascinating plugins

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - pmario - 2011-04-05T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - pmario - 2011-04-05T23_00_00.000Z.tid new file mode 100644 index 0000000000..7f9f4cf1ba --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - pmario - 2011-04-05T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/pmario +modified: 20110405000000000 +modifier: pmario +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - pmario - 2011-04-05T23:00:00.000Z + +
  • The extensibility

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - poulstaugaard - 2011-03-12T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - poulstaugaard - 2011-03-12T00_00_00.000Z.tid new file mode 100644 index 0000000000..85a2efd26f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - poulstaugaard - 2011-03-12T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/poulstaugaard +modified: 20110312000000000 +modifier: poulstaugaard +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - poulstaugaard - 2011-03-12T00:00:00.000Z + +The page architecture, which I have adopted, finding little reason to change anything just for the sake of difference, nor for any other reason. Everything, even the animations, serves a purpose and does it just right, including the omission of sidebar space for 'ads by Google'.

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..142c05f90f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - rouilj - 2010-11-27T00:00:00.000Z + +Saq's use in the education realm and the ease of transport/sharing.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - smandoli - 2010-12-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - smandoli - 2010-12-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..e9c5507252 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - smandoli - 2010-12-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/smandoli +modified: 20101224000000000 +modifier: smandoli +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - smandoli - 2010-12-24T00:00:00.000Z + +Portability. I didn't want to have to be on-line, and I wanted to shuttle between Linux at home and Windows at work. And I had recently become attached to my USB drive.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - webid4me - 2014-09-23T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - webid4me - 2014-09-23T23_00_00.000Z.tid new file mode 100644 index 0000000000..8a9e23582e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - webid4me - 2014-09-23T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/webid4me +modified: 20140923000000000 +modifier: webid4me +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - webid4me - 2014-09-23T23:00:00.000Z + +in reply to What was it about TiddlyWiki that captured your interest?:

1. Portable - single file application
2. Flexible workflow (& plugins)
3. Offline
4. Open Source
5. Searchable
6. Active development

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - yakov - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - yakov - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..0639bb7124 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_ - yakov - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/yakov +modified: 20101116000000000 +modifier: yakov +tags: [[2010 - What was it about TiddlyWiki that captured your interest?]] [[2010 - Interview Answer]] +title: 2010 - What was it about TiddlyWiki that captured your interest? - yakov - 2010-11-16T00:00:00.000Z + +More I discovered TW, more I get exiced because my wishes got implemented one by one. TW happen to be extremly powerful, close to WYSIMYM-based and, well... the only thing I've got to do is to discover it carefully (although some things are now distinct to be not achieved yet the plugin system promises almost everything to be doable).
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_.tid new file mode 100644 index 0000000000..e9d374613d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - What was it about TiddlyWiki that captured your interest_.tid @@ -0,0 +1,3 @@ +list: [[2010 - What was it about TiddlyWiki that captured your interest? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - martinlindner - 2010-11-16T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - yakov - 2010-11-16T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - mama - 2010-11-20T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - climatechange3 - 2010-12-02T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - smandoli - 2010-12-24T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - poulstaugaard - 2011-03-12T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - pmario - 2011-04-05T23:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - dickon - 2012-03-18T00:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - aamaadmitw5 - 2014-09-23T23:00:00.000Z]] [[2010 - What was it about TiddlyWiki that captured your interest? - webid4me - 2014-09-23T23:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - What was it about TiddlyWiki that captured your interest? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - aamaadmitw5 - 2014-09-23T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - aamaadmitw5 - 2014-09-23T23_00_00.000Z.tid new file mode 100644 index 0000000000..572dd92cd2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - aamaadmitw5 - 2014-09-23T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/aamaadmitw5 +modified: 20140923000000000 +modifier: aamaadmitw5 +tags: [[2010 - Which aspects of TiddlyWiki do you find most valuable?]] [[2010 - Interview Answer]] +title: 2010 - Which aspects of TiddlyWiki do you find most valuable? - aamaadmitw5 - 2014-09-23T23:00:00.000Z + +in reply to Which aspects of TiddlyWiki do you find most valuable?:

1. Regular updates
2. Simplicity
3. Alternative ways to do things
4 Tags / Tags / Tags
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - alexhough - 2010-12-08T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - alexhough - 2010-12-08T00_00_00.000Z.tid new file mode 100644 index 0000000000..063bd42510 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - alexhough - 2010-12-08T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/alexhough +modified: 20101208000000000 +modifier: alexhough +tags: [[2010 - Which aspects of TiddlyWiki do you find most valuable?]] [[2010 - Interview Answer]] +title: 2010 - Which aspects of TiddlyWiki do you find most valuable? - alexhough - 2010-12-08T00:00:00.000Z + +Facilitating Group Work
During the design stages of the OMM, TiddlyWiki was used to capture the requirements from the group. We projected the TW on the wall.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - mama - 2010-11-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - mama - 2010-11-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..b666f5f099 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - mama - 2010-11-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101124000000000 +modifier: mama +tags: [[2010 - Which aspects of TiddlyWiki do you find most valuable?]] [[2010 - Interview Answer]] +title: 2010 - Which aspects of TiddlyWiki do you find most valuable? - mama - 2010-11-24T00:00:00.000Z + +Ownership and a great amount of control. You can keep your work offline or go public, even the different publishing options are "hackable" - its "all inclusive" instead of "some exclusive".
I think that TiddlyWiki is THE good example of what OpenSource is all about - The communiti(es) are full of great/generous people, you want to follow or help out in any way you can. I think this incitament (to do good...) comes from a deep feeling of gratitude toward those who helped you when you needed it, and the fact that TiddlyWiki is OpenSource software, maintained by great developers - who demonstrate accountability at all times, makes you feel safe, - and that TiddlyWiki is a serious project.

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..0e4ef50ab7 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - Which aspects of TiddlyWiki do you find most valuable?]] [[2010 - Interview Answer]] +title: 2010 - Which aspects of TiddlyWiki do you find most valuable? - passingby - 2010-11-27T00:00:00.000Z + +
  1. Tiddler concept
  2. Tagging ability
  3. The Paradigm, every thing is a tiddler
  4. Plethora of plugins
  5. Versatility, programmable using inlinejavascript plugin and the other plugins
  6. Best software around for storing personal data

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - pmario - 2011-04-05T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - pmario - 2011-04-05T23_00_00.000Z.tid new file mode 100644 index 0000000000..6b852fac47 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - pmario - 2011-04-05T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/pmario +modified: 20110405000000000 +modifier: pmario +tags: [[2010 - Which aspects of TiddlyWiki do you find most valuable?]] [[2010 - Interview Answer]] +title: 2010 - Which aspects of TiddlyWiki do you find most valuable? - pmario - 2011-04-05T23:00:00.000Z + +
  • For most people its new. They haven't seen something like this. It's easy. It's usefull. It's a WOW.
  • It's flexibility
  • TagglyTagging

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - smandoli - 2010-12-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - smandoli - 2010-12-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..801dad1c44 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - smandoli - 2010-12-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/smandoli +modified: 20101224000000000 +modifier: smandoli +tags: [[2010 - Which aspects of TiddlyWiki do you find most valuable?]] [[2010 - Interview Answer]] +title: 2010 - Which aspects of TiddlyWiki do you find most valuable? - smandoli - 2010-12-24T00:00:00.000Z + +

Easy and Quick

  • I can capture my thought or preserve a good quotation without a lot of hassle or time.
  • I don't have to decide if the idea is "important" or how it fits in with everything else. Paste, save, apply a tag if I can think of one that's it.

Portable

  • In a strange library? Not sure what kind of computer is in front of me? Can't get the Internet to work? NO MATTER if it's got a USB port, I'm in.

Non-linear association of ideas

  • It may not look like a mind map (yet), but it feels like one.
  • This is one of my few activities in life where it doesn't seem to matter if I'm in ADHD mode or not. Or putting it from another angle, managing a TW seems to put my ADHD to some sort of actual good use.

Non-proprietary Text Format

  • Whatever the next step is in knowledge management, I can get there. Migrating my voluminous notes from word-processor documents to TW was tedious, but nothing will ever be that hard again.

Sheer elegance

  • ... 'Nuff said.

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - webid4me - 2014-09-23T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - webid4me - 2014-09-23T23_00_00.000Z.tid new file mode 100644 index 0000000000..ce3ba84c73 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - webid4me - 2014-09-23T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/webid4me +modified: 20140923000000000 +modifier: webid4me +tags: [[2010 - Which aspects of TiddlyWiki do you find most valuable?]] [[2010 - Interview Answer]] +title: 2010 - Which aspects of TiddlyWiki do you find most valuable? - webid4me - 2014-09-23T23:00:00.000Z + +in reply to Which aspects of TiddlyWiki do you find most valuable?:

1. Non-linear notebook
2. Portable
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - yakov - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - yakov - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..85953d4e5f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_ - yakov - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/yakov +modified: 20101116000000000 +modifier: yakov +tags: [[2010 - Which aspects of TiddlyWiki do you find most valuable?]] [[2010 - Interview Answer]] +title: 2010 - Which aspects of TiddlyWiki do you find most valuable? - yakov - 2010-11-16T00:00:00.000Z + +
  • transclusion system
  • cross-platformity
  • extansibility
  • great community and many already implemented important things

\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_.tid new file mode 100644 index 0000000000..f91734357a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which aspects of TiddlyWiki do you find most valuable_.tid @@ -0,0 +1,3 @@ +list: [[2010 - Which aspects of TiddlyWiki do you find most valuable? - yakov - 2010-11-16T00:00:00.000Z]] [[2010 - Which aspects of TiddlyWiki do you find most valuable? - mama - 2010-11-24T00:00:00.000Z]] [[2010 - Which aspects of TiddlyWiki do you find most valuable? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - Which aspects of TiddlyWiki do you find most valuable? - alexhough - 2010-12-08T00:00:00.000Z]] [[2010 - Which aspects of TiddlyWiki do you find most valuable? - smandoli - 2010-12-24T00:00:00.000Z]] [[2010 - Which aspects of TiddlyWiki do you find most valuable? - pmario - 2011-04-05T23:00:00.000Z]] [[2010 - Which aspects of TiddlyWiki do you find most valuable? - aamaadmitw5 - 2014-09-23T23:00:00.000Z]] [[2010 - Which aspects of TiddlyWiki do you find most valuable? - webid4me - 2014-09-23T23:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - Which aspects of TiddlyWiki do you find most valuable? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid new file mode 100644 index 0000000000..c04d4dae25 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - climatechange3 - 2010-12-01T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/climatechange3 +modified: 20101201000000000 +modifier: climatechange3 +tags: [[2010 - Which plugins do you rely on the most?]] [[2010 - Interview Answer]] +title: 2010 - Which plugins do you rely on the most? - climatechange3 - 2010-12-01T00:00:00.000Z + +TwSearchPlugin, NestedSlidersPlugin, BreadCrumbsPlugin, ForEachTiddlerPlugin, fontSize plugin macro, SplashScreenPlugin, CustomLewcid - HoverMenuPlugin, SearchOptions plugin
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..82953dbf85 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - Which plugins do you rely on the most?]] [[2010 - Interview Answer]] +title: 2010 - Which plugins do you rely on the most? - frankfurtkid - 2010-11-16T00:00:00.000Z + +RSSReader; SimpleSearchPlugin; EasyEditPlugin; TiddlerListMarco; ActivityStreamPlugin plus all the usual ones
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - pmario - 2011-04-06T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - pmario - 2011-04-06T23_00_00.000Z.tid new file mode 100644 index 0000000000..5941c0c233 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - pmario - 2011-04-06T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/pmario +modified: 20110406000000000 +modifier: pmario +tags: [[2010 - Which plugins do you rely on the most?]] [[2010 - Interview Answer]] +title: 2010 - Which plugins do you rely on the most? - pmario - 2011-04-06T23:00:00.000Z + +
Sorted by priority.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..d3205d03a9 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - Which plugins do you rely on the most?]] [[2010 - Interview Answer]] +title: 2010 - Which plugins do you rely on the most? - rouilj - 2010-11-27T00:00:00.000Z + +For the coursebook: SlideShowPlugin, StorySaverPlugin, GotoPlugin, TiddlerNotesPlugin, TaggedTemplateTweak

In general: YourSearchPlugin, UnsavedChangesPlugin, ImportTiddlersPlugin, ExportTiddlersPlugin, TiddlyLockPlugin
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_.tid new file mode 100644 index 0000000000..bdd664bb77 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Which plugins do you rely on the most_.tid @@ -0,0 +1,3 @@ +list: [[2010 - Which plugins do you rely on the most? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - Which plugins do you rely on the most? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - Which plugins do you rely on the most? - climatechange3 - 2010-12-01T00:00:00.000Z]] [[2010 - Which plugins do you rely on the most? - pmario - 2011-04-06T23:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - Which plugins do you rely on the most? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid new file mode 100644 index 0000000000..8d39be6391 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - frankfurtkid - 2010-11-16T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/frankfurtkid +modified: 20101116000000000 +modifier: frankfurtkid +tags: [[2010 - Who is the target audience for your TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Who is the target audience for your TiddlyWiki(s)? - frankfurtkid - 2010-11-16T00:00:00.000Z + +Me; work colleagues; song writers; anyone whole hits a website
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - mama - 2010-11-24T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - mama - 2010-11-24T00_00_00.000Z.tid new file mode 100644 index 0000000000..4cbc026e40 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - mama - 2010-11-24T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/mama +modified: 20101124000000000 +modifier: mama +tags: [[2010 - Who is the target audience for your TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Who is the target audience for your TiddlyWiki(s)? - mama - 2010-11-24T00:00:00.000Z + +My students, collegues (teachers and other staffmembers at my school http://himmerlands-ungdomsskole.dk/).
Once a year I use TiddlyWiki's to publish material related to exams - for my students and censors.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - passingby - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - passingby - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..112eaa9638 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - passingby - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/passingby +modified: 20101127000000000 +modifier: passingby +tags: [[2010 - Who is the target audience for your TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Who is the target audience for your TiddlyWiki(s)? - passingby - 2010-11-27T00:00:00.000Z + +Some of TWs are just meant for myself. Others I have put up on Tiddlyspot, I don't think anybody visits them :-)
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - rouilj - 2010-11-27T00_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - rouilj - 2010-11-27T00_00_00.000Z.tid new file mode 100644 index 0000000000..05c134b218 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - rouilj - 2010-11-27T00_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/rouilj +modified: 20101127000000000 +modifier: rouilj +tags: [[2010 - Who is the target audience for your TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Who is the target audience for your TiddlyWiki(s)? - rouilj - 2010-11-27T00:00:00.000Z + +For most of TW's I am the primary audience.

The one TW I produced for others was a coursebook that was used to teach an event correlation tool to computer system administrators.

I am also occasionally playing with using a TW as a blogging platform which would again be geared toward items of interest to system administrators and people who are interested in lean/six sigma and its use in computing environments.
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - webid4me - 2014-09-23T23_00_00.000Z.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - webid4me - 2014-09-23T23_00_00.000Z.tid new file mode 100644 index 0000000000..d4f42d1e28 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_ - webid4me - 2014-09-23T23_00_00.000Z.tid @@ -0,0 +1,7 @@ +icon: $:/avatars/webid4me +modified: 20140923000000000 +modifier: webid4me +tags: [[2010 - Who is the target audience for your TiddlyWiki(s)?]] [[2010 - Interview Answer]] +title: 2010 - Who is the target audience for your TiddlyWiki(s)? - webid4me - 2014-09-23T23:00:00.000Z + +in reply to Who is the target audience for your TiddlyWiki(s)?:

Me, me and Me! :P
\ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_.tid b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_.tid new file mode 100644 index 0000000000..5ce57d63d1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text/2010 - Who is the target audience for your TiddlyWiki(s)_.tid @@ -0,0 +1,3 @@ +list: [[2010 - Who is the target audience for your TiddlyWiki(s)? - frankfurtkid - 2010-11-16T00:00:00.000Z]] [[2010 - Who is the target audience for your TiddlyWiki(s)? - mama - 2010-11-24T00:00:00.000Z]] [[2010 - Who is the target audience for your TiddlyWiki(s)? - rouilj - 2010-11-27T00:00:00.000Z]] [[2010 - Who is the target audience for your TiddlyWiki(s)? - passingby - 2010-11-27T00:00:00.000Z]] [[2010 - Who is the target audience for your TiddlyWiki(s)? - webid4me - 2014-09-23T23:00:00.000Z]] +tags: [[2010 - Interview Question]] +title: 2010 - Who is the target audience for your TiddlyWiki(s)? \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00001.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00001.json new file mode 100644 index 0000000000..c69efa0ced --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00001.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2017", + "joined-tw-community": "Yes", + "started-tw-community": "2021", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read and post in this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "Extensive use of TiddlyWiki in personal life, mainly for journalling, tracking activity and cataloging posessions. Strong use in work for knowledge sharing and instruction.", + "tw-ability-level": "I am comfortable writing filter expressions", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I wrote a set of batch scripts to pick up listed files from Download folder, place in live locations and backing up files with date timestamp files that were already in live location with the same name.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/bj/Calendar - 1.11.0\n  $:/plugins/inmysocks/WordCount - 5.1.10-prerelease\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "Throughout my wiki's I've used various plugins downloaded from community. This includes Projectify, Relink, Tekan,", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Looking forward to seeing what comes of project 2036 and achivements made on the path there. \nHoping to get more out of Tiddlywiki by going through Grok again (my first attempt through v1 and my brain began glazing over after a point).", + "project-weaknesses": "Only real fear if support dries up and browser updates break key functionality of Tiddlywiki.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00001", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00002.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00002.json new file mode 100644 index 0000000000..e6d58feaf4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00002.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2020", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Single location, where I gather information.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Nextcloud for TiddlyDesktop, Backup on filesystem-level for Node.js", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/SpartanDay 1\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: de-DE\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/wikilabs/click-effect\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.20+10024\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/flibbles/vis-network - 9.1.2\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "No", + "project-decision-trust": "Yes", + "project-strengths": "Open source allows all people to contribute. Perfect spot between writing content and linking content in a database-like structure.", + "project-weaknesses": "The initial learning curve for getting started is very steep. Thankfully there is Grok-TW.\nOne of my painpoints is synchronization with Android devices, which I haven't yet found a reasonable way to do.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00002", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00003.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00003.json new file mode 100644 index 0000000000..2a8baa429e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00003.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2021", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read and post in this community", + "use-discord": "I read and post in this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "It lets me keep all my notes in one, well-structured, easy-to-edit place; remix content and display it in different formats via programmatic templates; and visualize, search, and manipulate data.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Rad\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/themes/be-rad/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: zoomin\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/diceify,$:/config/shortcuts/streams-indent,$:/config/shortcuts/streams-unindent\nDisabled plugins: $:/plugins/TWaddle/pluginsize\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/ahahn/hoverWidget - 0.1.0\n  $:/plugins/ahahn/tinka - 0.5.2\n  $:/plugins/benwebber/list-inline - 0.2.3\n  $:/plugins/bimlas/kin-filter - 1.0.2\n  $:/plugins/cdr/external-js - 0.2.1\n  $:/plugins/D&DTools/d20.js - 1.1.0\n  $:/plugins/designthinkerer/bettercode - 0.0.1\n  $:/plugins/ebalster/formula - 0.2.5\n  $:/plugins/eskha/DelphesNotes/NotesMenu - 0.1.14\n  $:/plugins/eskha/DelphesNotes/SeeAlsoForMissing - 0.1.20\n  $:/plugins/eskha/DelphesNotes/SmartSearch - 0.1.13\n  $:/plugins/eskha/DelphesNotes/TagsSidebar - 0.1.16\n  $:/plugins/EvidentlyCube/AdvancedPerformance - 1.1.6\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.18\n  $:/plugins/felixhayashi/respawn - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.20+10024\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/flibbles/relink - 2.4.3\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/flibbles/vis-network - 9.1.3\n  $:/plugins/Gk0Wk/CPL-Repo - 2022.12.28\n  $:/plugins/Gk0Wk/drawio - 0.0.4\n  $:/plugins/inmysocks/GenTags - 0.0.6\n  $:/plugins/inmysocks/randVal - 0.1.3\n  $:/plugins/kookma/commander - 2.1.8\n  $:/plugins/kookma/favorites - 4.8.4\n  $:/plugins/kookma/section - 1.2.6\n  $:/plugins/kookma/shiraz - 2.9.21\n  $:/plugins/kookma/thinkup - 0.2.12\n  $:/plugins/kookma/todolist - 1.4.4\n  $:/plugins/kookma/trashbin - 1.3.4\n  $:/plugins/mklauber/shuffle - 1.0.2\n  $:/plugins/souk21/commandpalette - 0.0.9\n  $:/plugins/sq/macy - 0.0.9\n  $:/plugins/sq/selective-refresh - 0.0.1\n  $:/plugins/sq/spotlight - 0.0.5\n  $:/plugins/sq/sq-filters - 0.1.5\n  $:/plugins/sq/streams - 1.2.25\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n  $:/plugins/tiddlywiki/dynannotate - 5.3.6\n  $:/plugins/tiddlywiki/dynaview - 5.3.6\n  $:/plugins/tobibeer/appear - 0.6.4\n  $:/plugins/tobibeer/contains - 0.6.0\n  $:/plugins/tobibeer/rate - 0.6.2\n  $:/plugins/tobibeer/split - 0.8.1\n  $:/plugins/TWaddle/Boosters - 0.0.6\n  $:/plugins/TWaddle/ListTree - 1.0.5\n  $:/plugins/TWaddle/OverWrite - 0.0.2\n  $:/plugins/TWaddle/ScrollBack - 0.0.1\n  $:/plugins/TWaddle/SideEditor - 3.0.26\n  $:/plugins/TWaddle/Stylefields - 1.0.4\n  $:/plugins/wikilabs/advanced-search-plus - 0.4.2\n  $:/plugins/wikilabs/keyvalues - 2.2.0\n  $:/plugins/wikilabs/link-to-tabs - 2.2.0\n  $:/plugins/wikilabs/thin-scrollbars - 0.1.2\n  $:/plugins/wikilabs/uni-link - 2.2.8\n  $:/plugins/wilk/dictionary-table - 1.0.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
\n\n* Many of the plugin version numbers are probably misleading: I regularly use Tinka to edit and repack plugins for my own private use, which automatically increments the number.", + "tw-customisations": "- many custom stylesheets\n- a number of edit toolbar buttons not listed above\n- replaced select field input areas with textareas via Field Editor cascade\n- heavy use of the ViewTemplate and EditTemplate cascades\n- many macros/functions/procedures\n- modified $link widget", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I love how easy TW makes it to edit (nearly) anything, including itself. I'm also boundlessly grateful to the community for their generosity with their time and their own code, which continues to aid and inspire my work. I've very confident I could not have reached my current proficiency without their help.\n\nOf the future features I've seen mentioned, I'm most excited for multi-value variables and increased flexibility in procedure syntax.", + "project-weaknesses": "I'm slightly concerned about what I perceive as an increased reliance on AI assistance, both in coding (some users actively recommend using AI to write and publish plugins for public use) and in branding (like the new AI-generated version logo). I feel that it both undermines the long-standing TW principle that users should own their data and risks the proliferation of bad code by publishers who don't understand it well enough to fix it.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00003", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00004.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00004.tid new file mode 100644 index 0000000000..d4fb1d2cfd --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00004.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Consumer online storage (e.g. Google Drive, Dropbox) +diy-backup-info: +first-heard-survey: Talk TiddlyWiki +first-used-tw: 2005 +joined-tw-community: Yes +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Backwards compatibility, transparency with future developments. +project-weaknesses: Documentation, specific use-case versions, better 'Home' screen experience--think about what HyperCard did. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: 2014 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00004 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles +tw-customisations: Yes, I have extensive custom CSS that I wrote, since I am extremely proficient with CSS. +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: Yes +use-github-discuss: I do not engage with this community +use-mailing-list: I do not engage with this community +use-reddit: I do not engage with this community +use-ttw: I read and post in this community +value-of-tw: For the past 11 years, I could not have performed my daily job at the level I have without the use of TiddlyWiki. It is indispensable. I use it continuously throughout the work day. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00005.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00005.json new file mode 100644 index 0000000000..b48f4356a1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00005.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2006", + "joined-tw-community": "Yes", + "started-tw-community": "2011", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "RAD, especially Project management customized for my exact needs", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop;Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost;Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "NA", + "tw-customisations": "Many macros/procedures, widgets, filter operators myself. \n\nHandful of plugins from others like relink, editor autolist, autocomplete", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "No", + "project-strengths": "LOTS! Adding functionality and flexibility, stability, performance, great community (and moderation)!", + "project-weaknesses": "Need easy apps for mobile and easy syncing that’s secure & private, bad name, plain website, documentation is confusing, lots of different syntaxes, community links looks and functionality are poor - need easy adding and voting, need real concurrent multi-user capability, key add-ins like BOB get discontinued which is very painful.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00005", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00006.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00006.json new file mode 100644 index 0000000000..7b6aa1d847 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00006.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2008", + "joined-tw-community": "Yes", + "started-tw-community": "2018", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "I like that it can be very simple to use, but I have the option to \"go deep\" when needed. It's a local-first, single-file HTML document, which is a winning combination.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "TiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/TranquilHarmony\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/new-tiddler,$:/config/shortcuts/excise\nDisabled plugins: $:/plugins/EvidentlyCube/AutoComplete,$:/plugins/kookma/commander,$:/plugins/kookma/refnotes,$:/plugins/sq/quickimages,$:/plugins/tiddlywiki/bibtex\nPlugins: \n $:/core - 5.3.6\n $:/plugins/cdaven/markdown-export - 0.9.0\n $:/plugins/commons/file-uploads - 0.1.8\n $:/plugins/flibbles/relink - 2.5.0\n $:/plugins/kookma/shiraz - 2.6.9\n $:/plugins/sq/file-uploads-PUT - 0.1.2\n $:/plugins/telmiger/details - 0.7.6\n $:/plugins/TheDiveO/FontAwesome - 1.2.18\n $:/plugins/tiddlywiki/markdown - 5.3.6\n $:/plugins/tobibeer/random - 0.1.0\n $:/plugins/tobibeer/rate - 0.6.1\n $:/temp/info-plugin - \n $:/themes/odin/zacht - 0.1\n $:/themes/tiddlywiki/heavier - 5.3.6\n $:/themes/tiddlywiki/snowwhite - 5.3.6\n $:/themes/tiddlywiki/vanilla - 5.3.6", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Consistent steady improvement with sensible introduction of new features.", + "project-weaknesses": "Documentation. There is a lot of it, but much of it isn't helpful. For example, the notes about a feature dive directly into every possible scenario/option. Would prefer you pick a few common use cases and start there. Not easy, I know.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00006", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00007.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00007.tid new file mode 100644 index 0000000000..e04570a2d8 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00007.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: TiddlySpot / TiddlyHost;Git forge (GitHub, Gitea/Forgejo, GitLab);Consumer online storage (e.g. Google Drive, Dropbox);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...) +diy-backup-info: +first-heard-survey: Discord +first-used-tw: 2015 +joined-tw-community: Yes +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: user support/community, transparency in development +project-weaknesses: maybe some prebuilt empty sample single file tiddlywiki files with simple instructions for different uses, journaling, different types of note taking, etc. +publish-to-intranet: Yes, using a single-file wiki +publish-to-web: Yes, using a single-file wiki +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: Yes, and I am the only editor/administrator of my wiki(s) +started-tw-community: 2022 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00007 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles +tw-customisations: yes, often. +tw-future-confidence: Yes +use-discord: I read and post in this community +use-for-work-or-study: Not applicable (as retired, etc) +use-github-discuss: I do not engage with this community +use-mailing-list: I read/lurk, but do not post +use-reddit: I read/lurk, but do not post +use-ttw: I read and post in this community +value-of-tw: because it's cross platform I can use it on any of my devices and can easily share single file with anyone without any worry they will be able to use it +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00008.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00008.tid new file mode 100644 index 0000000000..e54ab56d60 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00008.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: DIY (any other solution);No automatic sync across my devices +diy-backup-info: Simple SFTP link, with manual tracking of the latest version (yes, I could do better, but it's quick and dirty) +first-heard-survey: Official newsletter +first-used-tw: 2024 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: You created TiddlyWiki +project-weaknesses: No idea, not long enough in the community +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00008 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: General organized notepad and brainstorming tool +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00009.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00009.json new file mode 100644 index 0000000000..2c0cb2ddf6 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00009.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2009", + "joined-tw-community": "Yes", + "started-tw-community": "2014", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "Easy editing of data before publishing.\nPersonal collections/databases\nManaging arbitrarily complex numerical data and provide insights for finances", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Manual backup, sync locally with Syncthing to mobile device", + "wiki-setup-info": "", + "tw-customisations": "Some local CSS styling, lots of view templates, some edit templates, and occasional use of macros", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "All aspects surrounding the philosophy of TiddlyWiki, like privacy, offline use, no services, no logins, no data collection, and no subscriptions.", + "project-weaknesses": "I don't see myself leaving TiddlyWiki any time soon, on the contrary I'd like to migrate more of my digital data to it.\n\nI'd love to see less fear of breaking backwards compatibility in the name of progress and innovation.\nImprove the visual and aesthetic aspect of using TiddlyWiki, especially usability on mobile/touchscreen.\nSimplify/unify the use/syntax of filters, variables, fields, macros, transclusions. If can be overwhelming for less technical users.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00009", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00010.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00010.tid new file mode 100644 index 0000000000..165b302e8e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00010.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: No automatic sync across my devices;N/A - I keep my wiki on a single system +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2004 +joined-tw-community: Yes +main-use-cases: Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Programming;Other +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: Image library +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Unhelpful answer: This is too much homework, sorry. +project-weaknesses: Nothing. Keep on keeping on. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: 2004 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00010 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript +tw-customisations: My wikis are development platforms akin to an IDE spread across 4 monitors (1 wiki using 4 screens). It's unrecognisable as a TiddlyWiki at first glance. +tw-future-confidence: Yes +use-discord: I read/lurk, but do not post +use-for-work-or-study: Yes +use-github-discuss: I read and post in this community +use-mailing-list: I read and post in this community +use-reddit: I do not engage with this community +use-ttw: I read and post in this community +value-of-tw: Oxygen to my brain. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00011.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00011.tid new file mode 100644 index 0000000000..b1cce91800 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00011.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: No automatic sync across my devices +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2023 +joined-tw-community: No +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: despite the changes the workflow remains the same, very clean and intuitive +project-weaknesses: I would like a better markdown support without using more than one plugins to have code highlight, a side panel with the titles and subtitle index and so on +publish-to-intranet: Yes, served through Node.js +publish-to-web: Not publishing to this location +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js +share-wikis: Yes, with multiple editors/administrators +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00011 +tw-ability-level: I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...) +tw-customisations: mostly some macros to have multiple page templates +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: incredibly fast access to notes and tips about the work and my self - written guides +wiki-setup-info: mostly I access the nodejs wiki in the intranet of the office but manually keep updated an HTML snapshot offline to access when out of the office \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00012.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00012.json new file mode 100644 index 0000000000..c19fa45642 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00012.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2008", + "joined-tw-community": "Yes", + "started-tw-community": "2009", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read and post in this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It is a convenient \"brain dump\" to keep my thoughts focused. I can take notes of my ideas and know, that I do not loose them. So I can go back later and refine the ideas. \n\nI collect links to interesting topics. I and copy paste content from the web to not loose it to link rot.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js", + "backup-method": "WebDAV;DIY (any other solution)", + "diy-backup-info": "I do have a NAS to backup all my important stuff. \nGitHub is an option too", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/input-confirm\nDisabled plugins: $:/plugins/wikilabs/webdav-lm\nPlugins: \n  $:/core - 5.3.3\n  $:/plugins/bj/tiddlyclip - 3.0.7a\n  $:/plugins/commons/file-uploads - 0.1.8\n  $:/plugins/flibbles/relink - 2.4.3\n  $:/plugins/flibbles/relink-variables - 2.4.1\n  $:/plugins/sq/webdav-utils - 0.2.0-pre\n  $:/plugins/tiddlywiki/bibtex - 5.3.3\n  $:/plugins/wikilabs/field-search - 1.0.1\n  $:/plugins/wikilabs/link-to-tabs - 3.0.1\n  $:/plugins/wikilabs/thin-scrollbars - 0.1.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I do like the Tiddlywiki community, because it is friendly and welcoming. This is a strong advantage over other communities. \n\nI would love to have an empty.html with a compressed core. So the wiki itself has a smaller file size.", + "project-weaknesses": "I personally will not leave TW in the near future. I am way to invested already and may \"link management\" wiki runs as a Windows WebDav service, which is active at startup.\n\nI may move the MWS TW to my NAS so I can access it from every device connected to the network.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00012", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00013.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00013.tid new file mode 100644 index 0000000000..a4c1124d0e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00013.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: No automatic sync across my devices +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2010 +joined-tw-community: Yes +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: (I don't have helpful answers to this question.) +project-weaknesses: (I don't have helpful answers to this question.) +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: 2012 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00013 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles +tw-customisations: Yes. Styles, macros, Javascript copied from various places and partielle written by myself. +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: Yes +use-github-discuss: I do not engage with this community +use-mailing-list: I read and post in this community +use-reddit: I do not engage with this community +use-ttw: I do not engage with this community +value-of-tw: I use it mainly as a database for various information. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00014.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00014.json new file mode 100644 index 0000000000..f7e22b4f92 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00014.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2022", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Ideas and knowledge don't get lost and become a very valuable resource to me.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "A docker container starts a node process for every wiki i have on a different port, around 15. A reverse proxy is configured to connect to those ports depending on the subdomain accessed. The data of all wikis lives in a folder that is shared using Syncthing. The other machines receiving the folder don't run Tiddlywiki, it's just nice to know access to the data does not depend on a single machine being available.", + "tw-customisations": "I did quite some customizing for certain use cases i wanted to cover with Tiddlywiki. In every case, after it was done and some time has passed, i came to the conclusion i should focus on content, not on \"features\". I want to keep it simple.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Communication is great, i can follow topics i am interested in on the talk.tiddlywiki.org and GitHub.\n\nThe community of TW is outstanding.\n\nMWS is important to me, but i am unsure if it's ready for everyone yet. I want to be sure before breaking my current setup, so i still wait for it to become more mature.", + "project-weaknesses": "I hope Tiddlywiki doesn't become too \"heavy\". The possibilities with filters/procedures/macros/widgets are surely great, but very overwhelming and sometimes quite frustrating, even with experience. Simple and powerful at the same time might be impossible. In some cases, maybe you should go with simple rather than powerful.\n\nI'd like the sidebar to look like a part of the application, visually.\n\nI fear that Jeremy could quit and development stops.\n\nI can't see myself stop using TW anyway.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00014", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00015.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00015.json new file mode 100644 index 0000000000..b6d8841b00 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00015.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2020", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Worldbuilding (e.g. for role-playing games);Other", + "other-use-cases": "Database for card collection tracking with a friend", + "use-for-work-or-study": "No", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "Its good for building lots of similar tiddlers with different data, often referenced on different tiddlers, and updating everything by changing one value.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Single-file wiki with TiddlyDesktop", + "backup-method": "WebDAV;DIY (any other solution)", + "diy-backup-info": "stored on a local NAS accessible over intenet", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.1\nCurrent palette: $:/palettes/Blue\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-boxed\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: bottom\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.1\n  $:/plugins/inmysocks/extrafilters - 0.0.1\n  $:/plugins/inmysocks/TiddlerTool - 5.1.10-prerelease\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.1\n  $:/themes/tiddlywiki/vanilla - 5.3.1\n
", + "tw-customisations": "some macros with javascript that do math (like converting pairs of dates to ages).", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I like that i can usually find solutions to new problems using online resources like the documentation and community support", + "project-weaknesses": "I'd like if there was an easier way to do math without making everything a list. I'd also like it if tiddler names in fields and other weird places could self update like tags do.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00015", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00016.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00016.tid new file mode 100644 index 0000000000..6e1136bc23 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00016.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: DIY (any other solution) +diy-backup-info: I make 100 backup copies of my wikis using a bash file (on Linux) and have already been able to recover some data this way. When I reach 100, the oldest wiki is automatically deleted. I also regularly back up everything to external storage devices. +first-heard-survey: tiddlywiki.com +first-used-tw: 2015 +joined-tw-community: Yes +main-use-cases: Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Programming +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: that everything is discussed openly and many decisions are made by voting or together. +project-weaknesses: I'm very happy with the work and the future of TW. Perhaps I'll have more time to contribute next year, since I'll probably be retiring then. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: 2019 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00016 +tw-ability-level: I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles +tw-customisations: +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: No +use-github-discuss: I read/lurk, but do not post +use-mailing-list: I read and post in this community +use-reddit: I do not engage with this community +use-ttw: I read and post in this community +value-of-tw: I've tried many tools. TW is the best. Tiddlywiki runs across all systems, and you always have everything important in one file, even encrypted (if you want). +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00017.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00017.json new file mode 100644 index 0000000000..3cef885233 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00017.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2005", + "joined-tw-community": "Yes", + "started-tw-community": "2018", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read and post in this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming;Other", + "other-use-cases": "So many different uses it's hard to list them. Many of them for public wikis meant for other users.", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Yes, using a single-file wiki;Yes, served through Node.js", + "publish-to-intranet": "Yes, using a single-file wiki;Yes, served through Node.js", + "value-of-tw": "It's far too difficult to summarize. It's become my Golden Hammer: every problem looks like a nail.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Multi-file wiki served through Node.js", + "backup-method": "TiddlySpot / TiddlyHost;Git forge (GitHub, Gitea/Forgejo, GitLab);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: PageTemplate link click move to top\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.3\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "I have a JSON file I drag onto nearly every new wiki, changing to fluid-fixed, faster animation, open-at-top layout, a togglable, default read-only mode, custom widths, and more.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "No", + "project-strengths": "Talk is a fantastic community. I believe Discord is as well, although I spend little time there, and almost none on Reddit.\n\nThere are many helpful members, various levels of expertise, and many people to learn from.\n\nThe community is very welcoming to new members and helpful for more experienced ones as well.", + "project-weaknesses": "1. Improved documentation.\n\n2. On GitHub, decisions are very slow to come; I think the work Jeremy is doing to spread the load should help. I would love it if some triage of open issues could within, say, two weeks, could categorize issues and PRs with something like `Still Discussing`/`5.3.8`/`5.3.9`/`5.4.0`/`5.5.0`/`6.0(TWX)` to give a sense as soon as possible of when a change might arrive.\n\n3. Improved documentation! Yes, again. We must consider separating docs out from the main site.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00017", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00018.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00018.json new file mode 100644 index 0000000000..8b71fac4d8 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00018.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2023", + "joined-tw-community": "Yes", + "started-tw-community": "2025", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I really like the \"Completeness\" of the solution in a single application.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-boxed\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/languages/en-US - 5.3.6\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I have to copy and paste a lot from the community.", + "positive-about-future": "No", + "tw-future-confidence": "No", + "project-decision-trust": "No", + "project-strengths": "I really like the longevity of the project. Its the main reason I use it but there are shiny new tools every year.", + "project-weaknesses": "For me, I almost elusively look for tools that if something should happen I can export them \"cleanly\" to a format that can be well interpreted such as markdown. I'm not very clear what my exit Strategy would be (quickly)\n\nTiddlywiki is awesome in that it can do anything but its really hard to understand what you SHOULD do vs CAN do. I have a hard time understanding what the BEST way to utilize the application as its pretty \"hacky\".\n\nI'm not sure who/how the governing body works or is funded", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00018", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00019.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00019.json new file mode 100644 index 0000000000..f68646ff5a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00019.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2010", + "joined-tw-community": "Yes", + "started-tw-community": "2020", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I use one or more TW's on a daily basis.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);DIY (any other solution)", + "diy-backup-info": "Over VPN (Google Remote Desktop), and Flash Drives.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/Gk0Wk/notionpage-backlink,$:/plugins/inmysocks/GenTags,$:/plugins/mat/field-value-selector\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/bj/tiddlyclip - 3.0.7a\n  $:/plugins/Gk0Wk/CPL-Repo - 2022.12.28\n  $:/plugins/Gk0Wk/notionpage-covericon - 0.0.14\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.5\n  $:/plugins/kookma/commander - 2.1.6\n  $:/plugins/kookma/search - 0.9.0\n  $:/plugins/kookma/shiraz - 2.8.2\n  $:/plugins/kookma/shiraz-callout - 0.6.0\n  $:/plugins/kookma/shiraz-formatter - 0.5.1\n  $:/plugins/sq/swiffy-slider - 0.0.1\n  $:/plugins/wikilabs/bundler - 0.5.2\n  $:/plugins/wikilabs/cheatsheet - 1.1.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "Several custom Stylesheets; a few Macros. Haven't really grasped Procedures yet...", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I like Jeremy's level-headed leadership.\n\nThe community never ceases to amaze with not only their brilliant ideas and solutions, but their willingness to share with others and really help out new users.", + "project-weaknesses": "I don't see myself ever abandoning TiddlyWiki unless some major, radical change occurs such as something rendering my past data inaccessible or something.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00019", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00020.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00020.json new file mode 100644 index 0000000000..8888b568a5 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00020.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2005", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It is like my second brain (personal knowledge management), password manager, project management tool, investing journal, to do list tracker amongst other things.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "DIY (any other solution);No automatic sync across my devices", + "diy-backup-info": "Copy to cloud based storage (dropbox, google drive)", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/SolarFlare\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/BTC/SidebarSlider,Draft of '$:/plugins/tiddlywiki/menubar'\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/ihm/tidgraph - 0.9.6\n  $:/plugins/kookma/favorites - 4.8.8\n  $:/plugins/kookma/pikaday - 0.7.0\n  $:/plugins/kookma/shiraz - 3.0.8\n  $:/plugins/kookma/shiraz-formatter - 0.6.0\n  $:/plugins/oeyoews/mermaid - 11.6.3\n  $:/plugins/orange/mermaid-tw5 - 0.3.8\n  $:/plugins/tiddlywiki/external-attachments - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/plugins/tiddlywiki/menubar - 5.3.7\n  $:/plugins/tiddlywiki/tw2parser - 5.3.7\n  $:/plugins/tobibeer/plantuml - 0.5.0\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/hidefurniture - 5.3.5\n  $:/themes/tiddlywiki/readonly - 5.3.7\n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
\n\nI also use TW Classic", + "tw-customisations": "Some minor CSS customisations in both TW Classic and TW5 for tables, and text and highlighting.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Its true open source and my data is mine and I can still access every data I have created on Tiddlywiki since I started using it in 2005.\nI appreciate the Multi Wiki Server idea", + "project-weaknesses": "Please make compatability with markdown better, especially with widgets and macros.\n\nPlease make cut and paste from web pages easier, similar to Microsoft Onenote for example, where a whole webpage with multiple images in amongst the text blocks can be copied and pasted into Onenote with a single command.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00020", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00021.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00021.tid new file mode 100644 index 0000000000..742b4e7946 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00021.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: N/A - I keep my wiki on a single system +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2011 +joined-tw-community: Yes +main-use-cases: Note-taking;Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Programming;Other +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: Interested in creating a Zettelkasten method in the tiddly wiki. but I need a primer for how it is organizaed. +positive-about-future: No +project-decision-trust: Yes +project-strengths: Keeping it clean - slow and steady growth. I think the principles you all are using are working well. +project-weaknesses: Documentation; an AI bot to write code for custom features may be helpful; a tutorial book that immerses the user into understanding the tool is would be helpful in understand the power of the tiddly wiki because we could explain it better, hence use it with others. I really think it needs to be written by a non-coder with a lot of examples. - Easier Modification of CSS parameters - can't stand the gray type need more contrast. Samples... samples...samples would help. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: 2015 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00021 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I have written custom HTML;I have written custom CSS styles +tw-customisations: Stylesheet modifcations only - would love to create more but I need a refresher on Javascript. +tw-future-confidence: No +use-discord: I do not engage with this community +use-for-work-or-study: Not applicable (as retired, etc) +use-github-discuss: I do not engage with this community +use-mailing-list: I read/lurk, but do not post +use-reddit: I do not engage with this community +use-ttw: I do not engage with this community +value-of-tw: I don't use it for day-to-day although I would like to. The components of it are not clear. While I can code I really can't see how the process fits together as I am a top down learner. I would love to introduce this tool to others who do not code as a tool for studying - +wiki-setup-info: not on this device. \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00022.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00022.json new file mode 100644 index 0000000000..0a19982598 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00022.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Other", + "other-survey-source": "I proposed and helped write this survey", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2022", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It is flexible to make any database I need for personal use. For example, I track every piece of media I consume for example, and I prefer having it locally. I know I can always depend on TiddlyWiki, and I find it helpful to follow link to link, which TiddlyWiki makes v. natural.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "WebDAV", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/DesertSand\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: text\nCurrent storyview setting: classic\nToolbar text setting: yes\nToolbar icon setting: yes\nButton class setting: tc-btn-boxed\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/link,$:/config/shortcuts/linkify,$:/config/shortcuts/mono-line,$:/config/shortcuts/quote\nDisabled plugins: $:/plugins/ahanniga/context-menu-plugin,$:/plugins/danielo515/ContextPlugin,$:/plugins/sq/quickimages\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/ahanniga/find-in-page-plugin - 0.3.0\n  $:/plugins/benwebber/tag-count - 0.2.2\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.20\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/flibbles/relink-fieldnames - 2.5.0\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/gsd5/core - 0.8.2\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/kookma/favorites - 4.8.8\n  $:/plugins/kookma/kara - 0.9.6\n  $:/plugins/kookma/section - 1.2.2\n  $:/plugins/kookma/shiraz - 3.0.8\n  $:/plugins/kookma/solution - 1.3.0\n  $:/plugins/kookma/trashbin - 1.3.5\n  $:/plugins/sk/SidebarHelp - 0.0.5\n  $:/plugins/sk/TableHelper - 0.0.4\n  $:/plugins/sobjornstad/3click2edit - 0.0.1\n  $:/plugins/sq/editor-autolist - 0.1.14\n  $:/plugins/tgrosinger/tw5-checklist - 0.0.15\n  $:/plugins/tiddlywiki/browser-sniff - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tobibeer/rate - 0.6.1\n  $:/plugins/TWaddle/ListTree - 1.0.4\n  $:/plugins/wikilabs/cheatsheet - 1.1.2\n  $:/plugins/wikilabs/link-to-tabs - 3.0.1\n  $:/plugins/wimmoermans/history - 0.8.2\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I often make special-purpose buttons to create tiddlers, which I tend to put in the sidebar. I just have one template I clone for that purpose. I have MediaWiki-style infobox fores my databases that I cribbed from the Kansas Railroads wiki.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Remaining a unique proposition in being software that truly is local-first and often local-only, as well as being able to run anywhere with basically no effort whatsoever.\n\nBeing a community of people who really care and think about why they use software. More importantly, people that really think out of the box. I have used a lot of geeky 'productivity' software, mostly from the Linux side (think suckless) and TW is the only community that doesn't care for labels, but just the best solution.", + "project-weaknesses": "The styling needs a revamp. The standard font sizes are a good indicator of that, especially on tabs. I think this change must come from the project itself.\n\nThe website should have its structure reconsidered and probably show less info upfront. We need new users.\n\nI'm wary of a gradual split in the ecosystem (core+plugin devs) between single-file and Node.\n\nThe standard distribution should be more featureful e.g. by shipping some plugins along w/ the core, which means supporting them too.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00022", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00023.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00023.json new file mode 100644 index 0000000000..459a03cbe2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00023.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2024", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read and post in this community", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I use TW mostly for my video game universe, integrating elements of journalling, task management, non-fiction research data-basing, hypertextual narrative design, and World Building. I work more in the audio world in REAPER, and prefer TWs similar community driven customizability", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom CSS styles", + "save-method": "Single-file wiki with TiddlyDesktop;Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe)", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/FlexokiDark EDITED 1\nCurrent theme: $:/themes/tiddlywiki/tight\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/benwebber/crosslinks,$:/plugins/Gk0Wk/TW5-CodeMirror-Enhanced,$:/plugins/kookma/favorites,$:/plugins/kookma/indexer,$:/plugins/linonetwo/itonnote,$:/plugins/tiddlywiki/comments\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/benwebber/tag-count - 0.2.2\n  $:/plugins/eucaly/titleme - 0.0.1\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.20\n  $:/plugins/Gk0Wk/CPL-Repo - 2024.11.25\n  $:/plugins/Gk0Wk/drawio - 0.0.7\n  $:/plugins/Gk0Wk/focused-tiddler - 0.0.3\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.6\n  $:/plugins/HCHaase/TOCgeneric - 2.2.1\n  $:/plugins/hoelzro/full-text-search - 1.1.0-4-g954307a\n  $:/plugins/jd/plainrevs - 0.0.20\n  $:/plugins/kixam/moment - 2.24.0\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/kookma/narenj - 0.5.0\n  $:/plugins/kookma/shiraz - 3.0.5\n  $:/plugins/kookma/shiraz-callout - 0.8.0\n  $:/plugins/kookma/shiraz-formatter - 0.6.0\n  $:/plugins/kookma/toc - 1.6.2\n  $:/plugins/kookma/trashbin - 1.3.4\n  $:/plugins/linonetwo/autocomplete - 0.4.0\n  $:/plugins/linonetwo/commandpalette - 2.0.2\n  $:/plugins/linonetwo/tidgi-ipc-syncadaptor - 0.1.0\n  $:/plugins/linonetwo/tidgi-ipc-syncadaptor-ui - 1.0.0\n  $:/plugins/linonetwo/title-caption - 0.3.1\n  $:/plugins/linonetwo/tw-calendar - 1.6.0\n  $:/plugins/linonetwo/tw-react - 1.0.0\n  $:/plugins/mabuqian/GuMo-Palettes - 0.1.1\n  $:/plugins/sk/FindReplace - 0.0.6\n  $:/plugins/telmiger/EditorCounter - 0.6.6\n  $:/plugins/telmiger/HarveyBalls - 0.0.6\n  $:/plugins/Telumire/Fonts - 0.0.2\n  $:/plugins/tg/chars-button - 0.0.11\n  $:/plugins/tg/layout - 0.5.13\n  $:/plugins/tg/leftmenu - 0.0.8\n  $:/plugins/tg/tiddlersbar - 0.0.22\n  $:/plugins/TheDiveO/FontAwesome - 1.2.22\n  $:/plugins/tiddlywiki/browser-sniff - 5.3.6\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/freelinks - 5.3.6\n  $:/plugins/tobibeer/appear - 0.6.2\n  $:/plugins/tobibeer/inc - 0.5.2\n  $:/plugins/tobibeer/xlist - 0.5.0\n  $:/plugins/xp/emoji-button - 0.2.2\n  $:/temp/info-plugin - \n  $:/themes/tg/mobie - 0.1.10\n  $:/themes/tiddlywiki/tight - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6-prerelease\n
", + "tw-customisations": "I use quite a few stylesheets which i have found through discussions in the community or on other tiddlys, often with my own customizations. \nI have a few custom macros built off others work to create structures for collapsible character bios and other similar structures.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "FOSS FTW! I personally love the decentralized community approach. I think discussions I've heard from the devs themselves sound like they are mostly going in the right directions, and the community has so many cool projects going. Since finding TW last year I've become a bit of an evangelist, showing it off to all my friends, and I don't think that will change any time soon the way its being run.", + "project-weaknesses": "I'll keep using TW, i adopted it because it felt sturdy for long-term use.\nI have no fears about TWs future.\nI don't really see any problems at all wit hthe TW community, its been so helpful and supportive to me. \nI might contribute more to the project if there were better mobile tools, thats the one thing that i feel hasn't caught up, beyond fully capitalized, italic, bold, SAVING haha, but i think thats well known. A better mobile app would really help me and others use it more, etc.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00023", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00024.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00024.json new file mode 100644 index 0000000000..afaeabf063 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00024.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2005", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, served through Node.js", + "publish-to-intranet": "Yes, served through Node.js", + "value-of-tw": "Note taking, incredibly flexible tool. Using it on daily basis, no other tool comes near to the TW functionality I need, use and appreciate.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable writing filter expressions;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Twilight\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/bimlas/asciidoctor,$:/plugins/tiddlywiki/codemirror,$:/plugins/tiddlywiki/comments,$:/plugins/tiddlywiki/katex\nPlugins: \n  $:/core - 5.3.6\n  $:/languages/cs-CZ - 5.1.19\n  $:/languages/de-DE - 5.1.19\n  $:/languages/sk-SK - 5.1.19\n  $:/plugins/bimlas/kin-filter - 1.0.0\n  $:/plugins/frd/simplecalendar - 0.2.16\n  $:/plugins/telmiger/HarveyBalls - 0.1.0\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.1.19\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.1.19\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.1.19\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.1.19\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.1.19\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/internals - 5.1.19\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tiddlywiki/qrcode - 5.1.19\n  $:/plugins/tiddlywiki/railroad - 5.1.19\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/plugins/tiddlywiki/tw5.com-docs - 5.1.19\n  $:/plugins/tobibeer/plantuml - 0.5.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/centralised - 5.1.19\n  $:/themes/tiddlywiki/heavier - 5.1.19\n  $:/themes/tiddlywiki/readonly - 5.1.19\n  $:/themes/tiddlywiki/seamless - 5.1.19\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/starlight - 5.1.19\n  $:/themes/tiddlywiki/tight - 5.1.19\n  $:/themes/tiddlywiki/tight-heavier - 5.1.19\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "no other customisations", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Covering obvious and not so obvious note-taking needs, and above all I appreciate the things are documented because I have no trouble to understand and follow up the documentation if and when I need to resolve something.", + "project-weaknesses": "Could you imagine yourself leaving TiddlyWiki? No way, it is absolutely essential tool for myself. \n\nThank You!", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00024", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00025.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00025.tid new file mode 100644 index 0000000000..2204fe1b20 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00025.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: TiddlySpot / TiddlyHost +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2008 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Other +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: I am an artist. I use it as my main professional website. +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: I love that it is open source and non-commercialised. I love the way the community responds and helps each other out. I like its DIY nature and that it is like a maker space. I am excited that TiddlyWiki could become what the world needs in a future of commercialised AI domination. Tiddlywiki is more than about providing tech solutions or innovation. It is about that of course but about doing that through journeying together. +project-weaknesses: Yes, if Tiddlywiki every commercialised and became like Notion or Evernote, I will leave. I am dyslexic, can't code, so I can't participate in the TW community. Most of what is written in the help for discussion forums I don't understand. Not only the technical stuff, but even the very basic stuff, e.g., I don't even know what a plugin is. If there is a some really BASIC training tutorials (like for an 8 year old) to help me understand the jargon/language, this would enable me to contribute. +publish-to-intranet: Not publishing to this location +publish-to-web: Yes, using a single-file wiki +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: Yes, and I am the only editor/administrator of my wiki(s) +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00025 +tw-ability-level: My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins +tw-customisations: no +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: As a dyslexic/neurodiverse person it has been ESSENTIAL for me because of the way information can be recorded in small bits (tiddlys) and be connected in an interrelated (neuro) network is really helpful because my brain can't retrieve or order information in neurotypical ways. +wiki-setup-info: I don't understand this instruction or how to follow it. \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00026.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00026.json new file mode 100644 index 0000000000..554bb77086 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00026.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2015", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "I have implemented a music player.", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "- TiddlyWIki is a great tool for note-taking.\n- I love my music player.", + "tw-ability-level": "I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "https://talk.tiddlywiki.org/t/easy-webdav-saving-a-la-timimi/12306", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/player-close-all-tiddlers,$:/config/shortcuts-mac/player-open-search,$:/config/shortcuts-mac/save-wiki,$:/config/shortcuts/cancel-edit-tiddler,$:/config/shortcuts/excise\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/anttt/highlight - 1.0.4-beta\n  $:/plugins/tiddlywiki/codemirror - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-fullscreen - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-keymap-vim - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "stylesheets, macros, functions, procedures and JavaScript", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "- infinite customisability\n- great community (Talk)", + "project-weaknesses": "- a standard saving mechanism for single file wikis that works on all browsers\nMy DIY solution (see above) is browser-independent, i.e., no browser extensions are required, but is a bit of a kludge as it requires external tools.\n- better documentation, also for developers", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00026", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00027.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00027.tid new file mode 100644 index 0000000000..6022682035 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00027.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Git forge (GitHub, Gitea/Forgejo, GitLab) +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2007 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Newletter. +project-weaknesses: Nothing. +publish-to-intranet: Not publishing to this location +publish-to-web: Not publishing to this location +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: Yes, and I am the only editor/administrator of my wiki(s) +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00027 +tw-ability-level: I am comfortable writing filter expressions +tw-customisations: I would like the history, settings, links, etc on the right to be further on the right by default so the tiddlers on the left side can take up 70% ish of the page instead of just 40% ish today. +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: I would lose my mind without TiddlyWiki. It helps me extensively manage my thoughts, notes, to-dos, meetings, personal, professional, etc. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00028.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00028.json new file mode 100644 index 0000000000..c5de86e003 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00028.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2024", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "My top 1 feature is single HTML wiki full encryption. Especially handy on non-rooted Android smartphones, which provide less flexibility to the end user, like running custom encrypted filesystems.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Syncthing, local Git/Fossil repositories", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/wilk/palettes/GraphiteDark090\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/ahanniga/find-in-page-plugin,$:/plugins/ihm/tidgraph,$:/plugins/wikilabs/tocP\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/danielo515/encryptTiddler - 2.5\n  $:/plugins/flibbles/relink - 2.4.4\n  $:/plugins/flibbles/relink-fieldnames - 2.4.1\n  $:/plugins/flibbles/relink-markdown - 2.4.0\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/flibbles/relink-variables - 2.4.1\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/hoelzro/full-text-search - 1.1.0-4-g954307a\n  $:/plugins/hoelzro/progress-bar - 0.0.1\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/sq/streams - 1.2.24\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-trailingspace - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/vuk/TW-UnitTest - 0.0.47\n  $:/plugins/wikilabs/bundler - 1.2.0\n  $:/plugins/wikilabs/field-editor - 1.1.0\n  $:/plugins/wikilabs/field-visibility - 1.0.1\n  $:/plugins/wikilabs/trails - 1.1.1\n  $:/plugins/wilk/copy-code-button - 1.0.3\n  $:/plugins/yaisog/ancestors-filter - 0.9.0\n  $:/plugins/yaisog/descendants-filter - 0.9.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "- user friendly community\n- regulars are intelligent and knowledgeable, yet not egomaniacs\n- the spirit of the comminity stays technical, there's no annoying zealotry about worshipping a weaponized Code of Conduct", + "project-weaknesses": "- a lot of generic solutions to particular problems remain in forum; this is a paradox that TiddlyWiki - a wiki (!) does not have an online editable \"source of truth\"(tm) edition a la Arch Wiki\n- the official TiddlyWiki docs are too much like a dry reference; the initiative to make GrokTiddlyWiki is not a silver bullet, but is a giant step in the right direction", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00028", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00029.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00029.json new file mode 100644 index 0000000000..303a9b1f3b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00029.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2012", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "I love TW5 for my work place a an awesome note taking and task manager\nI love TW5 for home to help me with my hobby of dungeons and dragons", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "You are very good at presenting information in a concise manner", + "project-weaknesses": "As someone who is not a programmer sometimes I get a little lost in the jargon of TW. I have tried using some plugins but sometimes the documentation is not written in a way a non programmer can understand. I get that it is a hard task to pair down some of the information. Also new videos showing different aspects of TW5 would be nice.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00029", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00030.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00030.json new file mode 100644 index 0000000000..5fb7e46a53 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00030.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2004", + "joined-tw-community": "Yes", + "started-tw-community": "2004", + "use-ttw": "I do not engage with this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Absolutely essential. I store all my money details, projects, travel info, purchases, user accounts and passwords into a password protected TW. I use an old version of Waterfox together with Tiddlyfox plugin to save content. I do not use this browser to access any other site.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);DIY (any other solution)", + "diy-backup-info": "I use an ancient version of Waterfox that runs the Tiddlyfox plugin allowing direct saving to a folder on MS Onedrive. I can pick up the TW file on my laptop and open it there. I do not use Waterfox to access the Internet. \nI would like to be able to share with a Mac laptop.", + "wiki-setup-info": "The information tool does not work with my current version 5.1.22.", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Easier saving of content.", + "project-weaknesses": "Make it easier to use across hardware platforms (including mobiles).", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00030", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00031.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00031.json new file mode 100644 index 0000000000..a2f327f69c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00031.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2022", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read and post in this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "As a platform for posting my poetry and blogging", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, served through Node.js", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "Databases, I use TiddlyWiki as a NOTION to build databases about books, films and games, but also task management, time management and more. The second is to use TiddlyWiki as the ultimate notes management library.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe)", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/CupertinoDark\nCurrent theme: $:/themes/linonetwo/itonnote\nCurrent layout: \nBrowser language setting: zh-CN\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: pop\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: bottom\nTiddler opening behaviour setting for navigations from within the story river: bottom\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/linonetwo/super-tag,$:/plugins/mabuqian/time-for-task\nPlugins: \n  $:/core - 5.3.7\n  $:/languages/en-US - 5.3.7\n  $:/languages/zh-Hans - 5.3.7\n  $:/plugins/benwebber/motion - 0.3.0\n  $:/plugins/chanilino/viz - 1.0.1\n  $:/plugins/EvidentlyCube/AdvancedPerformance - 1.1.4\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/flibbles/relink-fieldnames - 2.5.0\n  $:/plugins/flibbles/relink-markdown - 2.5.1\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/Gk0Wk/echarts - 0.2.13\n  $:/plugins/Gk0Wk/focused-tiddler - 0.0.3\n  $:/plugins/Gk0Wk/page-toc - 0.0.5\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.6\n  $:/plugins/inmysocks/IconMenus - 0.0.4\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/kookma/hsl - 1.2.1\n  $:/plugins/kookma/kara - 0.9.6\n  $:/plugins/kookma/refnotes - 1.9.0\n  $:/plugins/kookma/section - 1.2.2\n  $:/plugins/kookma/shiraz - 2.9.7\n  $:/plugins/kookma/shiraz-callout - 0.8.0\n  $:/plugins/kookma/tamasha - 0.6.1\n  $:/plugins/kookma/utility - 3.2.2\n  $:/plugins/linonetwo/autocomplete - 0.5.0\n  $:/plugins/linonetwo/commandpalette - 2.1.0\n  $:/plugins/linonetwo/github-external-image - 0.1.0\n  $:/plugins/linonetwo/in-tagtree-of - 0.2.0\n  $:/plugins/linonetwo/itonnote - 3.4.4\n  $:/plugins/linonetwo/open-in-external-app - 0.2.0\n  $:/plugins/linonetwo/opened-tiddlers-bar - 1.0.0\n  $:/plugins/linonetwo/source-control-management - 0.3.0\n  $:/plugins/linonetwo/tag-tree-picker-macro - 0.0.1\n  $:/plugins/linonetwo/tidgi-external-attachments - 1.5.2\n  $:/plugins/linonetwo/tidgi-ipc-syncadaptor - 1.0.0\n  $:/plugins/linonetwo/tw-mobile-sync - 0.9.0\n  $:/plugins/linonetwo/tw-react - 1.0.0\n  $:/plugins/mabuqian/gumo-customisation - 0.5.1\n  $:/plugins/mabuqian/PopControlPanel - 0.1.2\n  $:/plugins/mabuqian/TaskHub - 0.3.2\n  $:/plugins/mabuqian/xnote - 0.3.3\n  $:/plugins/mat/field-value-selector - 0.0.1\n  $:/plugins/nico/notebook-mobile - 1.0.0\n  $:/plugins/oeyoews/echarts-addons - 0.0.4\n  $:/plugins/oeyoews/neotw-play-sound - 0.3.0\n  $:/plugins/oeyoews/tiddlywiki-codemirror-6 - 3.8.0\n  $:/plugins/telmiger/HarveyBalls - 0.0.6\n  $:/plugins/telmiger/PluginSize - 1.0.1\n  $:/plugins/telmiger/rpn - 0.7.3\n  $:/plugins/tiddlywiki/browser-sniff - 5.3.7\n  $:/plugins/tiddlywiki/dynannotate - 5.3.7\n  $:/plugins/tiddlywiki/dynaview - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/jszip - 5.3.7\n  $:/plugins/tiddlywiki/qrcode - 5.3.7\n  $:/plugins/tobibeer/setvars - 0.6.0\n  $:/plugins/wikilabs/edit-tabs - 3.0.2\n  $:/plugins/xp/aggregation - 0.5.7\n  $:/plugins/xp/splashscreen - 0.2.2\n  $:/plugins/yaisog/choose-random-filter - 0.9.0\n  $:/plugins/yaisog/taggingtree-filter - 0.9.0\n  $:/plugins/yaisog/tagstree-filter - 0.9.0\n  $:/temp/info-plugin - \n  $:/themes/linonetwo/itonnote - 1.3.3\n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I made a lot of custom content for TiddlyWiki. Some of it is from solutions that have matured in the community, and some of it is modified by me. Some I modified from plugins. There are also some that I created by combining content from different plugins. There's so much.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "the TiddlyWiki community is very welcoming and always responds to questions when posted. Most of the time a solution is available.TiddlyWiki is a great piece of software, and I've played with the odd piece of software or programme, but they couldn't do it with the same kind of balance and elegance that TiddlyWiki does. More specifically, TiddlyWiki balances the average user with the advanced user and builds bridges when the average user will slowly dive deeper into TiddlyWiki.", + "project-weaknesses": "I can't get away from TiddlyWiki anymore. While I can find alternatives to keep the data, there's no way I can find one as special as TiddlyWiki. I'd love to contribute to TiddlyWiki, but my ability to recommend it to others or answer simple questions is too small. The biggest drawback of TiddlyWiki at the moment is that it doesn't have as diverse functionality as other software, and we're still missing a lot of great plugins for that.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00031", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00032.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00032.tid new file mode 100644 index 0000000000..2d6d9d4112 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00032.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: N/A - I keep my wiki on a single system +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2007 +joined-tw-community: Yes +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: A very helpful community that provides good answers to practically any problem. +project-weaknesses: Without effective marketing TiddlyWiki will lose its appeal to newcomers who want off the shelf solutions. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with TiddlyDesktop +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: 2023 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00032 +tw-ability-level: I have customised TiddlyWiki through options and plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: Not applicable (as retired, etc) +use-github-discuss: I do not engage with this community +use-mailing-list: I do not engage with this community +use-reddit: I do not engage with this community +use-ttw: I read and post in this community +value-of-tw: A very versatile tool for note taking. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00033.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00033.json new file mode 100644 index 0000000000..db70a797cc --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00033.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2021", + "joined-tw-community": "Yes", + "started-tw-community": "2021", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "I am in the process of building a historical knowledge base for myself and I chose TW because it's future-proof and it will be very easy to publish once I will be done.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable writing filter expressions", + "save-method": "Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "I don't know how to do this on Android. These are the main plugins I use:\n- Notebook theme\n- Autocomplete\n- Relink\n- Context Menu\n- Shiraz\n- Muuri\n- Command Palette\n- Locator\n- Freelinks\n- Tiddler Commander", + "tw-customisations": "Yes, but they are small modifications and they are AI generated. I don't have enough technical knowledge.", + "positive-about-future": "No", + "tw-future-confidence": "No", + "project-decision-trust": "Yes", + "project-strengths": "Maintaining backwards compatibility for such a long time is definitely something to applaud. The HTML format is also a big plus. The main reason I am using TW for my project is knowing that even in the distant future I will be able to open it and my work won't be lost.", + "project-weaknesses": "Tiddlywiki is just too difficult to use for non-technical people like me. For my personal notes I am using Obsidian simply because it's easier to use.\n\nNon-text files are difficult to work with. Setting up a Github saver with Canonical URI or something similar takes days for someone like me.\n\nIt would also be helpful if filters could be built using a UI. \n\nCompared to Obsidian or Notion, TW's user base is small, and I'm not too confident that TW will be able to complete in the long term.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00033", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00034.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00034.json new file mode 100644 index 0000000000..076462a5b3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00034.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2007", + "joined-tw-community": "Yes", + "started-tw-community": "2016", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read and post in this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Journalling", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "TiddlyWiki is a beautiful & fun & efficient way for me to take notes in my personal journal -- to enhance my life and share ideas with others", + "tw-ability-level": "I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "https://zhurnaly.tiddlyhost.com/ is my main wiki", + "tw-customisations": "i have added a Toki Pona font to my wiki CSS and have done a little other minor customization\n\ni have written Perl scripts to produce a static mirror of my wiki at https://zhurnaly.com/z", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "open public discussion on talk.tiddkywiki.com", + "project-weaknesses": "just keep up the fine work!", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00034", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00035.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00035.tid new file mode 100644 index 0000000000..5944a16a7c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00035.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Git forge (GitHub, Gitea/Forgejo, GitLab) +diy-backup-info: +first-heard-survey: Other +first-used-tw: 2021 +joined-tw-community: Yes +main-use-cases: N/A - Still experimenting/no set use case for TiddlyWiki +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: QQ friend +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: 代码优雅,设计精巧,哲学优美 +project-weaknesses: 性能!性能!还是性能!。除了性能,我觉得其它都很优雅。目前的性能真的不如人意 +publish-to-intranet: Yes, served through Node.js +publish-to-web: Not publishing to this location +published-plugin: Yes +save-method: Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe) +share-wikis: Yes, and I am the only editor/administrator of my wiki(s) +started-tw-community: 2021 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00035 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom JavaScript +tw-customisations: 自己写了一些插件,包括tid转图片、ob导入tid等等 +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: No +use-github-discuss: I read/lurk, but do not post +use-mailing-list: I do not engage with this community +use-reddit: I do not engage with this community +use-ttw: I read and post in this community +value-of-tw: 作为数字花园 +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00036.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00036.tid new file mode 100644 index 0000000000..fbd7da5b8e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00036.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: DIY (any other solution) +diy-backup-info: A python server and saver +first-heard-survey: Official newsletter +first-used-tw: 2010 +joined-tw-community: No +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: A native non node.js saver and hoster +project-weaknesses: Who will lead if not Jeremy? +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00036 +tw-ability-level: I have customised TiddlyWiki through options and plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Searchable thoughts with links to other captured thoughts +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00037.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00037.json new file mode 100644 index 0000000000..155442a763 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00037.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2018", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming;Other", + "other-use-cases": "Mobile app development platform, running on Tiddloid", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "Knowledge base for work related subjects, 2 apps (customized TWs running on tiddloid), many TWs for private projects...", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "DIY (any other solution);No automatic sync across my devices;N/A - I keep my wiki on a single system", + "diy-backup-info": "For cross-device wikis, I use syncthing to sync single file wikis folders", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: fr-FR\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/languages/fr-FR - 5.3.6\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/slaymaker1907/browser-nativesaver - 0.7.1\n  $:/plugins/sq/editor-autolist - 0.1.14\n  $:/plugins/telmiger/EditButtons - 1.1.0\n  $:/plugins/tiddlywiki/internals - 5.3.6\n  $:/plugins/tiddlywiki/menubar - 5.3.6\n  $:/plugins/tiddlywiki/savetrail - 5.3.6\n  $:/plugins/tw-FRed/tw5-checklist - 0.1.4\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "My wikis are created as instances of a private TW edition I built with official and community plugins, modified JS plugins, DIY customization (sometimes based on community resources).", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "What I like about TW : covers a wide spectrum from a simple future-proof single file html note-taking tool to a versatile and powerful development platform.\nI love TW helpful and devoted community.\nI like the project balance between stability and evolution.", + "project-weaknesses": "I should involve myself more, esp. financially.\nI see different users have different expectations/projects for TW, and I fear it might lead to a fork between privacy-versatility-simplicity-advocating community members, and (maybe younger) features-and-plugins-and-bells-and-whistles-advocating members.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00037", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00038.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00038.json new file mode 100644 index 0000000000..3f124d54ed --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00038.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2005", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "TW is my main information knowledge base, highly valued as it is self-controlled & so not reliant on an outside service and widely able to be accessed across multiple OSes / devices.", + "tw-ability-level": "My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/danielo515/searchNreplace - 1.2\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Compatibility with easy upgrading. Not particularly dogmaitc - for example integration of Markdown in the past etc.", + "project-weaknesses": "Tiddlywiki preferred / endorsed / led / managed single file save solution for the various browsers - Firefox and those that include Manifest 2, Manifest 3 browsers etc.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00038", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00039.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00039.json new file mode 100644 index 0000000000..47013ef2b2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00039.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2004", + "joined-tw-community": "Yes", + "started-tw-community": "2021", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "A lightweight wiki that I can customisable / style to my needs.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom JavaScript", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/tiddlywiki/codemirror\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.18.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "Basic javascript and macros, view templates to support task tracking.", + "positive-about-future": "Yes", + "tw-future-confidence": "No", + "project-decision-trust": "No", + "project-strengths": "Continuously putting out new releases, maintaining backwards compatibility.", + "project-weaknesses": "Having a node JS version for iOS/mobile would be fantastic as my wikis get too large for saving. Jeremy indicated he was starting this project but it has gone quiet. It is not great feedback is not provided to the community on progress.\n\nAlso a proper default save method should work out of the box. It is crazy for new users this is not the case, and is a massive barrier to adoption. Using PWA as our default just makes sense. Lightweight task management common, support out of the box.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00039", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00040.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00040.json new file mode 100644 index 0000000000..311fe3614a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00040.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2011", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It lets me manage my home and work lives how I want, securely, and in an amazingly future-proof way. I’ve changed task management systems at least three times, changed notes organization systems at least twice, and I rarely need to move anything when doing so. TW is amazing.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost;Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "I have a family of plugins, some of which contain custom stylesheets. I have studied the core plugin, and even done some local experiments in changing it. But I have stopped short of using JavaScript - that learning curve is not worth the cost for me.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "* Working on an open-source multi-user version\n* Adding support for filters with multi-value data\n* Continuing devotion to the original core values: Privacy, openness, longevity, and both kinds of free (beer and source modification)", + "project-weaknesses": "* Multi-line syntax for filters, with a system of conditionals appropriate for their semantics\n* True homoiconicity of data: Have the multi-value filters pass ENTIRE ACTUAL TIDDLERS around - or at least make this possible", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00040", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00041.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00041.json new file mode 100644 index 0000000000..c0f1d2482e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00041.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2022", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming;Other", + "other-use-cases": "building websites", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki;Yes, served through Node.js", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "TiddlyWiki provides a place to put stuff - notes, todos, project plans, blog posts, reference materials, etc. - and a framework for stitching those things together. It also provides a nice way to create a lightweight database / website.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);DIY (any other solution)", + "diy-backup-info": "I have a self-hosted git instance, and I use launchd / Siri Shortcuts to keep the git repo up to date.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/peter\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/EC-GoToModal,$:/config/shortcuts-mac/excise,$:/config/shortcuts-mac/layout-switcher,$:/config/shortcuts-mac/new-markdown-tiddler,$:/config/shortcuts-mac/new-tiddler,$:/config/shortcuts-mac/open-command-palette,$:/config/shortcuts-mac/py-quick-capture,$:/config/shortcuts-not-mac/new-markdown-tiddler,$:/config/shortcuts-not-mac/new-tiddler,$:/config/shortcuts/EC-AutoComplete,$:/config/shortcuts/excise,$:/config/shortcuts/link,$:/config/shortcuts/notebook-focus-search,$:/config/shortcuts/open-command-palette-command-mode,$:/config/shortcuts/open-command-palette-selection\nDisabled plugins: $:/plugins/Gk0Wk/notionpage-covericon,$:/plugins/souk21/commandpalette\nPlugins: \n  $:/core - 5.3.6\n  $:/languages/en-US - 5.3.6\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.20\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/flibbles/relink - 2.4.5\n  $:/plugins/flibbles/relink-markdown - 2.4.0\n  $:/plugins/Gk0Wk/CPL-Repo - 2024.11.25\n  $:/plugins/Gk0Wk/echarts - 0.2.13\n  $:/plugins/Gk0Wk/focused-tiddler - 0.0.3\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.24.0\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/kookma/tamasha - 0.6.1\n  $:/plugins/linonetwo/autocomplete - 0.4.0\n  $:/plugins/linonetwo/commandpalette - 2.0.2\n  $:/plugins/linonetwo/krystal - 0.7.0\n  $:/plugins/linonetwo/tw-react - 1.0.0\n  $:/plugins/linonetwo/tw-whiteboard - 1.7.0\n  $:/plugins/nico/projectify - 0.14.0\n  $:/plugins/telmiger/EditButtons - 1.1.0\n  $:/plugins/tiddlywiki/browser-sniff - 5.3.6\n  $:/plugins/tiddlywiki/external-attachments - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tobibeer/appear - 0.6.2\n  $:/plugins/TWaddle/pluginsize - 1.0.0\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/centralised - 5.3.6\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "* Custom stylesheets to turn on multi-column / grid-based layout for tiddlers\n* Custom \"HUD\" system for showing tiddlers on computer sidebar and phone background\n* Custom GTD system\n* Plugin (in-development, but early version used) to show TW in 3D", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "No", + "project-strengths": "I think the community is a supportive and welcoming environment. People help each other and share tips and tricks. I really like how focused TiddlyWiki is on privacy and autonomy. Jeremy is a great steward of the project and takes great care in steering TiddlyWiki.\n\nI'm very excited to follow the progress on 5.4.0!", + "project-weaknesses": "I'd like the project to go faster. Sometimes, pull requests with new features languish for months and await merging / discussion. It'd be good to review these with a working group and get them pushed along.\n\nI also want the project to \"branch out\". We should work on marketing TW to the \"PKM\" community as a real alternative, and speak about it.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00041", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00042.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00042.json new file mode 100644 index 0000000000..b06422e3a4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00042.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2021", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read and post in this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I transitioned from printed booklet of stats to Tiddlywiki as work wikia with data and visualisation not possible on paper. As I am somewhat of a walking database it aid me greatly as final, most authoritative reference source of many informations aka \"As I have wrtiiten\".", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/MyPalette\nCurrent theme: $:/themes/nico/notebook\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/kookma/commander,$:/plugins/kookma/refnotes\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/giffmex/Toggle! - 0.0.4\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/Gk0Wk/echarts - 0.2.13\n  $:/plugins/hoelzro/progress-bar - 0.0.1\n  $:/plugins/inmysocks/SearchableDictionary - 0.1.1\n  $:/plugins/inmysocks/StartupActions - 0.0.7\n  $:/plugins/kookma/shiraz - 2.9.7\n  $:/plugins/mklauber/shuffle - 1.0.2\n  $:/plugins/nico/notebook-mobile - 1.0.0\n  $:/plugins/oeyoews/medium-zoom - 0.0.7\n  $:/plugins/tiddlywiki/confetti - 5.3.7\n  $:/plugins/TWaddle/pluginsize - 1.0.0\n  $:/plugins/wikilabs/thin-scrollbars - 0.1.2\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I mostly use Shiraz plugin for most of the customisation. Sometime I also create custom CSS for some element just to be independent of plugin. I have Copilot help me with html and css.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Backward compatibility and platfrom independent. As much as it great ideologically some non-big tech solution require user to set up their own server - in the era user no not much beyond going to app store and press install on touch screen. I choosed Tiddlywiki because I can place that one single file on my OneDrive and use it cross-devices.\n\nAs web technology progress I'm looking forward to what would be possible with just html and css for my portable, single-file website.", + "project-weaknesses": "Tiddlywiki still looks like a product out of love from some small online hobbyist group. Even if it can do so much as not-taking, journal, or personal wiki. I found Tiddly because I want to create my work note as wiki, as in wikipedia or fandom wikia and not simply hierachical note ot chronological journal. A better example presentation or template from most basic school note to calendar UI for journal to sophisticate worldbuilding wikia might be needed to have user get what they can do.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00042", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00043.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00043.json new file mode 100644 index 0000000000..100e1ff331 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00043.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2019", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It's unique in it's use and flexibility. I highly value it and use it almost every week. I wish I could use it more but in my current situation I cannot.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/SolarizedLight\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I've simplified lately. but I love the Mehregan edition of tiddlywiki so much because it makes it easier for me to use the power of tiddlywiki with my limited knowledge.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Even though I still have some small complaints about tiddlywiki I can't not be satisfied with a free product that already offers so much. So thank you for updating it, keeping it available. Creating so many plugins and having a very friendly community. Improving this product while keeping it private. Being open so that those that have the capability can easily add plugins. I personally love the editions of tiddlywiki that are ready to use for beginners like me. Thank you, thank you very much!", + "project-weaknesses": "As a beginner it is sometimes difficult, or time consuming to look for different ways to do certain things. \nI already appreciate all that is done for beginners and just hope that some resources continue to be used to help beginners like myself use tiddlywiki more easily.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00043", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00044.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00044.json new file mode 100644 index 0000000000..2a5e2592c3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00044.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2008", + "joined-tw-community": "Yes", + "started-tw-community": "2008", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Store translation of a book from one language to another; Store notes on adventure games", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It is a place to collect and store technical notes that include mathematics.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I like the continued support for a single file TW that can be opened in a web browser.\nThe online community is friendly and helpful.", + "project-weaknesses": "The ways to save a local TW file still confuse me. I absolutely rely on Firefox and Timimi and if that combination no longer worked, I would be lost.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00044", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00045.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00045.json new file mode 100644 index 0000000000..af4de3d2b4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00045.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2010", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "My notes, ideas an tasks are all in the same place. All is available on all my platforms (different laptops). I can control it myself.", + "tw-ability-level": "I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: de\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/languages/de-DE - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "-", + "project-weaknesses": "-", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00045", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00046.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00046.json new file mode 100644 index 0000000000..5c34a5e0f5 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00046.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2018", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "Tiddlywiki is a tool I use all the time to organize my notes and sometimes share them.\nI customize it extensively using plugins, macros, procedures, and templates.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The community has been regularly updating the tool for many years. There are few bugs.", + "project-weaknesses": "Tiddlywiki remains complicated to use, whether for saving or customizing.\nIt's a powerful tool, but getting the most out of it requires advanced skills.\nIt's a shame that Tiddlywiki lost its French forum.\nThe tool remains unknown to those around me.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00046", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00047.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00047.json new file mode 100644 index 0000000000..54e12fc388 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00047.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2008", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "An nice way to organize my knowledge or my thoughts.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "Mathjax or Katex\nCodeMirror with vim (when it works or when I succeed to install it)", + "tw-customisations": "body.tc-body a.tc-tiddlylink {\n color: green;\n}\nbody.tc-body .uni-link {\n color: green;\n}\nbody.tc-body a.tc-tiddlylink-external {\n color: navy;\n text-decoration:none;\n}", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "It still works fine.", + "project-weaknesses": "Enable external edition for the server version. I mean I can edit the file on my filesystem and see in real time the modification either on the web or on TiddlyDesktop.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00047", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00048.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00048.tid new file mode 100644 index 0000000000..3388126113 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00048.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: WebDAV;DIY (any other solution);No automatic sync across my devices;N/A - I keep my wiki on a single system +diy-backup-info: https://codeberg.org/valpackett/tiddlypwa +first-heard-survey: Official newsletter +first-used-tw: 2014 +joined-tw-community: No +main-use-cases: As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Portability/archiveability are working well. Project is long-standing and has a good track record in my book. +project-weaknesses: I need some built-in system that allows multiple editors (at the same time)/roles/permissions. There is some progression towards that, but to me, that needs to be improved sooner rather than later. An improved undo/trash system (using a wonky plugin for that at the moment) is also something I'd consider basic functionality that is missing. Both whilst keeping the ability to download everything as a single html file, as that aspect of TiddlyWiki is paramount to me. +publish-to-intranet: Not publishing to this location +publish-to-web: Yes, using a single-file wiki;Yes, served through Node.js +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js +share-wikis: Yes, with multiple editors/administrators +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00048 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript +tw-customisations: I generally like to add an icon next to the wiki-title, as well as a background image/some generic theming. I add plugins depending on the type of project. +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: The ability to link all kinds of things to each other as well as its portability/archiveability make for the topmost reasons for picking TiddlyWiki for me. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00049.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00049.json new file mode 100644 index 0000000000..33b41284fb --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00049.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2010", + "joined-tw-community": "Yes", + "started-tw-community": "2011", + "use-ttw": "I do not engage with this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I use it as a database of various information bits.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop", + "backup-method": "No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/telmiger/x-tag\nPlugins: \n  $:/core - 5.3.5\n  $:/plugins/ahahn/tinka - 0.4.0\n  $:/plugins/flibbles/relink - 1.10.1\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.18.1\n  $:/plugins/kookma/tamasha - 0.4.3\n  $:/plugins/matabele/maketid - 0.0.4\n  $:/plugins/skeeve/newtiddler - 0.2.1\n  $:/plugins/telmiger/details - 0.7.6\n  $:/plugins/telmiger/EditorCounter - 0.6.6\n  $:/plugins/telmiger/listreveal - 0.3.30\n  $:/plugins/telmiger/reminders - 0.1.7\n  $:/plugins/telmiger/rpn - 0.7.3\n  $:/plugins/telmiger/todonow - 1.2.15\n  $:/plugins/telmiger/todonow/outlook - 0.1.2\n  $:/plugins/tgrosinger/tw5-checklist - 0.0.14\n  $:/plugins/tiddlywiki/codemirror - 5.3.5\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.5\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.5\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.5\n  $:/plugins/tiddlywiki/codemirror-keymap-vim - 5.3.5\n  $:/plugins/tiddlywiki/qrcode - 5.3.5\n  $:/plugins/wikilabs/bundler - 0.1.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "Yes. I added stylesheets and macros.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "(Sorry, no input, currently.)", + "project-weaknesses": "(Sorry, no input, currently.)", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00049", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00050.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00050.json new file mode 100644 index 0000000000..38d8569044 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00050.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2011", + "joined-tw-community": "Yes", + "started-tw-community": "2013", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "With all the shortcuts and streamlining that I implemented on top of the vanilla TW, I'd say it saves me about 50% of the work of finding information and tracking stuff like my own and others' tasks.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/mwi/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: delay\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: single\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: bottom\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/new-journal,$:/config/shortcuts-not-mac/new-journal,$:/config/shortcuts/close-current,$:/config/shortcuts/copy-title,$:/config/shortcuts/copy-title-list,$:/config/shortcuts/editor-popup-ifs,$:/config/shortcuts/editor-popup-link,$:/config/shortcuts/journal-down,$:/config/shortcuts/journal-up,$:/config/shortcuts/mono-line,$:/config/shortcuts/new-wiki-tab,$:/config/shortcuts/next-tiddler,$:/config/shortcuts/previous-tiddler,$:/config/shortcuts/startpage,$:/config/shortcuts/timetracker-modal,$:/config/shortcuts/toc-journal-down,$:/config/shortcuts/toc-journal-up\nDisabled plugins: $:/plugins/EvidentlyCube/AdvancedPerformance,$:/plugins/tiddlywiki/internals,$:/plugins/tiddlywiki/menubar,$:/plugins/tiddlywiki/powered-by-tiddlywiki,$:/themes/tiddlywiki/snowwhite\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/flibbles/relink - 2.4.4\n  $:/plugins/flibbles/relink-markdown - 2.4.5\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-keymap-sublime-text - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-trailingspace - 5.3.6\n  $:/plugins/tiddlywiki/dynannotate - 5.3.6\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/katex - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/plugins/yaisog/ancestors-filter - 0.9.0\n  $:/plugins/yaisog/choose-random-filter - 0.9.0\n  $:/plugins/yaisog/debug-log-filter - 0.9.2\n  $:/plugins/yaisog/descendants-filter - 0.9.0\n  $:/plugins/yaisog/random-filter - 0.9.2\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "All of the above. I have about 8 modified core widgets and 10 modified core templates.\nHowever, I mostly use my own templates, e.g. a single-tiddler view, completely reworked sidebar (with information on the tiddler that is shown), and custom task management.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "No", + "project-strengths": "The reference at tiddlywiki.com is extremely valuable and still being used as such after many years of programming. This relates mostly to the descriptions of the various elements such as filter operators and widgets, no so much the concepts.\nThe community at TW Talk can be very enlightening. There are some contributors (mostly the core programmers and Eric) whose posts I will read for every topic that I'm interested in. There are a few who mostly contribute noise that I tend to skip.", + "project-weaknesses": "Decisions are dominated by one person or others' interpretation of that person's wishes. PRs often seem to fizzle out because a small group of people dominate PR discussions with their opinions on what should be done and what not. Making PRs is a lot of work and being declared \"plugin-material\" too late in the process is frustrating.\nI would generally like to see a tighter Markdown integration and maybe even a preference towards Markdown for newly-created wikis to help new users.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00050", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00051.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00051.json new file mode 100644 index 0000000000..2953c1802b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00051.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2016", + "joined-tw-community": "Yes", + "started-tw-community": "2021", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Programming;Other", + "other-use-cases": "creation of a tool for monitoring diabetes and calculating insulin injections", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "Easy to use, incredibly scalable, with the hability to support various contents, activities, projects..", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js;Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...);DIY (any other solution);N/A - I keep my wiki on a single system", + "diy-backup-info": "syncthing or Proton Drive", + "wiki-setup-info": "", + "tw-customisations": "All my tiddlywiki are more or less heavily customized with html, css, edited interfaces.\nI regularly adjust the plugins I download to better suit my needs and I am starting to sable into developping my own plugins for some edgecases where I can't find any good solution.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "A long-standing project, open source, keeping backward compatibility when possible, but in the end not requiring updates, meaning I can still use old database without update if I fear it would break them.\nThe possibility to create so many things, from a simple note page to pretty complex apps.\nThe possibility to share codes and information easily, and the presence of an helpful community.", + "project-weaknesses": "More formatting option, maybe markdown support with bonus\nA good way to create a multi-user database (but that's a WIP).\nMost of Tiddlywiki.com is written from the perspective of an experienced user and is not beginner-friendly.\nSome preconfigured tiddlywiki editions could be useful. A custom builder that can suggest a list of add-ons based on intended use before allowing you do drag-and drop them in a few clicks could be an alternative, also being an introduction to plugins for beguiners.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00051", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00052.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00052.json new file mode 100644 index 0000000000..c0c2bbf9c0 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00052.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2007", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "TiddlyWiki is what I keep coming back to for personal knowledge management (at work). Its hierarchical tagging gives me more flexibility than other tagging systems I have come across.\n\nIt is only the lack of easy mobile editing/saving that means I don't use it more", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The longevity and community help means I am confident in its future. I am interested to see what saving mechanisms and the use of MWS might allow collaborative use in organisations.", + "project-weaknesses": "Obsidian is tempting due to the sheer size of the community, and therefore, plugins.\n\nUnfortunately, unless retirement ever comes along, I would find it difficult to contribute the time to help out more.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00052", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00053.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00053.json new file mode 100644 index 0000000000..1a8f019b44 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00053.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2010", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Central Hub (& Browser Homepage) for *all* my work, links, tasks, tools, systems, etc.", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It has helped me over many years to organize tons of open ends (and recently replaced Trello for that!), information on numerous topics (Programming, Linux, Job Articles), and provided easy access to all links and corporate tools in a single place. It's a wonderful beast!", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Automatic (robo)copy-job from one PC, via USB-Stick, to another", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/DarkTheme\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: de-DE\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/anstosa/tw5-markdown\nPlugins: \n  $:/core - 5.3.5\n  $:/plugins/tiddlywiki/markdown - 5.3.5\n  $:/plugins/tiddlywiki/menubar - 5.3.5\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "I have a folder full of tiddlers where I store customizations I use across Wikis (as it is way too complicated for me to build my own plugins, I'm not really a JS dev), including simple styles, complex widgets and stylings, as well as full new features and JS-macros", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "From my googling on problems/issues/help, and some Youtube stream recordings: super friendly community, very welcoming and open to suggestions, absolutely mega.\n\nVery strong (yet a bit confusing) set of functionality that allows customizing my wikis to a great extent.\n\nVery active development on the Wiki and the \"big\" plugins, with frequent fixes and very good/useful developments.", + "project-weaknesses": "Sometimes fiddling with Filters, Widgets etc. is very complicated, and not exactly easy for a Python dev like I am, as I have no clue on running node.js, only very basic knowledge and zero tooling on JavaScript, and tend do hack things together a lot.\nSometimes I struggle with TW concepts (like why would the text I see on screen not be the same that gets passed to the macro), and even more, have to google a lot for community answers to get the right idea to fix stuff. It's a complicated beast!", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00053", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00054.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00054.json new file mode 100644 index 0000000000..76d77f3cd6 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00054.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2020", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "A place where I can safely store, link, sort, and recall notes and thoughts, as well as a sandbox for building a UI to support my workflows for work and personal projects.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.2\nCurrent palette: $:/palettes/Twilight1\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-not-mac/highlight,$:/config/shortcuts-not-mac/permaview,$:/config/shortcuts/add-field,$:/config/shortcuts/advanced-search-sidebar,$:/config/shortcuts/cancel-edit-tiddler,$:/config/shortcuts/close-focused,$:/config/shortcuts/edit-focused,$:/config/shortcuts/focus-search,$:/config/shortcuts/focus-topbar-search,$:/config/shortcuts/indent,$:/config/shortcuts/navigate-home,$:/config/shortcuts/navigate-next,$:/config/shortcuts/navigate-previous,$:/config/shortcuts/new-tiddler,$:/config/shortcuts/permaview,$:/config/shortcuts/save-tiddler,$:/config/shortcuts/save-wiki,$:/config/shortcuts/stamp,$:/config/shortcuts/streams-delete,$:/config/shortcuts/streams-indent,$:/config/shortcuts/streams-promote,$:/config/shortcuts/streams-save-and-continue,$:/config/shortcuts/streams-save-multiple,$:/config/shortcuts/streams-unindent,$:/config/shortcuts/strikethrough,$:/config/shortcuts/toggle-sidebar 1,$:/config/shortcuts/toggle-topbar\nDisabled plugins: $:/plugins/admls/repopup,$:/plugins/benwebber/crosslinks,$:/plugins/danielo515/encryptTiddler,$:/plugins/Gk0Wk/codemirror-mode-tiddlywiki5,$:/plugins/kookma/favorites,$:/plugins/scribs/nav,$:/plugins/sk/BalanceCheck,$:/plugins/snowgoon88/edit-comptext,$:/plugins/tobibeer/preview\nPlugins: \n  $:/core - 5.3.2\n  $:/plugins/anstosa/tw5-markdown - 1.1.4\n  $:/plugins/danielo/packPlugin - 0.0.1\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/EvidentlyCube/AdvancedPerformance - 1.1.6\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.17\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/felixhayashi/vis - \n  $:/plugins/flibbles/relink - 2.1.4\n  $:/plugins/flibbles/relink-titles - 2.0.0\n  $:/plugins/giffmex/subsume - 1.0.2\n  $:/plugins/Gk0Wk/CPL-Repo - 2022.12.28\n  $:/plugins/Gk0Wk/drawio - 0.0.4\n  $:/plugins/Gk0Wk/echarts - 0.2.12\n  $:/plugins/Gk0Wk/echarts-stat - 1.2.0\n  $:/plugins/kiasu/RandomTiddlerButton - 1.0\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.24.0\n  $:/plugins/kookma/commander - 2.1.6\n  $:/plugins/sq/editor-autolist - 0.1.10\n  $:/plugins/sq/streams - 1.2.24\n  $:/plugins/tiddlywiki/codemirror - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-fullscreen - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.2\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.2\n  $:/plugins/tiddlywiki/internals - 5.3.2\n  $:/plugins/tiddlywiki/railroad - 5.3.2\n  $:/plugins/tobibeer/appear - 0.6.2\n  $:/plugins/tobibeer/random - 0.1.0\n  $:/plugins/TWaddle/HackSearch - 0.0.11\n  $:/plugins/TWaddle/RecentSys - 0.0.3\n  $:/plugins/wikilabs/edit-tabs - 3.0.0\n  $:/plugins/wikilabs/trigger - 0.2.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.2\n  $:/themes/tiddlywiki/vanilla - 5.3.2\n
", + "tw-customisations": "Custom HTML+CSS for topbars and menus involving edits made to shadows like the page template.\nMany custom procedures/macros for creating dynamic buttons, links, summary / \"todo list\" tables, webpage embeds, calculators, trackers.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "community involvement and feedback being strongly considered in decision making, and ongoing commitments to backwards compatibility including with select high-value third party plugins.\nI am excited for future improvements to UI and logic (filter operators, etc - not AI-driven) that will enable more powerful data management.", + "project-weaknesses": "Due to its self-contained status, I am confident that if TW were to \"die\" I would still be using it for a long time.\nThe main concern for the future is the dependence on one person to evaluate and finalize updates, but this is limited by the community contributions.\nMy relationship with TW and its community would change if use of the platform became dependent on AI or paid features. Although I am not anti-AI I do not want it to be integrated into core platform features.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00054", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00055.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00055.json new file mode 100644 index 0000000000..eacd9def63 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00055.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2008", + "joined-tw-community": "Yes", + "started-tw-community": "2014", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Yes, using a single-file wiki;Yes, served through Node.js", + "publish-to-intranet": "Yes, served through Node.js", + "value-of-tw": "Every new idea for using it can be tested immediately (even offline), which allows me to improve my practical skills and understanding of the tool. This is a pleasure that goes beyond simply solving my problem.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...);WebDAV", + "diy-backup-info": "", + "wiki-setup-info": "Here is a typical configuration. Most of my wikis are served with http or webdav on my Android phone (https://localhost:9999 for instance), which allows me to share some of them with desktop computers in my local network).\n
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/FlexokiLight\nCurrent theme: \nCurrent layout: \nBrowser language setting: fr\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/input-accept\nDisabled plugins: $:/plugins/flibbles/relink,$:/plugins/flibbles/relink-titles,$:/plugins/sq/node-files-PUT-support,$:/plugins/tiddlywiki/qrcode,$:/plugins/tiddlywiki/share\nPlugins: \n  $:/core - 5.3.7\n  $:/languages/fr-FR - 5.3.7\n  $:/plugins/commons/file-uploads - 0.1.8\n  $:/plugins/sq/file-uploads-PUT - 0.1.2\n  $:/plugins/sycom/leaflet - 0.8.6\n  $:/plugins/tiddlywiki/browser-storage - 5.3.7\n  $:/plugins/tiddlywiki/codemirror - 5.3.7\n  $:/plugins/tiddlywiki/filesystem - 5.3.7\n  $:/plugins/tiddlywiki/geospatial - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/internals - 5.3.7\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.7\n  $:/plugins/yaisog/debug-log-filter - 0.9.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "Yes, any of the things mentionned above but JavaScript.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Beyond its unusual community and its OSS nature, I love how TW leverages browser maintenance by giants like Apple, Google, etc: a huge advantage over standalone applications.\n\nThe two new features that I am most excited about are:\n- True multi-users ; \n- Two-ways syncronisation\nIn other words: MWS ;-) The fact that tiddlers get stored in an sqlite file brings an additional advantage of being easily modified by third party softwares, thus making full use of the two-ways sync.", + "project-weaknesses": "If we bend over backwards trying to please imaginary people who see TW as a no-effort service, I might just stop following TW's development and prefer to stick with an older, stable version indefinitely. Such people either don't exist, or they already have the tool they need (MS or Google Office).\n\nAlso what's missing from TW's documentation is a CSS tutorial. People often overlook that basic CSS skills are a prerequisite for creating appealing interfaces.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00055", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00056.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00056.tid new file mode 100644 index 0000000000..3d7157f5e1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00056.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: DIY (any other solution) +diy-backup-info: primarily file backups on external drives along with other backups +first-heard-survey: Discord +first-used-tw: 2025 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: personal organization. I have ADHD, always have a hundred projects going at once, and need a lot of help remembering and prioritizing +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: I am new to tiddlywiki so I can't help much here but I deeply appreciate open source projects and the way it helps me +project-weaknesses: I am new to tiddlywiki so I can't help much here, but I am disabled and would struggle to pay or subscribe to use the service. I also care a lot about privacy and would leave if I suspected my data could be compromised. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with TiddlyDesktop +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00056 +tw-ability-level: My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins +tw-customisations: not yet, but I will be exploring these customizations in the future +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Not applicable (as retired, etc) +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: tiddlywiki helps me track and organize all the facets of my life - what I'm cooking, what I'm crafting, friends I want to stay in touch with, things I want to learn, goals I want to work on... +wiki-setup-info: prefer not to answer \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00057.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00057.json new file mode 100644 index 0000000000..a9d7fade19 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00057.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Discord", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2021", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "N/A - Still experimenting/no set use case for TiddlyWiki", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Every few months I check back in with new TiddlyWiki developments (usually on the forum) and look at what awesome use cases people have found. TiddlyWiki is the Personal Knowledge Management software I'd like to use but not the one I currently use.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I've used Tailscale to expose the TiddlyPWA server to my other devices running Tailscale.", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "No", + "project-decision-trust": "Yes", + "project-strengths": "I find that TiddlyWiki really nailed the customization and adapt the software to the user aspects along with a great model for thinking about information as atoms or discrete units that optionally build up into bigger ideas/thoughts/content or what have you. I'm pretty sure I can wrangle any type of content as long as it runs in the browser into TiddlyWiki.\n\nAlso the community is really kind and supportive, the leadership actively engages with it and listens to feedback which is amazing.", + "project-weaknesses": "I could never settle into TiddlyWiki proper because while it can wrangle all types of content it still is pretty hard to insert that content in the first place and manage it. For example I can't use external tools to easily insert new tiddlers or slurp/ingest data from an API to then pull or push automagically into TW, in that regard I feel like I'm fighting the system. Because of that I find myself almost always returning to Emacs and org-mode due to easy and customizable capturing.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00057", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00058.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00058.json new file mode 100644 index 0000000000..880a38e6f7 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00058.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Reddit", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2025", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I have just started to use TiddlyWiki as my main note taking solution.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Twilight\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-rounded\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/sidebar-search\nDisabled plugins: $:/plugins/felixhayashi/hotzone,$:/plugins/felixhayashi/topstoryview\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.20\n  $:/plugins/felixhayashi/tiddlymap - 0.17.20+10024\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/flibbles/relink-fieldnames - 2.5.0\n  $:/plugins/flibbles/relink-markdown - 2.5.1\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/flibbles/relink-variables - 2.5.0\n  $:/plugins/flibbles/vis-network - 0.0.1\n  $:/plugins/ihm/tidgraph - 0.9.6\n  $:/plugins/mklauber/shuffle - 1.0.2\n  $:/plugins/sobjornstad/3click2edit - 0.1\n  $:/plugins/sobjornstad/TiddlyRemember - 1.4.0\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-keymap-sublime-text - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-keymap-vim - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/katex - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/plugins/tobibeer/appear - 0.6.2\n  $:/plugins/tobibeer/preview - 0.5.6\n  $:/temp/info-plugin - \n  $:/themes/odin/zacht - 0.1\n  $:/themes/tiddlywiki/heavier - 5.3.6\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I am only a few days into using TiddlyWiki so I don't think I can provide any valuable feedback yet, but I love that this is such an open and community driven project.", + "project-weaknesses": "I don't have a solid answer for that yet.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00058", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00059.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00059.json new file mode 100644 index 0000000000..16ad141da2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00059.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Discord", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2024", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It helps me organize information for individual characters, abilities, ideas, places and other story related stuff. Programs such as Obsidian or Logseq were not really my thing, TiddlyWiki on the other hand helped me customize and organize things in an easier, more readable way.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The project itself is simple but high quality, is very open (source on Github + local html files)\nCommunity seems very nice and interactive too!", + "project-weaknesses": "Unless I get convinced that there's something else that does what I want in a better way, I don't think so", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00059", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00060.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00060.tid new file mode 100644 index 0000000000..8c8582e952 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00060.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Consumer online storage (e.g. Google Drive, Dropbox) +diy-backup-info: +first-heard-survey: Hacker News +first-used-tw: 2022 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Not adding too much, making sure what is added works properly, +project-weaknesses: Better keyboard-based navigation would be nice. I also use simplenote and would actually prefer to do everything in TiddlyWiki but it currently easier to navigate solely by keyboard in SImpleNote. To-Dos could improve without much complication as could calendar-based events. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00060 +tw-ability-level: I have customised TiddlyWiki through options and plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Simple note-taker, cross-platform, easy to use, no bloat. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00061.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00061.json new file mode 100644 index 0000000000..ca4ed44d23 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00061.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2004", + "joined-tw-community": "Yes", + "started-tw-community": "2004", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Yes, served through Node.js", + "publish-to-intranet": "Yes, served through Node.js", + "value-of-tw": "Develop SAP/legacy systems work instructions and task sheets for specific job classifications.\nUsed to document and maintain status from daily production control briefings \n\nKnowledge base for gaming\nMaintain data driven performance metrics for guild.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Multi-file wiki served through Node.js", + "backup-method": "TiddlySpot / TiddlyHost;Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/GithubDark\nCurrent theme: $:/themes/jd/Mono\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/themes/jd/Whitespace\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/Gk0Wk/echarts - 0.0.9\n  $:/plugins/kookma/shiraz - 2.7.2\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/jd/Mono - 1.0.32\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
\n\n<$count filter=\"[all[tiddlers+shadows]]\"/> = 21119", + "tw-customisations": "Mostly stylesheets and a few specific macros/procedures to meet a need. Most are developed from tiddlytalk discussions or direct answers to my inquiries.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Consistency of TW over the years.\nThe tiddlytalk community\nPlugin developers\ntiddlyhost supporter, although my usage has waned since moving to my own server\nExcited for the future server versions in work", + "project-weaknesses": "I used TW for 20 years during my work life, and the portability of a single file wiki was key. Moving away from a single file would have ended my use. Although in my retired life and changing technology, I have embraced the nodeJS version.\n\nPut the name issue to rest. Hell I like Tiddlywiki or TWx. To much discussion continues and distracts.\n\nLearning JS I guess would lead me to contriubute more, but I am a python hack.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00061", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00062.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00062.json new file mode 100644 index 0000000000..d109760f19 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00062.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Reddit", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2016", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read and post in this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It's a very good information hub for all my projects, be it personal or professional.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: de\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/ak/plugins/TWCrossLinks\nPlugins: \n  $:/core - 5.3.6\n  $:/languages/de-AT - 5.3.6\n  $:/languages/de-DE - 5.3.6\n  $:/plugins/bj/tiddlyclip - 02.0.01\n  $:/plugins/Gk0Wk/echarts - 0.2.13\n  $:/plugins/oeyoews/echarts-addons - 0.0.3\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The TW community is very fast to react when a question is posted.", + "project-weaknesses": "I feel like TW is \"losing\" to Obsidian, but I'm not sure what can be done about it. Perhaps an easier way to share TWs with others?", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00062", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00063.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00063.json new file mode 100644 index 0000000000..393deee8c3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00063.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2018", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);Worldbuilding (e.g. for role-playing games)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Open format and multi platform notebook that can hold links, metadata, media, etc.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable writing filter expressions", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...);DIY (any other solution)", + "diy-backup-info": "Syncthing between my computers and phone with a backup to Dropbox", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/CupertinoDark\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/cancel-edit-tiddler,$:/config/shortcuts/input-cancel\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/kookma/refnotes - 1.9.0\n  $:/plugins/kookma/shiraz - 2.9.7\n  $:/plugins/kookma/shiraz-formatter - 0.6.0\n  $:/plugins/kookma/utility - 3.2.2\n  $:/plugins/tiddlywiki/async - 5.3.6\n  $:/plugins/tiddlywiki/browser-sniff - 5.3.6\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-keymap-vim - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-x-tiddlywiki - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n  $:/plugins/tiddlywiki/dynaview - 5.3.6\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/hammerjs - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/jszip - 5.3.6\n  $:/plugins/tiddlywiki/katex - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tiddlywiki/sax - 5.3.6\n  $:/plugins/tiddlywiki/text-slicer - 5.3.6\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "Previously used the Material themes, but removed once the built-in dark theme was better usable.", + "positive-about-future": "Yes", + "tw-future-confidence": "No", + "project-decision-trust": "Yes", + "project-strengths": "The open platform and wide range of community plugins. Especially important that I can use and access it on all of my devices including phone and separate computers.\nAlso especially critical that it runs without an external server, so I could use it for internships where my work couldn''t be disseminated or stored in external systems.", + "project-weaknesses": "I could see leaving for something like Obsidian. The recent surge in markdown note-taking and knowledge management systems is tempting, but I mostly stick to Tiddlywiki for familiarity and the setup I've already curated.\nIt does seem like TW has the possibility of getting stalled in development, particularly with one main developer.\nI think TW could use some improvements in loading performance, particularly with the NodeJS version which seems like it could be better optimized.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00063", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00064.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00064.json new file mode 100644 index 0000000000..9c5137aed2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00064.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2009", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It is my second brain or Zettelkasten containing my journals, daily activities, book notes, links, thoughts, status of personal projects, and other things I want to keep.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable writing filter expressions;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I use the Firefox timimi backup system on my desktop/laptop computers and the Quine 2 app backup system on my iPhone.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Twilight\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/columns-down,$:/config/shortcuts/columns-up\nDisabled plugins: $:/plugins/birthe/suitcase,$:/plugins/BTC/Muuri,$:/plugins/BTC/Muuri-Kanban,$:/plugins/BTC/PrintRiver,$:/plugins/jd/mob,$:/plugins/tesseract/Moments,$:/plugins/tiddlywiki/evernote,$:/plugins/tiddlywiki/menubar,$:/plugins/tiddlywiki/powered-by-tiddlywiki,$:/plugins/TWaddle/SideEditor\nPlugins: \n  $:/core - 5.3.7\n  $:/languages/en-US - 5.3.7\n  $:/plugins/ahahn/tinka - 0.5.0\n  $:/plugins/bj/Calendar - 1.11.0\n  $:/plugins/danielo515/encryptTiddler - 2.3\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/flibbles/relink-markdown - 2.5.1\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.24.0\n  $:/plugins/mrmattson/gtd - 0.0.9\n  $:/plugins/mrmattson/personalnotebook - 0.3.4\n  $:/plugins/mrmattson/spreadsheettable - 0.1.1\n  $:/plugins/OokTech/WordCount - 0.0.6\n  $:/plugins/orange/mermaid-tw5 - 0.3.7.1\n  $:/plugins/sukima/reveal-js - 1.1.1\n  $:/plugins/TheDiveO/FontAwesome - 1.2.22\n  $:/plugins/TheDiveO/TwFusejs - 0.9.3\n  $:/plugins/tiddlywiki/codemirror - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-keymap-vim - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-trailingspace - 5.3.7\n  $:/plugins/tiddlywiki/external-attachments - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/internals - 5.3.7\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/plugins/tiddlywiki/qrcode - 5.3.7\n  $:/plugins/wikilabs/link-to-tabs - 3.0.1\n  $:/temp/info-plugin - \n  $:/themes/jd/Mono - 1.0.32\n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/starlight - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I've made many customizations from macros/functions/procedures to JavaScript modules. I package up most of my edits in a \"personalnotebook\" plugin for personal use that has all of my preferred configuration settings, templates, and functionality.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I think there is a great culture of keeping the core \"dependency free\" and \"simple\". These seem relative to me, so I'll explain how one outsider (non-TW developer) sees it. There is a good tendency to slow adding new features to ensure cruft doesn't build in the core, everything else is for plugins. Dependency-free because many JavaScript libraries could be added that would do many of the things--writing custom JavaScript for TW means only what is needed gets written. This in-turn drives simple.", + "project-weaknesses": "I'm excited for the next major version of TW. So much as changed since 5.x.x was started--JavaScript and browser technology has gone through several generations. Thus, the next major version is a chance to choose best practices as the way forward, deprecate and remove previous ways of doing things, and driving opinionated ways of customization to people who aren't in the weeds of the code regularly. It's great to have many ways of doing things, but also it can cause confusion and abandonment.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00064", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00065.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00065.tid new file mode 100644 index 0000000000..f49cb2a4d1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00065.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...);DIY (any other solution) +diy-backup-info: I periodically sync my tiddlers to an encryted s3 bucket. +first-heard-survey: Talk TiddlyWiki +first-used-tw: 2019 +joined-tw-community: Yes +main-use-cases: Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: I love the userbase - My questions are always answere +project-weaknesses: I would love a way to host the wiki in a serverless cloud (lambda) method. I see that others have done it in the past, but I am not knowledgeable enough to get it working. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Multi-file wiki served through Node.js +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: 2021 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00065 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...) +tw-customisations: +tw-future-confidence: Yes +use-discord: I read/lurk, but do not post +use-for-work-or-study: Yes +use-github-discuss: I read/lurk, but do not post +use-mailing-list: I do not engage with this community +use-reddit: I do not engage with this community +use-ttw: I read/lurk, but do not post +value-of-tw: TW's flexible format makes it ideal for me - keeping all my non linear notes easisly accessible when I need it. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00066.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00066.json new file mode 100644 index 0000000000..de9efca90a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00066.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2024", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Structured notetaking in replacement of Microsoft OneNote.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Twilight\nCurrent theme: \nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/jd/plainrevs - 0.0.30\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I really appreciate the dedication to local first, privately usable software and longterm usability.", + "project-weaknesses": "I would appreciate the availability of more \"cookbook\" style tutorials that show how to use TW's structure to make useful applications. The reading list example that grokTW constructed would be an excellent use case.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00066", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00067.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00067.tid new file mode 100644 index 0000000000..4b363e01dd --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00067.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: Consumer online storage (e.g. Google Drive, Dropbox);DIY (any other solution) +diy-backup-info: keep copies in pen drive/or dropbox / or online storage +first-heard-survey: Other +first-used-tw: 2015 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: classic tiddlywiki +other-use-cases: static html pages- For eg., collection of youtube videos +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: it is excellent already.! Learning about customizations, plugins, style sheets, or theme tweaking is not easy-many small videos required, and a forum for help +project-weaknesses: no i wil not leave tiddlywiki, been 10 years with it. though would love to have better android usable app for it +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00067 +tw-ability-level: My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: one of the most amazing pieces of swiss-knife multiple use softwares ever. Would like to use it like a local blog too, with grid settings, and with tags /categories lie wordpress, and some easier theming options or templates +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00068.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00068.json new file mode 100644 index 0000000000..1cc4e6aff4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00068.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2014", + "joined-tw-community": "Yes", + "started-tw-community": "2016", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read and post in this community", + "published-plugin": "Yes", + "main-use-cases": "Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "I use it a lot as a personal notebook : journal, task magmt, aide-memoire, project logging ... And occasionally as a convenient way to publish some content, for example my personal webpage or some project documentation. Overall, TW has a huge value for organizing my content.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.1\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.1\n  $:/plugins/flibbles/relink - 1.5.3\n  $:/plugins/nico/projectify - 0.16.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.1\n  $:/themes/tiddlywiki/vanilla - 5.3.1\n
", + "tw-customisations": "depends which wiki", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I don't have time to read all the messages but I try to read important announcements, and as far as I can tell there has always been a friendly and cooperating tone to the discussions, and I assume the decisions made for TW. I think this is essential to both a good direction for TW and a reliable community of users.", + "project-weaknesses": "I'm a bit lost in all the channels, and I feel that I don't really follow TW news as much as I would like (but honestly this is mostly on me!).\n\nI often feel a bit shy when I ask a question on TW Talk, because I don't know if it's the right place to ask, I don't always know how to search, etc. Again, probably just me ;)", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00068", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00069.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00069.tid new file mode 100644 index 0000000000..518330d0d3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00069.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Neocities, Nekoweb, tiiny.host, omg.lol and similar services;DIY (any other solution) +diy-backup-info: I use syncthing to sync folders... i store a single file wiki locally and sync across devices. +first-heard-survey: Discord +first-used-tw: 2019 +joined-tw-community: No +main-use-cases: Note-taking;Task and project management (including CRMs);Producing/publishing interactive fiction;Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: No +project-decision-trust: Yes +project-strengths: The self-editing page stuff is good. The flexibility can be daunting but is ultimately good. The wiki format is very useful. The ability to control how and how many tiddlers are displayed is cool. Being plugin-friendly is very useful. The fact that it’s free, the fact that it’s import/export friendly for the most part... The drag and drop features are cool. +project-weaknesses: I’m currently phasing out of tw into just a folder full of sloppy mishmashed files, not because I want to, but because my story is humongous and my wiki is lagging so hard that I’ve lost important writing while editing directly in it. I first moved from google docs to TW for the same reason... googdocs crashed after chapter 13ish, tw crashes after about chapter 50. I’m sad my use case isn’t a neat fit for tw. I looked so hard to find a tool and tw was it. Im out of options. I have to diy it now. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00069 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I have written custom CSS styles +tw-customisations: I sometimes poke around but I can’t remember any specific changes. +tw-future-confidence: No +use-discord: +use-for-work-or-study: Not applicable (as retired, etc) +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: It has been a limited but useful resource for organizing and writing my fiction and worldbuilding. Being able to search and sort by tags has been especially useful, as well as being able to write in and display html and markdown pages with custom css. Color coded tags, too. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00070.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00070.tid new file mode 100644 index 0000000000..d574446026 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00070.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: N/A - I keep my wiki on a single system +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2018 +joined-tw-community: No +main-use-cases: As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Don't really know +project-weaknesses: Don't really know +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00070 +tw-ability-level: My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Not applicable (as retired, etc) +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Potentially useful tool (if I can overcome the learning barrier) +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00071.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00071.json new file mode 100644 index 0000000000..93ef37f387 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00071.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Discord", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2013", + "joined-tw-community": "Yes", + "started-tw-community": "2014", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Worldbuilding (e.g. for role-playing games);Other", + "other-use-cases": "Blog/journal for RPG group", + "use-for-work-or-study": "No", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Yes, served through Node.js", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "Easy note-taking and journalling as well as a structured representation of data/notes.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Nightly backup of the docker container folder to another cloud-based storage solution (Hetzner storage box).", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/heavier\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/commons/file-uploads,$:/plugins/kookma/commander,$:/plugins/sq/file-uploads-PUT,$:/plugins/tiddlywiki/codemirror,$:/plugins/tiddlywiki/codemirror-autocomplete,$:/plugins/tiddlywiki/codemirror-mode-markdown\nPlugins: \n  $:/core - 5.3.6\n  $:/languages/de-DE - 5.2.5\n  $:/plugins/.mr/snr - 1.0.7\n  $:/plugins/kookma/refnotes - 1.8.5\n  $:/plugins/kookma/shiraz - 2.7.4\n  $:/plugins/kookma/shiraz-callout - 0.6.0\n  $:/plugins/kookma/shiraz-formatter - 0.5.1\n  $:/plugins/kookma/timelines - 1.3.0\n  $:/plugins/kookma/toc - 1.5.0\n  $:/plugins/kookma/trashbin - 1.2.4\n  $:/plugins/oeyoews/tiddlywiki-fancybox-ui - 5.0.11\n  $:/plugins/snowgoon88/edit-comptext - 0.8.1\n  $:/plugins/sq/node-files-PUT-support - 0.1.1\n  $:/plugins/tesseract/CleverNote - 1.0.49\n  $:/plugins/tesseract/Moments - 0.6.17\n  $:/plugins/TheDiveO/FontAwesome - 1.2.21\n  $:/plugins/tiddlywiki/comments - 5.2.5\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/telmiger/navigator - 0.2.1\n  $:/themes/tiddlywiki/centralised - 5.2.5\n  $:/themes/tiddlywiki/heavier - 5.2.5\n  $:/themes/tiddlywiki/seamless - 5.2.5\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/starlight - 5.2.5\n  $:/themes/tiddlywiki/tight - 5.2.5\n  $:/themes/tiddlywiki/tight-heavier - 5.2.5\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "Some customisations to the sidebar and some filtered lists to show only certain information on the main page.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "TW appears to be powerful & complex enough so that more clever people than me can write plug-ins and extensions but at the same time it is simple enough that I as a non-developer can use it and can even customise it rather easily.", + "project-weaknesses": "N/A.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00071", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00072.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00072.json new file mode 100644 index 0000000000..9ad6e1ac4d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00072.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2015", + "joined-tw-community": "Yes", + "started-tw-community": "2016", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "An open source tool for writing, thinking and knowledge management. A CMS and an application development framework in a single web page. Store and run app and data for the public or keep it private. Perfect for lists with additional power from transclusion, filters and widgets.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "No automatic sync across my devices;N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.2\nCurrent palette: $:/palettes/Twilight\nCurrent theme: \nCurrent layout: \nBrowser language setting: de\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.2\n  $:/plugins/telmiger/Btx - 0.1.3\n  $:/plugins/telmiger/EditButtons - 1.0.7\n  $:/plugins/telmiger/EditorCounter - 0.6.6\n  $:/plugins/telmiger/Lox - 0.0.1\n  $:/plugins/telmiger/simple-search - 1.0.27\n  $:/plugins/telmiger/Stx - 0.1.2\n  $:/plugins/telmiger/Tix - 0.1.1\n  $:/plugins/tgrosinger/tw5-checklist - 0.0.15\n  $:/plugins/tiddlywiki/qrcode - 5.3.2\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.2\n  $:/themes/tiddlywiki/vanilla - 5.3.2\n
", + "tw-customisations": "The design is highly customisable thanks to the telmiger/..x-plugins", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The phantastic community shares themes, macros, plugins, ... and is very helpful in general.", + "project-weaknesses": "Leaving TW is no option for me, but I might be conservative regarding future updates that break compatibility with my plugins. My current setup works very well. \nA new business model or sponsor might be needed to support a healthy way forward (for core devs at least).\nI have contributed a lot to the project and the community for some time, now I contribute to other projects. \nSome (returning) discussions in the community seem unproductive to me, for example the search for a new name.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00072", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00073.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00073.tid new file mode 100644 index 0000000000..c91f83f9fa --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00073.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: No automatic sync across my devices +diy-backup-info: +first-heard-survey: Talk TiddlyWiki +first-used-tw: 2021 +joined-tw-community: Yes +main-use-cases: As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: I appreciate the feedback of the community if I'm not able to fix an issue / filter or an idea. +project-weaknesses: Manny thanks to all - I'm happy to have this tool! +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with TiddlyDesktop +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: 2021 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00073 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I have written custom CSS styles +tw-customisations: Stylesheets +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: No +use-github-discuss: I do not engage with this community +use-mailing-list: I read and post in this community +use-reddit: I do not engage with this community +use-ttw: I read and post in this community +value-of-tw: I'm happy to have a text based and so nice tool! +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00074.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00074.tid new file mode 100644 index 0000000000..bb6c074bd4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00074.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: DIY (any other solution);No automatic sync across my devices;N/A - I keep my wiki on a single system +diy-backup-info: FreeFileSync +first-heard-survey: Discord +first-used-tw: 2017 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: NA +project-weaknesses: NA +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with TiddlyDesktop +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00074 +tw-ability-level: I have customised TiddlyWiki through options and plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: NA +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00075.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00075.json new file mode 100644 index 0000000000..8417083132 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00075.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2018", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It is note taking on steroids and I can custom build my task management and create structures for semantic data.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I have written custom HTML;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop", + "backup-method": "No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: fr-FR\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.5\n  $:/plugins/adithyab/cmplus - 0.2.2\n  $:/plugins/kookma/shiraz - 2.8.1\n  $:/plugins/kookma/shiraz-callout - 0.6.0\n  $:/plugins/kookma/shiraz-formatter - 0.5.2\n  $:/plugins/kookma/utility - 2.6.1\n  $:/plugins/TheDiveO/FontAwesome - 1.2.22\n  $:/plugins/tiddlywiki/codemirror - 5.3.5\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.5\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.5\n  $:/plugins/tiddlywiki/filesystem - 5.3.5\n  $:/plugins/tiddlywiki/highlight - 5.3.5\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.5\n  $:/plugins/wikilabs/edit-tabs - 3.0.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "I built my own task management system with HTML, CSS and filters and the help of community solutions to common problems. I made some slight modifications to the core plugins, mainly for rendering purposes.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The community is active and updates are fairly regular which helps to hold on to the learning curve and is a source of motivation.", + "project-weaknesses": "Right now I don't see myself leave TW as there is no self hosted or \"portable\" equivalent: I'm not admin on my work computer and there is no other way for me to optimise my personal productivity.\nI'm afraid that TW developpment might stop before it reaches a \"perfect\" or \"close to perfect\" maturity.\nUnfortunately I do not have enough time to get more involved in the community and have no great developper skills to do so.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00075", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00076.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00076.json new file mode 100644 index 0000000000..f4fe619413 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00076.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2020", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I have multiple large Tiddlywikis that I use as a reference/knowledge base for my hobbies. I use them everyday.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/CaptivateTan\nCurrent theme: $:/themes/cdr/captivate\nCurrent layout: $:/themes/cdr/captivate/ui/PageLayout\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: top\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/Gk0Wk/sidebar-resizer,$:/plugins/sq/Stories\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/cdr/colorlab - 0.2.0\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/flibbles/relink - 2.0.0\n  $:/plugins/kiasu/RandomTiddlerButton - 1.0\n  $:/plugins/kookma/shiraz - 2.7.5\n  $:/plugins/snowgoon88/edit-comptext - 0.8.1\n  $:/plugins/sq/editor-autolist - 0.1.10\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tobibeer/random - 0.1.0\n  $:/plugins/wikilabs/link-to-tabs - 2.0.1\n  $:/temp/info-plugin - \n  $:/themes/cdr/captivate - 0.2.0\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I have created many macros that are used throughout my wikis. I also have a custom style sheet. I have not modified anything in core.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I really like the fact that my wiki is completely browser based and doesn't have to run in the cloud. I am not worried about having to convert all my information because the developer \"went out of business\" or \"no longer supports the platform\". I also like the fact that I have never had an issue when upgrading Tiddlywiki.", + "project-weaknesses": "I love Tiddlywiki and use it on a daily basis. One of my wikis has a lot of images. I would like to see better handling of external images such as an image gallery. ODBC/JDBC connections to databases would also be nice as I have information in other DBs. One of these DBs has 40K+ entries where I can do statistics on the data, which is not easy to do in Tiddlywiki.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00076", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00077.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00077.json new file mode 100644 index 0000000000..b02ade8529 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00077.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Discord", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read and post in this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Easy way to manage collections of knowledge.\nI have some for ttrpg games.\nI have one for notes on Linux installations.\nAnother for recipes.\nEtc.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop;Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe)", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/plugins/frakier/AdventureCore/palettes/ac\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: bottom\nTiddler opening behaviour setting for navigations from within the story river: bottom\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/ahahn/tinka - 0.5.2\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.20+10024\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/flibbles/vis-network - 9.1.3\n  $:/plugins/frakier/AdventureCore - 1.0.17\n  $:/plugins/frakier/title-optional - 0.1.13\n  $:/plugins/frakier/toc-walk - 1.0.8\n  $:/plugins/TWaddle/LeftBar - 2.2.0\n  $:/plugins/TWaddle/ListTree - 1.0.4\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "Made a custom palettes, a few plugins, used a example I found online to make the title-optional plugin and the toc-walk plugin. I frequent the discord page TiddlyWiki5 so many knowledgeable people and they are always helping people and each other out.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "That would take an essay to accomplish.", + "project-weaknesses": "Web browsers moving more towards limiting the browsers in the name of protecting us from ourselves and breaking things such as TW.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00077", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00078.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00078.json new file mode 100644 index 0000000000..2ff2e013f2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00078.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Discord", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2024", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read and post in this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Journalling", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Cross platform", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Multi-file wiki served through Node.js", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "Journaling with time tracking echarts, manually importing data into journal fields", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I can search data by commands on node js wiki.\nJs benefits.", + "project-weaknesses": "Plugin Customization experience is not good, its been long time since i customized it. but i remember some flaws which i encountered & now forgot. Iirc it was lack of customization compare to tools like emacs.\n\nI think, in survey, it is good to ask \"do you use TiddlyWiki everyday or weekly or monthly\"\n\nLooking forward to tiddlymultiwikiserver or name like that", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00078", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00079.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00079.json new file mode 100644 index 0000000000..72f874a2dc --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00079.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Reddit", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2006", + "joined-tw-community": "Yes", + "started-tw-community": "2003", + "use-ttw": "I do not engage with this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read and post in this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I have a work TiddlyWiki that is past 15 years old. I had played a bit with TW prior, although I hadn't really Wiki-ized my own notes. I started parallel TWs for personal use and my gaming hobby. I lightly customize with plugins, but some of my plug-ins are years old.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-CA\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.3\n  $:/plugins/bj/Calendar - 1.11.0\n  $:/plugins/flibbles/relink - 2.2.0\n  $:/plugins/Gk0Wk/CPL-Repo - 2023.12.9\n  $:/plugins/Gk0Wk/drawio - 0.0.7\n  $:/plugins/tesseract/Moments - 0.6.17\n  $:/plugins/tiddlywiki/katex - 5.3.3\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "It works, daily, for decades through updates! Will my children inherit my TiddlyWiki .html files and laugh over my notes at some point?", + "project-weaknesses": "Maybe some more conversion/print tools? Calendar/journalling features? It's tough because plug-ins solve so many problems, but replacing more popular plugin types with built-in features might help with future support?", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00079", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00080.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00080.json new file mode 100644 index 0000000000..39bc474484 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00080.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Discord", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2011", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "For personal and professional organizing of information, to do lists, project management, journaling", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The best thing is that it doesn't break my wiki (mostly) through updates. I am confident that it will be functional for the coming decades\nFor the future: Better multi user interaction. Easier syncing only of the tid that has changed, ai apis, improve mobile app, calendar and task integrations (eg caldav)", + "project-weaknesses": "No comment", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00080", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00081.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00081.json new file mode 100644 index 0000000000..e6bd273b42 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00081.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2004", + "joined-tw-community": "Yes", + "started-tw-community": "2005", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Pretty good value when I use it", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/FlexokiDark\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: minimal\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/new-tiddler,$:/config/shortcuts-not-mac/refresh\nDisabled plugins: $:/plugins/jd/mob,$:/plugins/TWaddle/LeftBar\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/danielo515/2click2edit - 0.1\n  $:/plugins/danielo515/encryptTiddler - 2.3\n  $:/plugins/Gk0Wk/codemirror-themes - 0.0.1\n  $:/plugins/Gk0Wk/CPL-Repo - 2024.5.22\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.6\n  $:/plugins/kiasu/RandomTiddlerButton - 1.0\n  $:/plugins/kookma/commander - 2.1.2\n  $:/plugins/kookma/favorites - 4.8.5\n  $:/plugins/kookma/shiraz - 2.5.1\n  $:/plugins/snowgoon88/edit-comptext - 0.8.1\n  $:/plugins/souk21/commandpalette - 0.0.7\n  $:/plugins/sq/editor-autolist - 0.1.10\n  $:/plugins/tesseract/CleverNote - 1.0.49\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tobibeer/random - 0.1.0\n  $:/plugins/yaisog/single-tiddler-view - 1.0.0\n  $:/temp/info-plugin - \n  $:/themes/jd/Mono - 1.0.32\n  $:/themes/odin/zacht - 0.2\n  $:/themes/tiddlywiki/centralised - 5.3.6\n  $:/themes/tiddlywiki/seamless - 5.3.6\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/tight - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "You take community ideas and feedback seriously", + "project-weaknesses": "The greatest fear is a future change in the browser's security models which will cripple TW abilities.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00081", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00082.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00082.json new file mode 100644 index 0000000000..9a0d3216ee --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00082.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2022", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Flexibility, no lock-in", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "WebDAV", + "diy-backup-info": "", + "wiki-setup-info": "The guts is a bit of Apache config that allows WebDAV with a RequireAny block allowing any of\n\nanything from my home IPv4/6\nwith some nonce in the URL (which shortcuts on my mobile devices have)\nwith HTTP auth so I can somebody else's computer (typically at the computing museum where I volunteer)", + "tw-customisations": "some extra CSS to make borders even narrower and tweak colours very slightly. In addition to the Trashbin plugin remove normal bin button from edit view as it is too easy to blow a tiddler away otherwise.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Communications and forward-planning.", + "project-weaknesses": "For the beginner some easily-digestible blurb on the options for hosing, single file vs. not. Guess this will all in a state of flux with MWS.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00082", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00083.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00083.json new file mode 100644 index 0000000000..b657989014 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00083.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2014", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki;Yes, served through Node.js", + "publish-to-intranet": "Yes, served through Node.js", + "value-of-tw": "Daily driver to manage rand reflect on my day, organize my work and life, document education, worldbuilding.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);DIY (any other solution)", + "diy-backup-info": "Syncing files with Synthing, editing and publishing via Node.js server. Creating local git commits as backups / version history.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/new-week,$:/config/shortcuts/link,$:/config/shortcuts/list-subtask,$:/config/shortcuts/list-task,$:/config/shortcuts/list-time,$:/config/shortcuts/new-week\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.5\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.16.1+9773\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/felixhayashi/vis - 4.21.0-SNAPSHOT\n  $:/plugins/snowgoon88/edit-comptext - 0.8.1\n  $:/plugins/TheDiveO/FontAwesome - 1.2.18\n  $:/plugins/tiddlywiki/filesystem - 5.3.5\n  $:/plugins/tiddlywiki/highlight - 5.3.5\n  $:/plugins/tiddlywiki/markdown - 5.1.14\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.5\n  $:/temp/info-plugin - \n  $:/themes/telmiger/bricks-004 - 0.0.7\n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "I have a custom stylesheet to render checkboxes, in addition to a daily journal tidder I have a weekly tiddler (with weekly goals, tasks and a journal summary), and a custom \"dashboard\" tiddler that shows an overview of projects, open tasks, and a custom table of contents.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Incredibly robust and fast product, I never had problems upgrading (even very large and old wikis), it just works. New features are announced non-intrusively (I'm not forced to use them). Open and transparent community with a big heart. Thank you for everything!", + "project-weaknesses": "I did not find a good setup to sync wikis to my mobile devices (iOS and Android). I would love an app where I could run a local Node.js version and point it to a directory of tiddlers. Syncing these tiddlers could be done outside the app.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00083", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00084.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00084.json new file mode 100644 index 0000000000..9a34fdd3b1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00084.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2010", + "joined-tw-community": "Yes", + "started-tw-community": "2015", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming;Other", + "other-use-cases": "Backend for tracking inventory etc.", + "use-for-work-or-study": "No", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Great backend for custom plugins to manage/store/record various things (i.e. beekeeping).", + "tw-ability-level": "I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Multi-file wiki served through Node.js", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Part of nightly home server backup", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/SpartanNight\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/flibbles/relink-titles,$:/plugins/tiddlywiki/cecily\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/flibbles/relink - 2.4.5\n  $:/plugins/tiddlywiki/filesystem - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "JS Macros, ViewTemplates, Cascades", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Open communication and asking users for input before making decisions that might impact the system.\nVery helpful and friendly community of pro-users that help even for very niche questions.\nLooking forward to MultiWiki becoming mature so I can combine my numerous Node instances.", + "project-weaknesses": "More documentation in regards to interacting with TW via JS. Creating custom JS macros involves a lot of trial and error until the correct method is found and which parameters to pass in.\n\nDocumentation for some filter operators is confusing (i.e. jsonextract vs jsonget).\n\nAlso overall support for JSON could be improved so plugins do not need to rely on field names which causes collisions. Proposition: a parsejson operator", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00084", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00085.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00085.json new file mode 100644 index 0000000000..5060c79243 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00085.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Other", + "other-survey-source": "First I had contact to TW classic years ago- I came to it by internet search for nice tools. later I came back to TW5.", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2006", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I use TW to take meeting minutes, hold a document list with tracking releases, correspondance to the documents (it's not a real DMS but more a structured link collection), hold a contacts data base, and collect information (knowledge DB).", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Eberhard\nCurrent theme: $:/themes/tiddlywiki/tight\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: top\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/next-slide,$:/config/shortcuts/previous-slide\nDisabled plugins: $:/plugins/danielo515/2click2edit,$:/plugins/Gk0Wk/codemirror-themes,$:/plugins/sk/Indents,$:/plugins/tgrosinger/tw5-checklist,$:/plugins/tiddlywiki/codemirror,$:/plugins/tiddlywiki/codemirror-autocomplete,$:/plugins/tiddlywiki/codemirror-closebrackets,$:/plugins/tiddlywiki/codemirror-closetag,$:/plugins/tiddlywiki/codemirror-fullscreen,$:/plugins/tiddlywiki/codemirror-mode-css,$:/plugins/tiddlywiki/codemirror-mode-htmlembedded,$:/plugins/tiddlywiki/codemirror-mode-htmlmixed,$:/plugins/tiddlywiki/codemirror-mode-javascript,$:/plugins/tiddlywiki/codemirror-mode-markdown,$:/plugins/tiddlywiki/codemirror-mode-xml,$:/plugins/tiddlywiki/codemirror-search-replace,$:/plugins/tiddlywiki/comments,$:/plugins/tiddlywiki/dynannotate,$:/plugins/tiddlywiki/dynaview,$:/plugins/tiddlywiki/menubar,$:/themes/tiddlywiki/readonly\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/Gk0Wk/drawio - 0.0.7\n  $:/plugins/Gk0Wk/echarts - 0.2.13\n  $:/plugins/Gk0Wk/focused-tiddler - 0.0.3\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.24.0\n  $:/plugins/kookma/kara - 0.9.7\n  $:/plugins/kookma/section - 1.2.2\n  $:/plugins/kookma/shiraz - 3.0.10\n  $:/plugins/kookma/shiraz-callout - 0.8.0\n  $:/plugins/kookma/shiraz-formatter - 0.6.2\n  $:/plugins/kookma/trashbin - 1.3.6\n  $:/plugins/mklauber/math.js - 1.1.2\n  $:/plugins/oeyoews/font-geist - 0.1.0\n  $:/plugins/oeyoews/tiddlywiki-codemirror-6 - 3.9.2\n  $:/plugins/orange/mermaid-tw5 - 0.3.8\n  $:/plugins/sendwheel/tw-receiver - 0.0.5\n  $:/plugins/sk/TableCols - 0.0.6\n  $:/plugins/sk/TableHelper - 0.0.4\n  $:/plugins/Speff/typograms-tw5 - 1.0.6\n  $:/plugins/tiddlywiki/jszip - 5.3.7\n  $:/plugins/tiddlywiki/katex - 5.3.7\n  $:/plugins/tiddlywiki/powered-by-tiddlywiki - 5.3.7\n  $:/plugins/tiddlywiki/xlsx-utils - 5.3.7\n  $:/plugins/tobibeer/appear - 0.6.2\n  $:/plugins/tobibeer/dict - 0.6.0\n  $:/plugins/tobibeer/plantuml - 0.5.0\n  $:/plugins/TWaddle/SideEditor - 3.0.12\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/tight - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I use some self programmed macros.\nFurther I have a user CSS style sheet, where I copied in recommendations from the community and adopted them.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "It's quite a little tricky to understand the concepts behind TW as a non programmer. I fiddled around long time to figure out how I could achieve things. The community was quite helpfull for this.\nI'm looking foreward for v5.4.0 with the dynamic parameters for macro/procedure/function calls. I hope, this makes some of my ideas possible.", + "project-weaknesses": "As said above ... maybe there could be some more non-geek functions being available to customize TW.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00085", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00086.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00086.json new file mode 100644 index 0000000000..a773a66f43 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00086.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Discord", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2018", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I read and post in this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "For me, TW is primarily an extensible platform with which I can shape tools to help me. The portability and compatibility of the single HTML-file is a great boon.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Syncthing.", + "wiki-setup-info": "", + "tw-customisations": "I try to make my changes update-compatible, so I primarily stick to shaping and adding to the core by CSS, functions/procedures and the occasional JS.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "From what I've seen of the comments regarding TW itself, the dev team seems to have a good balance between retaining the expected functionality of TW, its legacy implementations and the general computing principle that I think lies at the heart of the project while steadily moving forward and adapting new technology as it becomes mature.", + "project-weaknesses": "I think the core HTML/CSS layout is getting rather dated and could benefit quite a lot from moving into a more current FlexBox/Grid setup. Not only would it likely make it more consistent and easier to read, but also easier to customise.\n\nAlso, while I gather the TW core has gotten a lot less messy in recent iterations, there is definitely more work to do here. It can be bewildering to wrap your head around.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00086", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00087.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00087.tid new file mode 100644 index 0000000000..25b745c6c0 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00087.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: DIY (any other solution) +diy-backup-info: I have a NodeJs TW running inside a Proxmox LXC and scheduled automatic backups for the entire LXC +first-heard-survey: Talk TiddlyWiki +first-used-tw: 2023 +joined-tw-community: Yes +main-use-cases: Task and project management (including CRMs) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: The community appeals because it values ideas/contributions not based on who did them but the raw value of them, all oriented to build a better TW for us all. +project-weaknesses: I don’t imagine leaving, If I had the time/skills I would probably contribute more +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: 2025 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00087 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable writing filter expressions +tw-customisations: Not much in production +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: No +use-github-discuss: I read and post in this community +use-mailing-list: I do not engage with this community +use-reddit: I do not engage with this community +use-ttw: I read and post in this community +value-of-tw: It gives me sense of empowerment, I see it as the tool to build tools. +wiki-setup-info: Answering from iPhone, can’t drag plugins now \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00088.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00088.tid new file mode 100644 index 0000000000..e2fe498cfe --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00088.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: TiddlySpot / TiddlyHost +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2023 +joined-tw-community: No +main-use-cases: Worldbuilding (e.g. for role-playing games) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Very straight forward to use, very stable, it just works. +project-weaknesses: How to use materials are a bit difficult to find... +publish-to-intranet: Not publishing to this location +publish-to-web: Yes, using a single-file wiki +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: Yes, and I am the only editor/administrator of my wiki(s) +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00088 +tw-ability-level: My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Gives an easy to navigate home for my worldbuilding project. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00089.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00089.json new file mode 100644 index 0000000000..cddbef4154 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00089.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2022", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "Used on scientific production systems which cannot connect to internet and seldom can be updated. \nWorks without internet by customers. \nOn Dropbox, works even in China, as Journal, Ticket and operation manual. \nI wish could be like advanced ticketing system.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);DIY (any other solution)", + "diy-backup-info": "task scheduler : weekly powershell backup script. -> xcopy to archive\\wiki.week.0x.html", + "wiki-setup-info": "", + "tw-customisations": "No.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "It will continue working after 10 years\nIt is open source\nIt can be easily updated.", + "project-weaknesses": "1) Timini plug-in was difficult to install in chrome in a closed env. (No internet). Grok TW seems good. \n2) I would like to have a kind of Demo Wiki. Showing a minimal Jira ticketing system. With : tool name & model & serial, part numbers, incident or ticket number, issue description, status: open, ongoing, cancelled, closed. Your community size would increase. \n3) with Dropbox on my iPhone, I can see my wiki, but not work on it.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00089", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00090.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00090.json new file mode 100644 index 0000000000..9e528a3622 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00090.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2022", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "Tiddlywiki gives me the opportunity to design tools in a very different way from what I've done in the past. It develops my creative potential and makes me want to go further.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: fr-FR\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.3\n  $:/languages/fr-FR - 5.3.3\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.5\n  $:/plugins/kookma/commander - 2.1.7\n  $:/plugins/kookma/shiraz - 2.9.0\n  $:/plugins/tiddlywiki/codemirror - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.3\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "tiddlers in the sidebar, various css styles (for fonts, hr, tables, list, etc.), macros, edit the field sort order, templates for displaying different types of data, customised shortcut keys", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I find the community open and welcoming. Experienced users spend an incredible amount of time and energy sharing the fruits of their labour and their knowledge with those who need it. The possibility of consulting several wikis together seems to me to be a very promising way forward.", + "project-weaknesses": "I really appreciate the fact that TW is designed to preserve data over the medium to long term. Many projects, even important ones, can become obsolete very quickly. I think TW could gain many more users by highlighting (even more than it does now) the diversity of projects that have been made possible by it.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00090", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00091.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00091.tid new file mode 100644 index 0000000000..71ffd2a909 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00091.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: No automatic sync across my devices +diy-backup-info: +first-heard-survey: Talk TiddlyWiki +first-used-tw: 2017 +joined-tw-community: Yes +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Keep it open, and free for everyone +project-weaknesses: Create some ofical plugin library +publish-to-intranet: Yes, served through Node.js +publish-to-web: Yes, served through Node.js +published-plugin: No +save-method: Multi-file wiki served through Node.js +share-wikis: Yes, with multiple editors/administrators +started-tw-community: 2020 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00091 +tw-ability-level: I have written custom JavaScript +tw-customisations: +tw-future-confidence: Yes +use-discord: I read/lurk, but do not post +use-for-work-or-study: Yes +use-github-discuss: I read/lurk, but do not post +use-mailing-list: I read/lurk, but do not post +use-reddit: I read/lurk, but do not post +use-ttw: I read and post in this community +value-of-tw: A place to all my notes +wiki-setup-info: Muy personal pkms , and note taking, also a wiki to mánage muy garden, and another to mánage my drawer of stuff \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00092.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00092.json new file mode 100644 index 0000000000..9cfd791186 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00092.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2010", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Datenbank für Musiktitel/CDs", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It's a good tool to collect knowledge, information and find them, when I need. I have it on my handy, so I can access them easily and quickly. This database consists of various contents including software usage, professional knowledge, music theories, physics, statistics, etc.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/FlexokiLight\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: de\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/findreplace,$:/config/shortcuts/htmlconvert\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/languages/de-DE - 5.3.6\n  $:/plugins/danielo/keyboardSnippets - 0.0.5\n  $:/plugins/ebalster/formula - 0.2.3\n  $:/plugins/sk/FindReplace - 0.0.4\n  $:/plugins/sk/HTMLConvert - 0.0.4\n  $:/plugins/tiddlywiki/katex - 5.3.6\n  $:/plugins/tiddlywiki/menubar - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/heavier - 5.3.6\n  $:/themes/tiddlywiki/seamless - 5.3.6\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/starlight - 5.3.6\n  $:/themes/tiddlywiki/tight - 5.3.6\n  $:/themes/tiddlywiki/tight-heavier - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "It is a good tool for my needs. The software development is ongoing and in progress. It's sufficient for me so far to organize and manage my data or database.", + "project-weaknesses": "I also use emacs org-mode and org-roam, especially for task management and zettelkasten. Actually, I haven't known yet or not decided yet, which tool is better and more appropriate for me. Both tools have their advantages an disadvantages. At the moment I'm still wavering between emacs org-mode/org-roam and tiddlywiki.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00092", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00093.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00093.json new file mode 100644 index 0000000000..85040a35e1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00093.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2021", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Producing/publishing interactive fiction;Worldbuilding (e.g. for role-playing games);Other", + "other-use-cases": "Searchable & filterable repositories of images (mine or others); personal websites (in the spirit of Geocities)", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "It is the primary way I present most of my creative projects in an interactive medium, for organizing large collections of images otherwise difficult to do elsewhere, and for generally being extremely flexible and customizable to hyper-specific needs. It changed everything.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop", + "backup-method": "TiddlySpot / TiddlyHost;Neocities, Nekoweb, tiiny.host, omg.lol and similar services", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/ContrastDark\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.5\n  $:/plugins/ebalster/condition - 0.1.2\n  $:/plugins/wikilabs/trails - 1.1.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "Far too many to be exhaustive within the limit, but it includes stylesheets, macros, ViewTemplates, and core edits. I often use & modify community ones (themes, plugins, solutions). I have very rarely made simple JavaScript functions when WikiText equivalents were not possible.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "- Uses familiar languages like CSS and HTML, giving a hands-on environment to learn both.\n- The community is incredibly warm and friendly towards beginners, making it a great atmosphere to learn.\n- The openness of sharing and building on solutions.\n- The commitment to backwards compatibility meaning community solutions are almost always evergreen, even a decade later.\n- The sky is the limit with what you can create. It is anything you want it to be, if you put your mind to it.", + "project-weaknesses": "- I am wary of generative AI. My relationship with TW would change if it was officially incorporated (core plugins, etc).\n- Multi-user solutions are technically possible to DIY as a novice programmer, but impossible to make fully usable. It is my only lasting problem with TW because it means I can rarely use this powerful software in collaborative projects, or teach it to others hands-on. An *easy to use* solution for multi-users that can handle conflicting edits would be my dream come true!", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00093", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00094.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00094.tid new file mode 100644 index 0000000000..21fa633df2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00094.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: TiddlySpot / TiddlyHost +diy-backup-info: +first-heard-survey: Official newsletter +first-used-tw: 2010 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Active development breeds confidence in the project and makes me feel safe in keep privileged information in it. +project-weaknesses: Technical limitations aside, my biggest issue is slow-downs with large files (PKM). I tweak (no images, limited plug-ins, etc), but with some tiddlers large (I know - atomize those Tiddlers!) and a thousands of tiddlers, the slowdown is noticeable and that gives me pause as to whether this is the right platform. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00094 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...) +tw-customisations: no. +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Secure, portable environment to write in, take notes, customize, and be a single source of truth. +wiki-setup-info: I work of a several single files in TiddlyHost - but I keep files in Google Drive a well. When editing or working with a file, I download it and work on it, then upload it to Tiddlyhost and Google Drive. On mobile, I use Tiddlyhost for viewing. \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00095.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00095.json new file mode 100644 index 0000000000..1feafb2000 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00095.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "", + "joined-tw-community": "Yes", + "started-tw-community": "", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Use to provide value before I retired. Right now is a legacy tool, mostly keeping up-to-date versions in Tiddlyhost.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "TiddlySpot / TiddlyHost;Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/GithubDark\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-CA\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/Import - \n  $:/plugins/flibbles/relink - 2.4.3\n  $:/plugins/flibbles/relink-fieldnames - 2.4.1\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.6\n  $:/plugins/kookma/commander - 2.1.7\n  $:/plugins/kookma/favorites - 4.8.5\n  $:/plugins/kookma/hsl - 1.2.1\n  $:/plugins/kookma/refnotes - 1.9.0\n  $:/plugins/kookma/shiraz - 2.9.4\n  $:/plugins/kookma/shiraz-callout - 0.8.0\n  $:/plugins/kookma/shiraz-formatter - 0.6.0\n  $:/plugins/kookma/toc - 1.6.1\n  $:/plugins/kookma/todolist - 1.5.0\n  $:/plugins/kookma/trashbin - 1.3.3\n  $:/plugins/kookma/utility - 2.8.0\n  $:/plugins/tiddlywiki/comments - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/wikilabs/cheatsheet - 1.1.1\n  $:/temp/info-plugin - \n  $:/themes/ahanniga/maximo-theme - 0.5.0\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "Heavily modified GSD5 plugin for use in project management.", + "positive-about-future": "No", + "tw-future-confidence": "No", + "project-decision-trust": "No", + "project-strengths": "TW is great from a pure developer or computer programmer perspective. There is significant support in the community. Lovely people, very knowledgeable, ready to help anytime. TW is being maintained and upgraded at a fast pace.", + "project-weaknesses": "TW is not very good from an end user perspective. Talk TiddlyWiki is a terrible place for an end user. There are too many topics, ideas, plugins, etc., completely disorganized. Urgently, something needs to be done to make TW more appealing to people with little computer programming experience, and those with little time to read/go over the huge amount of posts. The learning curve could be greatly improved if a place separately from Talk TiddlyWiki be created to organize all the knowledge.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00095", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00096.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00096.tid new file mode 100644 index 0000000000..b2e3fec7cd --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00096.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: No automatic sync across my devices +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2020 +joined-tw-community: Yes +main-use-cases: Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: The core and plugins' code is accessible and documented, and everyone is encouraged to comment/contribute. I also value a lot that it's open source, lightweight and that it doesn't require extensions/apps to be edited. I'm very excited for the new changes in v5.4.0! The new ideas in talk.tiddlywiki discussion are great and its comforting that older versions are still available. +project-weaknesses: I don't think I'd leave TiddlyWiki. If my wikis were incompatible with the next updates I'd simply stay in the current version. I am afraid that the community may get stagnant, but so far I've seen a lot of activity. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: 2024 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00096 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript +tw-customisations: Besides simple styles and procedures, I have made some JavaScript filters for things that were too complicated or I couldn't find in the core. I used the core filters as a base and built upon that. +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: Yes +use-github-discuss: I read/lurk, but do not post +use-mailing-list: I read/lurk, but do not post +use-reddit: I do not engage with this community +use-ttw: I read/lurk, but do not post +value-of-tw: It allows me to organize my thoughts. The language is both simple and complex enough to get creative and it encourages me to search for new paths. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00097.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00097.json new file mode 100644 index 0000000000..2caf3a0fb7 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00097.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2006", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "As a document, database and prototype wiki tool is it invaluable to quickly capture and link ideas", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Muted\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/snowgoon88/edit-comptext,$:/plugins/tiddlywiki/comments,$:/plugins/tiddlywiki/freelinks,$:/plugins/tiddlywiki/menubar\nPlugins: \n  $:/core - 5.3.3\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/centralised - 5.3.3\n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/tight - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "https://joearms.github.io/#Chandler", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "being lean and not to fat, backwards compatibility, continuous improvement/bug fixes, maintaining the simplicity and ease of use (design), common export formats for import and export", + "project-weaknesses": "tw is used for quick capture or need for structured formats and other data types than plain text. Most tw data is archived as plain text files with link interoperability via vim text editor. two is tied to the browser and that dependency is a concern hence the move to plain text. As long as tw maintains the simplicity and interoperability with plain text and other common formats, I foresee it lasting a long time.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00097", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00098.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00098.json new file mode 100644 index 0000000000..581ced6802 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00098.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2003", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming;Other", + "other-use-cases": "Memory Keeper | Projectify | Cardo (working on an update) | Zettelkasten | Cook Book", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I cherish TW because I can tweak (I cannot programm but I can tweak.) it to my needs or use as is just fine. It allows me to own my data. With Syncthing on my pc and my android mobile (with SDcard) I do not need cloud services. With TW being text based I can use my stuff forever.", + "tw-ability-level": "I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom CSS styles", + "save-method": "Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost;DIY (any other solution)", + "diy-backup-info": "With Syncthing on my pc and my android mobile (with SDcard). I don't want cloud services for my personal stuff.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/CaptivateDark (MY OWN TWEAKED PALETTE)\nCurrent theme: $:/themes/cdr/captivate\nCurrent layout: $:/themes/cdr/captivate/ui/PageLayout\nBrowser language setting: de-DE\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/cdr/colorlab - 0.2.0\n  $:/plugins/gsd5/core - 0.8.2\n  $:/plugins/gsd5/docs - 20230819\n  $:/plugins/gsd5/ticklers - 0.6-beta\n  $:/plugins/wikilabs/link-to-tabs - 3.0.1\n  $:/temp/info-plugin - \n  $:/themes/cdr/captivate - 0.2.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I usually start with some of the great customisations out there. I recently tweaked 3 of them. Mostly because I prefer my sidebar on the right: https://tiddlyhost.com/explore/user/Xrizzy.\nI do mostly stylesheets and I tweak plugins but keep my hands off the core.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "* Keepin TiddlyWiki alive and keep making it better all while my stuff will still be readable\n* Very helpful community\n* Good documentation\n* Making TW more and more capable to run well on multi languages\nI am excited for TW because more and more people want to own their data and use and participate in an open source project.", + "project-weaknesses": "Since 2003 I keep coming back to TW. Every now and then I get a little lost in tweaking TW and then I don't use it for a while. I guess I could contribute more where Design, HTML, CSS is needed. Yet I want to learn and dive deeper into TW. I still struggle with GIT and Node. If I had one wish right now I would like to be able to put the sidebar left or right and the main buttons top or buttom on mobile and left or right on the desktop. Multi-user capability is probably asking too much. :)", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00098", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00099.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00099.json new file mode 100644 index 0000000000..eeaefd0147 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00099.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2006", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "a good tool for everyday life", + "tw-ability-level": "I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "WebDAV", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "I use the empty edition of TW.\n\nI would like it to be as streamlined as possible.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I really like when the community takes their time to choose the developments that will improve TW.", + "project-weaknesses": "I don't think I will leave TW. At worst, I will use older versions.\n\nI'm afraid that it may no longer be open source and that it will lose its basic idea: a simple file that opens on any device. For example, I have already managed to open it on my watch.\n\nI find that the community is good.\n\nTo contribute more, we would need questionnaires of this kind. I think it's very good. Also, creating topics for reflection that would focus the participants on a single specific aspect of the TW.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00099", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00100.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00100.json new file mode 100644 index 0000000000..2e00f13840 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00100.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2021", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Planning lessons and courses for university students", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "A great deal of value: it is my main store of information, and a key thinking tool I use at least most days.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);DIY (any other solution)", + "diy-backup-info": "Quine 2", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/GruvboxDark-srbt\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/advanced-search,$:/config/shortcuts-mac/insert-command-palette-result,$:/config/shortcuts-mac/open-command-palette,$:/config/shortcuts-mac/open-command-palette-selection,$:/config/shortcuts-mac/save-tiddler,$:/config/shortcuts/autolist-indent,$:/config/shortcuts/autolist-newline,$:/config/shortcuts/autolist-unindent,$:/config/shortcuts/open-command-palette-selection,$:/config/shortcuts/streams-indent,$:/config/shortcuts/streams-unindent\nDisabled plugins: $:/plugins/adithyab/cmplus,$:/plugins/ahanniga/split-view-plugin,$:/plugins/BTC/multi-column-github-toolbar,$:/plugins/BTC/TiddlyFlex,$:/plugins/BTC/tiddlywiki-multi-columns,$:/plugins/felixhayashi/vis,$:/plugins/Gk0Wk/TW5-CodeMirror-Enhanced,$:/plugins/nico/projectify-de-DE,$:/plugins/nico/projectify-es-ES,$:/plugins/nico/projectify-fr-FR,$:/plugins/nico/projectify-nl-NL,$:/plugins/nico/projectify-zh-Hans,$:/plugins/tiddlywiki/browser-sniff\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/benwebber/motion - 0.3.0\n  $:/plugins/bimlas/kin-filter - 1.0.0\n  $:/plugins/bj/tiddlyclip - 02.0.01\n  $:/plugins/cdaven/markdown-export - 0.9.0\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/ebalster/formula - 0.2.5\n  $:/plugins/EvidentlyCube/AdvancedPerformance - 1.1.6\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.20\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.20+10024\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/flibbles/relink - 2.4.4\n  $:/plugins/flibbles/vis-network - 9.1.2\n  $:/plugins/Gk0Wk/codemirror-mode-tiddlywiki5 - 0.0.6\n  $:/plugins/Gk0Wk/CPL-Repo - 2024.11.25\n  $:/plugins/Gk0Wk/drawio - 0.0.7\n  $:/plugins/Gk0Wk/echarts - 0.2.13\n  $:/plugins/Gk0Wk/focused-tiddler - 0.0.3\n  $:/plugins/Gk0Wk/mindmap-elixir - 0.0.2\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.6\n  $:/plugins/inmysocks/MathyThing - 0.2.1\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.24.0\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/kookma/refnotes - 1.9.0\n  $:/plugins/linonetwo/ical-calendar-importer - 1.0.6\n  $:/plugins/linonetwo/tag-tree-picker-macro - 0.0.1\n  $:/plugins/linonetwo/title-caption - 0.3.1\n  $:/plugins/linonetwo/tw-calendar - 1.6.0\n  $:/plugins/linonetwo/tw-react - 1.0.0\n  $:/plugins/linonetwo/tw-whiteboard - 1.7.0\n  $:/plugins/MAS/TOC-Search - 0.0.1\n  $:/plugins/nico/notebook-mobile - 1.0.0\n  $:/plugins/nico/projectify - 0.14.3\n  $:/plugins/nico/shields - 0.0.2\n  $:/plugins/orange/mermaid-tw5 - 0.3.8\n  $:/plugins/phiv/streams-fusion - 0.0.16-beta\n  $:/plugins/sobjornstad/TiddlyRemember - 1.3.6\n  $:/plugins/souk21/commandpalette - 0.0.7\n  $:/plugins/sq/editor-autolist - 0.1.10\n  $:/plugins/sq/Stories - 1.0.3\n  $:/plugins/sq/streams - 1.2.24\n  $:/plugins/telmiger/details - 0.8.0\n  $:/plugins/tiddlywiki/bibtex - 5.3.6\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n  $:/plugins/tiddlywiki/dynaview - 5.3.6\n  $:/plugins/tiddlywiki/katex - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tobibeer/appear - 0.6.2\n  $:/plugins/tobibeer/preview - 0.5.6\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "- quite heavily adapted Projectify plugin for more helpful project management for me\n- adapted Gruvbox dark palette (more accessible code colours and some other minor differences\n- custom CSS \n- adapted RefNotes and BibTex importer plugins", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "- Super helpful community on talk.tiddlywiki\n- Regular updates and information about possible future updates\n- I pure love wikitext syntax for formatting text etc.\n- runs in a browser\n- it's a Quine\n- incredibly adaptable \n- very powerful wikitext (language)", + "project-weaknesses": "- I wish I were better able to grasp key aspects of widgets / parameters / functions from the official documentation (e.g., I have been making a new project manager for about 2 years and still haven't finished it, in part because I don't fully understand what I am doing, or what could work best)\n- I am worried my main wiki is starting to slow slightly as it grows (currently >20Mb in size, just from text notes, SVG icons, etc.) and would like it to be able to easily handle far larger sizes", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00100", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00101.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00101.json new file mode 100644 index 0000000000..36906097f5 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00101.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Discord", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2020", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I read and post in this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "TW lets me organize and see my data in different ways. It helps me see connections between two disparate locations that I didn't see before and helps me articulate that connection beyond TW.", + "tw-ability-level": "My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/flibbles/relink - 2.1.4\n  $:/plugins/tiddlywiki/internals - 5.2.3\n  $:/plugins/tiddlywiki/menubar - 5.2.3\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I have a growing number of macros and even edited some of the core to create the sidebar that I wanted. It's constantly evolving though.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I love the adapatability of it. I actually do like the Vanilla Color Scheme.", + "project-weaknesses": "Multiple users. I know you were working on this. It's the biggest change that I would need. I would also love to see more \"You have no idea what you're doing\" tutorials that function on more of an as needed bases. GrokTW is ok, but it's too structured to get what I want out of it most of the time, like a class instead of a \"You wanna do this, here's how\" type of thing, and the TW site is more for those who already know what they are doing.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00101", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00102.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00102.tid new file mode 100644 index 0000000000..b990aac3e6 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00102.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: DIY (any other solution) +diy-backup-info: tidgi desktop and it's moblie syncthing +first-heard-survey: WeChat +first-used-tw: 2020 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: write something +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: 非常灵活。用它感觉 像在记录笔记,而非光折腾笔记 软件。 +project-weaknesses: 假设有数量特别多的条目,提升太微的极限抗压测试,达到“即使条目非常多,也能保持流畅运行”的效果 +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00102 +tw-ability-level: My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins +tw-customisations: just tidgi desktop +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: very useful +wiki-setup-info: tidgi desktop \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00103.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00103.json new file mode 100644 index 0000000000..f382cd62df --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00103.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2023", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Yes, served through Node.js", + "value-of-tw": "TiddlyWiki has become my main learning tool, which I use to take notes and make Anki cards. I think TW can do more for me", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost;N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: psyfield-调色盘1\nCurrent theme: $:/themes/wingmaker/kemurikusa\nCurrent layout: \nBrowser language setting: zh-CN\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/tiddlywiki/d3\nPlugins: \n  $:/core - 5.3.7\n  $:/languages/zh-Hans - 5.3.7\n  $:/plugins/sobjornstad/TiddlyRemember - 1.4.0\n  $:/plugins/tiddlywiki/filesystem - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/internals - 5.3.7\n  $:/plugins/tiddlywiki/katex - 5.3.7\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/plugins/tiddlywiki/qrcode - 5.3.7\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.7\n  $:/plugins/wingmaker/memolith - 5.3.18\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n  $:/themes/wingmaker/kemurikusa - 5.3.10\n
", + "tw-customisations": "I put my customizations in my homemade private plugin, so there are no other customizations other than the ones above", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The best thing about TiddlyWiki is the degree of freedom, which allows you to customize the interface and functionality without having to install any plugins. Card notes don't have the concept of folders, making note-taking more secure.", + "project-weaknesses": "In the future I am afraid that TW will be defeated by business note-taking software and there will be no new users. There are very few new users of TW in my country. I'm also scared that my notes will get bigger and bigger, because I'm reading progressively with TW and importing a lot of books", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00103", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00104.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00104.json new file mode 100644 index 0000000000..17b3e7abe1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00104.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2019", + "joined-tw-community": "Yes", + "started-tw-community": "2020", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read and post in this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Yes, served through Node.js", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "As a safe vault for ideas, that might be useful in a long future.\n\nRecord personal information safely, no one else will see, and I can analyse it to improve my self.\n\nSave time developing small widgets to record personal info, without handling save&load mechanism myself.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe)", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);DIY (any other solution)", + "diy-backup-info": "Tidgi mobile sync", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Notion\nCurrent theme: $:/themes/linonetwo/itonnote\nCurrent layout: \nBrowser language setting: zh-CN\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: pop\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/linonetwo/preview-glass\nPlugins: \n  $:/core - 5.3.6\n  $:/languages/zh-Hans - 5.3.6\n  $:/plugins/BTC/TiddlyFlex - 0.6.4\n  $:/plugins/felixhayashi/respawn - 0.0.3\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/flibbles/relink-markdown - 2.5.1\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/FSpark/TiddlerScreenshot - 0.0.5\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/Gk0Wk/echarts - 0.2.13\n  $:/plugins/Gk0Wk/echarts-liquidfill - 3.1.0\n  $:/plugins/Gk0Wk/focused-tiddler - 0.0.3\n  $:/plugins/Gk0Wk/notionpage-covericon - 0.0.14\n  $:/plugins/Gk0Wk/page-toc - 0.0.5\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.6\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.24.0\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/kookma/favorites - 4.8.8\n  $:/plugins/kookma/section - 1.2.2\n  $:/plugins/kookma/shiraz - 3.0.8\n  $:/plugins/kookma/shiraz-formatter - 0.6.0\n  $:/plugins/kookma/solution - 1.3.0\n  $:/plugins/kookma/tamasha - 0.6.1\n  $:/plugins/kookma/toc - 1.6.2\n  $:/plugins/kookma/todolist - 1.5.0\n  $:/plugins/kookma/utility - 3.2.2\n  $:/plugins/linonetwo/activity-log-tools - 0.0.1\n  $:/plugins/linonetwo/autocomplete - 0.5.0\n  $:/plugins/linonetwo/commandpalette - 2.1.0\n  $:/plugins/linonetwo/contacts - 0.0.1\n  $:/plugins/linonetwo/copy-on-select - 2.0.0\n  $:/plugins/linonetwo/date-filters - 1.2.0\n  $:/plugins/linonetwo/early-sleep-early-work - 0.2.1\n  $:/plugins/linonetwo/edit-tags-on-view-mode - 0.0.1\n  $:/plugins/linonetwo/ego-store-lite - 1.4.3\n  $:/plugins/linonetwo/fira-code-font - 0.0.1\n  $:/plugins/linonetwo/flow-chart - 0.2.0\n  $:/plugins/linonetwo/github-external-image - 0.1.0\n  $:/plugins/linonetwo/health-buff-debuff-tracker - 1.5.0\n  $:/plugins/linonetwo/hyper-table - 1.4.3\n  $:/plugins/linonetwo/in-tagtree-of - 0.2.0\n  $:/plugins/linonetwo/intention-tower-knowledge-graph - 0.10.1\n  $:/plugins/linonetwo/inverse-link-and-folder - 1.2.2\n  $:/plugins/linonetwo/itonnote - 3.4.4\n  $:/plugins/linonetwo/krystal - 0.7.0\n  $:/plugins/linonetwo/markdown-transformer - 1.0.0\n  $:/plugins/linonetwo/mobile-imessage-layout - 0.6.5\n  $:/plugins/linonetwo/open-in-external-app - 0.2.0\n  $:/plugins/linonetwo/opened-tiddlers-bar - 1.0.0\n  $:/plugins/linonetwo/person - 0.1.0\n  $:/plugins/linonetwo/principles - 0.3.1\n  $:/plugins/linonetwo/simple-layout-launcher - 0.6.1\n  $:/plugins/linonetwo/slate-write - 0.5.2\n  $:/plugins/linonetwo/source-control-management - 0.3.0\n  $:/plugins/linonetwo/speech-synthesis - 0.1.0\n  $:/plugins/linonetwo/streams-outliner-lib - 1.4.1\n  $:/plugins/linonetwo/super-tag - 0.4.3\n  $:/plugins/linonetwo/switch-static-and-dynamic-page - 1.0.2\n  $:/plugins/linonetwo/tag-tree-picker-macro - 0.0.1\n  $:/plugins/linonetwo/template-list - 0.3.0\n  $:/plugins/linonetwo/tidgi-external-attachments - 1.5.2\n  $:/plugins/linonetwo/tidgi-ipc-syncadaptor - 1.0.0\n  $:/plugins/linonetwo/tidgi-ipc-syncadaptor-ui - 1.0.0\n  $:/plugins/linonetwo/title-caption - 0.3.1\n  $:/plugins/linonetwo/tmo - 0.1.0\n  $:/plugins/linonetwo/tw-calendar - 2.1.1\n  $:/plugins/linonetwo/tw-gamification - 0.6.3\n  $:/plugins/linonetwo/tw-mobile-sync - 0.9.0\n  $:/plugins/linonetwo/tw-react - 1.0.0\n  $:/plugins/linonetwo/tw-server-sitemap - 0.0.3\n  $:/plugins/linonetwo/tw-whiteboard - 1.7.0\n  $:/plugins/linonetwo/visualization-dashboard - 1.2.0\n  $:/plugins/linonetwo/wmo - 0.0.1\n  $:/plugins/linonetwo/zx-script - 1.0.0\n  $:/plugins/mat/field-value-selector - 0.0.1\n  $:/plugins/oeyoews/copy-title - v0.0.3\n  $:/plugins/oeyoews/mermaid - 11.6.3\n  $:/plugins/oeyoews/shortcuts - v0.1.8\n  $:/plugins/oeyoews/tiddlywiki-codemirror-6 - 3.9.2\n  $:/plugins/oeyoews/tiddlywiki-modal-ui - 1.1.0\n  $:/plugins/telmiger/EditorCounter - 0.6.6\n  $:/plugins/telmiger/HarveyBalls - 0.0.6\n  $:/plugins/telmiger/PluginSize - 1.0.1\n  $:/plugins/telmiger/rpn - 0.7.3\n  $:/plugins/tiddlywiki/browser-sniff - 5.3.6\n  $:/plugins/tiddlywiki/confetti - 5.3.6\n(This question type does not allow more than 5000 characters)\n
", + "tw-customisations": "I only publish mod as plugin, so it won't pollute my own wiki.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Friendly & fun community of developers, no pushing, no deadline, I can participate only when have spare time. So writing things on its codebase or community feels like an entertainment to play with.\n\nHandful of web tools to use with tiddlywiki, so creating things on it is easy and have fast feedback.\n\nI hope there can be more people to play together, so sharing things can be more fun.", + "project-weaknesses": "I'm afriad AI makes note taking UI useless, so my investigation on it will be useless too. I myself might also only use AI, if AI can record everything I talk, and answer anything I ask (about personal info).\n\nI afriad that there will be fewer new users, so only old guys that have stable usage, so creating is no longer fun on the cummuntiy, because things are stable, old people don't need new things.\n\nI want to get more \"thumb\" when I share things. I hope there are new readers for my post.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00104", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00105.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00105.json new file mode 100644 index 0000000000..57ff3b492f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00105.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2010", + "joined-tw-community": "Yes", + "started-tw-community": "2014", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Yes, served through Node.js", + "value-of-tw": "I use TW to generate a personal website were I drop articles (blog posts), code snippets, photography photos, tips, journal musings, resume, etc. This is served as a single HTML file with static versions of tiddlers for SEO use. I serve Node version to localhost for work stuff", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "For single-file wikis I store in a web hosted folder. For personal blog site (wiki) source is in Git (sourcehut). For node served sites I use tar via a cron job.", + "wiki-setup-info": "
Wiki Information Daily tasks and notes
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/SolarizedDark\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-linux/make-pr-macro,$:/config/shortcuts/cancel-edit-tiddler,$:/config/shortcuts/make-pr-macro\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/crowdstrike - 5.3.7\n  $:/plugins/proxy - 5.3.7\n  $:/plugins/tiddlywiki/codemirror - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-keymap-vim - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.7\n  $:/plugins/tiddlywiki/filesystem - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/plugins/tiddlywiki/railroad - 5.3.7\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
\n\n
Wiki Information Personal Blog Site
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tritarget/blog\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/dullroar/atomfeed - 0.0.3\n  $:/plugins/sukima/jsbin - 5.3.7\n  $:/plugins/sukima/obfuscate - 0.0.1\n  $:/plugins/sukima/pannellum - 2.2.0\n  $:/plugins/sukima/prepare-media - 5.3.7\n  $:/plugins/sukima/sourcecode - 0.0.1\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/plugins/tiddlywiki/powered-by-tiddlywiki - 5.3.7\n  $:/plugins/tiddlywiki/qrcode - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/centralised - 5.3.7\n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n  $:/themes/tritarget/blog - 5.3.7\n
", + "tw-customisations": "Honestly, I'm quick to customize styles, macros, and JavaScript. It is hard for me to list them all.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "For me it is about the core philosophies. 1. brain dumps, I can dump anything to a wiki and not have to fuss about how the information will be organized or presented. The concept of tiddlers frees me of that mental burden. 2. Core knowledge set. TW uses HTML, CSS, and JavaScript that's it. I know my TW will work on any modern PC because they all come with a web browser. Contributing needs nothing more than familiarity with MDN. No React, TypeScript, Vite, CI, Cloud, Database, blah blah blah.", + "project-weaknesses": "I worry that the allure of more fancy looking systems (i.e. obsidian) could motivate the core code to migrate away from core standards like VanillaJS or single-file architecture like a siren's call. That the front end development industry is so saturated with wannabes that the drive to cater to the lowest common denominator sends software down an enshitification path of doom. The filter syntax though powerful can get confusing quickly especially with complex ideas. Improve the Widget API.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00105", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00106.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00106.tid new file mode 100644 index 0000000000..01581d56bc --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00106.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: No automatic sync across my devices +diy-backup-info: +first-heard-survey: Talk TiddlyWiki +first-used-tw: +joined-tw-community: No +main-use-cases: Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: Garden Planer, Wine Stock Organizer, Cook Book +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: keeping compatibility over long period of time +project-weaknesses: app style saving on all devices without installing complecated apps or servers (I know ...):-) +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00106 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Customizable platform which support easy data prosessing by functions/procedures. With that easy web apps can be generated +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00107.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00107.json new file mode 100644 index 0000000000..89ca189119 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00107.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2008", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Personal knowledgebase (work + persona/family)", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/BurningTreeC/PrintRiver,$:/plugins/snowgoon88/edit-comptext\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/danielo515/2click2edit - 0.1\n  $:/plugins/ihm/tidgraph - 0.9.6\n  $:/plugins/telmiger/details - 0.7.6\n  $:/plugins/TWaddle/ListTree - 1.0.4\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "none", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Keeping it still within the browser as a simple html file.\nSensible approach, ie. keep the base as simple as possible, ie. not screwing it with too many features.\nCommunication via newsletter (neither too often nor not enough) - it is just right.\nMaintain a wide community.", + "project-weaknesses": "Despite reading many tips and guides in the community wikis, I often as a non developer struggle to understand majority of advices. Usually I am capable of reusing only the code that includes the example. - Just the text description simply does not work for me. Typical bad example:\nTranscluding Text References, You can also use a TextReference instead of a tiddler title:\n{{MyTiddler##index}} transcludes a specified indexed property of a DataTiddler", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00107", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00108.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00108.json new file mode 100644 index 0000000000..d47deacfc0 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00108.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2025", + "joined-tw-community": "Yes", + "started-tw-community": "2025", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I really like the self-hosting, no plan aspect. The fact that my file will still work in 10 years.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/CupertinoDark\nCurrent theme: \nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: fr\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/switch-reader-mode,$:/config/shortcuts/navigate-previous,$:/config/shortcuts/save-and-close-focused\nDisabled plugins: $:/plugins/felixhayashi/topstoryview\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.20+10024\n  $:/plugins/felixhayashi/vis - \n  $:/plugins/flibbles/relink - 2.4.4\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.6\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/kookma/utility - 3.2.2\n  $:/plugins/scribs/nav - 0.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "A bit of stylesheet. I'm considering creating a theme", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I like the discussions on Talk.", + "project-weaknesses": "?", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00108", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00109.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00109.json new file mode 100644 index 0000000000..10c11e04e0 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00109.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2025", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Programming;Other", + "other-use-cases": "Ticketing System (à la Jira), as a website (via TiddlyHost), personal blog, cookbook, and bookmark manager for my browser (new tabs)", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "A lot!", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop;Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe)", + "backup-method": "TiddlySpot / TiddlyHost;Git forge (GitHub, Gitea/Forgejo, GitLab);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...);Neocities, Nekoweb, tiiny.host, omg.lol and similar services;DIY (any other solution)", + "diy-backup-info": "SyncThing", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Its high level of customization is a great aspect", + "project-weaknesses": "I've dabbled with Obsidian, and find myself constantly switching between TiddlyWiki and Obsidian. The one strong thing that Obsidian has that TW5 does not is the ability to easily paste images and have them be saved in a specific folder. I've been working on my own solution for that, but it's still in the works.\n\nAn autosave, if possible at all, would be great; far too many times I've had a browser crash, or something similar (or god forbid a Windows update overnight) and lost some data.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00109", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00110.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00110.json new file mode 100644 index 0000000000..eea1c57ef9 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00110.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2022", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read and post in this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "catalog and display a library of PDFs (sheet music) via iPad.", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "I've several \"offline\" wikis, all accessible via my main wiki. Used daily. The ONLY tool that allows me to replicate previously used Proj.Manage/GTD tools as 1-stop-solution. Previous used localhost web to do similar BUT TW is a smart bridge to my archived web-projects.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "custom CSS. Dabble with javascript/macros learned via \"community\" to address specific wants/needs. I document &/ experiment to improve my limited TW knowledge. Getting old (retired) and I find the information on TW.com a bit hard to follow, so I've settled for \"basic\" usage.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "No", + "project-strengths": "Simplicity. Functional as is (vanilla) but tempts me to learn more (ie. I could mould this to my own needs/tastes IF I KNEW HOW). The community is very helpful and I appreciate their effort --- but I struggle to join the dots. My slow learning curve kinda stopped after the first 12-months. \nHopeful (excited?) for recognition of the future benefits in encouraging non-tech people (like me) to use TW and grow their own expertise. Let's NOT hand-over all avenues for critical thinking to AI.", + "project-weaknesses": "* I hate to imagine leaving TW behind. I fear not having Timimi ! \n* TW.com resources don't clarify what I must understand in order to go deeper. After trial and error I usually settle for a clumsy solution BECAUSE I don't comprehend the \"expert solution\". \n* I'd love to help develop a beginner/non-coder scaffold-learning layer to TW.com resources. I got the feeling \"this\" might be considered redundant since there's already Grok, etc. (Grok didn't match my needs/interests)", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00110", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00111.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00111.json new file mode 100644 index 0000000000..2d22ac9730 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00111.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2005", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It provides me a portable means of recording and editing knowledge that I can carry with me in a simple jump drive for use on any number of computers.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I use FreeFileSync to backup my Tiddlywiki files to an external harddrive and jump drive.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla 1\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tiddlywiki/menubar - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Nothing specific comes to mind, just keep doing the good work of maintaining and improving this valuable resource.", + "project-weaknesses": "Nothing that I can think of.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00111", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00112.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00112.json new file mode 100644 index 0000000000..27f98acad9 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00112.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2017", + "joined-tw-community": "Yes", + "started-tw-community": "2019", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Knowledge base and journaling assistance and pleasure to program it", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with TiddlyDesktop", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Twilight\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: fr-FR\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/cancel-edit-tiddler\nDisabled plugins: $:/plugins/bimlas/kin-filter,$:/plugins/kookma/refnotes,$:/plugins/tiddlywiki/codemirror-keymap-vim,$:/plugins/tiddlywiki/codemirror-mode-htmlmixed,$:/plugins/tiddlywiki/codemirror-mode-xml,$:/plugins/tiddlywiki/comments,$:/plugins/tiddlywiki/qrcode,$:/plugins/yaisog/ancestors-filter,$:/plugins/yaisog/descendants-filter\nPlugins: \n  $:/core - 5.3.7\n  $:/languages/fr-FR - 5.3.7\n  $:/plugins/aaldrich/tables - 0.6.21\n  $:/plugins/flibbles/relink - 2.4.0\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.24.0\n  $:/plugins/kookma/commander - 2.1.6\n  $:/plugins/kookma/shiraz - 2.9.0\n  $:/plugins/linonetwo/in-tagtree-of - 0.2.0\n  $:/plugins/nbreziat/checklist - 0.0.19\n  $:/plugins/tiddlywiki/codemirror - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.7\n  $:/plugins/tiddlywiki/external-attachments - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/menubar - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "Yes many customisation from the community (from Grok and others)", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Above all I appreciate to have a free open source software that I can manage by myself.\nI like to have new features that facilite the way to use it and enhance the possibilities \nI like the rich plugin library\nMWS looks great, even if I did not tried it yet", + "project-weaknesses": "I don't think I will stop using it, unless the business model changes", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00112", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00113.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00113.json new file mode 100644 index 0000000000..4dd4ccd6e3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00113.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2005", + "joined-tw-community": "Yes", + "started-tw-community": "2006", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Web-publishing educational materials (with constant real-time updates for students)", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "It is the engine of all my work: my bibliographic database, teaching resources, home information and reminders management.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/Blanca_wes\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/aaldrich/tables,$:/plugins/ajh/tiddlytime,$:/plugins/benwebber/tag-count,$:/plugins/bimlas/highlight-searched-text,$:/plugins/BTC/tiddly-touch,$:/plugins/BurningTreeC/KeeBoord,$:/plugins/BurningTreeC/muuritouch,$:/plugins/BurningTreeC/PrintRiver,$:/plugins/chanilino/viz,$:/plugins/danielo/encryptTiddler,$:/plugins/danielo515/ContextPlugin,$:/plugins/danielo515/encryptTiddler,$:/plugins/eucaly/popuptagger,$:/plugins/hchaase/toc_counting,$:/plugins/ihm/tidgraph,$:/plugins/jd/fullscreen-editor,$:/plugins/jd/NTFS,$:/plugins/jd/NTFS19,$:/plugins/mklauber/aliases,$:/plugins/OokTech/WordCount,$:/plugins/sk/ColorText,$:/plugins/sk/FancyQuotes,$:/plugins/snowgoon88/edit-comptext,$:/plugins/telmiger/ColorAction,$:/plugins/telmiger/EditorCounter,$:/plugins/telmiger/listreveal,$:/plugins/telmiger/PluginSize,$:/plugins/telmiger/ReaderMode,$:/plugins/telmiger/rpn,$:/plugins/telmiger/WMR,$:/plugins/tgrosinger/tw5-checklist,$:/plugins/tiddlywiki/browser-sniff,$:/plugins/tiddlywiki/comments,$:/plugins/tiddlywiki/freelinks,$:/plugins/tiddlywiki/hammerjs,$:/plugins/tiddlywiki/tw2parser,$:/plugins/tobibeer/appear,$:/plugins/tobibeer/inc,$:/plugins/tobibeer/plantuml,$:/plugins/tobibeer/preview,$:/plugins/tobibeer/random,$:/plugins/tobibeer/sparkl,$:/plugins/tobibeer/split,$:/plugins/TWaddle/ListTree,$:/plugins/wikilabs/uni-link\nPlugins: \n  $:/core - 5.3.5\n  $:/plugins/ajh/favorites - 3.0.7\n  $:/plugins/eucaly/quickjump - 0.0.2\n  $:/plugins/EvidentlyCube/AdvancedPerformance - 1.1.4\n  $:/plugins/EvidentlyCube/GoToShortcut - 0.3.1\n  $:/plugins/flibbles/relink - 2.3.1\n  $:/plugins/flibbles/relink-fieldnames - 2.3.0\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.3\n  $:/plugins/kookma/commander - 2.1.6\n  $:/plugins/kookma/pinboard - 1.1.1\n  $:/plugins/kookma/refnotes - 1.8.6\n  $:/plugins/kookma/shiraz - 2.8.1\n  $:/plugins/kookma/shiraz-callout - 0.6.0\n  $:/plugins/kookma/utility - 2.6.1\n  $:/plugins/linonetwo/prevent-edit - 0.0.1\n  $:/plugins/mklauber/shuffle - 1.0.2\n  $:/plugins/oeyoews/tiddlywiki-codemirror-6 - 1.6.5\n  $:/plugins/sq/spotlight - 0.0.4\n  $:/plugins/telmiger/details - 0.7.6\n  $:/plugins/telmiger/HarveyBalls - 0.0.6\n  $:/plugins/tiddlywiki/internals - 5.3.5\n  $:/plugins/tiddlywiki/menubar - 5.3.5\n  $:/plugins/tiddlywiki/powered-by-tiddlywiki - 5.3.5\n  $:/plugins/TWaddle/Annotations - 1.0.0\n  $:/plugins/TWaddle/hide - 0.0.2\n  $:/plugins/wikilabs/edit-tabs - 3.0.0\n  $:/plugins/wikilabs/space-space-newline - 0.2.0\n  $:/plugins/wikilabs/trim-whitespace - 0.1.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "Customizations include importer for moodle JSON (thx saq!). I rely on: Shiraz dynamic tables, Refnotes (+my own further development for bibtex jsons); readOnly customizations, complex view templates & TOCs, including at various \"Missing tiddler\" nodes; TWTones' filter-pills", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "TiddlyWiki itself is of course the mean appeal. It's an extraordinary and beautiful phenomenon!\nUser community is fantastic. \nRelink and Conditional shortcut syntax, functions, better variable handling... are all very welcome shifts in core.\nI am potentially excited about MultiUserWiki, though it won't really mature until it can be served on web and used over http (including authentication), and/or until it integrates with SSO/AD authentication for smooth use on institutional networks.", + "project-weaknesses": "I *cannot* imagine leaving TW. \nFEAR: Even tho TW5 itself is \"eternal\" (would continue to work fine even if *everyone* were abducted by aliens), my own essential workflow is 100% TiddlyHost, which has no such guarantee. If Simon Baird were abducted by aliens, I would be scrambling to cobble together a workable setup. \nAnother positive game-changer for me would be authentication-integration with SSO / Active DIrectory, which (if I understand correctly) might allow better university-server use.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00113", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00114.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00114.json new file mode 100644 index 0000000000..9a9d3b2727 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00114.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2010", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "N/A - Still experimenting/no set use case for TiddlyWiki", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "-10?\nProblem is : all help is targeted to software developers? I've started to read the ''excellent'' Grok TW from Soren, but... the concepts are just too.\nMoreover, there's no \"noob\" help. I try to set up \"lists\" of tags and I get 3 examples that are way out of my league!", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Nord\nCurrent theme: \nCurrent layout: \nBrowser language setting: fr\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/flibbles/relink-fieldnames - 2.5.0\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.6\n  $:/plugins/kookma/commander - 2.1.14\n  $:/plugins/kookma/favorites - 4.9.0\n  $:/plugins/kookma/garden - 1.2.2\n  $:/plugins/kookma/kara - 0.9.7\n  $:/plugins/kookma/shiraz - 3.0.10\n  $:/plugins/tiddlywiki/menubar - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "it's up in the information no? I'm testing a lot, but there's no real manual and it's tedious or too complex. \nMost plugin authors don't do any effort to explain what, where, and how!\nThat's why I'm not a regular user despite I discovered TW long ago...", + "positive-about-future": "No", + "tw-future-confidence": "No", + "project-decision-trust": "No", + "project-strengths": "Devs, esp core ones, have really put much thoughts in this program. It really has much and great possibilities and options while being just one single \"text\" file! \nKudos.\nOh, btw, I'm an IT tech, do some SQL, Json, API, html, js, and manage DBs... since 30 years.", + "project-weaknesses": "Devs and the community must realise that they are talking to a public who isn't acquainted with IT stuff: ppl use the soft and don't care about the tech under the hood.\nAnd since you can't even save easily, that's terrible for ppl even if there's tiddlyhost, although only autosave for TW that are \"external\" works.\nThat's why, despite the hours I regularly put in to understand the concepts, I can't get it to work my way and do what I want with it... put text in, save and retrieve it!", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00114", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00115.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00115.tid new file mode 100644 index 0000000000..dc0b26a9a4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00115.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: DIY (any other solution) +diy-backup-info: Syncthing +first-heard-survey: tiddlywiki.com +first-used-tw: 2009 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: The overall consistency, stability and quality of tiddlywiki. +project-weaknesses: I find myself writing more and longer texts. The writing experience in the editor is functional, but it's not a great and inspiring experience that I am looking forward to. Especially in terms of out of the box look and feel and quality of life features (auto complete etc) there is room for improvement. +publish-to-intranet: Not publishing to this location +publish-to-web: Yes, served through Node.js +published-plugin: No +save-method: Multi-file wiki served through Node.js +share-wikis: Yes, with multiple editors/administrators +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00115 +tw-ability-level: I am comfortable writing filter expressions +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: It's a flexible knowledge management system that scales well from small collections of ad-hoc notes to large story bibles. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00116.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00116.json new file mode 100644 index 0000000000..1d7a6c26e6 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00116.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Other", + "other-survey-source": "Online blog about FOSS notetaking apps as alternatives to OneNote", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2020", + "joined-tw-community": "Yes", + "started-tw-community": "2021", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Other", + "other-use-cases": "Recording plaintext config files, such as CFG files for Counterstrike or Keyboard layouts for Heliboard, as well as OSINT profiles for work.", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It serves the same purpose as a pocket notebook or pocket journal, but infinitely more valuable to me.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost;Git forge (GitHub, Gitea/Forgejo, GitLab);No automatic sync across my devices;N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "I am on mobile and unable to do so, but it is close to vanilla, with minor changes, such as a left sidebar, more responsive button elements (mouse cursor to pointer on clickable elements) a few quality of life plugins, but overall nothing advanced.", + "tw-customisations": "Adjustments to core and boot tiddlers, increased encryption to 256 aes, left sidebar plugin, etc.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "When le thongs are slower because it is community run and organized, I think the outcome of decisions is ideal. I would rather slow and steady improvements that cater to what users want vs what most corporations do.", + "project-weaknesses": "Making documentation easier to consume, such as more examples, possibly using images or web gift showing usage of different features, discussions about why one feature superseded another, recommended uses to achieve some functions, etc.\n\nI also think a more public face would be good. I.e. a YouTube channel showing how to start with TW and get to a point where all aspects have been changed in some way.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00116", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00117.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00117.json new file mode 100644 index 0000000000..5e10acb0cf --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00117.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Reddit", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2014", + "joined-tw-community": "Yes", + "started-tw-community": "2018", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Super extendable and customisable knowlegde base", + "tw-ability-level": "I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);Consumer online storage (e.g. Google Drive, Dropbox);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...);WebDAV", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Stability", + "project-weaknesses": "Better landing page and learning material for beginners/non coders.\nThe website looks out dated and tiddlywki is not very visible or findable", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00117", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00118.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00118.json new file mode 100644 index 0000000000..6b3c696040 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00118.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Mastodon", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2011", + "joined-tw-community": "Yes", + "started-tw-community": "2012", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I read and post in this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming;Other", + "other-use-cases": "Server and content manager (blogs and gemlogs)", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki;Yes, served through Node.js", + "publish-to-intranet": "Yes, using a single-file wiki;Yes, served through Node.js", + "value-of-tw": "TiddlyWiki is my main personal \"pensieve\" and it derives in a lot of tools that benefit me in all aspects of my life.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe)", + "backup-method": "TiddlySpot / TiddlyHost;Neocities, Nekoweb, tiiny.host, omg.lol and similar services;DIY (any other solution)", + "diy-backup-info": "I use Syncthing for keep my personal/single-file TiddlyWikis between all my devices (4 laptops with Linux, an old iMac with MacOS and Linux, work PC with Windows, smartphones and tablets with Android).", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/Muted\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: es-MX\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/sq/ExternalContent,$:/plugins/tiddlywiki/codemirror,$:/plugins/tiddlywiki/markdown\nPlugins: \n  $:/core - 5.3.5\n  $:/languages/es-ES - 5.3.5\n  $:/plugins/giffmex/subsume - 1.0.2\n  $:/plugins/ihm/tidgraph - 0.9.6\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.18.1\n  $:/plugins/TheDiveO/FontAwesome - 1.2.16\n  $:/plugins/tiddlywiki/highlight - 5.3.5\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "I've created tiddlers as dashboards, tools for batch editing (asign/delete tags and fields), hide/unhide UI elements, create/delete tiddlers for different purposes, and so on. Most of this work is based on community approaches and some is generated by me from scratch.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "TiddlyWiki's ''documentation'' is awesome!", + "project-weaknesses": "Community tiddler, in tiddlywiki.com, looks very outdated or unmaintained. May be, keeping this updated with more examples from users, in different languages, could help to engage more people and reinforce the base of existing //tiddlywikers//.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00118", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00119.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00119.json new file mode 100644 index 0000000000..cf8c307903 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00119.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2007", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Other", + "other-use-cases": "documenting my constructed languages", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "makes it easy to find and organize information about my constructed languages, and my writing universes", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Thunder\nCurrent theme: $:/themes/cdr/captivate\nCurrent layout: $:/themes/cdr/captivate/ui/PageLayout\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-rounded\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: bottom\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/cdr/colorlab - 0.2.0\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/cdr/captivate - 0.2.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I pretty much always make a custom stylesheet", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I can't think of anything. The change from Classic to the version was a good change. The community is very helpful", + "project-weaknesses": "documentation - it's either lacking or written for technical people. It'd be great if there was more written at a basic level", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00119", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00120.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00120.json new file mode 100644 index 0000000000..04b25a72c3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00120.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2019", + "joined-tw-community": "Yes", + "started-tw-community": "2021", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I use it primarily as a personal project management solution where I keep notes, tasks, and other info in one place with a flexible ui.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/tiddlywiki/codemirror - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-trailingspace - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "While I know and can write JavaScript, I try to avoid making js macros. I do write all the others, stylesheets, macros, functions, widgets, and procedures.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Tiddlywiki is a uniquely powerful tool for managing information. While it can take some time to learn and setup, it can be customized and used like no other tool out there. It has a great team of core developers, and the improvements made to the scripting options over the past few years have been very helpful and well executed. I particularly like the addition of widgets and functions.", + "project-weaknesses": "I stopped using tiddlywiki for a while because I don’t find the editing experience as nice as other tools like Logseq or obsidian where only the part of the page being edited is shown as the raw text, but those tools don’t feature anything close to the built in power tiddlywiki provides for connecting information. I think localized editing would be a nice feature to implement but don’t really know how that would change the tool. I also feel saving wikis in general should not be so complicated.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00120", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00121.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00121.json new file mode 100644 index 0000000000..2a72a5a6b1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00121.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2022", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Helps me greatly to organize the large amount of constantly changing information that I need to manage for my work. In my personal life, I use it to organize the notes I take from books and articles, to discover more connections between the things I read, to retain more knowledge", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Single-file wiki with TiddlyDesktop", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: bottom\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.3\n  $:/plugins/flibbles/relink - 2.4.5\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "Macros for easy linking to issue-tracking system at work by ticket ID, and other similar link macros.\nButton-linked actions to create new pages from a template, with given title, tag, and custom field", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Stability and backward compatibility,\nconsistent vision", + "project-weaknesses": "first-party, officially supported desktop and mobile apps would be nice", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00121", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00122.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00122.json new file mode 100644 index 0000000000..bd468f2cae --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00122.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2023", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming;Other", + "other-use-cases": "Time tracking, Expense Log, Holiday Planning,", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Store knowledge which I can use later (e.g. setup procedures)\nand most of all FIND these knowledge again easily.\nMy last attempt was to put it altogether in different text files which quickly became confusing", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost;WebDAV;DIY (any other solution)", + "diy-backup-info": "rclone (as webdav service)\nduplicati (as backup)\nFile Manager Pro (iOS, for sync)", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: de-DE\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: pop\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/tiddlywiki/menubar\nPlugins: \n  $:/core - 5.3.6\n  $:/languages/de-AT - 5.3.6\n  $:/languages/de-DE - 5.3.6\n  $:/plugins/kookma/commander - 2.1.5\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.6\n  $:/plugins/tiddlywiki/comments - 5.3.6\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/help - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/internals - 5.3.6\n  $:/plugins/tiddlywiki/railroad - 5.3.6\n  $:/plugins/TWaddle/Stylefields - 1.0.2\n  $:/plugins/wikilabs/keyvalues - 2.2.1\n  $:/plugins/wikilabs/space-space-newline - 0.2.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "A lot, like time keeping functions,\ncopy-code (Copy to Clipboard for Code-Snippets)\noutput (formatted screen-output), ...", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "At my current insight and knowledge, the project and community works very well and are always helpful.\nIf I should ever find things which could be done better, I will post a message in talk.tiddlywiki", + "project-weaknesses": "At my current insight and knowledge, the project and community works very well and are always helpful.\nIf I should ever find things which could be done better, I will post a message in talk.tiddlywiki", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00122", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00123.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00123.json new file mode 100644 index 0000000000..1b3b0a180d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00123.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2022", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "Allows me to organize information related to my work and private notes in a very flexible and customizable way, accessible over the web (no need for additional software), future-proof and independent of any companies.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/wilk/palettes/GraphiteLight10\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/pseudo-zoom-in,$:/config/shortcuts-mac/pseudo-zoom-out,$:/config/shortcuts-mac/pseudo-zoom-reset,$:/config/shortcuts-not-mac/pseudo-zoom-in,$:/config/shortcuts-not-mac/pseudo-zoom-out,$:/config/shortcuts-not-mac/pseudo-zoom-reset,$:/config/shortcuts/cancel-edit-tiddler,$:/config/shortcuts/EC-AutoComplete,$:/config/shortcuts/highlight-o,$:/config/shortcuts/open-command-palette,$:/config/shortcuts/sidebar-search,$:/config/shortcuts/stamp\nDisabled plugins: $:/plugins/linonetwo/commandpalette,$:/plugins/oeyoews/neotw-spotlight,$:/plugins/scribs/nav,$:/plugins/tiddlywiki/codemirror-closebrackets,$:/plugins/tiddlywiki/codemirror-keymap-sublime-text,$:/plugins/tiddlywiki/codemirror-mode-css,$:/plugins/tiddlywiki/codemirror-search-replace,$:/plugins/tiddlywiki/menubar,$:/plugins/wikilabs/link-to-tabs,$:/plugins/wikilabs/palette-manager,$:/plugins/wikilabs/thin-scrollbars\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/benwebber/motion - 0.3.0\n  $:/plugins/bimlas/kin-filter - 1.0.1\n  $:/plugins/danielo515/encryptTiddler - 2.5\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.20\n  $:/plugins/flibbles/relink - 2.4.5\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/flibbles/relink-variables - 2.4.1\n  $:/plugins/jd/mob - 1.0.4\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/souk21/commandpalette - 0.0.7\n  $:/plugins/sq/spotlight - 0.0.5\n  $:/plugins/tiddlywiki/katex - 5.3.6\n  $:/plugins/tiddlywiki/lucide-core - 5.3.6-beta-021\n  $:/plugins/TWaddle/pluginsize - 1.0.0\n  $:/plugins/wilk/br-editor-button - 1.0.5\n  $:/plugins/wilk/comment-css-js-editor-button - 1.0.0\n  $:/plugins/wilk/comment-html-editor-button - 1.0.1\n  $:/plugins/wilk/copy-code-button - 1.0.3\n  $:/plugins/wilk/dictionary-table - 1.0.7\n  $:/plugins/wilk/highlight-editor-button - 1.0.4\n  $:/plugins/wilk/nbsp-editor-button - 1.0.2\n  $:/plugins/wilk/pwa-manifest - 1.0.4\n  $:/plugins/wilk/solid-link-button - 1.0.0\n  $:/plugins/wilk/tab-editor-button - 1.0.4\n  $:/plugins/wilk/translinkify-editor-button - 1.0.2\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "Some minor custom styles, procedures, and templates. The most relevant is probably a view template that displays certain tiddler-related information below it, e.g. clickable external links from fields, Relink references/backreferences.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Very welcoming and helpful community.\nStrong commitment to backwards compatibility and longevity of the project.", + "project-weaknesses": "Make TW easier for beginners and not technically inclined users (e.g. easy access to basic features like WYSIWYG editing, tiddler renaming /Relink plugin).\nMake TW more accessible on mobile devices.\nImprove/introduce hosting with seamless multi-device sync and accessible over web (like TiddlyPWA), and ability to host larger attachments (as a paid service if necessary, but easy to use without technical experience).", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00123", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00124.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00124.json new file mode 100644 index 0000000000..5d1e31f5bc --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00124.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2015", + "joined-tw-community": "Yes", + "started-tw-community": "2020", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Memory forgets. TiddlyWiki keeps everything I need easy to recall and use. I have about 1,000 notes and multiples backups!", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I wrote a bash script doing incremental backups rotating every 30 days (rsync) on a different host on my intranet.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/Nord\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: fr-CA\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/new-markdown-tiddler\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.5\n  $:/languages/fr-FR - 5.3.5\n  $:/plugins/ahanniga/find-in-page-plugin - 0.3.0\n  $:/plugins/danielo515/2click2edit - 0.1\n  $:/plugins/flibbles/relink - 2.4.5\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.6\n  $:/plugins/kookma/favorites - 4.8.8\n  $:/plugins/kookma/shiraz - 2.9.7\n  $:/plugins/kookma/shiraz-callout - 0.8.0\n  $:/plugins/kookma/shiraz-formatter - 0.6.0\n  $:/plugins/kookma/todolist - 1.5.0\n  $:/plugins/kookma/trashbin - 1.3.5\n  $:/plugins/linonetwo/markdown-transformer - 0.1.3\n  $:/plugins/nico/notebook-mobile - 1.0.0\n  $:/plugins/tiddlywiki/filesystem - 5.3.5\n  $:/plugins/tiddlywiki/highlight - 5.3.5\n  $:/plugins/tiddlywiki/markdown - 5.3.6-prerelease\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.5\n  $:/plugins/wikilabs/cheatsheet - 1.1.2\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "I don't think so.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The community is very open minded and professional.", + "project-weaknesses": "I don't have much time nor strong jscript knowledge to help, sorry.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00124", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00125.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00125.tid new file mode 100644 index 0000000000..87e26f0748 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00125.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Consumer online storage (e.g. Google Drive, Dropbox) +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2021 +joined-tw-community: No +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: I really like how TiddlyWiki makes it easy to organize complex information and create links between things. I also like how it is just one file that you have to send to get that information to someone else. +project-weaknesses: I can't see myself leaving TiddlyWiki, I don't see anything that worries me about the future. If I had more time, I would love to contribute. +publish-to-intranet: Yes, using a single-file wiki +publish-to-web: Not publishing to this location +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: Yes, and I am the only editor/administrator of my wiki(s) +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00125 +tw-ability-level: I have customised TiddlyWiki through options and plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: I use a TiddlyWiki to store procedures for my job and another as a knowledge base. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00126.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00126.json new file mode 100644 index 0000000000..e376652b88 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00126.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "", + "joined-tw-community": "Yes", + "started-tw-community": "", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Some assistance", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: top\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/open-command-palette\nDisabled plugins: $:/plugins/EvidentlyCube/AutoComplete\nPlugins: \n  $:/core - 5.3.3\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/flibbles/relink - 2.4.4\n  $:/plugins/giffmex/subsume - 1.0.3\n  $:/plugins/kookma/commander - 2.1.10\n  $:/plugins/kookma/favorites - 4.8.8\n  $:/plugins/kookma/kara - 0.8.1\n  $:/plugins/kookma/search - 1.0.0\n  $:/plugins/kookma/shiraz - 3.0.4\n  $:/plugins/kookma/slider - 1.2.0\n  $:/plugins/kookma/todolist - 1.5.0\n  $:/plugins/kookma/utility - 3.0.1\n  $:/plugins/OokTech/Bob - 1.7.6b2\n  $:/plugins/orange/mermaid-tw5 - 0.3.8\n  $:/plugins/sk/TableHelper - 0.0.4\n  $:/plugins/sk/TabletoTiddlers - 0.0.2\n  $:/plugins/snowgoon88/edit-comptext - 0.8.1\n  $:/plugins/souk21/commandpalette - 0.0.7\n  $:/plugins/sq/editor-autolist - 0.1.10\n  $:/plugins/sq/Stories - 1.0.3\n  $:/plugins/tiddlywiki/markdown - 5.3.5\n  $:/plugins/tiddlywiki/menubar - 5.1.23-prerelease\n  $:/plugins/TWaddle/add-sibling - 1.0.0\n  $:/plugins/wikilabs/link-to-tabs - 2.0.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "No", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The talk discourse group is great. \nI'd like to see more on AI integration.\nI'd like to hear more about how people load their data. eg Database data. Is it only through bash scripting? eg how Dave Gifford loads all his bible refs. Perhaps through csv? Perhaps through text splitter utilities?", + "project-weaknesses": "Can't imagine leaving.\nYes that people start abandoning it for obsidian or notion - these seem a bit more current with AI integration.\nI would contribute more apart from my own personal time constraints. Would perhaps contribute more if able to loading data from excel etc. easier.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00126", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00127.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00127.json new file mode 100644 index 0000000000..cc88cca35d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00127.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2020", + "joined-tw-community": "Yes", + "started-tw-community": "2020", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki;Yes, served through Node.js", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "as plan B for bundle info sharing", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Multi-file wiki served through Node.js;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost;Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "No", + "tw-future-confidence": "No", + "project-decision-trust": "Yes", + "project-strengths": "a good forum", + "project-weaknesses": "1. make a simple framework for easier use ( I don't like Tigi anyway, but it on the right way for people don't need such flexble empty.html);\n2. remake video tutorial up to date;\n3. make markdown or myst as first class doc type, gradual retired the old wikitext format (with redesign macro/widget system), if you want a longer future, then should consider this;\n4. integration with github pages and github action\n5. make a powerful multi wiki server, the lack of multi-user feature is bad", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00127", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00128.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00128.json new file mode 100644 index 0000000000..6b0de057b0 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00128.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2023", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Tool to assist in video games, e.g. Book of Hours, Warframe", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "A mix of a wiki and an interesting programming challenge to create new widgets/views to see/manipulate my content", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-CH\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/cancel-edit-tiddler\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.5\n  $:/plugins/mklauber/shuffle - 1.0.2\n  $:/plugins/orange/mermaid-tw5 - 0.3.8\n  $:/plugins/tiddlywiki/codemirror - 5.3.5\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.5\n  $:/plugins/tiddlywiki/codemirror-keymap-vim - 5.3.5\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.5\n  $:/plugins/tiddlywiki/filesystem - 5.3.5\n  $:/plugins/tiddlywiki/highlight - 5.3.5\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.5\n  $:/plugins/tobibeer/plantuml - 0.5.0\n  $:/plugins/wikilabs/bundler - 1.1.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "Disable vim plugin on mobile (based on user agent)\nVim bindings to navigate tiddlers", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I'm happy with the flexibility of tiddlywiki and wouldn't go back.\nLooking forward to MWS for easy self hosted multi wiki handling", + "project-weaknesses": "Operating on big json (jsonextract/jsonindexes) can get rather slow/lock up the browser", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00128", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00129.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00129.json new file mode 100644 index 0000000000..0b040dd076 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00129.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2021", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "Simple, all-in-one solution for storing information. Where TiddlyWiki truly shines.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "TiddlySpot / TiddlyHost;DIY (any other solution)", + "diy-backup-info": "SyncThing", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.1\nCurrent palette: $:/palettes/SpartanDay\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: pop\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/tiddlywiki/codemirror-mode-markdown\nPlugins: \n  $:/core - 5.3.1\n  $:/plugins/cdaven/markdown-export - 0.9.0\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.15\n  $:/plugins/flibbles/relink - 2.3.1\n  $:/plugins/flibbles/relink-titles - 2.3.1\n  $:/plugins/tiddlywiki/codemirror - 5.3.1\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.2.7\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.2.7\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.1\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.2.7\n  $:/plugins/tiddlywiki/highlight - 5.2.7\n  $:/plugins/tiddlywiki/markdown - 5.3.1\n  $:/plugins/wikilabs/link-to-tabs - 2.0.1\n  $:/plugins/wikilabs/multicol-dropdown - 1.0.3\n  $:/plugins/wikilabs/remove-states - 1.0.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.1\n  $:/themes/tiddlywiki/vanilla - 5.3.1\n
", + "tw-customisations": "I add the ability to clear metadata like timestamp, author, etc. It is handy for certain tiddlers.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Fixing bugs, adding features, overall progression, and continual improvements", + "project-weaknesses": "Could you imagine yourself leaving TiddlyWiki? Not at this time\nIs there something you are afraid of in the future of TiddlyWIki? When Jeremy no longer leads the project\nWhat could change your relationship with TW and its community? Nothing really\nWhat might encourage you to contribute more to the project? Can't think of anything", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00129", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00130.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00130.json new file mode 100644 index 0000000000..e579fda168 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00130.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Discord", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2015", + "joined-tw-community": "Yes", + "started-tw-community": "2022", + "use-ttw": "I do not engage with this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Programming", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "I use TiddlyWiki to organize for knowledge collection and sharing, but not on a day to day basis.\n\nHaving said that, I do find TiddlyWiki very valuable in how to think about, and organize various topics under a certain subject.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "I create own macros, functions and procedures. Or at least I try to", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The TiddlyWiki base is very robust with a plethora of plugins.", + "project-weaknesses": "Learning the intricated details of TiddlyWiki is sometimes challenging. There are excellent resources out there, that are findable as wel and TiddlyWiki is amendable to introspection. But more and different perspectives on how TiddlyWiki works would be amazing", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00130", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00131.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00131.json new file mode 100644 index 0000000000..940e51c3b1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00131.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Other", + "other-survey-source": "Most likely a Linux Forum. I can't honestly remember. I'm a Linux enthusiast and I had it on a floppy disk. It was likely before 2006.", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I use TiddlyWiki for thought streams. I don't use it frequently, but it helps me map out my thoughts when I do use it. I have also demonstrated TiddlyWiki to friends and colleagues who find it helpful. Some have even gone on to use it more than I have.", + "tw-ability-level": "My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "TBH - I still run across TiddlyWiki files from when I first started using it (classic) - and they still work. So, I do not doubt that I can continue using it in the future. Some of my toddlers are new (v5) and I expect them to work as well.\nOnce I first figured out TW, it just clicked. I never became very involved in the community. But I may start looking into developing customization - not sure what, yet.", + "project-weaknesses": "Although I've used TW for many years, I'm just starting to look into the community. In my opinion, from what I can tell, things are good.\nThe only reason I would stop using TW is if it became dependent on some technology that I do not have access to.\nEveryone that I've introduced to TW was also blown away by the capability and simplicity. So no issues.\nThanks!", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00131", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00132.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00132.json new file mode 100644 index 0000000000..94ef093446 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00132.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Other", + "other-survey-source": "User's Blog when searching for Wiki options.", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2025", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "N/A - Still experimenting/no set use case for TiddlyWiki", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I can make notes and access them on any device without the need of a specific app.\nI can write/post about things that I care about like recipes, travel and instructions.", + "tw-ability-level": "My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "No", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I just got to the project very recently and I'm excited for what I'm seeing. Giving the power to users of running their own wikis is great.\nTiddlywiki is a clever solution, I'm sure it has taken a lot of time and experimenting to get it to where it's now. I love when a community project gets this far and in this shape.", + "project-weaknesses": "I don't have much feedback, but I noticed there's 1,095 issues open in TW's github repo, and that looks like a tremendous backlog. I hope you get time and resources to sort those out.\n\nI know TW is not solving the auth problem, but I wish there was a way to make credentials (or auth tokens) available from a third-party to the TW so you could save automatically on any session/device you log in. Maybe this has already been done? I couldn't find a solution for this.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00132", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00133.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00133.tid new file mode 100644 index 0000000000..af79e4417f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00133.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: No automatic sync across my devices +diy-backup-info: +first-heard-survey: Reddit +first-used-tw: 2024 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: I'm not that familiar to comment +project-weaknesses: Don't know enough to say anything. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00133 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom CSS styles;I have written custom JavaScript +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: I use it as an interstitial journal that with clever tagging makes it a decent knowledge base, meeting preparer, journal and a very basic task and project manager +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00134.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00134.tid new file mode 100644 index 0000000000..8ccb83ecf8 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00134.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: DIY (any other solution) +diy-backup-info: I push to a remote git repository on a file share from a local git repository on the machine where I use TiddlyWiki. +first-heard-survey: tiddlywiki.com +first-used-tw: 2008 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: It may be because of complacency and inattention on my part, but I'm not aware of the ongoing development efforts. It would be nice to expand my use of multimedia beyond images, etc. It would be nice to incorporate AI features for analysis or generating artifacts. +project-weaknesses: I would only leave TiddlyWiki if there's a better open source solution. I don't think that such a solution would be built. The only thing that I'm afraid of is lack of ongoing maintenance. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Multi-file wiki served through Node.js +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00134 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I have written custom HTML +tw-customisations: (I simply use multiple plugins.) +tw-future-confidence: No +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: It has been the preferred location for storing all notes, code scraps, records of daily activity, journal entries, diagrams, etc. Searchability and the stability of open source are the major reasons why I have used it. Prior solutions for retaining notes, etc., fell apart. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00135.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00135.json new file mode 100644 index 0000000000..7f693535ea --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00135.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "", + "joined-tw-community": "Yes", + "started-tw-community": "", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I keep all my thoughts in TW and use it to organise my work, by having individual tiddlers for each dossier I'm examining. I created also a table with the list filter so that I have an overview over all the dossiers. Finally I use it to record list of words I want to learn, test", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/tiddlywiki/katex\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/kantorsite/mathjax - 5.0.12-beta\n  $:/plugins/matabele/makelist - 0.0.2\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tiddlywiki/railroad - 5.1.11\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I created a macro to convert tiddlers containing a dictionary of words with translations into a quiz, where the translation appears as a tooltip over the word", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Jeremy is an example of perseverance, dedication, farsightedness and competence. With his charisma, he can lead a vast team of extremely good developers throughout the world to constantly improve TW", + "project-weaknesses": "the explanation of the filters, macro and the likes could be better. on the other hand with LLMs one can get good explanations these days", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00135", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00136.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00136.tid new file mode 100644 index 0000000000..6b6ce95eab --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00136.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...) +diy-backup-info: +first-heard-survey: Reddit +first-used-tw: 2016 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Discussion about future developement is very open and the process is transparent. The community is awesome. +project-weaknesses: If Obsidian, Logseq, Foam and the likes become truly open source and provide encryption, I might leave TiddlyWiki as they cater my use case better. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00136 +tw-ability-level: I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...) +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Flexibility, ease of mind with regard to its open and free nature. Having information (and encryption) available on so many plattforms. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00137.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00137.json new file mode 100644 index 0000000000..3dfc392fd4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00137.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2016", + "joined-tw-community": "Yes", + "started-tw-community": "2016", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "It is for me the *principal* tool to keep track of/ manage the information about all my interests and activities.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I use Syncthing to update the various copies I have across different machines (Windows/Linux/Android). For backups I use Timimi.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/jeveg/sidekick - 1.0.0\n  $:/plugins/kookma/commander - 2.1.14\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "For \"new\" wiki's I use a customized template-wiki with various stylesheets, macros (including JS) and configurations to build upon. For development purposes, I use Gatha from Kookma.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "* The underlying \"philosophical basis\": (1) information as a constellation of information-snippets that can be combined depending on the purpose of the moment; (2) the 'guarantee' that the stored information is under my own control and still retrievable in the future, and thus independent of companies or propriety formats/web storage. \n* The responsiveness of the developers and the really very helpful and positive community!\n* Great Program: such a lean environment, so much flexibility!", + "project-weaknesses": "* Steep learning curve that could discourage users. Yes, there is documentation - which is positive - but it is not complete and often written with a 'technical' bias. Therefore, it takes a lot of time, effort and some frustration to get acquainted with the intricacies (and quirks) of the program. The community-platforms are indispensable to make the contents more practical.\n* Working with arrays could be more easy", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00137", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00138.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00138.tid new file mode 100644 index 0000000000..45e6dd5d36 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00138.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...);Neocities, Nekoweb, tiiny.host, omg.lol and similar services;No automatic sync across my devices +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2007 +joined-tw-community: No +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Being there. Being good. Caring about quality and performance. Keeping the Classic edition around. +project-weaknesses: I'm not confident in the future of modern browsers / engines as we know them. The tech that made TiddlyWiki possible doesn't look future-proof or trusty anymore. I don't see what anyone can do to fix that. +publish-to-intranet: Not publishing to this location +publish-to-web: Yes, using a single-file wiki +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: Yes, and I am the only editor/administrator of my wiki(s) +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00138 +tw-ability-level: My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: I'm an old wiki head. TiddlyWiki is like a steadfast friend. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00139.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00139.json new file mode 100644 index 0000000000..f089502e3b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00139.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2025", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Saving collections of things like quotes and images", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "A customizable and trustworthy place to store information in a useful way and have them refer to each other.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I use a self-hosted TiddlyPWA sync server.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/languages/en-US - 5.3.7\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/flibbles/relink-fieldnames - 2.5.0\n  $:/plugins/valpackett/tiddlypwa - 0.2.2\n  $:/plugins/valpackett/web-app-manifest - 0.2.2\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I use custom raw markup for an apple-touch-icon separate from the favicon.ico, a custom ViewTemplate component to display an 'attribution' field to add attribution information for image tiddlers, a table of contents in the sidebar, and custom CSS to add icons before some links.", + "positive-about-future": "Yes", + "tw-future-confidence": "No", + "project-decision-trust": "No", + "project-strengths": "TiddlyWiki appears to be the best option for a personal wiki used as a knowledge base that I can control, short of spinning up a MediaWiki instance, which is how I use it. TiddlyWiki is simple to get started with, where other software like MediaWiki could end up being overkill. It uses WikiText for formatting and supports HTML as well, while a great majority of software uses Markdown while stripping HTML compatibility, which I am not fond of.", + "project-weaknesses": "Currently, I disagree with the philosophy of tiddlers; I would rather treat (content) tiddlers as whole pages than as the base unit of information. However, I am still new to TiddlyWiki, and I am starting to open up to the idea. I have not interacted with the TiddlyWiki community yet, nor have I witnessed its decision-making process, so I cannot comment on that, hence why I selected 'No' on the satisfaction question.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00139", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00140.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00140.json new file mode 100644 index 0000000000..9dd4e58c6f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00140.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2018", + "joined-tw-community": "Yes", + "started-tw-community": "2018", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read and post in this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It's the right fit for a personal information manager that I can adapt to make it useful for any use cases I throw at it (given enough effort)", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.1\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/nico/notebook\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: text\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/fancyquotes,$:/config/shortcuts/mono-block,$:/config/shortcuts/mono-line,$:/config/shortcuts/notebook-focus-search,$:/config/shortcuts/random-tiddler,$:/config/shortcuts/remembercz,$:/config/shortcuts/rememberq,$:/config/shortcuts/save-tiddler,$:/config/shortcuts/sticky\nDisabled plugins: $:/plugins/benwebber/motion,$:/plugins/BurningTreeC/PrintRiver,$:/plugins/can/rider,$:/plugins/danielo515/ContextPlugin,$:/plugins/EvidentlyCube/AdvancedPerformance,$:/plugins/felixhayashi/hotzone,$:/plugins/gt6796c/mermaid-tw5,$:/plugins/gt6796c/rocklib,$:/plugins/kiasu/RandomTiddlerButton,$:/plugins/kookma/utility,$:/plugins/MaxGyver83/tw5-keyboard-navigation,$:/plugins/mermaid-tw5,$:/plugins/sobjornstad/TiddlyStretch,$:/plugins/telmiger/PluginSize\nPlugins: \n  $:/core - 5.3.1\n  $:/plugins/ahahn/tinka - 0.5.0\n  $:/plugins/benwebber/crosslinks - 0.4.0\n  $:/plugins/benwebber/input - 0.2.0\n  $:/plugins/benwebber/list-inline - 0.3.0\n  $:/plugins/bimlas/highlight-searched-text - 0.5.0\n  $:/plugins/BTC/PrintRiver - 0.2.2\n  $:/plugins/danielo515/2click2edit - 0.1\n  $:/plugins/danielo515/encryptTiddler - 2.5\n  $:/plugins/ebalster/formula - 0.2.5\n  $:/plugins/EvidentlyCube/TaskList - 1.0.14\n  $:/plugins/felixhayashi/respawn - 0.0.3\n  $:/plugins/flibbles/relink - 2.3.1\n  $:/plugins/kookma/commander - 2.1.5\n  $:/plugins/kookma/favorites - 4.8.1\n  $:/plugins/kookma/kara - 0.7.3\n  $:/plugins/kookma/refnotes - 1.8.5\n  $:/plugins/kookma/section - 1.1.0\n  $:/plugins/kookma/shiraz - 2.7.4\n  $:/plugins/kookma/timelines - 1.3.0\n  $:/plugins/kookma/trashbin - 1.2.4\n  $:/plugins/kookma/vote - 1.0.1\n  $:/plugins/mklauber/aliases - 5.2.4\n  $:/plugins/nico/notebook-mobile - 1.0.0\n  $:/plugins/nico/shields - 0.0.1\n  $:/plugins/orange/mermaid-tw5 - 0.3.7.1\n  $:/plugins/PIM/BoustophredonSVG - 0.1.0\n  $:/plugins/snowgoon88/edit-comptext - 0.9.3\n  $:/plugins/sobjornstad/TiddlyRemember - 1.3.4\n  $:/plugins/sq/editor-autolist - 0.1.10\n  $:/plugins/sq/quickimages - 0.0.3\n  $:/plugins/sq/selective-refresh - 0.0.1\n  $:/plugins/stobot/sticky - 0.1.30\n  $:/plugins/telmiger/details - 0.7.5\n  $:/plugins/telmiger/EditorCounter - 0.6.5\n  $:/plugins/telmiger/HarveyBalls - 0.1.0\n  $:/plugins/telmiger/rpn - 0.7.3\n  $:/plugins/TheDiveO/FontAwesome - 1.2.22\n  $:/plugins/tiddlywiki/bibtex - 5.3.1\n  $:/plugins/tiddlywiki/codemirror - 5.3.1\n  $:/plugins/tiddlywiki/external-attachments - 5.3.1\n  $:/plugins/tiddlywiki/filesystem - 5.3.1\n  $:/plugins/tiddlywiki/highlight - 5.3.1\n  $:/plugins/tiddlywiki/katex - 5.3.1\n  $:/plugins/tiddlywiki/lucide-core - v5.3.5-beta-002\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.1\n  $:/plugins/tobibeer/random - 0.1.0\n  $:/plugins/wikilabs/edit-tabs - 2.0.1\n  $:/plugins/wikilabs/field-search - 0.4.1\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.1\n  $:/themes/tiddlywiki/vanilla - 5.3.1\n
", + "tw-customisations": "Too many to list, I'm an avid tinkerer of my base TW.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The community is very friendly and engaging and support is easy to find. New plugins are infrequent, but rarely become obsolete, which is a huge plus compared to other projects of similar sizes.", + "project-weaknesses": "I'm finding difficulties with more advanced \"nice to haves\" such as publishing via a SSG, sync over several devices, and seamlessly including images.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00140", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00141.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00141.json new file mode 100644 index 0000000000..4a087e4f63 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00141.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2016", + "joined-tw-community": "Yes", + "started-tw-community": "2016", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "TiddlyWiki is my primary tool for organizing my daily work as well as personal life. I like the concept of customization, privacy, and modularized plugins.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/Blue\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: zoomin\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/mono-block,$:/config/shortcuts/sticky\nDisabled plugins: $:/plugins/kookma/narenj,$:/plugins/tobibeer/appear,$:/plugins/tobibeer/inc,$:/plugins/tobibeer/preview\nPlugins: \n  $:/core - 5.3.5\n  $:/plugins/danielo515/2click2edit - 0.1\n  $:/plugins/flibbles/relink - 2.3.1\n  $:/plugins/jerojasro/copyhtml - 0.0.1\n  $:/plugins/kixam/datepicker - 0.5.2\n  $:/plugins/kixam/moment - 2.24.0\n  $:/plugins/kookma/commander - 2.1.6\n  $:/plugins/kookma/section - 1.2.2\n  $:/plugins/kookma/trashbin - 1.2.2\n  $:/plugins/PSaT/new-windows - 0.6.1\n  $:/plugins/snowgoon88/edit-comptext - 0.9.3\n  $:/plugins/sq/editor-autolist - 0.1.10\n  $:/plugins/stobot/sticky - 0.1.30\n  $:/plugins/tg/layout - 0.5.2\n  $:/plugins/tg/tiddlersbar - 0.0.19\n  $:/plugins/tiddlywiki/menubar - 5.3.5\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "Mostly I use customized CSS and a bit of macros.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Thank you for providing such an incredible tool! Its powerful customization capabilities truly break the boundaries of what TiddlyWiki can do. With the support from community, I genuinely believe TiddlyWiki is on its way to becoming one of the top note-taking solutions in the world.", + "project-weaknesses": "Honestly, I can't imagine ever leaving TiddlyWiki — it's become an essential part of my workflow. The fact that it's a self-contained HTML file that lives on my machine gives me a sense of control and permanence that's rare in modern tools. My only slight concern is future browser compatibility, but I trust the community will continue to adapt and evolve. While I'm not a trained programmer, I do wish I could contribute more directly. That said, the work you're doing is fantastic — please keep it", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00141", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00142.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00142.json new file mode 100644 index 0000000000..d2ea60f19b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00142.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2007", + "joined-tw-community": "Yes", + "started-tw-community": "2007", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read and post in this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Reference (my \"household wiki\" e.g info about which, say, vacuum cleaner bags my vc requires)", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "For work, it is an essential tool where I collect and structure all ideas around the work and its projects, and meeting notes. It allows the ideas to accumulate and link over time, and for me to reference them.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "TiddlySpot / TiddlyHost;No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/felixhayashi/topstoryview\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/flibbles/relink - 2.2.0\n  $:/plugins/telmiger/EditButtons - 1.0.6\n  $:/plugins/TWaddle/Boosters - 0.0.7\n  $:/plugins/TWaddle/DragTag - 0.0.6\n  $:/plugins/TWaddle/HackSearch - 1.5.4\n  $:/plugins/TWaddle/newtids - 0.0.1\n  $:/plugins/TWaddle/OverWrite - 0.0.2\n  $:/plugins/TWaddle/plist - 1.0.1\n  $:/plugins/TWaddle/pluginsize - 1.0.0\n  $:/plugins/TWaddle/RecentSys - 1.0.0\n  $:/plugins/TWaddle/ScrollBack - 0.0.1\n  $:/plugins/TWaddle/SideEditor - 3.2.1\n  $:/plugins/TWaddle/static - 0.0.30\n  $:/plugins/TWaddle/TabLinks - 1.0.5\n  $:/plugins/TWaddle/tag-categories - 1.1.0\n  $:/plugins/TWaddle/TiddlerSets - 0.0.1\n  $:/plugins/TWaddle/tids-to-table - 1.0.11\n  $:/plugins/TWaddle/TopToolbar - 1.0.3\n  $:/plugins/wikilabs/space-space-newline - 1.0.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "Many UI tweaks have been made into the plugins above (notably the Boosters plugin) but of particular importance: The close and delete buttons navigate to previous tiddler. The tiddler editview UI is much simplified. Titles as links.", + "positive-about-future": "Yes", + "tw-future-confidence": "No", + "project-decision-trust": "Yes", + "project-strengths": "The helpfulness in the community is amazing, including Jeremys presence there.", + "project-weaknesses": "I won't leave but am afraid Jeremy disappears one day and things deteriorate. \n\"confident TW meet future needs\" - No, b/c lacking prio of (1) multiuser solution (2) multiwiki communication (3) integration (4) saving issues will continue (5) continued misleading by describing TW as a note-taking system when it is more a note *management* system. *Taking* notes is clunky in TW compared to actual note taking systems.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00142", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00143.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00143.json new file mode 100644 index 0000000000..3b521b39fe --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00143.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2008", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Daily Studies PIM - I keep / share thoughts there - different from the above options", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Unsure - I am still struggling with understand how to use it.\n\n* Simple things - Seem out of reach - for the most part - for me\n\n---\nNote: I do enjoy and am a fan of the software - I just don't get it (many times) on how to do simple things", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);DIY (any other solution)", + "diy-backup-info": "I use Syncthing - for backups - pulling from Gitlab", + "wiki-setup-info": "I use a single files - One about 40 MB (with tags) in size; One over 120 MB in size (no tags)\n\nIt has everything for the past years - in two files.\n\nI learned how to use tags about 1 to 2 years ago - and although they are useful - they make my PIM \"sluggish\".\n\nI do enjoy the product and would even consider contributing - since I think I'm committed to using it now (more or less).", + "tw-customisations": "To have the Tiddlywiki site be geared more towards \"end-users\" who do not program.\n\n* Example - I came to look to see how I can upgrade my 5.3.6 version - to 5.3.7 -- and I spent about 10 minutes looking on the portal - but I still don't know how to do it .", + "positive-about-future": "Yes", + "tw-future-confidence": "No", + "project-decision-trust": "Yes", + "project-strengths": "I am not a programmer - just an \"End-User\" - and I WILL NEVER be a programmer - so please stop telling me to go in that direction.\n\n* The site is geared towards programmers - not end-users\n\n--- To help you understand\n\nAs a child - in school - I had questions - I would stand up and ask - one day we had a substitute teacher - he told me to sit down (that my question was stupid - yes, I am older - they used to say that) - I sat down - but I told him \"In my heart - I am still standing up\".", + "project-weaknesses": "If there was a section called \"n00bs check here\" - Newbies - New to Tiddlywiki - ,....\n\n* Something that allows us to contribute - SIMPLE - ideas - even if the developers don't think they are useful\n\nExample: (what brought me here today)\n\nn00b: How do I upgrade to v5.3.7 from v5.3.6? (Since it's not on the main portal - nor searchable)\n\nAnswer: Click and download (this); Open it; Drag your existing wiki on-top of the page; Save it; Done\n* Some pictures to show this", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00143", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00144.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00144.json new file mode 100644 index 0000000000..ca2703b958 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00144.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2008", + "joined-tw-community": "Yes", + "started-tw-community": "2025", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read and post in this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It provides me a unified note and knowledgebase system, with some built-in smarts (basically, being a wiki), and the ability to add additional smarts as required.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...);DIY (any other solution)", + "diy-backup-info": "DIY web solution for my main personal TW. I run node locally (in a VM), and on that VM I also run nginx as a reverse proxy to the node TW. nginx handles authentication. hen my home router port forwards back to that nginx frontend. This allows me access from anywhere online", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/SpartanDay\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/date-stamp\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/flibbles/relink - 2.4.5\n  $:/plugins/Gk0Wk/focused-tiddler - 0.0.3\n  $:/plugins/tiddlywiki/filesystem - 5.3.6\n  $:/plugins/tiddlywiki/freelinks - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.7-prerelease\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.6\n  $:/plugins/TWaddle/Seentid - 0.0.8\n  $:/plugins/wikilabs/cheatsheet - 1.1.2\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I've tweaked many elements of the interface (sidebar item arrangement, tagpill menu items, order of items when viewing a tid). However the overall effect remains that of TW out-of-the-box to the casual observer. \n\nVague plan to organise these into an edition at some time", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I enjoy it's a friendly and welcoming community. I think being a small community is part of that (small community caveat, see next question). \n\nI'm excited for the MWS, as a true design-for-online/multiuser system will suit at least one future project, possibly more.", + "project-weaknesses": "I think the \"out of the box\" experience of TW is poor. The concepts are great, but the initial user experience of setting it up (fighting browser security with single file, or setting up node, or tiddlyhost solutions) is a high first step. \n\nSmall community is indicative of a project that isn't really growing, and IMHO not reaching it's potential. Small community means limited users and testers, many of whom are happy to solve problems - but not indicative of the broader userbase", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00144", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00145.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00145.tid new file mode 100644 index 0000000000..1b2c5d4dc5 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00145.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: N/A - I keep my wiki on a single system +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2015 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Creativity and simplicity +project-weaknesses: Storage. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00145 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles +tw-customisations: I have my own local plugin (made with kookma’s gatha) where I store my customisations (basic) like stylesheets, TOC etc. I have one wiki where I have modified the views to suit my needs for a knowledge base using tiddlymap +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: It gives me immense pleasure and satisfaction for me to write my notes with context and ease. I find the non linear nature of tiddlywiki very useful. I find the tiddlymap plugin very promising. And Kookma plugins very creative. Thank you Mohammad +wiki-setup-info: I used to use the hta hack, but I found a JavaScript saver that serves local files in browser. I use a .bat file to open edge as an app \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00146.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00146.tid new file mode 100644 index 0000000000..4b8885e8eb --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00146.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Consumer online storage (e.g. Google Drive, Dropbox) +diy-backup-info: +first-heard-survey: Talk TiddlyWiki +first-used-tw: 2024 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: making it free. it has backward compatibility. respects users. +project-weaknesses: in future maybe there could be backlogs of issues and bugs and project might be unmaintained. it might require too much "efforts" time and energy. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00146 +tw-ability-level: My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins +tw-customisations: i do not know. i have copied someone else's tiddlywiki. +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: it helps in storing and learning information. its best because it can be modified and also it is free. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00147.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00147.tid new file mode 100644 index 0000000000..7f6f6bdbf2 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00147.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: DIY (any other solution) +diy-backup-info: iCloud Drive - it just sits in a folder that's in sync between my Mac and mobile devices (Quine) +first-heard-survey: Official newsletter +first-used-tw: 2018 +joined-tw-community: No +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Keeping things on the same track, not expanding and enshittifying +project-weaknesses: I want to be able to write in markdown natively, the plugins aren't great and I would write a lot more if this was native +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00147 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I have written custom CSS styles +tw-customisations: I customized all my stylesheets and menus +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: It gives me something that's offline, web based, and in a manageable single file that is extensible and personal. +wiki-setup-info: My TiddlyWiki version seems to be missing this \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00148.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00148.json new file mode 100644 index 0000000000..ae4806d8b8 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00148.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2008", + "joined-tw-community": "Yes", + "started-tw-community": "2015", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I read and post in this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "I consider Tiddlywiki to be an almost perfect \"knowledge database\", where I can piece together and interact with webs of information.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost;Consumer online storage (e.g. Google Drive, Dropbox);WebDAV", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/DesertSand\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: sv-SE\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/SL-Verktyg\nDisabled plugins: $:/languages/sv-SE\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/kookma/section - 1.2.2\n  $:/plugins/OokTech/RandomValue - 0.1.5\n  $:/plugins/tiddlywiki/browser-sniff - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "If a given TiddlyWiki is mostly used as a place to \"dump\" information in, then hardly no customization. The more time I spend interacting with it, the more it will be customized.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The organic feel of the development is reassuring, as is the wide range of people and backgrounds involved in both project and community. Especially with Jeremy as helmsman for the project.\nThe \"teaser\" filter functions for JSON data handling that we got a year or two back got me VERY excited and hopeful for more.", + "project-weaknesses": "I don't see any plausible scenario where I would drop TiddlyWiki and/or the community.\nI think I saw that there will be some semi-\"official\" delegation of work on developing subsystems to certain people, which to me sounds like it could make project management easier for Jeremy.\nThe main thing stopping me from contributing to the project is that, even after using TW for more than 15 years, I still feel like I'm not competent enough...", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00148", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00149.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00149.json new file mode 100644 index 0000000000..913d3addd7 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00149.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2022", + "joined-tw-community": "Yes", + "started-tw-community": "2023", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "a Zettelkasten for my reading and books", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It is a personal wiki for my reading and building connections between books reading projects and providing a journal of my reading", + "tw-ability-level": "I am comfortable writing filter expressions", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I use syncthing to backup my files but need to look at remote hosting as then I can access my Tiddlwiki when out and about.\nI was caring for my partner through the last three years of his life and so largely housebound - hence a home network solution", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.7+9982\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/felixhayashi/vis - \n  $:/plugins/sukima/reveal-js - 1.1.1\n  $:/plugins/tiddlywiki/filesystem - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/katex - 5.2.0-prerelease\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.2.5\n  $:/themes/tiddlywiki/vanilla - 5.2.5\n
", + "tw-customisations": "I use backlinks to give me a Zettelkasten effect\n\nso every tiddler has this code at the bottom:\n\n<>\n\nNot very exciting", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I like that it is open source and works even on Termux on my Android phone - which is where it started out.\nI am aware I am a small cog and don't use Tiddlywiki to its full potential\nand there are kinks that need sorting and I need to engage to maintain it.\nI come from a Linux background - next year I will have been using Linux as my sole OS\nfor 25 years. Thanks to receiving Windows Me on a new computer and it being so buggy that\nI moved to Linux to recover my files.", + "project-weaknesses": "I may leave TW I have to leave that open but I do not at present see that as likely.\n\npotential small black clouds on the horizon are:\n- having .tid files that are not compatible with a new version of TW and no easy path to convert them\n- needing to host my TW remotely in the node.js format so I can access it remotely and that not being possible.\n\nMy partner died last month and so things are changing so I cannot offer help at this time.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00149", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00150.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00150.json new file mode 100644 index 0000000000..3df58e7a63 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00150.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2005", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "miniature database", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I use TW as my primary knowledge base and to keep track what is to be done.\nI know that I won't loose any information as soon as I put it into a tiddler.\nI also use TW as a single point of entry to link to the corporate tools.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/.oap/palettes/NordOAP\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: fr\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/external-link,$:/config/shortcuts/layout-switcher,$:/config/shortcuts/linkify,$:/config/shortcuts/list-bullet\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/languages/fr-FR - 5.3.7\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/kixam/datepicker - 0.5.1\n  $:/plugins/kixam/moment - 2.14.1\n  $:/plugins/telmiger/details - 0.7.5\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/wikilabs/link-to-tabs - 1.1.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "Stylesheets, macros to customize rendering of information or to link to corporate tools, a bit of javascript to automate some calculations.\nSome of this customisations come from the community.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "TW is a reliable piece of software.\nThe community is friendly and responsive and provides a lot of resources.\nThanks a lot for the great work !", + "project-weaknesses": "TW seems a bit overwhelming for newcomers, so maybe trying to lower the entry barrier.\nAll in all, I am not afraid in the future of TW.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00150", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00151.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00151.json new file mode 100644 index 0000000000..067f7668f7 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00151.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2003", + "joined-tw-community": "Yes", + "started-tw-community": "2017", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I use it to organise my mind & my life!", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Blanca\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/tobibeer/sparkl,$:/themes/tiddlywiki/snowwhite\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/mklauber/shuffle - 1.0.2\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I've written several custom JavaScript macros for my own needs e.g.working with dates (countdown to date, countup from date, days between two dates, display date n days from today), displaying timers, generating daily todo lists, and generating svg graphs from tables", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I don't have a lot of interaction with the project and community, but when I periodically update my wikis it always feels like improvements have been made", + "project-weaknesses": "In terms of what might encourage me to contribute to the project: the macros & tools I've written for myself seem a bit too esoteric, and probably built in non-standard / hacky ways, to be useful to the wider community. If there was a simple, central way to share custom macros I might be encouraged to tidy them up for public consumption!", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00151", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00152.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00152.json new file mode 100644 index 0000000000..5c33b73407 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00152.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2019", + "joined-tw-community": "Yes", + "started-tw-community": "2019", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "A wholly owned, time & battle tested platform to store and manage personal information.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js", + "backup-method": "TiddlySpot / TiddlyHost;WebDAV", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/CupertinoDark\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: el-GR\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/EC-GoToModal\nDisabled plugins: $:/plugins/btheado/BrowserStorage,$:/plugins/linonetwo/markdown-transformer,$:/plugins/oeyoews/tiddlywiki-codemirror-6,$:/plugins/snowgoon88/edit-comptext,$:/plugins/tiddlywiki/browser-storage,$:/plugins/tiddlywiki/codemirror,$:/plugins/tiddlywiki/dynaview,$:/plugins/tiddlywiki/menubar,$:/plugins/tiddlywiki/nodewebkitsaver,$:/plugins/wikilabs/palette-manager,$:/plugins/wikilabs/palette-watch\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/EvidentlyCube/AutoComplete - 1.0.20\n  $:/plugins/EvidentlyCube/GoToShortcut - 0.3.1\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/flibbles/relink-fieldnames - 2.5.0\n  $:/plugins/flibbles/relink-markdown - 2.5.1\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/flibbles/relink-variables - 2.5.0\n  $:/plugins/kookma/commander - 2.1.14\n  $:/plugins/kookma/search - 1.0.0\n  $:/plugins/kookma/section - 1.2.2\n  $:/plugins/kookma/shiraz - 3.0.12\n  $:/plugins/kookma/tweaks - 0.2.2\n  $:/plugins/kookma/utility - 3.2.3\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.7\n  $:/plugins/tiddlywiki/dynannotate - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/plugins/TWaddle/pluginsize - 1.0.0\n  $:/plugins/TWaddle/SideEditor - 3.0.12\n  $:/plugins/valpackett/web-app-manifest - 0.2.2\n  $:/plugins/wikilabs/palette-switcher - 1.0.0\n  $:/plugins/yaisog/choose-random-filter - 0.9.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "- Small CSS adjustments", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Taking careful steps without rushing, after discussions with the community.", + "project-weaknesses": "- Focus more on modern/async saving mechanisms (TiddlyPWA but native)\n- Easier direct capture of information, maybe through WYSIWYG instead of modal modes (ie edit mode OR viewing mode)\n- Easily accessible library of ready-made solutions to common questions/problem\n- Far future (after 5.4.x or even 6.x): a kind of Do What I Mean syntax to avoid all Those Pesky Brackets™", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00152", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00153.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00153.json new file mode 100644 index 0000000000..ad1b7b7486 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00153.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2025", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "I dont use tiddlywiki at work. I use it to record discussions on our online book club in wiki form. In essence it is a traditional wiki.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "No automatic sync across my devices", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/ABL-COLORS\nCurrent theme: $:/themes/nico/notebook\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: pt-BR\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-boxed\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/nico/notebook-mobile - 1.0.0\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I added a footer with custom images and CSS at the end of the html file.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "It's extremely easy to start a wiki. Having the whole wiki in a single file is perfect. No need to run and maintain a server. These are the best things about tiddlywiki.", + "project-weaknesses": "I researched \"wiki engines\" a year or so ago and did not pick tiddlywiki in part because I felt disoriented by the navigation style - things changing the layout of the site all the time. This made me discard tiddlywiki as an option, probably more people do it too\n\nI'm affraid Tiddlywiki is not suported in older or future browsers since it uses lots of javascript.\n\nIt feels tiddlywiki is quite complete, tbh. I don't see how could I contribute work to the project. I can donate money, though.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00153", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00154.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00154.json new file mode 100644 index 0000000000..18485f6b3b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00154.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2023", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Keeping a record of my work and life, in a single HTML file, with hyperlinked pages, subjects, etc.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I have my TiddlyWikis in Syncthing directories", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/CupertinoDark\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-boxed\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "A full-featured wiki system in a single-HTML file. That's extremely useful. And easy to use on top of that.", + "project-weaknesses": "I could leave TiddlyWiki if out of nowhere appeared another project that works better. A calendar-like thing for journal entries would be helpful. I also think the documentation could be improved, taking into account persons of different expertise levels, and what they intend to achieve, following for example the Diátaxis approach to documentation. There are a few things I'd like to do/change myself on my wikis, but I have no idea where to begin.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00154", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00155.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00155.tid new file mode 100644 index 0000000000..0d5b302617 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00155.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: TiddlySpot / TiddlyHost +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2021 +joined-tw-community: No +main-use-cases: Worldbuilding (e.g. for role-playing games) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Well, it keeps working so far. I don't really follow the news so I don't know what's going on in the community, but my Wikipedia keeps working and it already has everything I need. And when I don't have something, I just find some old threads where someone requested it +project-weaknesses: Idk everything's fine ig +publish-to-intranet: Not publishing to this location +publish-to-web: Yes, using a single-file wiki +published-plugin: No +save-method: Single-file wiki with TiddlyDesktop +share-wikis: Yes, and I am the only editor/administrator of my wiki(s) +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00155 +tw-ability-level: I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: TiddlyWiki has become a powerful tool for my creative writing process. I've been using it for last four years for my passion project. It's convenient, incredibly customizable, and easy to work with. I use it almost daily. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00156.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00156.json new file mode 100644 index 0000000000..ee47f43703 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00156.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2006", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "Yes", + "main-use-cases": "Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Significant value, using it for all my tech notes and tracking the work I'm doing in 2 different wikies - one is plain tiddly wiki with few plugins installed, another is customised Projectify fork, based on tiddly wiki.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with TiddlyDesktop", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I'm using keybase.io filesystem to share wiki between devices and shell script to sync wikies. before starting work pull files from remote, after saving - pushing files to remote. I'm not using backup feature of tiddlydesktop, only when upgrading version.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/EzVanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/tiddlywiki/d3,$:/plugins/tiddlywiki/jszip,$:/plugins/tiddlywiki/xlsx-utils,$:/plugins/tongerner/searchtab\nPlugins: \n  $:/core - 5.3.6\n  $:/languages/ru-RU - 5.3.6\n  $:/plugins/bimlas/highlight-searched-text - 0.5.0\n  $:/plugins/danielo515/2click2edit - 0.1\n  $:/plugins/orange/mermaid-tw5 - 0.3.8\n  $:/plugins/tiddlywiki/classictools - 5.3.6\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-keymap-vim - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-x-tiddlywiki - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n  $:/plugins/tiddlywiki/github-fork-ribbon - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/katex - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tiddlywiki/qrcode - 5.3.6\n  $:/plugins/tiddlywiki/railroad - 5.3.6\n  $:/plugins/tiddlywiki/tw2parser - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/centralised - 5.3.6\n  $:/themes/tiddlywiki/readonly - 5.3.6\n  $:/themes/tiddlywiki/seamless - 5.3.6\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/starlight - 5.3.6\n  $:/themes/tiddlywiki/tight - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
\n\n\nand\n\n\n
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/themes/nico/notebook/palettes/palette-grey\nCurrent theme: $:/themes/nico/notebook\nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/tiddlywiki/d3\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/bimlas/highlight-searched-text - 0.5.0\n  $:/plugins/danielo515/2click2edit - 0.1\n  $:/plugins/flibbles/relink - 2.4.4\n  $:/plugins/nico/notebook-mobile - 1.0.0\n  $:/plugins/nico/projectify - 0.15.4\n  $:/plugins/tiddlywiki/classictools - 5.3.6\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/github-fork-ribbon - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tiddlywiki/qrcode - 5.3.6\n  $:/plugins/tiddlywiki/railroad - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I've done a couple of changes to CSS, but some of it is removed now", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Single html wiki, portability and cross platform usage. Ability to use just with browser (no extra tools are needed for basic use scenario)", + "project-weaknesses": "Could you imagine yourself leaving TiddlyWiki?\n\nno", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00156", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00157.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00157.json new file mode 100644 index 0000000000..53f0b46b7e --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00157.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2003", + "joined-tw-community": "Yes", + "started-tw-community": "2018", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki;Not publishing to this location", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "An easy to edit way to collect note and information about our internal developments.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.0\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-AU\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.0\n  $:/plugins/ajh/openall - 0.0.3\n  $:/plugins/chanilino/viz - 1.0.1\n  $:/plugins/telmiger/details - 0.7.6\n  $:/plugins/tiddlywiki-scss-com-au/asciimath4katex - 1.0.11\n  $:/plugins/tiddlywiki-scss-com-au/chartjs - 1.0.16\n  $:/plugins/tiddlywiki-scss-com-au/chartjs-adapter-date-fns - 1.0.1\n  $:/plugins/tiddlywiki-scss-com-au/chartjs-plugin-datalabels - 1.0.1\n  $:/plugins/tiddlywiki-scss-com-au/googlecharts - 1.3.5\n  $:/plugins/tiddlywiki/katex - 5.3.0\n  $:/plugins/tiddlywiki/qrcode - 5.3.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.0\n  $:/themes/tiddlywiki/vanilla - 5.3.0\n
", + "tw-customisations": "I almost always have a custom stylesheet. Use of plugins depends on the wiki! I have sometimes used templates, but find them complicated.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I like the fact that it is open source, built on well-known web technologies, and that it is possible to enhance with plugins.", + "project-weaknesses": "I exclusively use TiddlyWiki as a single-page file not hosted anywhere. The biggest issue is the saving mechanism. If there was some way to become a non-issue, that would be the biggest improvement IMHO.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00157", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00158.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00158.json new file mode 100644 index 0000000000..28d6f31bae --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00158.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2014", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Programming;Other", + "other-use-cases": "Internau corporate knowledgebase. Often for personal use at first and later for the entire team or department.", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "It helps in jotting down ideas, and work on it modularly. This saves a lot of time and lessen wasted resources. Depending on the project, it's either a supplement or the primary method side-by-side with traditional notebook notes and journals.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with TiddlyDesktop", + "backup-method": "TiddlySpot / TiddlyHost;Consumer online storage (e.g. Google Drive, Dropbox);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...);Neocities, Nekoweb, tiiny.host, omg.lol and similar services;DIY (any other solution)", + "diy-backup-info": "Syncthing. It works cross-platform (Android, Linux, iOS, macOS, Windows). While Syncthing can be used to sync online too, it's best for LAN sync'ing. I leave online backups in MEGA Sync and pCloud monthly.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Twilight\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: en-PH\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: pop\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-not-windows/switch-reader-mode\nDisabled plugins: $:/plugins/tiddlywiki/codemirror,$:/plugins/tiddlywiki/codemirror-closebrackets,$:/plugins/tiddlywiki/codemirror-mode-css,$:/plugins/tiddlywiki/codemirror-mode-htmlembedded,$:/plugins/tiddlywiki/codemirror-mode-htmlmixed,$:/plugins/tiddlywiki/codemirror-mode-javascript,$:/plugins/tiddlywiki/codemirror-mode-markdown,$:/plugins/tiddlywiki/codemirror-mode-xml,$:/plugins/tiddlywiki/codemirror-search-replace,$:/plugins/tiddlywiki/codemirror-trailingspace\nPlugins: \n  $:/core - 5.3.7\n  $:/languages/en-PH - 5.3.7\n  $:/plugins/flibbles/relink - 2.5.1\n  $:/plugins/flibbles/relink-fieldnames - 2.5.0\n  $:/plugins/flibbles/relink-markdown - 2.5.1\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/flibbles/relink-variables - 2.5.0\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/kookma/refnotes - 1.9.0\n  $:/plugins/kookma/shiraz - 3.0.12\n  $:/plugins/kookma/shiraz-callout - 0.8.0\n  $:/plugins/kookma/shiraz-formatter - 0.6.2\n  $:/plugins/kookma/tweaks - 0.2.2\n  $:/plugins/kookma/utility - 3.2.3\n  $:/plugins/tg/layout - 0.5.13\n  $:/plugins/tg/tiddlersbar - 0.0.22\n  $:/plugins/tg/topmenu - 0.1.21\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I added my preferred base CSS and font styles that I regularly use across different projects. Although the one I'm using for my TW sites are a bit old, since I'm still working on a fresh new one with only the latest in CSS and HTML.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "1. Very helpful and polite community. I'm an autistic, and a type of autistic who finds it hard to join in a new community even online. So, everyone being helpful and polite made it easy.\n2. Broad-minded team. I asked about creating an English Philippines translation, and it was welcomed with open arms. Generally, it's denied in projects because there's British and/or American English already.", + "project-weaknesses": "Maybe the official documentation can also suggest other TW help/doc sites. The official docs is geared on the technical side, assuming one is in programmer mode. There are other TW help/doc sites written in a \"How-To\" way, or in wordy explanation way. It will help a wide range of users, as we all have different preferred way of learning.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00158", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00159.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00159.json new file mode 100644 index 0000000000..a4ce3e5d7a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00159.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2014", + "joined-tw-community": "Yes", + "started-tw-community": "2014", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read and post in this community", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Worldbuilding (e.g. for role-playing games)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "1572 out of 10, woould definitely continue to use it constantly / daily, for note-taking, exploration, writing, and documentation.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Nord\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/ajh/favorites,$:/plugins/bj/storytabs,$:/plugins/danielo515/autotag,$:/plugins/hchaase/toc_counting,$:/plugins/jcose/MegaMenu,$:/plugins/mklauber/shuffle,$:/plugins/nico/notebook-mobile,$:/plugins/sq/editor-autolist,$:/plugins/tobibeer/xlist,$:/plugins/TWaddle/ListTree\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/kookma/commander - 2.1.3\n  $:/plugins/kookma/shiraz - 2.4.4\n  $:/plugins/tesseract/Moments - 0.6.17\n  $:/plugins/tgrosinger/tw5-checklist - 0.0.15\n  $:/plugins/tobibeer/count - 0.5.0\n  $:/plugins/tobibeer/random - 0.1.0\n  $:/plugins/venomspinner/ghostwriter - 1.0.9\n  $:/plugins/wikilabs/click-effect - 0.2.0\n  $:/plugins/wikilabs/tocP - 0.1.0\n  $:/temp/info-plugin - \n  $:/themes/bimlas/modular - 5.1.22\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I have multiple \"stylers\", separated for easy categorizing - basic system-wide, columns, specific additional creations, templates, etc. I use templates and icon cusomization a lot - especially favicon, and for templates.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I like that everyone continues to be engaged and to develop new solutions / features (even if lately, it sometimes feels like a lot of them are beyond my skill level / knowledge). I am really looking forward to seeing where it goes!", + "project-weaknesses": "I have left TW - for Notion / Obsidian / etc. But I always come back,\n\nBetter? \n- explaining how to host / setup for the non-architect would be good. I'm in IT and not dumb, but... OMG\n- improve basic tools / explanations around themes: this alone would be a HUGE help for me - so many more complex themes I want to create and share", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00159", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00160.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00160.json new file mode 100644 index 0000000000..80258eb6b7 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00160.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2024", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "I use it as a configurable storage system that I can dynamically query and reformat. In particular, I use timestamps, sha256, and sorting to pick out random items from lists.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "WebDAV;DIY (any other solution)", + "diy-backup-info": "I use Syncthing to sync a folder between my personal laptop, work laptop, and android phone, then rclone to serve that folder as WebDav and the builtin WebDav saver.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Twilight\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permaview\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/ahahn/tinka - 0.5.0\n  $:/plugins/us.schwier.tiddlywiki/AdvancedTransform - 1.0.0\n  $:/plugins/us.schwier.tiddlywiki/Archived - 1.0.2\n  $:/plugins/us.schwier.tiddlywiki/Archivist - 0.1.8\n  $:/plugins/us.schwier.tiddlywiki/Tagging - 0.1.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I built my own plugins for extending the Advanced Search, exporting text to a webdav file, an organized tagging system, and archiving using ViolentMonkey to host TiddlyWiki in an iframe.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I really like the customization, and the fact the wiki is moving towards using widgets and filters for more functionality because I find them easier to understand.", + "project-weaknesses": "I would like it if the core components start working towards supporting Javascript Promises. There are native browser libraries I would like to use in filters and events, but can't because they are Promise or callback based.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00160", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00161.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00161.json new file mode 100644 index 0000000000..cbe7bc83a1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00161.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2018", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Estudos espiritualista para o auto-conhecimento, TI, programação", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Um excelente método de estudo, onde você cria o conteúdo onde ele proporciona total liberdade para concatenar e interligar o seu próprio método e capacidade para estudar rumo à compreensão.\nSou muito grato a todos que trabalham para que o TiddlyWiki exista e seja muito útil.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)", + "save-method": "Single-file wiki with TiddlyDesktop", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Apenas utilizo o OneDrive para estudos durante o trabalho, em casa, copio os tiddlers para o arquivo principal.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/heavier\nCurrent layout: \nBrowser language setting: pt-BR\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/colortext,$:/config/shortcuts/highlight\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/languages/pt-BR - 5.3.7\n  $:/plugins/bj/storytabs - 1.11.0\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.15.4+9756\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/felixhayashi/vis - 4.21.0-SNAPSHOT\n  $:/plugins/ihm/tidgraph - 0.9.6\n  $:/plugins/kookma/refnotes - 1.9.0\n  $:/plugins/kookma/timelines - 1.5.0\n  $:/plugins/mermaid-tw5 - 0.3.5\n  $:/plugins/tiddlywiki/browser-sniff - 5.3.7\n  $:/plugins/tiddlywiki/codemirror - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.7\n  $:/plugins/tiddlywiki/evernote - 5.3.7\n  $:/plugins/tiddlywiki/nodewebkitsaver - 5.3.7\n  $:/plugins/tiddlywiki/railroad - 5.3.7\n  $:/plugins/TWaddle/ListTree - 1.0.4\n  $:/plugins/TWaddle/SideEditor - 2.1.0\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/centralised - 5.3.7\n  $:/themes/tiddlywiki/heavier - 5.3.7\n  $:/themes/tiddlywiki/readonly - 5.3.7\n  $:/themes/tiddlywiki/seamless - 5.3.7\n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/starlight - 5.3.7\n  $:/themes/tiddlywiki/tight - 5.3.7\n  $:/themes/tiddlywiki/tight-heavier - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "Não fiz alterações particulares, apenas utilizo os plugins que facilitam anotações, marcações, criar links, ferramentas que ajudam o estudo.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Vejo TiddlyWiki como uma poderosa e vasta ferramenta de estudos onde se pode agregar os mais diversos tipos de mídia para fins de estudos e para a compreensão de si, do meio e do todo. Claro que, o mais sofisticado possa ter algum custo, o que é válido! E sim: ampliar as possibilidades nativas de edição textual, tabelas, flowchart, mind map, imagens etc...", + "project-weaknesses": "Não imagino dexando o TiddlyWiki, utilizo por fora um leitor de PDF, um outro para anotações e para aplicar tags aos conteúdos sublinhados que estudo uso o Zotero para os diversos livros que estudo.\nO que temo no TiddlyWiki é que deixe sua qualidade e capacidade de expansão se reduzir e se fechar, não mais produzindo possibilidades de crescimento.\nEu ainda não participo de comunidades...\nPara contribuir, vou procurar como faze-lo e efetivar a ajuda.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00161", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00162.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00162.json new file mode 100644 index 0000000000..4b3e3e3ef9 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00162.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2013", + "joined-tw-community": "Yes", + "started-tw-community": "2013", + "use-ttw": "I do not engage with this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read and post in this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Yes, using a single-file wiki;Yes, served through Node.js", + "value-of-tw": "i have been using it every day as personal and professional journal and knowledge base", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);DIY (any other solution)", + "diy-backup-info": "i have set up a Bob server on my intranet / VPN", + "wiki-setup-info": "i have several quite different live setups", + "tw-customisations": "all of the above, and more. I even tweaked the core plugin on several occasions for my specific needs. I try to regroup my most useful tweaks in plugins that i make available to the world via github", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "local first, one file containing data+app+plugins+settings, no need for any app but a recent web browser, works on any and all devices that can run any recent web browser. It is important to me that a server should remain optional, and should be assumed unreachable or unavailable most of the time", + "project-weaknesses": "i really need TW to be collaborative, in a local first way. I don't think the current ways, available or being explored by the mainstream community (bags & recipes with a server using SQLite) would suit my needs exactly, because 1/ development is too slow, because 2/ it seems too complex, my need is more simple\n\nI am now looking into a 3-fold way to make TW more collaborative, i don't have enough characters in this box to describe it here, please contact me if interested", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00162", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00163.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00163.json new file mode 100644 index 0000000000..d8231919ea --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00163.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2017", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "Single file website, easy to use, open source", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "Page on Github/Gitlab\nStoring on Dropbox for personal use case", + "tw-customisations": "Added custom thumbnails, filters to list all tiddlers inside a single tiddler for reference. (Is that how you conjugate Tiddly?)", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "It's a single file that does a lot!", + "project-weaknesses": "More tutorials! Most of the stuff had to be learned by reverse engineering and guessing.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00163", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00164.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00164.tid new file mode 100644 index 0000000000..ea23082c62 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00164.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: DIY (any other solution) +diy-backup-info: I use Resilio Sync to sync a folder across local wifi containing the wikis between Desktop and Laptop +first-heard-survey: Talk TiddlyWiki +first-used-tw: 2014 +joined-tw-community: Yes +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: That Jeremy is still at the helm but there are also several key people who have a deep knowledge of the architecture. Also, the project is open source and there is a commitment to some degree of 'backwards compatibility'. +project-weaknesses: I'm extremely grateful for what I receive from the forum when I ask for help and I almost always get the answer to a problem. I could never imagine leaving TW or something that would change my relationship with it. Unfortunately, I don't have the time or skills to make substantial contributions to the project - hence my gratitude that others do. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: 2014 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00164 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom CSS styles +tw-customisations: +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: Yes +use-github-discuss: I do not engage with this community +use-mailing-list: I do not engage with this community +use-reddit: I do not engage with this community +use-ttw: I read and post in this community +value-of-tw: It is absolutely invaluable. I use it several times a day almost every day and don't know how I would operate without it. Very grateful to Jeremy and the developers. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00165.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00165.json new file mode 100644 index 0000000000..671aea5a6d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00165.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2023", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It started as 'the thing I ramble in' but the ability to start dipping my toes in on the backend gradually has helped me as a creative writer develop previous interests I had in coding! I can directly credit TiddlyWiki as the inspiration for me to write my own website (a WIP...)", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable writing filter expressions;I have written custom HTML", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "TiddlySpot / TiddlyHost;DIY (any other solution);No automatic sync across my devices", + "diy-backup-info": "currently manual backups though I've just started looking into setting up automatic syncing", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/CupertinoDark\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n  $:/plugins/tiddlywiki/internals - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/readonly - 5.3.6\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "I tried a few community templates and am currently using a mildly customized MPTW5 setup. As a beginner to Coding In General I've found the community resources Extremely Helpful... but hard to find mostly because I don't have the mindset to go looking for them!", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "As an outsider who fell into the FOSS movement, I very much like what I found here! TiddlyWiki is perfect for my needs as a writer while also encouraging the out-of-the-box thinking skills I've worked so hard to develop. It's so simple to advertise TiddlyWiki to people who I think will get", + "project-weaknesses": "I work full-time in an unrelated field so don't have much personal time to dedicate to coding, and what time I do have I prefer to spend on my writing projects. I very much want to contribute to the project, but don't feel I have much to contribute in the way of skills right now. Hopefully that'll change in the future as I continue to get more comfortable with my personal usage of TiddlyWiki!", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00165", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00166.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00166.json new file mode 100644 index 0000000000..670366279a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00166.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Official newsletter", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2016", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "TiddlyWiki is an indispensable tool for quick notetaking and team management at work, while at home I use it for worldbuilding and fiction writing, as well as managing to do lists. It allows for fast and organised working.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with TiddlyDesktop", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/DesertSand\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: zoomin\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.7+9982\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/felixhayashi/vis - \n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/Gk0Wk/echarts - 0.2.13\n  $:/plugins/Gk0Wk/focused-tiddler - 0.0.3\n  $:/plugins/kookma/commander - 2.1.14\n  $:/plugins/kookma/shiraz - 3.0.12\n  $:/plugins/kookma/shiraz-callout - 0.8.0\n  $:/plugins/kookma/shiraz-formatter - 0.6.2\n  $:/plugins/kookma/timelines - 1.5.0\n  $:/plugins/kookma/todolist - 1.5.0\n  $:/plugins/OokTech/WordCount - 0.0.6\n  $:/plugins/tiddlywiki/codemirror - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-autocomplete - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-htmlembedded - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.7\n  $:/plugins/tiddlywiki/codemirror-trailingspace - 5.3.7\n  $:/plugins/tiddlywiki/github-fork-ribbon - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I've got a customised stylesheet, JavaScript to calculate age, created three new buttons to help with the creation of specific Tiddlers, and created display templates to standardise output on these specific Tiddlers.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The community on Talk TiddlyWiki is very friendly, and knowledgeable. I use both a lot to work out issues, and while I've not posted questions, I've always been able to find the answers. The documentation on the main site is very comprehensive and well organised. GitHub is a well used tool giving me confidence in the robustness of TiddlyWiki. Each new version of TiddlyWiki has brought something new and exciting to its functionality, and make me rethink how things could be better organised.", + "project-weaknesses": "I'm unsure about the work that is being done on MWS and what it might mean for my use of TiddlyWiki. I prefer simple implementations and maintenance, like I currently have with the single file, so depending on what MWS means in the long run, will determine whether I would upgrade or stick with the version that precedes it.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00166", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00167.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00167.json new file mode 100644 index 0000000000..3154cd6299 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00167.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Reddit", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2021", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Me ayuda a guardar cosas que no sabría dónde más guardarlas, además de vincularlas entre sí: notas sobre personas, proveedores, proyectos, conceptos, bibliografía, etc...", + "tw-ability-level": "My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Syncthing", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Siempre mejorando. Fiel a una filosofía y conceptos que son claros y robustos.", + "project-weaknesses": "Sería fantástico que estuviese más desarrollado cómo hackear tiddlywiki, con ejemplos concretos o pequeños proyectos de ejemplo resueltos para practicar y sentar conceptos.\n\nUna característica fundamental y que hecho en falta es una mejor gestión de archivos adjuntos (imágenes, pdfs, etc...)", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00167", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00168.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00168.tid new file mode 100644 index 0000000000..0240319c87 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00168.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: No automatic sync across my devices +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2013 +joined-tw-community: No +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: No +project-strengths: project is actively developed - have hopes for features I need to be implemented in the future +project-weaknesses: still waiting for JSON Mangler plugin to work with wiki > 5.1.xxx (I can't upgrade some wiki files because of that - still using 5.1.22) or other functionality for creating/updating hierarchical JSON data tiddlers +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with TiddlyDesktop +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00168 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom CSS styles +tw-customisations: plugins for arithmetic calculations, json handling (updates! not just reading), macros for copy information with button click (links, code, text) +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: essential knowledge base, don't need to remember/learn again everything +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00169.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00169.json new file mode 100644 index 0000000000..cece661dba --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00169.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2018", + "joined-tw-community": "Yes", + "started-tw-community": "2019", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Other", + "other-use-cases": "Fitness tracker", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It helps me keep track of things in a highly personalized manner. For me, the most important feature of tiddlywiki is not just its data security, but also its customability.", + "tw-ability-level": "I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom CSS styles", + "save-method": "Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "TiddlySpot / TiddlyHost", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.5\nCurrent palette: $:/palettes/Dracula\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.5\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.5\n  $:/themes/tiddlywiki/vanilla - 5.3.5\n
", + "tw-customisations": "stylesheets and macros to present my tw to myself like how a native notes app would look like on my phone. I don't have a personal computer anymore and am mostly on mobile now.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "people are so eager to help and solve each others' problems, and often are also very inspired in their ways", + "project-weaknesses": "I'm afraid of the empty version someday becoming bloated. \nEven now, I think there is a way to make it even more barebones.\nI'm very reserved and asocial now, unfortunately. I don't think I'll participate in the community any more than I already had, although I still love reading community posts and seeing everyone's interactions.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00169", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00170.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00170.json new file mode 100644 index 0000000000..36a547e26c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00170.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2003", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, with multiple editors/administrators", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Yes, using a single-file wiki;Yes, served through Node.js", + "value-of-tw": "arranging text in the form of tiddlers with automatic date showing age of information and ease of cross platform (phone, tablet, windows, linux) neat field and content search and easy to adapt and so many more things I cant begin to write about in 280 characters!", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.3\n  $:/plugins/tiddlywiki/consent-banner - 5.3.3\n  $:/plugins/tiddlywiki/googleanalytics - 5.3.3\n  $:/plugins/tiddlywiki/katex - 5.1.21\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "auto generation of tiddlers from templates using bash scripts. book like features inspired by https://groktiddlywiki.com/read/.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "multi user access. at the moment I am exploring https://github.com/dionisos2/tiddlygit because it enables me to have code review and code in the same git repository. https://github.com/TiddlyWiki/MultiWikiServer seems to be very good but requires more infrastructure.", + "project-weaknesses": "its a great tool. I started using it in 2007 and was enthusiastic about it then. it has stood the test of time. I am still using it in 2025 and I am perhaps more enthusiastic about it now.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00170", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00171.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00171.json new file mode 100644 index 0000000000..295a5b36be --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00171.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2024", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Non-linear general-purpose notebook/wiki system", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Nord\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-not-mac/underline,$:/config/shortcuts/excise,$:/config/shortcuts/subscript,$:/config/shortcuts/superscript\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.3\n  $:/plugins/aaldrich/tables - 0.6.21\n  $:/plugins/cdr/markdown-more - 0.1.0\n  $:/plugins/danielo515/2click2edit - 0.1\n  $:/plugins/Gk0Wk/TW5-CodeMirror-Enhanced - 0.1.4\n  $:/plugins/mklauber/aliases - 5.3.3\n  $:/plugins/sq/Stories - 1.0.3\n  $:/plugins/tiddlywiki/codemirror - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-closetag - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-css - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-htmlmixed - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-javascript - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-markdown - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-mode-xml - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.3\n  $:/plugins/tiddlywiki/codemirror-trailingspace - 5.3.3\n  $:/plugins/tiddlywiki/filesystem - 5.3.3\n  $:/plugins/tiddlywiki/highlight - 5.3.3\n  $:/plugins/tiddlywiki/markdown - 5.3.3\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.3\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "Stylesheets and ViewTemplates", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Open source, system transparency.", + "project-weaknesses": "Markdown integration.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00171", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00172.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00172.json new file mode 100644 index 0000000000..49fde5cd3a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00172.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2009", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Programming", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "keeps all my notes together at one place.\nI can write mermaid and railway diagrams and can write math expressions.\nI can export and import via drag and drop.\nI use tiddlymap to get mindmaps and relationships between topics.\nI can work from every browser everywhere.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "WebDAV", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Fresh\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-GB\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre\nSticky titles setting: yes\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/languages/de-DE - 5.3.7\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.20+10024\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/flibbles/vis-network - 9.1.3\n  $:/plugins/inmysocks/Dashboard - 0.1.2\n  $:/plugins/jd/NTFS19 - 1.0.1\n  $:/plugins/jd/plainrevs - 0.0.30\n  $:/plugins/orange/mermaid-tw5 - 0.3.8\n  $:/plugins/tgrosinger/tw5-checklist - 0.0.14\n  $:/plugins/tiddlywiki/external-attachments - 5.3.7\n  $:/plugins/tiddlywiki/katex - 5.3.7\n  $:/plugins/tiddlywiki/markdown - 5.3.7\n  $:/plugins/tiddlywiki/qrcode - 5.3.7\n  $:/plugins/tiddlywiki/railroad - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "some plugins I found on the web and just drag and dropped them in.\nI edited external-attachments to work with webdav.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "keeping the project running and breaking not much backward compatibility.", + "project-weaknesses": "With age a project gets stuck in it's tracks and there is not much improvement.\nWe will propably never get a WYSIWYG editor for example.\nBut I'm propably the wrong person. I'm not enough involved in the community or the project.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00172", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00173.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00173.json new file mode 100644 index 0000000000..4acfecc7e8 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00173.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2010", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "I’d like to shape a prepared Tiddlywiki for people arriving in a job, having to keep note of many things : contacts, orgs, projects, procs…", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Heavy payload to prepare my version to achieve the goals I wanted to reach. Many days of reading docs, acquiring comprehension of internal functionnalities et how to use them.\nNow my \"preparation\" is optimum and I use it almost permanently at work as maintained knowledge base.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I save the wiki file on a daily basis, renaming the file, and save many times ad day to avoid loosing changes. Keeping 2 weeks of daily versions, then 1 monthly (last day) version.", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "maintaining the product", + "project-weaknesses": "better explanations and exemples to go deeper in ecases, or better turorials", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00173", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00174.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00174.tid new file mode 100644 index 0000000000..5e19870aa6 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00174.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...) +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2012 +joined-tw-community: No +main-use-cases: As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Programming +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Information on the https://tiddlywiki.com/ website +project-weaknesses: Add formatting for (amongst others) currencies +publish-to-intranet: Not publishing to this location +publish-to-web: Not publishing to this location +published-plugin: No +save-method: Single-file wiki with TiddlyDesktop +share-wikis: Yes, and I am the only editor/administrator of my wiki(s) +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00174 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles +tw-customisations: stylesheets, macros, functions and procedures, +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Not applicable (as retired, etc) +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Quite a lot, use it to keep track of recepies, possesions and use it in charity projects. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00175.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00175.tid new file mode 100644 index 0000000000..d5ab440461 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00175.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: TiddlySpot / TiddlyHost;Consumer online storage (e.g. Google Drive, Dropbox) +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2012 +joined-tw-community: Yes +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: I love the customization, community, and ease of use. You can make it whatever you need. +project-weaknesses: I think I previously said I needed help with hosting and customization (esp for themes) but after a little research.... I was wrong! Now using TiddlyHost, and found all kinds of new resources I didn't know about. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00175 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript +tw-customisations: All of the above (stylesheets, macros/functions/procedures, JavaScript, and direct edits to the core). I make extensive use of templates and custom buttons, special classes for handling formatting type things. +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: No +use-github-discuss: I do not engage with this community +use-mailing-list: I read and post in this community +use-reddit: I read/lurk, but do not post +use-ttw: I read and post in this community +value-of-tw: VERY useful in keeping track of info. It's like a Commonplace book or Zettelkasten. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00176.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00176.tid new file mode 100644 index 0000000000..b9d98b22a3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00176.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: DIY (any other solution) +diy-backup-info: Depends on the particular TW. There are many file sync options. +first-heard-survey: tiddlywiki.com +first-used-tw: 2012 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Open helpful community. I mostly just read relevant topics. JavaScript has many libraries, so standing on the shoulders of giants. Regular updates. Beautiful web site, also as a TW. +project-weaknesses: Make JavaScript more accessible. Filter expressions etc. are good for simple use cases, but become very tough and hard to debug in more complex scenarios. Writing JS requires reloading etc., is cumbersome. Many TW plugins become outdated, e.g. single maintainer. Would be good to know on which ones, one can rely on. Maybe have some hierarchy, have multiple maintainers for heavily used PlugIns. Do not focus too much on NodeJS. I do not want a local Node JS installation. Have a way for online colab +publish-to-intranet: Not publishing to this location +publish-to-web: Not publishing to this location +published-plugin: Yes +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine) +share-wikis: Yes, with multiple editors/administrators +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00176 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript +tw-customisations: Made a kind of versioning sync, so that you can drop one version of TW into another, will track changes and sync to the most current changes or show conflicts. Using NodeJS etc. would loose a big benefit: running purely in browser, important in restricted / company environments +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Single file is blessing: Reliable & beautiful place to put information; Spreading of information controllable, no install, browser sandbox; Nice for sharing projects / collections with others by secure channel. And curse: size limit, siloed, not interoperable with local fs tools. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00177.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00177.json new file mode 100644 index 0000000000..b174dacb04 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00177.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2012", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Highly configurable note taking knowledge base / task management / organizer that I can customize to perfectly suit my needs.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom JavaScript", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.2\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/toggle-sidebar\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.2\n  $:/plugins/tiddlywiki/filesystem - 5.3.2\n  $:/plugins/tiddlywiki/highlight - 5.3.2\n  $:/plugins/tiddlywiki/katex - 5.3.2\n  $:/plugins/tiddlywiki/markdown - 5.3.2\n  $:/plugins/tiddlywiki/railroad - 5.3.2\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.2\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.2\n  $:/themes/tiddlywiki/vanilla - 5.3.2\n
", + "tw-customisations": "I have many custom macros. My largest one is for tracking context with coworkers and meetings. I also have a variety of templates for common pages.\n\nOnly direct edits I've done to the core are to add automatic linkification for certain custom links.", + "positive-about-future": "No", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "* Very open community\n* Strong focus on compatibility / support. I never worry that my wiki will no longer be supported\n* Strong focus on customization.\n* Focus on self-host / DIY.", + "project-weaknesses": "* TiddlyWiki is an incredibly powerful \"operating system\" for knowledge management tools, but it's difficult to develop on top of. My main reason for using TiddlyWiki over other tools is customization. I'd love to see that brought more to the forefront. e.g. version control tools, easier testing for plugins, debuggers, etc.\n* I'm afraid TiddlyWiki will become irrelvent / be surpassed in features by Roam/Obsidian.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00177", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00178.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00178.tid new file mode 100644 index 0000000000..37efca4ac7 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00178.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: TiddlySpot / TiddlyHost +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2005 +joined-tw-community: Yes +main-use-cases: Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: Experimentation, collaboration +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: I like the enthusiastic and robust development community and development timeline. I admire the creativity, skills and generosity of the experienced developers and experimenters. It is the most tweakable, customizable, and creatively enjoyable environment I have ever worked in. +project-weaknesses: I will always be a loyal fan and user of TW. At my current skill level, there is still a gap between the ideas and concepts I read about in the users groups and my ability to comprehend many of them. There are not enough step-by-step tutorials and example uses that help me understand core concepts and how to build workable models. Would help to have more beginner and intermediate level discussion platforms. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: 2015 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00178 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML +tw-customisations: Stylesheets, some macros and procedures +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: No +use-github-discuss: I do not engage with this community +use-mailing-list: I read/lurk, but do not post +use-reddit: I do not engage with this community +use-ttw: I read and post in this community +value-of-tw: It mostly has potential value as I am attempting to develop a real-time team collaboration environment. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00179.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00179.json new file mode 100644 index 0000000000..6fb9537b7c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00179.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2012", + "joined-tw-community": "Yes", + "started-tw-community": "2025", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "The way TW stores the data in one HTML-file. \n(I personaly use one sub-folder for media storage).", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with TiddlyDesktop", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Appealing to me is that the software (application) is future proof.", + "project-weaknesses": "I think that TW will always keeps my interest.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00179", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00180.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00180.json new file mode 100644 index 0000000000..b8ca6f955c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00180.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2013", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Sort of a tiddler database, used by other projects.", + "use-for-work-or-study": "Yes", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It's mandatory :). I recently changed from Chrome to Firefox mainly because Timimi is not working anymore in Chrome.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: pt-BR\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "I don't play outside the data because I fear to lose everything in the next upgrade, so I prefer to read the wiki data from outside.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "The change of the data to JSON made it extremely easier to import from outside. I loved it.", + "project-weaknesses": "If I was able to learn more about \"under the hood\" stuff (actions, transclusions, ...), I'd probably use them more often.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00180", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00181.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00181.json new file mode 100644 index 0000000000..d1d84efd92 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00181.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2006", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "A space to write and link my thoughts.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: top\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/excise\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.3\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/flibbles/relink - 1.10.2\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.3\n  $:/plugins/mklauber/math.js - 1.1.2\n  $:/plugins/snowgoon88/edit-comptext - 0.8.1\n  $:/plugins/sq/editor-autolist - 0.1.10\n  $:/plugins/sq/Stories - 1.0.3\n  $:/plugins/techlifeweb/xmlbuilder - 1.1.0\n  $:/plugins/tiddlywiki/filesystem - 5.3.3\n  $:/plugins/tiddlywiki/highlight - 5.3.3\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.3\n  $:/plugins/wikilabs/link-to-tabs - 2.0.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "None", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Producing, maintaining, and supporting a stable, self-contained product.", + "project-weaknesses": "Nothing comes to mind.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00181", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00182.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00182.tid new file mode 100644 index 0000000000..bd14382db4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00182.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: DIY (any other solution) +diy-backup-info: Self hosted cloud server. +first-heard-survey: Reddit +first-used-tw: 2015 +joined-tw-community: No +main-use-cases: Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Just love the project in general. It stays small and functional. +project-weaknesses: An official saving browser extension would be awesome.. esp with timimi being end of lifed due to Chrome pushing V3 and no updates in sight :( +publish-to-intranet: Yes, using a single-file wiki +publish-to-web: Not publishing to this location +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver) +share-wikis: Yes, with multiple editors/administrators +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00182 +tw-ability-level: I have customised TiddlyWiki through options and plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Mostly an easy repository of information. +wiki-setup-info: n/a \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00183.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00183.json new file mode 100644 index 0000000000..c17d2802b3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00183.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2014", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "mind mapping / chain of thoughts", + "use-for-work-or-study": "No", + "share-wikis": "No, my TiddlyWiki is for personal use only", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "free, private, open information store", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: top\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/tesseract/tekan\nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.16+10020\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/flibbles/vis-network - 9.1.3\n  $:/plugins/sobjornstad/TiddlyRemember - 1.3.3\n  $:/plugins/tiddlywiki/filesystem - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.7\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "keeping the software self contained and with no dependencies", + "project-weaknesses": "simplifying the customisation learning curve for none programmer", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00183", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00184.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00184.json new file mode 100644 index 0000000000..5c561117dd --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00184.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2015", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "Questionnaire", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It is a simple way of organising information and to make it addressable without needing programming skills and without being dependent on other proprietary software. The addons are very valuable and the entire system is free and open source.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/themes/jd/Material/Palette/MaterialLightBase\nCurrent theme: $:/themes/jd/Material\nCurrent layout: \nBrowser language setting: de-DE\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: zoomin\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-boxed\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: enable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/languages/de-DE - 5.3.7\n  $:/plugins/BurningTree/hammerwidgets - 0.1.0\n  $:/plugins/custom/setfield - 0.0.5\n  $:/plugins/danielo/encryptTiddler - 2.1\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/danielo515/encryptTiddler - 2.3\n  $:/plugins/felixhayashi/hotzone - 0.0.3\n  $:/plugins/felixhayashi/tiddlymap - 0.17.14+10018\n  $:/plugins/felixhayashi/topstoryview - 0.2.0\n  $:/plugins/felixhayashi/vis - \n  $:/plugins/inmysocks/MathyThing - 0.2.1\n  $:/plugins/inmysocks/randVal - 0.1.3\n  $:/plugins/rboue/SocialCalc - 1.0.0\n  $:/plugins/tiddlywiki/hammerjs - 5.3.7\n  $:/plugins/tiddlywiki/katex - 5.3.7\n  $:/plugins/tiddlywiki/tiddloid-tweaks - 1.2.0\n  $:/temp/info-plugin - \n  $:/themes/jd/Material - 0.4.14\n  $:/themes/tiddlywiki/centralised - 5.3.7\n  $:/themes/tiddlywiki/readonly - 5.3.7\n  $:/themes/tiddlywiki/seamless - 5.3.7\n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "Stylesheets and macros.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "From my perspective, everything. I can't see anything negative.", + "project-weaknesses": "I will continue to use TiddlyWiki massively. It would be sad, if TiddlyWiki would be discontinued. I am no programmer, just a power user, so it is difficult for me to contribute anything to the project that would be valuable for others. From my perspective you do a fantastic job. I have no idea what could be done better.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00184", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00185.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00185.json new file mode 100644 index 0000000000..53a55993a7 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00185.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2010", + "joined-tw-community": "Yes", + "started-tw-community": "2020", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I do not engage with this community", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I read and post in this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Other", + "other-use-cases": "prototyping Interpersonal Wikis, linguistic revitalizing on Colombian Amazonas and other research projects.", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "It's a flexible metatool to adapt to my needs for quickly prototyping that is usually good enough. As I said in the forum, the problem is related with increased complexity of usage that makes the particular knowledge of TW low transferable to other more complex contexts.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/DesertSand\nCurrent theme: $:/themes/nico/notebook\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/divisor\nDisabled plugins: \nPlugins: \n  $:/ak/plugins/TWCrossLinks - 0.1.19\n  $:/core - 5.3.6\n  $:/languages/es-ES - 5.3.6\n  $:/plugins/adithyab/cmplus - 0.2.2\n  $:/plugins/flibbles/relink - 2.1.1\n  $:/plugins/Gk0Wk/echarts - 0.0.4+1\n  $:/plugins/kookma/refnotes - 1.7.3\n  $:/plugins/kookma/shiraz - 2.4.4\n  $:/plugins/linonetwo/markdown-transformer - 0.1.3\n  $:/plugins/nico/notebook-mobile - 1.0.0\n  $:/plugins/nico/projectify - 0.14.0\n  $:/plugins/nico/projectify-es-ES - 0.13.1\n  $:/plugins/sq/spotlight - 0.0.5\n  $:/plugins/sycom/leaflet - 0.8.6\n  $:/plugins/telmiger/details - 0.7.5\n  $:/plugins/telmiger/EditButtons - 1.0.6\n  $:/plugins/telmiger/HarveyBalls - 0.1.0\n  $:/plugins/telmiger/simple-search - 1.0.24\n  $:/plugins/tiddlywiki/codemirror - 5.3.6\n  $:/plugins/tiddlywiki/codemirror-closebrackets - 5.3.6\n  $:/plugins/tiddlywiki/highlight - 5.3.6\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/tobibeer/split - 0.8.0\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/starlight - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "This couple of wikis reflect most of my customizations taken from the community in the form of a custom template + plugins + usage scenario:\n\nhttps://cartofonia-amanecer-la-palabra.tiddlyhost.com/", + "positive-about-future": "Yes", + "tw-future-confidence": "No", + "project-decision-trust": "Yes", + "project-strengths": "I think the community is pretty supportive and welcoming, starting with Jeremy and all the usual folks in the forum. I think that keeping a different identity that sets TW apart from other PKMs and Wikis is important and has been constructed over all those years.", + "project-weaknesses": "I don't know how governance works for the project and that could be more explicit. Also the present discussion on prepackaged editions beyond empty.html is important and a way to be more approachable for new people. \n\nI imagine myself, in the mid/long term, leaving TiddlyWiki for Cardumem, my own wiki engine inspired by TW, but reimagined as an hypermedia system. More details here:\n\nhttps://offray.tiddlyhost.com/#Cardumem%2FEn", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00185", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00186.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00186.json new file mode 100644 index 0000000000..0c2f493eac --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00186.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2013", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Task and project management (including CRMs)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "TiddlyWiki is amazing to work with, and developing with it can even become a bit addictive. The concept is extremely challenging for non-programmers, but it also offers unexpected moments of success.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "DIY (any other solution);No automatic sync across my devices", + "diy-backup-info": "I use TiddlyWiki on a USB stick with a backup folder, and from time to time, I back up the USB stick to my computer. It’s truly old-school, but it works good enough.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: de\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: bottom\nTiddler opening behaviour setting for navigations from within the story river: bottom\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/danielo515/2click2edit,$:/plugins/tiddlywiki/github-fork-ribbon,$:/plugins/tiddlywiki/text-slicer,$:/plugins/wikilabs/link-to-tabs\nPlugins: \n  $:/core - 5.3.7\n  $:/languages/de-DE - 5.3.7\n  $:/plugins/adithyab/cmplus - 0.2.2\n  $:/plugins/kookma/commander - 2.1.14\n  $:/plugins/tiddlywiki/codemirror - 5.3.7\n  $:/plugins/tiddlywiki/sax - 5.3.7\n  $:/plugins/wikilabs/edit-tabs - 2.0.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/readonly - 5.3.7\n  $:/themes/tiddlywiki/seamless - 5.3.7\n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/tight - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "almost everything!!! The discussions, the leadership of the project, the very helpful community, the minimalist empty layout, and the overall design are all strong aspects of TiddlyWiki. One thing that would be very useful is a centralized 'how-to' website summarizing tips and tricks. Another positive aspect is the willingness to break backward compatibility when necessary — software needs the freedom to evolve. ;)", + "project-weaknesses": "The built-in editor doesn't support syntax highlighting!, and there's currently no dedicated theme for CodeMirror, even though the older version of TiddlyWiki 2.x included one. Additionally, Markdown integration remains limited and could benefit from deeper support. File saving continues to be a major pain point when recommending TiddlyWiki to others—improper saving often goes unnoticed, resulting in potential data loss.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00186", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00187.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00187.json new file mode 100644 index 0000000000..d64554d6d3 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00187.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Talk TiddlyWiki", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Producing/publishing interactive fiction;Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki);Other", + "other-use-cases": "Application for my business, training/management/utilization tool for clients", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki;Not publishing to this location", + "publish-to-intranet": "Yes, served through Node.js", + "value-of-tw": "Flexibility, adaptability, and ease of use. Once understood it can be used for just about any idea. I have always used in work context to document workflow; transition platform to turn consulting documentation over to clients, build knowledgebases; managing my business. It's fun", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "I run Node on Ubuntu and do filesystem backups using bash scripts. I do daily/monthly backups of my wiki directory (12 separate wiki's) and purge my daily on a 7 day rotation and. I have is set to run a cron job and report update view email.", + "wiki-setup-info": "", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I appreciate how active and committed the community shows up. The willingness of others to share and support others. I have not contributed to the community...I'm not sure how I can contribute, but I have learned so much from the community.", + "project-weaknesses": "Having more educational and tutorial opportunities, esp. around scripting. (Create a Tiddlywiki Design Patterns document with lots of examples...that would be great.) Having more real world examples in the Reference section on the tiddlywiki.com site. I appreciate the new structures being added: if/then/else constructs, etc. \n\nFinding out how others are using Tiddlywiki has stimulated my thinking. The 2nd Brain contribution have inspired my own work in that area.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00187", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00188.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00188.tid new file mode 100644 index 0000000000..585209b3a1 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00188.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: Consumer online storage (e.g. Google Drive, Dropbox) +diy-backup-info: +first-heard-survey: Talk TiddlyWiki +first-used-tw: 2025 +joined-tw-community: No +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: The brief overview of the apps is nice. +project-weaknesses: Documentation. Having most of the apps made by the community is fine but it would be great if the documentation was more centralized. Or maybe more examples posted on how to setup an app. I am pretty new to TiddlyWiki, but I find it hard to find information. Or at least to get help. Maybe the community isn't very involved?? An official Discord server might work better for people to discuss issues, projects, customizations. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with TiddlyDesktop +share-wikis: No, my TiddlyWiki is for personal use only +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00188 +tw-ability-level: My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: No +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: I control the data. Makes me feel better. It is easy to search. +wiki-setup-info: I have been using TiddlyDesktop until recently. I was storing the wiki in OneDrive but if I forgot to close it on one computer and opened it on another they would be out of sync. I have been trying to get TiddlyPWA up and running but it is having trouble creating the database in deno. So right now I have it in Tiddly Bob. It is working but I would rather have a separate app that I use instead of having it in the browser. \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00189.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00189.json new file mode 100644 index 0000000000..02414914fc --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00189.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2005", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "I have several TWs, I used constantly", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins", + "save-method": "Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);DIY (any other solution)", + "diy-backup-info": "Rsync with several usb disks", + "wiki-setup-info": "", + "tw-customisations": "Plugins:\nDisclosure HTML element\nTristate Sidebar\nHighlight-searched-text\nLayout tweaks", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I don’t know. It’s super util for me", + "project-weaknesses": "I don’t know", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00189", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00190.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00190.tid new file mode 100644 index 0000000000..c65b5a96cb --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00190.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: N/A - I keep my wiki on a single system +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2018 +joined-tw-community: No +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content) +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Not breaking functionality, good documentation +project-weaknesses: examples for complicated tasks +publish-to-intranet: Yes, using a single-file wiki +publish-to-web: Not publishing to this location +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: Yes, with multiple editors/administrators +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00190 +tw-ability-level: I have customised TiddlyWiki through options and plugins +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: Organised notes and knowledge base with many visualisation options. Much more human brain friendly than browsing files and folders, or spreadsheets. +wiki-setup-info: did not work \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00191.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00191.json new file mode 100644 index 0000000000..5f81fe391f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00191.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2018", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, served through Node.js", + "publish-to-intranet": "Not publishing to this location", + "value-of-tw": "It powers my personal wiki. It's where I keep notes, bookmarks, and keep track books I've read and their highlights.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.8\nCurrent palette: $:/palettes/personal\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/save-tiddler\nDisabled plugins: \nPlugins: \n  $:/core - 5.3.8\n  $:/plugins/tiddlywiki/filesystem - 5.3.8\n  $:/plugins/tiddlywiki/highlight - 5.3.8\n  $:/plugins/tiddlywiki/markdown - 5.1.23\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.8\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.8\n  $:/themes/tiddlywiki/vanilla - 5.3.8\n
", + "tw-customisations": "I override some styles with a custom CSS tiddler, I attempt to keep bots off my wiki by adding a `` tag to ``.", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "* Frequent releases.\n* Moving from Google Groups to Discourse (Talk TiddlyWiki).\n* Doing community surveys. :)\n* Maintaining a Mastodon account.", + "project-weaknesses": "* iOS and mobile browser support. There has been a bug for a while where typing in the text field renders \"Internal JavaScript Error\"\n* I think Node.JS documentation could be improved, it feels fairly light given the power of the hosted option. I would specifically like improvement around hosting multiple wikis and sharing Tiddlers between wikis.\n* Overall I would love to try contributing, but feel intimidated by the scope and history of TiddlyWiki.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00191", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00192.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00192.json new file mode 100644 index 0000000000..021dac3889 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00192.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2018", + "joined-tw-community": "Yes", + "started-tw-community": "2018", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Not applicable (as retired, etc)", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "A flexible platform for my information needs.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "TiddlySpot / TiddlyHost;Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: zoomin\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: top\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.7\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/Gk0Wk/sidebar-resizer - 0.0.3\n  $:/plugins/kookma/commander - 2.1.2\n  $:/plugins/kookma/refnotes - 1.8.5\n  $:/plugins/kookma/shiraz - 2.7.5\n  $:/plugins/snowgoon88/edit-comptext - 0.8.1\n  $:/plugins/sq/editor-autolist - 0.1.10\n  $:/plugins/sq/macy - 0.0.9\n  $:/plugins/sq/spotlight - 0.0.4\n  $:/plugins/sq/Stories - 1.0.3\n  $:/plugins/sycom/leaflet - 0.8.6\n  $:/plugins/tiddlywiki/filesystem - 5.3.7\n  $:/plugins/tiddlywiki/highlight - 5.3.7\n  $:/plugins/tiddlywiki/tiddlyweb - 5.3.7\n  $:/plugins/wikilabs/link-to-tabs - 2.0.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.7\n  $:/themes/tiddlywiki/vanilla - 5.3.7\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Community support", + "project-weaknesses": "More and better 'How To' guides rather than 'developer focussed' documentation.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00192", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00193.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00193.json new file mode 100644 index 0000000000..44b8a62c23 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00193.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2007", + "joined-tw-community": "Yes", + "started-tw-community": "2017", + "use-ttw": "I read and post in this community", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I do not engage with this community", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "No", + "main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other", + "other-use-cases": "I try to learn how it works (HTML5, JS, TiddlyWiki itself and several tools for it)", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "Several years ago, I had using TW to organized my part of work in a bigger project. Now I'm looking for an easy GTD tool, and I'm thinking TW would be fine, but I need it in German language and the translation is hard to me.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom JavaScript", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "Normally I'm using file-backups by Mario Pietsch within my Firefox browser and get backups to my NAS. Also, sometimes I'm using a USB drive or send it in an e-mail.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.8\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: de\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.8\n  $:/languages/de-DE - 5.3.8\n  $:/plugins/.jcs/RefLinks - 0.0.6\n  $:/plugins/danielo515/ContextPlugin - 2.1.0\n  $:/plugins/flibbles/relink - 2.5.2\n  $:/plugins/flibbles/relink-fieldnames - 2.5.2\n  $:/plugins/flibbles/relink-markdown - 2.5.2\n  $:/plugins/flibbles/relink-titles - 2.5.2\n  $:/plugins/flibbles/relink-variables - 2.5.2\n  $:/plugins/wikilabs/link-to-tabs - 3.0.1\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.8\n  $:/themes/tiddlywiki/vanilla - 5.3.8\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "It's free software - that's perhaps the best thing about it. It can be adapted to your own needs. There is also a community that is happy to help and answers questions. TiddlyWiki is much more than the online notebook for which it is pretending. It is a universal tool that you can learn to deal with HTML and JS.", + "project-weaknesses": "TW is the best tool I'd got since I'd used it for the first time. I've tested several others, but I always come back to it, even it's hard to me, to struggle with the English language. Yes, there is a German translation and a little introduction, but that isn't enough to get a useful TW. So it's still necessary always to use the original documentation and the English-speaking community. Yes, Google can help, but a German-speaking community would make it easier to me.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00193", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00194.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00194.tid new file mode 100644 index 0000000000..2ff9fe8d5d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00194.tid @@ -0,0 +1,33 @@ +are-you-a-dev: Yes, I would +backup-method: TiddlySpot / TiddlyHost;N/A - I keep my wiki on a single system +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2005 +joined-tw-community: Yes +main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);Programming +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Very transparent in making decisions about the project. +project-weaknesses: Understanding how the project will continue if/when Jeremy moves on. +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: 2024 +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00194 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...) +tw-customisations: +tw-future-confidence: Yes +use-discord: I do not engage with this community +use-for-work-or-study: Yes +use-github-discuss: I read/lurk, but do not post +use-mailing-list: I do not engage with this community +use-reddit: I read/lurk, but do not post +use-ttw: I read and post in this community +value-of-tw: Tiddlywiki provides a way for me to capture notes in a free form way and then reorganize them (transclusions!) easily. +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00195.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00195.json new file mode 100644 index 0000000000..f049de7ce4 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00195.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "Other", + "other-survey-source": "Friend who uses tiddlywiki shared the link with me", + "are-you-a-dev": "Yes, I would", + "first-used-tw": "2017", + "joined-tw-community": "Yes", + "started-tw-community": "2018", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I read/lurk, but do not post", + "use-discord": "I read/lurk, but do not post", + "use-github-discuss": "I do not engage with this community", + "published-plugin": "Yes", + "main-use-cases": "Note-taking;Journalling;Programming;Other", + "other-use-cases": "I use it as a tiny art gallery website (very minimal CSS, only one tiddler open at a time)", + "use-for-work-or-study": "No", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Yes, using a single-file wiki;Yes, served through Node.js", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "TiddlyWiki provides a way for me to serve my personal website content in a package that lets people download it as a single file, which is quite important to me. I do wish the Node.js lazy loading features were actually viable (last I looked primarily search didn't function).", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript", + "save-method": "Multi-file wiki served through Node.js", + "backup-method": "DIY (any other solution)", + "diy-backup-info": "My primary note storage is on my NAS, with SyncThing to synchronize it across devices eg. phone, laptop. This backs up my _notes_ which I edit with various other tools, not TiddlyWiki, and TiddlyWiki is a publishing layer on top.", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/noahlange/markdown-plus,$:/plugins/rmnvsl/krystal\nPlugins: \n  $:/core - 5.3.3\n  $:/plugins/benwebber/css-palette - 0.3.0\n  $:/plugins/noahlange/monaco - 0.5.0\n  $:/plugins/oeyoews/markdown-extensions-startup - 0.0.2\n  $:/plugins/tiddlywiki/highlight - 5.3.3\n  $:/plugins/tiddlywiki/markdown - 5.3.3\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "- \"New Tiddlers\" sidebar customization\n- SO MUCH CSS customization\n- Because noahlange/tiddlymark exists, I can render my Obsidian vault as a single file wiki, still using TW in a way w/this.\n- I had to edit Core TW's JavaScript to enable Obsidian Style [[wiki|pretty links]].", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "I'm glad TW is still under development, and I'm glad it still has a healthy community of users - even though I don't use TiddlyWiki directly anymore, there's still many things (abstraction from the file system, hackability, ability to produce a single HTML file that can function like a \"book\" for my writing that can go anywhere and has longevity) that I appreciate about it, and while I couldn't go back now, I could see a future TW with improvements winning me back!", + "project-weaknesses": "After converting my Tiddlers from TW syntax to Obsidian style markdown, there's no way I'd ever go back to the TW syntax, sorry. Markdown support was in a poor state, especially the extent to which I had to hack it to read Obsidian style markdown (pretty links). I'd **love** to be able to use TW as an alternate UI to view and edit my notes while _also_ being able to use logseq or obsidian, but the Node.JS version not supporting bidirectionality or YAML metadata OOTB makes this nonviable.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00195", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00196.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00196.json new file mode 100644 index 0000000000..f430daf7ce --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00196.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2023", + "joined-tw-community": "No", + "started-tw-community": "", + "use-ttw": "", + "use-mailing-list": "", + "use-reddit": "", + "use-discord": "", + "use-github-discuss": "", + "published-plugin": "No", + "main-use-cases": "Task and project management (including CRMs)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)", + "publish-to-web": "Not publishing to this location", + "publish-to-intranet": "Yes, using a single-file wiki", + "value-of-tw": "Organized training materials for the newcomers, the training session is more efficient (shorter).", + "tw-ability-level": "My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins", + "save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)", + "backup-method": "N/A - I keep my wiki on a single system", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Dracula\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: pop\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n  $:/core - 5.3.3\n  $:/temp/info-plugin - \n  $:/themes/tiddlywiki/snowwhite - 5.3.3\n  $:/themes/tiddlywiki/vanilla - 5.3.3\n
", + "tw-customisations": "", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Works out of the box. Overcomes the problem with our company's IT security - no exe/php file, while still can store data in a more friendly format than an Excel sheet.", + "project-weaknesses": "With ChatGPT things are changing, but when I started with the TiddlyWiki, I was looking for examples of how to use it. Grok book has been helpful (old school learner here). Still, would love to see some more examples of some user cases, e.g. Editable List - like in Microsoft's Lists or OneNote. I use it mostly as a CRM system and using the codes from Grok's book to tweak a bit to make what I need.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00196", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00197.tid b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00197.tid new file mode 100644 index 0000000000..fb9b75fef5 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00197.tid @@ -0,0 +1,33 @@ +are-you-a-dev: No, I would not +backup-method: TiddlySpot / TiddlyHost +diy-backup-info: +first-heard-survey: tiddlywiki.com +first-used-tw: 2003 +joined-tw-community: No +main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other +ok-to-publish: Yes, I am happy for my responses to be published +other-survey-source: +other-use-cases: Electronic document management +positive-about-future: Yes +project-decision-trust: Yes +project-strengths: Site Web, gestion documentaire +project-weaknesses: pouvoir sortir en pdf plusieurs tiddlers +publish-to-intranet: +publish-to-web: +published-plugin: No +save-method: Single-file wiki through web browser with Download Saver (default saving mechanism) +share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki +started-tw-community: +tags: [[Community Survey 2025]] +title: Community Survey 2025 Answer 00197 +tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom CSS styles +tw-customisations: +tw-future-confidence: Yes +use-discord: +use-for-work-or-study: Yes +use-github-discuss: +use-mailing-list: +use-reddit: +use-ttw: +value-of-tw: template to print in pdf +wiki-setup-info: \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00198.json b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00198.json new file mode 100644 index 0000000000..a0af0261b9 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/2025-community-survey/Community Survey 2025 Answer 00198.json @@ -0,0 +1,37 @@ +[ + { + "first-heard-survey": "tiddlywiki.com", + "other-survey-source": "", + "are-you-a-dev": "No, I would not", + "first-used-tw": "2015", + "joined-tw-community": "Yes", + "started-tw-community": "2024", + "use-ttw": "I read/lurk, but do not post", + "use-mailing-list": "I read/lurk, but do not post", + "use-reddit": "I do not engage with this community", + "use-discord": "I read and post in this community", + "use-github-discuss": "I read/lurk, but do not post", + "published-plugin": "No", + "main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)", + "other-use-cases": "", + "use-for-work-or-study": "Yes", + "share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki", + "publish-to-web": "", + "publish-to-intranet": "", + "value-of-tw": "It helps me organize and prioritize my work-related activities and provides a reference for past work done.", + "tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles", + "save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)", + "backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)", + "diy-backup-info": "", + "wiki-setup-info": "
Wiki Information
\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/JMW/palettes/Nightfall\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-CA\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: bottom\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/Gk0Wk/sidebar-resizer,$:/plugins/nico/notebook-mobile\nPlugins: \n  $:/core - 5.3.6\n  $:/plugins/danielo515/2click2edit - 0.1\n  $:/plugins/eucaly/quickjump - 0.0.2\n  $:/plugins/flibbles/relink - 2.4.5\n  $:/plugins/flibbles/relink-fieldnames - 2.4.1\n  $:/plugins/flibbles/relink-markdown - 2.4.5\n  $:/plugins/flibbles/relink-titles - 2.4.0\n  $:/plugins/flibbles/relink-variables - 2.4.1\n  $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n  $:/plugins/kookma/commander - 2.1.13\n  $:/plugins/kookma/narenj - 0.5.1\n  $:/plugins/kookma/search - 1.0.0\n  $:/plugins/kookma/shiraz - 3.0.8\n  $:/plugins/kookma/shiraz-callout - 0.8.0\n  $:/plugins/kookma/shiraz-formatter - 0.6.0\n  $:/plugins/kookma/trashbin - 1.3.5\n  $:/plugins/kookma/tweaks - 0.2.1\n  $:/plugins/kookma/utility - 3.2.2\n  $:/plugins/nico/projectify - 0.14.3\n  $:/plugins/tiddlywiki/markdown - 5.3.6\n  $:/plugins/wikilabs/link-to-tabs - 3.0.1\n  $:/plugins/xp/magicsidebar - 0.2.0\n  $:/temp/info-plugin - \n  $:/themes/nico/notebook - 1.4.1\n  $:/themes/tiddlywiki/snowwhite - 5.3.6\n  $:/themes/tiddlywiki/vanilla - 5.3.6\n
", + "tw-customisations": "stylesheets, macros, community-sourced customizations, custom templates, custom pallettes", + "positive-about-future": "Yes", + "tw-future-confidence": "Yes", + "project-decision-trust": "Yes", + "project-strengths": "Keeping tiddlywiki infinitely customizable to adapt to my needs rather than forcing me to adapt to it.", + "project-weaknesses": "For me, tighter Markdown integration, especially with macros, would be great. I currently have a mix of markdown and tiddlywiki tiddlers scattered throughout my file.", + "ok-to-publish": "Yes, I am happy for my responses to be published", + "title": "Community Survey 2025 Answer 00198", + "tags": "[[Community Survey 2025]]" + } +] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/app/DefaultTiddlers.tid b/editions/tiddlywiki-surveys/tiddlers/app/DefaultTiddlers.tid new file mode 100644 index 0000000000..3526eeaf05 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/DefaultTiddlers.tid @@ -0,0 +1,5 @@ +title: $:/DefaultTiddlers + +HelloThere +[[TiddlyWiki Community Survey (2025)]] +[[The Great TiddlyWiki Interview Project (2010)]] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/app/Definitions.tid b/editions/tiddlywiki-surveys/tiddlers/app/Definitions.tid new file mode 100644 index 0000000000..befa9c1025 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/Definitions.tid @@ -0,0 +1,66 @@ +title: $:/Community Survey 2025/Definitions +tags: $:/tags/Global + +\procedure survey-2025-list-answers(answerTitle) +
+ + + + + + + <$list filter="[all[current]fields[]sort[title]] -text -title -tags" template="$:/core/ui/TiddlerFieldTemplate" variable="listItem"/> + +
QuestionAnswer
+
+\end survey-2025-list-answers + +\procedure survey-2025-list-questions() + <$let stateBase=<>> +
+ <$list filter="[list[$:/_importspec/Community Survey 2025/Content/Row]]"> + <$let + state={{{ [addsuffix] }}} + answerField={{{ [get[import-field-name]] }}} + > +

+ <$button class="tc-btn-invisible" style="text-align:left;"> + <$action-setfield $tiddler=<> $field="text" $value={{{ [get[text]match[yes]then[no]else[yes]] }}}/> + <%if [get[text]else[yes]match[yes]] %> + {{$:/core/images/chevron-down}} + <%else%> + {{$:/core/images/chevron-right}} + <%endif%> + <$text text={{!!import-field-column}}/> + (<$text text={{{ [tag[Community Survey 2025]getelse[]!match[]] +[count[]] }}}/>) + +

+ <%if [get[text]else[yes]match[yes]] %> +
    + <%if [get[question-type]else[]match[multiple-choice] %> + <$list filter="[tag[Community Survey 2025]getelse[]!match[]split[;]unique[]sort[]]" variable="answerText"> +
  1. + <$text text=<>/> + (<$text text={{{ [tag[Community Survey 2025]] :filter[getelse[]split[;]match] +[count[]] }}}/>) +
  2. + + <%else%> + <$list filter="[tag[Community Survey 2025]] :filter[getelse[]!match[]] +[eachsort]" variable="answerTitle"> + <$let answerText={{{ [get] }}}> +
  3. + <$link to=<>> + <$text text={{{ [get] }}}/> + (<$text text={{{ [tag[Community Survey 2025]getmatchcount[]] }}}/>) + +
  4. + + + <%endif%> +
+ <%endif%> + + +
+ +\end survey-2025-list-questions + diff --git a/editions/tiddlywiki-surveys/tiddlers/app/HelloThere.tid b/editions/tiddlywiki-surveys/tiddlers/app/HelloThere.tid new file mode 100644 index 0000000000..ad3ed00f86 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/HelloThere.tid @@ -0,0 +1,18 @@ +title: HelloThere + +This page gathers the responses to surveys that we have run for the TiddlyWiki community. + +<%if [tag[Community Survey 2025]] %> + +Surveys available: + +* [[TiddlyWiki Community Survey (2025)]] +* [[The Great TiddlyWiki Interview Project (2010)]] + +<%else%> + +Currently, there is one survey: [[The Great TiddlyWiki Interview Project (2010)]] + +<%endif%> + +Thank you to https://yatagarasu.tiddlyhost.com for creating the palette used on this page. diff --git a/editions/tiddlywiki-surveys/tiddlers/app/Questions.json b/editions/tiddlywiki-surveys/tiddlers/app/Questions.json new file mode 100644 index 0000000000..0fd5795cdf --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/Questions.json @@ -0,0 +1,225 @@ +[ + { + "import-field-name": "first-heard-survey", + "import-field-column": "Where did you first come across this survey?", + "title": "$:/2025 Community Survey/Questions/first-heard-survey", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "other-survey-source", + "import-field-column": "As you selected Other, could you please provide more information on where you initially found this survey?", + "title": "$:/2025 Community Survey/Questions/other-survey-source", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "are-you-a-dev", + "import-field-column": "Would you consider yourself to be a programmer or software developer? You can consider yourself a programmer/developer without studying either discipline or doing it as a job.", + "title": "$:/2025 Community Survey/Questions/are-you-a-dev", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "first-used-tw", + "import-field-column": "When did you first use TiddlyWiki?", + "title": "$:/2025 Community Survey/Questions/first-used-tw", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "joined-tw-community", + "import-field-column": "Do you currently participate, or have you previously participated in the TiddlyWiki Community? By \"community\" we refer to official spaces such as Talk TiddlyWiki as well as online-based third-party communities like the public Discord server.", + "title": "$:/2025 Community Survey/Questions/joined-tw-community", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "started-tw-community", + "import-field-column": "When did you begin taking part in the TiddlyWiki community?", + "title": "$:/2025 Community Survey/Questions/started-tw-community", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "use-ttw", + "import-field-column": "We would be interested in knowing how you engage with the different communities of TW.: Talk TiddlyWiki", + "title": "$:/2025 Community Survey/Questions/use-ttw", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "use-mailing-list", + "import-field-column": "We would be interested in knowing how you engage with the different communities of TW.: Old mailing list (Google Group)", + "title": "$:/2025 Community Survey/Questions/use-mailing-list", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "use-reddit", + "import-field-column": "We would be interested in knowing how you engage with the different communities of TW.: r/TiddlyWiki5 on Reddit", + "title": "$:/2025 Community Survey/Questions/use-reddit", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "use-discord", + "import-field-column": "We would be interested in knowing how you engage with the different communities of TW.: Discord", + "title": "$:/2025 Community Survey/Questions/use-discord", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "use-github-discuss", + "import-field-column": "We would be interested in knowing how you engage with the different communities of TW.: GitHub Discussions", + "title": "$:/2025 Community Survey/Questions/use-github-discuss", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "published-plugin", + "import-field-column": "Have you ever published a plugin or TiddlyWiki extension of another type, which others can find, import and use? We define these as being publicly-hosted on your own webspace, or a host such as TiddlyHost.", + "title": "$:/2025 Community Survey/Questions/published-plugin", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "main-use-cases", + "import-field-column": "How would you describe your main use cases for TiddlyWiki?", + "title": "$:/2025 Community Survey/Questions/main-use-cases", + "import-field-source": "column", + "import-spec-role": "field", + "question-type": "multiple-choice" + }, + { + "import-field-name": "other-use-cases", + "import-field-column": "As you selected Other: what are other primary use cases of TiddlyWiki for you?", + "title": "$:/2025 Community Survey/Questions/other-use-cases", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "use-for-work-or-study", + "import-field-column": "Do you use TiddlyWiki to support with your job or programme of education?", + "title": "$:/2025 Community Survey/Questions/use-for-work-or-study", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "share-wikis", + "import-field-column": "Do you share your TiddlyWiki(s) with other people? Please select 'yes' if there is more than one person who can directly view your wiki.", + "title": "$:/2025 Community Survey/Questions/share-wikis", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "publish-to-web", + "import-field-column": "Do you publish your wiki(s) online?: To the World Wide Web", + "title": "$:/2025 Community Survey/Questions/publish-to-web", + "import-field-source": "column", + "import-spec-role": "field", + "question-type": "multiple-choice" + }, + { + "import-field-name": "publish-to-intranet", + "import-field-column": "Do you publish your wiki(s) online?: To an intranet", + "title": "$:/2025 Community Survey/Questions/publish-to-intranet", + "import-field-source": "column", + "import-spec-role": "field", + "question-type": "multiple-choice" + }, + { + "import-field-name": "value-of-tw", + "import-field-column": "Putting it all together, what value does TiddlyWiki provide for you in your day to day work, or in your life?", + "title": "$:/2025 Community Survey/Questions/value-of-tw", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "tw-ability-level", + "import-field-column": "What is your level of ability with TiddlyWiki? This question assumes you can navigate TiddlyWiki, use basic WikiText and save changes.", + "title": "$:/2025 Community Survey/Questions/tw-ability-level", + "import-field-source": "column", + "import-spec-role": "field", + "question-type": "multiple-choice" + }, + { + "import-field-name": "save-method", + "import-field-column": "How do you save changes in TiddlyWiki?", + "title": "$:/2025 Community Survey/Questions/save-method", + "import-field-source": "column", + "import-spec-role": "field", + "question-type": "multiple-choice" + }, + { + "import-field-name": "backup-method", + "import-field-column": "How do you back up/sync changes between systems?", + "title": "$:/2025 Community Survey/Questions/backup-method", + "import-field-source": "column", + "import-spec-role": "field", + "question-type": "multiple-choice" + }, + { + "import-field-name": "diy-backup-info", + "import-field-column": "As you selected DIY, would be grateful for more details on the system you use to back up and synchronise your TiddlyWiki across devices/systems.", + "title": "$:/2025 Community Survey/Questions/diy-backup-info", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "wiki-setup-info", + "import-field-column": "We would love to know what your basic setup looks like in your most-used wiki. You can import the Wiki Info tiddler and paste the output below. Find the Wiki Information tool here.", + "title": "$:/2025 Community Survey/Questions/wiki-setup-info", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "tw-customisations", + "import-field-column": "Outside of plugins, palettes and other information captured above; are there any customisations you make to your TiddlyWiki? These included but are not limited to: stylesheets, macros/functions/procedures, JavaScript, and direct edits to the core. Please also mention if you used or built on customisations from the community.", + "title": "$:/2025 Community Survey/Questions/tw-customisations", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "positive-about-future", + "import-field-column": "Are you positive about the future prospects of TiddlyWIki?", + "title": "$:/2025 Community Survey/Questions/positive-about-future", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "tw-future-confidence", + "import-field-column": "Are you confident that TiddlyWiki will continue to meet your needs with future development?", + "title": "$:/2025 Community Survey/Questions/tw-future-confidence", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "project-decision-trust", + "import-field-column": "Are you satisfied with the way the project makes decisions?", + "title": "$:/2025 Community Survey/Questions/project-decision-trust", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "project-strengths", + "import-field-column": "What are we doing well? Prompts for thinking: What are the aspects of TiddlyWiki as a project and community that you find appealing? Is there anything you are excited for in the future of TiddlyWIki?", + "title": "$:/2025 Community Survey/Questions/project-strengths", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "project-weaknesses", + "import-field-column": "What could we do better? Prompts for thinking: Could you imagine yourself leaving TiddlyWiki? Is there something you are afraid of in the future of TiddlyWIki? What could change your relationship with TW and its community? What might encourage you to contribute more to the project?", + "title": "$:/2025 Community Survey/Questions/project-weaknesses", + "import-field-source": "column", + "import-spec-role": "field" + }, + { + "import-field-name": "ok-to-publish", + "import-field-column": "With your consent, we would like to publish responses to this survey on tiddlywiki.com, in the spirit of open development. Are you happy for your responses to be available online? We will not include information on your age or country of birth in the public results. Those items of information will be kept strictly to a small and trusted group of regular contributors and administrators.", + "title": "$:/2025 Community Survey/Questions/ok-to-publish", + "import-field-source": "column", + "import-spec-role": "field" + } +] diff --git a/editions/tiddlywiki-surveys/tiddlers/app/SiteSubtitle.tid b/editions/tiddlywiki-surveys/tiddlers/app/SiteSubtitle.tid new file mode 100644 index 0000000000..d77e8be26b --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/SiteSubtitle.tid @@ -0,0 +1,3 @@ +title: $:/SiteSubtitle + +ask questions and find out \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/app/SiteTitle.tid b/editions/tiddlywiki-surveys/tiddlers/app/SiteTitle.tid new file mode 100644 index 0000000000..da78a15a9c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/SiteTitle.tid @@ -0,0 +1,3 @@ +title: $:/SiteTitle + +~TiddlyWiki Community Surveys \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/app/Styles.tid b/editions/tiddlywiki-surveys/tiddlers/app/Styles.tid new file mode 100644 index 0000000000..c180c40149 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/Styles.tid @@ -0,0 +1,25 @@ +title: $:/surveys/2010-interview/styles +tags: $:/tags/Stylesheet + +\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock + +.interview h1 button svg { + width: 16px; + height: 16px; + vertical-align: middle; +} + +.interview h2 img { + width: 32px; + height: 32px; + vertical-align: middle; +} + +.interview h3 { + font-size: 0.9em; + line-height: 1; +} + +.interview-answer { + margin-left: 32px; +} \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/app/The Great TiddlyWiki Interview Project 2010.tid b/editions/tiddlywiki-surveys/tiddlers/app/The Great TiddlyWiki Interview Project 2010.tid new file mode 100644 index 0000000000..8b4bf3fd95 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/The Great TiddlyWiki Interview Project 2010.tid @@ -0,0 +1,51 @@ +title: The Great TiddlyWiki Interview Project (2010) + +The "Great TiddlyWiki Interview Project" was launched in 2010. The idea was to ask people about their use of TiddlyWiki. We used TiddlySpace to allow users to write their responses in their own spaces, and then we gathered their answers in a separate space. The interview ran until 2013 when TiddlySpace was closed down. + +From the original announcement: + +> Welcome to the great TiddlyWiki viral interview project. +> +> For many people that use it there is a distinct discovery moment when TiddlyWiki explodes in their brain. For others, it is a challenge to get their heads around TiddlyWiki at all +> +> This project explores how people think about TiddlyWiki by collecting together responses to a set of questions about it. + +Here are the questions we asked and the responses we received. + +<$let stateBase=<>> +
+ <$list filter="[tag[2010 - Interview Question]]"> + <$let state={{{ [addsuffix] }}}> +

+ <$button class="tc-btn-invisible"> + <$action-setfield $tiddler=<> $field="text" $value={{{ [get[text]match[yes]then[no]else[yes]] }}}/> + <%if [get[text]match[yes]] %> + {{$:/core/images/chevron-down}} + <%else%> + {{$:/core/images/chevron-right}} + <%endif%> + + <$link to=<>> + <$text text={{{ [removeprefix[2010 - ]] }}}/> + +

+ <%if [get[text]match[yes]] %> + <$list filter="[tag[2010 - Interview Answer]tag]" variable="answer"> +

+ <$link to=<>> + <$transclude $tiddler={{{ [get[modifier]addprefix[$:/avatars/]] }}}/> + <$text text={{{ [get[modifier]] }}}/> + +

+
+

+ //<$view tiddler=<> field="modified" format="date" template="DDth MMM YYYY" />// +

+ <$transclude $tiddler=<> $mode="block" /> +
+ + <%endif%> + + +
+ diff --git a/editions/tiddlywiki-surveys/tiddlers/app/TiddlyWiki Community Survey 2025.tid b/editions/tiddlywiki-surveys/tiddlers/app/TiddlyWiki Community Survey 2025.tid new file mode 100644 index 0000000000..1f119b1839 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/TiddlyWiki Community Survey 2025.tid @@ -0,0 +1,5 @@ +title: TiddlyWiki Community Survey (2025) + +The survey result XLSX file can be downloaded from https://ec.europa.eu/eusurvey/publication/tiddlywiki-users-2025. Drag and drop the file here to import it into TiddlyWiki. + +<> diff --git a/editions/tiddlywiki-surveys/tiddlers/app/ViewTemplate.tid b/editions/tiddlywiki-surveys/tiddlers/app/ViewTemplate.tid new file mode 100644 index 0000000000..757f936c29 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/ViewTemplate.tid @@ -0,0 +1,8 @@ +title: $:/Community Survey 2025/ViewTemplate +tags: $:/tags/ViewTemplate + +<%if [tag[Community Survey 2025]] %> + +<$transclude $variable="survey-2025-list-answers" answerTitle=<>/> + +<%endif%> diff --git a/editions/tiddlywiki-surveys/tiddlers/app/XLSX Import Specs/row.tid b/editions/tiddlywiki-surveys/tiddlers/app/XLSX Import Specs/row.tid new file mode 100644 index 0000000000..2bda5ca06c --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/XLSX Import Specs/row.tid @@ -0,0 +1,8 @@ +created: 20250711121107617 +import-spec-role: row +import-title-template: Community Survey 2025 Answer $autoindex$ +modified: 20250711121107617 +tags: +title: $:/_importspec/Community Survey 2025/Content/Row +type: text/vnd.tiddlywiki +list: [[$:/2025 Community Survey/Questions/first-heard-survey]] [[$:/2025 Community Survey/Questions/other-survey-source]] [[$:/2025 Community Survey/Questions/are-you-a-dev]] [[$:/2025 Community Survey/Questions/first-used-tw]] [[$:/2025 Community Survey/Questions/joined-tw-community]] [[$:/2025 Community Survey/Questions/started-tw-community]] [[$:/2025 Community Survey/Questions/use-ttw]] [[$:/2025 Community Survey/Questions/use-mailing-list]] [[$:/2025 Community Survey/Questions/use-reddit]] [[$:/2025 Community Survey/Questions/use-discord]] [[$:/2025 Community Survey/Questions/use-github-discuss]] [[$:/2025 Community Survey/Questions/published-plugin]] [[$:/2025 Community Survey/Questions/main-use-cases]] [[$:/2025 Community Survey/Questions/other-use-cases]] [[$:/2025 Community Survey/Questions/use-for-work-or-study]] [[$:/2025 Community Survey/Questions/share-wikis]] [[$:/2025 Community Survey/Questions/publish-to-web]] [[$:/2025 Community Survey/Questions/publish-to-intranet]] [[$:/2025 Community Survey/Questions/value-of-tw]] [[$:/2025 Community Survey/Questions/tw-ability-level]] [[$:/2025 Community Survey/Questions/save-method]] [[$:/2025 Community Survey/Questions/backup-method]] [[$:/2025 Community Survey/Questions/diy-backup-info]] [[$:/2025 Community Survey/Questions/wiki-setup-info]] [[$:/2025 Community Survey/Questions/tw-customisations]] [[$:/2025 Community Survey/Questions/positive-about-future]] [[$:/2025 Community Survey/Questions/tw-future-confidence]] [[$:/2025 Community Survey/Questions/project-decision-trust]] [[$:/2025 Community Survey/Questions/project-strengths]] [[$:/2025 Community Survey/Questions/project-weaknesses]] [[$:/2025 Community Survey/Questions/ok-to-publish]] \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/app/XLSX Import Specs/sheet.tid b/editions/tiddlywiki-surveys/tiddlers/app/XLSX Import Specs/sheet.tid new file mode 100644 index 0000000000..ec0d1d61ba --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/XLSX Import Specs/sheet.tid @@ -0,0 +1,10 @@ +created: 20250711121107617 +import-sheet-name: Content +import-spec-role: sheet +import-tags: [[Community Survey 2025]] +skip-rows-top: 3 +list: [[$:/_importspec/Community Survey 2025/Content/Row]] +modified: 20250711121107617 +tags: +title: $:/_importspec/Community Survey 2025/Content +type: text/vnd.tiddlywiki diff --git a/editions/tiddlywiki-surveys/tiddlers/app/XLSX Import Specs/workbook.tid b/editions/tiddlywiki-surveys/tiddlers/app/XLSX Import Specs/workbook.tid new file mode 100644 index 0000000000..2194112a6a --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/XLSX Import Specs/workbook.tid @@ -0,0 +1,8 @@ +caption: Import Community Survey 2025 Results Spreadsheet +created: 20250711121107617 +import-spec-role: workbook +list: [[$:/_importspec/Community Survey 2025/Content]] +modified: 20250711121107617 +tags: +title: $:/_importspec/Community Survey 2025/ +type: text/vnd.tiddlywiki diff --git a/editions/tiddlywiki-surveys/tiddlers/app/default-import-spec.tid b/editions/tiddlywiki-surveys/tiddlers/app/default-import-spec.tid new file mode 100644 index 0000000000..a4592e8f7f --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/default-import-spec.tid @@ -0,0 +1,6 @@ +created: 20161021164330811 +modified: 20161021164331841 +title: $:/config/plugins/tiddlywiki/xlsx-utils/default-import-spec +type: text/vnd.tiddlywiki + +$:/_importspec/Community Survey 2025/ \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/app/open-state.multids b/editions/tiddlywiki-surveys/tiddlers/app/open-state.multids new file mode 100644 index 0000000000..b70582f2c9 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/open-state.multids @@ -0,0 +1,9 @@ +title: $:/state/survey-2025/--439398230$:/2025 Community Survey/Questions/ + +other-use-cases: no +value-of-tw: no +diy-backup-info: no +wiki-setup-info: no +tw-customisations: no +project-strengths: no +project-weaknesses: no diff --git a/editions/tiddlywiki-surveys/tiddlers/app/palette.tid b/editions/tiddlywiki-surveys/tiddlers/app/palette.tid new file mode 100644 index 0000000000..9572808fce --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/palette.tid @@ -0,0 +1,2 @@ +title: $:/palette +text: $:/palettes/Naporitan diff --git a/editions/tiddlywiki-surveys/tiddlers/app/palettes - Naporitan.tid b/editions/tiddlywiki-surveys/tiddlers/app/palettes - Naporitan.tid new file mode 100644 index 0000000000..a4ae2af2e9 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/palettes - Naporitan.tid @@ -0,0 +1,119 @@ +color-scheme: light +created: 20250423235702979 +description: based on Vanilla +list: #990402 #E95E09 #FFC05B #32A24D +modified: 20250424001709082 +name: Naporitan +tags: $:/tags/Palette +title: $:/palettes/Naporitan +type: application/x-tiddler-dictionary + +primary: #E95E09 +alert-background: #FFDE2D +alert-border: #E95E09 +alert-highlight: #990402 +alert-muted-foreground: #B39B1F +background: #F4FCCD +blockquote-bar: <> +button-background: +button-foreground: <> +button-border: +code-background: #1819141A +code-border: <> +code-foreground: <> +dirty-indicator: #990402 +download-background: <> +download-foreground: <> +dragger-background: <> +dragger-foreground: <> +dropdown-background: <> +dropdown-border: <> +dropdown-tab-background-selected: <> +dropdown-tab-background: <> +dropzone-background: <> +external-link-background-hover: inherit +external-link-background-visited: inherit +external-link-background: inherit +external-link-foreground-hover: #dd3e2e +external-link-foreground-visited: #5d6124 +external-link-foreground: #227841 +foreground: #272323 +highlight-background: #7fe0b4 +highlight-foreground: <> +message-background: #E8EFC3 +message-border: #DCE3B9 +message-foreground: <> +modal-backdrop: <> +modal-background: <> +modal-border: <> +modal-footer-background: <> +modal-footer-border: <> +modal-header-border: <> +muted-foreground: #857862 +notification-background: <> +notification-border: <> +page-background: #FFC05B +pre-background: #DCE3B9 +pre-border: <> +selection-background: +selection-foreground: +select-tag-background: <> +select-tag-foreground: <> +sidebar-button-foreground: <> +sidebar-controls-foreground-hover: <> +sidebar-controls-foreground: <> +sidebar-foreground-shadow: transparent +sidebar-foreground: #653406 +sidebar-muted-foreground-hover: #512f07 +sidebar-muted-foreground: #7a5728 +sidebar-tab-background-selected: <> +sidebar-tab-background: #FFDE2D +sidebar-tab-border-selected: <> +sidebar-tab-border: <> +sidebar-tab-divider: <> +sidebar-tab-foreground-selected: #990402 +sidebar-tab-foreground: <> +sidebar-tiddler-link-foreground-hover: <>88 +sidebar-tiddler-link-foreground: <> +site-title-foreground: <> +static-alert-foreground: <> +tab-background-selected: <> +tab-background: #ffe575 +tab-border-selected: <> +tab-border: #FFC05B +tab-divider: <> +tab-foreground-selected: <> +tab-foreground: <> +table-border: <> +table-footer-background: #FDF0CA +table-header-background: <> +tag-background: #FFDE2D +tag-foreground: <> +tiddler-background: #F4FCCD +tiddler-border: <> +tiddler-controls-foreground-hover: #CC9A49 +tiddler-controls-foreground-selected: <> +tiddler-controls-foreground: #FFDE2D +tiddler-editor-background: #eef5c8 +tiddler-editor-border-image: #ffffff +tiddler-editor-border: #DCE3B9 +tiddler-editor-fields-even: <>88 +tiddler-editor-fields-odd: +tiddler-info-background: <> +tiddler-info-border: <> +tiddler-info-tab-background: <> +tiddler-link-background: transparent +tiddler-link-foreground: #32A24D +tiddler-subtitle-foreground: <> +tiddler-title-foreground: <> +toolbar-new-button: +toolbar-options-button: +toolbar-save-button: +toolbar-info-button: +toolbar-edit-button: +toolbar-close-button: +toolbar-delete-button: +toolbar-cancel-button: +toolbar-done-button: +untagged-background: #B2AB99 +very-muted-foreground: #46372a \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlers/app/state - sidebar.tid b/editions/tiddlywiki-surveys/tiddlers/app/state - sidebar.tid new file mode 100644 index 0000000000..813616c167 --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlers/app/state - sidebar.tid @@ -0,0 +1,2 @@ +title: $:/state/sidebar +text: no \ No newline at end of file diff --git a/editions/tiddlywiki-surveys/tiddlywiki.info b/editions/tiddlywiki-surveys/tiddlywiki.info new file mode 100644 index 0000000000..9fb1380e0d --- /dev/null +++ b/editions/tiddlywiki-surveys/tiddlywiki.info @@ -0,0 +1,15 @@ +{ + "plugins": [ + "tiddlywiki/jszip", + "tiddlywiki/xlsx-utils", + "tiddlywiki/filesystem" + ], + "themes": [ + "tiddlywiki/snowwhite", + "tiddlywiki/vanilla" + ], + "build": { + "index": [ + "--render","$:/core/save/all","surveys.html","text/plain"] + } +} \ No newline at end of file diff --git a/editions/tw.org/tiddlers/TiddlyWiki.tid b/editions/tw.org/tiddlers/TiddlyWiki.tid index 76b8a7c9ae..af39950741 100644 --- a/editions/tw.org/tiddlers/TiddlyWiki.tid +++ b/editions/tw.org/tiddlers/TiddlyWiki.tid @@ -5,4 +5,4 @@ type: text/vnd.tiddlywiki TiddlyWiki is a rich, interactive tool for manipulating complex data with structure that doesn't easily fit into conventional tools like spreadsheets or wordprocessors. -See [[tiddlywiki.com|https://tiddlywiki.com]] for more details \ No newline at end of file +See [[tiddlywiki.com|https://tiddlywiki.com]] for more details. \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/TiddlyWiki Docs PR Maker.tid b/editions/tw5.com/tiddlers/TiddlyWiki Docs PR Maker.tid index dd32a653b0..336f8b4325 100644 --- a/editions/tw5.com/tiddlers/TiddlyWiki Docs PR Maker.tid +++ b/editions/tw5.com/tiddlers/TiddlyWiki Docs PR Maker.tid @@ -1,11 +1,10 @@ created: 20240313100515958 -modified: 20240313103959789 +modified: 20251023154747366 tags: Editions title: TiddlyWiki Docs PR Maker -''~TiddlyWiki Docs PR Maker'' is a special edition of tiddlywiki.com designed to help you contribute to and improve the documentation made by [[@saqimtiaz|https://github.com/saqimtiaz/]]. - -https://saqimtiaz.github.io/tw5-docs-pr-maker/ +''~TiddlyWiki Docs PR Maker'' is a special edition of tiddlywiki.com designed to help you contribute to and improve the documentation. +https://edit.tiddlywiki.com All changes made to the documentation can be very easily submitted to GitHub -- the pull request will be automatically made, hence the "PR Maker" name of the edition. diff --git a/editions/tw5.com/tiddlers/_tw_shared/doc-utilities/doc-macros.tid b/editions/tw5.com/tiddlers/_tw_shared/doc-utilities/doc-macros.tid index 19ae159ce1..8bd5ba4495 100644 --- a/editions/tw5.com/tiddlers/_tw_shared/doc-utilities/doc-macros.tid +++ b/editions/tw5.com/tiddlers/_tw_shared/doc-utilities/doc-macros.tid @@ -197,15 +197,10 @@ This is an example tiddler. See [[Table-of-Contents Macros (Examples)]]. \procedure .link-badge-added(link,colour:#ffe246) <$macrocall $name=".link-badge" text="added" link=<> colour=<>/> -\procedure .link-badge-addendum(link,colour:#fcc84a) <$macrocall $name=".link-badge" text="addendum" link=<> colour=<>/> \procedure .link-badge-extended(link,colour:#f9a344) <$macrocall $name=".link-badge" text="extended" link=<> colour=<>/> \procedure .link-badge-fixed(link,colour:#ffa86d) <$macrocall $name=".link-badge" text="fixed" link=<> colour=<>/> \procedure .link-badge-here(link,colour:#d88e63) <$macrocall $name=".link-badge" text="here" link=<> colour=<>/> -\procedure .link-badge-hide(link,colour:#9d959f) <$macrocall $name=".link-badge" text="hide" link=<> colour=<>/> \procedure .link-badge-improved(link,colour:#7593c7) <$macrocall $name=".link-badge" text="improved" link=<> colour=<>/> -\procedure .link-badge-modified(link,colour:#7f99c9) <$macrocall $name=".link-badge" text="modified" link=<> colour=<>/> -\procedure .link-badge-removed(link,colour:#a9aabc) <$macrocall $name=".link-badge" text="removed" link=<> colour=<>/> -\procedure .link-badge-renamed(link,colour:#b4b995) <$macrocall $name=".link-badge" text="renamed" link=<> colour=<>/> \procedure .link-badge-updated(link,colour:#91ba66) <$macrocall $name=".link-badge" text="updated" link=<> colour=<>/> \procedure .banner-credits(credit,url) diff --git a/editions/tw5.com/tiddlers/_tw_shared/doc-utilities/doc-styles.tid b/editions/tw5.com/tiddlers/_tw_shared/doc-utilities/doc-styles.tid index 2bd2f9ed34..55ae579932 100644 --- a/editions/tw5.com/tiddlers/_tw_shared/doc-utilities/doc-styles.tid +++ b/editions/tw5.com/tiddlers/_tw_shared/doc-utilities/doc-styles.tid @@ -240,7 +240,7 @@ a.doc-deprecated-version.tc-tiddlylink { vertical-align: text-bottom; } -.doc-link-badge { +html button.doc-link-badge, html a.doc-link-badge { text-decoration: none; background-color: #7eba4c; color: <>; @@ -250,10 +250,22 @@ a.doc-deprecated-version.tc-tiddlylink { font-size: 0.75em; } -.doc-link-badge:hover { +html button.doc-link-badge:hover, html a.doc-link-badge:hover { text-decoration: underline; } +.doc-github-link svg { + width: 1.2em; + height: 1.2em; + vertical-align: middle; +} + +.doc-changenote-body { + margin-left: 2em; + font-style: italic; + font-size: 0.9em; +} + .doc-tiddler-fields { background-color: <>; border: 1px solid <>; @@ -283,6 +295,7 @@ a.doc-deprecated-version.tc-tiddlylink { list-style: none; display: flex; flex-wrap: wrap; + padding: 0; } ol.doc-github-contributors li { display: flex; diff --git a/editions/tw5.com/tiddlers/about/Archive.tid b/editions/tw5.com/tiddlers/about/Archive.tid index 98901027ba..33f2fd45ee 100644 --- a/editions/tw5.com/tiddlers/about/Archive.tid +++ b/editions/tw5.com/tiddlers/about/Archive.tid @@ -1,5 +1,5 @@ created: 20231005205623086 -modified: 20241115193649399 +modified: 20250807100434131 tags: About title: TiddlyWiki Archive @@ -8,7 +8,7 @@ title: TiddlyWiki Archive 5.1.10 5.1.11 5.1.12 5.1.13 5.1.14 5.1.15 5.1.16 5.1.17 5.1.18 5.1.19 5.1.20 5.1.21 5.1.22 5.1.23 5.2.0 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 -5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 +5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.3.8 \end Older versions of TiddlyWiki are available in the [[archive|https://github.com/TiddlyWiki/tiddlywiki.com-gh-pages/tree/master/archive]]: diff --git a/editions/tw5.com/tiddlers/about/Developers.tid b/editions/tw5.com/tiddlers/about/Developers.tid index 084869ae98..53a99c84c4 100644 --- a/editions/tw5.com/tiddlers/about/Developers.tid +++ b/editions/tw5.com/tiddlers/about/Developers.tid @@ -1,24 +1,11 @@ created: 20150412191004348 -modified: 20240925114810504 +modified: 20251022153208584 tags: Community Reference title: Developers type: text/vnd.tiddlywiki -! [[GitHub Stats|https://github.com/TiddlyWiki/TiddlyWiki5/graphs/contributors]] - -There are several resources for developers to learn more about TiddlyWiki and to discuss and contribute to its development. - -> [img[https://repobeats.axiom.co/api/embed/b92b1b363e2b5f26837ae573a60d39b4248b50a0.svg]] - * [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]] is the official developer documentation - * Get involved in the [[development on GitHub|https://github.com/TiddlyWiki/TiddlyWiki5]] - * [[GitHub Discussions|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]] are for Q&A and open-ended discussion * [[GitHub Issues|https://github.com/TiddlyWiki/TiddlyWiki5/issues]] are for raising bug reports and proposing specific, actionable new ideas - -* The older ~TiddlyWikiDev Google Group is now closed in favour of [[Talk TiddlyWiki|https://talk.tiddlywiki.org/]] and [[GitHub Discussions|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]] -** It remains a useful archive: https://groups.google.com/group/TiddlyWikiDev -*** An enhanced group search facility is available on [[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]] - -* Chat at https://gitter.im/TiddlyWiki/public (development room coming soon) +* See [[Contributing]] for guidelines on how to contribute to the project. diff --git a/editions/tw5.com/tiddlers/about/Filter Syntax History.tid b/editions/tw5.com/tiddlers/about/Filter Syntax History.tid new file mode 100644 index 0000000000..faf7dfc38a --- /dev/null +++ b/editions/tw5.com/tiddlers/about/Filter Syntax History.tid @@ -0,0 +1,42 @@ +created: 20250730154331065 +modified: 20250731162557775 +modifier: Jeremy Ruston +tags: [[History of TiddlyWiki]] +title: Filter Syntax History + +In response to [[a discussion|https://talk.tiddlywiki.org/t/filter-syntax-history/13058]] about the filter syntax in TiddlyWiki5 I posted this brief personal history. + +For context, before TiddlyWiki, I only had practical experience of a very small number of languages: machine code, assembly language, BASIC, FORTH, C, C++ and of course JavaScript. I had a smattering of Java, Pascal and one or two other ancient languages but no experience of actor based languages like Erlang, or modern functional languages. + +The story starts with the double square bracket syntax used in wikitext for links. In 2004 this was already an established usage in wikis. However, I switched the ordering of pretty links because I thought Wikipedia's `[[link address|link text]]` was the wrong way around. It broke up sentences: `The file is [[https://site.com/thing|here]]` seems less readable than `The file is [[here|https://site.com/thing]]`. For a long time I regretted this decision, and wished that I had just gone with Wikipedia's established usage. Others have since pointed out that ~TiddlyWiki's ordering is actually consistent with [[Markdown]], which might be regarded as the winner of the markup wars. + +I looked at the double square bracket link syntax is that it establishes a way to quote page/tiddler titles so that they may contain spaces, and don't have to use CamelCase. Thus, right at the start of [[TiddlyWiki Classic|TiddlyWikiClassic]] when I was implementing the first iteration of the DefaultTiddlers feature it was natural to use double square brackets to quote titles containing spaces, making a list of titles to be opened at startup. + +Soon, I wanted to extend the implementation of DefaultTiddlers so that it could be used to open all tiddlers with a particular tag while retaining backwards compatibility. + +A trick that I am apt to use in such situations is to try to engineer things so that the current behaviour is re-interpreted as a shortcut syntax for a new, richer syntax that provides more flexibility. In this case, the idea was that in filters we would interpret `[[mytiddler]]` as a shortcut for `[title[mytiddler]]`. Then we could put any keywords we like in place of "title", giving us an infinitely extensible syntax. A similar example is the way that we implemented filter run prefixes by retrospectively defining the absence of a prefix as implying a default prefix. + +The new syntax was first [[introduced in 2007|https://github.com/TiddlyWiki/TiddlyWikiClassic/commit/1928962ea6811b1ca67378ed3cd62059a9806ae9]], with a simplified syntax that only supported a single `tag` operator but was just about sufficient for intended purpose. The only documentation was a comment in the source code (complete with a typo): + +``` +// Filter a list of tiddlers +//# filter - filter expression (eg "tidlertitle [[multi word tiddler title]] [tag[systemConfig]]") +//# Returns an array of Tiddler() objects that match the filter expression +``` + +Provision to combine the filter operators had been on my mind from the beginning. When ~TiddlyWiki 5 started in 2011 I reused the simple implementation from ~TiddlyWiki Classic. Smashing operators [[was finally implemented in May 2012|https://github.com/TiddlyWiki/TiddlyWiki5/commit/8b0703b694e982b2bc448bdb133742164723dd8a]]. By the time of the launch the filter language had grown into pretty much what it is today -- see the [[documentation for TiddlyWiki v5.1.0|https://tiddlywiki.com/archive/full/TiddlyWiki-5.1.0#Introduction%20to%20Filters]]. + +The filter syntax had undoubtedly evolved into something approaching a programming language. As others have probably expressed much more eloquently, a characteristic of the programming languages that I love is that they start with a small number of principles that are consistently applied and combined. In the case of ~TiddlyWiki, the list would be very roughly: + +* Double square brackets for [[linking and quoting|Linking in WikiText]] +* Curly braces for [[transclusion|Transclusion in WikiText]] +* Angle brackets for [[macros|Procedures]] (which evolved into variables) +* Double exclamation marks to indicate fields `{{!!myfield}}` +* Double hashes to indicate indexes `{{##myindex}}` +* Smashing together adjacent [[filter operations|Introduction to filter notation]] by removing the combining `][` +* The dollar sign as a rough signifier of data [[owned by the system|Transclusion in WikiText]] rather than the user + +As I have written about elsewhere I was privileged to know Joe Armstrong, the co-inventor of Erlang, in the last few years of his life – we were working together on a book about ~TiddlyWiki when he passed away in 2019. Joe had contacted me out of the blue ten years before to express his admiration for ~TiddlyWiki, and we had developed a friendship. He was actually a big fan of TW5's filter syntax, and used to make me feel better about it by joking that I had (re-)invented the monad, which sounded impressive to me. That doesn't make the filter language any easier to learn, but it does mean that it is *worth* learning: it's a real language, based on the same principles as other languages. + +I find it pleasing that the TW5 filter language has its roots in decisions that were taken in the TWC days. It's still hard to learn, but that's an ongoing paradox of programming: people want to do complicated things, and complicated things are complicated. It's hard to see how we could have made filters any simpler without depriving users of the possibility of doing complicated things. + diff --git a/editions/tw5.com/tiddlers/about/Funding TiddlyWiki.tid b/editions/tw5.com/tiddlers/about/Funding TiddlyWiki.tid index 938631d559..7c83ed092f 100644 --- a/editions/tw5.com/tiddlers/about/Funding TiddlyWiki.tid +++ b/editions/tw5.com/tiddlers/about/Funding TiddlyWiki.tid @@ -10,7 +10,7 @@ Nonetheless, TiddlyWiki is a relatively big, complex machine that requires a sig The people in the community that do the work have widely varying needs: * At one end, a good proportion of the work on TiddlyWiki is performed by community members on a purely voluntary basis. For those people, the satisfaction of helping others is sufficient reward. Indeed, for many people, unpaid voluntary activities are a satisfying antidote to everyday paid work -* At the other extreme, JeremyRuston and some other contributors are trying to make a full-time living working on TiddlyWiki by offering commercial products and services around it +* At the other extreme, [[@Jermolene]] and some other contributors are trying to make a full-time living working on TiddlyWiki by offering commercial products and services around it * In between, there are other people who would appreciate an ocassional token to reward them for their work To support these needs in the community, we have two initiatives: diff --git a/editions/tw5.com/tiddlers/about/History of TiddlyWiki.tid b/editions/tw5.com/tiddlers/about/History of TiddlyWiki.tid index 8893bde71e..80f9aeeb32 100644 --- a/editions/tw5.com/tiddlers/about/History of TiddlyWiki.tid +++ b/editions/tw5.com/tiddlers/about/History of TiddlyWiki.tid @@ -1,86 +1,12 @@ created: 20140908114400000 -modified: 20241016125145988 +modified: 20250730154331065 tags: About title: History of TiddlyWiki type: text/vnd.tiddlywiki -! Twenty Years of ~TiddlyWiki -We've held a number of livestreams to celebrate twenty years of ~TiddlyWiki. You can watch the recordings here: - -* 19th September 2024 - https://youtube.com/live/z9slx92TyrU -* 20th September 2024 - https://youtube.com/live/puFdN-FgOjg -* 21st September 2024 - https://youtube.com/live/0SjsHvwjHGE -* 22nd September 2024 - https://youtube.com/live/oD7Jtq2D4lg - -Over on GitHub, we celebrated the contributors to TiddlyWiki by [[asking them|https://github.com/TiddlyWiki/TiddlyWiki5/discussions/7983]] for their reflections on the anniversary. We received some interesting and thoughtful responses. For example, this from [[@FND|https://github.com/FND]]: - -> TiddlyWiki had an immeasurable, enduring influence not just on my career, such as it is, but also on my values: To this day, I regularly find myself referring back to [[fundamental concepts|https://prepitaph.org/articles/creative-privacy/]] TiddlyWiki instilled in me - many of which are often forgotten or ignored elsewhere. Having this background thus helps me keep my bearings working in this industry, whether it's worshipping at the altar of technical complexity or even just remembering humans exist in the world of technology. - -> By TiddlyWiki, I mean people. It was an immense privilege interacting with and learning from this community and the group Jeremy built around it. It also helps reminding myself that this privilege was afforded to me by sheer happenstance; I hope to be paying it forward. - -Some recent podcasts featuring ~TiddlyWiki: - -* The changelog podcast from 2016 - https://changelog.com/podcast/196 discussing ~TiddlyWiki's backstory -* Floss Weekly recording from 2021 - https://twit.tv/shows/floss-weekly/episodes/620 - -! Origins of TiddlyWiki - -Back in 1997 a colleague introduced me to [[Ward Cunningham's original wiki|http://c2.com/cgi/wiki]]. I was impressed that something so powerful could fit into just 700 lines of Perl, and fascinated by the radical reimagining of security and permissions. Like many other developers, I took every opportunity I could to try out various wikis, and to explore their use at work. - -The allure of the wiki for me was the feeling that it could eventually disrupt the prevailing paradigm of print-oriented documents and emails. - -After watching people use wikis for a few years, I noticed that power users made extensive use of the ability to open multiple wiki pages at once in several browser tabs, making it easier for them to compare and review pages, to copy text between them and to act as a sort of queue of pages yet to be read. - -I felt that this ability to manipulate multiple pages at once was central to the ability to refactor a wiki, and it is generally accepted that a wiki that is lovingly refactored tends to be more useful. And yet, standard wiki user interfaces have always been designed exclusively for the presentation and manipulation of single pages at once. - -All of these thoughts came together when I saw GMail in April 2004, which used Ajax cleverly to blend individual emails into threaded conversations. - -I started experimenting with HTML and JavaScript to explore the idea further. I'd had virtually no experience of either, just having put together some static pages and simple ASP sites in previous lives. Getting my head around these client-side technologies was painful; like everyone else, I was horrified to discover how appalling were the incompatibilities and inconsistencies of web programming. - -! Launch of TiddlyWiki - -So, in September 2004 I released a primitive [[first version of TiddlyWiki|https://classic.tiddlywiki.com/firstversion.html]]. It was the smallest possible thing that demonstrated the idea: it was a simple, self-contained static 48KB HTML file. - -The downside of writing the first version of TiddlyWiki in this way was that it made it completely impractical to use for editing - when you click 'save changes' it just pops up a window showing the data that would be saved if it were possible for an HTML page to write to the file system. - -Much of the early feedback was that TiddlyWiki was neat, but that it would be more useful when it was possible to properly save changes. I was a little frustrated, as I thought I knew that it was impossible for an HTML file running in the browser to save changes to the local file system. - -Within a few months I saw an experimental Firefox extension that enabled TiddlyWiki to save changes in the browser. Examining the code, I realised that the APIs that it used to write to the file system were actually available in ordinary HTML files - as long as they were loaded via a `file://` URI. - -I adapted the Firefox code into the core of TiddlyWiki, and soon added a similar ability for Internet Explorer (making use of an old [[ActiveX|https://en.wikipedia.org/wiki/ActiveX]] control that Microsoft distributed with Internet Explorer). - -! Growth of TiddlyWiki - -A major milestone in the growth of TiddlyWiki was the creation of "GTDTiddlyWiki" by Nathan Bowers. He took the vanilla TiddlyWiki product and adapted it for the specific application of keeping track of tasks using the popular Getting Things Done methodology. GTDTiddlyWiki was an immediate hit, being enthusiastically greeted on websites like [[LifeHacker|https://lifehacker.com/]]. - -Over the next couple of years TiddlyWiki continued to grow in popularity, and gained new features and capabilities. Within a year I was able to support myself by performing bespoke development work on TiddlyWiki, notably working with wiki pioneer [[SocialText|https://en.wikipedia.org/wiki/Socialtext]] on the ability to synchronise changes with an online server - -! BT Acquisition - -In May 2007, [[BT]] acquired [[Osmosoft]], my consultancy company. It was an unusual decision to acquire a company with a single employee and a tiny trickle of revenue - [[Osmosoft]] didn't even own the intellectual property in TiddlyWiki since I had handed it over to [[UnaMesa]] to assure its future for the community. - -[[BT]]'s motivation was to help them understand community-based ecosystems. I joined the organisation as "Head of Open Source Innovation", taking responsibility for open source governance, and providing advice and expertise on how to participate in open soure communities. - -! [[Osmosoft]] and TiddlySpace - -I built a team in BT under the name [[Osmosoft]]. Our purpose was to evangelise the benefits of open source, and to help other teams realise those benefits in practice. We also found that it was necessary to evangelise the use of the web in general, and web standards in particular. - -Our approach was to focus on showing rather than telling. We worked with the TiddlyWiki community to extend the ecosystem and we built numerous internal systems for BT (some based on TiddlyWiki and some not). - -[[Osmosoft]]'s chief contribution to the TiddlyWiki community was the creation of TiddlyWeb and TiddlySpace. TiddlyWeb was a robust, internet scale server for tiddlers that could also compose TiddlyWiki views of those tiddlers. TiddlySpace was an attempt to package TiddlyWeb into a more directly usable form. - -! Leaving BT - -By the end of 2011 I was increasingly feeling that I would be better placed to realise the potential of TiddlyWiki outside of the corporate confines BT. Accordingly, I left and started work as an independent developer, primarily working on a brand new reboot of TiddlyWiki in the shape of TiddlyWiki5. - -! Development of TiddlyWiki5 - -I worked on new release of TiddlyWiki from November 2011. As a programmer, working on "version 2.0" of something that I had already written is a very attractive proposition. It means that the requirements were fully understood, allowing me to focus on evolving the architecture needed to support the desired functionality. - -! The Future - -Now that TiddlyWiki5 has finally left "beta" status behind, my hope is that it will have a long life. Because it only uses standard features of HTML5 and Node.js, there is no reason why it cannot be fully operational for many years to come. My goal is for it to last for at least 25 years. - -//Jeremy Ruston, 20th September 2014// +Here is a brief history of TiddlyWiki, its origins and its evolution since it was first released on 20th September 2004. Contributions and reminiscences are welcome. +* [[The Story of TiddlyWiki]] – a personal account of the story of TiddlyWiki, its origins and evolution +* [[TiddlyWiki Anniversaries]] – relive the celebrations of TiddlyWiki's major anniversaries +* [[Filter Syntax History]] – gives a brief history of the evolution of the filter syntax in TiddlyWiki5 diff --git a/editions/tw5.com/tiddlers/about/The Story of TiddlyWiki.tid b/editions/tw5.com/tiddlers/about/The Story of TiddlyWiki.tid new file mode 100644 index 0000000000..2af0fb4a69 --- /dev/null +++ b/editions/tw5.com/tiddlers/about/The Story of TiddlyWiki.tid @@ -0,0 +1,69 @@ +title: The Story of TiddlyWiki +tags: [[History of TiddlyWiki]] +modifier: Jeremy Ruston +created: 20140908114400000 +modified: 20250730154331065 + +This is a personal account of the story of TiddlyWiki, its origins and its evolution since it was first released on 20th September 2004. + +! Origins of TiddlyWiki + +Back in 1997 a colleague introduced me to [[Ward Cunningham's original wiki|http://c2.com/cgi/wiki]]. I was impressed that something so powerful could fit into just 700 lines of Perl, and fascinated by the radical reimagining of security and permissions. Like many other developers, I took every opportunity I could to try out various wikis, and to explore their use at work. + +The allure of the wiki for me was the feeling that it could eventually disrupt the prevailing paradigm of print-oriented documents and emails. + +After watching people use wikis for a few years, I noticed that power users made extensive use of the ability to open multiple wiki pages at once in several browser tabs, making it easier for them to compare and review pages, to copy text between them and to act as a sort of queue of pages yet to be read. + +I felt that this ability to manipulate multiple pages at once was central to the ability to refactor a wiki, and it is generally accepted that a wiki that is lovingly refactored tends to be more useful. And yet, standard wiki user interfaces have always been designed exclusively for the presentation and manipulation of single pages at once. + +All of these thoughts came together when I saw GMail in April 2004, which used Ajax cleverly to blend individual emails into threaded conversations. + +I started experimenting with HTML and JavaScript to explore the idea further. I'd had virtually no experience of either, just having put together some static pages and simple ASP sites in previous lives. Getting my head around these client-side technologies was painful; like everyone else, I was horrified to discover how appalling were the incompatibilities and inconsistencies of web programming. + +! Launch of TiddlyWiki + +So, in September 2004 I released a primitive [[first version of TiddlyWiki|https://classic.tiddlywiki.com/firstversion.html]]. It was the smallest possible thing that demonstrated the idea: it was a simple, self-contained static 48KB HTML file. + +The downside of writing the first version of TiddlyWiki in this way was that it made it completely impractical to use for editing - when you click 'save changes' it just pops up a window showing the data that would be saved if it were possible for an HTML page to write to the file system. + +Much of the early feedback was that TiddlyWiki was neat, but that it would be more useful when it was possible to properly save changes. I was a little frustrated, as I thought I knew that it was impossible for an HTML file running in the browser to save changes to the local file system. + +Within a few months I saw an experimental Firefox extension that enabled TiddlyWiki to save changes in the browser. Examining the code, I realised that the APIs that it used to write to the file system were actually available in ordinary HTML files - as long as they were loaded via a `file://` URI. + +I adapted the Firefox code into the core of TiddlyWiki, and soon added a similar ability for Internet Explorer (making use of an old [[ActiveX|https://en.wikipedia.org/wiki/ActiveX]] control that Microsoft distributed with Internet Explorer). + +! Growth of TiddlyWiki + +A major milestone in the growth of TiddlyWiki was the creation of "GTDTiddlyWiki" by Nathan Bowers. He took the vanilla TiddlyWiki product and adapted it for the specific application of keeping track of tasks using the popular Getting Things Done methodology. GTDTiddlyWiki was an immediate hit, being enthusiastically greeted on websites like [[LifeHacker|https://lifehacker.com/]]. + +Over the next couple of years TiddlyWiki continued to grow in popularity, and gained new features and capabilities. Within a year I was able to support myself by performing bespoke development work on TiddlyWiki, notably working with wiki pioneer [[SocialText|https://en.wikipedia.org/wiki/Socialtext]] on the ability to synchronise changes with an online server + +! BT Acquisition + +In May 2007, [[BT]] acquired [[Osmosoft]], my consultancy company. It was an unusual decision to acquire a company with a single employee and a tiny trickle of revenue - [[Osmosoft]] didn't even own the intellectual property in TiddlyWiki since I had handed it over to [[UnaMesa]] to assure its future for the community. + +[[BT]]'s motivation was to help them understand community-based ecosystems. I joined the organisation as "Head of Open Source Innovation", taking responsibility for open source governance, and providing advice and expertise on how to participate in open soure communities. + +! [[Osmosoft]] and TiddlySpace + +I built a team in BT under the name [[Osmosoft]]. Our purpose was to evangelise the benefits of open source, and to help other teams realise those benefits in practice. We also found that it was necessary to evangelise the use of the web in general, and web standards in particular. + +Our approach was to focus on showing rather than telling. We worked with the TiddlyWiki community to extend the ecosystem and we built numerous internal systems for BT (some based on TiddlyWiki and some not). + +[[Osmosoft]]'s chief contribution to the TiddlyWiki community was the creation of TiddlyWeb and TiddlySpace. TiddlyWeb was a robust, internet scale server for tiddlers that could also compose TiddlyWiki views of those tiddlers. TiddlySpace was an attempt to package TiddlyWeb into a more directly usable form. + +! Leaving BT + +By the end of 2011 I was increasingly feeling that I would be better placed to realise the potential of TiddlyWiki outside of the corporate confines BT. Accordingly, I left and started work as an independent developer, primarily working on a brand new reboot of TiddlyWiki in the shape of TiddlyWiki5. + +! Development of TiddlyWiki5 + +I worked on new release of TiddlyWiki from November 2011. As a programmer, working on "version 2.0" of something that I had already written is a very attractive proposition. It means that the requirements were fully understood, allowing me to focus on evolving the architecture needed to support the desired functionality. + +! The Future + +Back in 2014, shortly after TiddlyWiki5 was first released, I wrote: + +> Now that TiddlyWiki5 has finally left "beta" status behind, my hope is that it will have a long life. Because it only uses standard features of HTML5 and Node.js, there is no reason why it cannot be fully operational for many years to come. My goal is for it to last for at least 25 years. + +As I write this, TiddlyWiki5 is 44% of the way to that goal. With the support and enthusiasm of the community I am confident the project will continue to thrive and evolve. diff --git a/editions/tw5.com/tiddlers/about/TiddlyWiki Anniversaries.tid b/editions/tw5.com/tiddlers/about/TiddlyWiki Anniversaries.tid new file mode 100644 index 0000000000..3ee1a9db70 --- /dev/null +++ b/editions/tw5.com/tiddlers/about/TiddlyWiki Anniversaries.tid @@ -0,0 +1,31 @@ +title: TiddlyWiki Anniversaries +tags: [[History of TiddlyWiki]] +created: 20250730154331065 +modified: 20250730154331065 + +! Twentieth Anniversary of TiddlyWiki + +We've held a number of livestreams to celebrate twenty years of ~TiddlyWiki. You can watch the recordings here: + +* 19th September 2024 - https://youtube.com/live/z9slx92TyrU +* 20th September 2024 - https://youtube.com/live/puFdN-FgOjg +* 21st September 2024 - https://youtube.com/live/0SjsHvwjHGE +* 22nd September 2024 - https://youtube.com/live/oD7Jtq2D4lg + +Over on GitHub, we celebrated the contributors to TiddlyWiki by [[asking them|https://github.com/TiddlyWiki/TiddlyWiki5/discussions/7983]] for their reflections on the anniversary. We received some interesting and thoughtful responses. For example, this from [[@FND|https://github.com/FND]]: + +> TiddlyWiki had an immeasurable, enduring influence not just on my career, such as it is, but also on my values: To this day, I regularly find myself referring back to [[fundamental concepts|https://prepitaph.org/articles/creative-privacy/]] TiddlyWiki instilled in me - many of which are often forgotten or ignored elsewhere. Having this background thus helps me keep my bearings working in this industry, whether it's worshipping at the altar of technical complexity or even just remembering humans exist in the world of technology. + +> By TiddlyWiki, I mean people. It was an immense privilege interacting with and learning from this community and the group Jeremy built around it. It also helps reminding myself that this privilege was afforded to me by sheer happenstance; I hope to be paying it forward. + +Some recent podcasts featuring ~TiddlyWiki: + +* The changelog podcast from 2016 - https://changelog.com/podcast/196 discussing ~TiddlyWiki's backstory +* Floss Weekly recording from 2021 - https://twit.tv/shows/floss-weekly/episodes/620 + +! Tenth Anniversary of TiddlyWiki + +You can watch the livestream from 20th September 2014 celebrating the tenth anniversary of TiddlyWiki here: + +https://www.youtube.com/watch?v=f_02ZV0J9NY + diff --git a/editions/tw5.com/tiddlers/commands/RenderCommand.tid b/editions/tw5.com/tiddlers/commands/RenderCommand.tid index d327106553..73fac50332 100644 --- a/editions/tw5.com/tiddlers/commands/RenderCommand.tid +++ b/editions/tw5.com/tiddlers/commands/RenderCommand.tid @@ -1,6 +1,6 @@ caption: render created: 20170919131752774 -modified: 20170919131805871 +modified: 20250811164528905 tags: Commands title: RenderCommand type: text/vnd.tiddlywiki @@ -10,6 +10,7 @@ type: text/vnd.tiddlywiki <$button class="tc-btn-invisible" style="text-decoration:underline"> Show available rendering templates <$action-setfield $tiddler="$:/temp/advancedsearch" text="[all[shadows]prefix[$:/core/templates/]]"/> +<$action-setfield $tiddler="$:/temp/advancedsearch/input" text="[all[shadows]prefix[$:/core/templates/]]"/> <$action-setfield $tiddler="$:/state/tab--1498284803" text="$:/core/ui/AdvancedSearch/Filter"/> <$action-navigate $to="$:/AdvancedSearch"/> diff --git a/editions/tw5.com/tiddlers/community/Articles.tid b/editions/tw5.com/tiddlers/community/Articles.tid index 729fe539d0..201e06b5a3 100644 --- a/editions/tw5.com/tiddlers/community/Articles.tid +++ b/editions/tw5.com/tiddlers/community/Articles.tid @@ -1,6 +1,6 @@ created: 20140320230543190 modified: 20160602172752299 -tags: Community +tags: Resources title: Articles type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/community/Chinese Community.tid b/editions/tw5.com/tiddlers/community/Chinese Community.tid index 709933b4a3..7fb2dbdf78 100644 --- a/editions/tw5.com/tiddlers/community/Chinese Community.tid +++ b/editions/tw5.com/tiddlers/community/Chinese Community.tid @@ -1,20 +1,13 @@ title: 中文社区 - Chinese Community tags: Community -# A Chinese community tutorial program that people can edit together: -#* Main site: [ext[https://tw-cn.netlify.app/]] -#* Accelerated access: [ext[https://tw-cn.cpolar.top/]] -#* Alternate: [ext[https://tiddly-wiki-chinese-tutorial.vercel.app]] -# Tiddlywiki Chinese Chat Forum: [ext[https://talk.tidgi.fun/topic/6]] -# Chinese translation of Tiddlywiki official website [ext[https://bramchen.github.io/tw5-docs/zh-Hans/]] -# The best Chinese introductory tutorial for newbies [ext[https://keatonlao.github.io/tiddlywiki-xp/]] - ---- - -# 大家可以一起编辑的中文社区教程项目: -#* 主站:[ext[https://tw-cn.netlify.app/]] -#* 加速访问:[ext[https://tw-cn.cpolar.top/]] -#* 备用:[ext[https://tiddly-wiki-chinese-tutorial.vercel.app]] -# 太微中文交流论坛:[ext[https://talk.tidgi.fun/topic/6]] -# 太微官网汉化版:[ext[https://bramchen.github.io/tw5-docs/zh-Hans/]] -# 最适合新手的中文入门教程:[ext[https://keatonlao.github.io/tiddlywiki-xp/]] +* 大家可以一起编辑的中文社区教程项目: +*# 主站:[ext[https://tw-cn.netlify.app/]] +*# 加速访问:[ext[https://tw-cn.cpolar.top/]] +*# 备用:[ext[https://tiddly-wiki-chinese-tutorial.vercel.app]] +* 太微中文交流论坛:[ext[https://talk.tidgi.fun/topic/6]] +* 太微官网汉化版:[ext[https://bramchen.github.io/tw5-docs/zh-Hans/]] +* 最适合新手的中文入门教程:[ext[https://keatonlao.github.io/tiddlywiki-xp/]] +* TiddlyWiki 爱好者 QQ 群: 946052860 +*# [ext[点击链接加入群聊【TiddlyWiki爱好者】|https://qm.qq.com/q/13SFxVArlu]] +*# [ext[点击链接加入腾讯频道【太微TiddlyWiki】|https://pd.qq.com/s/474hgpll1]] diff --git a/editions/tw5.com/tiddlers/community/Community Editions.tid b/editions/tw5.com/tiddlers/community/Community Editions.tid index 399340cdfb..f07bff2c74 100644 --- a/editions/tw5.com/tiddlers/community/Community Editions.tid +++ b/editions/tw5.com/tiddlers/community/Community Editions.tid @@ -1,6 +1,6 @@ created: 20210101150806938 modified: 20230803053451496 -tags: Community +tags: Resources title: Community Editions These are prepackaged editions created by the ~TiddlyWiki [[Community]]. These are ~TiddlyWikis with added plugins and configurations to facilitate a certain use-case. These are great starting points if you want to quickly jump into TiddlyWiki and start using it without spending too much time configuring yourself. diff --git a/editions/tw5.com/tiddlers/community/Community Palettes.tid b/editions/tw5.com/tiddlers/community/Community Palettes.tid index 11e33e646c..7e9a0a2e80 100644 --- a/editions/tw5.com/tiddlers/community/Community Palettes.tid +++ b/editions/tw5.com/tiddlers/community/Community Palettes.tid @@ -1,6 +1,6 @@ created: 20210101152520906 modified: 20210101152533358 -tags: Community +tags: Resources title: Community Palettes This is a list of palettes made by members of the ~TiddlyWiki [[Community]]. Palettes change the colourscheme of TiddlyWiki and can be used in combination with themes. diff --git a/editions/tw5.com/tiddlers/community/Community Plugins.tid b/editions/tw5.com/tiddlers/community/Community Plugins.tid index d622a24cb3..905df8c387 100644 --- a/editions/tw5.com/tiddlers/community/Community Plugins.tid +++ b/editions/tw5.com/tiddlers/community/Community Plugins.tid @@ -1,6 +1,6 @@ created: 20210101150806938 modified: 20210101151403345 -tags: Community +tags: Resources title: Community Plugins These are plugins created by the ~TiddlyWiki [[Community]]. Visit their website to try out the plugin. Carefully read the installing instructions and back up before installing! These plugins may not always be up to date and can contain bugs or unwanted behaviour. For even more plugins, visit the [[TiddlyWiki Groups|Forums]]. New plugins get posted and announced there first. diff --git a/editions/tw5.com/tiddlers/community/Community Survey 2025.tid b/editions/tw5.com/tiddlers/community/Community Survey 2025.tid new file mode 100644 index 0000000000..5d534117cd --- /dev/null +++ b/editions/tw5.com/tiddlers/community/Community Survey 2025.tid @@ -0,0 +1,25 @@ +title: Community Survey 2025 +created: 20250708130030654 +modified: 20250826162904085 + +
+<$image source="Community Survey 2025" alt="Shaping the future of TiddlyWiki with the Community Survey 2025" width="280"/> +
+ +The core developers work hard year by year to continuously improve ~TiddlyWiki. Part of the satisfaction is that we are not just building software for ourselves, we’re serving the needs of a wider community of users. + +That begs the question of how we can understand the needs of these other users. We do it in an informal way through every interaction with users on the forum, or on GitHub, but once in a while it can be useful to do take a more formal approach, and so we undertook the ~TiddlyWiki Community Survey 2025. This brief, anonymous survey was designed to give us insight into the needs of TiddlyWiki users, with a mix of structured and freeform questions. + +The [[raw results|https://ec.europa.eu/eusurvey/publication/tiddlywiki-users-2025]] of the survey are available in TiddlyWiki form on this new site: + +https://tiddlywiki.com/surveys.html + +The results of this survey will help inform future developments, helping us focus on what would make TiddlyWiki better for you, both as software and as a community. Even longer-term, it will help us refine the future vision of the project, ensuring it is based on the needs of our community. We intend to publish further analysis of the survey results in the coming weeks. + +!! The Great Viral TiddlyWiki Interview Project (2010) + +The new Surveys site also include the "The Great Viral TiddlyWiki Interview Project" from 2010. We invited TiddlyWiki users to join the interview project with these words: + +> For many people that use it. there is a distinct discovery moment when TiddlyWiki explodes in their brain. For others, it is a challenge to get their heads around TiddlyWiki at all. +> +> This project explores how people think about TiddlyWiki by collecting together responses to a set of questions about it. diff --git a/editions/tw5.com/tiddlers/community/Community Themes.tid b/editions/tw5.com/tiddlers/community/Community Themes.tid index 23abb71503..4becdf4baa 100644 --- a/editions/tw5.com/tiddlers/community/Community Themes.tid +++ b/editions/tw5.com/tiddlers/community/Community Themes.tid @@ -1,6 +1,6 @@ created: 20210101152520906 modified: 20210101152533358 -tags: Community +tags: Resources title: Community Themes This is a list of themes made by members of the ~TiddlyWiki [[Community]]. Themes change the look and feel of TiddlyWiki, allowing for another degree of customisation. Installing themes works [[the same as plugins.|Manually installing a plugin]] diff --git a/editions/tw5.com/tiddlers/community/Community.tid b/editions/tw5.com/tiddlers/community/Community.tid index 2b3b7abfb0..ad241ba2f0 100644 --- a/editions/tw5.com/tiddlers/community/Community.tid +++ b/editions/tw5.com/tiddlers/community/Community.tid @@ -1,11 +1,9 @@ created: 20130909151600000 -modified: 20210322152237662 +modified: 20250909171928024 tags: TableOfContents Welcome title: Community type: text/vnd.tiddlywiki -<<.tip "The latest and most useful links are now being gathered in the [[Community Links Aggregator]].">> +The TiddlyWiki community is an enthusiastic group of users and developers who work together to make TiddlyWiki better, and help each other get the best out of it. -Once all the relevant links have been transferred over these entries will be removed from the main tiddlywiki.com site. - -<> +<> diff --git a/editions/tw5.com/tiddlers/community/Contributing.tid b/editions/tw5.com/tiddlers/community/Contributing.tid index 332467405f..7687e0e951 100644 --- a/editions/tw5.com/tiddlers/community/Contributing.tid +++ b/editions/tw5.com/tiddlers/community/Contributing.tid @@ -1,5 +1,5 @@ created: 20131101111400000 -modified: 20220328105410721 +modified: 20250818012527342 tags: Community title: Contributing type: text/vnd.tiddlywiki @@ -16,7 +16,7 @@ PRs must meet these minimum requirements before they can be considered for mergi * 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 capitalised (first letter of first word only, and proper nouns if any), 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 diff --git a/editions/tw5.com/tiddlers/community/Examples.tid b/editions/tw5.com/tiddlers/community/Examples.tid index 1846613b93..79d37a583a 100644 --- a/editions/tw5.com/tiddlers/community/Examples.tid +++ b/editions/tw5.com/tiddlers/community/Examples.tid @@ -1,6 +1,6 @@ created: 20140320230543190 modified: 20160602172745917 -tags: HelloThere Community +tags: Resources title: Examples type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/community/Forums.tid b/editions/tw5.com/tiddlers/community/Forums.tid index 522390fcec..31e1fa4bb6 100644 --- a/editions/tw5.com/tiddlers/community/Forums.tid +++ b/editions/tw5.com/tiddlers/community/Forums.tid @@ -4,15 +4,13 @@ tags: Community title: Forums type: text/vnd.tiddlywiki -! Official Forums +!!! Users -!! https://talk.tiddlywiki.org/ +The official TiddlyWiki forum is a place to talk about ~TiddlyWiki: requests for help, [[announcements|https://talk.tiddlywiki.org/c/announcements/20]] of new releases and plugins, debating new features, or just sharing experiences. You can participate via the associated website, or subscribe via email. -<<< -The new official forum for talking about ~TiddlyWiki: requests for help, [[announcements|https://talk.tiddlywiki.org/c/announcements/20]] of new releases and plugins, debating new features, or just sharing experiences. You can participate via the associated website, or subscribe via email. +https://talk.tiddlywiki.org/ -''talk.tiddlywiki.org'' is a community run service that we host and maintain ourselves. The modest running costs are covered by community contributions. -<<< +Other Forums: !!! Google Groups @@ -27,9 +25,9 @@ For the convenience of existing users, we also continue to operate the original ! Other Forums * [[TiddlyWiki Subreddit|https://www.reddit.com/r/TiddlyWiki5/]] -* Chat with Gitter at https://gitter.im/TiddlyWiki/public ! * Chat on Discord at https://discord.gg/HFFZVQ8 +* [[TiddlyWiki Subreddit|https://www.reddit.com/r/TiddlyWiki5/]] -!! Documentation +!! Developers -There is also a discussion group specifically for discussing TiddlyWiki documentation improvement initiatives: https://groups.google.com/group/tiddlywikidocs +{{Developers}} \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/community/Improving TiddlyWiki Documentation.tid b/editions/tw5.com/tiddlers/community/Improving TiddlyWiki Documentation.tid index 363934f548..53b8d1186e 100644 --- a/editions/tw5.com/tiddlers/community/Improving TiddlyWiki Documentation.tid +++ b/editions/tw5.com/tiddlers/community/Improving TiddlyWiki Documentation.tid @@ -1,5 +1,5 @@ created: 20140820151051019 -modified: 20240313114828368 +modified: 20251023154718268 tags: Community title: Improving TiddlyWiki Documentation type: text/vnd.tiddlywiki @@ -20,7 +20,7 @@ You can choose to edit the documentation using the [[TiddlyWiki Docs PR Maker]] !! Using [[Docs PR Maker|TiddlyWiki Docs PR Maker]] edition -# Go to https://saqimtiaz.github.io/tw5-docs-pr-maker/ or click the link displayed in the ribbon underneath the title when editing a tiddler on tiddlywiki.com +# Go to https://edit.tiddlywiki.com or click the link displayed in the ribbon underneath the title when editing a tiddler on tiddlywiki.com # Go through the quick introduction where you will need to provide your ~GitHub username and a ~GitHub access token (you will be guided in creating one) # Edit or create tiddlers to update the documentation, the wiki will keep track of all changes # Click the "Submit updates" button and check if all the tiddlers that you edited are included in the submission; if not, drag them into the box diff --git a/editions/tw5.com/tiddlers/community/Latest.tid b/editions/tw5.com/tiddlers/community/Latest.tid index 3b754ab537..f7468e138b 100644 --- a/editions/tw5.com/tiddlers/community/Latest.tid +++ b/editions/tw5.com/tiddlers/community/Latest.tid @@ -1,6 +1,6 @@ created: 20140321090511826 modified: 20140919170549958 -tags: Community +tags: Resources title: Latest type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/community/Meetups.tid b/editions/tw5.com/tiddlers/community/Meetups.tid index 901881e901..d0c5e29728 100644 --- a/editions/tw5.com/tiddlers/community/Meetups.tid +++ b/editions/tw5.com/tiddlers/community/Meetups.tid @@ -1,6 +1,6 @@ created: 20140721121924384 modified: 20160712121508468 -tags: Community +tags: Resources title: Meetups type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/community/Other Resources.tid b/editions/tw5.com/tiddlers/community/Other Resources.tid index d924690e9c..3ba16e94cd 100644 --- a/editions/tw5.com/tiddlers/community/Other Resources.tid +++ b/editions/tw5.com/tiddlers/community/Other Resources.tid @@ -1,6 +1,6 @@ created: 20210101152520906 modified: 20210101152533358 -tags: Community +tags: Resources title: Other Resources This list contains any usefull resource that have been shared with the ~TiddlyWiki Community that doesn fit the previous categories. They may be, macros, widgets, code snippts, ideas or more. diff --git a/editions/tw5.com/tiddlers/community/Resources.tid b/editions/tw5.com/tiddlers/community/Resources.tid new file mode 100644 index 0000000000..913f65c550 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/Resources.tid @@ -0,0 +1,11 @@ +created: 20250909171928024 +modified: 20250909171928024 +tags: Community +title: Resources +type: text/vnd.tiddlywiki + +The [[Community Links Aggregator]] is the preferred way to share and discover community resources. + +These links were largely collected before the aggregator was created, and are retained for historical purposes. + +<> diff --git a/editions/tw5.com/tiddlers/community/Signing the Contributor License Agreement.tid b/editions/tw5.com/tiddlers/community/Signing the Contributor License Agreement.tid index e02a85066b..5752e00446 100644 --- a/editions/tw5.com/tiddlers/community/Signing the Contributor License Agreement.tid +++ b/editions/tw5.com/tiddlers/community/Signing the Contributor License Agreement.tid @@ -1,5 +1,5 @@ created: 20150630205653005 -modified: 20220226175503241 +modified: 20250818013754508 tags: title: Signing the Contributor License Agreement type: text/vnd.tiddlywiki @@ -11,7 +11,7 @@ Create a GitHub pull request to add your name to `cla-individual.md` or `cla-ent # Navigate to [[licenses/CLA-individual|https://github.com/TiddlyWiki/TiddlyWiki5/tree/tiddlywiki-com/licenses/cla-individual.md]] or [[licenses/CLA-entity|https://github.com/TiddlyWiki/TiddlyWiki5/tree/tiddlywiki-com/licenses/cla-entity.md]] according to whether you are signing as an individual or representative of an organisation # Ensure that the "branch" dropdown at the top left is set to `tiddlywiki-com` # Click the "edit" button at the top-right corner (clicking this button will fork the project so you can edit the file) -# Add your name at the bottom +# Add your name and GitHub handle at the bottom #* eg: `Jeremy Ruston, @Jermolene, 2011/11/22` # Below the edit box for the CLA text you should see a box labelled ''Propose file change'' # Enter a brief title to explain the change (eg, "Signing the CLA") diff --git a/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid b/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid index 36a5503c35..d451f20422 100644 --- a/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid +++ b/editions/tw5.com/tiddlers/community/TiddlyWiki on the Web.tid @@ -1,7 +1,7 @@ color: #808 created: 20241009150445080 icon: $:/core/images/link -list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Gitter]] [[TiddlyWiki on Open Collective]] +list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Open Collective]] modified: 20241115170824144 tags: Welcome title: TiddlyWiki on the Web diff --git a/editions/tw5.com/tiddlers/community/Tutorials.tid b/editions/tw5.com/tiddlers/community/Tutorials.tid index 3f006d8a98..0812fb6b31 100644 --- a/editions/tw5.com/tiddlers/community/Tutorials.tid +++ b/editions/tw5.com/tiddlers/community/Tutorials.tid @@ -1,6 +1,6 @@ created: 20140908125300000 modified: 20160602172722526 -tags: Community +tags: Resources title: Tutorials type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/community/articles/_A free, open source wiki revisited_ by Mark Gibbs, NetworkWorld.tid b/editions/tw5.com/tiddlers/community/articles/_A free, open source wiki revisited_ by Mark Gibbs, NetworkWorld.tid index dc402677a3..7af8c5394e 100644 --- a/editions/tw5.com/tiddlers/community/articles/_A free, open source wiki revisited_ by Mark Gibbs, NetworkWorld.tid +++ b/editions/tw5.com/tiddlers/community/articles/_A free, open source wiki revisited_ by Mark Gibbs, NetworkWorld.tid @@ -1,9 +1,10 @@ created: 20160204225047445 +lost-url: http://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html modified: 20160204225307847 tags: Articles title: "A free, open source wiki revisited" by Mark Gibbs, NetworkWorld type: text/vnd.tiddlywiki -url: http://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html +url: https://web.archive.org/web/20180911094717/https://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html Interesting article giving the perspective of someone who has been away from TiddlyWiki for a few years: diff --git a/editions/tw5.com/tiddlers/community/editions/_Cardo-A Task and Project Management Wiki_ by David_Szego.tid b/editions/tw5.com/tiddlers/community/editions/_Cardo-A Task and Project Management Wiki_ by David_Szego.tid index 3a869c0619..4c5803a022 100644 --- a/editions/tw5.com/tiddlers/community/editions/_Cardo-A Task and Project Management Wiki_ by David_Szego.tid +++ b/editions/tw5.com/tiddlers/community/editions/_Cardo-A Task and Project Management Wiki_ by David_Szego.tid @@ -1,9 +1,10 @@ created: 20141122093837330 +lost-url: http://cardo.wiki modified: 20210106151026996 tags: [[Community Editions]] title: "Cardo - Task and Project Management Wiki" by David Szego type: text/vnd.tiddlywiki -url: http://cardo.wiki +url: https://web.archive.org/web/20181114094516/http://cardo.wiki/#Joe%20Cardo:%5B%5BJoe%20Cardo%5D%5D Task & Delegation Tracking, Meetings & Agenda Items, Project Roles, Progress & Status Updates, Reference Items, Tickler Calendar, Conversation Logging, Book Notes & Library, and More! @@ -11,4 +12,10 @@ Task & Delegation Tracking, Meetings & Agenda Items, Project Roles, Progress & S <<< Cardo is a standalone, browser-based tool that can be used as a simple task manager, or as a complex Project Management system (and indeed, I do use it this way in my daily work) as well as a fully Wiki-ized personal knowledge store. It runs completely independently in the browser, even without an Internet connection, making it possible to carry around on a USB stick, or to use on the morning commute. -<<< \ No newline at end of file +<<< + + +* https://cardo-revisited.tiddlyhost.com (re-activated TW v5.3.8) +* https://cardo-dyumnin.tiddlyhost.com (TW v5.1.19) + + diff --git a/editions/tw5.com/tiddlers/community/examples/PETTIL.tid b/editions/tw5.com/tiddlers/community/examples/PETTIL.tid index c711eb6799..fc1926fa10 100644 --- a/editions/tw5.com/tiddlers/community/examples/PETTIL.tid +++ b/editions/tw5.com/tiddlers/community/examples/PETTIL.tid @@ -3,7 +3,7 @@ modified: 20140716084548184 tags: Examples title: "PETTIL - Forth for the Commodore PET" by Charlie Hitselberger type: text/vnd.tiddlywiki -url: http://pettilmobile.com/tw/ +url: http://pettilmobile.com A fast Forth interpreter for the [[Commodore PET|https://en.wikipedia.org/wiki/Commodore_PET]], written in 6502 assembly language. The TiddlyWiki containing program documentation is automatically generated from the source code: see https://github.com/chitselb/pettil. diff --git a/editions/tw5.com/tiddlers/community/examples/Reveal.js by Devin Weaver.tid b/editions/tw5.com/tiddlers/community/examples/Reveal.js by Devin Weaver.tid index 1737c52598..fd84c7a04f 100644 --- a/editions/tw5.com/tiddlers/community/examples/Reveal.js by Devin Weaver.tid +++ b/editions/tw5.com/tiddlers/community/examples/Reveal.js by Devin Weaver.tid @@ -1,6 +1,6 @@ created: 20200907161522189 modified: 20211113230558637 -tags: Resources [[Other Resources]] +tags: [[Other Resources]] title: "Reveal.js" by Devin Weaver type: text/vnd.tiddlywiki url: https://sukima.github.io/tiddlywiki-reveal-js/ diff --git a/editions/tw5.com/tiddlers/community/examples/_Lucky Sushi_ online shop by sini-Kit.tid b/editions/tw5.com/tiddlers/community/examples/_Lucky Sushi_ online shop by sini-Kit.tid index aa06aec5a3..d9121f634c 100644 --- a/editions/tw5.com/tiddlers/community/examples/_Lucky Sushi_ online shop by sini-Kit.tid +++ b/editions/tw5.com/tiddlers/community/examples/_Lucky Sushi_ online shop by sini-Kit.tid @@ -1,9 +1,10 @@ created: 20141122093837330 +lost-url: http://luckysushi.ru/habarovsk/heeg.html modified: 20210106151027143 tags: Examples title: "Lucky Sushi" online shop by sini-Kit type: text/vnd.tiddlywiki -url: http://luckysushi.ru/habarovsk/heeg.html#index +url: https://web.archive.org/web/20241127033249/http://luckysushi.ru/habarovsk/heeg.html#index A complete online shop made in ~TiddlyWiki! diff --git a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Gitter.tid b/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Gitter.tid deleted file mode 100644 index 07474b4e3c..0000000000 --- a/editions/tw5.com/tiddlers/community/links/TiddlyWiki on Gitter.tid +++ /dev/null @@ -1,7 +0,0 @@ -title: TiddlyWiki on Gitter -caption: Gitter -tags: [[TiddlyWiki on the Web]] -url: https://gitter.im/TiddlyWiki/public -icon: $:/core/images/gitter -background-color: #753a88 -text-color: #fff diff --git a/editions/tw5.com/tiddlers/community/plugins/IndexedDB Plugin by Andreas Abeck.tid b/editions/tw5.com/tiddlers/community/plugins/IndexedDB Plugin by Andreas Abeck.tid index 1eff4eb76a..8419355155 100644 --- a/editions/tw5.com/tiddlers/community/plugins/IndexedDB Plugin by Andreas Abeck.tid +++ b/editions/tw5.com/tiddlers/community/plugins/IndexedDB Plugin by Andreas Abeck.tid @@ -1,9 +1,10 @@ created: 20150403110356105 +lost-url: http://tw5-dev.cibm.de modified: 20210106151027470 tags: [[Community Plugins]] title: IndexedDB Plugin by Andreas Abeck type: text/vnd.tiddlywiki -url: http://tw5-dev.cibm.de +url: https://web.archive.org/web/20180118083556/http://tw5-dev.cibm.de/ A plugin that allows changes to be synchronised with the IndexedDB database that is built-in to most browsers. diff --git a/editions/tw5.com/tiddlers/community/plugins/Slider by Mohammad.tid b/editions/tw5.com/tiddlers/community/plugins/Slider by Mohammad.tid index 842bc3e97c..d5dfb43501 100644 --- a/editions/tw5.com/tiddlers/community/plugins/Slider by Mohammad.tid +++ b/editions/tw5.com/tiddlers/community/plugins/Slider by Mohammad.tid @@ -1,9 +1,9 @@ created: 20201117162655614 -modified: 20201117162926714 +modified: 20251020041616967 tags: [[Community Plugins]] title: Slider by Mohammad type: text/vnd.tiddlywiki -url: https://kookma.github.io/slider/ +url: https://kookma.github.io/TW-Slider/ Slider is a plugin to create an ordered set of tiddlers also called Trail. diff --git a/editions/tw5.com/tiddlers/community/plugins/TW5-Graph by Flibbles.tid b/editions/tw5.com/tiddlers/community/plugins/TW5-Graph by Flibbles.tid new file mode 100644 index 0000000000..c6f8bd5468 --- /dev/null +++ b/editions/tw5.com/tiddlers/community/plugins/TW5-Graph by Flibbles.tid @@ -0,0 +1,20 @@ +created: 20251009192405351 +modified: 20251009192405351 +tags: [[Community Plugins]] Resources +title: TW5-Graph by Flibbles +type: text/vnd.tiddlywiki +url: https://flibbles.github.io/tw5-graph/ + +TW5-Graph is a framework to integrate TiddlyWiki with existing graphing and visualization engines (such as [[Vis-Network|https://visjs.github.io/vis-network/docs/network/]]). The plugin allows for easy and sophisticated graphs to represent your tiddlers, or whatever else you want. + +It is the spiritual successor to [[TiddlyMap|TiddlyMap Plugin by Felix Küppers]]. + +With TW5-Graph you can: + +* Quickly create and edit graphs through a simple point-and-click GUI +* Use wikitext widgets to create customized graphs and template to exactly match your needs +* Easily create dynamic graphs to represent changing state or individual tiddlers + +There's loads TW5-Graph can do for you. [[Check out its demo website here.|https://flibbles.github.io/tw5-graph/]] + +Or visit its source code [[here|https://github.com/flibbles/tw5-graph]]. diff --git a/editions/tw5.com/tiddlers/community/resources/_TWeb.at_ by Mario Pietsch.tid b/editions/tw5.com/tiddlers/community/resources/_TWeb.at_ by Mario Pietsch.tid deleted file mode 100644 index 733b1cd883..0000000000 --- a/editions/tw5.com/tiddlers/community/resources/_TWeb.at_ by Mario Pietsch.tid +++ /dev/null @@ -1,16 +0,0 @@ -created: 20140410103123179 -modified: 20210106151027370 -tags: [[Other Resources]] -title: "TWeb.at" by Mario Pietsch -type: text/vnd.tiddlywiki -url: https://tweb.at - -A collection of TiddlyWiki resources from Mario Pietsch, with a focus on cloud deployments. Mario also maintains the German translation of TiddlyWiki. - -{{!!url}} - -<<< -My name is Mario Pietsch from Austria. I'm living near Salzburg. - -This page, will be the portal to my TiddlyWiki, TiddlyWeb related content. -<<< diff --git a/editions/tw5.com/tiddlers/community/tutorials/Un wiki sur votre BiblioBox avec TiddlyWiki.tid b/editions/tw5.com/tiddlers/community/tutorials/Un wiki sur votre BiblioBox avec TiddlyWiki.tid index 22df09a3e0..a3b22ad924 100644 --- a/editions/tw5.com/tiddlers/community/tutorials/Un wiki sur votre BiblioBox avec TiddlyWiki.tid +++ b/editions/tw5.com/tiddlers/community/tutorials/Un wiki sur votre BiblioBox avec TiddlyWiki.tid @@ -1,9 +1,10 @@ created: 20140716085406905 +lost-url: http://bibliobox.net/blog/post/2014/07/16/un-wiki-sur-votre-bibliobox-avec-tiddlywiki modified: 20140716084548184 tags: Tutorials title: "Un wiki sur votre BiblioBox avec TiddlyWiki" from A Penguin in Redmond type: text/vnd.tiddlywiki -url: http://bibliobox.net/blog/post/2014/07/16/un-wiki-sur-votre-bibliobox-avec-tiddlywiki +url: https://web.archive.org/web/20210305133610/http://bibliobox.net/blog/post/2014/07/16/un-wiki-sur-votre-bibliobox-avec-tiddlywiki A guide (in French) to using TiddlyWiki on the [[BiblioBox|http://bibliobox.net/]], a variation of the [[PirateBox|http://daviddarts.com/piratebox/]] mobile communication and file sharing system. diff --git a/editions/tw5.com/tiddlers/communitycards/tiddlywiki.files b/editions/tw5.com/tiddlers/communitycards/tiddlywiki.files new file mode 100644 index 0000000000..68c680e568 --- /dev/null +++ b/editions/tw5.com/tiddlers/communitycards/tiddlywiki.files @@ -0,0 +1,11 @@ +{ + "directories": [ + { + "path": "../../../../community", + "isTiddlerFile": true, + "isEditableFile": true, + "filesRegExp": "^(?!readme\\.md$)(?!\\.DS_Store$).+", + "searchSubdirectories": true + } + ] +} \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/concepts/CompoundTiddlers.tid b/editions/tw5.com/tiddlers/concepts/CompoundTiddlers.tid index b6817b3f78..c0a49985d7 100644 --- a/editions/tw5.com/tiddlers/concepts/CompoundTiddlers.tid +++ b/editions/tw5.com/tiddlers/concepts/CompoundTiddlers.tid @@ -1,5 +1,5 @@ created: 20240507221902644 -modified: 20240729082610287 +modified: 20250814073256942 tags: Concepts title: CompoundTiddlers type: text/vnd.tiddlywiki @@ -8,7 +8,7 @@ Compound tiddlers are a special type of tiddler that can store one or more paylo The compound tiddler format is extremely simple, and includes the notable flaw that it does not permit tiddlers that contain a plus sign (`+`) on a line by itself. It is not intended as a general purpose way of storing tiddler data. -Compound tiddlers are identified by having their type field set to `text/vnd.tiddlywiki-multiple`. +Compound tiddlers are identified by having their [[type field|ContentType]] set to `text/vnd.tiddlywiki-multiple`. The content of a compound tiddler consists of a sequence of tiddlers separated by a plus sign (`+`) on a line by itself. Each tiddler uses the same format as [[.tid files|TiddlerFiles]]. diff --git a/editions/tw5.com/tiddlers/concepts/DefaultTiddlers.tid b/editions/tw5.com/tiddlers/concepts/DefaultTiddlers.tid index 79e24fd69c..dbe254992e 100644 --- a/editions/tw5.com/tiddlers/concepts/DefaultTiddlers.tid +++ b/editions/tw5.com/tiddlers/concepts/DefaultTiddlers.tid @@ -9,7 +9,7 @@ type: text/vnd.tiddlywiki There are two ways default tiddlers can be defined: * A [[title-list|Title List]] eg: `TiddlerTitle` and `[[Title with spaces]]` -* [[Filter expressions|Filter Expression], using filter operators eg: `[tag[HelloThere]]` +* [[Filter expressions|Filter Expression]], using filter operators eg: `[tag[HelloThere]]` The resulting list of titles is then inserted into the [[story river|Story River]]. diff --git a/editions/tw5.com/tiddlers/concepts/Filters.tid b/editions/tw5.com/tiddlers/concepts/Filters.tid index 3e7c0bd6a4..fcbe601cc0 100644 --- a/editions/tw5.com/tiddlers/concepts/Filters.tid +++ b/editions/tw5.com/tiddlers/concepts/Filters.tid @@ -24,5 +24,5 @@ A filter output can change as tiddlers are added and deleted in the wiki. ~Tiddl ''Find out more:'' * <$linkcatcher message="tm-navigate" actions=<> >[[Advanced Search|$:/AdvancedSearch]] -- has a <<.advancedsearch-tab Filter>> tab that makes it easy to experiment with filters. - -* [[Filtered Transclusions|Transclusion in WikiText]] -- If you want to use filter results in your text +* [[Filtered Transclusions|Transclusion in WikiText]] -- if you want to use filter results in your text +* [[TiddlyWiki Syntax History]] -- if you are curious why the filter syntax is the way it is diff --git a/editions/tw5.com/tiddlers/concepts/TiddlyWiki.tid b/editions/tw5.com/tiddlers/concepts/TiddlyWiki.tid index 8e922fdd07..aea39dda1a 100644 --- a/editions/tw5.com/tiddlers/concepts/TiddlyWiki.tid +++ b/editions/tw5.com/tiddlers/concepts/TiddlyWiki.tid @@ -10,4 +10,4 @@ type: text/vnd.tiddlywiki People love using ~TiddlyWiki. Because it can be used without any complicated server infrastructure, and because it is [[open source|OpenSource]], it has brought unprecedented freedom to everyone to keep their precious information under their own control. -~TiddlyWiki was originally created by JeremyRuston and is now a thriving [[open source|License]] project with a busy [[Community]] of independent developers. +~TiddlyWiki was originally created by [[@Jermolene]] and is now a thriving [[open source|License]] project with a busy [[Community]] of independent developers. diff --git a/editions/tw5.com/tiddlers/definitions/BT.tid b/editions/tw5.com/tiddlers/definitions/BT.tid index c268e2e93a..0c7d7eccb9 100644 --- a/editions/tw5.com/tiddlers/definitions/BT.tid +++ b/editions/tw5.com/tiddlers/definitions/BT.tid @@ -3,4 +3,4 @@ modified: 20211117195517318 tags: Definitions title: BT -BT (née British Telecom) is the UK's largest telecommunications company. In 2007, [[Osmosoft]] was acquired by BT. JeremyRuston subsequently left BT in 2011. +BT (née British Telecom) is the UK's largest telecommunications company. In 2007, [[Osmosoft]] was acquired by BT. [[@Jermolene]] subsequently left BT in 2011. diff --git a/editions/tw5.com/tiddlers/definitions/ContentType.tid b/editions/tw5.com/tiddlers/definitions/ContentType.tid index 30d0a135b7..bbe801dd8d 100644 --- a/editions/tw5.com/tiddlers/definitions/ContentType.tid +++ b/editions/tw5.com/tiddlers/definitions/ContentType.tid @@ -1,5 +1,5 @@ created: 20130828185900000 -modified: 20150221120839000 +modified: 20250814073940003 tags: Definitions title: ContentType type: text/vnd.tiddlywiki @@ -11,19 +11,20 @@ In TiddlyWiki, the `type` field gives the content type to apply to the main `tex !! List of Common Content Types |!Group |!Type |!Content of `type` field | -|^''Developer'' |Data dictionary |application/x-tiddler-dictionary| -|~|~JavaScript code |application/javascript| -|~|JSON data |application/json| -|~|Static stylesheet |text/css| +|^''Developer'' |[[Data dictionary|DictionaryTiddlers]] |application/x-tiddler-dictionary| +|~|[[Compound Tiddler|CompoundTiddlers]] |text/vnd.tiddlywiki-multiple| +|~|JavaScript code |application/javascript| +|~|[[JSON data|JSONTiddlers]] |application/json| +|~|[[Static stylesheet|Using Stylesheets]] |text/css| |^''Image''|GIF image |image/gif| |~|ICO format icon file |image/x-icon| |~|JPEG image |image/jpeg| |~|PDF image |application/pdf| |~|PNG image |image/png| |~|Structured Vector Graphics image |image/svg+xml| -|^''Text''|HTML markup |text/html| +|^''Text''|[[HTML markup|HyperText Markup Language]] |text/html| |~|[[CSS|Cascading Style Sheets]] stylesheet |text/css| |~|[[Comma-separated values|Comma-Separated Values]] |text/csv| |~|Plain text |text/plain| -|~|~TiddlyWiki 5 |text/vnd.tiddlywiki| -|~|~TiddlyWiki Classic |text/x-tiddlywiki| +|~|[[TiddlyWiki 5|WikiText]] |text/vnd.tiddlywiki| +|~|[[TiddlyWiki Classic|TiddlyWikiClassic]] |text/x-tiddlywiki| diff --git a/editions/tw5.com/tiddlers/definitions/Intertwingled Innovations.tid b/editions/tw5.com/tiddlers/definitions/Intertwingled Innovations.tid index 07576617b1..5152b0a437 100644 --- a/editions/tw5.com/tiddlers/definitions/Intertwingled Innovations.tid +++ b/editions/tw5.com/tiddlers/definitions/Intertwingled Innovations.tid @@ -4,6 +4,6 @@ tags: Definitions title: Intertwingled Innovations type: text/vnd.tiddlywiki -Intertwingled Innovations Limited is the company through which [[JeremyRuston]] performs commercial consultancy work helping companies and individuals release the business value of TiddlyWiki. +Intertwingled Innovations Limited is [[JeremyRuston]]'s company through which he offers services helping organisations release the business value of TiddlyWiki. See https://intertwingledinnovations.com/ for more information. diff --git a/editions/tw5.com/tiddlers/definitions/JeremyRuston.tid b/editions/tw5.com/tiddlers/definitions/JeremyRuston.tid index 1e72c7dc22..0a96935b01 100644 --- a/editions/tw5.com/tiddlers/definitions/JeremyRuston.tid +++ b/editions/tw5.com/tiddlers/definitions/JeremyRuston.tid @@ -4,16 +4,4 @@ tags: Definitions title: JeremyRuston type: text/vnd.tiddlywiki -I'm the original inventor of TiddlyWiki. You can hire me through [[Intertwingled Innovations]], and find me on these services: - -* jeremy (at) jermolene (dot) com -* [[Jermolene on GitHub|https://github.com/Jermolene]] -* [[Jermy on LinkedIn|http://www.linkedin.com/in/jermy]] -* [[Jermy on Flickr|http://www.flickr.com/photos/jermy/]] - -Further information: - -* A recording of the [[keynote I gave at QCon London in April 2024|https://www.infoq.com/presentations/bbc-micro/]], and the [[discussion on talk.tiddlywiki.org|https://talk.tiddlywiki.org/t/recording-of-jeremys-keynote-at-qcon-london-april-2024/10505]]. The talk mixes some nostalgia about my teenage activities with the BBC Micro with thoughts on the development of the software industry and insights gained from working with TiddlyWiki -* An [[interview with me in The Inquirer|http://www.theinquirer.net/inquirer/feature/2105529/bt-software-engineer-tells-telco-source]] by Wendy Grossman -* A [[hilarious interview with me|https://www.youtube.com/watch?v=auyIhw8MTmQ]] from British television in 1983 -* Here's a video of a presentation I did in 2007 called [["How to Start an Open Source Project"|http://vimeo.com/856110]]. +See [[@Jermolene]]. \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/definitions/Jermolene.tid b/editions/tw5.com/tiddlers/definitions/Jermolene.tid index 1a00965cf4..1e32cce921 100644 --- a/editions/tw5.com/tiddlers/definitions/Jermolene.tid +++ b/editions/tw5.com/tiddlers/definitions/Jermolene.tid @@ -3,4 +3,4 @@ modified: 201308281902 tags: Definitions title: Jermolene -Alias for JeremyRuston. \ No newline at end of file +See [[@Jermolene]]. \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/definitions/Osmosoft.tid b/editions/tw5.com/tiddlers/definitions/Osmosoft.tid index 78d43313c9..16574ce53a 100644 --- a/editions/tw5.com/tiddlers/definitions/Osmosoft.tid +++ b/editions/tw5.com/tiddlers/definitions/Osmosoft.tid @@ -3,7 +3,7 @@ modified: 20211119004632506 tags: Definitions title: Osmosoft -Founded in 2004 by JeremyRuston, Osmosoft was originally a consultancy for software services around TiddlyWiki. Notable engagements included working with Socialtext on [[Socialtext Unplugged|https://www.socialtext.net/open/socialtext_unplugged]]. +Founded in 2004 by [[@Jermolene]], Osmosoft was originally a consultancy for software services around TiddlyWiki. Notable engagements included working with Socialtext on [[Socialtext Unplugged|https://www.socialtext.net/open/socialtext_unplugged]]. In 2007, Osmosoft was acquired by [[BT]] and became the champions for open source within the enterprise. As part of BT, Osmosoft has worked on a diverse range of projects within BT and for BT's customers. diff --git a/editions/tw5.com/tiddlers/filters/range.tid b/editions/tw5.com/tiddlers/filters/range.tid index 48dfa2366d..6f2e9b0760 100644 --- a/editions/tw5.com/tiddlers/filters/range.tid +++ b/editions/tw5.com/tiddlers/filters/range.tid @@ -1,9 +1,9 @@ caption: range created: 20171221184734665 -modified: 20230321133838310 +modified: 20251008154315078 op-input: ignored -op-neg-output: a series of evenly spaced numbers ranging from `` to `` in reverse order -op-output: a series of evenly spaced numbers ranging from `` to `` +op-neg-output: a series of evenly spaced numbers ranging from `[BEGIN]` to `[END]` in reverse order +op-output: a series of evenly spaced numbers ranging from `[BEGIN]` to `[END]` op-parameter: a range specification, like `[1],[5]` op-parameter-name: N op-purpose: generate a range of numbers @@ -23,42 +23,56 @@ The `range` operator produces a list of numbers counting up or down. It is usef <<.from-version "5.2.0">> The range operator has been updated to use multiple parameters. Prior to this version, the range operator only had one parameter, with the three parts delimited by `,`, `;` or `:`. +In the descriptions below the words `BEGIN`, `END` and `STEP` are placeholders. + ``` -[range[]] -[range[],[]] -[range[],[],[]] +[range[END]] +[range[BEGIN],[END]] +[range[BEGIN],[END],[STEP]] ``` The behaviour depends on the number of parameters: -|Parameter |Output |h -|`` |Whole numbers up to `` | -|`,` |Numbers from `` to ``, spaced by whole numbers | -|`,,` |Numbers from `` to `` spaced out by `` | +|Parameter(s) Literal |Output |h +|`[END]` |Whole numbers up to `[END]` eg: `[range[7]]`| +|`[BEGIN],[END]` |Numbers from `[BEGIN]` to `[END]`, spaced by whole numbers eg: `[range[1],[10]]` | +|`[BEGIN],[END],[STEP]` |Numbers from `[BEGIN]` to `[END]` spaced out by `[STEP]` eg: `[range[1],[7],[2]]` | -Each part must be a number, and works as follows: +|Parameter(s) Dynamic |Output |h +|`` |Whole numbers up to `` eg: `[range]`.
The <<.var myRangeEnd>> variable has to be defined somewhere else with eg: <<.wid let>> widget | +|`{BEGIN},` |Numbers from `{BEGIN}` to `` eg: `[range{myRangeStart},]`.
The <<.param myRangeStart>> will be transcluded from a tiddler "myRanageStart" and <<.var myRangeEnd>> comes from a variable | -* ``: start counting at this number. -** Defaults to 1 if `` is at least 1 (or -1 if `` is at most -1). -* ``: stop counting at this number. +Each parameter must be a number, and works as follows: + +* `[BEGIN]`: start counting at this number. +** Defaults to 1 if `[END]` is at least 1 (or -1 if `[END]` is at most -1). + +* `[END]`: stop counting at this number. ** This number will appear in the list unless it falls between two steps. -* ``: count up (or down) by this amount. + +* `[STEP]`: count up (or down) by this amount. ** Defaults to 1. ** Cannot be zero. -** We always count from `` toward ``, whether `` is positive or negative. +** We always count from `[BEGIN]` toward `[END]`, whether `[STEP]` is positive or negative. The number of decimal points in the output is fixed, and based on the parameter with the //most// decimal points. To prevent the browser from freezing, `range` is currently limited to 10,000 values. -!!Examples +!! Examples -<> +<<>""">> -<> +<<>""">> -<> +<<>""">> -<> +<<>""">> + +<<>""">> -<> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/filters/syntax/Filter Step.tid b/editions/tw5.com/tiddlers/filters/syntax/Filter Step.tid index 73b58524ad..12a4f44152 100644 --- a/editions/tw5.com/tiddlers/filters/syntax/Filter Step.tid +++ b/editions/tw5.com/tiddlers/filters/syntax/Filter Step.tid @@ -1,5 +1,5 @@ created: 20150124182127000 -modified: 20230710074414361 +modified: 20250731101041336 tags: [[Filter Run]] title: Filter Step type: text/vnd.tiddlywiki @@ -11,10 +11,10 @@ In programming terms, it is akin to a function call to which the step's input is <$railroad text=""" \start none \end none -[:"!"] +["!"] ( / "if omitted, defaults to: title" /|: -( - | :[[operator|"Filter Operators"]] ) -{ [:":" [[suffix|"Filter Operators"]] ] } ) +( :[[operator|"Filter Operators"]] ) +[ {":" [: [[suffix|"Filter Operators"]] ] }] ) { [[parameter|"Filter Parameter"]] + "," } """/> diff --git a/editions/tw5.com/tiddlers/filters/syntax/Filter Syntax.tid b/editions/tw5.com/tiddlers/filters/syntax/Filter Syntax.tid index 58a03aa208..80a05f4327 100644 --- a/editions/tw5.com/tiddlers/filters/syntax/Filter Syntax.tid +++ b/editions/tw5.com/tiddlers/filters/syntax/Filter Syntax.tid @@ -9,7 +9,7 @@ type: text/vnd.tiddlywiki A <<.def filter>> is a pipeline for transforming an <<.def input>> into an <<.def output>>. Both the input and the output are [[ordered sets of titles|Title Selection]] of tiddlers and fields. -Filters are ''expressions'' constructed from smaller building blocks, called ''runs'', which are built using ''steps''. Eeach of which also transforms an input to an output. +Filters are ''expressions'' constructed from smaller building blocks, called ''runs'', which are built using ''steps''. Each of which also transforms an input to an output. A filter starts with an empty output. Its runs are processed from left to right, progressively modifying the output. diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid index bbbec39f0d..0405cf57e1 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid @@ -1,12 +1,32 @@ created: 20130822170200000 icon: $:/core/icon list: [[A Gentle Guide to TiddlyWiki]] [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[What happened to the original TiddlyWiki?]] -modified: 20241115170824144 +modified: 20250807084952911 tags: Welcome title: HelloThere type: text/vnd.tiddlywiki -!!.tc-hero-heading ''Welcome to TiddlyWiki, a unique [[non-linear|Philosophy of Tiddlers]] notebook for [[capturing|Creating and editing tiddlers]], [[organising|Structuring TiddlyWiki]] and [[sharing|Sharing your tiddlers with others]] complex information'' +

+Make Something of Your Notes +

+ +

+Welcome to TiddlyWiki, a unique [[non-linear|Philosophy of Tiddlers]] notebook for [[capturing|Creating and editing tiddlers]], [[organising|Structuring TiddlyWiki]] and [[sharing|Sharing your tiddlers with others]] complex information +

Use it to keep your [[to-do list|TaskManagementExample]], to plan an [[essay or novel|"TiddlyWiki for Scholars" by Alberto Molina]], or to organise your wedding. Record every thought that crosses your brain, or build a flexible and responsive website. diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThumbnail.tid b/editions/tw5.com/tiddlers/hellothere/HelloThumbnail.tid index b72d039aaa..75bcb2bb01 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThumbnail.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThumbnail.tid @@ -1,5 +1,5 @@ created: 20150414070451144 -list: [[HelloThumbnail - Twenty Years of TiddlyWiki]] [[HelloThumbnail - Introduction Video]] [[HelloThumbnail - TiddlyWiki Privacy]] [[HelloThumbnail - Latest Version]] [[HelloThumbnail - Newsletter]] [[HelloThumbnail - Grok TiddlyWiki]] [[HelloThumbnail - TiddlyWikiLinks]] [[HelloThumbnail - MultiWikiServer]] [[HelloThumbnail - Funding]] [[HelloThumbnail - Marketplace]] [[HelloThumbnail - Intertwingled Innovations]] +list: [[HelloThumbnail - Community Survey 2025]] [[HelloThumbnail - Twenty Years of TiddlyWiki]] [[HelloThumbnail - Introduction Video]] [[HelloThumbnail - TiddlyWiki Privacy]] [[HelloThumbnail - Latest Version]] [[HelloThumbnail - Newsletter]] [[HelloThumbnail - Grok TiddlyWiki]] [[HelloThumbnail - TiddlyWikiLinks]] [[HelloThumbnail - MultiWikiServer]] [[HelloThumbnail - Funding]] [[HelloThumbnail - Marketplace]] [[HelloThumbnail - Intertwingled Innovations]] modified: 20150414070948246 title: HelloThumbnail type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/hellothere/Welcome.tid b/editions/tw5.com/tiddlers/hellothere/Welcome.tid deleted file mode 100644 index c23d1edcba..0000000000 --- a/editions/tw5.com/tiddlers/hellothere/Welcome.tid +++ /dev/null @@ -1,7 +0,0 @@ -list: HelloThere [[Quick Start]] [[Find Out More]] [[TiddlyWiki on the Web]] [[Testimonials and Reviews]] GettingStarted Community -tags: TableOfContents -list-before: -title: Welcome -type: text/vnd.tiddlywiki - -<]" >> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Community Survey.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Community Survey.tid new file mode 100644 index 0000000000..b540348c93 --- /dev/null +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Community Survey.tid @@ -0,0 +1,9 @@ +title: HelloThumbnail - Community Survey 2025 +tags: HelloThumbnail +color: rgb(234, 205, 183) +image: Community Survey 2025 +caption: Community Survey +link: Community Survey 2025 +ribbon-text: NEW + +Explore the responses to the 2025 community survey \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid index 1c9b2fffc0..eeeaec6e98 100644 --- a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Funding.tid @@ -1,7 +1,7 @@ background-color: #EDB431 caption: How is ~TiddlyWiki Funded? color: #ff0 -image: Funding.png +image: Funding link: Funding TiddlyWiki tags: HelloThumbnail title: HelloThumbnail - Funding diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Grok TiddlyWiki.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Grok TiddlyWiki.tid index ead8e21245..e4fff224de 100644 --- a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Grok TiddlyWiki.tid +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Grok TiddlyWiki.tid @@ -4,6 +4,5 @@ color: #D5B7EA image: Grok TiddlyWiki Banner caption: Grok ~TiddlyWiki 2.0 link: "Grok TiddlyWiki" by Soren Bjornstad -ribbon-text: NEW 2.0 A comprehensive interactive guide to ~TiddlyWiki, from the very basics to the advanced concepts, featuring exercises and takeaways to aid learning \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Intertwingled Innovations.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Intertwingled Innovations.tid index aa8e266892..91678367b8 100644 --- a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Intertwingled Innovations.tid +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Intertwingled Innovations.tid @@ -1,7 +1,7 @@ background-color: #EDB431 caption: Intertwingled Innovations color: #ff0 -image: Intertwingled Innovations.png +image: Intertwingled Innovations link: Intertwingled Innovations tags: HelloThumbnail title: HelloThumbnail - Intertwingled Innovations diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - MultiWikiServer.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - MultiWikiServer.tid index c81b90e20f..3cbc7e1f8e 100644 --- a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - MultiWikiServer.tid +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - MultiWikiServer.tid @@ -4,7 +4,7 @@ color: purple background-color: #fff caption: ~MultiWikiServer link: MultiWikiServer -image: MWS Banner.png -ribbon-text: SOON +image: MWS Banner +type: text/vnd.tiddlywiki Find out more about the new ~MultiWikiServer plugin that turns ~TiddlyWiki into a full-fledged server system supporting multiple user accounts and tiddler sharing \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Newsletter.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Newsletter.tid index 24f4e9c286..13dedd0c16 100644 --- a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Newsletter.tid +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Newsletter.tid @@ -2,7 +2,8 @@ title: HelloThumbnail - Newsletter tags: HelloThumbnail caption: ~TiddlyWiki Newsletter link: TiddlyWiki Newsletter -image: TiddlyWiki Newsletter Badge.png +image: TiddlyWiki Newsletter Badge color: #fff +type: text/vnd.tiddlywiki Subscribe to the ~TiddlyWiki Newsletter, a fortnightly summary of the most interesting and relevant news from the ~TiddlyWiki community diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TW5-Graph.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TW5-Graph.tid new file mode 100644 index 0000000000..25407f994d --- /dev/null +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TW5-Graph.tid @@ -0,0 +1,11 @@ +caption: Graphs and Visualizations +color: #5778d8 +image: TW5-Graph.png +link: TW5-Graph by Flibbles +tags: HelloThumbnail +title: HelloThumbnail - TW5-Graph +ribbon-text: NEW + +\rules except wikilink + +Use TiddlyWiki plugins to easily create visualizations of your tiddlers. diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TiddlyWiki Privacy.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TiddlyWiki Privacy.tid index e0f3e3c6de..ee129d5b81 100644 --- a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TiddlyWiki Privacy.tid +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - TiddlyWiki Privacy.tid @@ -1,9 +1,9 @@ title: HelloThumbnail - TiddlyWiki Privacy tags: HelloThumbnail color: #D5B7EA -image: TiddlyWiki Privacy Badge.png +image: TiddlyWiki Privacy Badge caption: Your Privacy and Security link: TiddlyWiki Privacy and Security -ribbon-text: NEW +type: text/vnd.tiddlywiki With care, ~TiddlyWiki can be used totally privately, without needing to trust anything or anyone but your own device \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Twenty Years of TiddlyWiki.tid b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Twenty Years of TiddlyWiki.tid index 237cc373bd..ae9bbd5583 100644 --- a/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Twenty Years of TiddlyWiki.tid +++ b/editions/tw5.com/tiddlers/hellothere/thumbnails/HelloThumbnail - Twenty Years of TiddlyWiki.tid @@ -4,6 +4,5 @@ color: #D5B7EA image: Twenty Years of TiddlyWiki caption: Twenty Years of ~TiddlyWiki link: History of TiddlyWiki -ribbon-text: NEW Celebrating 20 years since the launch of ~TiddlyWiki \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/hire-jeremy/Hire Jeremy Sidebar Segment.tid b/editions/tw5.com/tiddlers/hire-jeremy/Hire Jeremy Sidebar Segment.tid new file mode 100644 index 0000000000..acbe6dbaae --- /dev/null +++ b/editions/tw5.com/tiddlers/hire-jeremy/Hire Jeremy Sidebar Segment.tid @@ -0,0 +1,15 @@ +title: Hire Jeremy Sidebar Segment +created: 20250708130030654 +modified: 20250708130030654 +tags: $:/tags/SideBarSegment +list-after: $:/core/ui/SideBarSegments/site-subtitle + +
+
+ <$link to="Hire the founder of TiddlyWiki"> +
+ Hire the founder of ~TiddlyWiki +
+ +
+
diff --git a/editions/tw5.com/tiddlers/hire-jeremy/HireJeremy.tid b/editions/tw5.com/tiddlers/hire-jeremy/HireJeremy.tid new file mode 100644 index 0000000000..cf627efc4f --- /dev/null +++ b/editions/tw5.com/tiddlers/hire-jeremy/HireJeremy.tid @@ -0,0 +1,56 @@ +title: Hire the founder of TiddlyWiki +modified: 20250901094938063 +created: 20250901094938063 + +//A note from [[JeremyRuston]]// + +I am currently taking on new commercial clients through my company [[Intertwingled Innovations]]. + +<$expand.able heading="Why choose me?"> + +Some of the ways I can help your organisation get the best from ~TiddlyWiki: + +* ''Custom applications'' -- Bespoke ~TiddlyWiki solutions to speed up your workflows +* ''Core sponsorship'' -- Fund new features or official plugins for your organisation while strengthening the wider ~TiddlyWiki ecosystem +* ''Seamless integration'' -- Connect ~TiddlyWiki with your existing tools and infrastructure so everything works smoothly together +* ''Sustaining ~TiddlyWiki'' -- Commercial projects are what enable me to keep maintaining and innovating ~TiddlyWiki. By working with me, you directly support its future + + + +<$expand.able heading="Ways to collaborate"> + +Projects begin as a conversation to understand your vision, goals and operating context. One or more proof-of-concept prototypes are followed by iterative, timeboxed development cycles with regular meetings to review progress and agree on the next steps. + +Most of my projects have grown into long-term collaborations, but I also take on smaller, focused engagements. I work across several projects at once, identifying common needs and building components that benefit multiple clients, and often become enhancements for the whole ~TiddlyWiki community. + + + +<$expand.able heading="Client success stories"> + +I've been lucky enough to work on some meaningful and interesting projects with a wide range of organisations from across the globe. Notably: + +* For a charity -- [[Xememex]], a multi-user ~TiddlyWiki server with thousands of users +* For a philanthropic investment firm -- an extranet to share their pipeline with external partners +* For a law firm -- a hypertext knowledge system with hundreds of thousands of densely linked tiddlers +* For a publisher -- an experimental hypertext book publishing platform +* For a real estate firm -- a new geospatial plugin + + + +<$expand.able heading="Impact on TiddlyWiki"> + +Many core features and official plugins originated in client projects: + +* Testcase Widget +* Consent Banner Plugin +* Dynannotate and Dynaview Plugins +* Excel Importer Plugin +* Geospatial Plugin +* ~InnerWiki Plugin +* Text Slicer Plugin +* Tour and Confetti Plugins +* XLSX Importer Plugin + + + +If you'd like to explore how ~TiddlyWiki could help your organisation, please contact me at jeremy@jermolene.com. diff --git a/editions/tw5.com/tiddlers/hire-jeremy/HireJeremyDefinitions.tid b/editions/tw5.com/tiddlers/hire-jeremy/HireJeremyDefinitions.tid new file mode 100644 index 0000000000..d7bb9d59cf --- /dev/null +++ b/editions/tw5.com/tiddlers/hire-jeremy/HireJeremyDefinitions.tid @@ -0,0 +1,24 @@ +title: $:/HireJeremy/definitions +tags: $:/tags/Global + +\widget $expand.able(heading:'Click me',colour) +<$let + stateBase=<> + state={{{ [addsuffix] }}} +> + <$button class="tc-btn-big-green" style.background-color=<>> + <%if [get[text]else[closed]match[closed]] %> + <$action-setfield $tiddler=<> $value="open"/> + {{$:/core/images/right-arrow}} + <%else%> + <$action-setfield $tiddler=<> $value="closed"/> + {{$:/core/images/down-arrow}} + <%endif%> + <$text text=<>/> + + + <$reveal type="match" state=<> text="open" default="closed" animate="yes" retain="yes" tag="div"> + <$slot $name="ts-raw"> + + +\end $expand.able diff --git a/editions/tw5.com/tiddlers/hire-jeremy/HireJeremyStyles.tid b/editions/tw5.com/tiddlers/hire-jeremy/HireJeremyStyles.tid new file mode 100644 index 0000000000..5761e8c4fa --- /dev/null +++ b/editions/tw5.com/tiddlers/hire-jeremy/HireJeremyStyles.tid @@ -0,0 +1,163 @@ +title: $:/HireJeremy/styles +tags: [[$:/tags/Stylesheet]] +type: text/vnd.tiddlywiki + +\define sidebarbreakpoint() +<$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/> +\end + +\define sidebarbreakpoint-minus-one() +<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/> +\end + +.yellow-note, [data-tiddler-title="Hire the founder of TiddlyWiki"] { + z-index: 800; + margin-top: 2em; + transform-origin: 50% 50%; + transition: transform 200ms ease-in-out; + transform: rotate(-0.6deg) scale(1); + background-color: #ffff92; + color: black; + box-shadow: 6px 6px 14px 0px rgba(0, 0, 0, 0.3); + border: 1px solid #cccc40; + text-shadow: 0 1px 0 #ffffff; +} + +.yellow-note:hover, [data-tiddler-title="Hire the founder of TiddlyWiki"]:hover { + transform: rotate(-0deg) scale(1.03); +} + +@media (max-width: <>) { + +.yellow-note, [data-tiddler-title="Hire the founder of TiddlyWiki"] { + transform: rotate(-0.6deg) scale(0.9); +} + +.yellow-note:hover, [data-tiddler-title="Hire the founder of TiddlyWiki"]:hover { + transform: rotate(-0deg) scale(1.03); +} + +} + +.yellow-note h2.tc-title, [data-tiddler-title="Hire the founder of TiddlyWiki"] h2.tc-title { + margin: 0.5em 0; + color: #334; + font-weight: bold; +} + +[data-tiddler-title="Hire the founder of TiddlyWiki"] .tc-tags-wrapper, [data-tiddler-title="Hire the founder of TiddlyWiki"] .tc-subtitle { + display: none; +} + +.yellow-note p, [data-tiddler-title="Hire the founder of TiddlyWiki"] p { + margin: 0.5em 0; +} + +.yellow-note .tc-tiddler-body h1, [data-tiddler-title="Hire the founder of TiddlyWiki"] .tc-tiddler-body h1 { + margin: 0.25em 0; + font-weight: bold; +} + +.yellow-note .tc-tiddler-body a, [data-tiddler-title="Hire the founder of TiddlyWiki"] .tc-tiddler-body a { + color: #5778d8; +} + +[data-tiddler-title="Hire the founder of TiddlyWiki"] .tc-btn-big-green { + margin: 0; + padding: 0; + text-align: left; + width: 100%; + color: #334; + font-weight: bold; + background-color: inherit; +} + +@media (min-width: <>) { + +[data-tiddler-title="Hire the founder of TiddlyWiki"] .tc-btn-big-green { + margin-left: -1.35em; +} + +} + +[data-tiddler-title="Hire the founder of TiddlyWiki"] .tc-btn-big-green svg { + fill: #cece86; +} + +.yellow-note-sidebar-wrapper { + overflow-y: hidden; + max-height: {{{ [[$:/StoryList]contains[Hire the founder of TiddlyWiki]then[0em]else[15em]] }}}; + transition: max-height 600ms ease-in-out; +} + +.yellow-note-sidebar { + font-size: 2em; + text-align: center; + line-height: 1.3; + max-width: 8.5em; +} + +.yellow-note-sidebar .yellow-note { + padding: 0.5em; + margin: 1em 0; + transform: perspective(600px) rotateX(10deg) rotateY(5deg) scale(0.9); + transform-style: preserve-3d; +} + +.yellow-note-sidebar:hover .yellow-note { + transform: perspective(900px) rotateX(5deg) rotateY(10deg) scale(0.95); + transform-style: preserve-3d; +} + +.yellow-note-sidebar:hover a { + text-decoration: none; +} + +/* Thanks to https://codepen.io/dillonbrady/pen/EgRoZQ */ + +.yellow-note-pin { + background-color: #aaa; + display: block; + height: 32px; + width: 2px; + position: absolute; + left: 50%; + top: -16px; + z-index: 1; +} + +.yellow-note-pin:after { + background-color: #A31; + background-image: radial-gradient(25% 25%, circle, hsla(0,0%,100%,.3), hsla(0,0%,0%,.3)); + border-radius: 50%; + box-shadow: inset 0 0 0 1px hsla(0,0%,0%,.1), inset 3px 3px 3px hsla(0,0%,100%,.2), inset -3px -3px 3px hsla(0,0%,0%,.2), 23px 20px 3px hsla(0,0%,0%,.15); + content: ""; + height: 12px; + left: -5px; + position: absolute; + top: -10px; + width: 12px; +} + +.yellow-note-pin:before { + background-color: hsla(0,0%,0%,0.1); + box-shadow: 0 0 .25em hsla(0,0%,0%,.1); + content: ""; + height: 24px; + width: 2px; + left: 0; + position: absolute; + top: 8px; + + transform: rotate(57.5deg); + -moz-transform: rotate(57.5deg); + -webkit-transform: rotate(57.5deg); + -o-transform: rotate(57.5deg); + -ms-transform: rotate(57.5deg); + + transform-origin: 50% 100%; + -moz-transform-origin: 50% 100%; + -webkit-transform-origin: 50% 100%; + -ms-transform-origin: 50% 100%; + -o-transform-origin: 50% 100%; +} \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/Blurry Lawn.jpg b/editions/tw5.com/tiddlers/images/Blurry Lawn.jpg index 049942ef28..f140907961 100644 Binary files a/editions/tw5.com/tiddlers/images/Blurry Lawn.jpg and b/editions/tw5.com/tiddlers/images/Blurry Lawn.jpg differ diff --git a/editions/tw5.com/tiddlers/images/Community Survey 2025.webp b/editions/tw5.com/tiddlers/images/Community Survey 2025.webp new file mode 100644 index 0000000000..1a0987e2a0 Binary files /dev/null and b/editions/tw5.com/tiddlers/images/Community Survey 2025.webp differ diff --git a/editions/tw5.com/tiddlers/images/Community Survey 2025.webp.meta b/editions/tw5.com/tiddlers/images/Community Survey 2025.webp.meta new file mode 100644 index 0000000000..ca56926a10 --- /dev/null +++ b/editions/tw5.com/tiddlers/images/Community Survey 2025.webp.meta @@ -0,0 +1,4 @@ +alt-text: Shape the future by taking the TiddlyWiki Community Survey 2025 +tags: picture +title: Community Survey 2025 +type: image/webp \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/Funding.png b/editions/tw5.com/tiddlers/images/Funding.png deleted file mode 100644 index b55be84418..0000000000 Binary files a/editions/tw5.com/tiddlers/images/Funding.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/Funding.webp b/editions/tw5.com/tiddlers/images/Funding.webp new file mode 100644 index 0000000000..02ad028077 Binary files /dev/null and b/editions/tw5.com/tiddlers/images/Funding.webp differ diff --git a/editions/tw5.com/tiddlers/images/Funding.png.meta b/editions/tw5.com/tiddlers/images/Funding.webp.meta similarity index 57% rename from editions/tw5.com/tiddlers/images/Funding.png.meta rename to editions/tw5.com/tiddlers/images/Funding.webp.meta index 8d6225a60c..377bfe35fa 100644 --- a/editions/tw5.com/tiddlers/images/Funding.png.meta +++ b/editions/tw5.com/tiddlers/images/Funding.webp.meta @@ -1,4 +1,4 @@ -title: Funding.png -type: image/png +title: Funding +type: image/webp tags: picture alt-text: Hand over a debit-card. diff --git a/editions/tw5.com/tiddlers/images/Intertwingled Innovations.png b/editions/tw5.com/tiddlers/images/Intertwingled Innovations.png deleted file mode 100644 index b405ec3f6c..0000000000 Binary files a/editions/tw5.com/tiddlers/images/Intertwingled Innovations.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/Intertwingled Innovations.png.meta b/editions/tw5.com/tiddlers/images/Intertwingled Innovations.png.meta deleted file mode 100644 index a6336bfc46..0000000000 --- a/editions/tw5.com/tiddlers/images/Intertwingled Innovations.png.meta +++ /dev/null @@ -1,3 +0,0 @@ -title: Intertwingled Innovations.png -type: image/png -tags: picture diff --git a/editions/tw5.com/tiddlers/images/Intertwingled Innovations.webp b/editions/tw5.com/tiddlers/images/Intertwingled Innovations.webp new file mode 100644 index 0000000000..211b3265ce Binary files /dev/null and b/editions/tw5.com/tiddlers/images/Intertwingled Innovations.webp differ diff --git a/editions/tw5.com/tiddlers/images/Intertwingled Innovations.webp.meta b/editions/tw5.com/tiddlers/images/Intertwingled Innovations.webp.meta new file mode 100644 index 0000000000..f074bf96e1 --- /dev/null +++ b/editions/tw5.com/tiddlers/images/Intertwingled Innovations.webp.meta @@ -0,0 +1,3 @@ +title: Intertwingled Innovations +type: image/webp +tags: picture diff --git a/editions/tw5.com/tiddlers/images/MWS Banner.png b/editions/tw5.com/tiddlers/images/MWS Banner.png deleted file mode 100644 index 1e27e8f25e..0000000000 Binary files a/editions/tw5.com/tiddlers/images/MWS Banner.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/MWS Banner.png.meta b/editions/tw5.com/tiddlers/images/MWS Banner.png.meta deleted file mode 100644 index 12fc210722..0000000000 --- a/editions/tw5.com/tiddlers/images/MWS Banner.png.meta +++ /dev/null @@ -1,4 +0,0 @@ -title: MWS Banner.png -type: image/png -tags: picture -alt-text: Banner for the new Multi Wiki Server plugin for TiddlyWiki diff --git a/editions/tw5.com/tiddlers/images/MWS Banner.webp b/editions/tw5.com/tiddlers/images/MWS Banner.webp new file mode 100644 index 0000000000..988afd6f03 Binary files /dev/null and b/editions/tw5.com/tiddlers/images/MWS Banner.webp differ diff --git a/editions/tw5.com/tiddlers/images/MWS Banner.webp.meta b/editions/tw5.com/tiddlers/images/MWS Banner.webp.meta new file mode 100644 index 0000000000..3077d13c98 --- /dev/null +++ b/editions/tw5.com/tiddlers/images/MWS Banner.webp.meta @@ -0,0 +1,6 @@ +alt-text: Banner for the new Multi Wiki Server plugin for TiddlyWiki +created: 20250718090840336 +modified: 20250718091156532 +tags: picture +title: MWS Banner +type: image/webp \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/Marketplace Banner.png b/editions/tw5.com/tiddlers/images/Marketplace Banner.png deleted file mode 100644 index 51275547aa..0000000000 Binary files a/editions/tw5.com/tiddlers/images/Marketplace Banner.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/Marketplace Banner.webp b/editions/tw5.com/tiddlers/images/Marketplace Banner.webp new file mode 100644 index 0000000000..ae8e8f8b21 Binary files /dev/null and b/editions/tw5.com/tiddlers/images/Marketplace Banner.webp differ diff --git a/editions/tw5.com/tiddlers/images/Marketplace Banner.png.meta b/editions/tw5.com/tiddlers/images/Marketplace Banner.webp.meta similarity index 88% rename from editions/tw5.com/tiddlers/images/Marketplace Banner.png.meta rename to editions/tw5.com/tiddlers/images/Marketplace Banner.webp.meta index 14ccdbc0bb..154d88ac67 100644 --- a/editions/tw5.com/tiddlers/images/Marketplace Banner.png.meta +++ b/editions/tw5.com/tiddlers/images/Marketplace Banner.webp.meta @@ -1,4 +1,4 @@ title: TiddlyWiki Marketplace Banner -type: image/jpeg +type: image/webp tags: picture alt-text: Motovun Jack with a shopping cart. Blue floor, orange background. diff --git a/editions/tw5.com/tiddlers/images/New Release Banner.png b/editions/tw5.com/tiddlers/images/New Release Banner.png deleted file mode 100644 index 9cbf5e3418..0000000000 Binary files a/editions/tw5.com/tiddlers/images/New Release Banner.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/New Release Banner.webp b/editions/tw5.com/tiddlers/images/New Release Banner.webp new file mode 100644 index 0000000000..97835f8fa8 Binary files /dev/null and b/editions/tw5.com/tiddlers/images/New Release Banner.webp differ diff --git a/editions/tw5.com/tiddlers/images/New Release Banner.png.meta b/editions/tw5.com/tiddlers/images/New Release Banner.webp.meta similarity index 88% rename from editions/tw5.com/tiddlers/images/New Release Banner.png.meta rename to editions/tw5.com/tiddlers/images/New Release Banner.webp.meta index 2da8dc356c..8ef034e0ce 100644 --- a/editions/tw5.com/tiddlers/images/New Release Banner.png.meta +++ b/editions/tw5.com/tiddlers/images/New Release Banner.webp.meta @@ -1,4 +1,4 @@ title: New Release Banner -type: image/png +type: image/webp tags: picture alt-text: Release banner, with a custom background and a release version in big letters. diff --git a/editions/tw5.com/tiddlers/images/TW5-Graph.png b/editions/tw5.com/tiddlers/images/TW5-Graph.png new file mode 100644 index 0000000000..d53c974414 Binary files /dev/null and b/editions/tw5.com/tiddlers/images/TW5-Graph.png differ diff --git a/editions/tw5.com/tiddlers/images/TW5-Graph.png.meta b/editions/tw5.com/tiddlers/images/TW5-Graph.png.meta new file mode 100644 index 0000000000..dd9060bda1 --- /dev/null +++ b/editions/tw5.com/tiddlers/images/TW5-Graph.png.meta @@ -0,0 +1,4 @@ +title: TW5-Graph.png +type: image/png +tags: picture +alt-text: TW5-Graph and data visualization diff --git a/editions/tw5.com/tiddlers/images/Tiddler Poster.png b/editions/tw5.com/tiddlers/images/Tiddler Poster.png deleted file mode 100644 index ca928ecd55..0000000000 Binary files a/editions/tw5.com/tiddlers/images/Tiddler Poster.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/Tiddler Poster.webp b/editions/tw5.com/tiddlers/images/Tiddler Poster.webp new file mode 100644 index 0000000000..10d0ca64c4 Binary files /dev/null and b/editions/tw5.com/tiddlers/images/Tiddler Poster.webp differ diff --git a/editions/tw5.com/tiddlers/images/Tiddler Poster.png.meta b/editions/tw5.com/tiddlers/images/Tiddler Poster.webp.meta similarity index 81% rename from editions/tw5.com/tiddlers/images/Tiddler Poster.png.meta rename to editions/tw5.com/tiddlers/images/Tiddler Poster.webp.meta index 2215699747..32d672ce39 100644 --- a/editions/tw5.com/tiddlers/images/Tiddler Poster.png.meta +++ b/editions/tw5.com/tiddlers/images/Tiddler Poster.webp.meta @@ -1,5 +1,5 @@ -title: Tiddler Poster.png -type: image/png +title: Tiddler Poster +type: image/webp source: https://tiddlywiki.com/poster tags: picture alt-text: Poster with a headline: Your messy thoughts. Organized. Below is an abstract Stickleback fish and tiddlywiki.com URL. diff --git a/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png b/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png deleted file mode 100644 index 259eb7c9c7..0000000000 Binary files a/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.webp b/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.webp new file mode 100644 index 0000000000..f92878f3fb Binary files /dev/null and b/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.webp differ diff --git a/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png.meta b/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.webp.meta similarity index 69% rename from editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png.meta rename to editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.webp.meta index 50d42ef496..bc10188192 100644 --- a/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.png.meta +++ b/editions/tw5.com/tiddlers/images/TiddlyFox Apocalypse.webp.meta @@ -1,4 +1,4 @@ -title: TiddlyFox Apocalypse.png -type: image/png +title: TiddlyFox Apocalypse Badge +type: image/webp tags: picture alt-text: Motovun Jack's head with a FireFox logo over the head and a date: Nov. 14th 2017 on the left. diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png b/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png deleted file mode 100644 index 866edf3ed4..0000000000 Binary files a/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.webp b/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.webp new file mode 100644 index 0000000000..49810efddf Binary files /dev/null and b/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.webp differ diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png.meta b/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.webp.meta similarity index 58% rename from editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png.meta rename to editions/tw5.com/tiddlers/images/TiddlyWiki Classic.webp.meta index 0142e4d671..dd39eef7ab 100644 --- a/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.png.meta +++ b/editions/tw5.com/tiddlers/images/TiddlyWiki Classic.webp.meta @@ -1,4 +1,4 @@ -title: TiddlyWiki Classic.png -type: image/png +title: TiddlyWiki Classic +type: image/webp tags: picture alt-text: TiddlyWiki classic screenshto thumbnail. diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png b/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png deleted file mode 100644 index b0a8c508a2..0000000000 Binary files a/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png.meta b/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png.meta deleted file mode 100644 index 3eb2dbdde9..0000000000 --- a/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.png.meta +++ /dev/null @@ -1,6 +0,0 @@ -alt-text: Motovun Jack reads a Newsletter. -created: 20240630093143711 -modified: 20240630094906495 -tags: picture -title: TiddlyWiki Newsletter Badge.png -type: image/png \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.webp b/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.webp new file mode 100644 index 0000000000..6a1930efea Binary files /dev/null and b/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.webp differ diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.webp.meta b/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.webp.meta new file mode 100644 index 0000000000..39a813565b --- /dev/null +++ b/editions/tw5.com/tiddlers/images/TiddlyWiki Newsletter Badge.webp.meta @@ -0,0 +1,4 @@ +alt-text: Motovun Jack reads a Newsletter. +tags: picture +title: TiddlyWiki Newsletter Badge +type: image/webp \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.png b/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.png deleted file mode 100644 index bf081b1ab5..0000000000 Binary files a/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.png.meta b/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.png.meta deleted file mode 100644 index 421876811c..0000000000 --- a/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.png.meta +++ /dev/null @@ -1,6 +0,0 @@ -alt-text: Motovun Jack's laser eyes highlight TiddlyWiki's security badge -created: 20241106165307259 -modified: 20241106165307259 -tags: picture -title: TiddlyWiki Privacy Badge.png -type: image/png \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.webp b/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.webp new file mode 100644 index 0000000000..e5602c9b8b Binary files /dev/null and b/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.webp differ diff --git a/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.webp.meta b/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.webp.meta new file mode 100644 index 0000000000..aeb0956a33 --- /dev/null +++ b/editions/tw5.com/tiddlers/images/TiddlyWiki Privacy Badge.webp.meta @@ -0,0 +1,4 @@ +created: 20250718090420319 +modified: 20250718090424617 +title: TiddlyWiki Privacy Badge +type: image/webp \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png b/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png deleted file mode 100644 index 5ac2bbc868..0000000000 Binary files a/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png and /dev/null differ diff --git a/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.webp b/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.webp new file mode 100644 index 0000000000..ccaba10c72 Binary files /dev/null and b/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.webp differ diff --git a/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png.meta b/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.webp.meta similarity index 89% rename from editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png.meta rename to editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.webp.meta index 3e782921b5..e7876a7a9e 100644 --- a/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.png.meta +++ b/editions/tw5.com/tiddlers/images/Twenty Years of TiddlyWiki.webp.meta @@ -1,4 +1,4 @@ title: Twenty Years of TiddlyWiki -type: image/png +type: image/webp tags: picture alt-text: Screenshot of TiddlyWiki from 20th September 2004 with a banner reading "Twenty Years" diff --git a/editions/tw5.com/tiddlers/macros/copy-to-clipboard Macro.tid b/editions/tw5.com/tiddlers/macros/copy-to-clipboard Macro.tid index 327c9c2daa..4877745ff2 100644 --- a/editions/tw5.com/tiddlers/macros/copy-to-clipboard Macro.tid +++ b/editions/tw5.com/tiddlers/macros/copy-to-clipboard Macro.tid @@ -1,6 +1,6 @@ caption: copy-to-clipboard created: 20171216104754967 -modified: 20250127133558352 +modified: 20171216104941967 tags: Macros [[Core Macros]] title: copy-to-clipboard Macro type: text/vnd.tiddlywiki @@ -15,9 +15,5 @@ The <<.def copy-to-clipboard>> [[macro|Macros]] displays a button that copies sp : Optional CSS classes to be assigned to the button (defaults to `tc-btn-invisible`) ;style : Optional CSS styles to be assigned to the button -;type -: <<.from-version "5.3.7">> MIME type of the text to be copied, defaults to `text/plain` -;plain -: <<.from-version "5.3.7">> Additional plain text to be copied when `type` attribute isn't `text/plain` <<.macro-examples "copy-to-clipboard">> diff --git a/editions/tw5.com/tiddlers/macros/examples/copy-to-clipboard Macro (Examples).tid b/editions/tw5.com/tiddlers/macros/examples/copy-to-clipboard Macro (Examples).tid index 373e6a2e46..098bac367e 100644 --- a/editions/tw5.com/tiddlers/macros/examples/copy-to-clipboard Macro (Examples).tid +++ b/editions/tw5.com/tiddlers/macros/examples/copy-to-clipboard Macro (Examples).tid @@ -1,14 +1,8 @@ created: 20171216104946277 -modified: 20250127134344834 +modified: 20171216105109641 tags: [[copy-to-clipboard Macro]] [[Macro Examples]] title: copy-to-clipboard Macro (Examples) type: text/vnd.tiddlywiki <$macrocall $name=".example" n="1" eg="""<>"""/> -<$macrocall $name=".example" n="2" eg="""<$transclude $variable="copy-to-clipboard" src={{$:/SiteTitle}}/>"""/> - -In the following examples, press ctrl-V / cmd-V in tiddlywiki after copying to see its effects. - -<$macrocall $name=".example" n="3" eg="""<Test" type:"text/html" plain:"Test">> """/> -<$macrocall $name=".example" n="4" eg="""<> """/> -<$macrocall $name=".example" n="5" eg="""<$transclude $variable="copy-to-clipboard" src=<> type="text/vnd.tiddler"/>"""/> +<$macrocall $name=".example" n="2" eg="""<$macrocall $name="copy-to-clipboard" src={{$:/SiteTitle}}/>"""/> diff --git a/editions/tw5.com/tiddlers/macros/list-links-draggable Macro.tid b/editions/tw5.com/tiddlers/macros/list-links-draggable Macro.tid index b817acf629..cd4252d072 100644 --- a/editions/tw5.com/tiddlers/macros/list-links-draggable Macro.tid +++ b/editions/tw5.com/tiddlers/macros/list-links-draggable Macro.tid @@ -9,19 +9,26 @@ The <<.def list-links-draggable>> [[macro|Macros]] renders the ListField of a ti !! Parameters -;tiddler +; tiddler : The title of the tiddler containing the list -;field +: <<.from-version 5.4.0>> If the tiddler parameter is not defined it defaults to: <<.var currentTiddler>> + +; field : The name of the field containing the list (defaults to `list`) -;emptyMessage + +; emptyMessage : Optional wikitext to display if there is no output (tiddler is not existed, field is not existed or empty) -;type + +; type : The element tag to use for the list wrapper (defaults to `ul`) -;subtype + +; subtype : The element tag to use for the list items (defaults to `li`) -;class + +; class : Optional space separated classes to add to the wrapper element -;itemTemplate + +; itemTemplate : Optional title of a tiddler to use as the template for rendering list items If the `itemTemplate` parameter is not provided then the list items are rendered as simple links. Within the `itemTemplate`, the [[currentTiddler Variable]] refers to the current list item. diff --git a/editions/tw5.com/tiddlers/mechanisms/InfoMechanism.tid b/editions/tw5.com/tiddlers/mechanisms/InfoMechanism.tid index 040dd7bd23..e22ff238a1 100644 --- a/editions/tw5.com/tiddlers/mechanisms/InfoMechanism.tid +++ b/editions/tw5.com/tiddlers/mechanisms/InfoMechanism.tid @@ -1,5 +1,5 @@ created: 20140720164948099 -modified: 20201124185829706 +modified: 20250819181815032 tags: Mechanisms title: InfoMechanism type: text/vnd.tiddlywiki @@ -19,6 +19,7 @@ System tiddlers in the namespace `$:/info/` are used to expose information about |[[$:/info/browser/language]] |<<.from-version "5.1.20">> Language as reported by browser (note that some browsers report two character codes such as `en` while others report full codes such as `en-GB`) | |[[$:/info/browser/screen/width]] |Screen width in pixels | |[[$:/info/browser/screen/height]] |Screen height in pixels | +|`$:/info/browser/window/*` |<<.from-version "5.4.0">> Tiddlers reporting window dimensions, updated when the windows are resized | |[[$:/info/node]] |Running under [[Node.js]]? ("yes" or "no") | |[[$:/info/url/full]] |<<.from-version "5.1.14">> Full URL of wiki (eg, ''<>'') | |[[$:/info/url/host]] |<<.from-version "5.1.14">> Host portion of URL of wiki (eg, ''<>'') | @@ -29,3 +30,27 @@ System tiddlers in the namespace `$:/info/` are used to expose information about |[[$:/info/url/protocol]] |<<.from-version "5.1.14">> Protocol portion of URL of wiki (eg, ''<>'') | |[[$:/info/url/search]] |<<.from-version "5.1.14">> Search portion of URL of wiki (eg, ''<>'') | |[[$:/info/darkmode]] |<<.from-version "5.1.23">> Is dark mode enabled? ("yes" or "no") | + +! Main Window Dimension Tiddlers + +<<.from-version "5.4.0">> These tiddlers reports the dimensions of the main ~TiddlyWiki window and are updated automatically whenever the main window is resized. + +|!Title |!Description | +|[[$:/info/browser/window/system/main/outer/width]] |Full browser window including chrome, tabs, toolbars | +|[[$:/info/browser/window/system/main/outer/height]] |Full browser window including chrome, tabs, toolbars | +|[[$:/info/browser/window/system/main/inner/width]] |Viewport width including scrollbars | +|[[$:/info/browser/window/system/main/inner/height]] |Viewport height including scrollbars | +|[[$:/info/browser/window/system/main/client/width]] |Content width excluding scrollbars | +|[[$:/info/browser/window/system/main/client/height]] |Content height excluding scrollbars | + +! User-Created Window Dimension Tiddlers + +<<.from-version "5.4.0">> These tiddler reports the dimensions of additional windows opened via [[tm-open-window|WidgetMessage: tm-open-window]]. The windowID used when opening the window is used to identify the corresponding info tiddlers. These tiddlers are updated automatically whenever the main window is resized. + +|!Title |!Description | +|`$:/info/browser/window/user//outer/width` | Full browser window including chrome, tabs, toolbars | +|`$:/info/browser/window/user//outer/height` | Full browser window including chrome, tabs, toolbars | +|`$:/info/browser/window/user//inner/width` |Viewport width including scrollbars | +|`$:/info/browser/window/user//inner/height` |Viewport height including scrollbars | +|`$:/info/browser/window/user//client/width` |Content width excluding scrollbars | +|`$:/info/browser/window/user//client/height` |Content height excluding scrollbars | diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-close-window.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-close-window.tid index 07b69e5b94..954e05ca47 100644 --- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-close-window.tid +++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-close-window.tid @@ -1,4 +1,4 @@ -caption: tm-open-window +caption: tm-close-window created: 20220228140417116 modified: 20230723220539648 tags: Messages diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-copy-to-clipboard.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-copy-to-clipboard.tid index 9812149692..b9c07465a3 100644 --- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-copy-to-clipboard.tid +++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-copy-to-clipboard.tid @@ -1,6 +1,6 @@ caption: tm-copy-to-clipboard created: 20171215150056004 -modified: 20250127134445040 +modified: 20240523174013095 tags: Messages title: WidgetMessage: tm-copy-to-clipboard type: text/vnd.tiddlywiki @@ -13,8 +13,6 @@ It requires the following properties on the `event` object: |param |Text to be copied to the clipboard | |successNotification |<<.from-version "5.3.4">> Optional title of tiddler containing notification to be used if the operation succeeds | |failureNotification |<<.from-version "5.3.4">> Optional title of tiddler containing notification to be used if the operation fails | -|type |<<.from-version "5.3.7">> MIME type of the text to be copied, defaults to `text/plain` | -|plainText |<<.from-version "5.3.7">> Additional plain text to be copied when `type` attribute isn't `text/plain` | This message is usually generated with the ButtonWidget. It is handled by the TiddlyWiki core. diff --git a/editions/tw5.com/tiddlers/plugins/Plugin_Fields.tid b/editions/tw5.com/tiddlers/plugins/Plugin_Fields.tid index 5c2bb6fdfb..b7631602ce 100644 --- a/editions/tw5.com/tiddlers/plugins/Plugin_Fields.tid +++ b/editions/tw5.com/tiddlers/plugins/Plugin_Fields.tid @@ -19,4 +19,5 @@ Plugins are stored as tiddlers with the following fields: |text |JSON encoding of the list of tiddlers comprising the plugin | |title |Title of plugin | |type |Must be ''application/json'' | -|version |//(optional)// Version string (should conform to [ext[SemanticVersioning|http://semver.org/]] convention) | \ No newline at end of file +|version |//(optional)// Version string (should conform to [ext[SemanticVersioning|http://semver.org/]] convention) | +|platform |<<.from-version 5.4.0>> //(optional)// Set this field to ''node'' to restrict the plugin to only be loaded on the server (this is accomplished by suppressing such plugins from the various save templates) | diff --git a/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9133.tid b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9133.tid new file mode 100644 index 0000000000..6840080fa0 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9133.tid @@ -0,0 +1,8 @@ +title: $:/changenotes/5.3.8/#9133 +description: Update Chinese translation +release: 5.3.8 +tags: $:/tags/ChangeNote +change-type: enhancement +change-category: translation +links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9133 +github-contributors: BramChen diff --git a/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9166.tid b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9166.tid new file mode 100644 index 0000000000..64ef60a922 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9166.tid @@ -0,0 +1,8 @@ +title: $:/changenotes/5.3.8/#9166 +description: Fixed name field of fa-IR language plugin +release: 5.3.8 +tags: $:/tags/ChangeNote +change-type: bugfix +change-category: translation +links: https://github.com/TiddlyWiki/TiddlyWiki5/issue/9166 +github-contributors: Leilei332 diff --git a/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9175.tid b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9175.tid new file mode 100644 index 0000000000..62c29cdd08 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9175.tid @@ -0,0 +1,8 @@ +title: $:/changenotes/5.3.8/#9175 +description: Fixed Flexoki palette regressions +release: 5.3.8 +tags: $:/tags/ChangeNote +change-type: bugfix +change-category: palette +links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9175 +github-contributors: Leilei332 diff --git a/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9184.tid b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9184.tid new file mode 100644 index 0000000000..c24047fe91 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9184.tid @@ -0,0 +1,8 @@ +title: $:/changenotes/5.3.8/#9184 +description: Update Polish translation +release: 5.3.8 +tags: $:/tags/ChangeNote +change-type: enhancement +change-category: translation +links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9184 +github-contributors: EvidentlyCube diff --git a/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9185.tid b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9185.tid new file mode 100644 index 0000000000..281fea8595 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.3.8/#9185.tid @@ -0,0 +1,8 @@ +title: $:/changenotes/5.3.8/#9185 +description: Fixed [[Highlight Plugin]] theme listing +release: 5.3.8 +tags: $:/tags/ChangeNote +change-type: bugfix +change-category: plugin +links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9185 +github-contributors: Leilei332 diff --git a/editions/tw5.com/tiddlers/releasenotes/5.3.8/32caeb69c3e7b75a80a84a1e14363e87175b164e.tid b/editions/tw5.com/tiddlers/releasenotes/5.3.8/32caeb69c3e7b75a80a84a1e14363e87175b164e.tid new file mode 100644 index 0000000000..36fbed33fe --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.3.8/32caeb69c3e7b75a80a84a1e14363e87175b164e.tid @@ -0,0 +1,10 @@ +title: $:/changenotes/5.3.8/32caeb69c3e7b75a80a84a1e14363e87175b164e +description: Revert breakage of [[list-tagged-draggable Macro]] +release: 5.3.8 +tags: $:/tags/ChangeNote +change-type: bugfix +change-category: hackability +links: https://github.com/TiddlyWiki/TiddlyWiki5/commit/32caeb69c3e7b75a80a84a1e14363e87175b164e +github-contributors: Jermolene + +Reverted the [[change in v5.3.7|https://github.com/TiddlyWiki/TiddlyWiki5/pull/8721]] that broke the [[list-tagged-draggable Macro]]. The change involved updating some core macros to use procedures diff --git a/editions/tw5.com/tiddlers/releasenotes/5.3.8/75502266176de9d4a5e1f89cd7f2e455b7a2f6da.tid b/editions/tw5.com/tiddlers/releasenotes/5.3.8/75502266176de9d4a5e1f89cd7f2e455b7a2f6da.tid new file mode 100644 index 0000000000..65349a3d7e --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.3.8/75502266176de9d4a5e1f89cd7f2e455b7a2f6da.tid @@ -0,0 +1,8 @@ +title: $:/changenotes/5.3.8/75502266176de9d4a5e1f89cd7f2e455b7a2f6da +description: Update Greek translation +release: 5.3.8 +tags: $:/tags/ChangeNote +change-type: enhancement +change-category: translation +links: https://github.com/TiddlyWiki/TiddlyWiki5/commit/75502266176de9d4a5e1f89cd7f2e455b7a2f6da +github-contributors: superuser-does diff --git a/editions/tw5.com/tiddlers/releasenotes/5.3.8/93d30f374da4a6b2037b335f7f7d4eddce8192db.tid b/editions/tw5.com/tiddlers/releasenotes/5.3.8/93d30f374da4a6b2037b335f7f7d4eddce8192db.tid new file mode 100644 index 0000000000..e87caf908c --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.3.8/93d30f374da4a6b2037b335f7f7d4eddce8192db.tid @@ -0,0 +1,8 @@ +title: $:/changenotes/5.3.8/93d30f374da4a6b2037b335f7f7d4eddce8192db +description: Fixed display of field names longer than the available width in the info panel +release: 5.3.8 +tags: $:/tags/ChangeNote +change-type: bugfix +change-category: usability +links: https://github.com/TiddlyWiki/TiddlyWiki5/commit/93d30f374da4a6b2037b335f7f7d4eddce8192db +github-contributors: Jermolene diff --git a/editions/tw5.com/tiddlers/releasenotes/5.4.0/#9183.tid b/editions/tw5.com/tiddlers/releasenotes/5.4.0/#9183.tid new file mode 100644 index 0000000000..6847cb1bd8 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.4.0/#9183.tid @@ -0,0 +1,10 @@ +title: $:/changenotes/5.4.0/#9183 +description: Offload server-only components to a plugin +release: 5.4.0 +tags: $:/tags/ChangeNote +change-type: pluginisation +change-category: internal +links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9183 https://github.com/TiddlyWiki/TiddlyWiki5/pull/9288 +github-contributors: Jermolene Leilei332 + +This change reduces the size of the core plugin by 119.3KB or about 4.5%. diff --git a/editions/tw5.com/tiddlers/releasenotes/5.4.0/#9287.tid b/editions/tw5.com/tiddlers/releasenotes/5.4.0/#9287.tid new file mode 100644 index 0000000000..bc2fa4217d --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.4.0/#9287.tid @@ -0,0 +1,10 @@ +title: $:/changenotes/5.4.0/#9287 +description: Split release notes into individual change notes +release: 5.4.0 +tags: $:/tags/ChangeNote +change-type: enhancement +change-category: internal +links: https://github.com/TiddlyWiki/TiddlyWiki5/pull/9287 +github-contributors: Jermolene + +Doing so enables us to filter and group changes. For example, we could show all the breaking changes between two releases. diff --git a/editions/tw5.com/tiddlers/releasenotes/5.4.0/Release 5.4.0.tid b/editions/tw5.com/tiddlers/releasenotes/5.4.0/Release 5.4.0.tid new file mode 100644 index 0000000000..9cc610abba --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.4.0/Release 5.4.0.tid @@ -0,0 +1,13 @@ +caption: 5.4.0 +created: 20250901000000000 +modified: 20250901000000000 +tags: ReleaseNotes +title: Release 5.4.0 +type: text/vnd.tiddlywiki +description: Under development + +\define release-introduction() +Release v5.4.0 includes major improvements in a number of areas. See the [[project plan|https://github.com/orgs/TiddlyWiki/projects/4]] for more details. +\end release-introduction + +<> diff --git a/editions/tw5.com/tiddlers/releasenotes/Release Notes and Changes.tid b/editions/tw5.com/tiddlers/releasenotes/Release Notes and Changes.tid new file mode 100644 index 0000000000..d206d1f383 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/Release Notes and Changes.tid @@ -0,0 +1,38 @@ +title: Release Notes and Changes + +! Release Notes + +! Change Notes + +* `title` by convention titles are formed `$:/changenotes//`. The unique identifier is typically a GitHub PR or issue like `#1234` or a GitHub commit ID such as `98f850609d29bc36ded83f90c0d5be231649254b` +* `tags` must include `$:/tags/ChangeNote`, see below for other valid tags +* `change-type` the type of change as a single string; see below for values +* `change-category` the category of the change; see below for vqalues + +Other valid tags for change notes: + +* `$:/tags/ChangeNote/Deprecation` +* `$:/tags/ChangeNote/Breaking` + +Valid change note types are as follows: + +* ''bugfix'' +* ''feature'' +* ''enhancement'' +* ''deprecation'' +* ''security'' +* ''pluginisation'' + +Valid change categories are as follows: + +* ''internal'' +* ''translation'' +* ''plugin'' +* ''widget'' +* ''filters'' +* ''usability'' +* ''palette'' +* ''hackability'' +* ''nodejs'' +* ''performance'' +* ''developer'' diff --git a/editions/tw5.com/tiddlers/releasenotes/ReleaseTemplate.tid b/editions/tw5.com/tiddlers/releasenotes/ReleaseTemplate.tid index 34b967d173..93e5e4bd49 100644 --- a/editions/tw5.com/tiddlers/releasenotes/ReleaseTemplate.tid +++ b/editions/tw5.com/tiddlers/releasenotes/ReleaseTemplate.tid @@ -1,6 +1,7 @@ created: 20211117231152248 modified: 20211119231156728 tags: [[Release Template]] +code-body: yes title: ReleaseTemplate

<$link to=<>><$view tiddler=<> field="title"/>

diff --git a/editions/tw5.com/tiddlers/releasenotes/ReleasesInfo.multids b/editions/tw5.com/tiddlers/releasenotes/ReleasesInfo.multids new file mode 100644 index 0000000000..eef158a82b --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/ReleasesInfo.multids @@ -0,0 +1,25 @@ +title: $:/tw5.com/releases/info/ + +category-order: translation plugin usability palette hackability widget filters performance nodejs internal developer +categories/internal/caption: Internal +categories/translation/caption: Translation +categories/plugin/caption: Plugin +categories/widget/caption: Widget +categories/usability/caption: Usability +categories/palette/caption: Palette +categories/hackability/caption: Hackability +categories/nodejs/caption: Node.js +categories/performance/caption: Performance +categories/developer/caption: Developer +change-types/bugfix/caption: BUGFIX +change-types/bugfix/colour: #ffe246 +change-types/feature/caption: FEATURE +change-types/feature/colour: #91ba66 +change-types/enhancement/caption: ENHANCEMENT +change-types/enhancement/colour: #cba5ff +change-types/deprecation/caption: DEPRECATION +change-types/deprecation/colour: #ff9d6c +change-types/security/caption: SECURITY +change-types/security/colour: #ff6666 +change-types/pluginisation/caption: PLUGINISATION +change-types/pluginisation/colour: #aaaaaa \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/releasenotes/ReleasesProcedures.tid b/editions/tw5.com/tiddlers/releasenotes/ReleasesProcedures.tid new file mode 100644 index 0000000000..2a7143885f --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/ReleasesProcedures.tid @@ -0,0 +1,125 @@ +title: $:/tw5.com/releases/procedures +tags: $:/tags/Global + +\procedure github-changes-link() +] +[get[caption]] }$...${ [has[released]get[caption]addprefix[v]] :else[[master]] }$` + rel="noopener noreferrer" + target="_blank" +>the detailed change history on ~GitHub +\end github-changes-link + +\procedure banner-credits() +<%if [!match[]] %> + +> width="140" style="float:left;margin-right:0.5em;"/> + +Congratulations to +> + rel="noopener noreferrer" + target="_blank" +><$text text=<>/> +for their winning design for the banner for this release (here is the +> + rel="noopener noreferrer" + target="_blank" +>discussion). +<%else%> +<$image source="New Release Banner" width="140"> +<%endif%> +
+\end banner-credits + +\procedure change-list() +\whitespace trim +<$list filter="[enlist{$:/tw5.com/releases/info/category-order}]" variable="category"> + <%if [tag[$:/tags/ChangeNote]] :filter[{!!release}match] :filter[{!!change-category}match] %> +

+ <$text text={{{ [[$:/tw5.com/releases/info/categories/]addsuffixaddsuffix[/caption]get[text]] }}} /> +

+
    + <$list filter="[tag[$:/tags/ChangeNote]] :filter[{!!release}match] :filter[{!!change-category}match]" variable="change"> +
  • + <$link + to="Release Notes and Changes" + class="doc-link-badge" + target="_blank" + rel="noopener noreferrer" + style.backgroundColor={{{ [get[change-type]addprefix[$:/tw5.com/releases/info/change-types/]addsuffix[/colour]get[text]] }}} + > + <$text text={{{ [get[change-type]addprefix[$:/tw5.com/releases/info/change-types/]addsuffix[/caption]get[text]] }}}/> + + <$text text=" "/> + <$list filter="[get[links]enlist-input[]]" variable="link"> + > + class="doc-github-link" + target="_blank" + rel="noopener noreferrer" + > + {{$:/core/images/github}} + + <$text text=" "/> + + <$transclude $tiddler=<> $field="description" $mode="inline"/> +
    + <$transclude $tiddler=<> $mode="block"/> +
    +
  • + +
+ <%endif%> + +\end change-list + +\procedure acknowledgements() +
    + <$list filter="[enlistsort[]]" variable="username"> +
  1. + ] }}} class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"> + addsuffix[.png?size=64]] }}} width="64" height="64"/> + + @<$text text=<>/> + + +
  2. + +
+\end acknowledgements + +\procedure releasenote(release) +<$let + releaseTiddler={{{ [all[tiddlers]tag[ReleaseNotes]] :filter[{!!caption}match] }}} + releaseTiddlerCreated={{{ [get[created]] }}} + release-github-contributors={{{ [tag[$:/tags/ChangeNote]] :filter[{!!release}match] :map:flat[enlist{!!github-contributors}] +[sort[]format:titlelist[]join[ ]]}}} +> + +See <> and [[other versions|TiddlyWiki Releases]]. + +<> + +! Introduction + +<$transclude $variable="release-introduction" $mode="block"/> + +! Changes + +This release includes the following changes. + +<> + + + +! Acknowledgements + +A warm thank you to the developers who have contributed to this release: + +<> + + +\end releasenote diff --git a/editions/tw5.com/tiddlers/releasenotes/ReleasesStyles.tid b/editions/tw5.com/tiddlers/releasenotes/ReleasesStyles.tid new file mode 100644 index 0000000000..00b9264197 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/ReleasesStyles.tid @@ -0,0 +1,3 @@ +title: $:/tw5.com/releases/styles +tags: $:/tags/Stylesheet +type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid b/editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid index 57c3352652..8682061b49 100644 --- a/editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid +++ b/editions/tw5.com/tiddlers/releasenotes/TiddlyWiki Releases.tid @@ -5,13 +5,7 @@ tags: Releases title: TiddlyWiki Releases type: text/vnd.tiddlywiki -Here are the details of recent releases of TiddlyWiki5. See [[TiddlyWiki5 Versioning]] for details of how releases are named. - -If you are using node.js, you can also install prior versions like this: - -> npm install -g tiddlywiki@5.1.13 - -(BetaReleases and AlphaReleases are listed separately). +Here are the details of recent releases of TiddlyWiki5. See [[TiddlyWiki5 Versioning]] for details of how releases are named, and [[Release Notes and Changes]] for details of how release notes are constructed. <$list filter="[tag[ReleaseNotes]!sort[created]limit[1]]"> <$macrocall $name="tabs" tabsList="[tag[ReleaseNotes]!sort[created]]" default={{!!title}} class="tc-vertical" template="ReleaseTemplate" /> diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.0.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.0.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.0.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.0.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.1.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.1.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.1.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.1.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.10.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.10.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.11.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.11.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.12.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.12.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.12.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.12.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.13.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.13.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.13.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.13.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.14.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.14.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.14.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.14.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.15.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.15.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.15.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.15.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.16.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.16.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.17.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.17.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.17.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.17.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.18.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.18.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.18.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.18.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.19.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.19.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.19.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.19.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.2.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.2.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.2.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.2.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.20.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.20.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.20.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.20.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.21.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.21.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.21.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.21.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.22.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.22.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.22.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.22.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.23.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.23.tid similarity index 97% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.23.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.23.tid index 5b86da8513..f8918fe927 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.23.tid +++ b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.23.tid @@ -24,13 +24,13 @@ description: Switchable page templates, EventCatcherWidget, Rename during import ! Usability Improvements -* <<.link-badge-renamed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/5143">> "references" to "backlinks" in the tiddler info panel +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/5143">> tiddler info panel to change "references" to "backlinks" * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/commit/1546a4a1895b93a47b79c9d37b94be039604443a">> warning message about using the online plugin library with the client-server configuration * <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/commit/9cd5415dfe54b47819920aa3cf6ac2d5e3a9188e">> favicon for the prerelease edition -* <<.link-badge-removed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/22e25c05eb5e5cc5b670a362d1eead1d62dedbb9">> normalize.css's styling of search input fields and <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/commit/9003c810393d90ee20db083fda35b6469acc592a">> to a modern fork of normalize.css -* <<.link-badge-removed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/bb6fee4e1c79a2b1cbf75cd0326ecb8fb1ccb86b">> unneeded editor toolbar buttons when editing SVG tiddlers +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/commit/22e25c05eb5e5cc5b670a362d1eead1d62dedbb9">> normalize.css's styling of search input fields and <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/commit/9003c810393d90ee20db083fda35b6469acc592a">> to a modern fork of normalize.css +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/commit/bb6fee4e1c79a2b1cbf75cd0326ecb8fb1ccb86b">> editor toolbar buttons editing SVG tiddlers by removing unneeded buttons * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/5089">> global keyboard shortcut for switching layouts -* <<.link-badge-hide "https://github.com/TiddlyWiki/TiddlyWiki5/commit/1d7091e637462dcda8c28d660ca42c073f647043">> the `.tid` exporter when more than one tiddler to export +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/commit/1d7091e637462dcda8c28d660ca42c073f647043">> the export menu to hide the `.tid` exporter when there is more than one tiddler to export ! Import Mechanism Improvements @@ -153,7 +153,7 @@ Other improvements: * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4908">> support for an override saver * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4923">> utility CSS classes to replace use of ` ` to introduce visual separation * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4983">> option to configure the tag used for TableOfContents in the menubar -* <<.link-badge-modified "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4971">> the KeyboardWidget to not trap keys if there are no actions to be invoked +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4971">> the KeyboardWidget to not trap keys if there are no actions to be invoked * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4975">> buttons to the Edit Template toolbar for the editor-height and the stamp tool for tiddlers of type ''application/javascript'',''application/json'' and ''application/x-tiddler-dictionary'' * <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4985">> all instance of the [[tabs Macro]] in the core to use the explicitState attribute * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/5000">> support for the meta key as a modifier in actions @@ -238,7 +238,7 @@ Please note that using this plugin does not guarantee compliance with any partic * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4674">> issue with adding tags in $:/Manager * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4686">> edit template "type" dropdown positioning * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4687">> edit template field dropdown positioning -* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4704">> (with <<.link-badge-addendum "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4705">>) syntax error in ScrollableWidget +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4704">> (with additional updates <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4705">>) syntax error in ScrollableWidget * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4780">> problem with headers not being treated case insensitively * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/a2796d89ab3dbf4a15b63b0f4623387fdc6acd5b">> problem with `Content-Type` HTTP header sent as `Content-type` * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/4776">> EntityWidget not refreshing correctly diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.3.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.3.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.3.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.3.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.4.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.4.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.4.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.4.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.5.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.5.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.5.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.5.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.6.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.6.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.6.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.6.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.7.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.7.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.7.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.7.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.8.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.8.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.8.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.8.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.9.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.9.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.1.9.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.1.9.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.0.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.0.tid similarity index 98% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.2.0.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.0.tid index 1562373830..bc912e1fa6 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.0.tid +++ b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.0.tid @@ -123,7 +123,7 @@ For end users, if an upgrade to v5.2.0 causes problems then consult the discussi ! Widget Improvements * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/commit/9eda02868f21e9dd1733ffe26352bd7ac96285b4">> (and [[here|https://github.com/TiddlyWiki/TiddlyWiki5/commit/f87b3bfcdba79b6ad198af286bd827c61044891f]]) new MessageCatcherWidget to catch arbitrary messages and execute action strings -* <<.link-badge-modified "https://github.com/TiddlyWiki/TiddlyWiki5/commit/b9647b2c48152dac069a1099a0822b32375a66cf">> [[FieldManglerWidget]] to ensure it doesn't propogate events that it traps +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/commit/b9647b2c48152dac069a1099a0822b32375a66cf">> [[FieldManglerWidget]] to ensure it doesn't propogate events that it traps * <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/5597">> [[DropzoneWidget]] to optionally invoke actions after the `tm-import-tiddlers` message has been sent, and to specify an optional `contentTypesFilter` which determines which content types are accepted by the dropzone. * <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/commit/07caa16e8714afe9a64eb202375e4a2f95da1508">> [[DropzoneWidget]] to also use the specified deserializer for strings either dropped or pasted on to the dropzone * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/5635">> [[SelectWidget]] refreshing @@ -206,7 +206,7 @@ For end users, if an upgrade to v5.2.0 causes problems then consult the discussi !! [[BibTeX Plugin]] * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/5581">> BibTeX Plugin to report errors more sensibly -* <<.link-badge-modified "https://github.com/TiddlyWiki/TiddlyWiki5/commit/953fb9f237ad78e409c03d4b29b9854d8abf6cdf">> BibTex Plugin to force fieldnames to be lowercase +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/commit/953fb9f237ad78e409c03d4b29b9854d8abf6cdf">> BibTex Plugin to force fieldnames to be lowercase ! Developer Experience Improvements diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.1.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.1.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.2.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.2.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.2.2.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.2.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.3.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.3.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.2.3.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.3.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.4.tid similarity index 97% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.4.tid index dfc51e280a..448c520413 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid +++ b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.4.tid @@ -61,7 +61,7 @@ Improvements to the translation features of TiddlyWiki itself: * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/127f660c91020dcbb43897d954066b31af729e74">> EditTextWidget to remove the default text "Type the text for the tiddler 'foo'" * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7081">> ''focus'' attribute to SelectWidget -* <<.link-badge-removed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/1df4c29d73073788ba3859668112e8bb46171a6c">> restriction of the LetWidget being unable to create variables whose names begin with a dollar sign +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/commit/1df4c29d73073788ba3859668112e8bb46171a6c">> LetWidget to remove restriction of the widget being unable to create variables whose names begin with a dollar sign ! Filter improvements diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.5.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.5.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.2.5.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.5.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.6.tid similarity index 97% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.6.tid index 1b6247b37b..b528977b89 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid +++ b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.6.tid @@ -57,7 +57,7 @@ Improvements to the following translations: * <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7217">> consistency of tiddler deletion by allowing missing tiddlers to be 'deleted', which just results in them being closed * <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/commit/34643a42790777f1b235f57b5093bb29bd0b3a14">> layout switcher to include an optional icon for each layout -* <<.link-badge-removed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/c0615e20ecf7d5d5e66d8a2acd28b80e8d59688d">> [[improvements to table layout|https://github.com/TiddlyWiki/TiddlyWiki5/pull/7010]] from v5.2.5 that have proved to not be backwards compatible +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/c0615e20ecf7d5d5e66d8a2acd28b80e8d59688d">> problems with [[improvements to table layout|https://github.com/TiddlyWiki/TiddlyWiki5/pull/7010]] from v5.2.5 by reverting them * <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7323">> support for `$` HTML entity ! Widget Improvements diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.7.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.2.7.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.0.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.0.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.3.0.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.0.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.1.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.1.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.3.1.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.1.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.2.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.2.tid similarity index 98% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.3.2.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.2.tid index 56f54cbb03..94af01f59b 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.2.tid +++ b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.2.tid @@ -121,7 +121,7 @@ Improvements to the following translations: * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7758">> ordering of Vanilla stylesheets * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/fa9bfa07a095548eb2f8339b0b1b816d2e6794ef">> missing closing tag in tag-pill-inner macro -* <<.link-badge-removed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/7732">> invalid "type" attribute from textarea elements generated by the EditTextWidget +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/7732">> invalid "type" attribute from textarea elements generated by the EditTextWidget * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7749">> editor "type" dropdown state tiddlers * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7712">> handling of "counter-last" variable when appending items with the ListWidget * <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/6088">> upgrade download link in Firefox diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.3.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.3.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.3.3.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.3.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.4.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.4.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.3.4.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.4.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.5.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.5.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.3.5.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.5.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.6.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.6.tid similarity index 100% rename from editions/tw5.com/tiddlers/releasenotes/Release 5.3.6.tid rename to editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.6.tid diff --git a/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.7.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.7.tid new file mode 100644 index 0000000000..1a3bed29a2 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.7.tid @@ -0,0 +1,140 @@ +caption: 5.3.7 +created: 20250707115023707 +description: $:/ControlPanel Wiki Information Tab, Updated [[CodeMirror Plugin]]s to v5.65.19, Support AVIF Images and Bug Fixes +modified: 20250707165341181 +released: 20250707115023707 +tags: ReleaseNotes +title: Release 5.3.7 +type: text/vnd.tiddlywiki + +//[[See GitHub for detailed change history of this release|https://github.com/TiddlyWiki/TiddlyWiki5/compare/v5.3.6...master]]// + +This is a minor bug fix release before introducing the major changes planned for v5.4.0. The changes planned for that release do involve some minor breaks in backwards compatibility so this release is intended to be a stable point for users before they upgrade. + +! New Features + +<<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9130">> The new ~TiddlyWiki Surveys edition at https://tiddlywiki.com/surveys.html is a home for surveys and interviews with the TiddlyWiki community. There will be a new 2025 survey soon, but in the meantime you can read the results of the Great Viral ~TiddlyWiki Interview Project from 2010. + +<<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9099">>The new Wiki Information tab in the control panel provides a convenient way to view and copy key configuration information about your wiki. This is useful for debugging and support purposes. Find it in $:/ControlPanel under the "Info" tab. + +! Translation improvements + +* Chinese +* French +* German +* Greek +* Japanese + +! Plugin Improvements + +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9114">> [[CodeMirror Plugin]] to ~CodeMirror version to 5.65.19 + +! Widget Improvements + +* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8816">> 'disabled' attribute to SelectWidget and BrowseWidget +* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8819">> 'tabindex' attribute to BrowseWidget, RangeWidget, CheckboxWidget and RadioWidget + +! Usability Improvements + +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8783">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/commit/028c80782d105beb90f5d58a7f22e865c7e8c6f4">>) [[Hidden Setting: Default Type for Missing Tiddlers]] +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8837">> [[incorrect|https://localizejs.com/articles/why-using-flag-icons-can-confuse-your-users/]] use of national flags to represent languages +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8078">> vertical spacing of sidebar "Tools" tab when displayed in the story river, and add some utility CSS classes +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9102">> control panel setting to specify the default tiddler info tab + +! Palette Improvements + +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8661">> DiffTextWidget colours to several core palettes +* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8807">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8911">>) Flexoki palette with additional colours +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9007">> Vanilla palette with resolvable #RRGGBB values +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9053">> test case palette entries to the remaining core palettes +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9020">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9020">>) ~SolarizedLight and ~SolarizedDark palettes to improve readability of stability badges and the download button +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9016">> Nord palette to improve accessibility and make the editor border visible +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9009">> ~ContrastDark palette to improve accessibility +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9018">> ~SolarFlare palette, fix plugin button hover and sidebar icon hover +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9017">> Rocker palette, make toolbar buttons visible, sidebar tabs adjusted +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9014">> ~GruvboxDark palette, improve accessibility contrast, add network activity +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9013">> ~DesertSand palette, fix some errors, make values resolvable +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9012">> ~DarkPhotos palette, make colours resolvable +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9011">> Cupertino dark palette +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9010">> ~ContrastLight palette, slightly improved contrast +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9008">> Blanca palette with resolvable values, add missing indices, slight colour adjustments + +! Hackability Improvements + +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8768">> several macros such as [[colour-picker Macro]], [[dumpvariables Macro]], [[image-picker Macro]], [[translink Macro]], [[tree Macro]] and [[list-links-draggable Macro]] to use the newer syntax +* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8780">> rendered plain text template to support more languages +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8821">> the editor link dropdown to use newer syntax +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8911">> support for images in AVIF format +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9076">> a CSS class to the import table +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9098">> a CSS class to help style links in modals + +! Bug Fixes + +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8800">> problem with overwriting shadow tiddlers from plugins that do not have a `plugin-priority` field +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8831">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8835">>) problem with switching language not correctly updating the `lang` attribute of the root `` element +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8842">> bug with refreshing ExternalImages with a `_canonical_uri` field +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8882">> [[unusedtitle Macro]] to trim whitespace from the generated title +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8898">> file extensions and MIME types for font files +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8903">> bug where the wiki would be marked as dirty when a shadow tiddler is changed +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8895">> unnecessary refresh with GenesisWidget +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/d4bc3fcd998902c17cd6bcefdc8d380e5c224458">> [[WidgetMessage: tm-http-request]] to pass custom variables to the progress actions +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8930">> FillWidget to no longer display its content +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8921">> inconsistent whitespace in page toolbar "More" dropdown +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8931">> RSOD with [[contains Operator]] if created field is accessed +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8881">> incorrect .html file extension of exported tiddlers on Android +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8951">> Arabic text using sans-serif font by adding "system-ui" to default font family +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8955">> refresh problem with "save" button +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8721">> [[list-tagged-draggable Macro]] to use the "caption" field if available +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8959">> problem with missing expandable arrow in [[toc-selective-expandable|Table-of-Contents Macros]] +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/5930">> the default value does not work for the CheckboxWidget if it is bound to an index in a data tiddler +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8970">> [[median Operator]] to order values as numbers, not strings +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8958">> red screen of embarrassment error with moduleproperty filter operator +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8946">> red screen of embarrassment when using a [[startup action|StartupActions]] with the [[now Macro]] +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9026">> some download file types not being specified +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9032">> configuration filter in $:/AdvancedSearch "Standard" tab +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9025">> stringification of derived fields for [[tiddlywiki.files Files]] +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8739">> broken tag pill styling in edit mode after v5.3.3 +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9105">> adding external themes to the [[Highlight Plugin]] + +! Node.js Improvements + +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8789">> incorrect redirect when combining a custom [[path-prefix|WebServer Parameter: path-prefix]] with manual HTTP Basic Authentication via the [[/login-basic|WebServer API: Force Basic Authentication Login]] endpoint +* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/55dbce10f461c41240d2c6ee5a49bd6ed0edc15b">> crash loading large files + +! Performance Improvements + +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8952">> plugin editions to use the external core + +! Developer Improvements + +* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8978">> Widget.prototype.addEventListener not overwriting old listeners +* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7596">> configurations for [[dprint|https://dprint.dev/]] and [[eslint|https://eslint.org/]] (partially reverted in [[#8987|https://github.com/TiddlyWiki/TiddlyWiki5/pull/8987]]) + +! Acknowledgements + +[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki: + +<<.contributors """ +bobjtls +DesignThinkerer +flibbles +galenhuntington +hoelzro +IchijikuIchigo +jbaldus +jeremyredhead +jrbntt +jryans +kookma +Leilei332 +linonetwo +matthewsalmon +michaeljmcd +opn +pmario +Rhys-T +saqimtiaz +well-noted +xcazin +yaisog +""">> diff --git a/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.8.tid b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.8.tid new file mode 100644 index 0000000000..c3a6616b08 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/pre-5.4.0/Release 5.3.8.tid @@ -0,0 +1,19 @@ +caption: 5.3.8 +created: 20250807084952911 +description: Bugfix release for 5.3.7 +modified: 20250807100514203 +released: 20250807084952911 +tags: ReleaseNotes +title: Release 5.3.8 +type: text/vnd.tiddlywiki + +\define release-introduction() +This is a bug fix release for TiddlyWiki [[Release 5.3.7]] that fixes problems introduced in that release. +\end release-introduction + +\define banner-credit-user-name() Christian Byron +\define banner-credit-user-link() https://talk.tiddlywiki.org/u/Christian_Byron +\define banner-credit-discussion-link() https://talk.tiddlywiki.org/t/planning-a-v5-3-8-bug-fix-release/12963 +\define banner-credit-permalink() https://raw.githubusercontent.com/TiddlyWiki/TiddlyWiki5/e8a7bbf14e078d83ab6ba55a80cb8d9ba5290303/editions/tw5.com/tiddlers/images/New%20Release%20Banner.png + +<> diff --git a/editions/tw5.com/tiddlers/saving/Encrypted Wiki Import Problems.tid b/editions/tw5.com/tiddlers/saving/Encrypted Wiki Import Problems.tid new file mode 100644 index 0000000000..894336f9ef --- /dev/null +++ b/editions/tw5.com/tiddlers/saving/Encrypted Wiki Import Problems.tid @@ -0,0 +1,22 @@ +created: 20250617180651017 +modified: 20250617183155928 +tags: Encryption +title: Encrypted Wiki Import Problems +type: text/vnd.tiddlywiki + +There have been some problems with ''importing encrypted'' TWs ''into'' version v5.2.0 and v5.2.1. + +While encrypting and decrypting single file wikis with v5.2.0 and v5.2.1 works as intended. There are some problems if encrypted wikis are ''imported'', if those wikis have been ''encrypted with any other version''. + +So if you import a wiki that was been encrypted with eg: TW v5.1.23 into v5.2.0 or v5.2.1 the v5.1.23 wiki could not be decrypted by v5.2.0 or v5.2.1. + +!! Upgrading + +* ''Importing'' encrypted wikis from any v5.1.x, v5.2.x and v5.3.x ''into the latest'' TW versions ''works as expected'' +* The ''only target'' TW versions that can cause ''importing problems'' are ''v5.2.0'' and ''v5.2.1'' + +!! Downgrading + +* Importing an encrypted v5.''3''.x into v5.''2''.x and v5.''3''.x ''works'' as expected +** ''Except'' v5.2.0 and v5.2.1 +* Importing an encrypted v5.''3''.x to v5.''1''.x ''does not work'' diff --git a/editions/tw5.com/tiddlers/saving/Encryption.tid b/editions/tw5.com/tiddlers/saving/Encryption.tid index ccf8e5a83f..0c48d53407 100644 --- a/editions/tw5.com/tiddlers/saving/Encryption.tid +++ b/editions/tw5.com/tiddlers/saving/Encryption.tid @@ -1,10 +1,10 @@ created: 20130825160900000 -modified: 20241106165307259 +modified: 20250617140259415 tags: Features [[Working with TiddlyWiki]] title: Encryption type: text/vnd.tiddlywiki -When used as a single HTML file, TiddlyWiki5 allows content to be encrypted with AES 128 bit encryption in CCM mode using the [[Stanford JavaScript Crypto Library]]. +When used as a single HTML file, TiddlyWiki5 allows content to be encrypted with AES 256 bit encryption in CCM mode using the [[Stanford JavaScript Crypto Library]]. # Switch to the ''Tools'' tab in the sidebar and look for the button with a padlock icon # If the button is labelled <<.icon $:/core/images/unlocked-padlock>> ''set password'' then the current wiki is not encrypted. Clicking the button will prompt for a password that will be used to encrypt subsequent saves @@ -14,5 +14,5 @@ When used as a single HTML file, TiddlyWiki5 allows content to be encrypted with Note that TiddlyWiki has two other unrelated features concerned with passwords/encryption: -* The ability to set a password when saving to TiddlySpot. This is done in the "Saving" tab of ''control panel'' <<.icon $:/core/images/options-button>>. -* The ability to use standard HTTP basic authentication with the [[Node.js|TiddlyWiki on Node.js]] server configuration. This is done on the command line with the ServerCommand. Combined with SSL, this gives the same level of transit encryption as you'd get with online services like Google or Dropbox, but there is no encryption of data on disk +* The ability to set a password when saving to [[Tiddlyhost]]. This is done in the "Saving" tab of ''control panel'' <<.icon $:/core/images/options-button>>. +* The ability to use standard HTTP basic authentication with the [[Node.js|TiddlyWiki on Node.js]] server configuration. This is done on the command line with the ListenCommand. Combined with SSL, this gives the same level of transit encryption as you'd get with online services like Google or Dropbox, but there is no encryption of data on disk diff --git a/editions/tw5.com/tiddlers/saving/Saving with the HTML5 fallback saver.tid b/editions/tw5.com/tiddlers/saving/Saving with the HTML5 fallback saver.tid index 0697401629..acb7a33d31 100644 --- a/editions/tw5.com/tiddlers/saving/Saving with the HTML5 fallback saver.tid +++ b/editions/tw5.com/tiddlers/saving/Saving with the HTML5 fallback saver.tid @@ -1,7 +1,7 @@ created: 20131129092604900 modified: 20200507202835577 tags: -title: Saving with the HTML5 saver +title: Saving with the HTML5 fallback saver type: text/vnd.tiddlywiki See [[Saving with the HTML5 saver]] \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/system/ContributionBanner.tid b/editions/tw5.com/tiddlers/system/ContributionBanner.tid index e7c6ee6510..4e63b40ac9 100644 --- a/editions/tw5.com/tiddlers/system/ContributionBanner.tid +++ b/editions/tw5.com/tiddlers/system/ContributionBanner.tid @@ -12,7 +12,7 @@ https://github.com/TiddlyWiki/TiddlyWiki5/edit/tiddlywiki-com/editions/tw5.com/t <$list filter="[[$:/config/OriginalTiddlerPaths]getindex]" variable="target" > diff --git a/editions/tw5.com/tiddlers/system/Sources.tid b/editions/tw5.com/tiddlers/system/Sources.tid index 267af0648f..a6dd2f3d79 100644 --- a/editions/tw5.com/tiddlers/system/Sources.tid +++ b/editions/tw5.com/tiddlers/system/Sources.tid @@ -37,7 +37,7 @@ title: $:/editions/tw5.com/TiddlerInfo/Sources \end \procedure make-pr-maker-link() -encodeuricomponent[]addprefix[https://saqimtiaz.github.io/tw5-docs-pr-maker/#]] }}} +encodeuricomponent[]addprefix[https://edit.tiddlywiki.com/#]] }}} class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer" diff --git a/editions/tw5.com/tiddlers/system/TableOfContents.tid b/editions/tw5.com/tiddlers/system/TableOfContents.tid index b90e0c5935..69b4cb8cbd 100644 --- a/editions/tw5.com/tiddlers/system/TableOfContents.tid +++ b/editions/tw5.com/tiddlers/system/TableOfContents.tid @@ -1,6 +1,6 @@ caption: {{$:/language/SideBar/Contents/Caption}} created: 20140809114010378 -list: HelloThere [[Quick Start]] Learning [[Working with TiddlyWiki]] [[Customise TiddlyWiki]] Features Filters Languages Editions Plugins Platforms Reference Community About +list: Welcome HelloThere [[Quick Start]] Learning [[Working with TiddlyWiki]] [[Customise TiddlyWiki]] Features Filters Languages Editions Plugins Platforms Reference Community About list-before: modified: 20230322150307580 tags: $:/tags/SideBar diff --git a/editions/tw5.com/tiddlers/system/download-empty.tid b/editions/tw5.com/tiddlers/system/download-empty.tid index f49b9b7940..f8c2393904 100644 --- a/editions/tw5.com/tiddlers/system/download-empty.tid +++ b/editions/tw5.com/tiddlers/system/download-empty.tid @@ -2,7 +2,7 @@ title: $:/editions/tw5.com/download-empty code-body: yes \procedure saveTiddlerFilter() -[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] +[[$:/core]] [[$:/isEncrypted]] [[$:/themes/tiddlywiki/snowwhite]] [[$:/themes/tiddlywiki/vanilla]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] \end \procedure savingEmpty() yes diff --git a/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_TiddlerTemplate.tid b/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_TiddlerTemplate.tid index 245e7cbdb3..6f19a2ab16 100644 --- a/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_TiddlerTemplate.tid +++ b/editions/tw5.com/tiddlers/systemtags/SystemTag_ $__tags_ClassFilters_TiddlerTemplate.tid @@ -1,7 +1,7 @@ caption: $:/tags/ClassFilters/TiddlerTemplate created: 20221020035738692 -description: marks filters evaluated to dynamically add classes to the page template. -modified: 20230326153057521 +description: marks filters evaluated to dynamically add classes to the tiddler template. +modified: 20250608225016149 tags: SystemTags title: SystemTag: $:/tags/ClassFilters/TiddlerTemplate type: text/vnd.tiddlywiki diff --git a/editions/tw5.com/tiddlers/webserver/WebServer API_ Get All Tiddlers.tid b/editions/tw5.com/tiddlers/webserver/WebServer API_ Get All Tiddlers.tid index 9c38f61573..4abcc3ec69 100644 --- a/editions/tw5.com/tiddlers/webserver/WebServer API_ Get All Tiddlers.tid +++ b/editions/tw5.com/tiddlers/webserver/WebServer API_ Get All Tiddlers.tid @@ -22,7 +22,7 @@ In order to avoid denial of service attacks with malformed filters in the defaul To enable a particular filter, create a tiddler with the title "$:/config/Server/ExternalFilters/" concatenated with the filter text, and the text field set to "yes". For example, the TiddlyWeb plugin includes the following shadow tiddler to enable the filter that it requires: ``` -title: $:/config/Server/ExternalFilters/[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[[$:/library/sjcl.js]] -[[$:/core]] +title: $:/config/Server/ExternalFilters/[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] -[[$:/library/sjcl.js]] -[[$:/core]] text: yes ``` diff --git a/editions/tw5.com/tiddlers/webserver/WebServer API_ Get File.tid b/editions/tw5.com/tiddlers/webserver/WebServer API_ Get File.tid index cebac25019..bd99b1a3c2 100644 --- a/editions/tw5.com/tiddlers/webserver/WebServer API_ Get File.tid +++ b/editions/tw5.com/tiddlers/webserver/WebServer API_ Get File.tid @@ -1,5 +1,5 @@ created: 20181002123907518 -modified: 20181002124345482 +modified: 20250605000000000 tags: [[WebServer API]] title: WebServer API: Get File type: text/vnd.tiddlywiki @@ -15,11 +15,22 @@ Parameters: * ''pathname'' - URI encoded path to the file +Headers: + +* ''Range'' - <<.from-version "5.3.7">> (optional) Request specific byte ranges using the format `bytes=start-end`. Supports partial content delivery for media streaming. + Response: * 200 OK *> `Content-Type: ` (determined from file extension) -*> Body: data retrieved from file +*> `Content-Length: ` +*> `Accept-Ranges: bytes` +*> Body: complete file data +* 206 Partial Content (when Range header is provided) +*> `Content-Type: ` (determined from file extension) +*> `Content-Length: ` +*> `Content-Range: bytes -/` +*> `Accept-Ranges: bytes` +*> Body: requested byte range data * 403 Forbidden * 404 Not Found - diff --git a/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid b/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid index d74c095751..d1e94283c6 100644 --- a/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/ButtonWidget.tid @@ -1,6 +1,6 @@ caption: button created: 20131024141900000 -modified: 20231113093304323 +modified: 20250720025737830 tags: Widgets TriggeringWidgets title: ButtonWidget type: text/vnd.tiddlywiki @@ -9,11 +9,11 @@ type: text/vnd.tiddlywiki The button widget displays an HTML ` ",r=f.phrase("Replace?"),t=[function(){u(e)},l,function(){C(f,p,i)}],o.openConfirm?o.openConfirm(n,t):confirm(r)&&t[0]())},u=function(n){c.replace("string"==typeof p?i:i.replace(/\$(\d)/g,function(e,o){return n[o]})),l()},l())}))}))}d.defineOption("search",{bottom:!1}),d.commands.find=function(e){v(e),n(e)},d.commands.findPersistent=function(e){v(e),n(e,!1,!0)},d.commands.findPersistentNext=function(e){n(e,!1,!0,!0)},d.commands.findPersistentPrev=function(e){n(e,!0,!0,!0)},d.commands.findNext=n,d.commands.findPrev=function(e){n(e,!0)},d.commands.clearSearch=v,d.commands.replace=t,d.commands.replaceAll=function(e){t(e,!0)}}); +!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror"),require("./searchcursor"),require("../dialog/dialog")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./searchcursor","../dialog/dialog"],e):e(CodeMirror)}(function(f){"use strict";function r(){this.posFrom=this.posTo=this.lastQuery=this.query=null,this.overlay=null}function p(e){return e.state.search||(e.state.search=new r)}function n(e){return"string"==typeof e&&e==e.toLowerCase()}function d(e,r,o){return e.getSearchCursor(r,o,{caseFold:n(r),multiline:!0})}function m(e,r,o,t,n){e.openDialog?e.openDialog(r,n,{value:t,selectValueOnOpen:!0,bottom:e.options.search.bottom}):n(prompt(o,t))}function h(e){return e.replace(/\\([nrt\\])/g,function(e,r){return"n"==r?"\n":"r"==r?"\r":"t"==r?"\t":"\\"==r?"\\":e})}function a(e){var r=e.match(/^\/(.*)\/([a-z]*)$/);if(r)try{e=new RegExp(r[1],-1==r[2].indexOf("i")?"":"i")}catch(e){}else e=h(e);return e=("string"==typeof e?""==e:e.test(""))?/x^/:e}function y(e,r,o){var t;r.queryText=o,r.query=a(o),e.removeOverlay(r.overlay,n(r.query)),r.overlay=(t=r.query,o=n(r.query),"string"==typeof t?t=new RegExp(t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),o?"gi":"g"):t.global||(t=new RegExp(t.source,t.ignoreCase?"gi":"g")),{token:function(e){t.lastIndex=e.pos;var r=t.exec(e.string);if(r&&r.index==e.pos)return e.pos+=r[0].length||1,"searching";r?e.pos=r.index:e.skipToEnd()}}),e.addOverlay(r.overlay),e.showMatchesOnScrollbar&&(r.annotate&&(r.annotate.clear(),r.annotate=null),r.annotate=e.showMatchesOnScrollbar(r.query,n(r.query)))}function o(n,r,e,o){var t=p(n);if(t.query)return g(n,r);var a,i,s,c,l,u=n.getSelection()||t.lastQuery;u instanceof RegExp&&"x^"==u.source&&(u=null),e&&n.openDialog?(a=null,i=function(e,r){f.e_stop(r),e&&(e!=t.queryText&&(y(n,t,e),t.posFrom=t.posTo=n.getCursor()),a&&(a.style.opacity=1),g(n,r.shiftKey,function(e,r){var o;r.line<3&&document.querySelector&&(o=n.display.wrapper.querySelector(".CodeMirror-dialog"))&&o.getBoundingClientRect().bottom-4>n.cursorCoords(r,"window").top&&((a=o).style.opacity=.4)}))},e=C(s=n),c=u,l=function(e,r){var o=f.keyName(e),t=n.getOption("extraKeys"),t=t&&t[o]||f.keyMap[n.getOption("keyMap")][o];"findNext"==t||"findPrev"==t||"findPersistentNext"==t||"findPersistentPrev"==t?(f.e_stop(e),y(n,p(n),r),n.execCommand(t)):"find"!=t&&"findPersistent"!=t||(f.e_stop(e),i(r,e))},s.openDialog(e,i,{value:c,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){v(s)},onKeyDown:l,bottom:s.options.search.bottom}),o&&u&&(y(n,t,u),g(n,r))):m(n,C(n),"Search for:",u,function(e){e&&!t.query&&n.operation(function(){y(n,t,e),t.posFrom=t.posTo=n.getCursor(),g(n,r)})})}function g(o,t,n){o.operation(function(){var e=p(o),r=d(o,e.query,t?e.posFrom:e.posTo);(r.find(t)||(r=d(o,e.query,t?f.Pos(o.lastLine()):f.Pos(o.firstLine(),0))).find(t))&&(o.setSelection(r.from(),r.to()),o.scrollIntoView({from:r.from(),to:r.to()},20),e.posFrom=r.from(),e.posTo=r.to(),n&&n(r.from(),r.to()))})}function v(r){r.operation(function(){var e=p(r);e.lastQuery=e.query,e.query&&(e.query=e.queryText=null,r.removeOverlay(e.overlay),e.annotate&&(e.annotate.clear(),e.annotate=null))})}function x(e,r){var o,t=e?document.createElement(e):document.createDocumentFragment();for(o in r)t[o]=r[o];for(var n=2;nt.length-n)break;(!r||l>r.index+r[0].length)&&(r=o),i=o.index+1}return r}function O(t,e,n){e=d(e,"g");for(var r=n.line,i=n.ch,o=t.firstLine();o<=r;r--,i=-1){var l=t.getLine(r),h=C(l,e,i<0?0:l.length-i);if(h)return{from:L(r,h.index),to:L(r,h.index+h[0].length),match:h}}}function b(t,e,n,r){if(t.length==e.length)return n;for(var i=0,o=n+Math.max(0,t.length-e.length);;){if(i==o)return i;var l=i+o>>1,h=r(t.slice(0,l)).length;if(h==n)return l;nt.length-n)break;(!i||h>i.index+i[0].length)&&(i=o),r=o.index+1}return i}function O(t,e,n){e=m(e,"g");for(var i=n.line,r=n.ch,o=t.firstLine();o<=i;i--,r=-1){var h=t.getLine(i),h=L(h,e,r<0?0:h.length-r);if(h)return{from:x(i,h.index),to:x(i,h.index+h[0].length),match:h}}}function h(t,e,n){if(!d(e))return O(t,e,n);e=m(e,"gm");for(var i=1,r=t.getLine(n.line).length-n.ch,o=n.line,h=t.firstLine();h<=o;){for(var l=0;l>1,l=i(t.slice(0,h)).length;if(l==n)return h;n(this.doc.getLine(e.line)||"").length&&(e.ch=0,e.line++)),0!=r.cmpPos(e,this.doc.clipPos(e))))return this.atOccurrence=!1;var e=this.matches(t,e);return this.afterEmptyMatch=e&&0==r.cmpPos(e.from,e.to),e?(this.pos=e,this.atOccurrence=!0,this.pos.match||!0):(e=x(t?this.doc.firstLine():this.doc.lastLine()+1,0),this.pos={from:e,to:e},this.atOccurrence=!1)},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t,e){this.atOccurrence&&(t=r.splitLines(t),this.doc.replaceRange(t,this.pos.from,this.pos.to,e),this.pos.to=x(this.pos.from.line+t.length-1,t[t.length-1].length+(1==t.length?this.pos.from.ch:0)))}},r.defineExtension("getSearchCursor",function(t,e,n){return new i(this.doc,t,e,n)}),r.defineDocExtension("getSearchCursor",function(t,e,n){return new i(this,t,e,n)}),r.defineExtension("selectMatches",function(t,e){for(var n=[],i=this.getSearchCursor(t,this.getCursor("from"),e);i.findNext()&&!(0 stream.pos) { stream.pos = i; return null; } - stream.pos = l; - return "trailingspace"; - }, - name: "trailingspace" - }); - }); -}); +!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(o){o.defineOption("showTrailingSpace",!1,function(e,i,n){(n=n==o.Init?!1:n)&&!i?e.removeOverlay("trailingspace"):!n&&i&&e.addOverlay({token:function(e){for(var i=e.string.length,n=i;n&&/\s/.test(e.string.charAt(n-1));--n);return n>e.pos?(e.pos=n,null):(e.pos=i,"trailingspace")},name:"trailingspace"})})}); \ No newline at end of file diff --git a/plugins/tiddlywiki/codemirror/files/addon/dialog/dialog.css b/plugins/tiddlywiki/codemirror/files/addon/dialog/dialog.css index 677c078387..9f33bead93 100755 --- a/plugins/tiddlywiki/codemirror/files/addon/dialog/dialog.css +++ b/plugins/tiddlywiki/codemirror/files/addon/dialog/dialog.css @@ -1,32 +1 @@ -.CodeMirror-dialog { - position: absolute; - left: 0; right: 0; - background: inherit; - z-index: 15; - padding: .1em .8em; - overflow: hidden; - color: inherit; -} - -.CodeMirror-dialog-top { - border-bottom: 1px solid #eee; - top: 0; -} - -.CodeMirror-dialog-bottom { - border-top: 1px solid #eee; - bottom: 0; -} - -.CodeMirror-dialog input { - border: none; - outline: none; - background: transparent; - width: 20em; - color: inherit; - font-family: monospace; -} - -.CodeMirror-dialog button { - font-size: 70%; -} +.CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:none;outline:0;background:0 0;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%} \ No newline at end of file diff --git a/plugins/tiddlywiki/codemirror/files/addon/dialog/dialog.js b/plugins/tiddlywiki/codemirror/files/addon/dialog/dialog.js index 8ae3232182..8d99f87dbf 100755 --- a/plugins/tiddlywiki/codemirror/files/addon/dialog/dialog.js +++ b/plugins/tiddlywiki/codemirror/files/addon/dialog/dialog.js @@ -1 +1 @@ -!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(s){function f(e,o,n){var t=e.getWrapperElement(),i=t.appendChild(document.createElement("div"));return i.className=n?"CodeMirror-dialog CodeMirror-dialog-bottom":"CodeMirror-dialog CodeMirror-dialog-top","string"==typeof o?i.innerHTML=o:i.appendChild(o),s.addClass(t,"dialog-opened"),i}function p(e,o){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=o}s.defineExtension("openDialog",function(e,o,n){n=n||{},p(this,null);var t=f(this,e,n.bottom),i=!1,r=this;function u(e){if("string"==typeof e)a.value=e;else{if(i)return;i=!0,s.rmClass(t.parentNode,"dialog-opened"),t.parentNode.removeChild(t),r.focus(),n.onClose&&n.onClose(t)}}var l,a=t.getElementsByTagName("input")[0];return a?(a.focus(),n.value&&(a.value=n.value,!1!==n.selectValueOnOpen&&a.select()),n.onInput&&s.on(a,"input",function(e){n.onInput(e,a.value,u)}),n.onKeyUp&&s.on(a,"keyup",function(e){n.onKeyUp(e,a.value,u)}),s.on(a,"keydown",function(e){n&&n.onKeyDown&&n.onKeyDown(e,a.value,u)||((27==e.keyCode||!1!==n.closeOnEnter&&13==e.keyCode)&&(a.blur(),s.e_stop(e),u()),13==e.keyCode&&o(a.value,e))}),!1!==n.closeOnBlur&&s.on(t,"focusout",function(e){null!==e.relatedTarget&&u()})):(l=t.getElementsByTagName("button")[0])&&(s.on(l,"click",function(){u(),r.focus()}),!1!==n.closeOnBlur&&s.on(l,"blur",u),l.focus()),u}),s.defineExtension("openConfirm",function(e,o,n){p(this,null);var t=f(this,e,n&&n.bottom),i=t.getElementsByTagName("button"),r=!1,u=this,l=1;function a(){r||(r=!0,s.rmClass(t.parentNode,"dialog-opened"),t.parentNode.removeChild(t),u.focus())}i[0].focus();for(var c=0;c span::selection,.CodeMirror-line > span > span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line > span::-moz-selection,.CodeMirror-line > span > span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:none} +.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:0;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:0}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0} \ No newline at end of file diff --git a/plugins/tiddlywiki/codemirror/files/codemirror.js b/plugins/tiddlywiki/codemirror/files/codemirror.js index cd4b00d89d..1eb909c0ff 100755 --- a/plugins/tiddlywiki/codemirror/files/codemirror.js +++ b/plugins/tiddlywiki/codemirror/files/codemirror.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).CodeMirror=t()}(this,function(){"use strict";var e=navigator.userAgent,t=navigator.platform,d=/gecko\/\d/i.test(e),n=/MSIE \d/.test(e),r=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),i=/Edge\/(\d+)/.exec(e),w=n||r||i,v=w&&(n?document.documentMode||6:+(i||r)[1]),f=!i&&/WebKit\//.test(e),r=f&&/Qt\/\d+\.\d+/.test(e),o=!i&&/Chrome\//.test(e),p=/Opera\//.test(e),c=/Apple Computer/.test(navigator.vendor),l=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),u=/PhantomJS/.test(e),s=!i&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),a=/Android/.test(e),h=s||a||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),g=s||/Mac/.test(t),m=/\bCrOS\b/.test(e),y=/win/i.test(t),e=p&&e.match(/Version\/(\d*\.\d*)/);(e=e&&Number(e[1]))&&15<=e&&(f=!(p=!1));var b=g&&(r||p&&(null==e||e<12.11)),x=d||w&&9<=v;function C(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var S,L=function(e,t){var n=e.className,r=C(t).exec(n);r&&(t=n.slice(r.index+r[0].length),e.className=n.slice(0,r.index)+(t?r[1]+t:""))};function k(e){for(var t=e.childNodes.length;0t)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:oe=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:oe=i)}return null!=r?r:oe}var se,ae,ue,ce,he,de,fe,pe=(se="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",ae="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",ue=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,ce=/[stwN]/,he=/[LRr]/,de=/[Lb1n]/,fe=/[1n]/,function(e,t){var n="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!ue.test(e))return!1;for(var r,i=e.length,o=[],l=0;l=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t=e.first&&tn?rt(n,$e(e,n).text.length):(e=$e(e,(n=t).line).text.length,null==(t=n.ch)||e=this.string.length},_e.prototype.sol=function(){return this.pos==this.lineStart},_e.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},_e.prototype.next=function(){if(this.post},_e.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},_e.prototype.skipToEnd=function(){this.pos=this.string.length},_e.prototype.skipTo=function(e){e=this.string.indexOf(e,this.pos);if(-1e.options.maxHighlightLength&&je(e.doc.mode,r.state),o=pt(e,t,r),i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))),t.styles}function mt(n,r,e){var t=n.doc,i=n.display;if(!t.mode.startState)return new ft(t,!0,r);var o=function(e,t,n){for(var r,i,o=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;lt.first&&$e(t,o-1).stateAfter,s=l?ft.fromSaved(t,l,o):new ft(t,Ye(t.mode),o);return t.iter(o,r,function(e){vt(n,e.text,s);var t=s.line;e.stateAfter=t==r-1||t%5==0||t>=i.viewFrom&&tt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}ft.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},ft.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},ft.prototype.nextLine=function(){this.line++,0e.options.maxHighlightLength?(s=!1,l&&vt(e,t,r,c.pos),c.pos=t.length,null):Ct(bt(n,c,r.state,h),o);if(!h||(d=h[0].name)&&(f="m-"+(f?d+" "+f:d)),!s||u!=f){for(;a=t:l.to>t),(r=r||[]).push(new Tt(s,l.from,o?null:l.to)))}return r}(n,i,e),s=function(e,t,n){var r;if(e)for(var i=0;i=t:l.to>t))&&(l.from!=t||"bookmark"!=s.type||n&&!l.marker.insertLeft)||(o=null==l.from||(s.inclusiveLeft?l.from<=t:l.frome.lastLine())return t;var n,r=$e(e,t);if(!Ut(e,r))return t;for(;n=It(r);)r=n.find(1,!0).line;return Je(r)+1}function Ut(e,t){var n=kt&&t.markedSpans;if(n)for(var r,i=0;in.maxLineLength&&(n.maxLineLength=t,n.maxLine=e)})}var Xt=function(e,t,n){this.text=e,Dt(this,t),this.height=n?n(this):1};Xt.prototype.lineNo=function(){return Je(this)},ke(Xt);var Yt={},_t={};function $t(e,t){if(!e||/^\s*$/.test(e))return null;t=t.addModeClass?_t:Yt;return t[e]||(t[e]=e.replace(/\S+/g,"cm-$&"))}function qt(e,t){var n=N("span",null,null,f?"padding-right: .1px":null),r={pre:N("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0;r.pos=0,r.addToken=Qt,function(e){if(null!=He)return He;var t=T(e,document.createTextNode("AخA")),n=S(t,0,1).getBoundingClientRect(),t=S(t,1,2).getBoundingClientRect();return k(e),n&&n.left!=n.right&&(He=t.right-n.right<3)}(e.display.measure)&&(l=me(o,e.doc.direction))&&(r.addToken=function(h,d){return function(e,t,n,r,i,o,l){n=n?n+" cm-force-border":"cm-force-border";for(var s=e.pos,a=s+t.length;;){for(var u=void 0,c=0;cs&&u.from<=s);c++);if(u.to>=a)return h(e,t,n,r,i,o,l);h(e,t.slice(0,u.to-s),n,r,null,o,l),r=null,t=t.slice(u.to-s),s=u.to}}}(r.addToken,l)),r.map=[],function(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(!r){for(var l=1;lg||S.collapsed&&C.to==g&&C.from==g)){if(null!=C.to&&C.to!=g&&y>C.to&&(y=C.to,c=""),S.className&&(u+=" "+S.className),S.css&&(a=(a?a+";":"")+S.css),S.startStyle&&C.from==g&&(h+=" "+S.startStyle),S.endStyle&&C.to==y&&(w=w||[]).push(S.endStyle,C.to),S.title&&((f=f||{}).title=S.title),S.attributes)for(var L in S.attributes)(f=f||{})[L]=S.attributes[L];S.collapsed&&(!d||Ft(d.marker,S)<0)&&(d=C)}else C.from>g&&y>C.from&&(y=C.from)}if(w)for(var k=0;kn)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Ln(e,t,n,r){return Mn(e,Tn(e,t),n,r)}function kn(e,t){if(t>=e.display.viewFrom&&t=e.lineN&&tt)&&(i=(o=a-s)-1,a<=t&&(l="right")),null!=i){if(r=e[u+2],s==a&&n==(r.insertLeft?"left":"right")&&(l=n),"left"==n&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)r=e[2+(u-=3)],l="left";if("right"==n&&i==a-s)for(;u=i.text.length?(t=i.text.length,u="before"):t<=0&&(t=0,u="after"),!a)return s("before"==u?t-1:t,"before"==u);function c(e,t,n){return s(n?e-1:e,1==a[t].level!=n)}var h=le(a,t,u),e=oe,h=c(t,h,"before"==u);return null!=e&&(h.other=c(t,e,"before"!=u)),h}function Gn(e,t){var n=0;t=ct(e.doc,t),e.options.lineWrapping||(n=_n(e.display)*t.ch);t=$e(e.doc,t.line),e=Vt(t)+vn(e.display);return{left:n,right:n,top:e,bottom:e+t.height}}function Un(e,t,n,r,i){n=rt(e,t,n);return n.xRel=i,r&&(n.outside=r),n}function Vn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Un(r.first,0,null,-1,-1);var i=et(r,n),o=r.first+r.size-1;if(o=a||f.to<=s||(d=1!=f.level,d=Mn(e,r,d?Math.min(a,f.to)-1:Math.max(s,f.from)).right,d=da&&(u={from:u.from,to:a,level:u.level});return u}:function(n,r,i,o,l,s,a){var e=ie(function(e){var t=l[e],e=1!=t.level;return Xn(Bn(n,rt(i,e?t.to:t.from,e?"before":"after"),"line",r,o),s,a,!0)},0,l.length-1),t=l[e];{var u;0a&&(t=l[e-1]))}return t})(n,e,t,o,c,r,i),u=1!=f.level,s=u?f.from:f.to-1,a=u?f.to:f.from-1);var h=null,d=null,c=ie(function(e){var t=Mn(n,o,e);return t.top+=l,t.bottom+=l,Xn(t,r,i,!1)&&(t.top<=i&&t.left<=r&&(h=e,d=t),1)},s,a),f=!1;{var p,g;d?(p=r-d.left=u.bottom?1:0)}return c=re(e.text,c,1),Un(t,c,g,f,r-p)}(e,l,i,t,n),a=function(e,t){var n,r=kt&&e.markedSpans;if(r)for(var i=0;it)&&(!n||Ft(n,o.marker)<0)&&(n=o.marker)}return n}(l,s.ch+(0r},e,i)}}function jn(e,t,n,r){return Kn(e,t,n=n||Tn(e,t),In(e,t,Mn(e,n,r),"line").top)}function Xn(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function Yn(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Nn){Nn=M("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Nn.appendChild(document.createTextNode("x")),Nn.appendChild(M("br"));Nn.appendChild(document.createTextNode("x"))}T(e.measure,Nn);var n=Nn.offsetHeight/50;return 3=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;rt)&&(l.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=l.viewTo?kt&&Bt(e.doc,t)l.viewFrom?rr(e):(l.viewFrom+=r,l.viewTo+=r):t<=l.viewFrom&&n>=l.viewTo?rr(e):t<=l.viewFrom?(i=ir(e,n,n+r,1))?(l.view=l.view.slice(i.index),l.viewFrom=i.lineN,l.viewTo+=r):rr(e):n>=l.viewTo?(o=ir(e,t,t,-1))?(l.view=l.view.slice(0,o.index),l.viewTo=o.lineN):rr(e):(i=ir(e,t,t,-1),o=ir(e,n,n+r,1),i&&o?(l.view=l.view.slice(0,i.index).concat(tn(e,i.lineN,o.lineN)).concat(l.view.slice(o.index)),l.viewTo+=r):rr(e));e=l.externalMeasured;e&&(n=i.lineN&&t=r.viewTo||(null==(t=r.view[er(e,t)]).node||-1==R(t=t.changes||(t.changes=[]),n)&&t.push(n))}function rr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function ir(e,t,n,r){var i,o=er(e,t),l=e.display.view;if(!kt||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var s=e.display.viewFrom,a=0;a=e.display.viewTo||n.to().linet||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),1==l.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(C,g||0,null==m?b:m,function(e,t,n,r){var i,o,l,s,a="ltr"==n,u=w(e,a?"left":"right"),c=w(t-1,a?"right":"left"),h=null==g&&0==e,d=null==m&&t==b,f=0==r,p=!C||r==C.length-1;c.top-u.top<=3?(i=(k?d:h)&&p,r=(k?h:d)&&f?S:(a?u:c).left,i=i?L:(a?c:u).right,T(r,u.top,i-r,u.bottom)):(n=a?(o=k&&h&&f?S:u.left,l=k?L:x(e,n,"before"),s=k?S:x(t,n,"after"),k&&d&&p?L:c.right):(o=k?x(e,n,"before"):S,l=!k&&h&&f?L:u.right,s=!k&&d&&p?S:c.left,k?x(t,n,"after"):L),T(o,u.top,l-o,u.bottom),u.bottome.display.sizerWidth&&((a=Math.ceil(a/_n(e.display)))>e.display.maxLineLength&&(e.display.maxLineLength=a,e.display.maxLine=o.line,e.display.maxLineChanged=!0))}}}function mr(e){if(e.widgets)for(var t=0;t=r&&(o=et(t,Vt($e(t,n))-e.wrapper.clientHeight),r=n)),{from:o,to:Math.max(r,o+1)}}function yr(e,t){var n=e.display,r=Yn(e.display);t.top<0&&(t.top=0);var i=(e.curOp&&null!=e.curOp.scrollTop?e.curOp:n.scroller).scrollTop,o=Cn(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+yn(n),a=t.tops-r;t.topi+o&&((u=Math.min(t.top,(r?s:t.bottom)-o))!=i&&(l.scrollTop=u));var i=e.options.fixedGutter?0:n.gutters.offsetWidth,u=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-i,e=xn(e)-n.gutters.offsetWidth,n=t.right-t.left>e;return n&&(t.right=t.left+e),t.left<10?l.scrollLeft=0:t.lefte+u-3&&(l.scrollLeft=t.right+(n?0:10)-e),l}function br(e,t){null!=t&&(Cr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc:e.curOp).scrollTop+t)}function wr(e){Cr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function xr(e,t,n){null==t&&null==n||Cr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Cr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Sr(e,Gn(e,t.from),Gn(e,t.to),t.margin))}function Sr(e,t,n,r){r=yr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});xr(e,r.scrollLeft,r.scrollTop)}function Lr(e,t){Math.abs(e.doc.scrollTop-t)<2||(d||Kr(e,{top:t}),kr(e,t,!0),d&&Kr(e),zr(e,100))}function kr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),e.display.scroller.scrollTop==t&&!n||(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Tr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,Yr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Mr(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+yn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+wn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}e=function(e,t,n){this.cm=n;var r=this.vert=M("div",[M("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=M("div",[M("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),ye(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),ye(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,w&&v<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};e.prototype.update=function(e){var t,n=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;return r?(this.vert.style.display="block",this.vert.style.bottom=n?i+"px":"0",t=e.viewHeight-(n?i:0),this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+t)+"px"):(this.vert.style.display="",this.vert.firstChild.style.height="0"),n?(this.horiz.style.display="block",this.horiz.style.right=r?i+"px":"0",this.horiz.style.left=e.barLeft+"px",t=e.viewWidth-e.barLeft-(r?i:0),this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+t)+"px"):(this.horiz.style.display="",this.horiz.firstChild.style.width="0"),!this.checkedZeroWidth&&0=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new Gr(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}(t[n]);for(var r=0;r(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null==i||u||(t=M("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-vn(e.display))+"px;\n height: "+(t.bottom-t.top+wn(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;"),e.display.lineSpace.appendChild(t),t.scrollIntoView(i),e.display.lineSpace.removeChild(t)))}(t,i))}var o=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(o)for(var s=0;s=l.display.viewTo||(s=+new Date+l.options.workTime,a=mt(l,c.highlightFrontier),u=[],c.iter(a.line,Math.min(c.first+c.size,l.display.viewTo+500),function(e){if(a.line>=l.display.viewFrom){var t=e.styles,n=e.text.length>l.options.maxHighlightLength?je(c.mode,a.state):null,r=pt(l,e,a,!0);n&&(a.state=n),e.styles=r.styles;n=e.styleClasses,r=r.classes;r?e.styleClasses=r:n&&(e.styleClasses=null);for(var i=!t||t.length!=e.styles.length||n!=r&&(!n||!r||n.bgClass!=r.bgClass||n.textClass!=r.textClass),o=0;!i&&os)return zr(l,l.options.workDelay),!0}),c.highlightFrontier=a.line,c.modeFrontier=Math.max(c.modeFrontier,a.line),u.length&&Er(l,function(){for(var e=0;e=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==or(e))return!1;_r(e)&&(rr(e),t.dims=$n(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFroml&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),kt&&(o=Bt(e.doc,o),l=Gt(e.doc,l));var s=o!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;r=o,i=l,0==(l=(o=e).display).view.length||r>=l.viewTo||i<=l.viewFrom?(l.view=tn(o,r,i),l.viewFrom=r):(l.viewFrom>r?l.view=tn(o,r,l.viewFrom).concat(l.view):l.viewFromi&&(l.view=l.view.slice(0,er(o,i)))),l.viewTo=i,n.viewOffset=Vt($e(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";o=or(e);if(!s&&0==o&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;l=function(e){if(e.hasFocus())return null;var t=O();if(!t||!A(e.display.lineDiv,t))return null;var n={activeElt:t};return!window.getSelection||(t=window.getSelection()).anchorNode&&t.extend&&A(e.display.lineDiv,t.anchorNode)&&(n.anchorNode=t.anchorNode,n.anchorOffset=t.anchorOffset,n.focusNode=t.focusNode,n.focusOffset=t.focusOffset),n}(e);return 4=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!Ur(e,t))break;gr(e);var i=Mr(e);lr(e),Nr(e,i),Xr(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Kr(e,t){var n=new Gr(e,t);Ur(e,n)&&(gr(e),Vr(e,n),t=Mr(e),lr(e),Nr(e,t),Xr(e,t),n.finish())}function jr(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function Xr(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+wn(e)+"px"}function Yr(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=qn(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",l=0;ll.clientWidth,a=l.scrollHeight>l.clientHeight;if(r&&s||i&&a){if(i&&g&&f)e:for(var u=t.target,c=o.view;u!=l;u=u.parentNode)for(var h=0;hs-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=(a=i).lastOp==r?(xi(a.done),Y(a.done)):a.done.length&&!Y(a.done).ranges?Y(a.done):1i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,l||xe(e,"historyAdded")}function Si(e,t,n,r){var i,o,l,s=e.history,a=r&&r.origin;n==s.lastSelOp||a&&s.lastSelOrigin==a&&(s.lastModTime==s.lastSelTime&&s.lastOrigin==a||(i=e,o=a,l=Y(s.done),e=t,"*"==(o=o.charAt(0))||"+"==o&&l.ranges.length==e.ranges.length&&l.somethingSelected()==e.somethingSelected()&&new Date-i.history.lastSelTime<=(i.cm?i.cm.options.historyEventDelay:500)))?s.done[s.done.length-1]=t:Li(t,s.done),s.lastSelTime=+new Date,s.lastSelOrigin=a,s.lastSelOp=n,r&&!1!==r.clearRedo&&xi(s.undone)}function Li(e,t){var n=Y(t);n&&n.ranges&&n.equals(e)||t.push(e)}function ki(t,n,e,r){var i=n["spans_"+t.id],o=0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,r),function(e){e.markedSpans&&((i=i||(n["spans_"+t.id]={}))[o]=e.markedSpans),++o})}function Ti(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var r=[],i=0;i=t.ch:s.to>t.ch))){if(i&&(xe(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(a.atomic){if(n){var h=a.find(r<0?1:-1),s=void 0;if((r<0?c:u)&&(h=Ui(e,h,-r,h&&h.line==t.line?o:null)),h&&h.line==t.line&&(s=it(h,n))&&(r<0?s<0:0e.first?ct(e,rt(t.line-1)):null:0e.lastLine()||(t.from.linei&&(t={from:t.from,to:rt(i,$e(e,i).text.length),text:[t.text[0]],origin:t.origin}),t.removed=qe(e,t.from,t.to),n=n||ci(e,t),e.cm?function(e,t,n){var r=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=Je(zt($e(r,o.line))),r.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0}));-1i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiert.display.maxLineLength&&(t.display.maxLine=u,t.display.maxLineLength=c,t.display.maxLineChanged=!0)}null!=r&&t&&this.collapsed&&tr(t,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ri(t.doc)),t&&ln(t,"markerCleared",t,this,r,i),n&&Fr(t),this.parent&&this.parent.clear()}},lo.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,l){i=ct(this,i),o=ct(this,o);var s=[],a=i.line;return this.iter(i.line,o.line+1,function(e){var t=e.markedSpans;if(t)for(var n=0;n=r.to||null==r.from&&a!=i.line||null!=r.from&&a==o.line&&r.from>=o.ch||l&&!l(r.marker)||s.push(r.marker.parent||r.marker)}++a}),s},getAllMarks:function(){var r=[];return this.iter(function(e){var t=e.markedSpans;if(t)for(var n=0;nt&&(t=e.from),null!=e.to&&e.toe.text.length?null:n}function Fo(e,t,n){e=Ho(e,t.ch,n);return null==e?null:new rt(t.line,e,n<0?"after":"before")}function Eo(e,t,n,r,i){if(e){"rtl"==t.doc.direction&&(i=-i);var o=me(n,t.doc.direction);if(o){var l,s,a,e=i<0?Y(o):o[0],o=i<0==(1==e.level)?"after":"before";return 0=n.text.length?(s.ch=n.text.length,s.sticky="before"):s.ch<=0&&(s.ch=0,s.sticky="after");var r=le(a,s.ch,s.sticky),i=a[r];if("ltr"==t.doc.direction&&i.level%2==0&&(0s.ch:i.from=i.from&&d>=c.begin)){var f=h?"before":"after";return new rt(s.line,d,f)}}f=function(e,t,n){for(var r=function(e,t){return t?new rt(s.line,u(e,1),"before"):new rt(s.line,e,"after")};0<=e&&el.doc.first&&((n=$e(l.doc,e.line-1).text)&&(e=new rt(e.line,1),l.replaceRange(t.charAt(0)+l.doc.lineSeparator()+n.charAt(n.length-1),rt(e.line-1,n.length-1),e,"+transpose")))),i.push(new oi(e,e)));l.setSelections(i)})},newlineAndIndent:function(r){return Er(r,function(){for(var e=r.listSelections(),t=e.length-1;0<=t;t--)r.replaceRange(r.doc.lineSeparator(),e[t].anchor,e[t].head,"+input");e=r.listSelections();for(var n=0;nc&&t.push(new oi(rt(s,c),rt(s,K(u,l,n))))}t.length||t.push(new oi(f,f)),Ei(g,li(d,y.ranges.slice(0,v).concat(t),v),{origin:"*mouse",scroll:!1}),d.scrollIntoView(e)}else{var h,r=m,i=Jo(d,e,p.unit),e=r.anchor,e=0=n.to||o.linea.bottom?20:0)&&setTimeout(Pr(d,function(){u==i&&(l.scroller.scrollTop+=r,e(t))}),50))}:n)(e)}),i=Pr(d,n);d.state.selectingText=i,ye(l.wrapper.ownerDocument,"mousemove",r),ye(l.wrapper.ownerDocument,"mouseup",i)})(e,r,t,o)}(l,t,i,e):Oe(e)==s.scroller&&Te(e):2==n?(t&&Oi(l.doc,t),setTimeout(function(){return s.input.focus()},20)):3==n&&(x?l.display.input.onContextMenu(e):dr(l)))))}function Jo(e,t,n){if("char"==n)return new oi(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new oi(rt(t.line,0),ct(e.doc,rt(t.line+1,0)));t=n(e,t);return new oi(t.from,t.to)}function el(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&Te(t);var l=e.display,r=l.lineDiv.getBoundingClientRect();if(o>r.bottom||!Le(e,n))return Ne(t);o-=r.top-l.viewOffset;for(var s=0;s=i)return xe(e,n,e,et(e.doc,o),e.display.gutterSpecs[s].className,t),Ne(t)}}function tl(e,t){return el(e,t,"gutterClick",!0)}function nl(e,t){var n,r;mn(e.display,t)||(r=t,Le(n=e,"gutterContextMenu")&&el(n,r,"gutterContextMenu",!1))||Ce(e,t,"contextmenu")||x||e.display.input.onContextMenu(t)}function rl(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Hn(e)}Zo.prototype.compare=function(e,t,n){return this.time+400>e&&0==it(t,this.pos)&&n==this.button};var il={toString:function(){return"CodeMirror.Init"}},ol={},ll={};function sl(e,t,n){!t!=!(n&&n!=il)&&(n=e.display.dragFunctions,(t=t?ye:we)(e.display.scroller,"dragstart",n.start),t(e.display.scroller,"dragenter",n.enter),t(e.display.scroller,"dragover",n.over),t(e.display.scroller,"dragleave",n.leave),t(e.display.scroller,"drop",n.drop))}function al(e){e.options.lineWrapping?(D(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(L(e.display.wrapper,"CodeMirror-wrap"),jt(e)),Qn(e),tr(e),Hn(e),setTimeout(function(){return Nr(e)},100)}function ul(e,t){var n=this;if(!(this instanceof ul))return new ul(e,t);this.options=t=t?E(t):{},E(ol,t,!1);var r=t.value;"string"==typeof r?r=new ho(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i,o=new ul.inputStyles[t.inputStyle](this),o=this.display=new Qr(e,r,o,t);for(i in rl(o.wrapper.CodeMirror=this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Dr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new I,keySeq:null,specialChars:null},t.autofocus&&!h&&o.input.focus(),w&&v<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(r){var i=r.display;ye(i.scroller,"mousedown",Pr(r,Qo)),ye(i.scroller,"dblclick",w&&v<11?Pr(r,function(e){var t;Ce(r,e)||(!(t=Jn(r,e))||tl(r,e)||mn(r.display,e)||(Te(e),t=r.findWordAt(t),Oi(r.doc,t.anchor,t.head)))}):function(e){return Ce(r,e)||Te(e)});ye(i.scroller,"contextmenu",function(e){return nl(r,e)}),ye(i.input.getField(),"contextmenu",function(e){i.scroller.contains(e.target)||nl(r,e)});var n,o={end:0};function l(){i.activeTouch&&(n=setTimeout(function(){return i.activeTouch=null},1e3),(o=i.activeTouch).end=+new Date)}function s(e,t){if(null==t.left)return 1;var n=t.left-e.left,e=t.top-e.top;return 400o.first?P($e(o,t-1).text,null,l):0:"add"==n?u=a+e.options.indentUnit:"subtract"==n?u=a-e.options.indentUnit:"number"==typeof n&&(u=a+n),u=Math.max(0,u);var h="",d=0;if(e.options.indentWithTabs)for(var f=Math.floor(u/l);f;--f)d+=l,h+="\t";if(dl,a=Ee(t),u=null;if(s&&1l?"cut":"+input")};ji(e.doc,g),ln(e,"inputRead",e,g)}t&&!s&&ml(e,t),wr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function gl(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");return n&&(e.preventDefault(),t.isReadOnly()||t.options.disableInput||Er(t,function(){return pl(t,n,0,null,"paste")}),1)}function ml(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;0<=r;r--){var i=n.ranges[r];if(!(100=r.first+r.size||(i=new rt(n,i.ch,i.sticky),!(a=$e(r,n))))return;i=Eo(s,r.cm,a,i.line,u)}else i=t;return 1}if("char"==l||"codepoint"==l)n();else if("column"==l)n(!0);else if("word"==l||"group"==l)for(var c=null,h="group"==l,d=r.cm&&r.cm.getHelper(i,"wordChars"),f=!0;!(o<0)||n(!f);f=!1){var p=a.text.charAt(i.ch)||"\n",p=J(p,d)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(!h||f||p||(p="s"),c&&c!=p){o<0&&(o=1,n(),i.sticky="after");break}if(p&&(c=p),0=s.height){l.hitSide=!0;break}o+=5*n}return l}e=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new I,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Cl(e,t){var n=kn(e,t.line);if(!n||n.hidden)return null;var r=$e(e.doc,t.line),n=Sn(n,r,t.line),r=me(r,e.doc.direction),e="left";r&&(e=le(r,t.ch)%2?"right":"left");e=On(n.map,t.ch,e);return e.offset="right"==e.collapse?e.end:e.start,e}function Sl(e,t){return t&&(e.bad=!0),e}function Ll(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Sl(e.clipPos(rt(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||i.line=t.display.viewFrom&&Cl(t,r)||{node:n[0].measure.map[2],offset:0},s=i.linet.firstLine()&&(i=rt(i.line-1,$e(t.doc,i.line-1).length)),r.ch==$e(t.doc,r.line).text.length&&r.linen.viewTo-1)return!1;m=i.line==n.viewFrom||0==(m=er(t,i.line))?(e=Je(n.view[0].line),n.view[0].node):(e=Je(n.view[m].line),n.view[m-1].node.nextSibling);var o,r=er(t,r.line),r=r==n.view.length-1?(o=n.viewTo-1,n.lineDiv.lastChild):(o=Je(n.view[r+1].line)-1,n.view[r+1].node.previousSibling);if(!m)return!1;for(var l=t.doc.splitLines(function(l,e,t,s,a){var n="",u=!1,c=l.doc.lineSeparator(),h=!1;function d(){u&&(n+=c,h&&(n+=c),u=h=!1)}function f(e){e&&(d(),n+=e)}for(;!function e(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)f(n);else if(n=t.getAttribute("cm-marker"))(n=l.findMarks(rt(s,0),rt(a+1,0),(o=+n,function(e){return e.id==o}))).length&&(r=n[0].find(0))&&f(qe(l.doc,r.from,r.to).join(c));else if("false"!=t.getAttribute("contenteditable")){var r=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(/^br$/i.test(t.nodeName)||0!=t.textContent.length){r&&d();for(var i=0;ii.ch&&f.charCodeAt(f.length-u-1)==p.charCodeAt(p.length-u-1);)a--,u++;l[l.length-1]=f.slice(0,f.length-u).replace(/^\u200b+/,""),l[0]=l[0].slice(a).replace(/\u200b+$/,"");var m=rt(e,a),r=rt(o,s.length?Y(s).length-u:0);return 1n&&(hl(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&wr(this));else{for(var o=i.from(),l=i.to(),i=Math.max(n,o.line),n=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1,s=i;s>1;if((l?n[2*l-1]:0)>=o)i=l;else{if(!(n[2*l+1]o)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=o&&(a=e.bottom),u+t.offsetWidth>l&&(u=l-t.offsetWidth)),t.style.top=a+"px",t.style.left=t.style.right="","right"==i?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),n&&(n=this,t={left:u,top:a,right:u+t.offsetWidth,bottom:a+t.offsetHeight},null!=(t=yr(n,t)).scrollTop&&Lr(n,t.scrollTop),null!=t.scrollLeft&&Tr(n,t.scrollLeft))},triggerOnKeyDown:Ir(Xo),triggerOnKeyPress:Ir(_o),triggerOnKeyUp:Yo,triggerOnMouseDown:Ir(Qo),execCommand:function(e){if(Io.hasOwnProperty(e))return Io[e].call(null,this)},triggerElectric:Ir(function(e){ml(this,e)}),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var o=ct(this.doc,e),l=0;lt)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:Fe=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:Fe=i)}return null!=r?r:Fe}Ee=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,Re=/[stwN]/,ze=/[LRr]/,Ie=/[Lb1n]/,Be=/[1n]/;var Ee,Re,ze,Ie,Be,Ge=function(e,t){var n="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!Ee.test(e))return!1;for(var r,i=e.length,o=[],l=0;l=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t=e.first&&tn?F(n,W(e,n).text.length):(e=W(e,(n=t).line).text.length,null==(t=n.ch)||e=this.string.length},g.prototype.sol=function(){return this.pos==this.lineStart},g.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},g.prototype.next=function(){if(this.post},g.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},g.prototype.skipToEnd=function(){this.pos=this.string.length},g.prototype.skipTo=function(e){e=this.string.indexOf(e,this.pos);if(-1e.options.maxHighlightLength&&ft(e.doc.mode,r.state),o=At(e,t,r),i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))),t.styles}function Wt(n,r,e){var t=n.doc,i=n.display;if(!t.mode.startState)return new Ot(t,!0,r);var o=function(e,t,n){for(var r,i,o=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;lt.first&&W(t,o-1).stateAfter,s=l?Ot.fromSaved(t,l,o):new Ot(t,gt(t.mode),o);return t.iter(o,r,function(e){Ht(n,e.text,s);var t=s.line;e.stateAfter=t==r-1||t%5==0||t>=i.viewFrom&&tt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}Ot.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Ot.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Ot.prototype.nextLine=function(){this.line++,0e.options.maxHighlightLength?(s=!1,l&&Ht(e,t,r,c.pos),c.pos=t.length,null):zt(Pt(n,c,r.state,h),o);if(!h||(d=h[0].name)&&(f="m-"+(f?d+" "+f:d)),!s||u!=f){for(;a=t:l.to>t),(r=r||[]).push(new Ut(s,l.from,o?null:l.to)))}return r}(n,r,o),s=function(e,t,n){var r;if(e)for(var i=0;i=t:l.to>t))&&(l.from!=t||"bookmark"!=s.type||n&&!l.marker.insertLeft)||(o=null==l.from||(s.inclusiveLeft?l.from<=t:l.frome.lastLine())return t;var n,r=W(e,t);if(!on(e,r))return t;for(;n=Jt(r);)r=n.find(1,!0).line;return H(r)+1}function on(e,t){var n=Gt&&t.markedSpans;if(n)for(var r,i=0;in.maxLineLength&&(n.maxLineLength=t,n.maxLine=e)})}var un=function(e,t,n){this.text=e,Yt(this,t),this.height=n?n(this):1};un.prototype.lineNo=function(){return H(this)},$e(un);var cn={},hn={};function dn(e,t){if(!e||/^\s*$/.test(e))return null;t=t.addModeClass?hn:cn;return t[e]||(t[e]=e.replace(/\S+/g,"cm-$&"))}function fn(e,t){var n=ne("span",null,null,x?"padding-right: .1px":null),r={pre:ne("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0,l=(r.pos=0,r.addToken=gn,function(e){if(null!=tt)return tt;var t=y(e,document.createTextNode("AخA")),n=le(t,0,1).getBoundingClientRect(),t=le(t,1,2).getBoundingClientRect();return te(e),n&&n.left!=n.right&&(tt=t.right-n.right<3)}(e.display.measure)&&(l=Ve(o,e.doc.direction))&&(r.addToken=function(h,d){return function(e,t,n,r,i,o,l){n=n?n+" cm-force-border":"cm-force-border";for(var s=e.pos,a=s+t.length;;){for(var u=void 0,c=0;cs&&u.from<=s);c++);if(u.to>=a)return h(e,t,n,r,i,o,l);h(e,t.slice(0,u.to-s),n,r,null,o,l),r=null,t=t.slice(u.to-s),s=u.to}}}(r.addToken,l)),r.map=[],t!=e.display.externalMeasured&&H(o));!function(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var l,s,a,u,c,h,d,f=i.length,p=0,g=1,m="",v=0;;){if(v==p){a=u=c=s="",h=d=null,v=1/0;for(var y=[],b=void 0,w=0;wp||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&v>x.to&&(v=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==v&&(b=b||[]).push(C.endStyle,x.to),C.title&&((d=d||{}).title=C.title),C.attributes)for(var S in C.attributes)(d=d||{})[S]=C.attributes[S];C.collapsed&&(!h||qt(h.marker,C)<0)&&(h=x)}else x.from>p&&v>x.from&&(v=x.from)}if(b)for(var L=0;Ln)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}}function zn(e,t,n,r){return Gn(e,Bn(e,t),n,r)}function In(e,t){if(t>=e.display.viewFrom&&t=e.lineN&&tt)&&(i=(o=a-s)-1,a<=t&&(l="right")),null!=i){if(r=e[u+2],s==a&&n==(r.insertLeft?"left":"right")&&(l=n),"left"==n&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)r=e[2+(u-=3)],l="left";if("right"==n&&i==a-s)for(;u=i.text.length?(t=i.text.length,e="before"):t<=0&&(t=0,e="after"),!a)return s("before"==e?t-1:t,"before"==e);function u(e,t,n){return s(n?e-1:e,1==a[t].level!=n)}var c=Pe(a,t,e),h=Fe,c=u(t,c,"before"==e);return null!=h&&(c.other=u(t,h,"before"!=e)),c}function tr(e,t){var n=0,t=(t=E(e.doc,t),e.options.lineWrapping||(n=cr(e.display)*t.ch),W(e.doc,t.line)),e=ln(t)+Dn(e.display);return{left:n,right:n,top:e,bottom:e+t.height}}function nr(e,t,n,r,i){e=F(e,t,n);return e.xRel=i,r&&(e.outside=r),e}function rr(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return nr(r.first,0,null,-1,-1);var i=bt(r,n),o=r.first+r.size-1;if(o=a.bottom?1:0)}return c=We(e.text,c,1),nr(t,c,g,f,r-p)}(e,l,i,t,n),a=function(e,t){var n,r=Gt&&e.markedSpans;if(r)for(var i=0;it)&&(!n||qt(n,o.marker)<0)&&(n=o.marker)}return n}(l,s.ch+(0r},i,e)}}function or(e,t,n,r){return ir(e,t,n=n||Bn(e,t),Zn(e,t,Gn(e,n,r),"line").top)}function lr(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function sr(n,r,i,o,l,s,a){var e,t=He(function(e){var e=l[e],t=1!=e.level;return lr(er(n,F(i,t?e.to:e.from,t?"before":"after"),"line",r,o),s,a,!0)},0,l.length-1),u=l[t];return 0a&&(u=l[t-1])),u}function ar(e,t,n,r,i,o,l){for(var l=ir(e,t,r,l),s=l.begin,a=l.end,u=(/\s/.test(t.text.charAt(a-1))&&a--,null),c=null,h=0;h=a||f.to<=s||(d=(d=Gn(e,r,1!=f.level?Math.min(a,f.to)-1:Math.max(s,f.from)).right)a?{from:u.from,to:a,level:u.level}:u}function ur(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Un){Un=M("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Un.appendChild(document.createTextNode("x")),Un.appendChild(M("br"));Un.appendChild(document.createTextNode("x"))}y(e.measure,Un);var n=Un.offsetHeight/50;return 3=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;rt)&&(o.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=o.viewTo?Gt&&nn(e.doc,t)o.viewFrom?yr(e):(o.viewFrom+=r,o.viewTo+=r):t<=o.viewFrom&&n>=o.viewTo?yr(e):t<=o.viewFrom?(l=br(e,n,n+r,1))?(o.view=o.view.slice(l.index),o.viewFrom=l.lineN,o.viewTo+=r):yr(e):n>=o.viewTo?(l=br(e,t,t,-1))?(o.view=o.view.slice(0,l.index),o.viewTo=l.lineN):yr(e):(l=br(e,t,t,-1),i=br(e,n,n+r,1),l&&i?(o.view=o.view.slice(0,l.index).concat(yn(e,l.lineN,i.lineN)).concat(o.view.slice(i.index)),o.viewTo+=r):yr(e)),o.externalMeasured);l&&(n=i.lineN&&t=r.viewTo||null!=(i=r.view[mr(e,t)]).node&&-1==L(r=i.changes||(i.changes=[]),n)&&r.push(n)}function yr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function br(e,t,n,r){var i,o=mr(e,t),l=e.display.view;if(!Gt||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var s=e.display.viewFrom,a=0;a=e.display.viewTo||s.to().linet||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),1==l.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(C,g||0,null==m?b:m,function(e,t,n,r){var i,o,l,s,a,u="ltr"==n,c=w(e,u?"left":"right"),h=w(t-1,u?"right":"left"),d=null==g&&0==e,f=null==m&&t==b,p=0==r,r=!C||r==C.length-1;h.top-c.top<=3?(i=(k?d:f)&&p?S:(u?c:h).left,a=(k?f:d)&&r?L:(u?h:c).right,T(i,c.top,a-i,c.bottom)):(a=u?(o=k&&d&&p?S:c.left,l=k?L:x(e,n,"before"),s=k?S:x(t,n,"after"),k&&f&&r?L:h.right):(o=k?x(e,n,"before"):S,l=!k&&d&&p?L:c.right,s=!k&&f&&r?S:h.left,k?x(t,n,"after"):L),T(o,c.top,l-o,c.bottom),c.bottome.display.sizerWidth&&((a=Math.ceil(c/cr(e.display)))>e.display.maxLineLength&&(e.display.maxLineLength=a,e.display.maxLine=s.line,e.display.maxLineChanged=!0))}}2=o&&(i=bt(t,ln(W(t,n))-e.wrapper.clientHeight),o=n)),{from:i,to:Math.max(o,i+1)}}function Hr(e,t){var n=e.display,r=ur(e.display),i=(t.top<0&&(t.top=0),(e.curOp&&null!=e.curOp.scrollTop?e.curOp:n.scroller).scrollTop),o=En(e),l={},s=(t.bottom-t.top>o&&(t.bottom=t.top+o),e.doc.height+Wn(n)),a=t.tops-r,r=(t.topi+o&&((a=Math.min(t.top,(r?s:t.bottom)-o))!=i&&(l.scrollTop=a)),e.options.fixedGutter?0:n.gutters.offsetWidth),s=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-r,o=Pn(e)-n.gutters.offsetWidth,i=t.right-t.left>o;return i&&(t.right=t.left+o),t.left<10?l.scrollLeft=0:t.lefto+s-3&&(l.scrollLeft=t.right+(i?0:10)-o),l}function Fr(e,t){null!=t&&(Rr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc:e.curOp).scrollTop+t)}function Pr(e){Rr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Er(e,t,n){null==t&&null==n||Rr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Rr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,zr(e,tr(e,t.from),tr(e,t.to),t.margin))}function zr(e,t,n,r){t=Hr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Er(e,t.scrollLeft,t.scrollTop)}function Ir(e,t){Math.abs(e.doc.scrollTop-t)<2||(d||ri(e,{top:t}),Br(e,t,!0),d&&ri(e),Qr(e,100))}function Br(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),e.display.scroller.scrollTop==t&&!n||(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Gr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,li(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Ur(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+Wn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Fn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function Vr(e,t,n){this.cm=n;var r=this.vert=M("div",[M("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=M("div",[M("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),k(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),k(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,w&&v<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function Kr(){}Vr.prototype.update=function(e){var t,n=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;return r?(this.vert.style.display="block",this.vert.style.bottom=n?i+"px":"0",t=e.viewHeight-(n?i:0),this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+t)+"px"):(this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0"),n?(this.horiz.style.display="block",this.horiz.style.right=r?i+"px":"0",this.horiz.style.left=e.barLeft+"px",t=e.viewWidth-e.barLeft-(r?i:0),this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+t)+"px"):(this.horiz.style.display="",this.horiz.firstChild.style.width="0"),!this.checkedZeroWidth&&0=l.viewTo)||l.maxLineChanged&&o.options.lineWrapping,i.update=i.mustUpdate&&new ei(o,i.mustUpdate&&{top:i.scrollTop,ensure:i.scrollToPos},i.forceUpdate)}for(var s=0;s(i.defaultView.innerHeight||i.documentElement.clientHeight)&&(r=!1),null==r||X||(o=M("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-Dn(e.display))+"px;\n height: "+(t.bottom-t.top+Fn(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;"),e.display.lineSpace.appendChild(o),o.scrollIntoView(r),e.display.lineSpace.removeChild(o)))}(w,v));var S=b.maybeHiddenMarkers,L=b.maybeUnhiddenMarkers;if(S)for(var k=0;k=l.display.viewTo||(s=+new Date+l.options.workTime,a=Wt(l,c.highlightFrontier),u=[],c.iter(a.line,Math.min(c.first+c.size,l.display.viewTo+500),function(e){if(a.line>=l.display.viewFrom){for(var t=e.styles,n=e.text.length>l.options.maxHighlightLength?ft(c.mode,a.state):null,r=At(l,e,a,!0),n=(n&&(a.state=n),e.styles=r.styles,e.styleClasses),r=r.classes,i=(r?e.styleClasses=r:n&&(e.styleClasses=null),!t||t.length!=e.styles.length||n!=r&&(!n||!r||n.bgClass!=r.bgClass||n.textClass!=r.textClass)),o=0;!i&&os)return Qr(l,l.options.workDelay),!0}),c.highlightFrontier=a.line,c.modeFrontier=Math.max(c.modeFrontier,a.line),u.length&&h(l,function(){for(var e=0;e=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==wr(e))return!1;si(e)&&(yr(e),t.dims=hr(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin),r=(n.viewFroml&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),Gt&&(o=nn(e.doc,o),l=rn(e.doc,l)),o!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth),i=(i=o,o=l,0==(c=(l=e).display).view.length||i>=c.viewTo||o<=c.viewFrom?(c.view=yn(l,i,o),c.viewFrom=i):(c.viewFrom>i?c.view=yn(l,i,c.viewFrom).concat(c.view):c.viewFromo&&(c.view=c.view.slice(0,mr(l,o)))),c.viewTo=o,n.viewOffset=ln(W(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px",wr(e));if(!r&&0==i&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var l=function(e){if(e.hasFocus())return null;if(!(n=N(ue(e)))||!re(e.display.lineDiv,n))return null;var t,n={activeElt:n};return window.getSelection&&(t=he(e).getSelection()).anchorNode&&t.extend&&re(e.display.lineDiv,t.anchorNode)&&(n.anchorNode=t.anchorNode,n.anchorOffset=t.anchorOffset,n.focusNode=t.focusNode,n.focusOffset=t.focusOffset),n}(e),s=(4=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!ti(e,t))break;Ar(e);var i=Ur(e);xr(e),jr(e,i),oi(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function ri(e,t){var n,t=new ei(e,t);ti(e,t)&&(Ar(e),ni(e,t),n=Ur(e),xr(e),jr(e,n),oi(e,n),t.finish())}function ii(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",b(e,"gutterChanged",e)}function oi(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Fn(e)+"px"}function li(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=dr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",l=0;ll.clientWidth,a=l.scrollHeight>l.clientHeight;if(r&&s||n&&a){if(n&&C&&x)e:for(var u=t.target,c=o.view;u!=l;u=u.parentNode)for(var h=0;hs-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=(o=l).lastOp==r?(Wi(o.done),z(o.done)):o.done.length&&!z(o.done).ranges?z(o.done):1l.undoDepth;)l.done.shift(),l.done[0].ranges||l.done.shift()}l.done.push(n),l.generation=++l.maxGeneration,l.lastModTime=l.lastSelTime=s,l.lastOp=l.lastSelOp=r,l.lastOrigin=l.lastSelOrigin=t.origin,i||O(e,"historyAdded")}function Fi(e,t,n,r){var i,o,l,s=e.history,a=r&&r.origin;n==s.lastSelOp||a&&s.lastSelOrigin==a&&(s.lastModTime==s.lastSelTime&&s.lastOrigin==a||(e=e,i=a,o=z(s.done),l=t,"*"==(i=i.charAt(0))||"+"==i&&o.ranges.length==l.ranges.length&&o.somethingSelected()==l.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)))?s.done[s.done.length-1]=t:Pi(t,s.done),s.lastSelTime=+new Date,s.lastSelOrigin=a,s.lastSelOp=n,r&&!1!==r.clearRedo&&Wi(s.undone)}function Pi(e,t){var n=z(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Ei(t,n,e,r){var i=n["spans_"+t.id],o=0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,r),function(e){e.markedSpans&&((i=i||(n["spans_"+t.id]={}))[o]=e.markedSpans),++o})}function Ri(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var r=[],i=0;i=t.ch:s.to>t.ch))){if(i&&(O(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(a.atomic){if(n){var s=a.find(r<0?1:-1),h=void 0;if((s=(r<0?c:u)?Qi(e,s,-r,s&&s.line==t.line?o:null):s)&&s.line==t.line&&(h=P(s,n))&&(r<0?h<0:0e.first?E(e,F(t.line-1)):null:0e.lastLine())){t.from.linei?{from:t.from,to:F(i,W(e,i).text.length),text:[t.text[0]],origin:t.origin}:t).removed=mt(e,t.from,t.to),n=n||xi(e,t),e.cm){var i=e.cm,o=t,l=r,s=i.doc,a=i.display,u=o.from,c=o.to,h=!1,d=u.line,f=(i.options.lineWrapping||(d=H(tn(W(s,u.line))),s.iter(d,c.line+1,function(e){if(e==a.maxLine)return h=!0})),-1a.maxLineLength&&(a.maxLine=e,a.maxLineLength=t,a.maxLineChanged=!0,h=!1)}),h&&(i.curOp.updateMaxLine=!0)),s),p=u.line;if(f.modeFrontier=Math.min(f.modeFrontier,p),!(f.highlightFrontiert.display.maxLineLength&&(t.display.maxLine=u,t.display.maxLineLength=c,t.display.maxLineChanged=!0)}null!=r&&t&&this.collapsed&&R(t,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&$i(t.doc)),t&&b(t,"markerCleared",t,this,r,i),n&&Zr(t),this.parent&&this.parent.clear()}},mo.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,l){i=E(this,i),o=E(this,o);var s=[],a=i.line;return this.iter(i.line,o.line+1,function(e){var t=e.markedSpans;if(t)for(var n=0;n=r.to||null==r.from&&a!=i.line||null!=r.from&&a==o.line&&r.from>=o.ch||l&&!l(r.marker)||s.push(r.marker.parent||r.marker)}++a}),s},getAllMarks:function(){var r=[];return this.iter(function(e){var t=e.markedSpans;if(t)for(var n=0;nt&&(t=e.from),null!=e.to&&e.toe.text.length?null:t}function Ko(e,t,n){e=Vo(e,t.ch,n);return null==e?null:new F(t.line,e,n<0?"after":"before")}function jo(e,t,n,r,i){if(e){"rtl"==t.doc.direction&&(i=-i);var o,l,s,a,e=Ve(n,t.doc.direction);if(e)return o=i<0==(1==(e=i<0?z(e):e[0]).level)?"after":"before",0=n.text.length?(s.ch=n.text.length,s.sticky="before"):s.ch<=0&&(s.ch=0,s.sticky="after");var r=Pe(a,s.ch,s.sticky),i=a[r];if("ltr"==t.doc.direction&&i.level%2==0&&(0s.ch:i.from=i.from&&d>=c.begin))return new F(s.line,d,h?"before":"after")}function f(e,t,n){for(var r=function(e,t){return t?new F(s.line,u(e,1),"before"):new F(s.line,e,"after")};0<=e&&el.doc.first&&((n=W(l.doc,e.line-1).text)&&(e=new F(e.line,1),l.replaceRange(t.charAt(0)+l.doc.lineSeparator()+n.charAt(n.length-1),F(e.line-1,n.length-1),e,"+transpose")))),i.push(new G(e,e)));l.setSelections(i)})},newlineAndIndent:function(r){return h(r,function(){for(var e=(t=r.listSelections()).length-1;0<=e;e--)r.replaceRange(r.doc.lineSeparator(),t[e].anchor,t[e].head,"+input");for(var t=r.listSelections(),n=0;nc&&t.push(new G(F(s,c),F(s,we(u,l,n))))}t.length||t.push(new G(f,f)),U(g,vi(d,y.ranges.slice(0,v).concat(t),v),{origin:"*mouse",scroll:!1}),d.scrollIntoView(e)}else{var h,r=m,i=ul(d,e,p.unit),e=r.anchor,e=0=n.to||o.linea.bottom?20:0)&&setTimeout(I(d,function(){u==i&&(l.scroller.scrollTop+=r,e(t))}),50))}:n)(e)}),i=I(d,n);d.state.selectingText=i,k(l.wrapper.ownerDocument,"mousemove",r),k(l.wrapper.ownerDocument,"mouseup",i)})(i,s,o,a)):Qe(e)==h.scroller&&D(e):2==n?(t&&Gi(c.doc,t),setTimeout(function(){return h.input.focus()},20)):3==n&&(Q?c.display.input.onContextMenu(e):Mr(c)))))}function ul(e,t,n){if("char"==n)return new G(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new G(F(t.line,0),E(e.doc,F(t.line+1,0)));n=n(e,t);return new G(n.from,n.to)}function cl(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&D(t);var l=e.display,r=l.lineDiv.getBoundingClientRect();if(o>r.bottom||!Ye(e,n))return qe(t);o-=r.top-l.viewOffset;for(var s=0;s=i)return O(e,n,e,bt(e.doc,o),e.display.gutterSpecs[s].className,t),qe(t)}}function hl(e,t){return cl(e,t,"gutterClick",!0)}function dl(e,t){var n,r;An(e.display,t)||(r=t,Ye(n=e,"gutterContextMenu")&&cl(n,r,"gutterContextMenu",!1))||A(e,t,"contextmenu")||Q||e.display.input.onContextMenu(t)}function fl(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Yn(e)}ol.prototype.compare=function(e,t,n){return this.time+400>e&&0==P(t,this.pos)&&n==this.button};var pl={toString:function(){return"CodeMirror.Init"}},gl={},ml={};function vl(e,t,n){!t!=!(n&&n!=pl)&&(n=e.display.dragFunctions,(t=t?k:T)(e.display.scroller,"dragstart",n.start),t(e.display.scroller,"dragenter",n.enter),t(e.display.scroller,"dragover",n.over),t(e.display.scroller,"dragleave",n.leave),t(e.display.scroller,"drop",n.drop))}function yl(e){e.options.lineWrapping?(ie(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(ee(e.display.wrapper,"CodeMirror-wrap"),an(e)),pr(e),R(e),Yn(e),setTimeout(function(){return jr(e)},100)}function p(e,t){var n=this;if(!(this instanceof p))return new p(e,t);this.options=t=t?fe(t):{},fe(gl,t,!1);var r,i=t.value,o=("string"==typeof i?i=new f(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i,new p.inputStyles[t.inputStyle](this)),e=this.display=new hi(e,i,o,t),l=(fl(e.wrapper.CodeMirror=this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),$r(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new pe,keySeq:null,specialChars:null},t.autofocus&&!_&&e.input.focus(),w&&v<11&&setTimeout(function(){return n.display.input.reset(!0)},20),this),s=l.display;k(s.scroller,"mousedown",I(l,al)),k(s.scroller,"dblclick",w&&v<11?I(l,function(e){var t;A(l,e)||(!(t=gr(l,e))||hl(l,e)||An(l.display,e)||(D(e),e=l.findWordAt(t),Gi(l.doc,e.anchor,e.head)))}):function(e){return A(l,e)||D(e)}),k(s.scroller,"contextmenu",function(e){return dl(l,e)}),k(s.input.getField(),"contextmenu",function(e){s.scroller.contains(e.target)||dl(l,e)});var a,u={end:0};function c(){s.activeTouch&&(a=setTimeout(function(){return s.activeTouch=null},1e3),(u=s.activeTouch).end=+new Date)}function h(e,t){if(null==t.left)return 1;var n=t.left-e.left,t=t.top-e.top;return 400o.first?S(W(o,t-1).text,null,l):0:"add"==n?c=a+e.options.indentUnit:"subtract"==n?c=a-e.options.indentUnit:"number"==typeof n&&(c=a+n);var c=Math.max(0,c),h="",d=0;if(e.options.indentWithTabs)for(var f=Math.floor(c/l);f;--f)d+=l,h+="\t";if(dl,a=rt(t),u=null;if(s&&1l?"cut":"+input")});to(e.doc,f),b(e,"inputRead",e,f)}t&&!s&&kl(e,t),Pr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Ll(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");return n&&(e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||h(t,function(){return Sl(t,n,0,null,"paste")}),1)}function kl(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;0<=r;r--){var i=n.ranges[r];if(!(100=n.first+n.size||(r=new F(e,r.ch,r.sticky),!(s=W(n,e))))return;r=jo(l,n.cm,s,r.line,a)}else r=t;return 1}if("char"==o||"codepoint"==o)u();else if("column"==o)u(!0);else if("word"==o||"group"==o)for(var c=null,h="group"==o,d=n.cm&&n.cm.getHelper(r,"wordChars"),f=!0;!(i<0)||u(!f);f=!1){var p=s.text.charAt(r.ch)||"\n",p=Ne(p,d)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(!h||f||p||(p="s"),c&&c!=p){i<0&&(i=1,u(),r.sticky="after");break}if(p&&(c=p),0=s.height){l.hitSide=!0;break}o+=5*n}return l}function r(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new pe,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null}function Dl(e,t){var n=In(e,t.line);if(!n||n.hidden)return null;var r=W(e.doc,t.line),n=Rn(n,r,t.line),r=Ve(r,e.doc.direction),e="left",r=(r&&(e=Pe(r,t.ch)%2?"right":"left"),Kn(n.map,t.ch,e));return r.offset="right"==r.collapse?r.end:r.start,r}function Wl(e,t){return t&&(e.bad=!0),e}function Hl(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Wl(e.clipPos(F(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||n.line=t.display.viewFrom&&Dl(t,r)||{node:i[0].measure.map[2],offset:0},r=n.linet.firstLine()&&(i=F(i.line-1,W(t.doc,i.line-1).length)),r.ch==W(t.doc,r.line).text.length&&r.linen.viewTo-1)return!1;var o,l=i.line==n.viewFrom||0==(l=mr(t,i.line))?(e=H(n.view[0].line),n.view[0].node):(e=H(n.view[l].line),n.view[l-1].node.nextSibling),r=mr(t,r.line),n=r==n.view.length-1?(o=n.viewTo-1,n.lineDiv.lastChild):(o=H(n.view[r+1].line)-1,n.view[r+1].node.previousSibling);if(!l)return!1;for(var s=t.doc.splitLines(function(o,e,t,l,s){var n="",a=!1,u=o.doc.lineSeparator(),c=!1;function h(){a&&(n+=u,c&&(n+=u),a=c=!1)}function d(e){e&&(h(),n+=e)}for(;!function e(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)d(n);else if(n=t.getAttribute("cm-marker"))(n=o.findMarks(F(l,0),F(s+1,0),(i=+n,function(e){return e.id==i}))).length&&(n=n[0].find(0))&&d(mt(o.doc,n.from,n.to).join(u));else if("false"!=t.getAttribute("contenteditable")&&(n=/^(pre|div|p|li|table|br)$/i.test(t.nodeName),/^br$/i.test(t.nodeName)||0!=t.textContent.length)){n&&h();for(var r=0;ri.ch&&p.charCodeAt(p.length-c-1)==g.charCodeAt(g.length-c-1);)u--,c++;s[s.length-1]=p.slice(0,p.length-c).replace(/^\u200b+/,""),s[0]=s[0].slice(u).replace(/\u200b+$/,"");r=F(e,u),l=F(o,a.length?z(a).length-c:0);return 1n&&(wl(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&Pr(this));else{for(var o=i.from(),i=i.to(),l=Math.max(n,o.line),n=Math.min(this.lastLine(),i.line-(i.ch?0:1))+1,s=l;s>1;if((l?n[2*l-1]:0)>=o)i=l;else{if(!(n[2*l+1]l)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=l&&(a=e.bottom),u+t.offsetWidth>o&&(u=o-t.offsetWidth)),t.style.top=a+"px",t.style.left=t.style.right="","right"==i?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),n&&(r=this,l={left:u,top:a,right:u+t.offsetWidth,bottom:a+t.offsetHeight},null!=(l=Hr(r,l)).scrollTop&&Ir(r,l.scrollTop),null!=l.scrollLeft&&Gr(r,l.scrollLeft))},triggerOnKeyDown:t(nl),triggerOnKeyPress:t(il),triggerOnKeyUp:rl,triggerOnMouseDown:t(al),execCommand:function(e){if(Yo.hasOwnProperty(e))return Yo[e].call(null,this)},triggerElectric:t(function(e){kl(this,e)}),findPosH:function(e,t,n,r){for(var i=1,o=(t<0&&(i=-1,t=-t),E(this.doc,e)),l=0;l>; + color: <>; height: 2em; width: 2em; } diff --git a/plugins/tiddlywiki/confetti/plugin.info b/plugins/tiddlywiki/confetti/plugin.info index bbd2753f53..3d8cbd047e 100644 --- a/plugins/tiddlywiki/confetti/plugin.info +++ b/plugins/tiddlywiki/confetti/plugin.info @@ -3,5 +3,5 @@ "name": "Confetti", "description": "Animated confetti effect", "list": "readme", - "stability": "STABILITY_1_EXPERIMENTAL" + "stability": "STABILITY_2_STABLE" } diff --git a/plugins/tiddlywiki/d3/barwidget.js b/plugins/tiddlywiki/d3/barwidget.js deleted file mode 100644 index 0603dd7b42..0000000000 --- a/plugins/tiddlywiki/d3/barwidget.js +++ /dev/null @@ -1,199 +0,0 @@ -/*\ -title: $:/plugins/tiddlywiki/d3/barwidget.js -type: application/javascript -module-type: widget - -A widget for displaying stacked or grouped bar charts. Derived from http://bl.ocks.org/mbostock/3943967 - -\*/ - -"use strict"; - -var Widget = require("$:/core/modules/widgets/widget.js").widget, - d3 = require("$:/plugins/tiddlywiki/d3/d3.js").d3; - -var BarWidget = function(parseTreeNode,options) { - this.initialise(parseTreeNode,options); -}; - -/* -Inherit from the base widget class -*/ -BarWidget.prototype = new Widget(); - -/* -Render this widget into the DOM -*/ -BarWidget.prototype.render = function(parent,nextSibling) { - // Save the parent dom node - this.parentDomNode = parent; - // Compute our attributes - this.computeAttributes(); - // Execute our logic - this.execute(); - // Create the chart - var chart = this.createChart(parent,nextSibling); - this.updateChart = chart.updateChart; - if(this.updateChart) { - this.updateChart(); - } - // Insert the chart into the DOM and render any children - parent.insertBefore(chart.domNode,nextSibling); - this.domNodes.push(chart.domNode); -}; - -BarWidget.prototype.createChart = function(parent,nextSibling) { - // Get the data we're plotting - var data = this.wiki.getTiddlerData(this.barData), - n,m,stack,layers; - if(data) { - n = data.layers; - m = data.samples; - layers = data.data; - } else { // Use randomly generated data if we don't have any - n = 4; // number of layers - m = 58; // number of samples per layer - stack = d3.layout.stack(); - layers = stack(d3.range(n).map(function() { return bumpLayer(m, 0.1); })); - } - // Calculate the maximum data values - var yGroupMax = d3.max(layers, function(layer) { return d3.max(layer, function(d) { return d.y; }); }), - yStackMax = d3.max(layers, function(layer) { return d3.max(layer, function(d) { return d.y0 + d.y; }); }); - // Calculate margins and width and height - var margin = {top: 40, right: 10, bottom: 20, left: 10}, - width = 960 - margin.left - margin.right, - height = 500 - margin.top - margin.bottom; - // x-scale - var x = d3.scale.ordinal() - .domain(d3.range(m)) - .rangeRoundBands([0, width], 0.08); - // y-scale - var y = d3.scale.linear() - .domain([0, yStackMax]) - .range([height, 0]); - // Array of colour values - var color = d3.scale.linear() - .domain([0, n - 1]) - .range(["#aad", "#556"]); - // x-axis - var xAxis = d3.svg.axis() - .scale(x) - .tickSize(0) - .tickPadding(6) - .orient("bottom"); - // Create SVG element - var svgElement = d3.select(parent).insert("svg",function() {return nextSibling;}) - .attr("viewBox", "0 0 960 500") - .attr("preserveAspectRatio", "xMinYMin meet") - .attr("width", width + margin.left + margin.right) - .attr("height", height + margin.top + margin.bottom); - // Create main group - var mainGroup = svgElement.append("g") - .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); - // Create the layers - var layer = mainGroup.selectAll(".layer") - .data(layers) - .enter().append("g") - .attr("class", "layer") - .style("fill", function(d, i) { return color(i); }); - // Create the rectangles in each layer - var rect = layer.selectAll("rect") - .data(function(d) { return d; }) - .enter().append("rect") - .attr("x", function(d) { return x(d.x); }) - .attr("y", height) - .attr("width", x.rangeBand()) - .attr("height", 0); - // Transition the rectangles to their final height - rect.transition() - .delay(function(d, i) { return i * 10; }) - .attr("y", function(d) { return y(d.y0 + d.y); }) - .attr("height", function(d) { return y(d.y0) - y(d.y0 + d.y); }); - // Add to the DOM - mainGroup.append("g") - .attr("class", "x axis") - .attr("transform", "translate(0," + height + ")") - .call(xAxis); - var self = this; - // Return the svg node - return { - domNode: svgElement[0][0], - updateChart: function() { - if(self.barGrouped !== "no") { - transitionGrouped(); - } else { - transitionStacked(); - } - } - }; - - function transitionGrouped() { - y.domain([0, yGroupMax]); - rect.transition() - .duration(500) - .delay(function(d, i) { return i * 10; }) - .attr("x", function(d, i, j) { return x(d.x) + x.rangeBand() / n * j; }) - .attr("width", x.rangeBand() / n) - .transition() - .attr("y", function(d) { return y(d.y); }) - .attr("height", function(d) { return height - y(d.y); }); - } - - function transitionStacked() { - y.domain([0, yStackMax]); - rect.transition() - .duration(500) - .delay(function(d, i) { return i * 10; }) - .attr("y", function(d) { return y(d.y0 + d.y); }) - .attr("height", function(d) { return y(d.y0) - y(d.y0 + d.y); }) - .transition() - .attr("x", function(d) { return x(d.x); }) - .attr("width", x.rangeBand()); - } - - // Inspired by Lee Byron's test data generator. - function bumpLayer(n, o) { - function bump(a) { - var x = 1 / (0.1 + Math.random()), - y = 2 * Math.random() - 0.5, - z = 10 / (0.1 + Math.random()); - for(var i = 0; i < n; i++) { - var w = (i / n - y) * z; - a[i] += x * Math.exp(-w * w); - } - } - var a = [], i; - for(i = 0; i < n; ++i) a[i] = o + o * Math.random(); - for(i = 0; i < 5; ++i) bump(a); - return a.map(function(d, i) { return {x: i, y: Math.max(0, d)}; }); - } -}; - -/* -Compute the internal state of the widget -*/ -BarWidget.prototype.execute = function() { - // Get the parameters from the attributes - this.barData = this.getAttribute("data"); - this.barGrouped = this.getAttribute("grouped","no"); -}; - -/* -Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering -*/ -BarWidget.prototype.refresh = function(changedTiddlers) { - var changedAttributes = this.computeAttributes(); - if(changedAttributes.data || changedTiddlers[this.barData]) { - this.refreshSelf(); - return true; - } else if(changedAttributes.grouped) { - this.execute(); - if(this.updateChart) { - this.updateChart(); - } - return true; - } - return false; -}; - -exports.d3bar = BarWidget; diff --git a/plugins/tiddlywiki/d3/base.tid b/plugins/tiddlywiki/d3/base.tid deleted file mode 100644 index c3d4ef11c9..0000000000 --- a/plugins/tiddlywiki/d3/base.tid +++ /dev/null @@ -1,18 +0,0 @@ -title: $:/plugins/tiddlywiki/d3/base.tid -tags: [[$:/tags/Stylesheet]] - -\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline - -.tc-barwidget { -} - -.tc-barwidget text { - font: 8px sans-serif; -} - -.tc-barwidget .axis path, -.tc-barwidget .axis line { - fill: none; - stroke: #000; - shape-rendering: crispEdges; -} diff --git a/plugins/tiddlywiki/d3/cloudwidget.js b/plugins/tiddlywiki/d3/cloudwidget.js deleted file mode 100644 index 69b297d900..0000000000 --- a/plugins/tiddlywiki/d3/cloudwidget.js +++ /dev/null @@ -1,128 +0,0 @@ -/*\ -title: $:/plugins/tiddlywiki/d3/cloudwidget.js -type: application/javascript -module-type: widget - -A widget for displaying word clouds. Derived from https://github.com/jasondavies/d3-cloud - -\*/ - -"use strict"; - -var Widget = require("$:/core/modules/widgets/widget.js").widget, - d3 = require("$:/plugins/tiddlywiki/d3/d3.js").d3; - -if($tw.browser) { - // Frightful hack to give the cloud plugin the global d3 variable it needs - window.d3 = d3; - d3.layout.cloud = require("$:/plugins/tiddlywiki/d3/d3.layout.cloud.js").cloud; -} - -var CloudWidget = function(parseTreeNode,options) { - this.initialise(parseTreeNode,options); -}; - -/* -Inherit from the base widget class -*/ -CloudWidget.prototype = new Widget(); - -/* -Render this widget into the DOM -*/ -CloudWidget.prototype.render = function(parent,nextSibling) { - // Save the parent dom node - this.parentDomNode = parent; - // Compute our attributes - this.computeAttributes(); - // Execute our logic - this.execute(); - // Create the chart - var chart = this.createChart(parent,nextSibling); - this.updateChart = chart.updateChart; - if(this.updateChart) { - this.updateChart(); - } - // Insert the chart into the DOM and render any children - parent.insertBefore(chart.domNode,nextSibling); - this.domNodes.push(chart.domNode); -}; - -CloudWidget.prototype.createChart = function(parent,nextSibling) { - var self = this, - fill = d3.scale.category20(), - data = this.wiki.getTiddlerData(this.cloudData); - // Use dummy data if none provided - if(!data) { - data = "This word cloud does not have any data in it".split(" ").map(function(d) { - return {text: d, size: 10 + Math.random() * 90}; - }); - } - // Create the svg element - var svgElement = d3.select(parent).insert("svg",function() {return nextSibling;}) - .attr("width", 600) - .attr("height", 400); - // Create the main group - var mainGroup = svgElement - .append("g") - .attr("transform", "translate(300,200)"); - // Create the layout - var layout = d3.layout.cloud().size([600, 400]) - .words(data) - .padding(5) - .rotate(function() { return ~~(Math.random() * 5) * 30 - 60; }) - .font("Impact") - .fontSize(function(d) { return d.size*2; }) - .on("end", draw) - .start(); - // Function to draw all the words - function draw(words) { - mainGroup.selectAll("text") - .data(words) - .enter().append("text") - .style("font-size", function(d) { return d.size + "px"; }) - .style("font-family", "Impact") - .style("fill", function(d, i) { return fill(i); }) - .attr("text-anchor", "middle") - .attr("transform", function(d) { - return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")"; - }) - .text(function(d) { return d.text; }); - } - function updateChart() { - layout.spiral(self.spiral); - } - return { - domNode: svgElement[0][0], - updateChart: updateChart - }; -}; - -/* -Compute the internal state of the widget -*/ -CloudWidget.prototype.execute = function() { - // Get the parameters from the attributes - this.cloudData = this.getAttribute("data"); - this.cloudSpiral = this.getAttribute("spiral","archimedean"); -}; - -/* -Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering -*/ -CloudWidget.prototype.refresh = function(changedTiddlers) { - var changedAttributes = this.computeAttributes(); - if(changedAttributes.data || changedTiddlers[this.cloudData]) { - this.refreshSelf(); - return true; - } else if(changedAttributes.spiral) { - this.execute(); - if(this.updateChart) { - this.updateChart(); - } - return true; - } - return false; -}; - -exports.d3cloud = CloudWidget; diff --git a/plugins/tiddlywiki/d3/files/LICENSE b/plugins/tiddlywiki/d3/files/LICENSE deleted file mode 100644 index 0bc47f33ef..0000000000 --- a/plugins/tiddlywiki/d3/files/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2013, Michael Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* The name Michael Bostock may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugins/tiddlywiki/d3/files/cloud/LICENSE b/plugins/tiddlywiki/d3/files/cloud/LICENSE deleted file mode 100644 index 36ea512727..0000000000 --- a/plugins/tiddlywiki/d3/files/cloud/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2013, Jason Davies. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * The name Jason Davies may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugins/tiddlywiki/d3/files/cloud/d3.layout.cloud.js b/plugins/tiddlywiki/d3/files/cloud/d3.layout.cloud.js deleted file mode 100644 index 3fb84762d5..0000000000 --- a/plugins/tiddlywiki/d3/files/cloud/d3.layout.cloud.js +++ /dev/null @@ -1,401 +0,0 @@ -// Word cloud layout by Jason Davies, http://www.jasondavies.com/word-cloud/ -// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf -(function(exports) { - function cloud() { - var size = [256, 256], - text = cloudText, - font = cloudFont, - fontSize = cloudFontSize, - fontStyle = cloudFontNormal, - fontWeight = cloudFontNormal, - rotate = cloudRotate, - padding = cloudPadding, - spiral = archimedeanSpiral, - words = [], - timeInterval = Infinity, - event = d3.dispatch("word", "end"), - timer = null, - cloud = {}; - - cloud.start = function() { - var board = zeroArray((size[0] >> 5) * size[1]), - bounds = null, - n = words.length, - i = -1, - tags = [], - data = words.map(function(d, i) { - d.text = text.call(this, d, i); - d.font = font.call(this, d, i); - d.style = fontStyle.call(this, d, i); - d.weight = fontWeight.call(this, d, i); - d.rotate = rotate.call(this, d, i); - d.size = ~~fontSize.call(this, d, i); - d.padding = padding.call(this, d, i); - return d; - }).sort(function(a, b) { return b.size - a.size; }); - - if (timer) clearInterval(timer); - timer = setInterval(step, 0); - step(); - - return cloud; - - function step() { - var start = +new Date, - d; - while (+new Date - start < timeInterval && ++i < n && timer) { - d = data[i]; - d.x = (size[0] * (Math.random() + .5)) >> 1; - d.y = (size[1] * (Math.random() + .5)) >> 1; - cloudSprite(d, data, i); - if (d.hasText && place(board, d, bounds)) { - tags.push(d); - event.word(d); - if (bounds) cloudBounds(bounds, d); - else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}]; - // Temporary hack - d.x -= size[0] >> 1; - d.y -= size[1] >> 1; - } - } - if (i >= n) { - cloud.stop(); - event.end(tags, bounds); - } - } - } - - cloud.stop = function() { - if (timer) { - clearInterval(timer); - timer = null; - } - return cloud; - }; - - cloud.timeInterval = function(x) { - if (!arguments.length) return timeInterval; - timeInterval = x == null ? Infinity : x; - return cloud; - }; - - function place(board, tag, bounds) { - var perimeter = [{x: 0, y: 0}, {x: size[0], y: size[1]}], - startX = tag.x, - startY = tag.y, - maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), - s = spiral(size), - dt = Math.random() < .5 ? 1 : -1, - t = -dt, - dxdy, - dx, - dy; - - while (dxdy = s(t += dt)) { - dx = ~~dxdy[0]; - dy = ~~dxdy[1]; - - if (Math.min(dx, dy) > maxDelta) break; - - tag.x = startX + dx; - tag.y = startY + dy; - - if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || - tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; - // TODO only check for collisions within current bounds. - if (!bounds || !cloudCollide(tag, board, size[0])) { - if (!bounds || collideRects(tag, bounds)) { - var sprite = tag.sprite, - w = tag.width >> 5, - sw = size[0] >> 5, - lx = tag.x - (w << 4), - sx = lx & 0x7f, - msx = 32 - sx, - h = tag.y1 - tag.y0, - x = (tag.y + tag.y0) * sw + (lx >> 5), - last; - for (var j = 0; j < h; j++) { - last = 0; - for (var i = 0; i <= w; i++) { - board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0); - } - x += sw; - } - delete tag.sprite; - return true; - } - } - } - return false; - } - - cloud.words = function(x) { - if (!arguments.length) return words; - words = x; - return cloud; - }; - - cloud.size = function(x) { - if (!arguments.length) return size; - size = [+x[0], +x[1]]; - return cloud; - }; - - cloud.font = function(x) { - if (!arguments.length) return font; - font = d3.functor(x); - return cloud; - }; - - cloud.fontStyle = function(x) { - if (!arguments.length) return fontStyle; - fontStyle = d3.functor(x); - return cloud; - }; - - cloud.fontWeight = function(x) { - if (!arguments.length) return fontWeight; - fontWeight = d3.functor(x); - return cloud; - }; - - cloud.rotate = function(x) { - if (!arguments.length) return rotate; - rotate = d3.functor(x); - return cloud; - }; - - cloud.text = function(x) { - if (!arguments.length) return text; - text = d3.functor(x); - return cloud; - }; - - cloud.spiral = function(x) { - if (!arguments.length) return spiral; - spiral = spirals[x + ""] || x; - return cloud; - }; - - cloud.fontSize = function(x) { - if (!arguments.length) return fontSize; - fontSize = d3.functor(x); - return cloud; - }; - - cloud.padding = function(x) { - if (!arguments.length) return padding; - padding = d3.functor(x); - return cloud; - }; - - return d3.rebind(cloud, event, "on"); - } - - function cloudText(d) { - return d.text; - } - - function cloudFont() { - return "serif"; - } - - function cloudFontNormal() { - return "normal"; - } - - function cloudFontSize(d) { - return Math.sqrt(d.value); - } - - function cloudRotate() { - return (~~(Math.random() * 6) - 3) * 30; - } - - function cloudPadding() { - return 1; - } - - // Fetches a monochrome sprite bitmap for the specified text. - // Load in batches for speed. - function cloudSprite(d, data, di) { - if (d.sprite) return; - c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio); - var x = 0, - y = 0, - maxh = 0, - n = data.length; - --di; - while (++di < n) { - d = data[di]; - c.save(); - c.font = d.style + " " + d.weight + " " + ~~((d.size + 1) / ratio) + "px " + d.font; - var w = c.measureText(d.text + "m").width * ratio, - h = d.size << 1; - if (d.rotate) { - var sr = Math.sin(d.rotate * cloudRadians), - cr = Math.cos(d.rotate * cloudRadians), - wcr = w * cr, - wsr = w * sr, - hcr = h * cr, - hsr = h * sr; - w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5; - h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr)); - } else { - w = (w + 0x1f) >> 5 << 5; - } - if (h > maxh) maxh = h; - if (x + w >= (cw << 5)) { - x = 0; - y += maxh; - maxh = 0; - } - if (y + h >= ch) break; - c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio); - if (d.rotate) c.rotate(d.rotate * cloudRadians); - c.fillText(d.text, 0, 0); - if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0); - c.restore(); - d.width = w; - d.height = h; - d.xoff = x; - d.yoff = y; - d.x1 = w >> 1; - d.y1 = h >> 1; - d.x0 = -d.x1; - d.y0 = -d.y1; - d.hasText = true; - x += w; - } - var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, - sprite = []; - while (--di >= 0) { - d = data[di]; - if (!d.hasText) continue; - var w = d.width, - w32 = w >> 5, - h = d.y1 - d.y0; - // Zero the buffer - for (var i = 0; i < h * w32; i++) sprite[i] = 0; - x = d.xoff; - if (x == null) return; - y = d.yoff; - var seen = 0, - seenRow = -1; - for (var j = 0; j < h; j++) { - for (var i = 0; i < w; i++) { - var k = w32 * j + (i >> 5), - m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0; - sprite[k] |= m; - seen |= m; - } - if (seen) seenRow = j; - else { - d.y0++; - h--; - j--; - y++; - } - } - d.y1 = d.y0 + seenRow; - d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32); - } - } - - // Use mask-based collision detection. - function cloudCollide(tag, board, sw) { - sw >>= 5; - var sprite = tag.sprite, - w = tag.width >> 5, - lx = tag.x - (w << 4), - sx = lx & 0x7f, - msx = 32 - sx, - h = tag.y1 - tag.y0, - x = (tag.y + tag.y0) * sw + (lx >> 5), - last; - for (var j = 0; j < h; j++) { - last = 0; - for (var i = 0; i <= w; i++) { - if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) - & board[x + i]) return true; - } - x += sw; - } - return false; - } - - function cloudBounds(bounds, d) { - var b0 = bounds[0], - b1 = bounds[1]; - if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0; - if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0; - if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1; - if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1; - } - - function collideRects(a, b) { - return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y; - } - - function archimedeanSpiral(size) { - var e = size[0] / size[1]; - return function(t) { - return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)]; - }; - } - - function rectangularSpiral(size) { - var dy = 4, - dx = dy * size[0] / size[1], - x = 0, - y = 0; - return function(t) { - var sign = t < 0 ? -1 : 1; - // See triangular numbers: T_n = n * (n + 1) / 2. - switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) { - case 0: x += dx; break; - case 1: y += dy; break; - case 2: x -= dx; break; - default: y -= dy; break; - } - return [x, y]; - }; - } - - // TODO reuse arrays? - function zeroArray(n) { - var a = [], - i = -1; - while (++i < n) a[i] = 0; - return a; - } - - var cloudRadians = Math.PI / 180, - cw = 1 << 11 >> 5, - ch = 1 << 11, - canvas, - ratio = 1; - - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); - canvas.width = 1; - canvas.height = 1; - ratio = Math.sqrt(canvas.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2); - canvas.width = (cw << 5) / ratio; - canvas.height = ch / ratio; - } else { - // node-canvas support - var Canvas = require("canvas"); - canvas = new Canvas(cw << 5, ch); - } - - var c = canvas.getContext("2d"), - spirals = { - archimedean: archimedeanSpiral, - rectangular: rectangularSpiral - }; - c.fillStyle = c.strokeStyle = "red"; - c.textAlign = "center"; - - exports.cloud = cloud; -})(typeof exports === "undefined" ? d3.layout || (d3.layout = {}) : exports); diff --git a/plugins/tiddlywiki/d3/files/d3.min.js b/plugins/tiddlywiki/d3/files/d3.min.js deleted file mode 100644 index bde761df5e..0000000000 --- a/plugins/tiddlywiki/d3/files/d3.min.js +++ /dev/null @@ -1,5 +0,0 @@ -d3=function(){function n(n){return null!=n&&!isNaN(n)}function t(n){return n.length}function e(n){for(var t=1;n*t%1;)t*=10;return t}function r(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function i(){}function u(){}function a(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function o(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=Na.length;r>e;++e){var i=Na[e]+t;if(i in n)return i}}function c(n){for(var t=-1,e=n.length,r=[];++te;e++)for(var i,u=n[e],a=0,o=u.length;o>a;a++)(i=u[a])&&t(i,a,e);return n}function C(n){return za(n,Oa),n}function z(n){var t,e;return function(r,i,u){var a,o=n[u].update,c=o.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(a=o[t])&&++t0&&(n=n.substring(0,o));var l=Ra.get(n);return l&&(n=l,c=L),o?t?i:r:t?s:u}function j(n,t){return function(e){var r=da.event;da.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{da.event=r}}}function L(n,t){var e=j(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function H(){var n=".dragsuppress-"+ ++Ia,t="touchmove"+n,e="selectstart"+n,r="dragstart"+n,i="click"+n,u=da.select(ya).on(t,g).on(e,g).on(r,g),a=va.style,o=a[Ua];return a[Ua]="none",function(t){function e(){u.on(i,null)}u.on(n,null),a[Ua]=o,t&&(u.on(i,function(){g(),e()},!0),setTimeout(e,0))}}function F(n,t){var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>Va&&(ya.scrollX||ya.scrollY)){e=da.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var i=e[0][0].getScreenCTM();Va=!(i.f||i.e),e.remove()}return Va?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var u=n.getBoundingClientRect();return[t.clientX-u.left-n.clientLeft,t.clientY-u.top-n.clientTop]}function P(){}function O(n,t,e){return new Y(n,t,e)}function Y(n,t,e){this.h=n,this.s=t,this.l=e}function R(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(a-u)*n/60:180>n?a:240>n?u+(a-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,a;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,a=.5>=e?e*(1+t):e+t-e*t,u=2*e-a,it(i(n+120),i(n),i(n-120))}function U(n){return n>0?1:0>n?-1:0}function I(n){return n>1?0:-1>n?Wa:Math.acos(n)}function V(n){return n>1?Wa/2:-1>n?-Wa/2:Math.asin(n)}function X(n){return(Math.exp(n)-Math.exp(-n))/2}function Z(n){return(Math.exp(n)+Math.exp(-n))/2}function B(n){return(n=Math.sin(n/2))*n}function $(n,t,e){return new W(n,t,e)}function W(n,t,e){this.h=n,this.c=t,this.l=e}function J(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),G(e,Math.cos(n*=Ka)*t,Math.sin(n)*t)}function G(n,t,e){return new K(n,t,e)}function K(n,t,e){this.l=n,this.a=t,this.b=e}function Q(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=tt(i)*eo,r=tt(r)*ro,u=tt(u)*io,it(rt(3.2404542*i-1.5371385*r-.4985314*u),rt(-.969266*i+1.8760108*r+.041556*u),rt(.0556434*i-.2040259*r+1.0572252*u))}function nt(n,t,e){return n>0?$(Math.atan2(e,t)*Qa,Math.sqrt(t*t+e*e),n):$(0/0,0/0,n)}function tt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function et(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function rt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function it(n,t,e){return new ut(n,t,e)}function ut(n,t,e){this.r=n,this.g=t,this.b=e}function at(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function ot(n,t,e){var r,i,u,a=0,o=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(ft(i[0]),ft(i[1]),ft(i[2]))}return(u=oo.get(n))?t(u.r,u.g,u.b):(null!=n&&"#"===n.charAt(0)&&(4===n.length?(a=n.charAt(1),a+=a,o=n.charAt(2),o+=o,c=n.charAt(3),c+=c):7===n.length&&(a=n.substring(1,3),o=n.substring(3,5),c=n.substring(5,7)),a=parseInt(a,16),o=parseInt(o,16),c=parseInt(c,16)),t(a,o,c))}function ct(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),a=Math.max(n,t,e),o=a-u,c=(a+u)/2;return o?(i=.5>c?o/(a+u):o/(2-a-u),r=n==a?(t-e)/o+(e>t?6:0):t==a?(e-n)/o+2:(n-t)/o+4,r*=60):(r=0/0,i=c>0&&1>c?0:r),O(r,i,c)}function lt(n,t,e){n=st(n),t=st(t),e=st(e);var r=et((.4124564*n+.3575761*t+.1804375*e)/eo),i=et((.2126729*n+.7151522*t+.072175*e)/ro),u=et((.0193339*n+.119192*t+.9503041*e)/io);return G(116*i-16,500*(r-i),200*(i-u))}function st(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function ft(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function ht(n){return"function"==typeof n?n:function(){return n}}function gt(n){return n}function pt(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),dt(t,e,n,r)}}function dt(n,t,e,r){function i(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(u,c)}catch(r){return a.error.call(u,r),void 0}a.load.call(u,n)}else a.error.call(u,c)}var u={},a=da.dispatch("progress","load","error"),o={},c=new XMLHttpRequest,l=null;return!ya.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=i:c.onreadystatechange=function(){c.readyState>3&&i()},c.onprogress=function(n){var t=da.event;da.event=n;try{a.progress.call(u,c)}finally{da.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?o[n]:(null==t?delete o[n]:o[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(l=n,u):l},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(qa(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),c.open(e,n,!0),null==t||"accept"in o||(o.accept=t+",*/*"),c.setRequestHeader)for(var a in o)c.setRequestHeader(a,o[a]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),c.send(null==r?null:r),u},u.abort=function(){return c.abort(),u},da.rebind(u,a,"on"),null==r?u:u.get(mt(r))}function mt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function vt(){var n=yt(),t=Mt()-n;t>24?(isFinite(t)&&(clearTimeout(fo),fo=setTimeout(vt,t)),so=0):(so=1,ho(vt))}function yt(){for(var n=Date.now(),t=co;t;)n>=t.time&&(t.flush=t.callback(n-t.time)),t=t.next;return n}function Mt(){for(var n,t=co,e=1/0;t;)t.flush?t=n?n.next=t.next:co=t.next:(t.time8?function(n){return n/e}:function(n){return n*e},symbol:n}}function bt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function _t(n){return n+""}function wt(){}function St(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function Et(n,t){n&&Eo.hasOwnProperty(n.type)&&Eo[n.type](n,t)}function kt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++io;++o)i.point((e=n[o])[0],e[1]);return i.lineEnd(),void 0}var c={point:e,points:n,other:null,visited:!1,entry:!0,subject:!0},l={point:e,points:[e],other:c,visited:!1,entry:!1,subject:!1};c.other=l,u.push(c),a.push(l),c={point:r,points:[r],other:null,visited:!1,entry:!1,subject:!0},l={point:r,points:[r],other:c,visited:!1,entry:!0,subject:!1},c.other=l,u.push(c),a.push(l)}}),a.sort(t),Vt(u),Vt(a),u.length){if(e)for(var o=1,c=!e(a[0].point),l=a.length;l>o;++o)a[o].entry=c=!c;for(var s,f,h,g=u[0];;){for(s=g;s.visited;)if((s=s.next)===g)return;f=s.points,i.lineStart();do{if(s.visited=s.other.visited=!0,s.entry){if(s.subject)for(var o=0;o=0;)i.point((h=f[o])[0],h[1])}else r(s.point,s.prev.point,-1,i);s=s.prev}s=s.other,f=s.points}while(!s.visited);i.lineEnd()}}}function Vt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r1&&2&t&&e.push(e.pop().concat(e.shift())),h.push(e.filter(Zt))}}var h,g,p,d=t(i),m={point:u,lineStart:o,lineEnd:c,polygonStart:function(){m.point=l,m.lineStart=s,m.lineEnd=f,h=[],g=[],i.polygonStart()},polygonEnd:function(){m.point=u,m.lineStart=o,m.lineEnd=c,h=da.merge(h),h.length?It(h,$t,null,e,i):r(g)&&(i.lineStart(),e(null,null,1,i),i.lineEnd()),i.polygonEnd(),h=g=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},v=Bt(),y=t(v);return m}}function Zt(n){return n.length>1}function Bt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:s,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function $t(n,t){return((n=n.point)[0]<0?n[1]-Wa/2-Ja:Wa/2-n[1])-((t=t.point)[0]<0?t[1]-Wa/2-Ja:Wa/2-t[1])}function Wt(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,a=!1,o=!1,c=0;Ao.reset();for(var l=0,s=t.length;s>l;++l){var f=t[l],h=f.length;if(h){for(var g=f[0],p=g[0],d=g[1]/2+Wa/4,m=Math.sin(d),v=Math.cos(d),y=1;;){y===h&&(y=0),n=f[y];var M=n[0],x=n[1]/2+Wa/4,b=Math.sin(x),_=Math.cos(x),w=M-p,S=Math.abs(w)>Wa,E=m*b;if(Ao.add(Math.atan2(E*Math.sin(w),v*_+E*Math.cos(w))),Math.abs(x)=0?2:-2)*Wa:w,S^p>=e^M>=e){var k=Ct(qt(g),qt(n));jt(k);var A=Ct(i,k);jt(A);var N=(S^w>=0?-1:1)*V(A[2]);r>N&&(c+=S^w>=0?1:-1)}if(!y++)break;p=M,m=b,v=_,g=n}Math.abs(u)>Ja&&(a=!0)}}return(!o&&!a&&0>Ao||-Ja>u)^1&c}function Jt(n){var t,e=0/0,r=0/0,i=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(u,a){var o=u>0?Wa:-Wa,c=Math.abs(u-e);Math.abs(c-Wa)0?Wa/2:-Wa/2),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(o,r),n.point(u,r),t=0):i!==o&&c>=Wa&&(Math.abs(e-i)Ja?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*a)):(t+r)/2}function Kt(n,t,e,r){var i;if(null==n)i=e*Wa/2,r.point(-Wa,i),r.point(0,i),r.point(Wa,i),r.point(Wa,0),r.point(Wa,-i),r.point(0,-i),r.point(-Wa,-i),r.point(-Wa,0),r.point(-Wa,i);else if(Math.abs(n[0]-t[0])>Ja){var u=(n[0]a}function e(n){var e,u,a,c,s;return{lineStart:function(){c=a=!1,s=1},point:function(f,h){var g,p=[f,h],d=t(f,h),m=o?d?0:i(f,h):d?i(f+(0>f?Wa:-Wa),h):0;if(!e&&(c=a=d)&&n.lineStart(),d!==a&&(g=r(e,p),(Ht(e,g)||Ht(p,g))&&(p[0]+=Ja,p[1]+=Ja,d=t(p[0],p[1]))),d!==a)s=0,d?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(l&&e&&o^d){var v;m&u||!(v=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(v[0][0],v[0][1]),n.point(v[1][0],v[1][1]),n.lineEnd()):(n.point(v[1][0],v[1][1]),n.lineEnd(),n.lineStart(),n.point(v[0][0],v[0][1])))}!d||e&&Ht(e,p)||n.point(p[0],p[1]),e=p,a=d,u=m},lineEnd:function(){a&&n.lineEnd(),e=null},clean:function(){return s|(c&&a)<<1}}}function r(n,t,e){var r=qt(n),i=qt(t),u=[1,0,0],o=Ct(r,i),c=Tt(o,o),l=o[0],s=c-l*l;if(!s)return!e&&n;var f=a*c/s,h=-a*l/s,g=Ct(u,o),p=Dt(u,f),d=Dt(o,h);zt(p,d);var m=g,v=Tt(p,m),y=Tt(m,m),M=v*v-y*(Tt(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=Dt(m,(-v-x)/y);if(zt(b,p),b=Lt(b),!e)return b;var _,w=n[0],S=t[0],E=n[1],k=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=Math.abs(A-Wa)A;if(!N&&E>k&&(_=E,E=k,k=_),q?N?E+k>0^b[1]<(Math.abs(b[0]-w)Wa^(w<=b[0]&&b[0]<=S)){var T=Dt(m,(-v+x)/y);return zt(T,p),[b,Lt(T)]}}}function i(t,e){var r=o?n:Wa-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}function u(n){return Wt(c,n)}var a=Math.cos(n),o=a>0,c=[n,0],l=Math.abs(a)>Ja,s=Ee(n,6*Ka);return Xt(t,e,s,u)}function te(n,t,e,r){function i(r,i){return Math.abs(r[0]-n)0?0:3:Math.abs(r[0]-e)0?2:1:Math.abs(r[1]-t)0?1:0:i>0?3:2}function u(n,t){return a(n.point,t.point)}function a(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}function o(i,u){var a=u[0]-i[0],o=u[1]-i[1],c=[0,1];return Math.abs(a)0&&(i[0]+=c[0]*a,i[1]+=c[0]*o),!0):!1}return function(c){function l(u){var a=i(u,-1),o=s([0===a||3===a?n:e,a>1?r:t]);return o}function s(n){for(var t=0,e=M.length,r=n[1],i=0;e>i;++i)for(var u,a=1,o=M[i],c=o.length,l=o[0];c>a;++a)u=o[a],l[1]<=r?u[1]>r&&f(l,u,n)>0&&++t:u[1]<=r&&f(l,u,n)<0&&--t,l=u;return 0!==t}function f(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(e[0]-n[0])*(t[1]-n[1])}function h(u,o,c,l){var s=0,f=0;if(null==u||(s=i(u,c))!==(f=i(o,c))||a(u,o)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(o[0],o[1])}function g(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function p(n,t){g(n,t)&&c.point(n,t)}function d(){T.point=v,M&&M.push(x=[]),A=!0,k=!1,S=E=0/0}function m(){y&&(v(b,_),w&&k&&q.rejoin(),y.push(q.buffer())),T.point=p,k&&c.lineEnd()}function v(n,t){n=Math.max(-Io,Math.min(Io,n)),t=Math.max(-Io,Math.min(Io,t));var e=g(n,t);if(M&&x.push([n,t]),A)b=n,_=t,w=e,A=!1,e&&(c.lineStart(),c.point(n,t));else if(e&&k)c.point(n,t);else{var r=[S,E],i=[n,t];o(r,i)?(k||(c.lineStart(),c.point(r[0],r[1])),c.point(i[0],i[1]),e||c.lineEnd()):e&&(c.lineStart(),c.point(n,t))}S=n,E=t,k=e}var y,M,x,b,_,w,S,E,k,A,N=c,q=Bt(),T={point:p,lineStart:d,lineEnd:m,polygonStart:function(){c=q,y=[],M=[]},polygonEnd:function(){c=N,(y=da.merge(y)).length?(c.polygonStart(),It(y,u,l,h,c),c.polygonEnd()):s([n,t])&&(c.polygonStart(),c.lineStart(),h(null,null,1,c),c.lineEnd(),c.polygonEnd()),y=M=x=null}};return T}}function ee(n,t,e){if(Math.abs(t)=n;var r=n/t;if(t>0){if(r>e[1])return!1;r>e[0]&&(e[0]=r)}else{if(rn&&(Zo=n),n>$o&&($o=n),Bo>t&&(Bo=t),t>Wo&&(Wo=t)}function ce(){function n(n,t){a.push("M",n,",",t,u)}function t(n,t){a.push("M",n,",",t),o.point=e}function e(n,t){a.push("L",n,",",t)}function r(){o.point=n}function i(){a.push("Z")}var u=le(4.5),a=[],o={point:n,lineStart:function(){o.point=t},lineEnd:r,polygonStart:function(){o.lineEnd=i},polygonEnd:function(){o.lineEnd=r,o.point=n},pointRadius:function(n){return u=le(n),o},result:function(){if(a.length){var n=a.join("");return a=[],n}}};return o}function le(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function se(n,t){Co+=n,zo+=t,++Do}function fe(){function n(n,r){var i=n-t,u=r-e,a=Math.sqrt(i*i+u*u);jo+=a*(t+n)/2,Lo+=a*(e+r)/2,Ho+=a,se(t=n,e=r)}var t,e;Ko.point=function(r,i){Ko.point=n,se(t=r,e=i)}}function he(){Ko.point=se}function ge(){function n(n,t){var e=n-r,u=t-i,a=Math.sqrt(e*e+u*u);jo+=a*(r+n)/2,Lo+=a*(i+t)/2,Ho+=a,a=i*n-r*t,Fo+=a*(r+n),Po+=a*(i+t),Oo+=3*a,se(r=n,i=t)}var t,e,r,i;Ko.point=function(u,a){Ko.point=n,se(t=r=u,e=i=a)},Ko.lineEnd=function(){n(t,e)}}function pe(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,a,0,2*Wa)}function e(t,e){n.moveTo(t,e),o.point=r}function r(t,e){n.lineTo(t,e)}function i(){o.point=t}function u(){n.closePath()}var a=4.5,o={point:t,lineStart:function(){o.point=e},lineEnd:i,polygonStart:function(){o.lineEnd=u},polygonEnd:function(){o.lineEnd=i,o.point=t},pointRadius:function(n){return a=n,o},result:s};return o}function de(n){function t(t){function r(e,r){e=n(e,r),t.point(e[0],e[1])}function i(){M=0/0,S.point=a,t.lineStart()}function a(r,i){var a=qt([r,i]),o=n(r,i);e(M,x,y,b,_,w,M=o[0],x=o[1],y=r,b=a[0],_=a[1],w=a[2],u,t),t.point(M,x)}function o(){S.point=r,t.lineEnd()}function c(){i(),S.point=l,S.lineEnd=s}function l(n,t){a(f=n,h=t),g=M,p=x,d=b,m=_,v=w,S.point=a}function s(){e(M,x,y,b,_,w,g,p,f,d,m,v,u,t),S.lineEnd=o,o()}var f,h,g,p,d,m,v,y,M,x,b,_,w,S={point:r,lineStart:i,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=i}};return S}function e(t,u,a,o,c,l,s,f,h,g,p,d,m,v){var y=s-t,M=f-u,x=y*y+M*M;if(x>4*r&&m--){var b=o+g,_=c+p,w=l+d,S=Math.sqrt(b*b+_*_+w*w),E=Math.asin(w/=S),k=Math.abs(Math.abs(w)-1)r||Math.abs((y*T+M*C)/x-.5)>.3||i>o*g+c*p+l*d)&&(e(t,u,a,o,c,l,N,q,k,b/=S,_/=S,w,m,v),v.point(N,q),e(N,q,k,b,_,w,s,f,h,g,p,d,m,v))}}var r=.5,i=Math.cos(30*Ka),u=16;return t.precision=function(n){return arguments.length?(u=(r=n*n)>0&&16,t):Math.sqrt(r)},t}function me(n){var t=de(function(t,e){return n([t*Qa,e*Qa])});return function(n){return n=t(n),{point:function(t,e){n.point(t*Ka,e*Ka)},sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}}function ve(n){return ye(function(){return n})()}function ye(n){function t(n){return n=o(n[0]*Ka,n[1]*Ka),[n[0]*h+c,l-n[1]*h]}function e(n){return n=o.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Qa,n[1]*Qa]}function r(){o=re(a=be(v,y,M),u);var n=u(d,m);return c=g-n[0]*h,l=p+n[1]*h,i()}function i(){return s&&(s.valid=!1,s=null),t}var u,a,o,c,l,s,f=de(function(n,t){return n=u(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,d=0,m=0,v=0,y=0,M=0,x=Ro,b=gt,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=Me(a,x(f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Ro):ne((_=+n)*Ka),i()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=null==n?gt:te(n[0][0],n[0][1],n[1][0],n[1][1]),i()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(d=n[0]%360*Ka,m=n[1]%360*Ka,r()):[d*Qa,m*Qa]},t.rotate=function(n){return arguments.length?(v=n[0]%360*Ka,y=n[1]%360*Ka,M=n.length>2?n[2]%360*Ka:0,r()):[v*Qa,y*Qa,M*Qa]},da.rebind(t,f,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function Me(n,t){return{point:function(e,r){r=n(e*Ka,r*Ka),e=r[0],t.point(e>Wa?e-2*Wa:-Wa>e?e+2*Wa:e,r[1])},sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function xe(n,t){return[n,t]}function be(n,t,e){return n?t||e?re(we(n),Se(t,e)):we(n):t||e?Se(t,e):xe}function _e(n){return function(t,e){return t+=n,[t>Wa?t-2*Wa:-Wa>t?t+2*Wa:t,e]}}function we(n){var t=_e(n);return t.invert=_e(-n),t}function Se(n,t){function e(n,t){var e=Math.cos(t),o=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+o*i;return[Math.atan2(c*u-s*a,o*r-l*i),V(s*u+c*a)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),a=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),o=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*u-c*a;return[Math.atan2(c*u+l*a,o*r+s*i),V(s*r-o*i)]},e}function Ee(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,a,o){null!=i?(i=ke(e,i),u=ke(e,u),(a>0?u>i:i>u)&&(i+=2*a*Wa)):(i=n+2*a*Wa,u=n);for(var c,l=a*t,s=i;a>0?s>u:u>s;s-=l)o.point((c=Lt([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],c[1])}}function ke(n,t){var e=qt(t);e[0]-=n,jt(e);var r=I(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ja)%(2*Math.PI)}function Ae(n,t,e){var r=da.range(n,t-Ja,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function Ne(n,t,e){var r=da.range(n,t-Ja,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function qe(n){return n.source}function Te(n){return n.target}function Ce(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),a=Math.cos(r),o=Math.sin(r),c=i*Math.cos(n),l=i*Math.sin(n),s=a*Math.cos(e),f=a*Math.sin(e),h=2*Math.asin(Math.sqrt(B(r-t)+i*a*B(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,i=e*l+t*f,a=e*u+t*o;return[Math.atan2(i,r)*Qa,Math.atan2(a,Math.sqrt(r*r+i*i))*Qa]}:function(){return[n*Qa,t*Qa]};return p.distance=h,p}function ze(){function n(n,i){var u=Math.sin(i*=Ka),a=Math.cos(i),o=Math.abs((n*=Ka)-t),c=Math.cos(o);Qo+=Math.atan2(Math.sqrt((o=a*Math.sin(o))*o+(o=r*u-e*a*c)*o),e*u+r*a*c),t=n,e=u,r=a}var t,e,r;nc.point=function(i,u){t=i*Ka,e=Math.sin(u*=Ka),r=Math.cos(u),nc.point=n},nc.lineEnd=function(){nc.point=nc.lineEnd=s}}function De(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),a=Math.cos(i);return[Math.atan2(n*u,r*a),Math.asin(r&&e*u/r)]},e}function je(n,t){function e(n,t){var e=Math.abs(Math.abs(t)-Wa/2)1&&i.push("H",r[0]),i.join("")}function Xe(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1){o=t[1],u=n[c],c++,r+="C"+(i[0]+a[0])+","+(i[1]+a[1])+","+(u[0]-o[0])+","+(u[1]-o[1])+","+u[0]+","+u[1];for(var l=2;l9&&(i=3*t/Math.sqrt(i),a[o]=i*e,a[o+1]=i*r));for(o=-1;++o<=c;)i=(n[Math.min(c,o+1)][0]-n[Math.max(0,o-1)][0])/(6*(1+a[o]*a[o])),u.push([i||0,a[o]*i||0]);return u}function or(n){return n.length<3?Ue(n):n[0]+Je(n,ar(n))}function cr(n,t,e,r){var i,u,a,o,c,l,s;return i=r[n],u=i[0],a=i[1],i=r[t],o=i[0],c=i[1],i=r[e],l=i[0],s=i[1],(s-a)*(o-u)-(c-a)*(l-u)>0}function lr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function sr(n,t,e,r){var i=n[0],u=e[0],a=t[0]-i,o=r[0]-u,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(o*(c-l)-f*(i-u))/(f*a-o*s);return[i+h*a,c+h*s]}function fr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function hr(n,t){var e={list:n.map(function(n,t){return{index:t,x:n[0],y:n[1]}}).sort(function(n,t){return n.yt.y?1:n.xt.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,"l"),r.rightEnd=r.createHalfEdge(null,"l"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(n,t){return{edge:n,side:t,vertex:null,l:null,r:null}},insert:function(n,t){t.l=n,t.r=n.r,n.r.l=t,n.r=t},leftBound:function(n){var t=r.leftEnd;do t=t.r;while(t!=r.rightEnd&&i.rightOf(t,n));return t=t.l},del:function(n){n.l.r=n.r,n.r.l=n.l,n.edge=null},right:function(n){return n.r},left:function(n){return n.l},leftRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[n.side]},rightRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[fc[n.side]]}},i={bisect:function(n,t){var e={region:{l:n,r:t},ep:{l:null,r:null}},r=t.x-n.x,i=t.y-n.y,u=r>0?r:-r,a=i>0?i:-i;return e.c=n.x*r+n.y*i+.5*(r*r+i*i),u>a?(e.a=1,e.b=i/r,e.c/=r):(e.b=1,e.a=r/i,e.c/=i),e},intersect:function(n,t){var e=n.edge,r=t.edge;if(!e||!r||e.region.r==r.region.r)return null;var i=e.a*r.b-e.b*r.a;if(Math.abs(i)<1e-10)return null;var u,a,o=(e.c*r.b-r.c*e.b)/i,c=(r.c*e.a-e.c*r.a)/i,l=e.region.r,s=r.region.r;l.y=a.region.r.x;return f&&"l"===u.side||!f&&"r"===u.side?null:{x:o,y:c}},rightOf:function(n,t){var e=n.edge,r=e.region.r,i=t.x>r.x;if(i&&"l"===n.side)return 1;if(!i&&"r"===n.side)return 0;if(1===e.a){var u=t.y-r.y,a=t.x-r.x,o=0,c=0;if(!i&&e.b<0||i&&e.b>=0?c=o=u>=e.b*a:(c=t.x+t.y*e.b>e.c,e.b<0&&(c=!c),c||(o=1)),!o){var l=r.x-e.region.l.x;c=e.b*(a*a-u*u)h*h+g*g}return"l"===n.side?c:!c},endPoint:function(n,e,r){n.ep[e]=r,n.ep[fc[e]]&&t(n)},distance:function(n,t){var e=n.x-t.x,r=n.y-t.y;return Math.sqrt(e*e+r*r)}},u={list:[],insert:function(n,t,e){n.vertex=t,n.ystar=t.y+e;for(var r=0,i=u.list,a=i.length;a>r;r++){var o=i[r];if(!(n.ystar>o.ystar||n.ystar==o.ystar&&t.x>o.vertex.x))break}i.splice(r,0,n)},del:function(n){for(var t=0,e=u.list,r=e.length;r>t&&e[t]!=n;++t);e.splice(t,1)},empty:function(){return 0===u.list.length},nextEvent:function(n){for(var t=0,e=u.list,r=e.length;r>t;++t)if(e[t]==n)return e[t+1];return null},min:function(){var n=u.list[0];return{x:n.vertex.x,y:n.ystar}},extractMin:function(){return u.list.shift()}};r.init(),e.bottomSite=e.list.shift();for(var a,o,c,l,s,f,h,g,p,d,m,v,y,M=e.list.shift();;)if(u.empty()||(a=u.min()),M&&(u.empty()||M.yg.y&&(p=h,h=g,g=p,y="r"),v=i.bisect(h,g),f=r.createHalfEdge(v,y),r.insert(l,f),i.endPoint(v,fc[y],m),d=i.intersect(l,f),d&&(u.del(l),u.insert(l,d,i.distance(d,h))),d=i.intersect(f,s),d&&u.insert(f,d,i.distance(d,h))}for(o=r.right(r.leftEnd);o!=r.rightEnd;o=r.right(o))t(o.edge)}function gr(n){return n.x}function pr(n){return n.y}function dr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function mr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var a=.5*(e+i),o=.5*(r+u),c=t.nodes;c[0]&&mr(n,c[0],e,r,a,o),c[1]&&mr(n,c[1],a,r,i,o),c[2]&&mr(n,c[2],e,o,a,u),c[3]&&mr(n,c[3],a,o,i,u)}}function vr(n,t){n=da.rgb(n),t=da.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,a=t.g-r,o=t.b-i;return function(t){return n.r=Math.round(e+u*t),n.g=Math.round(r+a*t),n.b=Math.round(i+o*t),n}}function yr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=br(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function Mr(n,t){return t-=n=+n,function(e){return n+t*e}}function xr(n,t){var e,r,i,u,a,o=0,c=0,l=[],s=[];for(n+="",t+="",hc.lastIndex=0,r=0;e=hc.exec(t);++r)e.index&&l.push(t.substring(o,c=e.index)),s.push({i:l.length,x:e[0]}),l.push(null),o=hc.lastIndex;for(or;++r)if(a=s[r],a.x==e[0]){if(a.i)if(null==l[a.i+1])for(l[a.i-1]+=a.x,l.splice(a.i,1),i=r+1;u>i;++i)s[i].i--;else for(l[a.i-1]+=a.x+l[a.i+1],l.splice(a.i,2),i=r+1;u>i;++i)s[i].i-=2;else if(null==l[a.i+1])l[a.i]=a.x;else for(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1),i=r+1;u>i;++i)s[i].i--;s.splice(r,1),u--,r--}else a.x=Mr(parseFloat(e[0]),parseFloat(a.x));for(;u>r;)a=s.pop(),null==l[a.i+1]?l[a.i]=a.x:(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1)),u--;return 1===l.length?null==l[0]?(a=s[0].x,function(n){return a(n)+""}):function(){return t}:function(n){for(r=0;u>r;++r)l[(a=s[r]).i]=a.x(n);return l.join("")}}function br(n,t){for(var e,r=da.interpolators.length;--r>=0&&!(e=da.interpolators[r](n,t)););return e}function _r(n,t){var e,r=[],i=[],u=n.length,a=t.length,o=Math.min(n.length,t.length);for(e=0;o>e;++e)r.push(br(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;a>e;++e)i[e]=t[e];return function(n){for(e=0;o>e;++e)i[e]=r[e](n);return i}}function wr(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function Sr(n){return function(t){return 1-n(1-t)}}function Er(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function kr(n){return n*n}function Ar(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function qr(n){return function(t){return Math.pow(t,n)}}function Tr(n){return 1-Math.cos(n*Wa/2)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Dr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/(2*Wa)*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,10*-r)*Math.sin(2*(r-e)*Wa/t)}}function jr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Lr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Hr(n,t){n=da.hcl(n),t=da.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,a=t.c-r,o=t.l-i;return isNaN(a)&&(a=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(t){return n.h=e+u*t,n.c=r+a*t,n.l=i+o*t,n}}function Fr(n,t){n=da.hsl(n),t=da.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,a=t.s-r,o=t.l-i;return isNaN(a)&&(a=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(t){return n.h=e+u*t,n.s=r+a*t,n.l=i+o*t,n}}function Pr(n,t){n=da.lab(n),t=da.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,a=t.a-r,o=t.b-i;return function(t){return n.l=e+u*t,n.a=r+a*t,n.b=i+o*t,n}}function Or(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Yr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Ur(t),i=Rr(t,e),u=Ur(Ir(e,t,-i))||0;t[0]*e[1]180?s+=360:s-l>180&&(l+=360),i.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:Mr(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?i.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:Mr(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),i.push({i:e-4,x:Mr(g[0],p[0])},{i:e-2,x:Mr(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=i.length,function(n){for(var t,u=-1;++ue;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function hi(n){return n.reduce(gi,0)}function gi(n,t){return n+t[1]}function pi(n,t){return di(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function di(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function mi(n){return[da.min(n),da.max(n)]}function vi(n,t){return n.parent==t.parent?1:2}function yi(n){var t=n.children;return t&&t.length?t[0]:n._tree.thread}function Mi(n){var t,e=n.children;return e&&(t=e.length)?e[t-1]:n._tree.thread}function xi(n,t){var e=n.children;if(e&&(i=e.length))for(var r,i,u=-1;++u0&&(n=r);return n}function bi(n,t){return n.x-t.x}function _i(n,t){return t.x-n.x}function wi(n,t){return n.depth-t.depth}function Si(n,t){function e(n,r){var i=n.children;if(i&&(a=i.length))for(var u,a,o=null,c=-1;++c=0;)t=i[u]._tree,t.prelim+=e,t.mod+=e,e+=t.shift+(r+=t.change)}function ki(n,t,e){n=n._tree,t=t._tree;var r=e/(t.number-n.number);n.change+=r,t.change-=r,t.shift+=e,t.prelim+=e,t.mod+=e}function Ai(n,t,e){return n._tree.ancestor.parent==t.parent?n._tree.ancestor:e}function Ni(n,t){return n.value-t.value}function qi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Ti(n,t){n._pack_next=t,t._pack_prev=n}function Ci(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function zi(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,i,u,a,o,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(Di),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(i=e[1],i.x=i.r,i.y=0,t(i),l>2))for(u=e[2],Hi(r,i,u),t(u),qi(r,u),r._pack_prev=u,qi(u,i),i=r._pack_next,a=3;l>a;a++){Hi(r,i,u=e[a]);var p=0,d=1,m=1;for(o=i._pack_next;o!==i;o=o._pack_next,d++)if(Ci(o,u)){p=1;break}if(1==p)for(c=r._pack_prev;c!==o._pack_prev&&!Ci(c,u);c=c._pack_prev,m++);p?(m>d||d==m&&i.ra;a++)u=e[a],u.x-=v,u.y-=y,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(ji)}}function Di(n){n._pack_next=n._pack_prev=n}function ji(n){delete n._pack_next,delete n._pack_prev}function Li(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,a=i.length;++ui&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Ii(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Vi(n){return n.rangeExtent?n.rangeExtent():Ii(n.range())}function Xi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Zi(n,t){var e,r=0,i=n.length-1,u=n[r],a=n[i];return u>a&&(e=r,r=i,i=e,e=u,u=a,a=e),n[r]=t.floor(u),n[i]=t.ceil(a),n}function Bi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:_c}function $i(n,t,e,r){var i=[],u=[],a=0,o=Math.min(n.length,t.length)-1;for(n[o]2?$i:Xi,c=r?Zr:Xr;return a=i(n,t,c,e),o=i(t,n,c,br),u}function u(n){return a(n)}var a,o;return u.invert=function(n){return o(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Or)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return nu(n,t)},u.tickFormat=function(t,e){return tu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return da.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Zi(n,Bi(t?Qi(n,t)[2]:Ki(n)))}function Ki(n){var t=Ii(n),e=t[1]-t[0];return Math.pow(10,Math.round(Math.log(e)/Math.LN10)-1)}function Qi(n,t){var e=Ii(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function nu(n,t){return da.range.apply(da,Qi(n,t))}function tu(n,t,e){var r=-Math.floor(Math.log(Qi(n,t)[2])/Math.LN10+.01);return da.format(e?e.replace(Mo,function(n,t,e,i,u,a,o,c,l,s){return[t,e,i,u,a,o,c,l||"."+(r-2*("%"===s)),s].join("")}):",."+r+"f")}function eu(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function a(t){return n(i(t))}return a.invert=function(t){return u(n.invert(t))},a.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),a):r},a.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),a):t},a.nice=function(){var t=Zi(r.map(i),e?Math:Sc);return n.domain(t),r=t.map(u),a},a.ticks=function(){var n=Ii(r),a=[];if(n.every(isFinite)){var o=n[0],c=n[1],l=Math.floor(i(o)),s=Math.ceil(i(c)),f=t%1?2:t;if(e){for(;s>l;l++)for(var h=1;f>h;h++)a.push(u(l)*h);a.push(u(l))}else for(a.push(u(l));l++0;h--)a.push(u(l)*h);for(l=0;a[l]c;s--);a=a.slice(l,s)}return a},a.tickFormat=function(n,t){if(!arguments.length)return wc;arguments.length<2?t=wc:"function"!=typeof t&&(t=da.format(t));var r,o=Math.max(.1,n/a.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/u(c(i(n)+r))<=o?t(n):""}},a.copy=function(){return eu(n.copy(),t,e,r)},Ji(a,n)}function ru(n,t,e){function r(t){return n(i(t))}var i=iu(t),u=iu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return nu(e,n)},r.tickFormat=function(n,t){return tu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(a){return arguments.length?(i=iu(t=a),u=iu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return ru(n.copy(),t,e)},Ji(r,n)}function iu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function uu(n,t){function e(t){return a[((u.get(t)||u.set(t,n.push(t)))-1)%a.length]}function r(t,e){return da.range(n.length).map(function(n){return t+e*n})}var u,a,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new i;for(var a,o=-1,c=r.length;++oe?[0/0,0/0]:[e>0?i[e-1]:n[0],et?0/0:t/u+n,[t,t+1/u]},r.copy=function(){return ou(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[da.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function lu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return nu(n,t)},t.tickFormat=function(t,e){return tu(n,t,e)},t.copy=function(){return lu(n)},t}function su(n){return n.innerRadius}function fu(n){return n.outerRadius}function hu(n){return n.startAngle}function gu(n){return n.endAngle}function pu(n){for(var t,e,r,i=-1,u=n.length;++ie?l():(u.active=e,a.event&&a.event.start.call(n,s,t),a.tween.forEach(function(e,r){(r=r.call(n,s,t))&&p.push(r)}),c(r)||da.timer(c,0,o),1)}function c(r){if(u.active!==e)return l();for(var i=(r-h)/g,o=f(i),c=p.length;c>0;)p[--c].call(n,o);return i>=1?(l(),a.event&&a.event.end.call(n,s,t),1):void 0}function l(){return--u.count?delete u[e]:delete n.__transition__,1}var s=n.__data__,f=a.ease,h=a.delay,g=a.duration,p=[];return r>=h?i(r):da.timer(i,h,o),1},0,o),a}}function ku(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function Au(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function Nu(n,t,e){if(r=[],e&&t.length>1){for(var r,i,u,a=Ii(n.domain()),o=-1,c=t.length,l=(t[1]-t[0])/++e;++o0;)(u=+t[o]-i*l)>=a[0]&&r.push(u);for(--o,i=0;++i1?Date.UTC.apply(this,arguments):arguments[0])}function Tu(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new Uc(e-1)),1),e}function u(n,e){return t(n=new Uc(+n),e),n}function a(n,r,u){var a=i(n),o=[];if(u>1)for(;r>a;)e(a)%u||o.push(new Date(+a)),t(a,1);else for(;r>a;)o.push(new Date(+a)),t(a,1);return o}function o(n,t,e){try{Uc=qu;var r=new qu;return r._=n,a(r,t,e)}finally{Uc=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=a;var c=n.utc=Cu(n);return c.floor=c,c.round=Cu(r),c.ceil=Cu(i),c.offset=Cu(u),c.range=o,n}function Cu(n){return function(t,e){try{Uc=qu;var r=new qu;return r._=t,n(r,e)._}finally{Uc=Date}}}function zu(n,t,e,r){for(var i,u,a=0,o=t.length,c=e.length;o>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(u=ll[t.charAt(a++)],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function Du(n){return new RegExp("^(?:"+n.map(da.requote).join("|")+")","i")}function ju(n){for(var t=new i,e=-1,r=n.length;++en?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Hu(n,t,e){nl.lastIndex=0;var r=nl.exec(t.substring(e));return r?(n.w=tl.get(r[0].toLowerCase()),e+r[0].length):-1}function Fu(n,t,e){Kc.lastIndex=0;var r=Kc.exec(t.substring(e));return r?(n.w=Qc.get(r[0].toLowerCase()),e+r[0].length):-1}function Pu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Ou(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function Yu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Ru(n,t,e){il.lastIndex=0;var r=il.exec(t.substring(e));return r?(n.m=ul.get(r[0].toLowerCase()),e+r[0].length):-1}function Uu(n,t,e){el.lastIndex=0;var r=el.exec(t.substring(e));return r?(n.m=rl.get(r[0].toLowerCase()),e+r[0].length):-1}function Iu(n,t,e){return zu(n,cl.c.toString(),t,e)}function Vu(n,t,e){return zu(n,cl.x.toString(),t,e)}function Xu(n,t,e){return zu(n,cl.X.toString(),t,e)}function Zu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Bu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.y=$u(+r[0]),e+r[0].length):-1}function $u(n){return n+(n>68?1900:2e3)}function Wu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Ju(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Gu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Ku(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Qu(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function na(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ta(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ea(n,t,e){var r=fl.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}function ra(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(Math.abs(t)/60),i=Math.abs(t)%60;return e+Lu(r,"0",2)+Lu(i,"0",2)}function ia(n,t,e){al.lastIndex=0;var r=al.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function ua(n){return n.toISOString()}function aa(n,t,e){function r(t){return n(t)}return r.invert=function(t){return oa(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(oa)},r.nice=function(n){return r.domain(Zi(r.domain(),n))},r.ticks=function(e,i){var u=Ii(r.domain());if("function"!=typeof e){var a=u[1]-u[0],o=a/e,c=da.bisect(gl,o);if(c==gl.length)return t.year(u,e);if(!c)return n.ticks(e).map(oa);Math.log(o/gl[c-1])n?-1:n>t?1:n>=t?0:0/0},da.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},da.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=e);)e=void 0;for(;++ir&&(e=r)}else{for(;++i=e);)e=void 0;for(;++ir&&(e=r)}return e},da.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=e);)e=void 0;for(;++ie&&(e=r)}else{for(;++i=e);)e=void 0;for(;++ie&&(e=r)}return e},da.extent=function(n,t){var e,r,i,u=-1,a=n.length;if(1===arguments.length){for(;++u=e);)e=i=void 0;for(;++ur&&(e=r),r>i&&(i=r))}else{for(;++u=e);)e=void 0;for(;++ur&&(e=r),r>i&&(i=r))}return[e,i]},da.sum=function(n,t){var e,r=0,i=n.length,u=-1;if(1===arguments.length)for(;++u1&&(t=t.map(e)),t=t.filter(n),t.length?da.quantile(t.sort(da.ascending),.5):void 0},da.bisector=function(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n.call(t,t[u],u)r;){var u=r+i>>>1;er)for(;(i=n+r*++o)>t;)u.push(i/a);else for(;(i=n+r*++o)=a.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,d=a[c++],m=new i;++g=a.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,u={},a=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(da.map,e,0),0)},u.key=function(n){return a.push(n),u},u.sortKeys=function(n){return o[a.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},da.set=function(n){var t=new u;if(n)for(var e=0;e=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},da.event=null,da.requote=function(n){return n.replace(Ca,"\\$&")};var Ca=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,za={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},Da=function(n,t){return t.querySelector(n)},ja=function(n,t){return t.querySelectorAll(n)},La=va[o(va,"matchesSelector")],Ha=function(n,t){return La.call(n,t)};"function"==typeof Sizzle&&(Da=function(n,t){return Sizzle(n,t)[0]||null},ja=function(n,t){return Sizzle.uniqueSort(Sizzle(n,t))},Ha=Sizzle.matchesSelector),da.selection=function(){return Ya};var Fa=da.selection.prototype=[];Fa.select=function(n){var t,e,r,i,u=[];n=v(n);for(var a=-1,o=this.length;++a=0&&(e=n.substring(0,t),n=n.substring(t+1)),Pa.hasOwnProperty(e)?{space:Pa[e],local:n}:n}},Fa.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=da.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(M(t,n[t]));return this}return this.each(M(n,t))},Fa.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=n.trim().split(/^|\s+/g)).length,i=-1;if(t=e.classList){for(;++ir){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(S(e,n[e],t));return this}if(2>r)return ya.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(S(n,t,e))},Fa.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(E(t,n[t]));return this}return this.each(E(n,t))},Fa.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Fa.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Fa.append=function(n){return n=k(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Fa.insert=function(n,t){return n=k(n),t=v(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments))})},Fa.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},Fa.data=function(n,t){function e(n,e){var r,u,a,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),d=new Array(o);if(t){var m,v=new i,y=new i,M=[];for(r=-1;++rr;++r)p[r]=A(e[r]);for(;o>r;++r)d[r]=n[r]}p.update=g,p.parentNode=g.parentNode=d.parentNode=n.parentNode,c.push(p),l.push(g),s.push(d)}var r,u,a=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++au;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var o=0,c=e.length;c>o;o++)(r=e[o])&&n.call(r,r.__data__,o)&&t.push(r)}return m(i)},Fa.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Fa.sort=function(n){n=q.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Fa.size=function(){var n=0;return this.each(function(){++n}),n};var Oa=[];da.selection.enter=C,da.selection.enter.prototype=Oa,Oa.append=Fa.append,Oa.empty=Fa.empty,Oa.node=Fa.node,Oa.call=Fa.call,Oa.size=Fa.size,Oa.select=function(n){for(var t,e,r,i,u,a=[],o=-1,c=this.length;++or){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(D(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(D(n,t,e))};var Ra=da.map({mouseenter:"mouseover",mouseleave:"mouseout"});Ra.forEach(function(n){"on"+n in ma&&Ra.remove(n)});var Ua=o(va.style,"userSelect"),Ia=0;da.mouse=function(n){return F(n,p())};var Va=/WebKit/.test(ya.navigator.userAgent)?-1:0;da.touches=function(n,t){return arguments.length<2&&(t=p().touches),t?qa(t).map(function(t){var e=F(n,t);return e.identifier=t.identifier,e}):[]},da.behavior.drag=function(){function n(){this.on("mousedown.drag",a).on("touchstart.drag",o)}function t(){return da.event.changedTouches[0].identifier}function e(n,t){return da.touches(n).filter(function(n){return n.identifier===t})[0]}function r(n,t,e,r){return function(){function a(){if(!s)return o();var n=t(s,g),e=n[0]-d[0],r=n[1]-d[1];m|=e|r,d=n,f({type:"drag",x:n[0]+c[0],y:n[1]+c[1],dx:e,dy:r})}function o(){v.on(e+"."+p,null).on(r+"."+p,null),y(m&&da.event.target===h),f({type:"dragend"})}var c,l=this,s=l.parentNode,f=i.of(l,arguments),h=da.event.target,g=n(),p=null==g?"drag":"drag-"+g,d=t(s,g),m=0,v=da.select(ya).on(e+"."+p,a).on(r+"."+p,o),y=H();u?(c=u.apply(l,arguments),c=[c.x-d[0],c.y-d[1]]):c=[0,0],f({type:"dragstart"})}}var i=d(n,"drag","dragstart","dragend"),u=null,a=r(s,da.mouse,"mousemove","mouseup"),o=r(t,e,"touchmove","touchend");return n.origin=function(t){return arguments.length?(u=t,n):u},da.rebind(n,i,"on")},da.behavior.zoom=function(){function n(){this.on(E,o).on(Ba+".zoom",l).on(k,s).on("dblclick.zoom",f).on("touchstart.zoom",c)}function t(n){return[(n[0]-_[0])/w,(n[1]-_[1])/w]}function e(n){return[n[0]*w+_[0],n[1]*w+_[1]]}function r(n){w=Math.max(S[0],Math.min(S[1],n))}function i(n,t){t=e(t),_[0]+=n[0]-t[0],_[1]+=n[1]-t[1]}function u(){y&&y.domain(v.range().map(function(n){return(n-_[0])/w}).map(v.invert)),x&&x.domain(M.range().map(function(n){return(n-_[1])/w}).map(M.invert))}function a(n){u(),n({type:"zoom",scale:w,translate:_})}function o(){function n(){c=1,i(da.mouse(r),f),a(u)}function e(){l.on(k,ya===r?s:null).on(A,null),h(c&&da.event.target===o)}var r=this,u=N.of(r,arguments),o=da.event.target,c=0,l=da.select(ya).on(k,n).on(A,e),f=t(da.mouse(r)),h=H()}function c(){function n(){var n=da.touches(u),t=n[0],e=h[t.identifier];if(c=n[1]){var c,l=h[c.identifier],s=da.event.scale;if(null==s){var f=(f=c[0]-t[0])*f+(f=c[1]-t[1])*f;s=p&&Math.sqrt(f/p)}t=[(t[0]+c[0])/2,(t[1]+c[1])/2],e=[(e[0]+l[0])/2,(e[1]+l[1])/2],r(s*m)}b=null,i(t,e),a(o)}function e(){v.on(f,null).on(d,null),y()}var u=this,o=N.of(u,arguments),c=da.touches(u),l=Date.now(),s="zoom-"+da.event.changedTouches[0].identifier,f="touchmove."+s,d="touchend."+s,v=da.select(ya).on(f,n).on(d,e).on(E,null).on(k,null),y=H();if(m=w,h={},p=0,c.forEach(function(n){h[n.identifier]=t(n)}),1===c.length){if(500>l-b){var M=c[0],x=t(c[0]);r(2*w),i(M,x),g(),a(o)}b=l}else if(c.length>1){var M=c[0],_=c[1],S=M[0]-_[0],A=M[1]-_[1];p=S*S+A*A}}function l(){g(),h||(h=t(da.mouse(this))),r(Math.pow(2,.002*Xa())*w),i(da.mouse(this),h),a(N.of(this,arguments))}function s(){h=null}function f(){var n=da.mouse(this),e=t(n),u=Math.log(w)/Math.LN2;r(Math.pow(2,da.event.shiftKey?Math.ceil(u)-1:Math.floor(u)+1)),i(n,e),a(N.of(this,arguments))}var h,p,m,v,y,M,x,b,_=[0,0],w=1,S=Za,E="mousedown.zoom",k="mousemove.zoom",A="mouseup.zoom",N=d(n,"zoom");return n.translate=function(t){return arguments.length?(_=t.map(Number),u(),n):_},n.scale=function(t){return arguments.length?(w=+t,u(),n):w},n.scaleExtent=function(t){return arguments.length?(S=null==t?Za:t.map(Number),n):S},n.x=function(t){return arguments.length?(y=t,v=t.copy(),_=[0,0],w=1,n):y},n.y=function(t){return arguments.length?(x=t,M=t.copy(),_=[0,0],w=1,n):x},da.rebind(n,N,"on")};var Xa,Za=[0,1/0],Ba="onwheel"in ma?(Xa=function(){return-da.event.deltaY*(da.event.deltaMode?120:1)},"wheel"):"onmousewheel"in ma?(Xa=function(){return da.event.wheelDelta},"mousewheel"):(Xa=function(){return-da.event.detail},"MozMousePixelScroll");P.prototype.toString=function(){return this.rgb()+""},da.hsl=function(n,t,e){return 1===arguments.length?n instanceof Y?O(n.h,n.s,n.l):ot(""+n,ct,O):O(+n,+t,+e)};var $a=Y.prototype=new P;$a.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),O(this.h,this.s,this.l/n)},$a.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),O(this.h,this.s,n*this.l)},$a.rgb=function(){return R(this.h,this.s,this.l)};var Wa=Math.PI,Ja=1e-6,Ga=Ja*Ja,Ka=Wa/180,Qa=180/Wa;da.hcl=function(n,t,e){return 1===arguments.length?n instanceof W?$(n.h,n.c,n.l):n instanceof K?nt(n.l,n.a,n.b):nt((n=lt((n=da.rgb(n)).r,n.g,n.b)).l,n.a,n.b):$(+n,+t,+e)};var no=W.prototype=new P;no.brighter=function(n){return $(this.h,this.c,Math.min(100,this.l+to*(arguments.length?n:1)))},no.darker=function(n){return $(this.h,this.c,Math.max(0,this.l-to*(arguments.length?n:1)))},no.rgb=function(){return J(this.h,this.c,this.l).rgb()},da.lab=function(n,t,e){return 1===arguments.length?n instanceof K?G(n.l,n.a,n.b):n instanceof W?J(n.l,n.c,n.h):lt((n=da.rgb(n)).r,n.g,n.b):G(+n,+t,+e)};var to=18,eo=.95047,ro=1,io=1.08883,uo=K.prototype=new P;uo.brighter=function(n){return G(Math.min(100,this.l+to*(arguments.length?n:1)),this.a,this.b)},uo.darker=function(n){return G(Math.max(0,this.l-to*(arguments.length?n:1)),this.a,this.b)},uo.rgb=function(){return Q(this.l,this.a,this.b)},da.rgb=function(n,t,e){return 1===arguments.length?n instanceof ut?it(n.r,n.g,n.b):ot(""+n,it,R):it(~~n,~~t,~~e)};var ao=ut.prototype=new P;ao.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),it(Math.min(255,Math.floor(t/n)),Math.min(255,Math.floor(e/n)),Math.min(255,Math.floor(r/n)))):it(i,i,i)},ao.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),it(Math.floor(n*this.r),Math.floor(n*this.g),Math.floor(n*this.b))},ao.hsl=function(){return ct(this.r,this.g,this.b)},ao.toString=function(){return"#"+at(this.r)+at(this.g)+at(this.b)};var oo=da.map({aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"});oo.forEach(function(n,t){oo.set(n,ot(t,it,R))}),da.functor=ht,da.xhr=pt(gt),da.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var a=da.xhr(n,t,u);return a.row=function(n){return arguments.length?a.response(null==(e=n)?r:i(n)):e},a.row(e)}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function a(t){return t.map(o).join(n)}function o(n){return c.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var c=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(s>=c)return a;if(i)return i=!1,u;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++s;){var r=n.charCodeAt(s++),o=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(s)&&(++s,++o);else if(r!==l)continue;return n.substring(t,s-o)}return n.substring(t)}for(var r,i,u={},a={},o=[],c=n.length,s=0,f=0;(r=e())!==a;){for(var h=[];r!==u&&r!==a;)h.push(r),r=e();(!t||(h=t(h,f++)))&&o.push(h)}return o},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new u,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(a).join("\n")},e},da.csv=da.dsv(",","text/csv"),da.tsv=da.dsv(" ","text/tab-separated-values");var co,lo,so,fo;da.timer=function(n,t,e){if(arguments.length<3){if(arguments.length<2)t=0;else if(!isFinite(t))return;e=Date.now()}var r=e+t,i={callback:n,time:r,next:null};lo?lo.next=i:co=i,lo=i,so||(fo=clearTimeout(fo),so=1,ho(vt))},da.timer.flush=function(){yt(),Mt()};var ho=ya[o(ya,"requestAnimationFrame")]||function(n){setTimeout(n,17)},go=".",po=",",mo=[3,3],vo="$",yo=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"].map(xt);da.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=da.round(n,bt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((0>=e?e+1:e-1)/3)))),yo[8+e/3]},da.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)},da.format=function(n){var t=Mo.exec(n),e=t[1]||" ",r=t[2]||">",i=t[3]||"",u=t[4]||"",a=t[5],o=+t[6],c=t[7],l=t[8],s=t[9],f=1,h="",g=!1;switch(l&&(l=+l.substring(1)),(a||"0"===e&&"="===r)&&(a=e="0",r="=",c&&(o-=Math.floor((o-1)/4))),s){case"n":c=!0,s="g";break;case"%":f=100,h="%",s="f";break;case"p":f=100,h="%",s="r";break;case"b":case"o":case"x":case"X":"#"===u&&(u="0"+s.toLowerCase());case"c":case"d":g=!0,l=0;break;case"s":f=-1,s="r"}"#"===u?u="":"$"===u&&(u=vo),"r"!=s||l||(s="g"),null!=l&&("g"==s?l=Math.max(1,Math.min(21,l)):("e"==s||"f"==s)&&(l=Math.max(0,Math.min(20,l)))),s=xo.get(s)||_t;var p=a&&c;return function(n){if(g&&n%1)return"";var t=0>n||0===n&&0>1/n?(n=-n,"-"):i;if(0>f){var d=da.formatPrefix(n,l);n=d.scale(n),h=d.symbol}else n*=f;n=s(n,l);var m=n.lastIndexOf("."),v=0>m?n:n.substring(0,m),y=0>m?"":go+n.substring(m+1);!a&&c&&(v=bo(v));var M=u.length+v.length+y.length+(p?0:t.length),x=o>M?new Array(M=o-M+1).join(e):"";return p&&(v=bo(x+v)),t+=u,n=v+y,("<"===r?t+n+x:">"===r?x+t+n:"^"===r?x.substring(0,M>>=1)+t+n+x.substring(M):t+(p?n:x+n))+h}};var Mo=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,xo=da.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=da.round(n,bt(n,t))).toFixed(Math.max(0,Math.min(20,bt(n*(1+1e-15),t))))}}),bo=gt;if(mo){var _o=mo.length;bo=function(n){for(var t=n.length,e=[],r=0,i=mo[0];t>0&&i>0;)e.push(n.substring(t-=i,t+i)),i=mo[r=(r+1)%_o];return e.reverse().join(po)}}da.geo={},wt.prototype={s:0,t:0,add:function(n){St(n,this.t,wo),St(wo.s,this.s,this),this.s?this.t+=wo.t:this.s=wo.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var wo=new wt;da.geo.stream=function(n,t){n&&So.hasOwnProperty(n.type)?So[n.type](n,t):Et(n,t)};var So={Feature:function(n,t){Et(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++rn?4*Wa+n:n,No.lineStart=No.lineEnd=No.point=s}};da.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=qt([t*Ka,e*Ka]);if(v){var i=Ct(v,r),u=[i[1],-i[0],0],a=Ct(u,i);jt(a),a=Lt(a);var c=t-p,l=c>0?1:-1,d=a[0]*Qa*l,m=Math.abs(c)>180;if(m^(d>l*p&&l*t>d)){var y=a[1]*Qa;y>g&&(g=y)}else if(d=(d+360)%360-180,m^(d>l*p&&l*t>d)){var y=-a[1]*Qa;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);m?p>t?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t)}else n(t,e);v=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,v=null}function i(n,e){if(v){var r=n-p;y+=Math.abs(r)>180?r+(r>0?360:-360):r}else d=n,m=e;No.point(n,e),t(n,e)}function u(){No.lineStart()}function a(){i(d,m),No.lineEnd(),Math.abs(y)>Ja&&(s=-(h=180)),x[0]=s,x[1]=h,v=null}function o(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nAo?(s=-(h=180),f=-(g=90)):y>Ja?g=90:-Ja>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],da.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],l(e[0],i)||l(e[1],i)?(o(i[0],e[1])>o(i[0],i[1])&&(i[1]=e[1]),o(e[0],i[1])>o(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var a,e,p=-1/0,t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(a=o(i[1],e[0]))>p&&(p=a,s=e[0],h=i[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),da.geo.centroid=function(n){qo=To=Co=zo=Do=jo=Lo=Ho=Fo=Po=Oo=0,da.geo.stream(n,Yo);var t=Fo,e=Po,r=Oo,i=t*t+e*e+r*r;return Ga>i&&(t=jo,e=Lo,r=Ho,Ja>To&&(t=Co,e=zo,r=Do),i=t*t+e*e+r*r,Ga>i)?[0/0,0/0]:[Math.atan2(e,t)*Qa,V(r/Math.sqrt(i))*Qa]};var qo,To,Co,zo,Do,jo,Lo,Ho,Fo,Po,Oo,Yo={sphere:s,point:Ft,lineStart:Ot,lineEnd:Yt,polygonStart:function(){Yo.lineStart=Rt},polygonEnd:function(){Yo.lineStart=Ot}},Ro=Xt(Ut,Jt,Kt,Qt),Uo=[-Wa,0],Io=1e9;(da.geo.conicEqualArea=function(){return ie(ue)}).raw=ue,da.geo.albers=function(){return da.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},da.geo.albersUsa=function(){function n(n){var u=n[0],a=n[1];return t=null,e(u,a),t||(r(u,a),t)||i(u,a),t}var t,e,r,i,u=da.geo.albers(),a=da.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),o=da.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?a:i>=.166&&.234>i&&r>=-.214&&-.115>r?o:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=a.stream(n),r=o.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),a.precision(t),o.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),a.scale(.35*t),o.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var l=u.scale(),s=+t[0],f=+t[1];return e=u.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=a.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Ja,f+.12*l+Ja],[s-.214*l-Ja,f+.234*l-Ja]]).stream(c).point,i=o.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Ja,f+.166*l+Ja],[s-.115*l-Ja,f+.234*l-Ja]]).stream(c).point,n},n.scale(1070)};var Vo,Xo,Zo,Bo,$o,Wo,Jo={point:s,lineStart:s,lineEnd:s,polygonStart:function(){Xo=0,Jo.lineStart=ae},polygonEnd:function(){Jo.lineStart=Jo.lineEnd=Jo.point=s,Vo+=Math.abs(Xo/2)}},Go={point:oe,lineStart:s,lineEnd:s,polygonStart:s,polygonEnd:s},Ko={point:se,lineStart:fe,lineEnd:he,polygonStart:function(){Ko.lineStart=ge},polygonEnd:function(){Ko.point=se,Ko.lineStart=fe,Ko.lineEnd=he}};da.geo.path=function(){function n(n){return n&&("function"==typeof o&&u.pointRadius(+o.apply(this,arguments)),a&&a.valid||(a=i(u)),da.geo.stream(n,a)),u.result()}function t(){return a=null,n}var e,r,i,u,a,o=4.5;return n.area=function(n){return Vo=0,da.geo.stream(n,i(Jo)),Vo},n.centroid=function(n){return Co=zo=Do=jo=Lo=Ho=Fo=Po=Oo=0,da.geo.stream(n,i(Ko)),Oo?[Fo/Oo,Po/Oo]:Ho?[jo/Ho,Lo/Ho]:Do?[Co/Do,zo/Do]:[0/0,0/0]},n.bounds=function(n){return $o=Wo=-(Zo=Bo=1/0),da.geo.stream(n,i(Go)),[[Zo,Bo],[$o,Wo]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||me(n):gt,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new ce:new pe(n),"function"!=typeof o&&u.pointRadius(o),t()):r},n.pointRadius=function(t){return arguments.length?(o="function"==typeof t?t:(u.pointRadius(+t),+t),n):o},n.projection(da.geo.albersUsa()).context(null)},da.geo.projection=ve,da.geo.projectionMutator=ye,(da.geo.equirectangular=function(){return ve(xe)}).raw=xe.invert=xe,da.geo.rotation=function(n){function t(t){return t=n(t[0]*Ka,t[1]*Ka),t[0]*=Qa,t[1]*=Qa,t}return n=be(n[0]%360*Ka,n[1]*Ka,n.length>2?n[2]*Ka:0),t.invert=function(t){return t=n.invert(t[0]*Ka,t[1]*Ka),t[0]*=Qa,t[1]*=Qa,t},t},da.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=be(-n[0]*Ka,-n[1]*Ka,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Qa,n[1]*=Qa}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=Ee((t=+r)*Ka,i*Ka),n):t},n.precision=function(r){return arguments.length?(e=Ee(t*Ka,(i=+r)*Ka),n):i},n.angle(90)},da.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Ka,i=n[1]*Ka,u=t[1]*Ka,a=Math.sin(r),o=Math.cos(r),c=Math.sin(i),l=Math.cos(i),s=Math.sin(u),f=Math.cos(u);return Math.atan2(Math.sqrt((e=f*a)*e+(e=l*s-c*f*o)*e),c*s+l*f*o)},da.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return da.range(Math.ceil(u/m)*m,i,m).map(h).concat(da.range(Math.ceil(l/v)*v,c,v).map(g)).concat(da.range(Math.ceil(r/p)*p,e,p).filter(function(n){return Math.abs(n%m)>Ja}).map(s)).concat(da.range(Math.ceil(o/d)*d,a,d).filter(function(n){return Math.abs(n%v)>Ja}).map(f))}var e,r,i,u,a,o,c,l,s,f,h,g,p=10,d=p,m=90,v=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(g(c).slice(1),h(i).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],l=+t[0][1],c=+t[1][1],u>i&&(t=u,u=i,i=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[u,l],[i,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],o=+t[0][1],a=+t[1][1],r>e&&(t=r,r=e,e=t),o>a&&(t=o,o=a,a=t),n.precision(y)):[[r,o],[e,a]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(m=+t[0],v=+t[1],n):[m,v]},n.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],n):[p,d]},n.precision=function(t){return arguments.length?(y=+t,s=Ae(o,a,90),f=Ne(r,e,y),h=Ae(l,c,90),g=Ne(u,i,y),n):y},n.majorExtent([[-180,-90+Ja],[180,90-Ja]]).minorExtent([[-180,-80-Ja],[180,80+Ja]])},da.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=qe,i=Te;return n.distance=function(){return da.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},da.geo.interpolate=function(n,t){return Ce(n[0]*Ka,n[1]*Ka,t[0]*Ka,t[1]*Ka)},da.geo.length=function(n){return Qo=0,da.geo.stream(n,nc),Qo};var Qo,nc={sphere:s,point:s,lineStart:ze,lineEnd:s,polygonStart:s,polygonEnd:s},tc=De(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(da.geo.azimuthalEqualArea=function(){return ve(tc)}).raw=tc;var ec=De(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},gt);(da.geo.azimuthalEquidistant=function(){return ve(ec)}).raw=ec,(da.geo.conicConformal=function(){return ie(je)}).raw=je,(da.geo.conicEquidistant=function(){return ie(Le)}).raw=Le;var rc=De(function(n){return 1/n},Math.atan);(da.geo.gnomonic=function(){return ve(rc)}).raw=rc,He.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Wa/2]},(da.geo.mercator=function(){return Fe(He)}).raw=He;var ic=De(function(){return 1},Math.asin);(da.geo.orthographic=function(){return ve(ic)}).raw=ic;var uc=De(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(da.geo.stereographic=function(){return ve(uc)}).raw=uc,Pe.invert=function(n,t){return[Math.atan2(X(n),Math.cos(t)),V(Math.sin(t)/Z(n))]},(da.geo.transverseMercator=function(){return Fe(Pe)}).raw=Pe,da.geom={},da.svg={},da.svg.line=function(){return Oe(gt) -};var ac=da.map({linear:Ue,"linear-closed":Ie,step:Ve,"step-before":Xe,"step-after":Ze,basis:Ke,"basis-open":Qe,"basis-closed":nr,bundle:tr,cardinal:We,"cardinal-open":Be,"cardinal-closed":$e,monotone:or});ac.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var oc=[0,2/3,1/3,0],cc=[0,1/3,2/3,0],lc=[0,1/6,2/3,1/6];da.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i,u,a,o,c,l,s,f,h,g,p,d=ht(e),m=ht(r),v=n.length,y=v-1,M=[],x=[],b=0;if(d===Ye&&r===Re)t=n;else for(u=0,t=[];v>u;++u)t.push([+d.call(this,i=n[u],u),+m.call(this,i,u)]);for(u=1;v>u;++u)(t[u][1]u;++u)u!==b&&(c=t[u][1]-t[b][1],o=t[u][0]-t[b][0],M.push({angle:Math.atan2(c,o),index:u}));for(M.sort(function(n,t){return n.angle-t.angle}),g=M[0].angle,h=M[0].index,f=0,u=1;y>u;++u){if(a=M[u].index,g==M[u].angle){if(o=t[h][0]-t[b][0],c=t[h][1]-t[b][1],l=t[a][0]-t[b][0],s=t[a][1]-t[b][1],o*o+c*c>=l*l+s*s){M[u].index=-1;continue}M[f].index=-1}g=M[u].angle,f=u,h=a}for(x.push(b),u=0,a=0;2>u;++a)M[a].index>-1&&(x.push(M[a].index),u++);for(p=x.length;y>a;++a)if(!(M[a].index<0)){for(;!cr(x[p-2],x[p-1],M[a].index,t);)--p;x[p++]=M[a].index}var _=[];for(u=p-1;u>=0;--u)_.push(n[x[u]]);return _}var e=Ye,r=Re;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},da.geom.polygon=function(n){return za(n,sc),n};var sc=da.geom.polygon.prototype=[];sc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++to;o++)e.push([i,t[o],t[o+1]])}),e},da.geom.voronoi=function(n){function t(n){var t,u,a,o=n.map(function(){return[]}),c=ht(e),l=ht(r),s=n.length,f=1e6;if(c===Ye&&l===Re)t=n;else for(t=new Array(s),a=0;s>a;++a)t[a]=[+c.call(this,u=n[a],a),+l.call(this,u,a)];if(hr(t,function(n){var t,e,r,i,u,a;1===n.a&&n.b>=0?(t=n.ep.r,e=n.ep.l):(t=n.ep.l,e=n.ep.r),1===n.a?(u=t?t.y:-f,r=n.c-n.b*u,a=e?e.y:f,i=n.c-n.b*a):(r=t?t.x:-f,u=n.c-n.a*r,i=e?e.x:f,a=n.c-n.a*i);var c=[r,u],l=[i,a];o[n.region.l.index].push(c,l),o[n.region.r.index].push(c,l)}),o=o.map(function(n,e){var r=t[e][0],i=t[e][1],u=n.map(function(n){return Math.atan2(n[0]-r,n[1]-i)}),a=da.range(n.length).sort(function(n,t){return u[n]-u[t]});return a.filter(function(n,t){return!t||u[n]-u[a[t-1]]>Ja}).map(function(t){return n[t]})}),o.forEach(function(n,e){var r=n.length;if(!r)return n.push([-f,-f],[-f,f],[f,f],[f,-f]);if(!(r>2)){var i=t[e],u=n[0],a=n[1],o=i[0],c=i[1],l=u[0],s=u[1],h=a[0],g=a[1],p=Math.abs(h-l),d=g-s;if(Math.abs(d)c?-f:f;n.push([-f,m],[f,m])}else if(Ja>p){var v=l>o?-f:f;n.push([v,-f],[v,f])}else{var m=(l-o)*(g-s)>(h-l)*(s-c)?f:-f,y=Math.abs(d)-p;Math.abs(y)d?m:-m,m]):(y>0&&(m*=-1),n.push([-f,m],[f,m]))}}}),i)for(a=0;s>a;++a)i.clip(o[a]);for(a=0;s>a;++a)o[a].point=n[a];return o}var e=Ye,r=Re,i=null;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.clipExtent=function(n){if(!arguments.length)return i&&[i[0],i[2]];if(null==n)i=null;else{var e=+n[0][0],r=+n[0][1],u=+n[1][0],a=+n[1][1];i=da.geom.polygon([[e,r],[e,a],[u,a],[u,r]])}return t},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):i&&i[2]},t.links=function(n){var t,i,u,a=n.map(function(){return[]}),o=[],c=ht(e),l=ht(r),s=n.length;if(c===Ye&&l===Re)t=n;else for(t=new Array(s),u=0;s>u;++u)t[u]=[+c.call(this,i=n[u],u),+l.call(this,i,u)];return hr(t,function(t){var e=t.region.l.index,r=t.region.r.index;a[e][r]||(a[e][r]=a[r][e]=!0,o.push({source:n[e],target:n[r]}))}),o},t.triangles=function(n){if(e===Ye&&r===Re)return da.geom.delaunay(n);for(var t,i=new Array(c),u=ht(e),a=ht(r),o=-1,c=n.length;++o=l,h=r>=s,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=dr()),f?i=l:o=l,h?a=s:c=s,u(n,t,e,r,i,a,o,c)}var s,f,h,g,p,d,m,v,y,M=ht(o),x=ht(c);if(null!=t)d=t,m=e,v=r,y=i;else if(v=y=-(d=m=1/0),f=[],h=[],p=n.length,a)for(g=0;p>g;++g)s=n[g],s.xv&&(v=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);d>b&&(d=b),m>_&&(m=_),b>v&&(v=b),_>y&&(y=_),f.push(b),h.push(_)}var w=v-d,S=y-m;w>S?y=m+w:v=d+S;var E=dr();if(E.add=function(n){u(E,n,+M(n,++g),+x(n,g),d,m,v,y)},E.visit=function(n){mr(n,E,d,m,v,y)},g=-1,null==t){for(;++g=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):"in";return e=pc.get(e)||gc,r=dc.get(r)||gt,wr(r(e.apply(null,Array.prototype.slice.call(arguments,1))))},da.interpolateHcl=Hr,da.interpolateHsl=Fr,da.interpolateLab=Pr,da.interpolateRound=Or,da.transform=function(n){var t=ma.createElementNS(da.ns.prefix.svg,"g");return(da.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Yr(e?e.matrix:mc)})(n)},Yr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var mc={a:1,b:0,c:0,d:1,e:0,f:0};da.interpolateTransform=Vr,da.layout={},da.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e(i-e)*o){var c=t.charge*o*o;return n.px-=u*c,n.py-=a*c,!0}if(t.point&&isFinite(o)){var c=t.pointCharge*o*o;n.px-=u*c,n.py-=a*c}}return!t.charge}}function t(n){n.px=da.event.x,n.py=da.event.y,o.resume()}var e,r,i,u,a,o={},c=da.dispatch("start","tick","end"),l=[1,1],s=.9,f=vc,h=yc,g=-30,p=.1,d=.8,m=[],v=[];return o.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,o,f,h,d,y,M,x,b=m.length,_=v.length;for(e=0;_>e;++e)o=v[e],f=o.source,h=o.target,M=h.x-f.x,x=h.y-f.y,(d=M*M+x*x)&&(d=r*u[e]*((d=Math.sqrt(d))-i[e])/d,M*=d,x*=d,h.x-=M*(y=f.weight/(h.weight+f.weight)),h.y-=x*y,f.x+=M*(y=1-y),f.y+=x*y);if((y=r*p)&&(M=l[0]/2,x=l[1]/2,e=-1,y))for(;++e0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),da.timer(o.tick)),o):r},o.start=function(){function n(n,r){for(var i,u=t(e),a=-1,o=u.length;++ar;++r)c[r]=[];for(r=0;d>r;++r){var n=v[r];c[n.source.index].push(n.target),c[n.target.index].push(n.source)}}return c[e]}var e,r,c,s,p=m.length,d=v.length,y=l[0],M=l[1];for(e=0;p>e;++e)(s=m[e]).index=e,s.weight=0;for(e=0;d>e;++e)s=v[e],"number"==typeof s.source&&(s.source=m[s.source]),"number"==typeof s.target&&(s.target=m[s.target]),++s.source.weight,++s.target.weight;for(e=0;p>e;++e)s=m[e],isNaN(s.x)&&(s.x=n("x",y)),isNaN(s.y)&&(s.y=n("y",M)),isNaN(s.px)&&(s.px=s.x),isNaN(s.py)&&(s.py=s.y);if(i=[],"function"==typeof f)for(e=0;d>e;++e)i[e]=+f.call(this,v[e],e);else for(e=0;d>e;++e)i[e]=f;if(u=[],"function"==typeof h)for(e=0;d>e;++e)u[e]=+h.call(this,v[e],e);else for(e=0;d>e;++e)u[e]=h;if(a=[],"function"==typeof g)for(e=0;p>e;++e)a[e]=+g.call(this,m[e],e);else for(e=0;p>e;++e)a[e]=g;return o.resume()},o.resume=function(){return o.alpha(.1)},o.stop=function(){return o.alpha(0)},o.drag=function(){return e||(e=da.behavior.drag().origin(gt).on("dragstart.force",Jr).on("drag.force",t).on("dragend.force",Gr)),arguments.length?(this.on("mouseover.force",Kr).on("mouseout.force",Qr).call(e),void 0):e},da.rebind(o,c,"on")};var vc=20,yc=1;da.layout.hierarchy=function(){function n(t,a,o){var c=i.call(e,t,a);if(t.depth=a,o.push(t),c&&(l=c.length)){for(var l,s,f=-1,h=t.children=[],g=0,p=a+1;++fg;++g)for(i.call(n,l[0][g],p=d[g],s[0][g][1]),h=1;m>h;++h)i.call(n,l[h][g],p+=s[h-1][g][1],s[h][g][1]);return o}var t=gt,e=li,r=si,i=ci,u=ai,a=oi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:xc.get(t)||li,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:bc.get(t)||si,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(a=t,n):a},n.out=function(t){return arguments.length?(i=t,n):i},n};var xc=da.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(fi),u=n.map(hi),a=da.range(r).sort(function(n,t){return i[n]-i[t]}),o=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=a[t],c>o?(o+=u[e],l.push(e)):(c+=u[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return da.range(n.length).reverse()},"default":li}),bc=da.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,a=[],o=0,c=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>o&&(o=r),a.push(r)}for(e=0;u>e;++e)c[e]=(o-a[e])/2;return c},wiggle:function(n){var t,e,r,i,u,a,o,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,i=0;s>t;++t)i+=n[t][e][1];for(t=0,u=0,o=f[e][0]-f[e-1][0];s>t;++t){for(r=0,a=(n[t][e][1]-n[t][e-1][1])/(2*o);t>r;++r)a+=(n[r][e][1]-n[r][e-1][1])/o;u+=a*n[t][e][1]}g[e]=c-=i?u/i*o:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,i=n.length,u=n[0].length,a=1/i,o=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=a}for(e=0;u>e;++e)o[e]=0;return o},zero:si});da.layout.histogram=function(){function n(n,u){for(var a,o,c=[],l=n.map(e,this),s=r.call(this,l,u),f=i.call(this,s,l,u),u=-1,h=l.length,g=f.length-1,p=t?1:1/h;++u0)for(u=-1;++u=s[0]&&o<=s[1]&&(a=c[da.bisect(f,o,1,g)-1],a.y+=p,a.push(n[u]));return c}var t=!0,e=Number,r=mi,i=pi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=ht(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return di(n,t)}:ht(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},da.layout.tree=function(){function n(n,u){function a(n,t){var r=n.children,i=n._tree;if(r&&(u=r.length)){for(var u,o,l,s=r[0],f=s,h=-1;++h0&&(ki(Ai(o,n,r),n,i),l+=i,s+=i),f+=o._tree.mod,l+=u._tree.mod,h+=c._tree.mod,s+=a._tree.mod;o&&!Mi(a)&&(a._tree.thread=o,a._tree.mod+=f-s),u&&!yi(c)&&(c._tree.thread=u,c._tree.mod+=l-h,r=n)}return r}var l=t.call(this,n,u),s=l[0];Si(s,function(n,t){n._tree={ancestor:n,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),a(s),o(s,-s._tree.prelim);var f=xi(s,_i),h=xi(s,bi),g=xi(s,wi),p=f.x-e(f,h)/2,d=h.x+e(h,f)/2,m=g.depth||1;return Si(s,i?function(n){n.x*=r[0],n.y=n.depth*r[1],delete n._tree}:function(n){n.x=(n.x-p)/(d-p)*r[0],n.y=n.depth/m*r[1],delete n._tree}),l}var t=da.layout.hierarchy().sort(null).value(null),e=vi,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ti(n,t)},da.layout.pack=function(){function n(n,u){var a=e.call(this,n,u),o=a[0],c=i[0],l=i[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(o.x=o.y=0,Si(o,function(n){n.r=+s(n.value)}),Si(o,zi),r){var f=r*(t?1:Math.max(2*o.r/c,2*o.r/l))/2;Si(o,function(n){n.r+=f}),Si(o,zi),Si(o,function(n){n.r-=f})}return Li(o,c/2,l/2,t?1:1/Math.max(2*o.r/c,2*o.r/l)),a}var t,e=da.layout.hierarchy().sort(Ni),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ti(n,e)},da.layout.cluster=function(){function n(n,u){var a,o=t.call(this,n,u),c=o[0],l=0;Si(c,function(n){var t=n.children;t&&t.length?(n.x=Pi(t),n.y=Fi(t)):(n.x=a?l+=e(n,a):0,n.y=0,a=n)});var s=Oi(c),f=Yi(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Si(c,i?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),o}var t=da.layout.hierarchy().sort(null).value(null),e=vi,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ti(n,t)},da.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++it?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var a,o,c,l=f(e),s=[],h=u.slice(),p=1/0,d="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(a=h[c-1]),s.area+=a.area,"squarify"!==g||(o=r(s,d))<=p?(h.pop(),p=o):(s.area-=s.pop().area,i(s,d,l,!1),d=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(i(s,d,l,!0),s.length=s.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,a=f(t),o=r.slice(),c=[];for(n(o,a.dx*a.dy/t.value),c.area=0;u=o.pop();)c.push(u),c.area+=u.area,null!=u.z&&(i(c,u.z?a.dx:a.dy,a,!o.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,a=-1,o=n.length;++ae&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*p/r,r/(t*u*p)):1/0}function i(n,t,e,r){var i,u=-1,a=n.length,o=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++ue.dx)&&(s=e.dx);++ue&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=da.random.normal.apply(da,arguments);return function(){return Math.exp(n())}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t/n}}},da.scale={};var _c={floor:gt,ceil:gt};da.scale.linear=function(){return Wi([0,1],[0,1],br,!1)},da.scale.log=function(){return eu(da.scale.linear().domain([0,1]),10,!0,[1,10])};var wc=da.format(".0e"),Sc={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};da.scale.pow=function(){return ru(da.scale.linear(),1,[0,1])},da.scale.sqrt=function(){return da.scale.pow().exponent(.5)},da.scale.ordinal=function(){return uu([],{t:"range",a:[[]]})},da.scale.category10=function(){return da.scale.ordinal().range(Ec)},da.scale.category20=function(){return da.scale.ordinal().range(kc)},da.scale.category20b=function(){return da.scale.ordinal().range(Ac)},da.scale.category20c=function(){return da.scale.ordinal().range(Nc)};var Ec=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],kc=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],Ac=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Nc=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];da.scale.quantile=function(){return au([],[])},da.scale.quantize=function(){return ou(0,1,[0,1])},da.scale.threshold=function(){return cu([.5],[0,1])},da.scale.identity=function(){return lu([0,1])},da.svg.arc=function(){function n(){var n=t.apply(this,arguments),u=e.apply(this,arguments),a=r.apply(this,arguments)+qc,o=i.apply(this,arguments)+qc,c=(a>o&&(c=a,a=o,o=c),o-a),l=Wa>c?"0":"1",s=Math.cos(a),f=Math.sin(a),h=Math.cos(o),g=Math.sin(o);return c>=Tc?n?"M0,"+u+"A"+u+","+u+" 0 1,1 0,"+-u+"A"+u+","+u+" 0 1,1 0,"+u+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+u+"A"+u+","+u+" 0 1,1 0,"+-u+"A"+u+","+u+" 0 1,1 0,"+u+"Z":n?"M"+u*s+","+u*f+"A"+u+","+u+" 0 "+l+",1 "+u*h+","+u*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+l+",0 "+n*s+","+n*f+"Z":"M"+u*s+","+u*f+"A"+u+","+u+" 0 "+l+",1 "+u*h+","+u*g+"L0,0"+"Z"}var t=su,e=fu,r=hu,i=gu;return n.innerRadius=function(e){return arguments.length?(t=ht(e),n):t},n.outerRadius=function(t){return arguments.length?(e=ht(t),n):e},n.startAngle=function(t){return arguments.length?(r=ht(t),n):r},n.endAngle=function(t){return arguments.length?(i=ht(t),n):i},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,u=(r.apply(this,arguments)+i.apply(this,arguments))/2+qc;return[Math.cos(u)*n,Math.sin(u)*n]},n};var qc=-Wa/2,Tc=2*Wa-1e-6;da.svg.line.radial=function(){var n=Oe(pu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},Xe.reverse=Ze,Ze.reverse=Xe,da.svg.area=function(){return du(gt)},da.svg.area.radial=function(){var n=du(pu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},da.svg.chord=function(){function n(n,o){var c=t(this,u,n,o),l=t(this,a,n,o);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?i(c.r,c.p1,c.r,c.p0):i(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+i(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=o.call(n,i,r),a=c.call(n,i,r)+qc,s=l.call(n,i,r)+qc;return{r:u,a0:a,a1:s,p0:[u*Math.cos(a),u*Math.sin(a)],p1:[u*Math.cos(s),u*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Wa)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=qe,a=Te,o=mu,c=hu,l=gu;return n.radius=function(t){return arguments.length?(o=ht(t),n):o},n.source=function(t){return arguments.length?(u=ht(t),n):u},n.target=function(t){return arguments.length?(a=ht(t),n):a},n.startAngle=function(t){return arguments.length?(c=ht(t),n):c},n.endAngle=function(t){return arguments.length?(l=ht(t),n):l},n},da.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),a=e.call(this,n,i),o=(u.y+a.y)/2,c=[u,{x:u.x,y:o},{x:a.x,y:o},a];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=qe,e=Te,r=vu;return n.source=function(e){return arguments.length?(t=ht(e),n):t},n.target=function(t){return arguments.length?(e=ht(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},da.svg.diagonal.radial=function(){var n=da.svg.diagonal(),t=vu,e=n.projection;return n.projection=function(n){return arguments.length?e(yu(t=n)):t},n},da.svg.symbol=function(){function n(n,r){return(Cc.get(t.call(this,n,r))||bu)(e.call(this,n,r))}var t=xu,e=Mu;return n.type=function(e){return arguments.length?(t=ht(e),n):t},n.size=function(t){return arguments.length?(e=ht(t),n):e},n};var Cc=da.map({circle:bu,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Lc)),e=t*Lc;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jc),e=t*jc/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jc),e=t*jc/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});da.svg.symbolTypes=Cc.keys();var zc,Dc,jc=Math.sqrt(3),Lc=Math.tan(30*Ka),Hc=[],Fc=0;Hc.call=Fa.call,Hc.empty=Fa.empty,Hc.node=Fa.node,Hc.size=Fa.size,da.transition=function(n){return arguments.length?zc?n.transition():n:Ya.transition()},da.transition.prototype=Hc,Hc.select=function(n){var t,e,r,i=this.id,u=[];n=v(n);for(var a=-1,o=this.length;++au;u++){i.push(t=[]);for(var e=this[u],o=0,c=e.length;c>o;o++)(r=e[o])&&n.call(r,r.__data__,o)&&t.push(r)}return _u(i,this.id,this.time).ease(this.ease())},Hc.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):T(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Hc.attr=function(n,t){function e(){this.removeAttribute(o)}function r(){this.removeAttributeNS(o.space,o.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(o);return e!==n&&(t=a(e,n),function(n){this.setAttribute(o,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(o.space,o.local);return e!==n&&(t=a(e,n),function(n){this.setAttributeNS(o.space,o.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var a="transform"==n?Vr:br,o=da.ns.qualify(n);return wu(this,"attr."+n,t,o.local?u:i)},Hc.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=da.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Hc.style=function(n,t,e){function r(){this.style.removeProperty(n)}function i(t){return null==t?r:(t+="",function(){var r,i=ya.getComputedStyle(this,null).getPropertyValue(n);return i!==t&&(r=br(i,t),function(t){this.style.setProperty(n,r(t),e)})})}var u=arguments.length;if(3>u){if("string"!=typeof n){2>u&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return wu(this,"style."+n,t,i)},Hc.styleTween=function(n,t,e){function r(r,i){var u=t.call(this,r,i,ya.getComputedStyle(this,null).getPropertyValue(n));return u&&function(t){this.style.setProperty(n,u(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Hc.text=function(n){return wu(this,"text",n,Su)},Hc.remove=function(){return this.each("end.transition",function(){var n;!this.__transition__&&(n=this.parentNode)&&n.removeChild(this)})},Hc.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=da.ease.apply(da,arguments)),T(this,function(e){e.__transition__[t].ease=n}))},Hc.delay=function(n){var t=this.id;return T(this,"function"==typeof n?function(e,r,i){e.__transition__[t].delay=0|n.call(e,e.__data__,r,i)}:(n|=0,function(e){e.__transition__[t].delay=n}))},Hc.duration=function(n){var t=this.id;return T(this,"function"==typeof n?function(e,r,i){e.__transition__[t].duration=Math.max(1,0|n.call(e,e.__data__,r,i))}:(n=Math.max(1,0|n),function(e){e.__transition__[t].duration=n}))},Hc.each=function(n,t){var e=this.id;if(arguments.length<2){var r=Dc,i=zc;zc=e,T(this,function(t,r,i){Dc=t.__transition__[e],n.call(t,t.__data__,r,i)}),Dc=r,zc=i}else T(this,function(r){var i=r.__transition__[e];(i.event||(i.event=da.dispatch("start","end"))).on(n,t)});return this},Hc.transition=function(){for(var n,t,e,r,i=this.id,u=++Fc,a=[],o=0,c=this.length;c>o;o++){a.push(n=[]);for(var t=this[o],l=0,s=t.length;s>l;l++)(e=t[l])&&(r=Object.create(e.__transition__[i]),r.delay+=r.duration,Eu(e,l,u,r)),n.push(e)}return _u(a,u)},da.svg.axis=function(){function n(n){n.each(function(){var n,f=da.select(this),h=null==l?e.ticks?e.ticks.apply(e,c):e.domain():l,g=null==t?e.tickFormat?e.tickFormat.apply(e,c):String:t,p=Nu(e,h,s),d=f.selectAll(".tick.minor").data(p,String),m=d.enter().insert("line",".tick").attr("class","tick minor").style("opacity",1e-6),v=da.transition(d.exit()).style("opacity",1e-6).remove(),y=da.transition(d).style("opacity",1),M=f.selectAll(".tick.major").data(h,String),x=M.enter().insert("g",".domain").attr("class","tick major").style("opacity",1e-6),b=da.transition(M.exit()).style("opacity",1e-6).remove(),_=da.transition(M).style("opacity",1),w=Vi(e),S=f.selectAll(".domain").data([0]),E=(S.enter().append("path").attr("class","domain"),da.transition(S)),k=e.copy(),A=this.__chart__||k; -this.__chart__=k,x.append("line"),x.append("text");var N=x.select("line"),q=_.select("line"),T=M.select("text").text(g),C=x.select("text"),z=_.select("text");switch(r){case"bottom":n=ku,m.attr("y2",u),y.attr("x2",0).attr("y2",u),N.attr("y2",i),C.attr("y",Math.max(i,0)+o),q.attr("x2",0).attr("y2",i),z.attr("x",0).attr("y",Math.max(i,0)+o),T.attr("dy",".71em").style("text-anchor","middle"),E.attr("d","M"+w[0]+","+a+"V0H"+w[1]+"V"+a);break;case"top":n=ku,m.attr("y2",-u),y.attr("x2",0).attr("y2",-u),N.attr("y2",-i),C.attr("y",-(Math.max(i,0)+o)),q.attr("x2",0).attr("y2",-i),z.attr("x",0).attr("y",-(Math.max(i,0)+o)),T.attr("dy","0em").style("text-anchor","middle"),E.attr("d","M"+w[0]+","+-a+"V0H"+w[1]+"V"+-a);break;case"left":n=Au,m.attr("x2",-u),y.attr("x2",-u).attr("y2",0),N.attr("x2",-i),C.attr("x",-(Math.max(i,0)+o)),q.attr("x2",-i).attr("y2",0),z.attr("x",-(Math.max(i,0)+o)).attr("y",0),T.attr("dy",".32em").style("text-anchor","end"),E.attr("d","M"+-a+","+w[0]+"H0V"+w[1]+"H"+-a);break;case"right":n=Au,m.attr("x2",u),y.attr("x2",u).attr("y2",0),N.attr("x2",i),C.attr("x",Math.max(i,0)+o),q.attr("x2",i).attr("y2",0),z.attr("x",Math.max(i,0)+o).attr("y",0),T.attr("dy",".32em").style("text-anchor","start"),E.attr("d","M"+a+","+w[0]+"H0V"+w[1]+"H"+a)}if(e.rangeBand){var D=k.rangeBand()/2,j=function(n){return k(n)+D};x.call(n,j),_.call(n,j)}else x.call(n,A),_.call(n,k),b.call(n,k),m.call(n,A),y.call(n,k),v.call(n,k)})}var t,e=da.scale.linear(),r=Pc,i=6,u=6,a=6,o=3,c=[10],l=null,s=0;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Oc?t+"":Pc,n):r},n.ticks=function(){return arguments.length?(c=arguments,n):c},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t,e){if(!arguments.length)return i;var r=arguments.length-1;return i=+t,u=r>1?+e:i,a=r>0?+arguments[r]:i,n},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(t){return arguments.length?(s=+t,n):s},n};var Pc="bottom",Oc={top:1,right:1,bottom:1,left:1};da.svg.brush=function(){function n(u){u.each(function(){var u,a=da.select(this),s=a.selectAll(".background").data([0]),f=a.selectAll(".extent").data([0]),h=a.selectAll(".resize").data(l,String);a.style("pointer-events","all").on("mousedown.brush",i).on("touchstart.brush",i),s.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),f.enter().append("rect").attr("class","extent").style("cursor","move"),h.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Yc[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),h.style("display",n.empty()?"none":null),h.exit().remove(),o&&(u=Vi(o),s.attr("x",u[0]).attr("width",u[1]-u[0]),e(a)),c&&(u=Vi(c),s.attr("y",u[0]).attr("height",u[1]-u[0]),r(a)),t(a)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)][0]+","+s[+/^s/.test(n)][1]+")"})}function e(n){n.select(".extent").attr("x",s[0][0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1][0]-s[0][0])}function r(n){n.select(".extent").attr("y",s[0][1]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",s[1][1]-s[0][1])}function i(){function i(){var n=da.event.changedTouches;return n?da.touches(M,n)[0]:da.mouse(M)}function l(){32==da.event.keyCode&&(k||(v=null,N[0]-=s[1][0],N[1]-=s[1][1],k=2),g())}function h(){32==da.event.keyCode&&2==k&&(N[0]+=s[1][0],N[1]+=s[1][1],k=0,g())}function p(){var n=i(),u=!1;y&&(n[0]+=y[0],n[1]+=y[1]),k||(da.event.altKey?(v||(v=[(s[0][0]+s[1][0])/2,(s[0][1]+s[1][1])/2]),N[0]=s[+(n[0]l?(i=r,r=l):i=l),s[0][e]!==r||s[1][e]!==i?(u=null,s[0][e]=r,s[1][e]=i,!0):void 0}function m(){p(),_.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),da.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),A(),b({type:"brushend"})}var v,y,M=this,x=da.select(da.event.target),b=a.of(M,arguments),_=da.select(M),w=x.datum(),S=!/^(n|s)$/.test(w)&&o,E=!/^(e|w)$/.test(w)&&c,k=x.classed("extent"),A=H(),N=i(),q=da.select(ya).on("keydown.brush",l).on("keyup.brush",h);if(da.event.changedTouches?q.on("touchmove.brush",p).on("touchend.brush",m):q.on("mousemove.brush",p).on("mouseup.brush",m),k)N[0]=s[0][0]-N[0],N[1]=s[0][1]-N[1];else if(w){var T=+/w$/.test(w),C=+/^n/.test(w);y=[s[1-T][0]-N[0],s[1-C][1]-N[1]],N[0]=s[T][0],N[1]=s[C][1]}else da.event.altKey&&(v=N.slice());_.style("pointer-events","none").selectAll(".resize").style("display",null),da.select("body").style("cursor",x.style("cursor")),b({type:"brushstart"}),p()}var u,a=d(n,"brushstart","brush","brushend"),o=null,c=null,l=Rc[0],s=[[0,0],[0,0]],f=[!0,!0];return n.x=function(t){return arguments.length?(o=t,l=Rc[!o<<1|!c],n):o},n.y=function(t){return arguments.length?(c=t,l=Rc[!o<<1|!c],n):c},n.clamp=function(t){return arguments.length?(o&&c?f=[!!t[0],!!t[1]]:(o||c)&&(f[+!o]=!!t),n):o&&c?f:o||c?f[+!o]:null},n.extent=function(t){var e,r,i,a,l;return arguments.length?(u=[[0,0],[0,0]],o&&(e=t[0],r=t[1],c&&(e=e[0],r=r[0]),u[0][0]=e,u[1][0]=r,o.invert&&(e=o(e),r=o(r)),e>r&&(l=e,e=r,r=l),s[0][0]=0|e,s[1][0]=0|r),c&&(i=t[0],a=t[1],o&&(i=i[1],a=a[1]),u[0][1]=i,u[1][1]=a,c.invert&&(i=c(i),a=c(a)),i>a&&(l=i,i=a,a=l),s[0][1]=0|i,s[1][1]=0|a),n):(t=u||s,o&&(e=t[0][0],r=t[1][0],u||(e=s[0][0],r=s[1][0],o.invert&&(e=o.invert(e),r=o.invert(r)),e>r&&(l=e,e=r,r=l))),c&&(i=t[0][1],a=t[1][1],u||(i=s[0][1],a=s[1][1],c.invert&&(i=c.invert(i),a=c.invert(a)),i>a&&(l=i,i=a,a=l))),o&&c?[[e,i],[r,a]]:o?[e,r]:c&&[i,a])},n.clear=function(){return u=null,s[0][0]=s[0][1]=s[1][0]=s[1][1]=0,n},n.empty=function(){return o&&s[0][0]===s[1][0]||c&&s[0][1]===s[1][1]},da.rebind(n,a,"on")};var Yc={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Rc=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];da.time={};var Uc=Date,Ic=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];qu.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Vc.setUTCDate.apply(this._,arguments)},setDay:function(){Vc.setUTCDay.apply(this._,arguments)},setFullYear:function(){Vc.setUTCFullYear.apply(this._,arguments)},setHours:function(){Vc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Vc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Vc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Vc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Vc.setUTCSeconds.apply(this._,arguments)},setTime:function(){Vc.setTime.apply(this._,arguments)}};var Vc=Date.prototype,Xc="%a %b %e %X %Y",Zc="%m/%d/%Y",Bc="%H:%M:%S",$c=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Wc=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],Jc=["January","February","March","April","May","June","July","August","September","October","November","December"],Gc=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];da.time.year=Tu(function(n){return n=da.time.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),da.time.years=da.time.year.range,da.time.years.utc=da.time.year.utc.range,da.time.day=Tu(function(n){var t=new Uc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),da.time.days=da.time.day.range,da.time.days.utc=da.time.day.utc.range,da.time.dayOfYear=function(n){var t=da.time.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},Ic.forEach(function(n,t){n=n.toLowerCase(),t=7-t;var e=da.time[n]=Tu(function(n){return(n=da.time.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=da.time.year(n).getDay();return Math.floor((da.time.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});da.time[n+"s"]=e.range,da.time[n+"s"].utc=e.utc.range,da.time[n+"OfYear"]=function(n){var e=da.time.year(n).getDay();return Math.floor((da.time.dayOfYear(n)+(e+t)%7)/7)}}),da.time.week=da.time.sunday,da.time.weeks=da.time.sunday.range,da.time.weeks.utc=da.time.sunday.utc.range,da.time.weekOfYear=da.time.sundayOfYear,da.time.format=function(n){function t(t){for(var r,i,u,a=[],o=-1,c=0;++o=12?"PM":"AM"},S:function(n,t){return Lu(n.getSeconds(),t,2)},U:function(n,t){return Lu(da.time.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Lu(da.time.mondayOfYear(n),t,2)},x:da.time.format(Zc),X:da.time.format(Bc),y:function(n,t){return Lu(n.getFullYear()%100,t,2)},Y:function(n,t){return Lu(n.getFullYear()%1e4,t,4)},Z:ra,"%":function(){return"%"}},ll={a:Hu,A:Fu,b:Ru,B:Uu,c:Iu,d:Ju,e:Ju,H:Ku,I:Ku,j:Gu,L:ta,m:Wu,M:Qu,p:ea,S:na,U:Ou,w:Pu,W:Yu,x:Vu,X:Xu,y:Bu,Y:Zu,"%":ia},sl=/^\s*\d+/,fl=da.map({am:0,pm:1});da.time.format.utc=function(n){function t(n){try{Uc=qu;var t=new Uc;return t._=n,e(t)}finally{Uc=Date}}var e=da.time.format(n);return t.parse=function(n){try{Uc=qu;var t=e.parse(n);return t&&t._}finally{Uc=Date}},t.toString=e.toString,t};var hl=da.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");da.time.format.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?ua:hl,ua.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},ua.toString=hl.toString,da.time.second=Tu(function(n){return new Uc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),da.time.seconds=da.time.second.range,da.time.seconds.utc=da.time.second.utc.range,da.time.minute=Tu(function(n){return new Uc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),da.time.minutes=da.time.minute.range,da.time.minutes.utc=da.time.minute.utc.range,da.time.hour=Tu(function(n){var t=n.getTimezoneOffset()/60;return new Uc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),da.time.hours=da.time.hour.range,da.time.hours.utc=da.time.hour.utc.range,da.time.month=Tu(function(n){return n=da.time.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),da.time.months=da.time.month.range,da.time.months.utc=da.time.month.utc.range;var gl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],pl=[[da.time.second,1],[da.time.second,5],[da.time.second,15],[da.time.second,30],[da.time.minute,1],[da.time.minute,5],[da.time.minute,15],[da.time.minute,30],[da.time.hour,1],[da.time.hour,3],[da.time.hour,6],[da.time.hour,12],[da.time.day,1],[da.time.day,2],[da.time.week,1],[da.time.month,1],[da.time.month,3],[da.time.year,1]],dl=[[da.time.format("%Y"),Ut],[da.time.format("%B"),function(n){return n.getMonth()}],[da.time.format("%b %d"),function(n){return 1!=n.getDate()}],[da.time.format("%a %d"),function(n){return n.getDay()&&1!=n.getDate()}],[da.time.format("%I %p"),function(n){return n.getHours()}],[da.time.format("%I:%M"),function(n){return n.getMinutes()}],[da.time.format(":%S"),function(n){return n.getSeconds()}],[da.time.format(".%L"),function(n){return n.getMilliseconds()}]],ml=da.scale.linear(),vl=ca(dl);pl.year=function(n,t){return ml.domain(n.map(sa)).ticks(t).map(la)},da.time.scale=function(){return aa(da.scale.linear(),pl,vl)};var yl=pl.map(function(n){return[n[0].utc,n[1]]}),Ml=[[da.time.format.utc("%Y"),Ut],[da.time.format.utc("%B"),function(n){return n.getUTCMonth()}],[da.time.format.utc("%b %d"),function(n){return 1!=n.getUTCDate()}],[da.time.format.utc("%a %d"),function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],[da.time.format.utc("%I %p"),function(n){return n.getUTCHours()}],[da.time.format.utc("%I:%M"),function(n){return n.getUTCMinutes()}],[da.time.format.utc(":%S"),function(n){return n.getUTCSeconds()}],[da.time.format.utc(".%L"),function(n){return n.getUTCMilliseconds()}]],xl=ca(Ml);return yl.year=function(n,t){return ml.domain(n.map(ha)).ticks(t).map(fa)},da.time.scale.utc=function(){return aa(da.scale.linear(),yl,xl)},da.text=pt(function(n){return n.responseText}),da.json=function(n,t){return dt(n,"application/json",ga,t)},da.html=function(n,t){return dt(n,"text/html",pa,t)},da.xml=pt(function(n){return n.responseXML}),da}(); \ No newline at end of file diff --git a/plugins/tiddlywiki/d3/files/tiddlywiki.files b/plugins/tiddlywiki/d3/files/tiddlywiki.files deleted file mode 100644 index ec02f44ce5..0000000000 --- a/plugins/tiddlywiki/d3/files/tiddlywiki.files +++ /dev/null @@ -1,22 +0,0 @@ -{ - "tiddlers": [ - { - "file": "d3.min.js", - "fields": { - "type": "application/javascript", - "title": "$:/plugins/tiddlywiki/d3/d3.js", - "module-type": "library" - }, - "prefix": "var d3;if($tw.browser){\n", - "suffix": "}\nexports.d3 = d3;\n" - }, - { - "file": "cloud/d3.layout.cloud.js", - "fields": { - "type": "application/javascript", - "title": "$:/plugins/tiddlywiki/d3/d3.layout.cloud.js", - "module-type": "library" - } - } - ] -} diff --git a/plugins/tiddlywiki/d3/plugin.info b/plugins/tiddlywiki/d3/plugin.info deleted file mode 100644 index 40b36c0874..0000000000 --- a/plugins/tiddlywiki/d3/plugin.info +++ /dev/null @@ -1,7 +0,0 @@ -{ - "title": "$:/plugins/tiddlywiki/d3", - "name": "D3", - "description": "D3 data visualisation demo", - "list": "readme", - "stability": "STABILITY_0_DEPRECATED" -} diff --git a/plugins/tiddlywiki/d3/readme.tid b/plugins/tiddlywiki/d3/readme.tid deleted file mode 100644 index 24ea2d7085..0000000000 --- a/plugins/tiddlywiki/d3/readme.tid +++ /dev/null @@ -1,7 +0,0 @@ -title: $:/plugins/tiddlywiki/d3/readme - -The D3 plugin is a proof-of-concept demo of integration with the D3.js data visualisation framework (http://d3js.org). - -It is not currently in a state where it can be used for anything useful. - -[[Source code|https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/plugins/tiddlywiki/d3]] diff --git a/plugins/tiddlywiki/filesystem/plugin.info b/plugins/tiddlywiki/filesystem/plugin.info index a5b5a7fed6..4e3fa228ff 100644 --- a/plugins/tiddlywiki/filesystem/plugin.info +++ b/plugins/tiddlywiki/filesystem/plugin.info @@ -3,5 +3,6 @@ "name": "Filesystem", "description": "Synchronize changes from the node.js server to the local filesystem", "list": "readme", + "platform": "server", "stability": "STABILITY_2_STABLE" } diff --git a/plugins/tiddlywiki/freelinks/aho-corasick.js b/plugins/tiddlywiki/freelinks/aho-corasick.js new file mode 100644 index 0000000000..bcbcf9b442 --- /dev/null +++ b/plugins/tiddlywiki/freelinks/aho-corasick.js @@ -0,0 +1,242 @@ +/*\ +title: $:/core/modules/utils/aho-corasick.js +type: application/javascript +module-type: utils + +Optimized Aho-Corasick string matching algorithm implementation with enhanced performance +and error handling for TiddlyWiki freelinking functionality. + +Useage: + +Initialization: + Create an AhoCorasick instance: var ac = new AhoCorasick(); + After initialization, the trie and failure structures are automatically created to store patterns and failure links. + +Adding Patterns: + Call addPattern(pattern, index) to add a pattern, e.g., ac.addPattern("[[Link]]", 0);. + pattern is the string to match, and index is an identifier for tracking results. + Multiple patterns can be added, stored in the trie structure. + +Building Failure Links: + Call buildFailureLinks() to construct failure links for efficient multi-pattern matching. + Includes a maximum node limit (default 100,000 or 15 times the pattern count) to prevent excessive computation. + +Performing Search: + Use search(text, useWordBoundary) to find pattern matches in the text. + text is the input string, and useWordBoundary (boolean) controls whether to enforce word boundary checks. + Returns an array of match results, each containing pattern (matched pattern), index (start position), length (pattern length), and titleIndex (pattern identifier). + +Word Boundary Check: + If useWordBoundary is true, only matches surrounded by non-word characters (letters, digits, or underscores) are returned. + +Cleanup and Statistics: + Use clear() to reset the trie and failure links, freeing memory. + Use getStats() to retrieve statistics, including node count (nodeCount), pattern count (patternCount), and failure link count (failureLinks). + +Notes + Performance Considerations: The Aho-Corasick trie may consume significant memory with a large number of patterns. Limit the number of patterns (e.g., <10,000) for optimal performance. + Error Handling: The module includes maximum node and failure depth limits (maxFailureDepth) to prevent infinite loops or memory overflow. + Word Boundary: Enabling useWordBoundary ensures more precise matches, ideal for link detection scenarios. + Compatibility: Ensure compatibility with other TiddlyWiki modules (e.g., wikiparser.js) when processing WikiText. + Debugging: Use getStats() to inspect the trie structure's size and ensure it does not overload browser memory. + +\*/ + +"use strict"; + +function AhoCorasick() { + this.trie = {}; + this.failure = {}; + this.maxFailureDepth = 100; + this.patternCount = 0; +} + +AhoCorasick.prototype.addPattern = function(pattern, index) { + if(!pattern || typeof pattern !== "string" || pattern.length === 0) { + return; + } + + var node = this.trie; + + for(var i = 0; i < pattern.length; i++) { + var char = pattern[i]; + if(!node[char]) { + node[char] = {}; + } + node = node[char]; + } + + if(!node.$) { + node.$ = []; + } + node.$.push({ + pattern: pattern, + index: index, + length: pattern.length + }); + + this.patternCount++; +}; + +AhoCorasick.prototype.buildFailureLinks = function() { + var queue = []; + var root = this.trie; + this.failure[root] = root; + + for(var char in root) { + if(root[char] && char !== "$") { + this.failure[root[char]] = root; + queue.push(root[char]); + } + } + + var processedNodes = 0; + var maxNodes = Math.max(100000, this.patternCount * 15); + + while(queue.length > 0 && processedNodes < maxNodes) { + var node = queue.shift(); + processedNodes++; + + for(var char in node) { + if(node[char] && char !== "$") { + var child = node[char]; + var fail = this.failure[node]; + var failureDepth = 0; + + while(fail && !fail[char] && failureDepth < this.maxFailureDepth) { + fail = this.failure[fail]; + failureDepth++; + } + + var failureLink = (fail && fail[char]) ? fail[char] : root; + this.failure[child] = failureLink; + + var failureOutput = this.failure[child]; + if(failureOutput && failureOutput.$) { + if(!child.$) { + child.$ = []; + } + child.$.push.apply(child.$, failureOutput.$); + } + + queue.push(child); + } + } + } + + if(processedNodes >= maxNodes) { + throw new Error("Aho-Corasick: buildFailureLinks exceeded maximum nodes (" + maxNodes + ")"); + } +}; + +AhoCorasick.prototype.search = function(text, useWordBoundary) { + if(!text || typeof text !== "string" || text.length === 0) { + return []; + } + + var matches = []; + var node = this.trie; + var textLength = text.length; + var maxMatches = Math.min(textLength * 2, 10000); + + for(var i = 0; i < textLength; i++) { + var char = text[i]; + var transitionCount = 0; + + while(node && !node[char] && node !== this.trie && transitionCount < this.maxFailureDepth) { + node = this.failure[node] || this.trie; + transitionCount++; + } + + if(node && node[char]) { + node = node[char]; + } else { + node = this.trie; + if(this.trie[char]) { + node = this.trie[char]; + } + } + + var currentNode = node; + var collectCount = 0; + while(currentNode && collectCount < 10) { + if(currentNode.$) { + var outputs = currentNode.$; + for(var j = 0; j < outputs.length && matches.length < maxMatches; j++) { + var output = outputs[j]; + var matchStart = i - output.length + 1; + var matchEnd = i + 1; + + if(useWordBoundary && !this.isWordBoundaryMatch(text, matchStart, matchEnd)) { + continue; + } + + matches.push({ + pattern: output.pattern, + index: matchStart, + length: output.length, + titleIndex: output.index + }); + } + } + currentNode = this.failure[currentNode]; + if(currentNode === this.trie) break; + collectCount++; + } + } + + return matches; +}; + +AhoCorasick.prototype.isWordBoundaryMatch = function(text, start, end) { + var beforeChar = start > 0 ? text[start - 1] : ""; + var afterChar = end < text.length ? text[end] : ""; + + var isWordChar = function(char) { + return /[a-zA-Z0-9_\u00C0-\u00FF]/.test(char); + }; + + var beforeIsWord = beforeChar && isWordChar(beforeChar); + var afterIsWord = afterChar && isWordChar(afterChar); + + return !beforeIsWord && !afterIsWord; +}; + +AhoCorasick.prototype.clear = function() { + this.trie = {}; + this.failure = {}; + this.patternCount = 0; +}; + +AhoCorasick.prototype.getStats = function() { + var nodeCount = 0; + var patternCount = 0; + var failureCount = 0; + + function countNodes(node) { + if(!node) return; + nodeCount++; + if(node.$) { + patternCount += node.$.length; + } + for(var key in node) { + if(node[key] && typeof node[key] === "object" && key !== "$") { + countNodes(node[key]); + } + } + } + + countNodes(this.trie); + + for(var key in this.failure) { + failureCount++; + } + + return { + nodeCount: nodeCount, + patternCount: this.patternCount, + failureLinks: failureCount + }; +}; + +exports.AhoCorasick = AhoCorasick; diff --git a/plugins/tiddlywiki/freelinks/config-Freelinks-WordBoundary.tid b/plugins/tiddlywiki/freelinks/config-Freelinks-WordBoundary.tid new file mode 100644 index 0000000000..7d9de66a8b --- /dev/null +++ b/plugins/tiddlywiki/freelinks/config-Freelinks-WordBoundary.tid @@ -0,0 +1,2 @@ +title: $:/config/Freelinks/WordBoundary +text: yes diff --git a/plugins/tiddlywiki/freelinks/readme.tid b/plugins/tiddlywiki/freelinks/readme.tid index 5372ce019a..fc86431401 100644 --- a/plugins/tiddlywiki/freelinks/readme.tid +++ b/plugins/tiddlywiki/freelinks/readme.tid @@ -2,26 +2,36 @@ title: $:/plugins/tiddlywiki/freelinks/readme This plugin adds automatic generation of links to tiddler titles. -''Note that automatic link generation can be very slow when there are a large number of tiddlers''. +The plugin uses the Aho-Corasick algorithm for efficient pattern matching with large numbers of tiddlers. + +!! Configuration Freelinking is activated for runs of text that have the following variables set: * `tv-wikilinks` is NOT equal to `no` * `tv-freelinks` is set to `yes` -Freelinks are case sensitive by default but can be configured to ignore case in the settings tab. +Freelinks are case sensitive by default but can be configured to ignore case in the settings panel. -Within view templates, the variable `tv-freelinks` is automatically set to the content of $:/config/Freelinks/Enable, which can be set via the settings panel of this plugin. +Word boundary checking can be configured in the settings panel. When enabled (default for Western languages), links are created only for complete words. When disabled, partial matches within words are also linked. + +When multiple tiddler titles match the same text, longer titles take precedence over shorter ones. + +Tiddlers do not create links to themselves. + +Use `$:/config/Freelinks/TargetFilter` to define which tiddlers are eligible for auto-linking. + +Within view templates, the variable `tv-freelinks` is automatically set to the content of `$:/config/Freelinks/Enable`, which can be set via the settings panel of this plugin. !! Notes -To change within which tiddlers freelinking occurs requires customising the shadow tiddler [[$:/plugins/tiddlywiki/freelinks/macros/view]]. This tiddler is tagged $:/tags/Macro/View which means that it will be included as a local macro in each view template. By default, its content is: +To change within which tiddlers freelinking occurs requires customising the shadow tiddler [[$:/plugins/tiddlywiki/freelinks/macros/view]]. This tiddler is tagged `$:/tags/Macro/View` which means that it will be included as a local macro in each view template. By default, its content is: ``` <$set name="tv-freelinks" value={{$:/config/Freelinks/Enable}}/> ``` -That means that for each tiddler the variable tv-freelinks will be set to the tiddler $:/config/Freelinks/Enable, which is set to "yes" or "no" by the settings in control panel. +That means that for each tiddler the variable `tv-freelinks` will be set to the tiddler `$:/config/Freelinks/Enable`, which is set to "yes" or "no" by the settings in control panel. Instead, we can use a filter expression to, say, only freelink within the tiddler with the title "HelloThere": @@ -40,3 +50,14 @@ Or we can combine both approaches: ``` <$set name="tv-freelinks" value={{{ [match[HelloThere]] ~[tag[MyTag]] +[then[yes]else[no]] }}}/> ``` + +!! Implementation Details + +The Aho-Corasick algorithm implementation includes: + +* Unicode character support for international text +* Prevention of self-referential links within the current tiddler +* Performance safeguards including depth protection and result limiting +* Graceful fallback handling for invalid patterns + +Longer tiddler titles take precedence over shorter ones when multiple matches are possible. diff --git a/plugins/tiddlywiki/freelinks/settings.tid b/plugins/tiddlywiki/freelinks/settings.tid index 70eaae4b33..90e8b660e1 100644 --- a/plugins/tiddlywiki/freelinks/settings.tid +++ b/plugins/tiddlywiki/freelinks/settings.tid @@ -6,4 +6,6 @@ Filter defining tiddlers to which freelinks are made: <$edit-text tiddler="$:/co <$checkbox tiddler="$:/config/Freelinks/Enable" field="text" checked="yes" unchecked="no" default="no"> <$link to="$:/config/Freelinks/Enable">Enable freelinking within tiddler view templates +<$checkbox tiddler="$:/config/Freelinks/WordBoundary" field="text" checked="yes" unchecked="no" default="yes"> <$link to="$:/config/Freelinks/WordBoundary">Word Boundary Check + <$checkbox tiddler="$:/config/Freelinks/IgnoreCase" field="text" checked="yes" unchecked="no" default="no"> <$link to="$:/config/Freelinks/IgnoreCase">Ignore case diff --git a/plugins/tiddlywiki/freelinks/text.js b/plugins/tiddlywiki/freelinks/text.js index 658a3ca96c..5af9fffc0e 100755 --- a/plugins/tiddlywiki/freelinks/text.js +++ b/plugins/tiddlywiki/freelinks/text.js @@ -3,31 +3,49 @@ title: $:/core/modules/widgets/text.js type: application/javascript module-type: widget -An override of the core text widget that automatically linkifies the text +An optimized override of the core text widget that automatically linkifies the text, with support for non-Latin languages like Chinese, prioritizing longer titles, skipping processed matches, excluding the current tiddler title from linking, and handling large title sets with enhanced Aho-Corasick algorithm. \*/ "use strict"; var TITLE_TARGET_FILTER = "$:/config/Freelinks/TargetFilter"; +var WORD_BOUNDARY_TIDDLER = "$:/config/Freelinks/WordBoundary"; var Widget = require("$:/core/modules/widgets/widget.js").widget, LinkWidget = require("$:/core/modules/widgets/link.js").link, ButtonWidget = require("$:/core/modules/widgets/button.js").button, - ElementWidget = require("$:/core/modules/widgets/element.js").element; + ElementWidget = require("$:/core/modules/widgets/element.js").element, + AhoCorasick = require("$:/core/modules/utils/aho-corasick.js").AhoCorasick; + +var ESCAPE_REGEX = /[\\^$*+?.()|[\]{}]/g; + +function escapeRegExp(str) { + try { + return str.replace(ESCAPE_REGEX, "\\$&"); + } catch(e) { + return null; + } +} + +function FastPositionSet() { + this.set = new Set(); +} + +FastPositionSet.prototype.add = function(pos) { + this.set.add(pos); +}; + +FastPositionSet.prototype.has = function(pos) { + return this.set.has(pos); +}; var TextNodeWidget = function(parseTreeNode,options) { this.initialise(parseTreeNode,options); }; -/* -Inherit from the base widget class -*/ TextNodeWidget.prototype = new Widget(); -/* -Render this widget into the DOM -*/ TextNodeWidget.prototype.render = function(parent,nextSibling) { this.parentDomNode = parent; this.computeAttributes(); @@ -35,128 +53,237 @@ TextNodeWidget.prototype.render = function(parent,nextSibling) { this.renderChildren(parent,nextSibling); }; -/* -Compute the internal state of the widget -*/ TextNodeWidget.prototype.execute = function() { var self = this, ignoreCase = self.getVariable("tv-freelinks-ignore-case",{defaultValue:"no"}).trim() === "yes"; - // Get our parameters + var childParseTree = [{ - type: "plain-text", - text: this.getAttribute("text",this.parseTreeNode.text || "") - }]; - // Only process links if not disabled and we're not within a button or link widget - if(this.getVariable("tv-wikilinks",{defaultValue:"yes"}).trim() !== "no" && this.getVariable("tv-freelinks",{defaultValue:"no"}).trim() === "yes" && !this.isWithinButtonOrLink()) { - // Get the information about the current tiddler titles, and construct a regexp - this.tiddlerTitleInfo = this.wiki.getGlobalCache("tiddler-title-info-" + (ignoreCase ? "insensitive" : "sensitive"),function() { - var targetFilterText = self.wiki.getTiddlerText(TITLE_TARGET_FILTER), - titles = !!targetFilterText ? self.wiki.filterTiddlers(targetFilterText,$tw.rootWidget) : self.wiki.allTitles(), - sortedTitles = titles.sort(function(a,b) { - var lenA = a.length, - lenB = b.length; - // First sort by length, so longer titles are first - if(lenA !== lenB) { - if(lenA < lenB) { - return +1; - } else { - return -1; - } - } else { - // Then sort alphabetically within titles of the same length - if(a < b) { - return -1; - } else if(a > b) { - return +1; - } else { - return 0; - } - } - }), - titles = [], - reparts = []; - $tw.utils.each(sortedTitles,function(title) { - if(title.substring(0,3) !== "$:/") { - titles.push(title); - reparts.push("(" + $tw.utils.escapeRegExp(title) + ")"); - } - }); - var regexpStr = "\\b(?:" + reparts.join("|") + ")\\b"; - return { - titles: titles, - regexp: new RegExp(regexpStr,ignoreCase ? "i" : "") - }; + type: "plain-text", + text: this.getAttribute("text",this.parseTreeNode.text || "") + }]; + + var text = childParseTree[0].text; + + if(!text || text.length < 2) { + this.makeChildWidgets(childParseTree); + return; + } + + if(this.getVariable("tv-wikilinks",{defaultValue:"yes"}) !== "no" && + this.getVariable("tv-freelinks",{defaultValue:"no"}) === "yes" && + !this.isWithinButtonOrLink()) { + + var currentTiddlerTitle = this.getVariable("currentTiddler") || ""; + var useWordBoundary = self.wiki.getTiddlerText(WORD_BOUNDARY_TIDDLER, "no") === "yes"; + + var cacheKey = "tiddler-title-info-" + (ignoreCase ? "insensitive" : "sensitive"); + + this.tiddlerTitleInfo = this.wiki.getGlobalCache(cacheKey, function() { + return computeTiddlerTitleInfo(self, ignoreCase); }); - // Repeatedly linkify + if(this.tiddlerTitleInfo.titles.length > 0) { - var index,text,match,matchEnd; - do { - index = childParseTree.length - 1; - text = childParseTree[index].text; - match = this.tiddlerTitleInfo.regexp.exec(text); - if(match) { - // Make a text node for any text before the match - if(match.index > 0) { - childParseTree[index].text = text.substring(0,match.index); - index += 1; - } - // Make a link node for the match - childParseTree[index] = { - type: "link", - attributes: { - to: {type: "string", value: ignoreCase ? this.tiddlerTitleInfo.titles[match.indexOf(match[0],1) - 1] : match[0]}, - "class": {type: "string", value: "tc-freelink"} - }, - children: [{ - type: "plain-text", text: match[0] - }] - }; - index += 1; - // Make a text node for any text after the match - matchEnd = match.index + match[0].length; - if(matchEnd < text.length) { - childParseTree[index] = { - type: "plain-text", - text: text.substring(matchEnd) - }; - } - } - } while(match && childParseTree[childParseTree.length - 1].type === "plain-text"); + var newParseTree = this.processTextWithMatches(text, currentTiddlerTitle, ignoreCase, useWordBoundary); + if(newParseTree.length > 1 || newParseTree[0].type !== "plain-text") { + childParseTree = newParseTree; + } } } - // Make the child widgets + this.makeChildWidgets(childParseTree); }; -TextNodeWidget.prototype.isWithinButtonOrLink = function() { - var withinButtonOrLink = false, - widget = this.parentWidget; - while(!withinButtonOrLink && widget) { - withinButtonOrLink = widget instanceof ButtonWidget || widget instanceof LinkWidget || ((widget instanceof ElementWidget) && widget.parseTreeNode.tag === "a"); - widget = widget.parentWidget; +TextNodeWidget.prototype.processTextWithMatches = function(text, currentTiddlerTitle, ignoreCase, useWordBoundary) { + var searchText = ignoreCase ? text.toLowerCase() : text; + var matches; + + try { + matches = this.tiddlerTitleInfo.ac.search(searchText, useWordBoundary); + } catch(e) { + return [{type: "plain-text", text: text}]; } - return withinButtonOrLink; + + if(!matches || matches.length === 0) { + return [{type: "plain-text", text: text}]; + } + + matches.sort(function(a, b) { + var posDiff = a.index - b.index; + return posDiff !== 0 ? posDiff : b.length - a.length; + }); + + var processedPositions = new FastPositionSet(); + var validMatches = []; + + for(var i = 0; i < matches.length; i++) { + var match = matches[i]; + var matchStart = match.index; + var matchEnd = matchStart + match.length; + + var hasOverlap = false; + for(var pos = matchStart; pos < matchEnd && !hasOverlap; pos++) { + if(processedPositions.has(pos)) { + hasOverlap = true; + } + } + + if(!hasOverlap) { + for(var pos = matchStart; pos < matchEnd; pos++) { + processedPositions.add(pos); + } + validMatches.push(match); + } + } + + if(validMatches.length === 0) { + return [{type: "plain-text", text: text}]; + } + + var newParseTree = []; + var currentPos = 0; + + for(var i = 0; i < validMatches.length; i++) { + var match = validMatches[i]; + var matchStart = match.index; + var matchEnd = matchStart + match.length; + + if(matchStart > currentPos) { + newParseTree.push({ + type: "plain-text", + text: text.slice(currentPos, matchStart) + }); + } + + var matchedTitle = this.tiddlerTitleInfo.titles[match.titleIndex]; + + if(matchedTitle === currentTiddlerTitle) { + newParseTree.push({ + type: "plain-text", + text: text.slice(matchStart, matchEnd) + }); + } else { + newParseTree.push({ + type: "link", + attributes: { + to: {type: "string", value: matchedTitle}, + "class": {type: "string", value: "tc-freelink"} + }, + children: [{ + type: "plain-text", + text: text.slice(matchStart, matchEnd) + }] + }); + } + currentPos = matchEnd; + } + + if(currentPos < text.length) { + newParseTree.push({ + type: "plain-text", + text: text.slice(currentPos) + }); + } + + return newParseTree; +}; + +function computeTiddlerTitleInfo(self, ignoreCase) { + var targetFilterText = self.wiki.getTiddlerText(TITLE_TARGET_FILTER), + titles = !!targetFilterText ? + self.wiki.filterTiddlers(targetFilterText,$tw.rootWidget) : + self.wiki.allTitles(); + + if(!titles || titles.length === 0) { + return { + titles: [], + ac: new AhoCorasick() + }; + } + + var validTitles = []; + var ac = new AhoCorasick(); + + // Process titles in a single pass to avoid duplication + for(var i = 0; i < titles.length; i++) { + var title = titles[i]; + if(title && title.length > 0 && title.substring(0,3) !== "$:/") { + var escapedTitle = escapeRegExp(title); + if(escapedTitle) { + validTitles.push(title); + } + } + } + + // Sort by length (descending) then alphabetically + // Longer titles are prioritized to avoid partial matches (e.g., "JavaScript" before "Java") + var sortedTitles = validTitles.sort(function(a,b) { + var lenDiff = b.length - a.length; + return lenDiff !== 0 ? lenDiff : (a < b ? -1 : a > b ? 1 : 0); + }); + + // Build Aho-Corasick automaton + for(var i = 0; i < sortedTitles.length; i++) { + var title = sortedTitles[i]; + ac.addPattern(ignoreCase ? title.toLowerCase() : title, i); + } + + try { + ac.buildFailureLinks(); + } catch(e) { + return { + titles: [], + ac: new AhoCorasick() + }; + } + + return { + titles: sortedTitles, + ac: ac + }; +} + +TextNodeWidget.prototype.isWithinButtonOrLink = function() { + var widget = this.parentWidget; + while(widget) { + if(widget instanceof ButtonWidget || + widget instanceof LinkWidget || + ((widget instanceof ElementWidget) && widget.parseTreeNode.tag === "a")) { + return true; + } + widget = widget.parentWidget; + } + return false; }; -/* -Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering -*/ TextNodeWidget.prototype.refresh = function(changedTiddlers) { var self = this, changedAttributes = this.computeAttributes(), titlesHaveChanged = false; - $tw.utils.each(changedTiddlers,function(change,title) { - if(change.isDeleted) { - titlesHaveChanged = true; - } else { - titlesHaveChanged = titlesHaveChanged || !self.tiddlerTitleInfo || self.tiddlerTitleInfo.titles.indexOf(title) === -1; + + if(changedTiddlers) { + $tw.utils.each(changedTiddlers,function(change,title) { + if(change.isDeleted) { + titlesHaveChanged = true; + } else { + titlesHaveChanged = titlesHaveChanged || + !self.tiddlerTitleInfo || + self.tiddlerTitleInfo.titles.indexOf(title) === -1; + } + }); + } + + if(changedAttributes.text || titlesHaveChanged || + (changedTiddlers && changedTiddlers[WORD_BOUNDARY_TIDDLER])) { + if(titlesHaveChanged) { + var ignoreCase = self.getVariable("tv-freelinks-ignore-case",{defaultValue:"no"}).trim() === "yes"; + var cacheKey = "tiddler-title-info-" + (ignoreCase ? "insensitive" : "sensitive"); + self.wiki.clearCache(cacheKey); } - }); - if(changedAttributes.text || titlesHaveChanged) { + this.refreshSelf(); return true; } else { - return false; + return this.refreshChildren(changedTiddlers); } }; diff --git a/plugins/tiddlywiki/geospatial/plugin.info b/plugins/tiddlywiki/geospatial/plugin.info index 0f54de2e91..ab722cb36a 100644 --- a/plugins/tiddlywiki/geospatial/plugin.info +++ b/plugins/tiddlywiki/geospatial/plugin.info @@ -3,5 +3,5 @@ "name": "Geospatial Utilities", "description": "Geospatial utilities", "list": "readme docs settings license", - "stability": "STABILITY_1_EXPERIMENTAL" + "stability": "STABILITY_2_STABLE" } diff --git a/plugins/tiddlywiki/googleanalytics/googleanalytics.js b/plugins/tiddlywiki/googleanalytics/googleanalytics.js index 4dfbb1ef54..1cb751e518 100644 --- a/plugins/tiddlywiki/googleanalytics/googleanalytics.js +++ b/plugins/tiddlywiki/googleanalytics/googleanalytics.js @@ -25,7 +25,7 @@ exports.startup = function() { var gaMeasurementID = $tw.wiki.getTiddlerText("$:/GoogleAnalyticsMeasurementID","").replace(/\n/g,""); var url ="https://www.googletagmanager.com/gtag/js?id=" + gaMeasurementID; window.dataLayer = window.dataLayer || []; - window.gtag = function() { window.dataLayer?.push(arguments); }; + window.gtag = function() { if(window.dataLayer) window.dataLayer.push(arguments); }; window.gtag("js",new Date()); window.gtag("config",gaMeasurementID); const scriptElement = window.document.createElement("script"); diff --git a/plugins/tiddlywiki/hammerjs/files/LICENSE.markdown b/plugins/tiddlywiki/hammerjs/files/LICENSE.markdown deleted file mode 100644 index ddaf0238d7..0000000000 --- a/plugins/tiddlywiki/hammerjs/files/LICENSE.markdown +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2011-2017 by Jorik Tangelder (Eight Media) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/plugins/tiddlywiki/hammerjs/files/hammer.min.v2.0.8.js b/plugins/tiddlywiki/hammerjs/files/hammer.min.v2.0.8.js deleted file mode 100644 index 9d99aa63c4..0000000000 --- a/plugins/tiddlywiki/hammerjs/files/hammer.min.v2.0.8.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! Hammer.JS - v2.0.8 - 2016-04-23 - * http://hammerjs.github.io/ - * - * Copyright (c) 2016 Jorik Tangelder; - * Licensed under the MIT license */ -!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(j(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",f=a.console&&(a.console.warn||a.console.log);return f&&f.call(a.console,e,d),b.apply(this,arguments)}}function i(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&la(d,c)}function j(a,b){return function(){return a.apply(b,arguments)}}function k(a,b){return typeof a==oa?a.apply(b?b[0]||d:d,b):a}function l(a,b){return a===d?b:a}function m(a,b,c){g(q(b),function(b){a.addEventListener(b,c,!1)})}function n(a,b,c){g(q(b),function(b){a.removeEventListener(b,c,!1)})}function o(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function p(a,b){return a.indexOf(b)>-1}function q(a){return a.trim().split(/\s+/g)}function r(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function u(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g1&&!c.firstMultiple?c.firstMultiple=D(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=E(d);b.timeStamp=ra(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=I(h,i),b.distance=H(h,i),B(c,b),b.offsetDirection=G(b.deltaX,b.deltaY);var j=F(b.deltaTime,b.deltaX,b.deltaY);b.overallVelocityX=j.x,b.overallVelocityY=j.y,b.overallVelocity=qa(j.x)>qa(j.y)?j.x:j.y,b.scale=g?K(g.pointers,d):1,b.rotation=g?J(g.pointers,d):0,b.maxPointers=c.prevInput?b.pointers.length>c.prevInput.maxPointers?b.pointers.length:c.prevInput.maxPointers:b.pointers.length,C(c,b);var k=a.element;o(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function B(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};b.eventType!==Ea&&f.eventType!==Ga||(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function C(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ha&&(i>Da||h.velocity===d)){var j=b.deltaX-h.deltaX,k=b.deltaY-h.deltaY,l=F(i,j,k);e=l.x,f=l.y,c=qa(l.x)>qa(l.y)?l.x:l.y,g=G(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function D(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:pa(c/b),y:pa(d/b)}}function F(a,b,c){return{x:b/a||0,y:c/a||0}}function G(a,b){return a===b?Ia:qa(a)>=qa(b)?0>a?Ja:Ka:0>b?La:Ma}function H(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function I(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function J(a,b){return I(b[1],b[0],Ra)+I(a[1],a[0],Ra)}function K(a,b){return H(b[0],b[1],Ra)/H(a[0],a[1],Ra)}function L(){this.evEl=Ta,this.evWin=Ua,this.pressed=!1,x.apply(this,arguments)}function M(){this.evEl=Xa,this.evWin=Ya,x.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=$a,this.evWin=_a,this.started=!1,x.apply(this,arguments)}function O(a,b){var c=s(a.touches),d=s(a.changedTouches);return b&(Ga|Ha)&&(c=t(c.concat(d),"identifier",!0)),[c,d]}function P(){this.evTarget=bb,this.targetIds={},x.apply(this,arguments)}function Q(a,b){var c=s(a.touches),d=this.targetIds;if(b&(Ea|Fa)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=s(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return o(a.target,i)}),b===Ea)for(e=0;e-1&&d.splice(a,1)};setTimeout(e,cb)}}function U(a){for(var b=a.srcEvent.clientX,c=a.srcEvent.clientY,d=0;d=f&&db>=g)return!0}return!1}function V(a,b){this.manager=a,this.set(b)}function W(a){if(p(a,jb))return jb;var b=p(a,kb),c=p(a,lb);return b&&c?jb:b||c?b?kb:lb:p(a,ib)?ib:hb}function X(){if(!fb)return!1;var b={},c=a.CSS&&a.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(d){b[d]=c?a.CSS.supports("touch-action",d):!0}),b}function Y(a){this.options=la({},this.defaults,a||{}),this.id=v(),this.manager=null,this.options.enable=l(this.options.enable,!0),this.state=nb,this.simultaneous={},this.requireFail=[]}function Z(a){return a&sb?"cancel":a&qb?"end":a&pb?"move":a&ob?"start":""}function $(a){return a==Ma?"down":a==La?"up":a==Ja?"left":a==Ka?"right":""}function _(a,b){var c=b.manager;return c?c.get(a):a}function aa(){Y.apply(this,arguments)}function ba(){aa.apply(this,arguments),this.pX=null,this.pY=null}function ca(){aa.apply(this,arguments)}function da(){Y.apply(this,arguments),this._timer=null,this._input=null}function ea(){aa.apply(this,arguments)}function fa(){aa.apply(this,arguments)}function ga(){Y.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ha(a,b){return b=b||{},b.recognizers=l(b.recognizers,ha.defaults.preset),new ia(a,b)}function ia(a,b){this.options=la({},ha.defaults,b||{}),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=a,this.input=y(this),this.touchAction=new V(this,this.options.touchAction),ja(this,!0),g(this.options.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ja(a,b){var c=a.element;if(c.style){var d;g(a.options.cssProps,function(e,f){d=u(c.style,f),b?(a.oldCssProps[d]=c.style[d],c.style[d]=e):c.style[d]=a.oldCssProps[d]||""}),b||(a.oldCssProps={})}}function ka(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var la,ma=["","webkit","Moz","MS","ms","o"],na=b.createElement("div"),oa="function",pa=Math.round,qa=Math.abs,ra=Date.now;la="function"!=typeof Object.assign?function(a){if(a===d||null===a)throw new TypeError("Cannot convert undefined or null to object");for(var b=Object(a),c=1;ch&&(b.push(a),h=b.length-1):e&(Ga|Ha)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Za={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},$a="touchstart",_a="touchstart touchmove touchend touchcancel";i(N,x,{handler:function(a){var b=Za[a.type];if(b===Ea&&(this.started=!0),this.started){var c=O.call(this,a,b);b&(Ga|Ha)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}}});var ab={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},bb="touchstart touchmove touchend touchcancel";i(P,x,{handler:function(a){var b=ab[a.type],c=Q.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}});var cb=2500,db=25;i(R,x,{handler:function(a,b,c){var d=c.pointerType==za,e=c.pointerType==Ba;if(!(e&&c.sourceCapabilities&&c.sourceCapabilities.firesTouchEvents)){if(d)S.call(this,b,c);else if(e&&U.call(this,c))return;this.callback(a,b,c)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var eb=u(na.style,"touchAction"),fb=eb!==d,gb="compute",hb="auto",ib="manipulation",jb="none",kb="pan-x",lb="pan-y",mb=X();V.prototype={set:function(a){a==gb&&(a=this.compute()),fb&&this.manager.element.style&&mb[a]&&(this.manager.element.style[eb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){k(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),W(a.join(" "))},preventDefaults:function(a){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=p(d,jb)&&!mb[jb],f=p(d,lb)&&!mb[lb],g=p(d,kb)&&!mb[kb];if(e){var h=1===a.pointers.length,i=a.distance<2,j=a.deltaTime<250;if(h&&i&&j)return}return g&&f?void 0:e||f&&c&Na||g&&c&Oa?this.preventSrc(b):void 0},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var nb=1,ob=2,pb=4,qb=8,rb=qb,sb=16,tb=32;Y.prototype={defaults:{},set:function(a){return la(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=_(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=_(a,this),-1===r(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=_(a,this);var b=r(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(b,a)}var c=this,d=this.state;qb>d&&b(c.options.event+Z(d)),b(c.options.event),a.additionalEvent&&b(a.additionalEvent),d>=qb&&b(c.options.event+Z(d))},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=tb)},canEmit:function(){for(var a=0;af?Ja:Ka,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ia:0>g?La:Ma,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return aa.prototype.attrTest.call(this,a)&&(this.state&ob||!(this.state&ob)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$(a.direction);b&&(a.additionalEvent=this.options.event+b),this._super.emit.call(this,a)}}),i(ca,aa,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&ob)},emit:function(a){if(1!==a.scale){var b=a.scale<1?"in":"out";a.additionalEvent=this.options.event+b}this._super.emit.call(this,a)}}),i(da,Y,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[hb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Ga|Ha)&&!f)this.reset();else if(a.eventType&Ea)this.reset(),this._timer=e(function(){this.state=rb,this.tryEmit()},b.time,this);else if(a.eventType&Ga)return rb;return tb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===rb&&(a&&a.eventType&Ga?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=ra(),this.manager.emit(this.options.event,this._input)))}}),i(ea,aa,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&ob)}}),i(fa,aa,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Na|Oa,pointers:1},getTouchAction:function(){return ba.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Na|Oa)?b=a.overallVelocity:c&Na?b=a.overallVelocityX:c&Oa&&(b=a.overallVelocityY),this._super.attrTest.call(this,a)&&c&a.offsetDirection&&a.distance>this.options.threshold&&a.maxPointers==this.options.pointers&&qa(b)>this.options.velocity&&a.eventType&Ga},emit:function(a){var b=$(a.offsetDirection);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),i(ga,Y,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ib]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: #F0F0F0; -} - - -/* Base color: saturation 0; */ - -.hljs, -.hljs-subst { - color: #444; -} - -.hljs-comment { - color: #888888; -} - -.hljs-keyword, -.hljs-attribute, -.hljs-selector-tag, -.hljs-meta-keyword, -.hljs-doctag, -.hljs-name { - font-weight: bold; -} - - -/* User color: hue: 0 */ - -.hljs-type, -.hljs-string, -.hljs-number, -.hljs-selector-id, -.hljs-selector-class, -.hljs-quote, -.hljs-template-tag, -.hljs-deletion { - color: #880000; -} - -.hljs-title, -.hljs-section { - color: #880000; - font-weight: bold; -} - -.hljs-regexp, -.hljs-symbol, -.hljs-variable, -.hljs-template-variable, -.hljs-link, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #BC6060; -} - - -/* Language color: hue: 90; */ - -.hljs-literal { - color: #78A960; -} - -.hljs-built_in, -.hljs-bullet, -.hljs-code, -.hljs-addition { - color: #397300; -} - - -/* Meta color: hue: 200 */ - -.hljs-meta { - color: #1f7199; -} - -.hljs-meta-string { - color: #4d99bf; -} - - -/* Misc effects */ - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/plugins/tiddlywiki/highlight-legacy/files/highlight.pack.js b/plugins/tiddlywiki/highlight-legacy/files/highlight.pack.js deleted file mode 100644 index a660f395be..0000000000 --- a/plugins/tiddlywiki/highlight-legacy/files/highlight.pack.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! highlight.js v9.18.1 | BSD3 License | git.io/hljslicense */ -!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"==typeof exports||exports.nodeType?n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs})):e(exports)}(function(a){var f=[],i=Object.keys,_={},c={},C=!0,n=/^(no-?highlight|plain|text)$/i,l=/\blang(?:uage)?-([\w-]+)\b/i,t=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,r={case_insensitive:"cI",lexemes:"l",contains:"c",keywords:"k",subLanguage:"sL",className:"cN",begin:"b",beginKeywords:"bK",end:"e",endsWithParent:"eW",illegal:"i",excludeBegin:"eB",excludeEnd:"eE",returnBegin:"rB",returnEnd:"rE",variants:"v",IDENT_RE:"IR",UNDERSCORE_IDENT_RE:"UIR",NUMBER_RE:"NR",C_NUMBER_RE:"CNR",BINARY_NUMBER_RE:"BNR",RE_STARTERS_RE:"RSR",BACKSLASH_ESCAPE:"BE",APOS_STRING_MODE:"ASM",QUOTE_STRING_MODE:"QSM",PHRASAL_WORDS_MODE:"PWM",C_LINE_COMMENT_MODE:"CLCM",C_BLOCK_COMMENT_MODE:"CBCM",HASH_COMMENT_MODE:"HCM",NUMBER_MODE:"NM",C_NUMBER_MODE:"CNM",BINARY_NUMBER_MODE:"BNM",CSS_NUMBER_MODE:"CSSNM",REGEXP_MODE:"RM",TITLE_MODE:"TM",UNDERSCORE_TITLE_MODE:"UTM",COMMENT:"C",beginRe:"bR",endRe:"eR",illegalRe:"iR",lexemesRe:"lR",terminators:"t",terminator_end:"tE"},m="",O="Could not find the language '{}', did you forget to load/include a language module?",B={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},o="of and for in not or if then".split(" ");function x(e){return e.replace(/&/g,"&").replace(//g,">")}function g(e){return e.nodeName.toLowerCase()}function u(e){return n.test(e)}function s(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function E(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:"start",offset:t,node:r}),t=e(r,t),g(r).match(/br|hr|img|input/)||a.push({event:"stop",offset:t,node:r}));return t}(e,0),a}function d(e,n,t){var r=0,a="",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function l(e){a+=""}function u(e){("start"===e.event?c:l)(e.node)}for(;e.length||n.length;){var s=o();if(a+=x(t.substring(r,s[0].offset)),r=s[0].offset,s===e){for(i.reverse().forEach(l);u(s.splice(0,1)[0]),(s=o())===e&&s.length&&s[0].offset===r;);i.reverse().forEach(c)}else"start"===s[0].event?i.push(s[0].node):i.pop(),u(s.splice(0,1)[0])}return a+x(t.substr(r))}function R(n){return n.v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return s(n,{v:null},e)})),n.cached_variants?n.cached_variants:function e(n){return!!n&&(n.eW||e(n.starts))}(n)?[s(n,{starts:n.starts?s(n.starts):null})]:Object.isFrozen(n)?[s(n)]:[n]}function p(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(p)}}function v(n,r){var a={};return"string"==typeof n?t("keyword",n):i(n).forEach(function(e){t(e,n[e])}),a;function t(t,e){r&&(e=e.toLowerCase()),e.split(" ").forEach(function(e){var n=e.split("|");a[n[0]]=[t,function(e,n){return n?Number(n):function(e){return-1!=o.indexOf(e.toLowerCase())}(e)?0:1}(n[0],n[1])]})}}function S(r){function s(e){return e&&e.source||e}function f(e,n){return new RegExp(s(e),"m"+(r.cI?"i":"")+(n?"g":""))}function a(a){var i,e,o={},c=[],l={},t=1;function n(e,n){o[t]=e,c.push([e,n]),t+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(n)+1}for(var r=0;r')+n+(t?"":m)}function l(){p+=null!=d.sL?function(){var e="string"==typeof d.sL;if(e&&!_[d.sL])return x(v);var n=e?T(d.sL,v,!0,R[d.sL]):w(v,d.sL.length?d.sL:void 0);return 0")+'"');if("end"===n.type){var r=function(e){var n=e[0],t=i.substr(e.index),r=o(d,t);if(r){var a=d;for(a.skip?v+=n:(a.rE||a.eE||(v+=n),l(),a.eE&&(v=n));d.cN&&(p+=m),d.skip||d.sL||(M+=d.relevance),(d=d.parent)!==r.parent;);return r.starts&&(r.endSameAsBegin&&(r.starts.eR=r.eR),u(r.starts)),a.rE?0:n.length}}(n);if(null!=r)return r}return v+=t,t.length}var g=D(n);if(!g)throw console.error(O.replace("{}",n)),new Error('Unknown language: "'+n+'"');S(g);var E,d=t||g,R={},p="";for(E=d;E!==g;E=E.parent)E.cN&&(p=c(E.cN,"",!0)+p);var v="",M=0;try{for(var b,h,N=0;d.t.lastIndex=N,b=d.t.exec(i);)h=r(i.substring(N,b.index),b),N=b.index+h;for(r(i.substr(N)),E=d;E.parent;E=E.parent)E.cN&&(p+=m);return{relevance:M,value:p,i:!1,language:n,top:d}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{i:!0,relevance:0,value:x(i)};if(C)return{relevance:0,value:x(i),language:n,top:d,errorRaised:e};throw e}}function w(t,e){e=e||B.languages||i(_);var r={relevance:0,value:x(t)},a=r;return e.filter(D).filter(L).forEach(function(e){var n=T(e,t,!1);n.language=e,n.relevance>a.relevance&&(a=n),n.relevance>r.relevance&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function M(e){return B.tabReplace||B.useBR?e.replace(t,function(e,n){return B.useBR&&"\n"===e?"
":B.tabReplace?n.replace(/\t/g,B.tabReplace):""}):e}function b(e){var n,t,r,a,i,o=function(e){var n,t,r,a,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=l.exec(i)){var o=D(t[1]);return o||(console.warn(O.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),o?t[1]:"no-highlight"}for(n=0,r=(i=i.split(/\s+/)).length;n/g,"\n"):n=e,i=n.textContent,r=o?T(o,i,!0):w(i),(t=E(n)).length&&((a=document.createElement("div")).innerHTML=r.value,r.value=d(t,E(a),i)),r.value=M(r.value),e.innerHTML=r.value,e.className=function(e,n,t){var r=n?c[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}(e.className,o,r.language),e.result={language:r.language,re:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance}))}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");f.forEach.call(e,b)}}var N={disableAutodetect:!0};function D(e){return e=(e||"").toLowerCase(),_[e]||_[c[e]]}function L(e){var n=D(e);return n&&!n.disableAutodetect}return a.highlight=T,a.highlightAuto=w,a.fixMarkup=M,a.highlightBlock=b,a.configure=function(e){B=s(B,e)},a.initHighlighting=h,a.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",h,!1),window.addEventListener("load",h,!1)},a.registerLanguage=function(n,e){var t;try{t=e(a)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",n)),!C)throw e;console.error(e),t=N}p(_[n]=t),t.rawDefinition=e.bind(null,a),t.aliases&&t.aliases.forEach(function(e){c[e]=n})},a.listLanguages=function(){return i(_)},a.getLanguage=D,a.requireLanguage=function(e){var n=D(e);if(n)return n;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},a.autoDetection=L,a.inherit=s,a.debugMode=function(){C=!1},a.IR=a.IDENT_RE="[a-zA-Z]\\w*",a.UIR=a.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",a.NR=a.NUMBER_RE="\\b\\d+(\\.\\d+)?",a.CNR=a.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",a.BNR=a.BINARY_NUMBER_RE="\\b(0b[01]+)",a.RSR=a.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",a.BE=a.BACKSLASH_ESCAPE={b:"\\\\[\\s\\S]",relevance:0},a.ASM=a.APOS_STRING_MODE={cN:"string",b:"'",e:"'",i:"\\n",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:"comment",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C("//","$"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C("/\\*","\\*/"),a.HCM=a.HASH_COMMENT_MODE=a.C("#","$"),a.NM=a.NUMBER_MODE={cN:"number",b:a.NR,relevance:0},a.CNM=a.C_NUMBER_MODE={cN:"number",b:a.CNR,relevance:0},a.BNM=a.BINARY_NUMBER_MODE={cN:"number",b:a.BNR,relevance:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:"number",b:a.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},a.RM=a.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[a.BE,{b:/\[/,e:/\]/,relevance:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:"title",b:a.IR,relevance:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:"title",b:a.UIR,relevance:0},a.METHOD_GUARD={b:"\\.\\s*"+a.UIR,relevance:0},[a.BE,a.ASM,a.QSM,a.PWM,a.C,a.CLCM,a.CBCM,a.HCM,a.NM,a.CNM,a.BNM,a.CSSNM,a.RM,a.TM,a.UTM,a.METHOD_GUARD].forEach(function(e){!function n(t){Object.freeze(t);var r="function"==typeof t;Object.getOwnPropertyNames(t).forEach(function(e){!t.hasOwnProperty(e)||null===t[e]||"object"!=typeof t[e]&&"function"!=typeof t[e]||r&&("caller"===e||"callee"===e||"arguments"===e)||Object.isFrozen(t[e])||n(t[e])});return t}(e)}),a});hljs.registerLanguage("swift",function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},t=e.C("/\\*","\\*/",{c:["self"]}),n={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},r={cN:"string",c:[e.BE,n],v:[{b:/"""/,e:/"""/},{b:/"/,e:/"/}]},a={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return n.c=[a],{k:i,c:[r,e.CLCM,t,{cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},a,{cN:"function",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b://},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",a,r,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{cN:"meta",b:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{bK:"import",e:/$/,c:[e.CLCM,t]}]}});hljs.registerLanguage("less",function(e){function r(e){return{cN:"string",b:"~?"+e+".*?"+e}}function t(e,r,t){return{cN:e,b:r,relevance:t}}var a="[\\w-]+",c="("+a+"|@{"+a+"})",s=[],n=[],b={b:"\\(",e:"\\)",c:n,relevance:0};n.push(e.CLCM,e.CBCM,r("'"),r('"'),e.CSSNM,{b:"(url|data-uri)\\(",starts:{cN:"string",e:"[\\)\\n]",eE:!0}},t("number","#[0-9A-Fa-f]+\\b"),b,t("variable","@@?"+a,10),t("variable","@{"+a+"}"),t("built_in","~?`[^`]*?`"),{cN:"attribute",b:a+"\\s*:",e:":",rB:!0,eE:!0},{cN:"meta",b:"!important"});var i=n.concat({b:"{",e:"}",c:s}),l={bK:"when",eW:!0,c:[{bK:"and not"}].concat(n)},o={b:c+"\\s*:",rB:!0,e:"[;}]",relevance:0,c:[{cN:"attribute",b:c,e:":",eE:!0,starts:{eW:!0,i:"[<=$]",relevance:0,c:n}}]},u={cN:"keyword",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:n,relevance:0}},v={cN:"variable",v:[{b:"@"+a+"\\s*:",relevance:15},{b:"@"+a}],starts:{e:"[;}]",rE:!0,c:i}},C={v:[{b:"[\\.#:&\\[>]",e:"[;{}]"},{b:c,e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",relevance:0,c:[e.CLCM,e.CBCM,l,t("keyword","all\\b"),t("variable","@{"+a+"}"),t("selector-tag",c+"%?",0),t("selector-id","#"+c),t("selector-class","\\."+c,0),t("selector-tag","&",0),{cN:"selector-attr",b:"\\[",e:"\\]"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"\\(",e:"\\)",c:i},{b:"!important"}]};return s.push(e.CLCM,e.CBCM,u,v,o,C),{cI:!0,i:"[=>'/<($\"]",c:s}});hljs.registerLanguage("armasm",function(s){return{cI:!0,aliases:["arm"],l:"\\.?"+s.IR,k:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},c:[{cN:"keyword",b:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?",e:"\\s"},s.C("[;@]","$",{relevance:0}),s.CBCM,s.QSM,{cN:"string",b:"'",e:"[^\\\\]'",relevance:0},{cN:"title",b:"\\|",e:"\\|",i:"\\n",relevance:0},{cN:"number",v:[{b:"[#$=]?0x[0-9a-f]+"},{b:"[#$=]?0b[01]+"},{b:"[#$=]\\d+"},{b:"\\b\\d+"}],relevance:0},{cN:"symbol",v:[{b:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{b:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{b:"[=#]\\w+"}],relevance:0}]}});hljs.registerLanguage("ruby",function(e){var c="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",b={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},r={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},n=[e.C("#","$",{c:[r]}),e.C("^\\=begin","^\\=end",{c:[r],relevance:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:b},t={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,rB:!0,c:[{b:/<<[-~]?'?/},{b:/\w+/,endSameAsBegin:!0,c:[e.BE,s]}]}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:b},l=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(n)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",relevance:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:c}],relevance:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:b},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(n),relevance:0}].concat(n);s.c=l;var d=[{b:/^\s*=>/,starts:{e:"$",c:i.c=l}},{cN:"meta",b:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{e:"$",c:l}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:b,i:/\/\*/,c:n.concat(d).concat(l)}});hljs.registerLanguage("lua",function(e){var t="\\[=*\\[",a="\\]=*\\]",n={b:t,e:a,c:["self"]},l=[e.C("--(?!"+t+")","$"),e.C("--"+t,a,{c:[n],relevance:10})];return{l:e.UIR,k:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},c:l.concat([{cN:"function",bK:"function",e:"\\)",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{cN:"params",b:"\\(",eW:!0,c:l}].concat(l)},e.CNM,e.ASM,e.QSM,{cN:"string",b:t,e:a,c:[n],relevance:5}])}});hljs.registerLanguage("matlab",function(e){var a="('|\\.')+",s={relevance:0,c:[{b:a}]};return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell "},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}]}]},{cN:"built_in",b:/true|false/,relevance:0,starts:s},{b:"[a-zA-Z][a-zA-Z_0-9]*"+a,relevance:0},{cN:"number",b:e.CNR,relevance:0,starts:s},{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{b:/\]|}|\)/,relevance:0,starts:s},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}],starts:s},e.C("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.C("\\%","$")]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,relevance:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,relevance:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("yaml",function(e){var b="true false yes no null",a={cN:"string",relevance:0,v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/\S+/}],c:[e.BE,{cN:"template-variable",v:[{b:"{{",e:"}}"},{b:"%{",e:"}"}]}]};return{cI:!0,aliases:["yml","YAML","yaml"],c:[{cN:"attr",v:[{b:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{b:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{b:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{cN:"meta",b:"^---s*$",relevance:10},{cN:"string",b:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,relevance:0},{cN:"type",b:"!"+e.UIR},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"\\-(?=[ ]|$)",relevance:0},e.HCM,{bK:b,k:{literal:b}},{cN:"number",b:e.CNR+"\\b"},a]}});hljs.registerLanguage("plaintext",function(e){return{disableAutodetect:!0}});hljs.registerLanguage("erlang-repl",function(e){return{k:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},c:[{cN:"meta",b:"^[0-9]+> ",relevance:10},e.C("%","$"),{cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},e.ASM,e.QSM,{b:"\\?(::)?([A-Z]\\w*(::)?)+"},{b:"->"},{b:"ok"},{b:"!"},{b:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",relevance:0},{b:"[A-Z][a-zA-Z0-9_']*",relevance:0}]}});hljs.registerLanguage("cmake",function(e){return{aliases:["cmake.in"],cI:!0,k:{keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"},c:[{cN:"variable",b:"\\${",e:"}"},e.HCM,e.QSM,e.NM]}});hljs.registerLanguage("kotlin",function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={cN:"symbol",b:e.UIR+"@"},n={cN:"subst",b:"\\${",e:"}",c:[e.CNM]},c={cN:"variable",b:"\\$"+e.UIR},r={cN:"string",v:[{b:'"""',e:'"""(?=[^"])',c:[c,n]},{b:"'",e:"'",i:/\n/,c:[e.BE]},{b:'"',e:'"',i:/\n/,c:[e.BE,c,n]}]};n.c.push(r);var i={cN:"meta",b:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UIR+")?"},l={cN:"meta",b:"@"+e.UIR,c:[{b:/\(/,e:/\)/,c:[e.inherit(r,{cN:"meta-string"})]}]},s={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0},b=e.C("/\\*","\\*/",{c:[e.CBCM]}),o={v:[{cN:"type",b:e.UIR},{b:/\(/,e:/\)/,c:[]}]},d=o;return d.v[1].c=[o],o.v[1].c=[d],{aliases:["kt"],k:t,c:[e.C("/\\*\\*","\\*/",{relevance:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,b,{cN:"keyword",b:/\b(break|continue|return|this)\b/,starts:{c:[{cN:"symbol",b:/@\w+/}]}},a,i,l,{cN:"function",bK:"fun",e:"[(]|$",rB:!0,eE:!0,k:t,i:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,c:[{b:e.UIR+"\\s*\\(",rB:!0,relevance:0,c:[e.UTM]},{cN:"type",b://,k:"reified",relevance:0},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:t,relevance:0,c:[{b:/:/,e:/[=,\/]/,eW:!0,c:[o,e.CLCM,b],relevance:0},e.CLCM,b,i,l,r,e.CNM]},b]},{cN:"class",bK:"class interface trait",e:/[:\{(]|$/,eE:!0,i:"extends implements",c:[{bK:"public protected internal private constructor"},e.UTM,{cN:"type",b://,eB:!0,eE:!0,relevance:0},{cN:"type",b:/[,:]\s*/,e:/[<\(,]|$/,eB:!0,rE:!0},i,l]},r,{cN:"meta",b:"^#!/usr/bin/env",e:"$",i:"\n"},s]}});hljs.registerLanguage("javascript",function(e){var r="<>",a="",t={b:/<[A-Za-z0-9\\._:-]+/,e:/\/[A-Za-z0-9\\._:-]+>|\/>/},c="[A-Za-z$_][0-9A-Za-z$_]*",n={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},s={cN:"number",v:[{b:"\\b(0[bB][01]+)n?"},{b:"\\b(0[oO][0-7]+)n?"},{b:e.CNR+"n?"}],relevance:0},o={cN:"subst",b:"\\$\\{",e:"\\}",k:n,c:[]},i={b:"html`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"xml"}},b={b:"css`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"css"}},l={cN:"string",b:"`",e:"`",c:[e.BE,o]};o.c=[e.ASM,e.QSM,i,b,l,s,e.RM];var u=o.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx","mjs","cjs"],k:n,c:[{cN:"meta",relevance:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,i,b,l,e.CLCM,e.C("/\\*\\*","\\*/",{relevance:0,c:[{cN:"doctag",b:"@[A-Za-z]+",c:[{cN:"type",b:"\\{",e:"\\}",relevance:0},{cN:"variable",b:c+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{b:/(?=[^\n])\s/,relevance:0}]}]}),e.CBCM,s,{b:/[{,\n]\s*/,relevance:0,c:[{b:c+"\\s*:",rB:!0,relevance:0,c:[{cN:"attr",b:c,relevance:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+c+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:c},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:n,c:u}]}]},{cN:"",b:/\s/,e:/\s*/,skip:!0},{v:[{b:r,e:a},{b:t.b,e:t.e}],sL:"xml",c:[{b:t.b,e:t.e,skip:!0,c:["self"]}]}],relevance:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:c}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:u}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor get set",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("scss",function(e){var t="@[a-z-]+",r={cN:"variable",b:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={cN:"number",b:"#[0-9A-Fa-f]+"};e.CSSNM,e.QSM,e.ASM,e.CBCM;return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",relevance:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",relevance:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{cN:"selector-pseudo",b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{cN:"selector-pseudo",b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},r,{cN:"attribute",b:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[r,i,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@(page|font-face)",l:t,k:"@page @font-face"},{b:"@",e:"[{;]",rB:!0,k:"and or not only",c:[{b:t,cN:"keyword"},r,e.QSM,e.ASM,i,e.CSSNM]}]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,relevance:0}]},c=[e.BE,r,n],a=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:c,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",relevance:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",relevance:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",relevance:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",relevance:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",relevance:5},{b:"qw\\s+q",e:"q",relevance:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],relevance:0},{b:"-?\\w+\\s*\\=\\>",c:[],relevance:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",relevance:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],relevance:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,relevance:5,c:[e.TM]},{b:"-\\w\\b",relevance:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=a,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:s.c=a}});hljs.registerLanguage("go",function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:n,i:"")+")",c={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},s={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[e.BE]},{b:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",e:"'",i:"."},{b:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},n={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},o={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},c:[{b:/\\\n/,relevance:0},e.inherit(s,{cN:"meta-string"}),{cN:"meta-string",b:/<.*?>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},l={cN:"title",b:t(a)+e.IR,relevance:0},u=t(a)+e.IR+"\\s*\\(",p={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},m=[c,e.CLCM,e.CBCM,n,s],d={v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:p,c:m.concat([{b:/\(/,e:/\)/,k:p,c:m.concat(["self"]),relevance:0}]),relevance:0},b={cN:"function",b:"("+i+"[\\*&\\s]+)+"+u,rB:!0,e:/[{;=]/,eE:!0,k:p,i:/[^\w\s\*&:<>]/,c:[{b:r,k:p,relevance:0},{b:u,rB:!0,c:[l],relevance:0},{cN:"params",b:/\(/,e:/\)/,k:p,relevance:0,c:[e.CLCM,e.CBCM,s,n,c,{b:/\(/,e:/\)/,k:p,relevance:0,c:["self",e.CLCM,e.CBCM,s,n,c]}]},c,e.CLCM,e.CBCM,o]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],k:p,i:"",k:p,c:["self",c]},{b:e.IR+"::",k:p},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},e.TM]}]),exports:{preprocessor:o,strings:s,k:p}}});hljs.registerLanguage("arduino",function(e){var t="boolean byte word String",r="setup loopKeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put",i="DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW",o=e.requireLanguage("cpp").rawDefinition(),a=o.k;return a.keyword+=" "+t,a.literal+=" "+i,a.built_in+=" "+r,o});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],relevance:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],relevance:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("xml",function(e){var c={cN:"symbol",b:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},s={b:"\\s",c:[{cN:"meta-keyword",b:"#?[a-z_][a-z1-9_-]+",i:"\\n"}]},a=e.inherit(s,{b:"\\(",e:"\\)"}),t=e.inherit(e.ASM,{cN:"meta-string"}),l=e.inherit(e.QSM,{cN:"meta-string"}),r={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],cI:!0,c:[{cN:"meta",b:"",relevance:10,c:[s,l,t,a,{b:"\\[",e:"\\]",c:[{cN:"meta",b:"",c:[s,a,l,t]}]}]},e.C("\x3c!--","--\x3e",{relevance:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",relevance:10},c,{cN:"meta",b:/<\?xml/,e:/\?>/,relevance:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:")",e:">",k:{name:"style"},c:[r],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:")",e:">",k:{name:"script"},c:[r],starts:{e:"<\/script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,relevance:0},r]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",relevance:0},{cN:"bullet",b:"^\\s*([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",relevance:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```\\w*\\s*$",e:"^```[ ]*$"},{b:"`.+?`"},{b:"^( {4}|\\t)",e:"$",relevance:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,relevance:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],relevance:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("properties",function(e){var r="[ \\t\\f]*",t="("+r+"[:=]"+r+"|[ \\t\\f]+)",n="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",c={e:t,relevance:0,starts:{cN:"string",e:/$/,relevance:0,c:[{b:"\\\\\\n"}]}};return{cI:!0,i:/\S/,c:[e.C("^\\s*[!#]","$"),{b:n+t,rB:!0,c:[{cN:"attr",b:n,endsParent:!0,relevance:0}],starts:c},{b:a+t,rB:!0,relevance:0,c:[{cN:"meta",b:a,endsParent:!0,relevance:0}],starts:c},{cN:"attr",relevance:0,b:a+r+"$"}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},a={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,relevance:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],relevance:0},e.HCM,a,{cN:"",b:/\\"/},{cN:"string",b:/'/,e:/'/},t]}});hljs.registerLanguage("dockerfile",function(e){return{aliases:["docker"],cI:!0,k:"from maintainer expose env arg user onbuild stopsignal",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{e:/[^\\]$/,sL:"bash"}}],i:">>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={b:/\{\{/,relevance:0},l={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],relevance:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,b],relevance:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,a,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,b,a,c]},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)"/,e:/"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,a,c]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,a,c]},e.ASM,e.QSM]},n={cN:"number",relevance:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,n,l,e.HCM]};return c.c=[l,n,b],{aliases:["py","gyp","ipython"],k:r,i:/(<\/|->|\?)|=>/,c:[b,n,{bK:"if",relevance:0},l,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("ini",function(e){var b={cN:"number",relevance:0,v:[{b:/([\+\-]+)?[\d]+_[\d_]+/},{b:e.NR}]},a=e.C();a.v=[{b:/;/,e:/$/},{b:/#/,e:/$/}];var c={cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"literal",b:/\bon|off|true|false|yes|no\b/},n={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",relevance:10},{b:'"""',e:'"""',relevance:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[a,{cN:"section",b:/\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/,cN:"attr",starts:{e:/$/,c:[a,{b:/\[/,e:/\]/,c:[a,r,c,n,b,"self"],relevance:0},r,c,n,b]}}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",relevance:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/^\*{15}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",relevance:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},c:[{cN:"string",b:"'",e:"'",c:[{b:"''"}]},{cN:"string",b:'"',e:'"',c:[{b:'""'}]},{cN:"string",b:"`",e:"`"},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage("vala",function(e){return{k:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object Gtk Posix",literal:"false true null"},c:[{cN:"class",bK:"class interface namespace",e:"{",eE:!0,i:"[^,:\\n\\s\\.]",c:[e.UTM]},e.CLCM,e.CBCM,{cN:"string",b:'"""',e:'"""',relevance:5},e.ASM,e.QSM,e.CNM,{cN:"meta",b:"^#",e:"$",relevance:2}]}});hljs.registerLanguage("asciidoc",function(e){return{aliases:["adoc"],c:[e.C("^/{4,}\\n","\\n/{4,}$",{relevance:10}),e.C("^//","$",{relevance:0}),{cN:"title",b:"^\\.\\w.*$"},{b:"^[=\\*]{4,}\\n",e:"\\n^[=\\*]{4,}$",relevance:10},{cN:"section",relevance:10,v:[{b:"^(={1,5}) .+?( \\1)?$"},{b:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{cN:"meta",b:"^:.+?:",e:"\\s",eE:!0,relevance:10},{cN:"meta",b:"^\\[.+?\\]$",relevance:0},{cN:"quote",b:"^_{4,}\\n",e:"\\n_{4,}$",relevance:10},{cN:"code",b:"^[\\-\\.]{4,}\\n",e:"\\n[\\-\\.]{4,}$",relevance:10},{b:"^\\+{4,}\\n",e:"\\n\\+{4,}$",c:[{b:"<",e:">",sL:"xml",relevance:0}],relevance:10},{cN:"bullet",b:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{cN:"symbol",b:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{cN:"strong",b:"\\B\\*(?![\\*\\s])",e:"(\\n{2}|\\*)",c:[{b:"\\\\*\\w",relevance:0}]},{cN:"emphasis",b:"\\B'(?!['\\s])",e:"(\\n{2}|')",c:[{b:"\\\\'\\w",relevance:0}],relevance:0},{cN:"emphasis",b:"_(?![_\\s])",e:"(\\n{2}|_)",relevance:0},{cN:"string",v:[{b:"``.+?''"},{b:"`.+?'"}]},{cN:"code",b:"(`.+?`|\\+.+?\\+)",relevance:0},{cN:"code",b:"^[ \\t]",e:"$",relevance:0},{b:"^'{3,}[ \\t]*$",relevance:10},{b:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",rB:!0,c:[{b:"(link|image:?):",relevance:0},{cN:"link",b:"\\w",e:"[^\\[]+",relevance:0},{cN:"string",b:"\\[",e:"\\]",eB:!0,eE:!0,relevance:0}],relevance:10}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.CLCM,e.CBCM],c=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:c,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})].concat(n),i:"\\S"},a={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return c.push(t,a),n.forEach(function(e){c.push(e)}),{c:c,k:i,i:"\\S"}});hljs.registerLanguage("rust",function(e){var t="([ui](8|16|32|64|128|size)|f(32|64))?",r="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{aliases:["rs"],k:{keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:r},l:e.IR+"!?",i:""}]}});hljs.registerLanguage("awk",function(e){return{k:{keyword:"BEGIN END if else while do for in break continue delete next nextfile function func exit|10"},c:[{cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},{cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,relevance:10},{b:/(u|b)?r?"""/,e:/"""/,relevance:10},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)"/,e:/"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},e.RM,e.HCM,e.NM]}});hljs.registerLanguage("java",function(e){var a="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",t={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{relevance:0,c:[{b:/\w+@/,relevance:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",relevance:0},{cN:"function",b:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,relevance:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,relevance:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},t,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("cs",function(e){var a={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},c={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},r=e.inherit(c,{i:/\n/}),n={cN:"subst",b:"{",e:"}",k:a},t=e.inherit(n,{i:/\n/}),s={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,t]},l={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},n]},b=e.inherit(l,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},t]});n.c=[l,s,c,e.ASM,e.QSM,i,e.CBCM],t.c=[b,s,r,e.ASM,e.QSM,i,e.inherit(e.CBCM,{i:/\n/})];var o={v:[l,s,c,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],k:a,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",relevance:0},{b:"\x3c!--|--\x3e"},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},o,i,{bK:"class interface",e:/[{;=]/,i:/[^\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",relevance:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/\s*[{;=]/,eE:!0,k:a,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],relevance:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:a,relevance:0,c:[o,i,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("mathematica",function(e){return{aliases:["mma","wl"],l:"(\\$|\\b)"+e.IR+"\\b",k:"AASTriangle AbelianGroup Abort AbortKernels AbortProtect AbortScheduledTask Above Abs AbsArg AbsArgPlot Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AcceptanceThreshold AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Activate Active ActiveClassification ActiveClassificationObject ActiveItem ActivePrediction ActivePredictionObject ActiveStyle AcyclicGraphQ AddOnHelpPath AddSides AddTo AddToSearchIndex AddUsers AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AdministrativeDivisionData AffineHalfSpace AffineSpace AffineStateSpaceModel AffineTransform After AggregatedEntityClass AggregationLayer AircraftData AirportData AirPressureData AirTemperatureData AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowAdultContent AllowedCloudExtraParameters AllowedCloudParameterExtensions AllowedDimensions AllowedFrequencyRange AllowedHeads AllowGroupClose AllowIncomplete AllowInlineCells AllowKernelInitialization AllowLooseGrammar AllowReverseGroupClose AllowScriptLevelChange AllTrue Alphabet AlphabeticOrder AlphabeticSort AlphaChannel AlternateImage AlternatingFactorial AlternatingGroup AlternativeHypothesis Alternatives AltitudeMethod AmbientLight AmbiguityFunction AmbiguityList Analytic AnatomyData AnatomyForm AnatomyPlot3D AnatomySkinStyle AnatomyStyling AnchoredSearch And AndersonDarlingTest AngerJ AngleBisector AngleBracket AnglePath AnglePath3D AngleVector AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning AnimationRunTime AnimationTimeIndex Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotate Annotation AnnotationDelete AnnotationNames AnnotationRules AnnotationValue Annuity AnnuityDue Annulus AnomalyDetection AnomalyDetectorFunction Anonymous Antialiasing AntihermitianMatrixQ Antisymmetric AntisymmetricMatrixQ Antonyms AnyOrder AnySubset AnyTrue Apart ApartSquareFree APIFunction Appearance AppearanceElements AppearanceRules AppellF1 Append AppendCheck AppendLayer AppendTo ApplicationIdentificationKey Apply ApplySides ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcCurvature ARCHProcess ArcLength ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Area Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess Around AroundReplace ARProcess Array ArrayComponents ArrayDepth ArrayFilter ArrayFlatten ArrayMesh ArrayPad ArrayPlot ArrayQ ArrayResample ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads ASATriangle Ask AskAppend AskConfirm AskDisplay AskedQ AskedValue AskFunction AskState AskTemplateDisplay AspectRatio AspectRatioFixed Assert AssociateTo Association AssociationFormat AssociationMap AssociationQ AssociationThread AssumeDeterministic Assuming Assumptions AstronomicalData AsymptoticDSolveValue AsymptoticEqual AsymptoticEquivalent AsymptoticGreater AsymptoticGreaterEqual AsymptoticIntegrate AsymptoticLess AsymptoticLessEqual AsymptoticOutputTracker AsymptoticRSolveValue AsymptoticSolve AsymptoticSum Asynchronous AsynchronousTaskObject AsynchronousTasks Atom AtomCoordinates AtomCount AtomDiagramCoordinates AtomList AtomQ AttentionLayer Attributes Audio AudioAmplify AudioAnnotate AudioAnnotationLookup AudioBlockMap AudioCapture AudioChannelAssignment AudioChannelCombine AudioChannelMix AudioChannels AudioChannelSeparate AudioData AudioDelay AudioDelete AudioDevice AudioDistance AudioFade AudioFrequencyShift AudioGenerator AudioIdentify AudioInputDevice AudioInsert AudioIntervals AudioJoin AudioLabel AudioLength AudioLocalMeasurements AudioLooping AudioLoudness AudioMeasurements AudioNormalize AudioOutputDevice AudioOverlay AudioPad AudioPan AudioPartition AudioPause AudioPitchShift AudioPlay AudioPlot AudioQ AudioRecord AudioReplace AudioResample AudioReverb AudioSampleRate AudioSpectralMap AudioSpectralTransformation AudioSplit AudioStop AudioStream AudioStreams AudioTimeStretch AudioTrim AudioType AugmentedPolyhedron AugmentedSymmetricPolynomial Authenticate Authentication AuthenticationDialog AutoAction Autocomplete AutocompletionFunction AutoCopy AutocorrelationTest AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutoQuoteCharacters AutoRefreshed AutoRemove AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords AutoSubmitting Axes AxesEdge AxesLabel AxesOrigin AxesStyle AxiomaticTheory AxisBabyMonsterGroupB Back Background BackgroundAppearance BackgroundTasksSettings Backslash Backsubstitution Backward Ball Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarcodeImage BarcodeRecognize BaringhausHenzeTest BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseDecode BaseEncode BaseForm Baseline BaselinePosition BaseStyle BasicRecurrentLayer BatchNormalizationLayer BatchSize BatesDistribution BattleLemarieWavelet BayesianMaximization BayesianMaximizationObject BayesianMinimization BayesianMinimizationObject Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized Between BetweennessCentrality BeveledPolyhedron BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryDeserialize BinaryDistance BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinarySerialize BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BiquadraticFilterModel BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor BiweightLocation BiweightMidvariance Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockchainAddressData BlockchainBase BlockchainBlockData BlockchainContractValue BlockchainData BlockchainGet BlockchainKeyEncode BlockchainPut BlockchainTokenData BlockchainTransaction BlockchainTransactionData BlockchainTransactionSign BlockchainTransactionSubmit BlockMap BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bond BondCount BondList BondQ Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms BooleanQ BooleanRegion Booleans BooleanStrings BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryDiscretizeGraphics BoundaryDiscretizeRegion BoundaryMesh BoundaryMeshRegion BoundaryMeshRegionQ BoundaryStyle BoundedRegionQ BoundingRegion Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxObject BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break BridgeData BrightnessEqualize BroadcastStationData Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurve3DBoxOptions BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BSplineSurface3DBoxOptions BubbleChart BubbleChart3D BubbleScale BubbleSizes BuildingData BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteArray ByteArrayFormat ByteArrayQ ByteArrayToString ByteCount ByteOrderingC CachedValue CacheGraphics CachePersistence CalendarConvert CalendarData CalendarType Callout CalloutMarker CalloutStyle CallPacket CanberraDistance Cancel CancelButton CandlestickChart CanonicalGraph CanonicalizePolygon CanonicalizePolyhedron CanonicalName CanonicalWarpingCorrespondence CanonicalWarpingDistance CantorMesh CantorStaircase Cap CapForm CapitalDifferentialD Capitalize CapsuleShape CaptureRunning CardinalBSplineBasis CarlemanLinearize CarmichaelLambda CaseOrdering Cases CaseSensitive Cashflow Casoratian Catalan CatalanNumber Catch Catenate CatenateLayer CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling CelestialSystem Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEvaluationLanguage CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellLabelStyle CellLabelTemplate CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterArray CenterDot CentralFeature CentralMoment CentralMomentGeneratingFunction Cepstrogram CepstrogramArray CepstrumArray CForm ChampernowneNumber ChangeOptions ChannelBase ChannelBrokerAction ChannelDatabin ChannelHistoryLength ChannelListen ChannelListener ChannelListeners ChannelListenerWait ChannelObject ChannelPreSendFunction ChannelReceiverFunction ChannelSend ChannelSubscribers ChanVeseBinarize Character CharacterCounts CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterName CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop ChromaticityPlot ChromaticityPlot3D ChromaticPolynomial Circle CircleBox CircleDot CircleMinus CirclePlus CirclePoints CircleThrough CircleTimes CirculantGraph CircularOrthogonalMatrixDistribution CircularQuaternionMatrixDistribution CircularRealMatrixDistribution CircularSymplecticMatrixDistribution CircularUnitaryMatrixDistribution Circumsphere CityData ClassifierFunction ClassifierInformation ClassifierMeasurements ClassifierMeasurementsObject Classify ClassPriors Clear ClearAll ClearAttributes ClearCookies ClearPermissions ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipPlanesStyle ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent CloudAccountData CloudBase CloudConnect CloudDeploy CloudDirectory CloudDisconnect CloudEvaluate CloudExport CloudExpression CloudExpressions CloudFunction CloudGet CloudImport CloudLoggingData CloudObject CloudObjectInformation CloudObjectInformationData CloudObjectNameFormat CloudObjects CloudObjectURLType CloudPublish CloudPut CloudRenderingMethod CloudSave CloudShare CloudSubmit CloudSymbol CloudUnshare ClusterClassify ClusterDissimilarityFunction ClusteringComponents ClusteringTree CMYKColor Coarse CodeAssistOptions Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorBalance ColorCombine ColorConvert ColorCoverage ColorData ColorDataFunction ColorDetect ColorDistance ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQ ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorsNear ColorSpace ColorToneMapping Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CombinedEntityClass CombinerFunction CometData CommonDefaultFormatTypes Commonest CommonestFilter CommonName CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompanyData CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledCodeFunction CompiledFunction CompilerOptions Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComplexListPlot ComplexPlot ComplexPlot3D ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries CompositeQ Composition CompoundElement CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData ComputeUncertainty Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath ConformAudio ConformImages Congruent ConicHullRegion ConicHullRegion3DBox ConicHullRegionBox ConicOptimization Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphComponents ConnectedGraphQ ConnectedMeshComponents ConnectedMoleculeComponents ConnectedMoleculeQ ConnectionSettings ConnectLibraryCallbackFunction ConnectSystemModelComponents ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray ConstantArrayLayer ConstantImage ConstantPlusLayer ConstantRegionQ Constants ConstantTimesLayer ConstellationData ConstrainedMax ConstrainedMin Construct Containing ContainsAll ContainsAny ContainsExactly ContainsNone ContainsOnly ContentFieldOptions ContentLocationFunction ContentObject ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTask ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean ContrastiveLossLayer Control ControlActive ControlAlignment ControlGroupContentsBox ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket ConvexHullMesh ConvexPolygonQ ConvexPolyhedronQ ConvolutionLayer Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CookieFunction Cookies CoordinateBoundingBox CoordinateBoundingBoxArray CoordinateBounds CoordinateBoundsArray CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDatabin CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CountDistinct CountDistinctBy CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Counts CountsBy Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateCellID CreateChannel CreateCloudExpression CreateDatabin CreateDataSystemModel CreateDialog CreateDirectory CreateDocument CreateFile CreateIntermediateDirectories CreateManagedLibraryExpression CreateNotebook CreatePalette CreatePalettePacket CreatePermissionsGroup CreateScheduledTask CreateSearchIndex CreateSystemModel CreateTemporary CreateUUID CreateWindow CriterionFunction CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossEntropyLossLayer CrossingCount CrossingDetect CrossingPolygon CrossMatrix Csc Csch CTCLossLayer Cube CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrencyConvert CurrentDate CurrentImage CurrentlySpeakingPacket CurrentNotebookImage CurrentScreenImage CurrentValue Curry CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecompositionD DagumDistribution DamData DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DatabaseConnect DatabaseDisconnect DatabaseReference Databin DatabinAdd DatabinRemove Databins DatabinUpload DataCompression DataDistribution DataRange DataReversed Dataset Date DateBounds Dated DateDelimiters DateDifference DatedUnit DateFormat DateFunction DateHistogram DateList DateListLogPlot DateListPlot DateListStepPlot DateObject DateObjectQ DateOverlapsQ DatePattern DatePlus DateRange DateReduction DateString DateTicksFormat DateValue DateWithinQ DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayHemisphere DaylightQ DayMatchQ DayName DayNightTerminator DayPlus DayRange DayRound DeBruijnGraph DeBruijnSequence Debug DebugTag Decapitalize Decimal DecimalForm DeclareKnownSymbols DeclarePackage Decompose DeconvolutionLayer Decrement Decrypt DecryptFile DedekindEta DeepSpaceProbeData Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultPrintPrecision DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValue DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod DefineResourceFunction Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic DEigensystem DEigenvalues Deinitialization Del DelaunayMesh Delayed Deletable Delete DeleteAnomalies DeleteBorderComponents DeleteCases DeleteChannel DeleteCloudExpression DeleteContents DeleteDirectory DeleteDuplicates DeleteDuplicatesBy DeleteFile DeleteMissing DeleteObject DeletePermissionsKey DeleteSearchIndex DeleteSmallComponents DeleteStopwords DeleteWithContents DeletionWarning DelimitedArray DelimitedSequence Delimiter DelimiterFlashTime DelimiterMatching Delimiters DeliveryFunction Dendrogram Denominator DensityGraphics DensityHistogram DensityPlot DensityPlot3D DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DerivedKey DescriptorStateSpace DesignMatrix DestroyAfterEvaluation Det DeviceClose DeviceConfigure DeviceExecute DeviceExecuteAsynchronous DeviceObject DeviceOpen DeviceOpenQ DeviceRead DeviceReadBuffer DeviceReadLatest DeviceReadList DeviceReadTimeSeries Devices DeviceStreams DeviceWrite DeviceWriteBuffer DGaussianWavelet DiacriticalPositioning Diagonal DiagonalizableMatrixQ DiagonalMatrix DiagonalMatrixQ Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DictionaryWordQ DifferenceDelta DifferenceOrder DifferenceQuotient DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitalSignature DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralAngle DihedralGroup Dilation DimensionalCombinations DimensionalMeshComponents DimensionReduce DimensionReducerFunction DimensionReduction Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletBeta DirichletCharacter DirichletCondition DirichletConvolve DirichletDistribution DirichletEta DirichletL DirichletLambda DirichletTransform DirichletWindow DisableConsolePrintPacket DisableFormatting DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLimit DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscreteMaxLimit DiscreteMinLimit DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform DiscretizeGraphics DiscretizeRegion Discriminant DisjointQ Disjunction Disk DiskBox DiskMatrix DiskSegment Dispatch DispatchQ DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceMatrix DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers DivideSides Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentGenerator DocumentGeneratorInformation DocumentGeneratorInformationData DocumentGenerators DocumentNotebook DocumentWeightingRules Dodecahedron DomainRegistrationInformation DominantColors DOSTextFormat Dot DotDashed DotEqual DotLayer DotPlusLayer Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DropoutLayer DSolve DSolveValue Dt DualLinearProgramming DualPolyhedron DualSystemsModel DumpGet DumpSave DuplicateFreeQ Duration Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicGeoGraphics DynamicImage DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptionsE EarthImpactData EarthquakeData EccentricityCentrality Echo EchoFunction EclipseType EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeContract EdgeCost EdgeCount EdgeCoverQ EdgeCycleMatrix EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight EdgeWeightedGraphQ Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData ElementwiseLayer ElidedForms Eliminate EliminationOrder Ellipsoid EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmbedCode EmbeddedHTML EmbeddedService EmbeddingLayer EmbeddingObject EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EmptyRegion EnableConsolePrintPacket Enabled Encode Encrypt EncryptedObject EncryptFile End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfBuffer EndOfFile EndOfLine EndOfString EndPackage EngineEnvironment EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entity EntityClass EntityClassList EntityCopies EntityFunction EntityGroup EntityInstance EntityList EntityPrefetch EntityProperties EntityProperty EntityPropertyClass EntityRegister EntityStore EntityStores EntityTypeName EntityUnregister EntityValue Entropy EntropyFilter Environment Epilog EpilogFunction Equal EqualColumns EqualRows EqualTilde EqualTo EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EscapeRadius EstimatedBackground EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerAngles EulerCharacteristic EulerE EulerGamma EulerianGraphQ EulerMatrix EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluateScheduledTask EvaluationBox EvaluationCell EvaluationCompletionAction EvaluationData EvaluationElements EvaluationEnvironment EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels EventSeries ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludedLines ExcludedPhysicalQuantities ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog ExoplanetData Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi ExpirationDate Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportByteArray ExportForm ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpressionUUID ExpToTrig ExtendedEntityClass ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalBundle ExternalCall ExternalDataCharacterEncoding ExternalEvaluate ExternalFunction ExternalFunctionName ExternalObject ExternalOptions ExternalSessionObject ExternalSessions ExternalTypeSignature ExternalValue Extract ExtractArchive ExtractLayer ExtremeValueDistributionFaceForm FaceGrids FaceGridsStyle FacialFeatures Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail Failure FailureAction FailureDistribution FailureQ False FareySequence FARIMAProcess FeatureDistance FeatureExtract FeatureExtraction FeatureExtractor FeatureExtractorFunction FeatureNames FeatureNearest FeatureSpacePlot FeatureSpacePlot3D FeatureTypes FEDisableConsolePrintPacket FeedbackLinearize FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket FetalGrowthData Fibonacci Fibonorial FieldCompletionFunction FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileConvert FileDate FileExistsQ FileExtension FileFormat FileHandler FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameForms FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileSize FileSystemMap FileSystemScan FileTemplate FileTemplateApply FileType FilledCurve FilledCurveBox FilledCurveBoxOptions Filling FillingStyle FillingTransform FilteredEntityClass FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindAnomalies FindArgMax FindArgMin FindChannels FindClique FindClusters FindCookies FindCurvePath FindCycle FindDevices FindDistribution FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEdgeIndependentPaths FindEquationalProof FindEulerianCycle FindExternalEvaluators FindFaces FindFile FindFit FindFormula FindFundamentalCycles FindGeneratingFunction FindGeoLocation FindGeometricConjectures FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindHamiltonianPath FindHiddenMarkovStates FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMatchingColor FindMaximum FindMaximumFlow FindMaxValue FindMeshDefects FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindMoleculeSubstructure FindPath FindPeaks FindPermutation FindPostmanTour FindProcessParameters FindRepeat FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindSpanningTree FindSystemModelEquilibrium FindTextualAnswer FindThreshold FindTransientRepeat FindVertexCover FindVertexCut FindVertexIndependentPaths Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstCase FirstPassageTimeDistribution FirstPosition FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FitRegularization FittedModel FixedOrder FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlattenLayer FlatTopWindow FlipView Floor FlowPolynomial FlushPrintOutputPacket Fold FoldList FoldPair FoldPairList FollowRedirects Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FormControl FormFunction FormLayoutFunction FormObject FormPage FormTheme FormulaData FormulaLookup FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalGaussianNoiseProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameRate FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrenetSerretSystem FrequencySamplingFilterKernel FresnelC FresnelF FresnelG FresnelS Friday FrobeniusNumber FrobeniusSolve FromAbsoluteTime FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS FromEntity FromJulianDate FromLetterNumber FromPolarCoordinates FromRomanNumeral FromSphericalCoordinates FromUnixTime Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullInformationOutputRegulator FullOptions FullRegion FullSimplify Function FunctionCompile FunctionCompileExport FunctionCompileExportByteArray FunctionCompileExportLibrary FunctionCompileExportString FunctionDomain FunctionExpand FunctionInterpolation FunctionPeriod FunctionRange FunctionSpace FussellVeselyImportanceGaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins GalaxyData GalleryView Gamma GammaDistribution GammaRegularized GapPenalty GARCHProcess GatedRecurrentLayer Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianOrthogonalMatrixDistribution GaussianSymplecticMatrixDistribution GaussianUnitaryMatrixDistribution GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateAsymmetricKeyPair GenerateConditions GeneratedCell GeneratedDocumentBinding GenerateDerivedKey GenerateDigitalSignature GenerateDocument GeneratedParameters GeneratedQuantityMagnitudes GenerateHTTPResponse GenerateSecuredAuthenticationKey GenerateSymmetricKey GeneratingFunction GeneratorDescription GeneratorHistoryLength GeneratorOutputType Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeoAntipode GeoArea GeoArraySize GeoBackground GeoBoundingBox GeoBounds GeoBoundsRegion GeoBubbleChart GeoCenter GeoCircle GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDisk GeoDisplacement GeoDistance GeoDistanceList GeoElevationData GeoEntities GeoGraphics GeogravityModelData GeoGridDirectionDifference GeoGridLines GeoGridLinesStyle GeoGridPosition GeoGridRange GeoGridRangePadding GeoGridUnitArea GeoGridUnitDistance GeoGridVector GeoGroup GeoHemisphere GeoHemisphereBoundary GeoHistogram GeoIdentify GeoImage GeoLabels GeoLength GeoListPlot GeoLocation GeologicalPeriodData GeomagneticModelData GeoMarker GeometricAssertion GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricScene GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoModel GeoNearest GeoPath GeoPosition GeoPositionENU GeoPositionXYZ GeoProjection GeoProjectionData GeoRange GeoRangePadding GeoRegionValuePlot GeoResolution GeoScaleBar GeoServer GeoSmoothHistogram GeoStreamPlot GeoStyling GeoStylingImageFunction GeoVariant GeoVector GeoVectorENU GeoVectorPlot GeoVectorXYZ GeoVisibleRegion GeoVisibleRegionBoundary GeoWithinQ GeoZoomLevel GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenAngle GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter GrammarApply GrammarRules GrammarToken Graph Graph3D GraphAssortativity GraphAutomorphismGroup GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel Greater GreaterEqual GreaterEqualLess GreaterEqualThan GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterThan GreaterTilde Green GreenFunction Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupBy GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators Groupings GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain GroupTogetherGrouping GroupTogetherNestedGrouping GrowCutComponents Gudermannian GuidedFilter GumbelDistributionHaarWavelet HadamardMatrix HalfLine HalfNormalDistribution HalfPlane HalfSpace HamiltonianGraphQ HammingDistance HammingWindow HandlerFunctions HandlerFunctionsKeys HankelH1 HankelH2 HankelMatrix HankelTransform HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash Haversine HazardFunction Head HeadCompose HeaderLines Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings Here HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenMarkovProcess HiddenSurface Highlighted HighlightGraph HighlightImage HighlightMesh HighpassFilter HigmanSimsGroupHS HilbertCurve HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HistoricalPeriodData HitMissTransform HITSCentrality HjorthDistribution HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HostLookup HotellingTSquareDistribution HoytDistribution HTMLSave HTTPErrorResponse HTTPRedirect HTTPRequest HTTPRequestData HTTPResponse Hue HumanGrowthData HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyperplane Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestDataI IconData Iconize IconizedObject IconRules Icosahedron Identity IdentityMatrix If IgnoreCase IgnoreDiacritics IgnorePunctuation IgnoreSpellCheck IgnoringInactive Im Image Image3D Image3DProjection Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageApplyIndexed ImageAspectRatio ImageAssemble ImageAugmentationLayer ImageBoundingBoxes ImageCache ImageCacheValid ImageCapture ImageCaptureFunction ImageCases ImageChannels ImageClip ImageCollage ImageColorSpace ImageCompose ImageContainsQ ImageContents ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDisplacements ImageDistance ImageEffect ImageExposureCombine ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageFocusCombine ImageForestingComponents ImageFormattingWidth ImageForwardTransformation ImageGraphics ImageHistogram ImageIdentify ImageInstanceQ ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarker ImageMarkers ImageMeasurements ImageMesh ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImagePosition ImagePreviewFunction ImagePyramid ImagePyramidApply ImageQ ImageRangeCache ImageRecolor ImageReflect ImageRegion ImageResize ImageResolution ImageRestyle ImageRotate ImageRotated ImageSaliencyFilter ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions ImagingDevice ImplicitRegion Implies Import ImportAutoReplacements ImportByteArray ImportOptions ImportString ImprovementImportance In Inactivate Inactive IncidenceGraph IncidenceList IncidenceMatrix IncludeAromaticBonds IncludeConstantBasis IncludeDefinitions IncludeDirectories IncludeFileExtension IncludeGeneratorTasks IncludeHydrogens IncludeInflections IncludeMetaInformation IncludePods IncludeQuantities IncludeRelatedTables IncludeSingularTerm IncludeWindowTimes Increment IndefiniteMatrixQ Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentPhysicalQuantity IndependentUnit IndependentUnitDimension IndependentVertexSetQ Indeterminate IndeterminateThreshold IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers InfiniteLine InfinitePlane Infinity Infix InflationAdjust InflationMethod Information InformationData InformationDataGrid Inherited InheritScope InhomogeneousPoissonProcess InitialEvaluationHistory Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InitializationObjects InitializationValue Initialize InitialSeeding InlineCounterAssignments InlineCounterIncrements InlineRules Inner InnerPolygon InnerPolyhedron Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionFunction InsertionPointObject InsertLinebreaks InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Insphere Install InstallService InstanceNormalizationLayer InString Integer IntegerDigits IntegerExponent IntegerLength IntegerName IntegerPart IntegerPartitions IntegerQ IntegerReverse Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction Interpreter InterpretTemplate InterquartileRange Interrupt InterruptSettings IntersectingQ Intersection Interval IntervalIntersection IntervalMarkers IntervalMarkersStyle IntervalMemberQ IntervalSlider IntervalUnion Into Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHankelTransform InverseHaversine InverseImagePyramid InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InverseMellinTransform InversePermutation InverseRadon InverseRadonTransform InverseSeries InverseShortTimeFourier InverseSpectrogram InverseSurvivalFunction InverseTransformedRegion InverseWaveletTransform InverseWeierstrassP InverseWishartMatrixDistribution InverseZTransform Invisible InvisibleApplication InvisibleTimes IPAddress IrreduciblePolynomialQ IslandData IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemAspectRatio ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcessJaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join JoinAcross Joined JoinedCurve JoinedCurveBox JoinedCurveBoxOptions JoinForm JordanDecomposition JordanModelDecomposition JulianDate JuliaSetBoettcher JuliaSetIterationCount JuliaSetPlot JuliaSetPointsK KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KEdgeConnectedComponents KEdgeConnectedGraphQ KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelFunction KernelMixtureDistribution Kernels Ket Key KeyCollisionFunction KeyComplement KeyDrop KeyDropFrom KeyExistsQ KeyFreeQ KeyIntersection KeyMap KeyMemberQ KeypointStrength Keys KeySelect KeySort KeySortBy KeyTake KeyUnion KeyValueMap KeyValuePattern Khinchin KillProcess KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnapsackSolve KnightTourGraph KnotData KnownUnitQ KochCurve KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter KVertexConnectedComponents KVertexConnectedGraphQLABColor Label Labeled LabeledSlider LabelingFunction LabelingSize LabelStyle LabelVisibility LaguerreL LakeData LambdaComponents LambertW LaminaData LanczosWindow LandauDistribution Language LanguageCategory LanguageData LanguageIdentify LanguageOptions LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCHColor LCM LeaderSize LeafCount LeapYearQ LearnDistribution LearnedDistribution LearningRate LearningRateMultipliers LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessEqualThan LessFullEqual LessGreater LessLess LessSlantEqual LessThan LessTilde LetterCharacter LetterCounts LetterNumber LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryDataType LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox Line3DBoxOptions LinearFilter LinearFractionalOptimization LinearFractionalTransform LinearGradientImage LinearizingTransformationData LinearLayer LinearModelFit LinearOffsetFunction LinearOptimization LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBoxOptions LineBreak LinebreakAdjustments LineBreakChart LinebreakSemicolonWeighting LineBreakWithin LineColor LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRankCentrality LinkRead LinkReadHeld LinkReadyQ Links LinkService LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot ListDensityPlot3D Listen ListFormat ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListSliceContourPlot3D ListSliceDensityPlot3D ListSliceVectorPlot3D ListStepPlot ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalAdaptiveBinarize LocalCache LocalClusteringCoefficient LocalizeDefinitions LocalizeVariables LocalObject LocalObjects LocalResponseNormalizationLayer LocalSubmit LocalSymbol LocalTime LocalTimeZone LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogisticSigmoid LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongestOrderedSequence LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow LongShortTermMemoryLayer Lookup Loopback LoopFreeGraphQ LossFunction LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowerTriangularMatrixQ LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LunarEclipse LUVColor LyapunovSolve LyonsGroupLyMachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MailAddressValidation MailExecute MailFolder MailItem MailReceiverFunction MailResponseFunction MailSearch MailServerConnect MailServerConnection MailSettings MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules ManagedLibraryExpressionID ManagedLibraryExpressionQ MandelbrotSetBoettcher MandelbrotSetDistance MandelbrotSetIterationCount MandelbrotSetMemberQ MandelbrotSetPlot MangoldtLambda ManhattanDistance Manipulate Manipulator MannedSpaceMissionData MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarchenkoPasturDistribution MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicalFunctionData MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixNormalDistribution MatrixPlot MatrixPower MatrixPropertyDistribution MatrixQ MatrixRank MatrixTDistribution Max MaxBend MaxCellMeasure MaxColorDistance MaxDetect MaxDuration MaxExtraBandwidths MaxExtraConditions MaxFeatureDisplacement MaxFeatures MaxFilter MaximalBy Maximize MaxItems MaxIterations MaxLimit MaxMemoryUsed MaxMixtureKernels MaxOverlapFraction MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxTrainingRounds MaxValue MaxwellDistribution MaxWordGap McLaughlinGroupMcL Mean MeanAbsoluteLossLayer MeanAround MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter MeanSquaredLossLayer Median MedianDeviation MedianFilter MedicalTestData Medium MeijerG MeijerGReduce MeixnerDistribution MellinConvolve MellinTransform MemberQ MemoryAvailable MemoryConstrained MemoryConstraint MemoryInUse MengerMesh Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuList MenuPacket MenuSortingValue MenuStyle MenuView Merge MergeDifferences MergingFunction MersennePrimeExponent MersennePrimeExponentQ Mesh MeshCellCentroid MeshCellCount MeshCellHighlight MeshCellIndex MeshCellLabel MeshCellMarker MeshCellMeasure MeshCellQuality MeshCells MeshCellShapeFunction MeshCellStyle MeshCoordinates MeshFunctions MeshPrimitives MeshQualityGoal MeshRange MeshRefinementFunction MeshRegion MeshRegionQ MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageObject MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation MeteorShowerData Method MethodOptions MexicanHatWavelet MeyerWavelet Midpoint Min MinColorDistance MinDetect MineralData MinFilter MinimalBy MinimalPolynomial MinimalStateSpaceModel Minimize MinimumTimeIncrement MinIntervalSize MinkowskiQuestionMark MinLimit MinMax MinorPlanetData Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingBehavior MissingDataMethod MissingDataRules MissingQ MissingString MissingStyle MissingValuePattern MittagLefflerE MixedFractionParts MixedGraphQ MixedMagnitude MixedRadix MixedRadixQuantity MixedUnit MixtureDistribution Mod Modal Mode Modular ModularInverse ModularLambda Module Modulus MoebiusMu Molecule MoleculeContainsQ MoleculeEquivalentQ MoleculeGraph MoleculeModify MoleculePattern MoleculePlot MoleculePlot3D MoleculeProperty MoleculeQ MoleculeValue Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction MomentOfInertia Monday Monitor MonomialList MonomialOrder MonsterGroupM MoonPhase MoonPosition MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform MortalityData Most MountainData MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovieData MovingAverage MovingMap MovingMedian MoyalDistribution Multicolumn MultiedgeStyle MultigraphQ MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity MultiplySides Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistributionN NakagamiDistribution NameQ Names NamespaceBox NamespaceBoxOptions Nand NArgMax NArgMin NBernoulliB NBodySimulation NBodySimulationData NCache NDEigensystem NDEigenvalues NDSolve NDSolveValue Nearest NearestFunction NearestNeighborGraph NearestTo NebulaData NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeDefiniteMatrixQ NegativeIntegers NegativeMultinomialDistribution NegativeRationals NegativeReals NegativeSemidefiniteMatrixQ NeighborhoodData NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestGraph NestList NestWhile NestWhileList NetAppend NetBidirectionalOperator NetChain NetDecoder NetDelete NetDrop NetEncoder NetEvaluationMode NetExtract NetFlatten NetFoldOperator NetGraph NetInformation NetInitialize NetInsert NetInsertSharedArrays NetJoin NetMapOperator NetMapThreadOperator NetMeasurements NetModel NetNestOperator NetPairEmbeddingOperator NetPort NetPortGradient NetPrepend NetRename NetReplace NetReplacePart NetSharedArray NetStateObject NetTake NetTrain NetTrainResultsObject NetworkPacketCapture NetworkPacketRecording NetworkPacketRecordingDuring NetworkPacketTrace NeumannValue NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextCell NextDate NextPrime NextScheduledTaskTime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NightHemisphere NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants NondimensionalizationTransform None NoneTrue NonlinearModelFit NonlinearStateSpaceModel NonlocalMeansFilter NonNegative NonNegativeIntegers NonNegativeRationals NonNegativeReals NonPositive NonPositiveIntegers NonPositiveRationals NonPositiveReals Nor NorlundB Norm Normal NormalDistribution NormalGrouping NormalizationLayer Normalize Normalized NormalizedSquaredEuclideanDistance NormalMatrixQ NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookImport NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookTemplate NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde Nothing NotHumpDownHump NotHumpEqual NotificationFunction NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar Now NoWhitespace NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms NuclearExplosionData NuclearReactorData Null NullRecords NullSpace NullWords Number NumberCompose NumberDecompose NumberExpand NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberLinePlot NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumeratorDenominator NumericalOrder NumericalSort NumericArray NumericArrayQ NumericArrayType NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlotO ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OceanData Octahedron OddQ Off Offset OLEData On ONanGroupON Once OneIdentity Opacity OpacityFunction OpacityFunctionScaling Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionalElement OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering OrderingBy OrderingLayer Orderless OrderlessPatternSequence OrnsteinUhlenbeckProcess Orthogonalize OrthogonalMatrixQ Out Outer OuterPolygon OuterPolyhedron OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OverwriteTarget OwenT OwnValuesPackage PackingMethod PaddedForm Padding PaddingLayer PaddingSize PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageTheme PageWidth Pagination PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath PalindromeQ Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo Parallelepiped ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds Parallelogram ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParametricRegion ParentBox ParentCell ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParentNotebook ParetoDistribution ParetoPickandsDistribution ParkData Part PartBehavior PartialCorrelationFunction PartialD ParticleAcceleratorData ParticleData Partition PartitionGranularity PartitionsP PartitionsQ PartLayer PartOfSpeech PartProtection ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteAutoQuoteCharacters PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PeakDetect PeanoCurve PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PercentForm PerfectNumber PerfectNumberQ PerformanceGoal Perimeter PeriodicBoundaryCondition PeriodicInterpolation Periodogram PeriodogramArray Permanent Permissions PermissionsGroup PermissionsGroupMemberQ PermissionsGroups PermissionsKey PermissionsKeys PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PerpendicularBisector PersistenceLocation PersistenceTime PersistentObject PersistentObjects PersistentValue PersonData PERTDistribution PetersenGraph PhaseMargins PhaseRange PhysicalSystemData Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest PingTime Pink PitchRecognize Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarAngle PlanarGraph PlanarGraphQ PlanckRadiationLaw PlaneCurveData PlanetaryMoonData PlanetData PlantData Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLabels PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangeClipPlanesStyle PlotRangePadding PlotRegion PlotStyle PlotTheme Pluralize Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox Point3DBoxOptions PointBox PointBoxOptions PointFigureChart PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonalNumber PolygonAngle PolygonBox PolygonBoxOptions PolygonCoordinates PolygonDecomposition PolygonHoleScale PolygonIntersections PolygonScale Polyhedron PolyhedronAngle PolyhedronCoordinates PolyhedronData PolyhedronDecomposition PolyhedronGenus PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PoolingLayer PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position PositionIndex Positive PositiveDefiniteMatrixQ PositiveIntegers PositiveRationals PositiveReals PositiveSemidefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerRange PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement Predict PredictionRoot PredictorFunction PredictorInformation PredictorMeasurements PredictorMeasurementsObject PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependLayer PrependTo PreprocessingRules PreserveColor PreserveImageOptions Previous PreviousCell PreviousDate PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitivePolynomialQ PrimitiveRoot PrimitiveRootList PrincipalComponents PrincipalValue Print PrintableASCIIQ PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment Printout3D Printout3DPreviewer PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateKey PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessConnection ProcessDirectory ProcessEnvironment Processes ProcessEstimator ProcessInformation ProcessObject ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessStatus ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm ProofObject Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse PsychrometricPropertyData PublicKey PublisherID PulsarData PunctuationCharacter Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptionsQBinomial QFactorial QGamma QHypergeometricPFQ QnDispersion QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ QuadraticOptimization Quantile QuantilePlot Quantity QuantityArray QuantityDistribution QuantityForm QuantityMagnitude QuantityQ QuantityUnit QuantityVariable QuantityVariableCanonicalUnit QuantityVariableDimensions QuantityVariableIdentifier QuantityVariablePhysicalQuantity Quartics QuartileDeviation Quartiles QuartileSkewness Query QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainderRadialGradientImage RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RadonTransform RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Ramp Random RandomChoice RandomColor RandomComplex RandomEntity RandomFunction RandomGeoPosition RandomGraph RandomImage RandomInstance RandomInteger RandomPermutation RandomPoint RandomPolygon RandomPolyhedron RandomPrime RandomReal RandomSample RandomSeed RandomSeeding RandomVariate RandomWalkProcess RandomWord Range RangeFilter RangeSpecification RankedMax RankedMin RarerProbability Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadByteArray ReadLine ReadList ReadProtected ReadString Real RealAbs RealBlockDiagonalForm RealDigits RealExponent Reals RealSign Reap RecognitionPrior RecognitionThreshold Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RectangularRepeatingElement RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate Region RegionBinarize RegionBoundary RegionBounds RegionCentroid RegionDifference RegionDimension RegionDisjoint RegionDistance RegionDistanceFunction RegionEmbeddingDimension RegionEqual RegionFunction RegionImage RegionIntersection RegionMeasure RegionMember RegionMemberFunction RegionMoment RegionNearest RegionNearestFunction RegionPlot RegionPlot3D RegionProduct RegionQ RegionResize RegionSize RegionSymmetricDifference RegionUnion RegionWithin RegisterExternalEvaluator RegularExpression Regularization RegularlySampledQ RegularPolygon ReIm ReImLabels ReImPlot ReImStyle Reinstall RelationalDatabase RelationGraph Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot RemoteAuthorizationCaching RemoteConnect RemoteConnectionObject RemoteFile RemoteRun RemoteRunProcess Remove RemoveAlphaChannel RemoveAsynchronousTask RemoveAudioStream RemoveBackground RemoveChannelListener RemoveChannelSubscribers Removed RemoveDiacritics RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RemoveUsers RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart RepairMesh Repeated RepeatedNull RepeatedString RepeatedTiming RepeatingElement Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated ReplicateLayer RequiredPhysicalQuantities Resampling ResamplingAlgorithmData ResamplingMethod Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask ReshapeLayer Residue ResizeLayer Resolve ResourceAcquire ResourceData ResourceFunction ResourceObject ResourceRegister ResourceRemove ResourceSearch ResourceSubmissionObject ResourceSubmit ResourceSystemBase ResourceUpdate ResponseForm Rest RestartInterval Restricted Resultant ResumePacket Return ReturnEntersInput ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnReceiptFunction ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseSort ReverseSortBy ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ RiemannXi Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightComposition RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity RollPitchYawAngles RollPitchYawMatrix RomanNumeral Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RSolveValue RudinShapiro RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulePlot RulerUnits Run RunProcess RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilaritySameQ SameTest SampledEntityClass SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SASTriangle SatelliteData SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveConnection SaveDefinitions SavitzkyGolayMatrix SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTask ScheduledTaskActiveQ ScheduledTaskInformation ScheduledTaskInformationData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScientificNotationThreshold ScorerGi ScorerGiPrime ScorerHi ScorerHiPrime ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptForm ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition SearchAdjustment SearchIndexObject SearchIndices SearchQueryString SearchResultObject Sec Sech SechDistribution SecondOrderConeOptimization SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SecuredAuthenticationKey SecuredAuthenticationKeys SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook SelectFirst Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemanticImport SemanticImportString SemanticInterpretation SemialgebraicComponentInstances SemidefiniteOptimization SendMail SendMessage Sequence SequenceAlignment SequenceAttentionLayer SequenceCases SequenceCount SequenceFold SequenceFoldList SequenceForm SequenceHold SequenceLastLayer SequenceMostLayer SequencePosition SequencePredict SequencePredictorFunction SequenceReplace SequenceRestLayer SequenceReverseLayer SequenceSplit Series SeriesCoefficient SeriesData ServiceConnect ServiceDisconnect ServiceExecute ServiceObject ServiceRequest ServiceResponse ServiceSubmit SessionSubmit SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetCloudDirectory SetCookies SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPermissions SetPrecision SetProperty SetSecuredAuthenticationKey SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemModel SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetUsers SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share SharingList Sharpen ShearingMatrix ShearingTransform ShellRegion ShenCastanMatrix ShiftedGompertzDistribution ShiftRegisterSequence Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortTimeFourier ShortTimeFourierData ShortUpArrow Show ShowAutoConvert ShowAutoSpellCheck ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowCodeAssist ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiderealTime SiegelTheta SiegelTukeyTest SierpinskiCurve SierpinskiMesh Sign Signature SignedRankTest SignedRegionDistance SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ SimplePolygonQ SimplePolyhedronQ Simplex Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution SkinStyle Skip SliceContourPlot3D SliceDensityPlot3D SliceDistribution SliceVectorPlot3D Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDecomposition SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SnDispersion Snippet SnubPolyhedron SocialMediaData Socket SocketConnect SocketListen SocketListener SocketObject SocketOpen SocketReadMessage SocketReadyQ Sockets SocketWaitAll SocketWaitNext SoftmaxLayer SokalSneathDissimilarity SolarEclipse SolarSystemFeatureData SolidAngle SolidData SolidRegionQ Solve SolveAlways SolveDelayed Sort SortBy SortedBy SortedEntityClass Sound SoundAndGraphics SoundNote SoundVolume SourceLink Sow Space SpaceCurveData SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution SpatialMedian SpatialTransformationLayer Speak SpeakTextPacket SpearmanRankTest SpearmanRho SpeciesData SpecificityGoal SpectralLineData Spectrogram SpectrogramArray Specularity SpeechRecognize SpeechSynthesize SpellingCorrection SpellingCorrectionList SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SpherePoints SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SphericalShell SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquareMatrixQ SquareRepeatingElement SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave SSSTriangle StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackedDateListPlot StackedListPlot StackInhibit StadiumShape StandardAtmosphereData StandardDeviation StandardDeviationFilter StandardForm Standardize Standardized StandardOceanData StandbyDistribution Star StarClusterData StarData StarGraph StartAsynchronousTask StartExternalSession StartingStepSize StartOfLine StartOfString StartProcess StartScheduledTask StartupSound StartWebSession StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StateTransformationLinearize StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StereochemistryElements StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StoppingPowerData StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamMarkers StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringContainsQ StringCount StringDelete StringDrop StringEndsQ StringExpression StringExtract StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPadLeft StringPadRight StringPart StringPartition StringPosition StringQ StringRepeat StringReplace StringReplaceList StringReplacePart StringReverse StringRiffle StringRotateLeft StringRotateRight StringSkeleton StringSplit StringStartsQ StringTake StringTemplate StringToByteArray StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleData StyleDefinitions StyleForm StyleHints StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subdivide Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subsequences Subset SubsetEqual SubsetMap SubsetQ Subsets SubStar SubstitutionSystem Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubtractSides SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde Success SuchThat Sum SumConvergence SummationLayer Sunday SunPosition Sunrise Sunset SuperDagger SuperMinus SupernovaData SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceArea SurfaceColor SurfaceData SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricKey SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Synonyms Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SynthesizeMissingValues SystemDialogInput SystemException SystemGet SystemHelpPath SystemInformation SystemInformationData SystemInstall SystemModel SystemModeler SystemModelExamples SystemModelLinearize SystemModelParametricSimulate SystemModelPlot SystemModelProgressReporting SystemModelReliability SystemModels SystemModelSimulate SystemModelSimulateSensitivity SystemModelSimulationData SystemOpen SystemOptions SystemProcessData SystemProcesses SystemsConnectionsModel SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelLinearity SystemsModelMerge SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemsModelVectorRelativeOrders SystemStub SystemTestTab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TableViewBoxBackground TableViewBoxOptions TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeDrop TakeLargest TakeLargestBy TakeList TakeSmallest TakeSmallestBy TakeWhile Tally Tan Tanh TargetDevice TargetFunctions TargetSystem TargetUnits TaskAbort TaskExecute TaskObject TaskRemove TaskResume Tasks TaskSuspend TaskWait TautologyQ TelegraphProcess TemplateApply TemplateArgBox TemplateBox TemplateBoxOptions TemplateEvaluate TemplateExpression TemplateIf TemplateObject TemplateSequence TemplateSlot TemplateSlotSequence TemplateUnevaluated TemplateVerbatim TemplateWith TemporalData TemporalRegularity Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge TestID TestReport TestReportObject TestResultObject Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCases TextCell TextClipboardType TextContents TextData TextElement TextForm TextGrid TextJustification TextLine TextPacket TextParagraph TextPosition TextRecognize TextSearch TextSearchReport TextSentences TextString TextStructure TextStyle TextTranslation Texture TextureCoordinateFunction TextureCoordinateScaling TextWords Therefore ThermodynamicData ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreadingLayer ThreeJSymbol Threshold Through Throw ThueMorse Thumbnail Thursday Ticks TicksStyle TideData Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint TimeDirection TimeFormat TimeGoal TimelinePlot TimeObject TimeObjectQ Times TimesBy TimeSeries TimeSeriesAggregate TimeSeriesForecast TimeSeriesInsert TimeSeriesInvertibility TimeSeriesMap TimeSeriesMapThread TimeSeriesModel TimeSeriesModelFit TimeSeriesResample TimeSeriesRescale TimeSeriesShift TimeSeriesThread TimeSeriesWindow TimeUsed TimeValue TimeWarpingCorrespondence TimeWarpingDistance TimeZone TimeZoneConvert TimeZoneOffset Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate Today ToDiscreteTimeModel ToEntity ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase Tomorrow ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform ToPolarCoordinates TopologicalSort ToRadicals ToRules ToSphericalCoordinates ToString Total TotalHeight TotalLayer TotalVariationFilter TotalWidth TouchPosition TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TrackingFunction TracyWidomDistribution TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TrainingProgressCheckpointing TrainingProgressFunction TrainingProgressMeasurements TrainingProgressReporting TrainingStoppingCriterion TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationClass TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField TransformedProcess TransformedRegion TransitionDirection TransitionDuration TransitionEffect TransitiveClosureGraph TransitiveReductionGraph Translate TranslationOptions TranslationTransform Transliterate Transparent TransparentColor Transpose TransposeLayer TrapSelection TravelDirections TravelDirectionsData TravelDistance TravelDistanceList TravelMethod TravelTime TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle Triangle TriangleCenter TriangleConstruct TriangleMeasurement TriangleWave TriangularDistribution TriangulateMesh Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean TrimmedVariance TropicalStormData True TrueQ TruncatedDistribution TruncatedPolyhedron TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBoxOptions TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow TunnelData Tuples TuranGraph TuringMachine TuttePolynomial TwoWayRule Typed TypeSpecifierUnateQ Uncompress UnconstrainedParameters Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UnderseaFeatureData UndirectedEdge UndirectedGraph UndirectedGraphQ UndoOptions UndoTrackedVariables Unequal UnequalTo Unevaluated UniformDistribution UniformGraphDistribution UniformPolyhedron UniformSumDistribution Uninstall Union UnionPlus Unique UnitaryMatrixQ UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitSystem UnitTriangle UnitVector UnitVectorLayer UnityDimensions UniverseModelData UniversityData UnixTime Unprotect UnregisterExternalEvaluator UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpdateSearchIndex UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize UpperTriangularMatrixQ Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpTo UpValues URL URLBuild URLDecode URLDispatcher URLDownload URLDownloadSubmit URLEncode URLExecute URLExpand URLFetch URLFetchAsynchronous URLParse URLQueryDecode URLQueryEncode URLRead URLResponseTime URLSave URLSaveAsynchronous URLShorten URLSubmit UseGraphicsRange UserDefinedWavelet Using UsingFrontEnd UtilityFunctionV2Get ValenceErrorHandling ValidationLength ValidationSet Value ValueBox ValueBoxOptions ValueDimensions ValueForm ValuePreprocessingFunction ValueQ Values ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorAround VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorGreater VectorGreaterEqual VectorLess VectorLessEqual VectorMarkers VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerificationTest VerifyConvergence VerifyDerivedKey VerifyDigitalSignature VerifyInterpretation VerifySecurityCertificates VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexContract VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight VertexWeightedGraphQ Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewProjection ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoiceStyleData VoigtDistribution VolcanoData Volume VonMisesDistribution VoronoiMeshWaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WarpingCorrespondence WarpingDistance WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeatherForecastData WebAudioSearch WebElementObject WeberE WebExecute WebImage WebImageSearch WebSearch WebSessionObject WebSessions WebWindowObject Wedge Wednesday WeibullDistribution WeierstrassE1 WeierstrassE2 WeierstrassE3 WeierstrassEta1 WeierstrassEta2 WeierstrassEta3 WeierstrassHalfPeriods WeierstrassHalfPeriodW1 WeierstrassHalfPeriodW2 WeierstrassHalfPeriodW3 WeierstrassInvariantG2 WeierstrassInvariantG3 WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White WhiteNoiseProcess WhitePoint Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WikipediaData WikipediaSearch WilksW WilksWTest WindDirectionData WindingCount WindingPolygon WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowPersistentStyles WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth WindSpeedData WindVectorData WinsorizedMean WinsorizedVariance WishartMatrixDistribution With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult WolframLanguageData Word WordBoundary WordCharacter WordCloud WordCount WordCounts WordData WordDefinition WordFrequency WordFrequencyData WordList WordOrientation WordSearch WordSelectionFunction WordSeparators WordSpacings WordStem WordTranslation WorkingPrecision WrapAround Write WriteLine WriteString WronskianXMLElement XMLObject XMLTemplate Xnor Xor XYZColorYellow Yesterday YuleDissimilarityZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZIPCodeData ZipfDistribution ZoomCenter ZoomFactor ZTest ZTransform$Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AllowExternalChannelFunctions $AssertFunction $Assumptions $AsynchronousTask $AudioInputDevices $AudioOutputDevices $BaseDirectory $BatchInput $BatchOutput $BlockchainBase $BoxForms $ByteOrdering $CacheBaseDirectory $Canceled $ChannelBase $CharacterEncoding $CharacterEncodings $CloudBase $CloudConnected $CloudCreditsAvailable $CloudEvaluation $CloudExpressionBase $CloudObjectNameFormat $CloudObjectURLType $CloudRootDirectory $CloudSymbolBase $CloudUserID $CloudUserUUID $CloudVersion $CloudVersionNumber $CloudWolframEngineVersionNumber $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $Cookies $CookieStore $CreationDate $CurrentLink $CurrentTask $CurrentWebSession $DateStringFormat $DefaultAudioInputDevice $DefaultAudioOutputDevice $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultLocalBase $DefaultMailbox $DefaultNetworkInterface $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $EmbedCodeEnvironments $EmbeddableServices $EntityStores $Epilog $EvaluationCloudBase $EvaluationCloudObject $EvaluationEnvironment $ExportFormats $Failed $FinancialDataSource $FontFamilies $FormatType $FrontEnd $FrontEndSession $GeoEntityTypes $GeoLocation $GeoLocationCity $GeoLocationCountry $GeoLocationPrecision $GeoLocationSource $HistoryLength $HomeDirectory $HTMLExportRules $HTTPCookies $HTTPRequest $IgnoreEOF $ImageFormattingWidth $ImagingDevice $ImagingDevices $ImportFormats $IncomingMailSettings $InitialDirectory $Initialization $InitializationContexts $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $InterpreterTypes $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $LocalBase $LocalSymbolBase $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $MobilePhone $ModuleNumber $NetworkConnected $NetworkInterfaces $NetworkLicense $NewMessage $NewSymbol $Notebooks $NoValue $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $Permissions $PermissionsGroupBase $PersistenceBase $PersistencePath $PipeSupported $PlotTheme $Post $Pre $PreferencesDirectory $PreInitialization $PrePrint $PreRead $PrintForms $PrintLiteral $Printout3DPreviewer $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $PublisherID $RandomState $RecursionLimit $RegisteredDeviceClasses $RegisteredUserName $ReleaseNumber $RequesterAddress $RequesterWolframID $RequesterWolframUUID $ResourceSystemBase $RootDirectory $ScheduledTask $ScriptCommandLine $ScriptInputString $SecuredAuthenticationKeyTokens $ServiceCreditsAvailable $Services $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SourceLink $SSHAuthentication $SummaryBoxDataSizeLimit $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemMemory $SystemShell $SystemTimeZone $SystemWordLength $TemplatePath $TemporaryDirectory $TemporaryPrefix $TestFileName $TextStyle $TimedOut $TimeUnit $TimeZone $TimeZoneEntity $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $UnitSystem $Urgent $UserAddOnsDirectory $UserAgentLanguages $UserAgentMachine $UserAgentName $UserAgentOperatingSystem $UserAgentString $UserAgentVersion $UserBaseDirectory $UserDocumentsDirectory $Username $UserName $UserURLBase $Version $VersionNumber $VoiceStyles $WolframID $WolframUUID",c:[e.C("\\(\\*","\\*\\)",{c:["self"]}),e.QSM,e.CNM]}});hljs.registerLanguage("vim",function(e){return{l:/[!#@\w]+/,k:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"},i:/;/,c:[e.NM,{cN:"string",b:"'",e:"'",i:"\\n"},{cN:"string",b:/"(\\"|\n\\|[^"\n])*"/},e.C('"',"$"),{cN:"variable",b:/[bwtglsav]:[\w\d_]*/},{cN:"function",bK:"function function!",e:"$",relevance:0,c:[e.TM,{cN:"params",b:"\\(",e:"\\)"}]},{cN:"symbol",b:/<[\w-]+>/}]}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},{cN:"class",b:"("+i.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:i,l:t,c:[e.UTM]},{b:"\\."+e.UIR,relevance:0}]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",n={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},a=e.C("%","$"),b={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},i={b:"fun\\s+"+r+"/\\d+"},l={b:c+"\\(",e:"\\)",rB:!0,relevance:0,c:[{b:c,relevance:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,relevance:0}]},d={b:"{",e:"}",relevance:0},o={b:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},t={b:"[A-Z][a-zA-Z0-9_]*",relevance:0},v={b:"#"+e.UIR,relevance:0,rB:!0,c:[{b:"#"+e.UIR,relevance:0},{b:"{",e:"}",relevance:0}]},f={bK:"fun receive if try case",e:"end",k:n};f.c=[a,i,e.inherit(e.ASM,{cN:""}),f,l,e.QSM,b,d,o,t,v];var s=[a,i,f,l,e.QSM,b,d,o,t,v];l.c[1].c=s,d.c=s;var u={cN:"params",b:"\\(",e:"\\)",c:v.c[1].c=s};return{aliases:["erl"],k:n,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[u,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:n,c:s}},a,{b:"^-",e:"\\.",relevance:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[u]},b,e.QSM,v,o,t,d,{b:/\.$/}]}});hljs.registerLanguage("powershell",function(e){var t={keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter"},n={b:"`[\\s\\S]",relevance:0},c={cN:"variable",v:[{b:/\$\B/},{cN:"keyword",b:/\$this/},{b:/\$[\w\d][\w\d_:]*/}]},i={cN:"string",v:[{b:/"/,e:/"/},{b:/@"/,e:/^"@/}],c:[n,c,{cN:"variable",b:/\$[A-z]/,e:/[^A-z]/}]},a={cN:"string",v:[{b:/'/,e:/'/},{b:/@'/,e:/^'@/}]},r=e.inherit(e.C(null,null),{v:[{b:/#/,e:/$/},{b:/<#/,e:/#>/}],c:[{cN:"doctag",v:[{b:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{b:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),o={cN:"built_in",v:[{b:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},l={cN:"class",bK:"class enum",e:/\s*[{]/,eE:!0,relevance:0,c:[e.TM]},s={cN:"function",b:/function\s+/,e:/\s*\{|$/,eE:!0,rB:!0,relevance:0,c:[{b:"function",relevance:0,cN:"keyword"},{cN:"title",b:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{b:/\(/,e:/\)/,cN:"params",relevance:0,c:[c]}]},p={b:/using\s/,e:/$/,rB:!0,c:[i,a,{cN:"keyword",b:/(using|assembly|command|module|namespace|type)/}]},b={v:[{cN:"operator",b:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{cN:"literal",b:/(-)[\w\d]+/,relevance:0}]},d={cN:"function",b:/\[.*\]\s*[\w]+[ ]??\(/,e:/$/,rB:!0,relevance:0,c:[{cN:"keyword",b:"(".concat(t.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TM,{endsParent:!0})]},u=[d,r,n,e.NM,i,a,o,c,{cN:"literal",b:/\$(null|true|false)\b/},{cN:"selector-tag",b:/\@\B/,relevance:0}],m={b:/\[/,e:/\]/,eB:!0,eE:!0,relevance:0,c:[].concat("self",u,{b:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",cN:"built_in",relevance:0},{cN:"type",b:/[\.\w\d]+/,relevance:0})};return d.c.unshift(m),{aliases:["ps","ps1"],l:/-?[A-z\.\-]+/,cI:!0,k:t,c:u.concat(l,s,p,b,m)}});hljs.registerLanguage("typescript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"},n={cN:"meta",b:"@"+r},a={b:"\\(",e:/\)/,k:t,c:["self",e.QSM,e.ASM,e.NM]},c={cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM,n,a]},s={cN:"number",v:[{b:"\\b(0[bB][01]+)n?"},{b:"\\b(0[oO][0-7]+)n?"},{b:e.CNR+"n?"}],relevance:0},o={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},i={b:"html`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"xml"}},l={b:"css`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"css"}},b={cN:"string",b:"`",e:"`",c:[e.BE,o]};return o.c=[e.ASM,e.QSM,i,l,b,s,e.RM],{aliases:["ts"],k:t,c:[{cN:"meta",b:/^\s*['"]use strict['"]/},e.ASM,e.QSM,i,l,b,e.CLCM,e.CBCM,s,{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+e.IR+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:e.IR},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:["self",e.CLCM,e.CBCM]}]}]}],relevance:0},{cN:"function",bK:"function",e:/[\{;]/,eE:!0,k:t,c:["self",e.inherit(e.TM,{b:r}),c],i:/%/,relevance:0},{bK:"constructor",e:/[\{;]/,eE:!0,c:["self",c]},{b:/module\./,k:{built_in:"module"},relevance:0},{bK:"module",e:/\{/,eE:!0},{bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,relevance:0},n,a]}});hljs.registerLanguage("fortran",function(e){return{cI:!0,aliases:["f90","f95"],k:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"},i:/\/\*/,c:[e.inherit(e.ASM,{cN:"string",relevance:0}),e.inherit(e.QSM,{cN:"string",relevance:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"}]},e.C("!","$",{relevance:0}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php","php3","php4","php5","php6","php7"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("haskell",function(e){var i={v:[e.C("--","$"),e.C("{-","-}",{c:["self"]})]},a={cN:"meta",b:"{-#",e:"#-}"},l={cN:"meta",b:"^#",e:"$"},c={cN:"type",b:"\\b[A-Z][\\w']*",relevance:0},n={b:"\\(",e:"\\)",i:'"',c:[a,l,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TM,{b:"[_a-z][\\w']*"}),i]};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{bK:"module",e:"where",k:"module where",c:[n,i],i:"\\W\\.|;"},{b:"\\bimport\\b",e:"$",k:"import qualified as hiding",c:[n,i],i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[c,n,i]},{cN:"class",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[a,c,n,{b:"{",e:"}",c:n.c},i]},{bK:"default",e:"$",c:[c,n,i]},{bK:"infix infixl infixr",e:"$",c:[e.CNM,i]},{b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[c,e.QSM,i]},{cN:"meta",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},a,l,e.QSM,e.CNM,c,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),i,{b:"->|<-"}]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",relevance:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]{0,3}(?=\\W)",relevance:0},{b:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",a={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,a]},{b:/[:\(,=]\s*/,relevance:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[a]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,relevance:0}])}});hljs.registerLanguage("r",function(e){var r="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[e.HCM,{b:r,l:r,k:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{b:"`",e:"`",relevance:0},{cN:"string",c:[e.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}});hljs.registerLanguage("autohotkey",function(e){var a={b:"`[\\s\\S]"};return{cI:!0,aliases:["ahk"],k:{keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",literal:"true false NOT AND OR",built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},c:[a,e.inherit(e.QSM,{c:[a]}),e.C(";","$",{relevance:0}),e.CBCM,{cN:"number",b:e.NR,relevance:0},{cN:"variable",b:"%[a-zA-Z0-9#_$@]+%"},{cN:"built_in",b:"^\\s*\\w+\\s*(,|%)"},{cN:"title",v:[{b:'^[^\\n";]+::(?!=)'},{b:'^[^\\n";]+:(?!=)',relevance:0}]},{cN:"meta",b:"^\\s*#\\w+",e:"$",relevance:0},{cN:"built_in",b:"A_[a-zA-Z0-9]+"},{b:",\\s*,"}]}});hljs.registerLanguage("elixir",function(e){var b="[a-zA-Z_][a-zA-Z0-9_.]*(\\!|\\?)?",c="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0",n={cN:"subst",b:"#\\{",e:"}",l:b,k:c},r="[/|([{<\"']",a={cN:"string",b:"~[a-z](?="+r+")",c:[{endsParent:!0,c:[{c:[e.BE,n],v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/\//,e:/\//},{b:/\|/,e:/\|/},{b:/\(/,e:/\)/},{b:/\[/,e:/\]/},{b:/\{/,e:/\}/},{b://}]}]}]},i={cN:"string",b:"~[A-Z](?="+r+")",c:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/\//,e:/\//},{b:/\|/,e:/\|/},{b:/\(/,e:/\)/},{b:/\[/,e:/\]/},{b:/\{/,e:/\}/},{b:/\/}]},l={cN:"string",c:[e.BE,n],v:[{b:/"""/,e:/"""/},{b:/'''/,e:/'''/},{b:/~S"""/,e:/"""/,c:[]},{b:/~S"/,e:/"/,c:[]},{b:/~S'''/,e:/'''/,c:[]},{b:/~S'/,e:/'/,c:[]},{b:/'/,e:/'/},{b:/"/,e:/"/}]},s={cN:"function",bK:"def defp defmacro",e:/\B\b/,c:[e.inherit(e.TM,{b:b,endsParent:!0})]},t=e.inherit(s,{cN:"class",bK:"defimpl defmodule defprotocol defrecord",e:/\bdo\b|$|;/}),d=[l,i,a,e.HCM,t,s,{b:"::"},{cN:"symbol",b:":(?![\\s:])",c:[l,{b:"[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{cN:"symbol",b:b+":(?!:)",relevance:0},{cN:"number",b:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"->"},{b:"("+e.RSR+")\\s*",c:[e.HCM,{cN:"regexp",i:"\\n",c:[e.BE,n],v:[{b:"/",e:"/[a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],relevance:0}];return{l:b,k:c,c:n.c=d}});hljs.registerLanguage("gradle",function(e){return{cI:!0,k:{keyword:"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine"},c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.NM,e.RM]}});hljs.registerLanguage("css",function(e){var c={b:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM,e.CSSNM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$",c:[e.ASM,e.QSM]},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(page|font-face)",l:"@[a-z-]+",k:"@page @font-face"},{b:"@",e:"[{;]",i:/:/,rB:!0,c:[{cN:"keyword",b:/@\-?\w[\w]*(\-\w+)*/},{b:/\s/,eW:!0,eE:!0,relevance:0,k:"and or not only",c:[{b:/[a-z-]+:/,cN:"attribute"},e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,c]}]}}); diff --git a/plugins/tiddlywiki/highlight-legacy/files/tiddlywiki.files b/plugins/tiddlywiki/highlight-legacy/files/tiddlywiki.files deleted file mode 100644 index 4c86e5c194..0000000000 --- a/plugins/tiddlywiki/highlight-legacy/files/tiddlywiki.files +++ /dev/null @@ -1,22 +0,0 @@ -{ - "tiddlers": [ - { - "file": "highlight.pack.js", - "fields": { - "type": "application/javascript", - "title": "$:/plugins/tiddlywiki/highlight-legacy/highlight.js", - "module-type": "library" - }, - "prefix": "var hljs = require(\"$:/plugins/tiddlywiki/highlight-legacy/highlight.js\");\n", - "suffix": "\nexports.hljs = hljs;\n" - }, - { - "file": "default.css", - "fields": { - "type": "text/css", - "title": "$:/plugins/tiddlywiki/highlight-legacy/highlight.css", - "tags": "[[$:/tags/Stylesheet]]" - } - } - ] -} diff --git a/plugins/tiddlywiki/highlight-legacy/highlightblock.js b/plugins/tiddlywiki/highlight-legacy/highlightblock.js deleted file mode 100644 index 9e295d013d..0000000000 --- a/plugins/tiddlywiki/highlight-legacy/highlightblock.js +++ /dev/null @@ -1,38 +0,0 @@ -/*\ -title: $:/plugins/tiddlywiki/highlight-legacy/highlightblock.js -type: application/javascript -module-type: widget - -Wraps up the fenced code blocks parser for highlight and use in TiddlyWiki5 - -\*/ -"use strict"; -var TYPE_MAPPINGS_BASE = "$:/config/HighlightPlugin/TypeMappings/"; - -var CodeBlockWidget = require("$:/core/modules/widgets/codeblock.js").codeblock; - -var hljs = require("$:/plugins/tiddlywiki/highlight-legacy/highlight.js"); - -hljs.configure({tabReplace: " "}); - -CodeBlockWidget.prototype.postRender = function() { - var domNode = this.domNodes[0], - language = this.language, - tiddler = this.wiki.getTiddler(TYPE_MAPPINGS_BASE + language); - if(tiddler) { - language = tiddler.fields.text || ""; - } - if(language && hljs.getLanguage(language)) { - domNode.className = language.toLowerCase() + " hljs"; - if($tw.browser && !domNode.isTiddlyWikiFakeDom) { - hljs.highlightBlock(domNode); - } else { - var text = domNode.textContent; - domNode.children[0].innerHTML = hljs.fixMarkup(hljs.highlight(language,text).value); - // If we're using the fakedom then specially save the original raw text - if(domNode.isTiddlyWikiFakeDom) { - domNode.children[0].textInnerHTML = text; - } - } - } -}; diff --git a/plugins/tiddlywiki/highlight-legacy/license.tid b/plugins/tiddlywiki/highlight-legacy/license.tid deleted file mode 100644 index 838320119b..0000000000 --- a/plugins/tiddlywiki/highlight-legacy/license.tid +++ /dev/null @@ -1,27 +0,0 @@ -title: $:/plugins/tiddlywiki/highlight-legacy/license -type: text/plain - -Copyright (c) 2006, Ivan Sagalaev -All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of highlight.js nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugins/tiddlywiki/highlight-legacy/plugin.info b/plugins/tiddlywiki/highlight-legacy/plugin.info deleted file mode 100644 index 7a911b1751..0000000000 --- a/plugins/tiddlywiki/highlight-legacy/plugin.info +++ /dev/null @@ -1,8 +0,0 @@ -{ - "title": "$:/plugins/tiddlywiki/highlight-legacy", - "name": "Highlight (Legacy)", - "description": "Highlight.js syntax highlighting for legacy browsers", - "author": "Joao Bolila", - "list": "readme usage license", - "stability": "STABILITY_3_LEGACY" -} diff --git a/plugins/tiddlywiki/highlight-legacy/readme.tid b/plugins/tiddlywiki/highlight-legacy/readme.tid deleted file mode 100644 index 04baa50d47..0000000000 --- a/plugins/tiddlywiki/highlight-legacy/readme.tid +++ /dev/null @@ -1,65 +0,0 @@ -title: $:/plugins/tiddlywiki/highlight-legacy/readme - -This plugin provides syntax highlighting of code blocks using v9.18.1 of [[highlight.js|https://github.com/isagalaev/highlight.js]] from Ivan Sagalaev. This legacy version should be installed in place of the regular Highlight plugin when you require your wiki to be opened in browsers that do not fully support <$text text="JavaScript"/> ES6 (2015). Here's a [[ES6 compatibility table|https://caniuse.com/?search=es6]]. - -! Built-in Language Brushes - -The plugin includes support for the following languages (referred to as "brushes" by highlight.js): - -* apache -* arduino -* arm assembly -* asciidoc -* autohotkey -* awk -* bash -* cmake -* coffeescript -* cpp -* cs -* css -* diff -* dockerfile -* erlang -* elixir -* fortran -* go -* gradle -* haskell -* html -* http -* ini -* intel x86 assembly -* java -* javascript -* json -* kotlin -* less -* lua -* makefile -* markdown -* mathematica -* matlab -* nginx -* objectivec -* perl -* php -* plaintext -* powershell -* properties -* python -* R -* ruby -* rust -* scss -* shell session -* sql -* swift -* toml -* typescript -* vala -* vim script -* xml -* yaml - -The mapping between a MIME type and a highlight.js language specifier is accomplished via mapping tiddlers whose titles start with `$:/config/HighlightPlugin/TypeMappings/`. diff --git a/plugins/tiddlywiki/highlight-legacy/styles.tid b/plugins/tiddlywiki/highlight-legacy/styles.tid deleted file mode 100644 index 21368811e6..0000000000 --- a/plugins/tiddlywiki/highlight-legacy/styles.tid +++ /dev/null @@ -1,82 +0,0 @@ -title: $:/plugins/tiddlywiki/highlight-legacy/styles -tags: [[$:/tags/Stylesheet]] - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - background: <>; - color: <>; - -webkit-text-size-adjust:none -} - -.hljs-comment, -.hljs-quote { - color: #93a1a1; -} - -/* Solarized Green */ -.hljs-keyword, -.hljs-selector-tag, -.hljs-addition { - color: #859900; -} - -/* Solarized Cyan */ -.hljs-number, -.hljs-string, -.hljs-meta .hljs-meta-string, -.hljs-literal, -.hljs-doctag, -.hljs-regexp { - color: #2aa198; -} - -/* Solarized Blue */ -.hljs-title, -.hljs-section, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #268bd2; -} - -/* Solarized Yellow */ -.hljs-attribute, -.hljs-attr, -.hljs-variable, -.hljs-template-variable, -.hljs-class .hljs-title, -.hljs-type { - color: #b58900; -} - -/* Solarized Orange */ -.hljs-symbol, -.hljs-bullet, -.hljs-subst, -.hljs-meta, -.hljs-meta .hljs-keyword, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-link { - color: #cb4b16; -} - -/* Solarized Red */ -.hljs-built_in, -.hljs-deletion { - color: #dc322f; -} - -.hljs-formula { - background: #eee8d5; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} diff --git a/plugins/tiddlywiki/highlight-legacy/usage.tid b/plugins/tiddlywiki/highlight-legacy/usage.tid deleted file mode 100644 index b2693661f3..0000000000 --- a/plugins/tiddlywiki/highlight-legacy/usage.tid +++ /dev/null @@ -1,28 +0,0 @@ -title: $:/plugins/tiddlywiki/highlight-legacy/usage - -! Usage - -Syntax highlighting is triggered when you add language information to code blocks defined with triple backticks or with the `<$codeblock>` widget. For fenced code blocks, specify the code's language immediately after the first set of backticks: - -``` - ```js - var a = b + c; // Highlighted as JavaScript - ``` -``` - -! Adding Themes - -You can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet]]. The available themes can be found on GitHub: - -https://github.com/isagalaev/highlight.js/tree/master/src/styles - -! Supporting Additional Languages - -The [[highlight.js|https://github.com/highlightjs/highlight.js]] project supports many languages. Only a subset of these languages are supported by the plugin. It is possible for users to change the set of languages supported by the plugin by following these steps: - -(Requires ~TiddlyWiki on Node.js) - -# Go to the highlight.js project [[download page|https://highlightjs.org/download/]], select the language definitions to include, and press the Download button to download a zip archive containing customised support files for a highlight.js syntax highlighting server. -# Locate the `highlight.pack.js` file in the highlight plugin -- on a stock Debian 8 system running Tiddlywiki5 under node-js, it is in `/usr/local/lib/node_modules/tiddlywiki/plugins/tiddlywiki/highlight/files/`. -# Replace the plugin `highlight.pack.js` file located in step 2 with the one from the downloaded archive obtained in step 1. -# Restart the ~TiddlyWiki server. diff --git a/plugins/tiddlywiki/highlight/files/highlight.min.js b/plugins/tiddlywiki/highlight/files/highlight.min.js index 9b234e118b..6e1a09e6eb 100644 --- a/plugins/tiddlywiki/highlight/files/highlight.min.js +++ b/plugins/tiddlywiki/highlight/files/highlight.min.js @@ -1,376 +1,745 @@ /*! - Highlight.js v11.4.0 (git: 2d0e7c1094) - (c) 2006-2022 Ivan Sagalaev and other contributors + Highlight.js v11.11.1 (git: 08cb242e7d) + (c) 2006-2024 Josh Goebel and other contributors License: BSD-3-Clause */ -var hljs=function(){"use strict";var e={exports:{}};function t(e){ -return e instanceof Map?e.clear=e.delete=e.set=()=>{ -throw Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=()=>{ +var hljs=function(){"use strict";function e(n){ +return n instanceof Map?n.clear=n.delete=n.set=()=>{ +throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{ throw Error("set is read-only") -}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((n=>{var i=e[n] -;"object"!=typeof i||Object.isFrozen(i)||t(i)})),e} -e.exports=t,e.exports.default=t;var n=e.exports;class i{constructor(e){ +}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{ +const a=n[t],i=typeof a;"object"!==i&&"function"!==i||Object.isFrozen(a)||e(a) +})),n}class n{constructor(e){ void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} -ignoreMatch(){this.isMatchIgnored=!0}}function r(e){ +ignoreMatch(){this.isMatchIgnored=!0}}function t(e){ return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") -}function s(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t] -;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const o=e=>!!e.kind -;class a{constructor(e,t){ -this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){ -this.buffer+=r(e)}openNode(e){if(!o(e))return;let t=e.kind -;t=e.sublanguage?"language-"+t:((e,{prefix:t})=>{if(e.includes(".")){ -const n=e.split(".") -;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ") -}return`${t}${e}`})(t,{prefix:this.classPrefix}),this.span(t)}closeNode(e){ -o(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ -this.buffer+=``}}class c{constructor(){this.rootNode={ -children:[]},this.stack=[this.rootNode]}get top(){ +}function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n] +;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const i=e=>!!e.scope +;class r{constructor(e,n){ +this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){ +this.buffer+=t(e)}openNode(e){if(!i(e))return;const n=((e,{prefix:n})=>{ +if(e.startsWith("language:"))return e.replace("language:","language-") +;if(e.includes(".")){const t=e.split(".") +;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ") +}return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)} +closeNode(e){i(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ +this.buffer+=``}}const s=(e={})=>{const n={children:[]} +;return Object.assign(n,e),n};class o{constructor(){ +this.rootNode=s(),this.stack=[this.rootNode]}get top(){ return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ -this.top.children.push(e)}openNode(e){const t={kind:e,children:[]} -;this.add(t),this.stack.push(t)}closeNode(){ +this.top.children.push(e)}openNode(e){const n=s({scope:e}) +;this.add(n),this.stack.push(n)}closeNode(){ if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} -walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){ -return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t), -t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){ +walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){ +return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n), +n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){ "string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ -c._collapse(e)})))}}class l extends c{constructor(e){super(),this.options=e} -addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())} -addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root -;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){ -return new a(this,this.options).value()}finalize(){return!0}}function g(e){ -return e?"string"==typeof e?e:e.source:null}function d(e){return f("(?=",e,")")} -function u(e){return f("(?:",e,")*")}function h(e){return f("(?:",e,")?")} -function f(...e){return e.map((e=>g(e))).join("")}function p(...e){const t=(e=>{ -const t=e[e.length-1] -;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{} -})(e);return"("+(t.capture?"":"?:")+e.map((e=>g(e))).join("|")+")"} -function b(e){return RegExp(e.toString()+"|").exec("").length-1} -const m=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ -;function E(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n -;let i=g(e),r="";for(;i.length>0;){const e=m.exec(i);if(!e){r+=i;break} -r+=i.substring(0,e.index), -i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?r+="\\"+(Number(e[1])+t):(r+=e[0], -"("===e[0]&&n++)}return r})).map((e=>`(${e})`)).join(t)} -const x="[a-zA-Z]\\w*",w="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",_="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",v="\\b(0b[01]+)",k={ -begin:"\\\\[\\s\\S]",relevance:0},O={scope:"string",begin:"'",end:"'", -illegal:"\\n",contains:[k]},N={scope:"string",begin:'"',end:'"',illegal:"\\n", -contains:[k]},M=(e,t,n={})=>{const i=s({scope:"comment",begin:e,end:t, -contains:[]},n);i.contains.push({scope:"doctag", +o._collapse(e)})))}}class l extends o{constructor(e){super(),this.options=e} +addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ +this.closeNode()}__addSublanguage(e,n){const t=e.root +;n&&(t.scope="language:"+n),this.add(t)}toHTML(){ +return new r(this,this.options).value()}finalize(){ +return this.closeAllNodes(),!0}}function c(e){ +return e?"string"==typeof e?e:e.source:null}function d(e){return b("(?=",e,")")} +function g(e){return b("(?:",e,")*")}function u(e){return b("(?:",e,")?")} +function b(...e){return e.map((e=>c(e))).join("")}function m(...e){const n=(e=>{ +const n=e[e.length-1] +;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} +})(e);return"("+(n.capture?"":"?:")+e.map((e=>c(e))).join("|")+")"} +function p(e){return RegExp(e.toString()+"|").exec("").length-1} +const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ +;function h(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t +;let a=c(e),i="";for(;a.length>0;){const e=_.exec(a);if(!e){i+=a;break} +i+=a.substring(0,e.index), +a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+(Number(e[1])+n):(i+=e[0], +"("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)} +const f="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",w="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",v="\\b(0b[01]+)",N={ +begin:"\\\\[\\s\\S]",relevance:0},k={scope:"string",begin:"'",end:"'", +illegal:"\\n",contains:[N]},x={scope:"string",begin:'"',end:'"',illegal:"\\n", +contains:[N]},O=(e,n,t={})=>{const i=a({scope:"comment",begin:e,end:n, +contains:[]},t);i.contains.push({scope:"doctag", begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) -;const r=p("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) -;return i.contains.push({begin:f(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i -},S=M("//","$"),R=M("/\\*","\\*/"),j=M("#","$");var A=Object.freeze({ -__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:x,UNDERSCORE_IDENT_RE:w, -NUMBER_RE:y,C_NUMBER_RE:_,BINARY_NUMBER_RE:v, -RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", -SHEBANG:(e={})=>{const t=/^#![ ]*\// -;return e.binary&&(e.begin=f(t,/.*\b/,e.binary,/\b.*/)),s({scope:"meta",begin:t, -end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)}, -BACKSLASH_ESCAPE:k,APOS_STRING_MODE:O,QUOTE_STRING_MODE:N,PHRASAL_WORDS_MODE:{ +;const r=m("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) +;return i.contains.push({begin:b(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i +},M=O("//","$"),A=O("/\\*","\\*/"),S=O("#","$");var C=Object.freeze({ +__proto__:null,APOS_STRING_MODE:k,BACKSLASH_ESCAPE:N,BINARY_NUMBER_MODE:{ +scope:"number",begin:v,relevance:0},BINARY_NUMBER_RE:v,COMMENT:O, +C_BLOCK_COMMENT_MODE:A,C_LINE_COMMENT_MODE:M,C_NUMBER_MODE:{scope:"number", +begin:w,relevance:0},C_NUMBER_RE:w,END_SAME_AS_BEGIN:e=>Object.assign(e,{ +"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:S,IDENT_RE:f, +MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+E,relevance:0}, +NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y, +PHRASAL_WORDS_MODE:{ begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ -},COMMENT:M,C_LINE_COMMENT_MODE:S,C_BLOCK_COMMENT_MODE:R,HASH_COMMENT_MODE:j, -NUMBER_MODE:{scope:"number",begin:y,relevance:0},C_NUMBER_MODE:{scope:"number", -begin:_,relevance:0},BINARY_NUMBER_MODE:{scope:"number",begin:v,relevance:0}, -REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//, -end:/\/[gimuy]*/,illegal:/\n/,contains:[k,{begin:/\[/,end:/\]/,relevance:0, -contains:[k]}]}]},TITLE_MODE:{scope:"title",begin:x,relevance:0}, -UNDERSCORE_TITLE_MODE:{scope:"title",begin:w,relevance:0},METHOD_GUARD:{ -begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:e=>Object.assign(e,{ -"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{ -t.data._beginMatch!==e[1]&&t.ignoreMatch()}})});function I(e,t){ -"."===e.input[e.index-1]&&t.ignoreMatch()}function T(e,t){ -void 0!==e.className&&(e.scope=e.className,delete e.className)}function L(e,t){ -t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", -e.__beforeBegin=I,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, -void 0===e.relevance&&(e.relevance=0))}function B(e,t){ -Array.isArray(e.illegal)&&(e.illegal=p(...e.illegal))}function D(e,t){ +},QUOTE_STRING_MODE:x,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, +end:/\/[gimuy]*/,contains:[N,{begin:/\[/,end:/\]/,relevance:0,contains:[N]}]}, +RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", +SHEBANG:(e={})=>{const n=/^#![ ]*\// +;return e.binary&&(e.begin=b(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n, +end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)}, +TITLE_MODE:{scope:"title",begin:f,relevance:0},UNDERSCORE_IDENT_RE:E, +UNDERSCORE_TITLE_MODE:{scope:"title",begin:E,relevance:0}});function T(e,n){ +"."===e.input[e.index-1]&&n.ignoreMatch()}function R(e,n){ +void 0!==e.className&&(e.scope=e.className,delete e.className)}function D(e,n){ +n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", +e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, +void 0===e.relevance&&(e.relevance=0))}function I(e,n){ +Array.isArray(e.illegal)&&(e.illegal=m(...e.illegal))}function L(e,n){ if(e.match){ if(e.begin||e.end)throw Error("begin & end are not supported with match") -;e.begin=e.match,delete e.match}}function H(e,t){ -void 0===e.relevance&&(e.relevance=1)}const P=(e,t)=>{if(!e.beforeMatch)return +;e.begin=e.match,delete e.match}}function B(e,n){ +void 0===e.relevance&&(e.relevance=1)}const $=(e,n)=>{if(!e.beforeMatch)return ;if(e.starts)throw Error("beforeMatch cannot be used with starts") -;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t] -})),e.keywords=n.keywords,e.begin=f(n.beforeMatch,d(n.begin)),e.starts={ -relevance:0,contains:[Object.assign(n,{endsParent:!0})] -},e.relevance=0,delete n.beforeMatch -},C=["of","and","for","in","not","or","if","then","parent","list","value"] -;function $(e,t,n="keyword"){const i=Object.create(null) -;return"string"==typeof e?r(n,e.split(" ")):Array.isArray(e)?r(n,e):Object.keys(e).forEach((n=>{ -Object.assign(i,$(e[n],t,n))})),i;function r(e,n){ -t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|") -;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){ -return t?Number(t):(e=>C.includes(e.toLowerCase()))(e)?0:1}const z={},K=e=>{ -console.error(e)},W=(e,...t)=>{console.log("WARN: "+e,...t)},X=(e,t)=>{ -z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0) -},G=Error();function Z(e,t,{key:n}){let i=0;const r=e[n],s={},o={} -;for(let e=1;e<=t.length;e++)o[e+i]=r[e],s[e+i]=!0,i+=b(t[e-1]) -;e[n]=o,e[n]._emit=s,e[n]._multi=!0}function F(e){(e=>{ +;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n] +})),e.keywords=t.keywords,e.begin=b(t.beforeMatch,d(t.begin)),e.starts={ +relevance:0,contains:[Object.assign(t,{endsParent:!0})] +},e.relevance=0,delete t.beforeMatch +},F=["of","and","for","in","not","or","if","then","parent","list","value"] +;function z(e,n,t="keyword"){const a=Object.create(null) +;return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((t=>{ +Object.assign(a,z(e[t],n,t))})),a;function i(e,t){ +n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|") +;a[t[0]]=[e,j(t[0],t[1])]}))}}function j(e,n){ +return n?Number(n):(e=>F.includes(e.toLowerCase()))(e)?0:1}const U={},P=e=>{ +console.error(e)},K=(e,...n)=>{console.log("WARN: "+e,...n)},q=(e,n)=>{ +U[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),U[`${e}/${n}`]=!0) +},H=Error();function G(e,n,{key:t}){let a=0;const i=e[t],r={},s={} +;for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=p(n[e-1]) +;e[t]=s,e[t]._emit=r,e[t]._multi=!0}function Z(e){(e=>{ e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ _wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope }),(e=>{if(Array.isArray(e.begin)){ -if(e.skip||e.excludeBegin||e.returnBegin)throw K("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), -G -;if("object"!=typeof e.beginScope||null===e.beginScope)throw K("beginScope must be object"), -G;Z(e,e.begin,{key:"beginScope"}),e.begin=E(e.begin,{joinWith:""})}})(e),(e=>{ +if(e.skip||e.excludeBegin||e.returnBegin)throw P("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), +H +;if("object"!=typeof e.beginScope||null===e.beginScope)throw P("beginScope must be object"), +H;G(e,e.begin,{key:"beginScope"}),e.begin=h(e.begin,{joinWith:""})}})(e),(e=>{ if(Array.isArray(e.end)){ -if(e.skip||e.excludeEnd||e.returnEnd)throw K("skip, excludeEnd, returnEnd not compatible with endScope: {}"), -G -;if("object"!=typeof e.endScope||null===e.endScope)throw K("endScope must be object"), -G;Z(e,e.end,{key:"endScope"}),e.end=E(e.end,{joinWith:""})}})(e)}function V(e){ -function t(t,n){ -return RegExp(g(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":"")) -}class n{constructor(){ +if(e.skip||e.excludeEnd||e.returnEnd)throw P("skip, excludeEnd, returnEnd not compatible with endScope: {}"), +H +;if("object"!=typeof e.endScope||null===e.endScope)throw P("endScope must be object"), +H;G(e,e.end,{key:"endScope"}),e.end=h(e.end,{joinWith:""})}})(e)}function W(e){ +function n(n,t){ +return RegExp(c(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":"")) +}class t{constructor(){ this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} -addRule(e,t){ -t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]), -this.matchAt+=b(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) -;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(E(e,{joinWith:"|" +addRule(e,n){ +n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]), +this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) +;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(h(e,{joinWith:"|" }),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex -;const t=this.matcherRe.exec(e);if(!t)return null -;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n] -;return t.splice(0,n),Object.assign(t,i)}}class i{constructor(){ +;const n=this.matcherRe.exec(e);if(!n)return null +;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t] +;return n.splice(0,t),Object.assign(n,a)}}class i{constructor(){ this.rules=[],this.multiRegexes=[], this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ -if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n -;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))), -t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){ -return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){ -this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){ -const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex -;let n=t.exec(e) -;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{ -const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)} -return n&&(this.regexIndex+=n.position+1, -this.regexIndex===this.count&&this.considerAll()),n}} +if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t +;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))), +n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){ +return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){ +this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){ +const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex +;let t=n.exec(e) +;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{ +const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)} +return t&&(this.regexIndex+=t.position+1, +this.regexIndex===this.count&&this.considerAll()),t}} if(e.compilerExtensions||(e.compilerExtensions=[]), e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") -;return e.classNameAliases=s(e.classNameAliases||{}),function n(r,o){const a=r -;if(r.isCompiled)return a -;[T,D,F,P].forEach((e=>e(r,o))),e.compilerExtensions.forEach((e=>e(r,o))), -r.__beforeBegin=null,[L,B,H].forEach((e=>e(r,o))),r.isCompiled=!0;let c=null +;return e.classNameAliases=a(e.classNameAliases||{}),function t(r,s){const o=r +;if(r.isCompiled)return o +;[R,L,Z,$].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))), +r.__beforeBegin=null,[D,I,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null ;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords), -c=r.keywords.$pattern, -delete r.keywords.$pattern),c=c||/\w+/,r.keywords&&(r.keywords=$(r.keywords,e.case_insensitive)), -a.keywordPatternRe=t(c,!0), -o&&(r.begin||(r.begin=/\B|\b/),a.beginRe=t(a.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), -r.end&&(a.endRe=t(a.end)), -a.terminatorEnd=g(a.end)||"",r.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+=(r.end?"|":"")+o.terminatorEnd)), -r.illegal&&(a.illegalRe=t(r.illegal)), -r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>s(e,{ -variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?s(e,{ -starts:e.starts?s(e.starts):null -}):Object.isFrozen(e)?s(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{n(e,a) -})),r.starts&&n(r.starts,o),a.matcher=(e=>{const t=new i -;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin" -}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end" -}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){ -return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{ -constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}} -const Y=r,Q=s,ee=Symbol("nomatch");var te=(e=>{ -const t=Object.create(null),r=Object.create(null),s=[];let o=!0 -;const a="Could not find the language '{}', did you forget to load/include a language module?",c={ -disableAutodetect:!0,name:"Plain text",contains:[]};let g={ +l=r.keywords.$pattern, +delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=z(r.keywords,e.case_insensitive)), +o.keywordPatternRe=n(l,!0), +s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), +r.end&&(o.endRe=n(o.end)), +o.terminatorEnd=c(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)), +r.illegal&&(o.illegalRe=n(r.illegal)), +r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{ +variants:null},n)))),e.cachedVariants?e.cachedVariants:Q(e)?a(e,{ +starts:e.starts?a(e.starts):null +}):Object.isFrozen(e)?a(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{t(e,o) +})),r.starts&&t(r.starts,s),o.matcher=(e=>{const n=new i +;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin" +}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end" +}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function Q(e){ +return!!e&&(e.endsWithParent||Q(e.starts))}class X extends Error{ +constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}} +const V=t,J=a,Y=Symbol("nomatch"),ee=t=>{ +const a=Object.create(null),i=Object.create(null),r=[];let s=!0 +;const o="Could not find the language '{}', did you forget to load/include a language module?",c={ +disableAutodetect:!0,name:"Plain text",contains:[]};let p={ ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", -cssSelector:"pre code",languages:null,__emitter:l};function b(e){ -return g.noHighlightRe.test(e)}function m(e,t,n){let i="",r="" -;"object"==typeof t?(i=e, -n=t.ignoreIllegals,r=t.language):(X("10.7.0","highlight(lang, code, ...args) has been deprecated."), -X("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), -r=e,i=t),void 0===n&&(n=!0);const s={code:i,language:r};N("before:highlight",s) -;const o=s.result?s.result:E(s.language,s.code,n) -;return o.code=s.code,N("after:highlight",o),o}function E(e,n,r,s){ -const c=Object.create(null);function l(){if(!O.keywords)return void M.addText(S) -;let e=0;O.keywordPatternRe.lastIndex=0;let t=O.keywordPatternRe.exec(S),n="" -;for(;t;){n+=S.substring(e,t.index) -;const r=y.case_insensitive?t[0].toLowerCase():t[0],s=(i=r,O.keywords[i]);if(s){ -const[e,i]=s -;if(M.addText(n),n="",c[r]=(c[r]||0)+1,c[r]<=7&&(R+=i),e.startsWith("_"))n+=t[0];else{ -const n=y.classNameAliases[e]||e;M.addKeyword(t[0],n)}}else n+=t[0] -;e=O.keywordPatternRe.lastIndex,t=O.keywordPatternRe.exec(S)}var i -;n+=S.substr(e),M.addText(n)}function d(){null!=O.subLanguage?(()=>{ +cssSelector:"pre code",languages:null,__emitter:l};function _(e){ +return p.noHighlightRe.test(e)}function h(e,n,t){let a="",i="" +;"object"==typeof n?(a=e, +t=n.ignoreIllegals,i=n.language):(q("10.7.0","highlight(lang, code, ...args) has been deprecated."), +q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), +i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};O("before:highlight",r) +;const s=r.result?r.result:f(r.language,r.code,t) +;return s.code=r.code,O("after:highlight",s),s}function f(e,t,i,r){ +const l=Object.create(null);function c(){if(!O.keywords)return void A.addText(S) +;let e=0;O.keywordPatternRe.lastIndex=0;let n=O.keywordPatternRe.exec(S),t="" +;for(;n;){t+=S.substring(e,n.index) +;const i=v.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,O.keywords[a]);if(r){ +const[e,a]=r +;if(A.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(C+=a),e.startsWith("_"))t+=n[0];else{ +const t=v.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0] +;e=O.keywordPatternRe.lastIndex,n=O.keywordPatternRe.exec(S)}var a +;t+=S.substring(e),A.addText(t)}function d(){null!=O.subLanguage?(()=>{ if(""===S)return;let e=null;if("string"==typeof O.subLanguage){ -if(!t[O.subLanguage])return void M.addText(S) -;e=E(O.subLanguage,S,!0,N[O.subLanguage]),N[O.subLanguage]=e._top -}else e=x(S,O.subLanguage.length?O.subLanguage:null) -;O.relevance>0&&(R+=e.relevance),M.addSublanguage(e._emitter,e.language) -})():l(),S=""}function u(e,t){let n=1;for(;void 0!==t[n];){if(!e._emit[n]){n++ -;continue}const i=y.classNameAliases[e[n]]||e[n],r=t[n] -;i?M.addKeyword(r,i):(S=r,l(),S=""),n++}}function h(e,t){ -return e.scope&&"string"==typeof e.scope&&M.openNode(y.classNameAliases[e.scope]||e.scope), -e.beginScope&&(e.beginScope._wrap?(M.addKeyword(S,y.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), -S=""):e.beginScope._multi&&(u(e.beginScope,t),S="")),O=Object.create(e,{parent:{ -value:O}}),O}function f(e,t,n){let r=((e,t)=>{const n=e&&e.exec(t) -;return n&&0===n.index})(e.endRe,n);if(r){if(e["on:end"]){const n=new i(e) -;e["on:end"](t,n),n.isMatchIgnored&&(r=!1)}if(r){ +if(!a[O.subLanguage])return void A.addText(S) +;e=f(O.subLanguage,S,!0,M[O.subLanguage]),M[O.subLanguage]=e._top +}else e=E(S,O.subLanguage.length?O.subLanguage:null) +;O.relevance>0&&(C+=e.relevance),A.__addSublanguage(e._emitter,e.language) +})():c(),S=""}function g(e,n){ +""!==e&&(A.startScope(n),A.addText(e),A.endScope())}function u(e,n){let t=1 +;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue} +const a=v.classNameAliases[e[t]]||e[t],i=n[t];a?g(i,a):(S=i,c(),S=""),t++}} +function b(e,n){ +return e.scope&&"string"==typeof e.scope&&A.openNode(v.classNameAliases[e.scope]||e.scope), +e.beginScope&&(e.beginScope._wrap?(g(S,v.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), +S=""):e.beginScope._multi&&(u(e.beginScope,n),S="")),O=Object.create(e,{parent:{ +value:O}}),O}function m(e,t,a){let i=((e,n)=>{const t=e&&e.exec(n) +;return t&&0===t.index})(e.endRe,a);if(i){if(e["on:end"]){const a=new n(e) +;e["on:end"](t,a),a.isMatchIgnored&&(i=!1)}if(i){ for(;e.endsParent&&e.parent;)e=e.parent;return e}} -if(e.endsWithParent)return f(e.parent,t,n)}function p(e){ -return 0===O.matcher.regexIndex?(S+=e[0],1):(I=!0,0)}function b(e){ -const t=e[0],i=n.substr(e.index),r=f(O,e,i);if(!r)return ee;const s=O +if(e.endsWithParent)return m(e.parent,t,a)}function _(e){ +return 0===O.matcher.regexIndex?(S+=e[0],1):(D=!0,0)}function h(e){ +const n=e[0],a=t.substring(e.index),i=m(O,e,a);if(!i)return Y;const r=O ;O.endScope&&O.endScope._wrap?(d(), -M.addKeyword(t,O.endScope._wrap)):O.endScope&&O.endScope._multi?(d(), -u(O.endScope,e)):s.skip?S+=t:(s.returnEnd||s.excludeEnd||(S+=t), -d(),s.excludeEnd&&(S=t));do{ -O.scope&&M.closeNode(),O.skip||O.subLanguage||(R+=O.relevance),O=O.parent -}while(O!==r.parent);return r.starts&&h(r.starts,e),s.returnEnd?0:t.length} -let m={};function w(t,s){const a=s&&s[0];if(S+=t,null==a)return d(),0 -;if("begin"===m.type&&"end"===s.type&&m.index===s.index&&""===a){ -if(S+=n.slice(s.index,s.index+1),!o){const t=Error(`0 width match regex (${e})`) -;throw t.languageName=e,t.badRule=m.rule,t}return 1} -if(m=s,"begin"===s.type)return(e=>{ -const t=e[0],n=e.rule,r=new i(n),s=[n.__beforeBegin,n["on:begin"]] -;for(const n of s)if(n&&(n(e,r),r.isMatchIgnored))return p(t) -;return n.skip?S+=t:(n.excludeBegin&&(S+=t), -d(),n.returnBegin||n.excludeBegin||(S=t)),h(n,e),n.returnBegin?0:t.length})(s) -;if("illegal"===s.type&&!r){ -const e=Error('Illegal lexeme "'+a+'" for mode "'+(O.scope||"")+'"') -;throw e.mode=O,e}if("end"===s.type){const e=b(s);if(e!==ee)return e} -if("illegal"===s.type&&""===a)return 1 -;if(A>1e5&&A>3*s.index)throw Error("potential infinite loop, way more iterations than matches") -;return S+=a,a.length}const y=v(e) -;if(!y)throw K(a.replace("{}",e)),Error('Unknown language: "'+e+'"') -;const _=V(y);let k="",O=s||_;const N={},M=new g.__emitter(g);(()=>{const e=[] -;for(let t=O;t!==y;t=t.parent)t.scope&&e.unshift(t.scope) -;e.forEach((e=>M.openNode(e)))})();let S="",R=0,j=0,A=0,I=!1;try{ -for(O.matcher.considerAll();;){ -A++,I?I=!1:O.matcher.considerAll(),O.matcher.lastIndex=j -;const e=O.matcher.exec(n);if(!e)break;const t=w(n.substring(j,e.index),e) -;j=e.index+t}return w(n.substr(j)),M.closeAllNodes(),M.finalize(),k=M.toHTML(),{ -language:e,value:k,relevance:R,illegal:!1,_emitter:M,_top:O}}catch(t){ -if(t.message&&t.message.includes("Illegal"))return{language:e,value:Y(n), -illegal:!0,relevance:0,_illegalBy:{message:t.message,index:j, -context:n.slice(j-100,j+100),mode:t.mode,resultSoFar:k},_emitter:M};if(o)return{ -language:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:O} -;throw t}}function x(e,n){n=n||g.languages||Object.keys(t);const i=(e=>{ -const t={value:Y(e),illegal:!1,relevance:0,_top:c,_emitter:new g.__emitter(g)} -;return t._emitter.addText(e),t})(e),r=n.filter(v).filter(O).map((t=>E(t,e,!1))) -;r.unshift(i);const s=r.sort(((e,t)=>{ -if(e.relevance!==t.relevance)return t.relevance-e.relevance -;if(e.language&&t.language){if(v(e.language).supersetOf===t.language)return 1 -;if(v(t.language).supersetOf===e.language)return-1}return 0})),[o,a]=s,l=o -;return l.secondBest=a,l}function w(e){let t=null;const n=(e=>{ -let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"" -;const n=g.languageDetectRe.exec(t);if(n){const t=v(n[1]) -;return t||(W(a.replace("{}",n[1])), -W("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"} -return t.split(/\s+/).find((e=>b(e)||v(e)))})(e);if(b(n))return -;if(N("before:highlightElement",{el:e,language:n -}),e.children.length>0&&(g.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), +g(n,O.endScope._wrap)):O.endScope&&O.endScope._multi?(d(), +u(O.endScope,e)):r.skip?S+=n:(r.returnEnd||r.excludeEnd||(S+=n), +d(),r.excludeEnd&&(S=n));do{ +O.scope&&A.closeNode(),O.skip||O.subLanguage||(C+=O.relevance),O=O.parent +}while(O!==i.parent);return i.starts&&b(i.starts,e),r.returnEnd?0:n.length} +let y={};function w(a,r){const o=r&&r[0];if(S+=a,null==o)return d(),0 +;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===o){ +if(S+=t.slice(r.index,r.index+1),!s){const n=Error(`0 width match regex (${e})`) +;throw n.languageName=e,n.badRule=y.rule,n}return 1} +if(y=r,"begin"===r.type)return(e=>{ +const t=e[0],a=e.rule,i=new n(a),r=[a.__beforeBegin,a["on:begin"]] +;for(const n of r)if(n&&(n(e,i),i.isMatchIgnored))return _(t) +;return a.skip?S+=t:(a.excludeBegin&&(S+=t), +d(),a.returnBegin||a.excludeBegin||(S=t)),b(a,e),a.returnBegin?0:t.length})(r) +;if("illegal"===r.type&&!i){ +const e=Error('Illegal lexeme "'+o+'" for mode "'+(O.scope||"")+'"') +;throw e.mode=O,e}if("end"===r.type){const e=h(r);if(e!==Y)return e} +if("illegal"===r.type&&""===o)return S+="\n",1 +;if(R>1e5&&R>3*r.index)throw Error("potential infinite loop, way more iterations than matches") +;return S+=o,o.length}const v=N(e) +;if(!v)throw P(o.replace("{}",e)),Error('Unknown language: "'+e+'"') +;const k=W(v);let x="",O=r||k;const M={},A=new p.__emitter(p);(()=>{const e=[] +;for(let n=O;n!==v;n=n.parent)n.scope&&e.unshift(n.scope) +;e.forEach((e=>A.openNode(e)))})();let S="",C=0,T=0,R=0,D=!1;try{ +if(v.__emitTokens)v.__emitTokens(t,A);else{for(O.matcher.considerAll();;){ +R++,D?D=!1:O.matcher.considerAll(),O.matcher.lastIndex=T +;const e=O.matcher.exec(t);if(!e)break;const n=w(t.substring(T,e.index),e) +;T=e.index+n}w(t.substring(T))}return A.finalize(),x=A.toHTML(),{language:e, +value:x,relevance:C,illegal:!1,_emitter:A,_top:O}}catch(n){ +if(n.message&&n.message.includes("Illegal"))return{language:e,value:V(t), +illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T, +context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:x},_emitter:A};if(s)return{ +language:e,value:V(t),illegal:!1,relevance:0,errorRaised:n,_emitter:A,_top:O} +;throw n}}function E(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{ +const n={value:V(e),illegal:!1,relevance:0,_top:c,_emitter:new p.__emitter(p)} +;return n._emitter.addText(e),n})(e),i=n.filter(N).filter(x).map((n=>f(n,e,!1))) +;i.unshift(t);const r=i.sort(((e,n)=>{ +if(e.relevance!==n.relevance)return n.relevance-e.relevance +;if(e.language&&n.language){if(N(e.language).supersetOf===n.language)return 1 +;if(N(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,l=s +;return l.secondBest=o,l}function y(e){let n=null;const t=(e=>{ +let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"" +;const t=p.languageDetectRe.exec(n);if(t){const n=N(t[1]) +;return n||(K(o.replace("{}",t[1])), +K("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"} +return n.split(/\s+/).find((e=>_(e)||N(e)))})(e);if(_(t))return +;if(O("before:highlightElement",{el:e,language:t +}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) +;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), console.warn("The element with unescaped HTML:"), -console.warn(e)),g.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML) -;t=e;const i=t.textContent,s=n?m(i,{language:n,ignoreIllegals:!0}):x(i) -;e.innerHTML=s.value,((e,t,n)=>{const i=t&&r[t]||n -;e.classList.add("hljs"),e.classList.add("language-"+i) -})(e,n,s.language),e.result={language:s.language,re:s.relevance, -relevance:s.relevance},s.secondBest&&(e.secondBest={ -language:s.secondBest.language,relevance:s.secondBest.relevance -}),N("after:highlightElement",{el:e,result:s,text:i})}let y=!1;function _(){ -"loading"!==document.readyState?document.querySelectorAll(g.cssSelector).forEach(w):y=!0 -}function v(e){return e=(e||"").toLowerCase(),t[e]||t[r[e]]} -function k(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ -r[e.toLowerCase()]=t}))}function O(e){const t=v(e) -;return t&&!t.disableAutodetect}function N(e,t){const n=e;s.forEach((e=>{ -e[n]&&e[n](t)}))} -"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{ -y&&_()}),!1),Object.assign(e,{highlight:m,highlightAuto:x,highlightAll:_, -highlightElement:w, -highlightBlock:e=>(X("10.7.0","highlightBlock will be removed entirely in v12.0"), -X("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{g=Q(g,e)}, +console.warn(e)),p.throwUnescapedHTML))throw new X("One of your code blocks includes unescaped HTML.",e.innerHTML) +;n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):E(a) +;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&i[n]||t +;e.classList.add("hljs"),e.classList.add("language-"+a) +})(e,t,r.language),e.result={language:r.language,re:r.relevance, +relevance:r.relevance},r.secondBest&&(e.secondBest={ +language:r.secondBest.language,relevance:r.secondBest.relevance +}),O("after:highlightElement",{el:e,result:r,text:a})}let w=!1;function v(){ +if("loading"===document.readyState)return w||window.addEventListener("DOMContentLoaded",(()=>{ +v()}),!1),void(w=!0);document.querySelectorAll(p.cssSelector).forEach(y)} +function N(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]} +function k(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ +i[e.toLowerCase()]=n}))}function x(e){const n=N(e) +;return n&&!n.disableAutodetect}function O(e,n){const t=e;r.forEach((e=>{ +e[t]&&e[t](n)}))}Object.assign(t,{highlight:h,highlightAuto:E,highlightAll:v, +highlightElement:y, +highlightBlock:e=>(q("10.7.0","highlightBlock will be removed entirely in v12.0"), +q("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=J(p,e)}, initHighlighting:()=>{ -_(),X("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, +v(),q("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, initHighlightingOnLoad:()=>{ -_(),X("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") -},registerLanguage:(n,i)=>{let r=null;try{r=i(e)}catch(e){ -if(K("Language definition for '{}' could not be registered.".replace("{}",n)), -!o)throw e;K(e),r=c} -r.name||(r.name=n),t[n]=r,r.rawDefinition=i.bind(null,e),r.aliases&&k(r.aliases,{ -languageName:n})},unregisterLanguage:e=>{delete t[e] -;for(const t of Object.keys(r))r[t]===e&&delete r[t]}, -listLanguages:()=>Object.keys(t),getLanguage:v,registerAliases:k, -autoDetection:O,inherit:Q,addPlugin:e=>{(e=>{ -e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{ -e["before:highlightBlock"](Object.assign({block:t.el},t)) -}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{ -e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),s.push(e)} -}),e.debugMode=()=>{o=!1},e.safeMode=()=>{o=!0 -},e.versionString="11.4.0",e.regex={concat:f,lookahead:d,either:p,optional:h, -anyNumberOfTimes:u};for(const e in A)"object"==typeof A[e]&&n(A[e]) -;return Object.assign(e,A),e})({});return te}() -;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `c` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n=e.regex,t=e.COMMENT("//","$",{ -contains:[{begin:/\\\n/}] -}),s="[a-zA-Z_]\\w*::",a="(decltype\\(auto\\)|"+n.optional(s)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",r={ +v(),q("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") +},registerLanguage:(e,n)=>{let i=null;try{i=n(t)}catch(n){ +if(P("Language definition for '{}' could not be registered.".replace("{}",e)), +!s)throw n;P(n),i=c} +i.name||(i.name=e),a[e]=i,i.rawDefinition=n.bind(null,t),i.aliases&&k(i.aliases,{ +languageName:e})},unregisterLanguage:e=>{delete a[e] +;for(const n of Object.keys(i))i[n]===e&&delete i[n]}, +listLanguages:()=>Object.keys(a),getLanguage:N,registerAliases:k, +autoDetection:x,inherit:J,addPlugin:e=>{(e=>{ +e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{ +e["before:highlightBlock"](Object.assign({block:n.el},n)) +}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{ +e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)}, +removePlugin:e=>{const n=r.indexOf(e);-1!==n&&r.splice(n,1)}}),t.debugMode=()=>{ +s=!1},t.safeMode=()=>{s=!0},t.versionString="11.11.1",t.regex={concat:b, +lookahead:d,either:m,optional:u,anyNumberOfTimes:g} +;for(const n in C)"object"==typeof C[n]&&e(C[n]);return Object.assign(t,C),t +},ne=ee({});ne.newInstance=()=>ee({});const te=e=>({IMPORTANT:{scope:"meta", +begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{ +scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/}, +FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/}, +ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", +contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ +scope:"number", +begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", +relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} +}),ae=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],ie=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),re=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),se=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),oe=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse(),le=re.concat(se).sort().reverse() +;var ce="[0-9](_*[0-9])*",de=`\\.(${ce})`,ge="[0-9a-fA-F](_*[0-9a-fA-F])*",ue={ +className:"number",variants:[{ +begin:`(\\b(${ce})((${de})|\\.)?|(${de}))[eE][+-]?(${ce})[fFdD]?\\b`},{ +begin:`\\b(${ce})((${de})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ +begin:`(${de})[fFdD]?\\b`},{begin:`\\b(${ce})[fFdD]\\b`},{ +begin:`\\b0[xX]((${ge})\\.?|(${ge})?\\.(${ge}))[pP][+-]?(${ce})[fFdD]?\\b`},{ +begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${ge})[lL]?\\b`},{ +begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], +relevance:0};function be(e,n,t){return-1===t?"":e.replace(n,(a=>be(e,n,t-1)))} +const me="[A-Za-z$_][0-9A-Za-z$_]*",pe=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],_e=["true","false","null","undefined","NaN","Infinity"],he=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],fe=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Ee=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],ye=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],we=[].concat(Ee,he,fe) +;function ve(e){const n=e.regex,t=me,a={begin:/<[A-Za-z0-9\\._:-]+/, +end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ +const t=e[0].length+e.index,a=e.input[t] +;if("<"===a||","===a)return void n.ignoreMatch();let i +;">"===a&&(((e,{after:n})=>{const t="e+"\\s*\\(")), +n.concat("(?!",N.join("|"),")")),t,n.lookahead(/\s*\(/)), +className:"title.function",relevance:0};var N;const k={ +begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t, +excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},x={ +match:[/get|set/,/\s+/,t,/(?=\()/],className:{1:"keyword",3:"title.function"}, +contains:[{begin:/\(\)/},f] +},O="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",M={ +match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(O)], +keywords:"async",className:{1:"keyword",3:"title.function"},contains:[f]} +;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{ +PARAMS_CONTAINS:h,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/, +contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ +label:"use_strict",className:"meta",relevance:10, +begin:/^\s*['"]use (strict|asm)['"]/ +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,m,{match:/\$\d+/},l,y,{ +scope:"attr",match:t+n.lookahead(":"),relevance:0},M,{ +begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", +keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{ +className:"function",begin:O,returnBegin:!0,end:"\\s*=>",contains:[{ +className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{ +className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/, +excludeBegin:!0,excludeEnd:!0,keywords:i,contains:h}]}]},{begin:/,/,relevance:0 +},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:""},{ +match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin, +"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{ +begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},w,{ +beginKeywords:"while if switch catch for"},{ +begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", +returnBegin:!0,label:"func.def",contains:[f,e.inherit(e.TITLE_MODE,{begin:t, +className:"title.function"})]},{match:/\.\.\./,relevance:0},k,{match:"\\$"+t, +relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, +contains:[f]},v,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},E,x,{match:/\$[(.]/}]}} +const Ne=e=>b(/\b/,e,/\w$/.test(e)?/\b/:/\B/),ke=["Protocol","Type"].map(Ne),xe=["init","self"].map(Ne),Oe=["Any","Self"],Me=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],Ae=["false","nil","true"],Se=["assignment","associativity","higherThan","left","lowerThan","none","right"],Ce=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],Te=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Re=m(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),De=m(Re,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Ie=b(Re,De,"*"),Le=m(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),Be=m(Le,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),$e=b(Le,Be,"*"),Fe=b(/[A-Z]/,Be,"*"),ze=["attached","autoclosure",b(/convention\(/,m("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",b(/objc\(/,$e,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],je=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] +;var Ue=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={ +begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]} +;Object.assign(t,{className:"variable",variants:[{ +begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={ +className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE] +},r=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),s={ +begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, +end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(o);const l={begin:/\$?\(\(/, +end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] +},c=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 +}),d={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, +contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ +name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, +keyword:["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"], +literal:["true","false"], +built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] +},contains:[c,e.SHEBANG(),d,l,r,s,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{ +className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}},grmr_c:e=>{ +const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{ -match:/\batomic_[a-z]{3,6}\b/}]},i={className:"string",variants:[{ +match:/\batomic_[a-z]{3,6}\b/}]},o={className:"string",variants:[{ begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ -className:"number",variants:[{begin:"\\b(0b[01']+)"},{ -begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" +className:"number",variants:[{match:/\b(0b[01']+)/},{ +match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/ },{ -begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" -}],relevance:0},o={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ -keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" -},contains:[{begin:/\\\n/,relevance:0},e.inherit(i,{className:"string"}),{ -className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},c={ -className:"title",begin:n.optional(s)+e.IDENT_RE,relevance:0 -},d=n.optional(s)+e.IDENT_RE+"\\s*\\(",u={ -keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], -type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"], +match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/ +},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0 +},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], +type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"], literal:"true false NULL", built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr" -},g=[o,r,t,e.C_BLOCK_COMMENT_MODE,l,i],m={variants:[{begin:/=/,end:/;/},{ +},b=[c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],m={variants:[{begin:/=/,end:/;/},{ begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], -keywords:u,contains:g.concat([{begin:/\(/,end:/\)/,keywords:u, -contains:g.concat(["self"]),relevance:0}]),relevance:0},p={ -begin:"("+a+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, -keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)", -keywords:u,relevance:0},{begin:d,returnBegin:!0,contains:[e.inherit(c,{ -className:"title.function"})],relevance:0},{relevance:0,match:/,/},{ -className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0, -contains:[t,e.C_BLOCK_COMMENT_MODE,i,l,r,{begin:/\(/,end:/\)/,keywords:u, -relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,i,l,r]}] -},r,t,e.C_BLOCK_COMMENT_MODE,o]};return{name:"C",aliases:["h"],keywords:u, -disableAutodetect:!0,illegal:".]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})], +relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/, +keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/, +end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s] +}]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u, +disableAutodetect:!0,illegal:"=]/,contains:[{ -beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:o, -strings:i,keywords:u}}}})();hljs.registerLanguage("c",e)})();/*! `xml` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{ -const a=e.regex,n=a.concat(/[A-Z_]/,a.optional(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),s={ -className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},t={begin:/\s/, -contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] -},i=e.inherit(t,{begin:/\(/,end:/\)/}),c=e.inherit(e.APOS_STRING_MODE,{ -className:"string"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),r={ -endsWithParent:!0,illegal:/`]+/}]}]}]};return{ -name:"HTML, XML", -aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], -case_insensitive:!0,contains:[{className:"meta",begin://, -relevance:10,contains:[t,l,c,i,{begin:/\[/,end:/\]/,contains:[{className:"meta", -begin://,contains:[t,i,l,c]}]}]},e.COMMENT(//,{ -relevance:10}),{begin://,relevance:10},s,{ -className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag", -begin:/)/,end:/>/,keywords:{name:"style"},contains:[r],starts:{ -end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", -begin:/)/,end:/>/,keywords:{name:"script"},contains:[r],starts:{ -end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ -className:"tag",begin:/<>|<\/>/},{className:"tag", -begin:a.concat(//,/>/,/\s/)))), -end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:r}]},{ -className:"tag",begin:a.concat(/<\//,a.lookahead(a.concat(n,/>/))),contains:[{ -className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}} -})();hljs.registerLanguage("xml",e)})();/*! `markdown` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n={begin:/<\/?[A-Za-z_]/, -end:">",subLanguage:"xml",relevance:0},a={variants:[{begin:/\[.+?\]\[.*?\]/, -relevance:0},{ +beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c, +strings:o,keywords:u}}},grmr_cpp:e=>{const n=e.regex,t=e.COMMENT("//","$",{ +contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ +className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ +className:"number",variants:[{ +begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)" +},{ +begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)" +}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], +keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], +literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], +_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] +},b={className:"function.dispatch",relevance:0,keywords:{ +_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] +}, +begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/)) +},m=[b,c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],p={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u, +contains:m.concat(["self"]),relevance:0}]),relevance:0},_={className:"function", +begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{ +begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{ +className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0, +contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u, +relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}] +},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++", +aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",keywords:u,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:u},{ +match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], +className:{1:"keyword",3:"title.class"}}])}},grmr_csharp:e=>{const n={ +keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"]), +built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], +literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{ +begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{ +begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] +},r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/, +keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/, +end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ +},e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{ +begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/, +contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]}) +;s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE], +o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{ +illegal:/\n/})];const g={variants:[{className:"string", +begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1 +},c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},u={begin:"<",end:">", +contains:[{beginKeywords:"in out"},t] +},b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={ +begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], +keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, +contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ +begin:"\x3c!--|--\x3e"},{begin:""}]}] +}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", +end:"$",keywords:{ +keyword:"if else elif endif define undef warning error line region endregion pragma checksum" +}},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, +illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" +},t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", +relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", +begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ +className:"string",begin:/"/,end:/"/}]},{ +beginKeywords:"new return throw await else",relevance:0},{className:"function", +begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ +beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", +relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params", +begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, +contains:[g,a,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}},grmr_css:e=>{ +const n=e.regex,t=te(e),a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{ +name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{ +keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"}, +contains:[t.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/ +},t.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0 +},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 +},t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ +begin:":("+re.join("|")+")"},{begin:":(:)?("+se.join("|")+")"}] +},t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+oe.join("|")+")\\b"},{ +begin:/:/,end:/[;}{]/, +contains:[t.BLOCK_COMMENT,t.HEXCOLOR,t.IMPORTANT,t.CSS_NUMBER_MODE,...a,{ +begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" +},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0, +excludeEnd:!0}]},t.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]", +relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/ +},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ +$pattern:/[a-z-]+/,keyword:"and or not only",attribute:ie.join(" ")},contains:[{ +begin:/[a-z-]+(?=:)/,className:"attribute"},...a,t.CSS_NUMBER_MODE]}]},{ +className:"selector-tag",begin:"\\b("+ae.join("|")+")\\b"}]}},grmr_diff:e=>{ +const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{ +className:"meta",relevance:10, +match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) +},{className:"comment",variants:[{ +begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), +end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ +className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, +end:/$/}]}},grmr_go:e=>{const n={ +keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], +type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], +literal:["true","false","iota","nil"], +built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] +};return{name:"Go",aliases:["golang"],keywords:n,illegal:"{const n=e.regex +;return{name:"GraphQL",aliases:["gql"],case_insensitive:!0,disableAutodetect:!1, +keywords:{ +keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"], +literal:["true","false","null"]}, +contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{ +scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation", +begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/, +end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{ +scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)), +relevance:0}],illegal:[/[;<']/,/BEGIN/]}},grmr_ini:e=>{const n=e.regex,t={ +className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{ +begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/, +end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{ +begin:/\$\{(.*?)\}/}]},r={className:"literal", +begin:/\bon|off|true|false|yes|no\b/},s={className:"string", +contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{ +begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}] +},o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0 +},l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ +name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, +contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{ +begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)), +className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{ +const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+be("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={ +keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"], +literal:["false","true","null"], +type:["char","boolean","long","float","int","byte","short","double"], +built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{ +begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} +;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, +relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ +begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/, +className:"string",contains:[e.BACKSLASH_ESCAPE] +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ +match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{ +1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{ +begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type", +3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword", +3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"new throw return else",relevance:0},{ +begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ +2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0, +contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,ue,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},ue,r]}},grmr_javascript:ve, +grmr_json:e=>{const n=["true","false","null"],t={scope:"literal", +beginKeywords:n.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{ +literal:n},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/, +relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0 +},e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE], +illegal:"\\S"}},grmr_kotlin:e=>{const n={ +keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", +built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", +literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" +},a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={ +className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", +variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'", +illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, +contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(r);const s={ +className:"meta", +begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" +},o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, +end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}] +},l=ue,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={ +variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, +contains:[]}]},g=d;return g.variants[1].contains=[d],d.variants[1].contains=[g], +{name:"Kotlin",aliases:["kt","kts"],keywords:n, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", +begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword", +begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", +begin:/@\w+/}]}},t,s,o,{className:"function",beginKeywords:"fun",end:"[(]|$", +returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ +begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, +contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, +keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, +endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, +endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0 +},e.C_LINE_COMMENT_MODE,c,s,o,r,e.C_NUMBER_MODE]},c]},{ +begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{ +3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, +illegal:"extends implements",contains:[{ +beginKeywords:"public protected internal private constructor" +},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, +excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/, +excludeBegin:!0,returnEnd:!0},s,o]},r,{className:"meta",begin:"^#!/usr/bin/env", +end:"$",illegal:"\n"},l]}},grmr_less:e=>{ +const n=te(e),t=le,a="[\\w-]+",i="("+a+"|@\\{"+a+"\\})",r=[],s=[],o=e=>({ +className:"string",begin:"~?"+e+".*?"+e}),l=(e,n,t)=>({className:e,begin:n, +relevance:t}),c={$pattern:/[a-z-]+/,keyword:"and or not only", +attribute:ie.join(" ")},d={begin:"\\(",end:"\\)",contains:s,keywords:c, +relevance:0} +;s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o("'"),o('"'),n.CSS_NUMBER_MODE,{ +begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", +excludeEnd:!0} +},n.HEXCOLOR,d,l("variable","@@?"+a,10),l("variable","@\\{"+a+"\\}"),l("built_in","~?`[^`]*?`"),{ +className:"attribute",begin:a+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0 +},n.IMPORTANT,{beginKeywords:"and not"},n.FUNCTION_DISPATCH);const g=s.concat({ +begin:/\{/,end:/\}/,contains:r}),u={beginKeywords:"when",endsWithParent:!0, +contains:[{beginKeywords:"and not"}].concat(s)},b={begin:i+"\\s*:", +returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/ +},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+oe.join("|")+")\\b", +end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}] +},m={className:"keyword", +begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", +starts:{end:"[;{}]",keywords:c,returnEnd:!0,contains:s,relevance:0}},p={ +className:"variable",variants:[{begin:"@"+a+"\\s*:",relevance:15},{begin:"@"+a +}],starts:{end:"[;}]",returnEnd:!0,contains:g}},_={variants:[{ +begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:i,end:/\{/}],returnBegin:!0, +returnEnd:!0,illegal:"[<='$\"]",relevance:0, +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,u,l("keyword","all\\b"),l("variable","@\\{"+a+"\\}"),{ +begin:"\\b("+ae.join("|")+")\\b",className:"selector-tag" +},n.CSS_NUMBER_MODE,l("selector-tag",i,0),l("selector-id","#"+i),l("selector-class","\\."+i,0),l("selector-tag","&",0),n.ATTRIBUTE_SELECTOR_MODE,{ +className:"selector-pseudo",begin:":("+re.join("|")+")"},{ +className:"selector-pseudo",begin:":(:)?("+se.join("|")+")"},{begin:/\(/, +end:/\)/,relevance:0,contains:g},{begin:"!important"},n.FUNCTION_DISPATCH]},h={ +begin:a+":(:)?"+`(${t.join("|")})`,returnBegin:!0,contains:[_]} +;return r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,p,h,b,_,u,n.FUNCTION_DISPATCH), +{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:r}}, +grmr_lua:e=>{const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"] +},i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,t,{contains:[a],relevance:10 +})];return{name:"Lua",aliases:["pluto"],keywords:{ +$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil", +keyword:"and break do else elseif end for goto if in local not or repeat return then until while", +built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" +},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)", +contains:[e.inherit(e.TITLE_MODE,{ +begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", +begin:"\\(",endsWithParent:!0,contains:i}].concat(i) +},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", +begin:n,end:t,contains:[a],relevance:5}])}},grmr_makefile:e=>{const n={ +className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{ +const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},t={ +variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{ begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, relevance:2},{ begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), @@ -379,573 +748,33 @@ begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/ },{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", -end:"\\]",excludeBegin:!0,excludeEnd:!0}]},i={className:"strong",contains:[], -variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={ -className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{ -begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i) -;let c=[n,a] -;return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c), -c=c.concat(i,s),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ -className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c},{ +end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[], +variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}] +},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{ +begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[] +}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r) +;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o) +})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ +className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:o},{ begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", -contains:c}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", -end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c, +contains:o}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", +end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:o, end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ -begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ +begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ -className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}})() -;hljs.registerLanguage("markdown",e)})();/*! `bash` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/, -end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{ -className:"variable",variants:[{ -begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={ -className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},i={ -begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, -end:/(\w+)/,className:"string"})]}},c={className:"string",begin:/"/,end:/"/, -contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(c);const o={begin:/\$\(\(/, -end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] -},r=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 -}),l={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, -contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ -name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z._-]+\b/, -keyword:["if","then","else","elif","fi","for","while","in","do","done","case","esac","function"], -literal:["true","false"], -built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] -},contains:[r,e.SHEBANG(),l,o,e.HASH_COMMENT_MODE,i,{match:/(\/[a-z._-]+)+/},c,{ -className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},t]}}})() -;hljs.registerLanguage("bash",e)})();/*! `dockerfile` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>({name:"Dockerfile",aliases:["docker"], -case_insensitive:!0, -keywords:["from","maintainer","expose","env","arg","user","onbuild","stopsignal"], -contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{ -beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell", -starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"{var e=(()=>{"use strict" -;var e="\\.([0-9](_*[0-9])*)",n="[0-9a-fA-F](_*[0-9a-fA-F])*",a={ -className:"number",variants:[{ -begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` -},{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ -begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{ -begin:`\\b0[xX]((${n})\\.?|(${n})?\\.(${n}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` -},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${n})[lL]?\\b`},{ -begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], -relevance:0};return e=>{const n={ -keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", -built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", -literal:"true false null"},i={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" -},s={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},t={ -className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", -variants:[{begin:'"""',end:'"""(?=[^"])',contains:[t,s]},{begin:"'",end:"'", -illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, -contains:[e.BACKSLASH_ESCAPE,t,s]}]};s.contains.push(r);const l={ -className:"meta", -begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" -},c={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, -end:/\)/,contains:[e.inherit(r,{className:"string"})]}] -},o=a,b=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),E={ -variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, -contains:[]}]},d=E;return d.variants[1].contains=[E],E.variants[1].contains=[d], -{name:"Kotlin",aliases:["kt","kts"],keywords:n, -contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", -begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,b,{className:"keyword", -begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", -begin:/@\w+/}]}},i,l,c,{className:"function",beginKeywords:"fun",end:"[(]|$", -returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ -begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, -contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, -keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, -endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, -endsWithParent:!0,contains:[E,e.C_LINE_COMMENT_MODE,b],relevance:0 -},e.C_LINE_COMMENT_MODE,b,l,c,r,e.C_NUMBER_MODE]},b]},{className:"class", -beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, -illegal:"extends implements",contains:[{ -beginKeywords:"public protected internal private constructor" -},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, -excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/, -excludeBegin:!0,returnEnd:!0},l,c]},r,{className:"meta",begin:"^#!/usr/bin/env", -end:"$",illegal:"\n"},o]}}})();hljs.registerLanguage("kotlin",e)})();/*! `typescript` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict" -;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","module","global"],i=[].concat(r,t,s) -;function o(o){const l=o.regex,d=e,b={begin:/<[A-Za-z0-9\\._:-]+/, -end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ -const a=e[0].length+e.index,t=e.input[a] -;if("<"===t||","===t)return void n.ignoreMatch();let s -;">"===t&&(((e,{after:n})=>{const a="",M={ -match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(T)], -keywords:"async",className:{1:"keyword",3:"title.function"},contains:[S]} -;return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{ -PARAMS_CONTAINS:v,CLASS_REFERENCE:R},illegal:/#(?![$_A-z])/, -contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ -label:"use_strict",className:"meta",relevance:10, -begin:/^\s*['"]use (strict|asm)['"]/ -},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,A,p,_,f,E,R,{className:"attr", -begin:d+l.lookahead(":"),relevance:0},M,{ -begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", -keywords:"return throw case",relevance:0,contains:[f,o.REGEXP_MODE,{ -className:"function",begin:T,returnBegin:!0,end:"\\s*=>",contains:[{ -className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{ -className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, -excludeEnd:!0,keywords:g,contains:v}]}]},{begin:/,/,relevance:0},{match:/\s+/, -relevance:0},{variants:[{begin:"<>",end:""},{ -match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:b.begin, -"on:begin":b.isTrulyOpeningTag,end:b.end}],subLanguage:"xml",contains:[{ -begin:b.begin,end:b.end,skip:!0,contains:["self"]}]}]},x,{ -beginKeywords:"while if switch catch for"},{ -begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", -returnBegin:!0,label:"func.def",contains:[S,o.inherit(o.TITLE_MODE,{begin:d, -className:"title.function"})]},{match:/\.\.\./,relevance:0},I,{match:"\\$"+d, -relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, -contains:[S]},k,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, -className:"variable.constant"},w,C,{match:/\$[(.]/}]}}return t=>{ -const s=o(t),r=["any","void","number","boolean","string","object","never","enum"],l={ -beginKeywords:"namespace",end:/\{/,excludeEnd:!0, -contains:[s.exports.CLASS_REFERENCE]},d={beginKeywords:"interface",end:/\{/, -excludeEnd:!0,keywords:{keyword:"interface extends",built_in:r}, -contains:[s.exports.CLASS_REFERENCE]},b={$pattern:e, -keyword:n.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]), -literal:a,built_in:i.concat(r),"variable.language":c},g={className:"meta", -begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},u=(e,n,a)=>{ -const t=e.contains.findIndex((e=>e.label===n)) -;if(-1===t)throw Error("can not find mode to replace");e.contains.splice(t,1,a)} -;return Object.assign(s.keywords,b), -s.exports.PARAMS_CONTAINS.push(g),s.contains=s.contains.concat([g,l,d]), -u(s,"shebang",t.SHEBANG()),u(s,"use_strict",{className:"meta",relevance:10, -begin:/^\s*['"]use strict['"]/ -}),s.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(s,{ -name:"TypeScript",aliases:["ts","tsx"]}),s}})() -;hljs.registerLanguage("typescript",e)})();/*! `python` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{ -const n=e.regex,a=/[\p{XID_Start}_]\p{XID_Continue}*/u,i=["and","as","assert","async","await","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],s={ -$pattern:/[A-Za-z]\w+|__\w+__/,keyword:i, -built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], -literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], -type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] -},t={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/, -end:/\}/,keywords:s,illegal:/#/},l={begin:/\{\{/,relevance:0},b={ -className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ -begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, -contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{ -begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, -contains:[e.BACKSLASH_ESCAPE,t],relevance:10},{ -begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, -contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, -end:/"""/,contains:[e.BACKSLASH_ESCAPE,t,l,r]},{begin:/([uU]|[rR])'/,end:/'/, -relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ -begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, -end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, -contains:[e.BACKSLASH_ESCAPE,l,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, -contains:[e.BACKSLASH_ESCAPE,l,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] -},o="[0-9](_?[0-9])*",c=`(\\b(${o}))?\\.(${o})|\\b(${o})\\.`,d="\\b|"+i.join("|"),g={ -className:"number",relevance:0,variants:[{ -begin:`(\\b(${o})|(${c}))[eE][+-]?(${o})[jJ]?(?=${d})`},{begin:`(${c})[jJ]?`},{ -begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${d})`},{ -begin:`\\b0[bB](_?[01])+[lL]?(?=${d})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${d})` -},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${d})`},{begin:`\\b(${o})[jJ](?=${d})` -}]},p={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:s, -contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={ -className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, -end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s, -contains:["self",t,g,b,e.HASH_COMMENT_MODE]}]};return r.contains=[b,g,t],{ -name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:s, -illegal:/(<\/|->|\?)|=>/,contains:[t,g,{begin:/\bself\b/},{beginKeywords:"if", -relevance:0},b,p,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,a],scope:{ -1:"keyword",3:"title.function"},contains:[m]},{variants:[{ -match:[/\bclass/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/\bclass/,/\s+/,a]}], -scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ -className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[g,m,b]}]}}})() -;hljs.registerLanguage("python",e)})();/*! `python-repl` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var a=(()=>{"use strict";return a=>({aliases:["pycon"],contains:[{ -className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}}, -variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]})})() -;hljs.registerLanguage("python-repl",a)})();/*! `php` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{ -const t=e.regex,r="[a-zA-Z0-9_\x7f-\xff]*(?![A-Za-z0-9])(?![$]))",a=t.concat("([a-zA-Z_\\x7f-\\xff]",r),n=t.concat("([A-Z]",r),o={ -scope:"variable",match:"\\$+"+a},c={scope:"subst",variants:[{begin:/\$\w+/},{ -begin:/\{\$/,end:/\}/}]},i=e.inherit(e.APOS_STRING_MODE,{illegal:null -}),l="[ \t\n]",s={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{ -illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(c) -}),i,e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/, -contains:e.QUOTE_STRING_MODE.contains.concat(c)})]},p={scope:"number", -variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{ -begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{ -begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{ -begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" -}],relevance:0 -},_=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],d=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],b={ -keyword:_,literal:(e=>{const t=[];return["false","null","true"].forEach((e=>{ -t.push(e),e.toLowerCase()===e?t.push(e.toUpperCase()):t.push(e.toLowerCase()) -})),t})(),built_in:d},u=e=>e.map((e=>e.replace(/\|\d+$/,""))),E={variants:[{ -match:[/new/,t.concat(l,"+"),t.concat("(?!",u(d).join("\\b|"),"\\b)"),t.concat(/\\?/,a),t.concat(l,"*",/\(/)], -scope:{1:"keyword",4:"title.class"}}]},g={relevance:0, -match:[/\b/,t.concat("(?!fn\\b|function\\b|",u(_).join("\\b|"),"|",u(d).join("\\b|"),"\\b)"),a,t.concat(l,"*"),t.lookahead(/(?=\()/)], -scope:{3:"title.function.invoke"}},I=t.concat(a,"\\b(?!\\()"),h={variants:[{ -match:[t.concat(/::/,t.lookahead(/(?!class\b)/)),I],scope:{2:"variable.constant" -}},{match:[/::/,/class/],scope:{2:"variable.language"}},{ -match:[n,t.concat("::",t.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{ -match:[n,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]};return{ -case_insensitive:!1,keywords:b, -contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{ -contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/, -keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE, -contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{ -begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},{ -scope:"variable.language",match:/\$this\b/},o,g,h,{ -match:[/const/,/\s/,a,/\s*=/],scope:{1:"keyword",3:"variable.constant"}},E,{ -scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/, -excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use" -},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params", -begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:b, -contains:["self",o,h,e.C_BLOCK_COMMENT_MODE,s,p]}]},{scope:"class",variants:[{ -beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", -illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ -beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ -beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, -contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{ -beginKeywords:"use",relevance:0,end:";",contains:[{ -match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},s,p]} -}})();hljs.registerLanguage("php",e)})();/*! `scss` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict" -;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],r=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],o=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-height","max-width","min-height","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse() -;return a=>{const n=(e=>({IMPORTANT:{scope:"meta",begin:"!important"}, -BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number", -begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{ -className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{ -scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", -contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ -scope:"number", -begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", -relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/} -}))(a),l=r,s=i,d="@[a-z-]+",c={className:"variable", -begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"};return{name:"SCSS",case_insensitive:!0, -illegal:"[=/|']", -contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{ -className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ -className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 -},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", -begin:"\\b("+e.join("|")+")\\b",relevance:0},{className:"selector-pseudo", -begin:":("+s.join("|")+")"},{className:"selector-pseudo", -begin:":(:)?("+l.join("|")+")"},c,{begin:/\(/,end:/\)/, -contains:[n.CSS_NUMBER_MODE]},n.CSS_VARIABLE,{className:"attribute", -begin:"\\b("+o.join("|")+")\\b"},{ -begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" -},{begin:/:/,end:/[;}{]/, -contains:[n.BLOCK_COMMENT,c,n.HEXCOLOR,n.CSS_NUMBER_MODE,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,n.IMPORTANT] -},{begin:"@(page|font-face)",keywords:{$pattern:d,keyword:"@page @font-face"}},{ -begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, -keyword:"and or not only",attribute:t.join(" ")},contains:[{begin:d, -className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" -},c,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE] -},n.FUNCTION_DISPATCH]}}})();hljs.registerLanguage("scss",e)})();/*! `latex` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n=[{begin:/\^{6}[0-9a-f]{6}/},{ -begin:/\^{5}[0-9a-f]{5}/},{begin:/\^{4}[0-9a-f]{4}/},{begin:/\^{3}[0-9a-f]{3}/ -},{begin:/\^{2}[0-9a-f]{2}/},{begin:/\^{2}[\u0000-\u007f]/}],a=[{ -className:"keyword",begin:/\\/,relevance:0,contains:[{endsParent:!0, -begin:e.regex.either(...["(?:NeedsTeXFormat|RequirePackage|GetIdInfo)","Provides(?:Expl)?(?:Package|Class|File)","(?:DeclareOption|ProcessOptions)","(?:documentclass|usepackage|input|include)","makeat(?:letter|other)","ExplSyntax(?:On|Off)","(?:new|renew|provide)?command","(?:re)newenvironment","(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand","(?:New|Renew|Provide|Declare)DocumentEnvironment","(?:(?:e|g|x)?def|let)","(?:begin|end)","(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)","caption","(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)","(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)","(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)","(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)","(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)","(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)"].map((e=>e+"(?![a-zA-Z@:_])"))) -},{endsParent:!0, -begin:RegExp(["(?:__)?[a-zA-Z]{2,}_[a-zA-Z](?:_?[a-zA-Z])+:[a-zA-Z]*","[lgc]__?[a-zA-Z](?:_?[a-zA-Z])*_[a-zA-Z]{2,}","[qs]__?[a-zA-Z](?:_?[a-zA-Z])+","use(?:_i)?:[a-zA-Z]*","(?:else|fi|or):","(?:if|cs|exp):w","(?:hbox|vbox):n","::[a-zA-Z]_unbraced","::[a-zA-Z:]"].map((e=>e+"(?![a-zA-Z:_])")).join("|")) -},{endsParent:!0,variants:n},{endsParent:!0,relevance:0,variants:[{ -begin:/[a-zA-Z@]+/},{begin:/[^a-zA-Z@]?/}]}]},{className:"params",relevance:0, -begin:/#+\d?/},{variants:n},{className:"built_in",relevance:0,begin:/[$&^_]/},{ -className:"meta",begin:/% ?!(T[eE]X|tex|BIB|bib)/,end:"$",relevance:10 -},e.COMMENT("%","$",{relevance:0})],i={begin:/\{/,end:/\}/,relevance:0, -contains:["self",...a]},t=e.inherit(i,{relevance:0,endsParent:!0, -contains:[i,...a]}),r={begin:/\[/,end:/\]/,endsParent:!0,relevance:0, -contains:[i,...a]},s={begin:/\s+/,relevance:0},c=[t],l=[r],o=(e,n)=>({ -contains:[s],starts:{relevance:0,contains:e,starts:n}}),d=(e,n)=>({ -begin:"\\\\"+e+"(?![a-zA-Z@:_])",keywords:{$pattern:/\\[a-zA-Z]+/,keyword:"\\"+e -},relevance:0,contains:[s],starts:n}),g=(n,a)=>e.inherit({ -begin:"\\\\begin(?=[ \t]*(\\r?\\n[ \t]*)?\\{"+n+"\\})",keywords:{ -$pattern:/\\[a-zA-Z]+/,keyword:"\\begin"},relevance:0 -},o(c,a)),m=(n="string")=>e.END_SAME_AS_BEGIN({className:n,begin:/(.|\r?\n)/, -end:/(.|\r?\n)/,excludeBegin:!0,excludeEnd:!0,endsParent:!0}),b=e=>({ -className:"string",end:"(?=\\\\end\\{"+e+"\\})"}),p=(e="string")=>({relevance:0, -begin:/\{/,starts:{endsParent:!0,contains:[{className:e,end:/(?=\})/, -endsParent:!0,contains:[{begin:/\{/,end:/\}/,relevance:0,contains:["self"]}]}]} -});return{name:"LaTeX",aliases:["tex"], -contains:[...["verb","lstinline"].map((e=>d(e,{contains:[m()]}))),d("mint",o(c,{ -contains:[m()]})),d("mintinline",o(c,{contains:[p(),m()]})),d("url",{ -contains:[p("link"),p("link")]}),d("hyperref",{contains:[p("link")] -}),d("href",o(l,{contains:[p("link")] -})),...[].concat(...["","\\*"].map((e=>[g("verbatim"+e,b("verbatim"+e)),g("filecontents"+e,o(c,b("filecontents"+e))),...["","B","L"].map((n=>g(n+"Verbatim"+e,o(l,b(n+"Verbatim"+e)))))]))),g("minted",o(l,o(c,b("minted")))),...a] -}}})();hljs.registerLanguage("latex",e)})();/*! `vbnet` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{ -const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,s=/\d{1,2}(:\d{1,2}){1,2}/,r={ -className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{ -begin:n.concat(/# */,s,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{ -begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,s),/ *#/)}] -},l=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}] -}),o=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]}) -;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0, -classNameAliases:{label:"symbol"},keywords:{ -keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", -built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", -type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", -literal:"true false nothing"}, -illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ -className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, -end:/"/,illegal:/\n/,contains:[{begin:/""/}]},r,{className:"number",relevance:0, -variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ -},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ -begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ -className:"label",begin:/^\w+:/},l,o,{className:"meta", -begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, -end:/$/,keywords:{ -keyword:"const disable else elseif enable end externalsource if region then"}, -contains:[o]}]}}})();hljs.registerLanguage("vbnet",e)})();/*! `diff` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const a=e.regex;return{name:"Diff", -aliases:["patch"],contains:[{className:"meta",relevance:10, -match:a.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) -},{className:"comment",variants:[{ -begin:a.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), -end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ -className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, -end:/$/}]}}})();hljs.registerLanguage("diff",e)})();/*! `makefile` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const i={className:"variable", -variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", -contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{var e=(()=>{"use strict";return e=>{const t="\\[=*\\[",a="\\]=*\\]",n={ -begin:t,end:a,contains:["self"] -},o=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[",a,{contains:[n], -relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE, -literal:"true false nil", -keyword:"and break do else elseif end for goto if in local not or repeat return then until while", -built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" -},contains:o.concat([{className:"function",beginKeywords:"function",end:"\\)", -contains:[e.inherit(e.TITLE_MODE,{ -begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", -begin:"\\(",endsWithParent:!0,contains:o}].concat(o) -},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", -begin:t,end:a,contains:[n],relevance:5}])}}})();hljs.registerLanguage("lua",e) -})();/*! `csharp` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n={ -keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]), -built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], -literal:["default","false","null","true"]},a=e.inherit(e.TITLE_MODE,{ -begin:"[a-zA-Z](\\.?\\w)*"}),i={className:"number",variants:[{ -begin:"\\b(0b[01']+)"},{ -begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ -begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" -}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] -},t=e.inherit(s,{illegal:/\n/}),r={className:"subst",begin:/\{/,end:/\}/, -keywords:n},l=e.inherit(r,{illegal:/\n/}),c={className:"string",begin:/\$"/, -end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ -},e.BACKSLASH_ESCAPE,l]},o={className:"string",begin:/\$@"/,end:'"',contains:[{ -begin:/\{\{/},{begin:/\}\}/},{begin:'""'},r]},d=e.inherit(o,{illegal:/\n/, -contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},l]}) -;r.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_BLOCK_COMMENT_MODE], -l.contains=[d,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.inherit(e.C_BLOCK_COMMENT_MODE,{ -illegal:/\n/})];const g={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] -},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},a] -},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={ -begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], -keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, -contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ -begin:"\x3c!--|--\x3e"},{begin:""}]}] -}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", -end:"$",keywords:{ -keyword:"if else elif endif define undef warning error line region endregion pragma checksum" -}},g,i,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, -illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" -},a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", -relevance:0,end:/[{;=]/,illegal:/[^\s:]/, -contains:[a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ -beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, -contains:[a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", -begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ -className:"string",begin:/"/,end:/"/}]},{ -beginKeywords:"new return throw await else",relevance:0},{className:"function", -begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, -end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ -beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", -relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, -contains:[e.TITLE_MODE,E],relevance:0},{match:/\(\)/},{className:"params", -begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, -contains:[g,i,e.C_BLOCK_COMMENT_MODE] -},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}})() -;hljs.registerLanguage("csharp",e)})();/*! `json` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>({name:"JSON",contains:[{ -className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{ -match:/[{}[\],:]/,className:"punctuation",relevance:0},e.QUOTE_STRING_MODE,{ -beginKeywords:"true false null" -},e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}) -})();hljs.registerLanguage("json",e)})();/*! `nginx` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n=e.regex,a={ -className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{\w+\}/},{ -begin:n.concat(/[$@]/,e.UNDERSCORE_IDENT_RE)}]},s={endsWithParent:!0,keywords:{ -$pattern:/[a-z_]{2,}|\/dev\/poll/, -literal:["on","off","yes","no","true","false","none","blocked","debug","info","notice","warn","error","crit","select","break","last","permanent","redirect","kqueue","rtsig","epoll","poll","/dev/poll"] -},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string", -contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/ -}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[a] -},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:"\\s\\^", -end:"\\s|\\{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|\\{|;",returnEnd:!0},{ -begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number", -begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{ -className:"number",begin:"\\b\\d+[kKmMgGdshdwy]?\\b",relevance:0},a]};return{ -name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{ -beginKeywords:"upstream location",end:/;|\{/,contains:s.contains,keywords:{ -section:"upstream location"}},{className:"section", -begin:n.concat(e.UNDERSCORE_IDENT_RE+n.lookahead(/\s+\{/)),relevance:0},{ -begin:n.lookahead(e.UNDERSCORE_IDENT_RE+"\\s"),end:";|\\{",contains:[{ -className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:s}],relevance:0}], -illegal:"[^\\s\\}\\{]"}}})();hljs.registerLanguage("nginx",e)})();/*! `ruby` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{ -const n=e.regex,a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",i={ -keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor __FILE__", -built_in:"proc lambda",literal:"true false nil"},s={className:"doctag", -begin:"@[A-Za-z]+"},b={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s] -}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10 -}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:/#\{/,end:/\}/, -keywords:i},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{ -begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/, -end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{ -begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/, -end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{ -begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{ -begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ -begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ -begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ -begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), -contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, -contains:[e.BACKSLASH_ESCAPE,c]})]}]},d="[0-9](_?[0-9])*",g={className:"number", -relevance:0,variants:[{ -begin:`\\b([1-9](_?[0-9])*|0)(\\.(${d}))?([eE][+-]?(${d})|r)?i?\\b`},{ -begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" -},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ -begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ -begin:"\\b0(_?[0-7])+r?i?\\b"}]},l={className:"params",begin:"\\(",end:"\\)", -endsParent:!0,keywords:i},o=[t,{className:"class",beginKeywords:"class module", -end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{ -begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|!)?"}),{begin:"<\\s*",contains:[{ -begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE,relevance:0}]}].concat(r)},{ -className:"function",begin:n.concat(/def\s+/,n.lookahead(a+"\\s*(\\(|;|$)")), -relevance:0,keywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:a -}),l].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol", -begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", -begin:":(?!\\s)",contains:[t,{begin:a}],relevance:0},g,{className:"variable", -begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ -className:"params",begin:/\|/,end:/\|/,relevance:0,keywords:i},{ -begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{ -className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{ -begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(", -end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}] -}].concat(b,r),relevance:0}].concat(b,r);c.contains=o,l.contains=o;const _=[{ -begin:/^\s*=>/,starts:{end:"$",contains:o}},{className:"meta", -begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", -starts:{end:"$",contains:o}}];return r.unshift(b),{name:"Ruby", -aliases:["rb","gemspec","podspec","thor","irb"],keywords:i,illegal:/\/\*/, -contains:[e.SHEBANG({binary:"ruby"})].concat(_).concat(r).concat(o)}}})() -;hljs.registerLanguage("ruby",e)})();/*! `yaml` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{ -const n="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={ -className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/ -},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable", -variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(s,{ -variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={ -end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t={begin:/\{/, -end:/\}/,contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]", -contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{ -begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{ -begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$", -relevance:10},{className:"string", -begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ -begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, -relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type", -begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a -},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", -begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", -relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ -className:"number", -begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" -},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},t,g,s],r=[...b] -;return r.pop(),r.push(i),l.contains=r,{name:"YAML",case_insensitive:!0, -aliases:["yml"],contains:b}}})();hljs.registerLanguage("yaml",e)})();/*! `php-template` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var n=(()=>{"use strict";return n=>({name:"PHP template", -subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php", -contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{ -begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null, -className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{ -illegal:null,className:null,contains:null,skip:!0})]}]})})() -;hljs.registerLanguage("php-template",n)})();/*! `sql` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{ -const r=e.regex,t=e.COMMENT("--","$"),n=["true","false","unknown"],a=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],i=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=i,c=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!i.includes(e))),l={ -begin:r.concat(/\b/,r.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}} -;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ -$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:r,when:t}={})=>{const n=t -;return r=r||[],e.map((e=>e.match(/\|\d+$/)||r.includes(e)?e:n(e)?e+"|0":e)) -})(c,{when:e=>e.length<3}),literal:n,type:a, -built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] -},contains:[{begin:r.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/, -keyword:c.concat(s),literal:n,type:a}},{className:"type", -begin:r.either("double precision","large object","with timezone","without timezone") -},l,{className:"variable",begin:/@[a-z0-9]+/},{className:"string",variants:[{ -begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,contains:[{ -begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:"operator", -begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}})() -;hljs.registerLanguage("sql",e)})();/*! `objectivec` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={ -$pattern:n,keyword:["@interface","@class","@protocol","@implementation"]} -;return{name:"Objective-C", -aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:{$pattern:n, -keyword:["int","float","while","char","export","sizeof","typedef","const","struct","for","union","unsigned","long","volatile","static","bool","mutable","if","do","return","goto","void","enum","else","break","extern","asm","case","short","default","double","register","explicit","signed","typename","this","switch","continue","wchar_t","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","super","unichar","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"], +className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},{scope:"literal", +match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}, +grmr_objectivec:e=>{const n=/[a-zA-Z@][a-zA-Z0-9_]*/,t={$pattern:n, +keyword:["@interface","@class","@protocol","@implementation"]};return{ +name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"], +keywords:{"variable.language":["this","super"],$pattern:n, +keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"], literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"], -built_in:["BOOL","dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"] +built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"], +type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"] },illegal:"/,end:/$/,illegal:"\\n" },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class", -begin:"("+_.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:_, +begin:"("+t.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:t, contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE, -relevance:0}]}}})();hljs.registerLanguage("objectivec",e)})();/*! `cpp` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,a=e.COMMENT("//","$",{ -contains:[{begin:/\\\n/}] -}),n="[a-zA-Z_]\\w*::",r="(?!struct)(decltype\\(auto\\)|"+t.optional(n)+"[a-zA-Z_]\\w*"+t.optional("<[^<>]+>")+")",i={ -className:"type",begin:"\\b[a-z\\d_]*_t\\b"},s={className:"string",variants:[{ -begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ -begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", -end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ -begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},c={ -className:"number",variants:[{begin:"\\b(0b[01']+)"},{ -begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" -},{ -begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" -}],relevance:0},o={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ -keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" -},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:"string"}),{ -className:"string",begin:/<.*?>/},a,e.C_BLOCK_COMMENT_MODE]},l={ -className:"title",begin:t.optional(n)+e.IDENT_RE,relevance:0 -},d=t.optional(n)+e.IDENT_RE+"\\s*\\(",u={ -type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], -keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], -literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], -_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] -},p={className:"function.dispatch",relevance:0,keywords:{ -_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] -}, -begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/)) -},_=[p,o,i,a,e.C_BLOCK_COMMENT_MODE,c,s],m={variants:[{begin:/=/,end:/;/},{ -begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], -keywords:u,contains:_.concat([{begin:/\(/,end:/\)/,keywords:u, -contains:_.concat(["self"]),relevance:0}]),relevance:0},g={className:"function", -begin:"("+r+"[\\*&\\s]+)+"+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, -keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:"decltype\\(auto\\)", -keywords:u,relevance:0},{begin:d,returnBegin:!0,contains:[l],relevance:0},{ -begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[s,c]},{ -relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:u, -relevance:0,contains:[a,e.C_BLOCK_COMMENT_MODE,s,c,i,{begin:/\(/,end:/\)/, -keywords:u,relevance:0,contains:["self",a,e.C_BLOCK_COMMENT_MODE,s,c,i]}] -},i,a,e.C_BLOCK_COMMENT_MODE,o]};return{name:"C++", -aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",keywords:u,contains:["self",i]},{begin:e.IDENT_RE+"::",keywords:u},{ -match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], -className:{1:"keyword",3:"title.class"}}])}}})();hljs.registerLanguage("cpp",e) -})();/*! `apache` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n={className:"number", -begin:/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d{1,5})?/};return{ -name:"Apache config",aliases:["apacheconf"],case_insensitive:!0, -contains:[e.HASH_COMMENT_MODE,{className:"section",begin:/<\/?/,end:/>/, -contains:[n,{className:"number",begin:/:\d{1,5}/ -},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute", -begin:/\w+/,relevance:0,keywords:{ -_:["order","deny","allow","setenv","rewriterule","rewriteengine","rewritecond","documentroot","sethandler","errordocument","loadmodule","options","header","listen","serverroot","servername"] -},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"}, -contains:[{className:"meta",begin:/\s\[/,end:/\]$/},{className:"variable", -begin:/[\$%]\{/,end:/\}/,contains:["self",{className:"number",begin:/[$%]\d+/}] -},n,{className:"number",begin:/\b\d+/},e.QUOTE_STRING_MODE]}}],illegal:/\S/}} -})();hljs.registerLanguage("apache",e)})();/*! `plaintext` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var t=(()=>{"use strict";return t=>({name:"Plain text", -aliases:["text","txt"],disableAutodetect:!0})})() -;hljs.registerLanguage("plaintext",t)})();/*! `shell` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var s=(()=>{"use strict";return s=>({name:"Shell Session", -aliases:["console","shellsession"],contains:[{className:"meta", -begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/, -subLanguage:"bash"}}]})})();hljs.registerLanguage("shell",s)})();/*! `r` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{ -const a=e.regex,n=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,i=a.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),s=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,t=a.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/) -;return{name:"R",keywords:{$pattern:n, +relevance:0}]}},grmr_perl:e=>{const n=e.regex,t=/[dualxmsipngr]{0,12}/,a={ +$pattern:/[\w.]+/, +keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot class close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl field fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map method mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" +},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},r={begin:/->\{/, +end:/\}/},s={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},o={scope:"variable", +variants:[{begin:/\$\d/},{ +begin:n.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") +},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[s]},l={ +className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{ +match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{ +match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{ +match:/\b0b[0-1][0-1_]*\b/}],relevance:0 +},c=[e.BACKSLASH_ESCAPE,i,o],d=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],g=(e,a,i="\\1")=>{ +const r="\\1"===i?i:n.concat(i,a) +;return n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,r,/(?:\\.|[^\\\/])*?/,i,t) +},u=(e,a,i)=>n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,i,t),b=[o,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ +endsWithParent:!0}),r,{className:"string",contains:c,variants:[{ +begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", +end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ +begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", +relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", +contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ +begin:"-?\\w+\\s*=>",relevance:0}]},l,{ +begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", +keywords:"split return print reverse grep",relevance:0, +contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ +begin:g("s|tr|y",n.either(...d,{capture:!0}))},{begin:g("s|tr|y","\\(","\\)")},{ +begin:g("s|tr|y","\\[","\\]")},{begin:g("s|tr|y","\\{","\\}")}],relevance:2},{ +className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ +begin:u("(?:m|qr)?",/\//,/\//)},{begin:u("m|qr",n.either(...d,{capture:!0 +}),/\1/)},{begin:u("m|qr",/\(/,/\)/)},{begin:u("m|qr",/\[/,/\]/)},{ +begin:u("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method", +end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,s] +},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5, +contains:[e.TITLE_MODE,s,l]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$", +end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$", +className:"comment"}]}];return i.contains=b,r.contains=b,{name:"Perl", +aliases:["pl","pm"],keywords:a,contains:b}},grmr_php:e=>{ +const n=e.regex,t=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,t),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,t),r=n.concat(/[A-Z]+/,t),s={ +scope:"variable",match:"\\$+"+a},o={scope:"subst",variants:[{begin:/\$\w+/},{ +begin:/\{\$/,end:/\}/}]},l=e.inherit(e.APOS_STRING_MODE,{illegal:null +}),c="[ \t\n]",d={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{ +illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(o)}),l,{ +begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/, +contains:e.QUOTE_STRING_MODE.contains.concat(o),"on:begin":(e,n)=>{ +n.data._beginMatch=e[1]||e[2]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}},e.END_SAME_AS_BEGIN({ +begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},g={scope:"number",variants:[{ +begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{ +begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{ +begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" +}],relevance:0 +},u=["false","null","true"],b=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],m=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],p={ +keyword:b,literal:(e=>{const n=[];return e.forEach((e=>{ +n.push(e),e.toLowerCase()===e?n.push(e.toUpperCase()):n.push(e.toLowerCase()) +})),n})(u),built_in:m},_=e=>e.map((e=>e.replace(/\|\d+$/,""))),h={variants:[{ +match:[/new/,n.concat(c,"+"),n.concat("(?!",_(m).join("\\b|"),"\\b)"),i],scope:{ +1:"keyword",4:"title.class"}}]},f=n.concat(a,"\\b(?!\\()"),E={variants:[{ +match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),f],scope:{2:"variable.constant" +}},{match:[/::/,/class/],scope:{2:"variable.language"}},{ +match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),f],scope:{1:"title.class", +3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))], +scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class", +3:"variable.language"}}]},y={scope:"attr", +match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},w={relevance:0, +begin:/\(/,end:/\)/,keywords:p,contains:[y,s,E,e.C_BLOCK_COMMENT_MODE,d,g,h] +},v={relevance:0, +match:[/\b/,n.concat("(?!fn\\b|function\\b|",_(b).join("\\b|"),"|",_(m).join("\\b|"),"\\b)"),a,n.concat(c,"*"),n.lookahead(/(?=\()/)], +scope:{3:"title.function.invoke"},contains:[w]};w.contains.push(v) +;const N=[y,E,e.C_BLOCK_COMMENT_MODE,d,g,h],k={ +begin:n.concat(/#\[\s*\\?/,n.either(i,r)),beginScope:"meta",end:/]/, +endScope:"meta",keywords:{literal:u,keyword:["new","array"]},contains:[{ +begin:/\[/,end:/]/,keywords:{literal:u,keyword:["new","array"]}, +contains:["self",...N]},...N,{scope:"meta",variants:[{match:i},{match:r}]}]} +;return{case_insensitive:!1,keywords:p, +contains:[k,e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{ +contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/, +keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE, +contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{ +begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{ +begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},s,v,E,{ +match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},h,{ +scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/, +excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use" +},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params", +begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:p, +contains:["self",k,s,E,e.C_BLOCK_COMMENT_MODE,d,g]}]},{scope:"class",variants:[{ +beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", +illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ +beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ +beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, +contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{ +beginKeywords:"use",relevance:0,end:";",contains:[{ +match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},d,g]} +},grmr_php_template:e=>({name:"PHP template",subLanguage:"xml",contains:[{ +begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*", +end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0 +},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null, +skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null, +contains:null,skip:!0})]}]}),grmr_plaintext:e=>({name:"Plain text", +aliases:["text","txt"],disableAutodetect:!0}),grmr_python:e=>{ +const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],i={ +$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a, +built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], +literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], +type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] +},r={className:"meta",begin:/^(>>>|\.\.\.) /},s={className:"subst",begin:/\{/, +end:/\}/,keywords:i,illegal:/#/},o={begin:/\{\{/,relevance:0},l={ +className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, +end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([uU]|[rR])'/,end:/'/, +relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ +begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, +end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, +contains:[e.BACKSLASH_ESCAPE,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,o,s]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] +},c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,g="\\b|"+a.join("|"),u={ +className:"number",relevance:0,variants:[{ +begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{ +begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{ +begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})` +},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${c})[jJ](?=${g})` +}]},b={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:i, +contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={ +className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, +end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i, +contains:["self",r,u,l,e.HASH_COMMENT_MODE]}]};return s.contains=[l,u,r],{ +name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:i, +illegal:/(<\/|\?)|=>/,contains:[r,u,{scope:"variable.language",match:/\bself\b/ +},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword" +},l,b,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{1:"keyword", +3:"title.function"},contains:[m]},{variants:[{ +match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}], +scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ +className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,m,l]}]}}, +grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt", +starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{ +begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_r:e=>{ +const n=e.regex,t=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,r=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/) +;return{name:"R",keywords:{$pattern:t, keyword:"function if in break next repeat else for while", literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" },contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/, -starts:{end:a.lookahead(a.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)), +starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)), endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{ -scope:"variable",variants:[{match:n},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0 +scope:"variable",variants:[{match:t},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0 }]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}] }),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE], variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ @@ -1044,358 +949,296 @@ variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ }),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/ }),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"', relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{ -1:"operator",2:"number"},match:[s,i]},{scope:{1:"operator",2:"number"}, -match:[/%[^%]*%/,i]},{scope:{1:"punctuation",2:"number"},match:[t,i]},{scope:{ -2:"number"},match:[/[^a-zA-Z0-9._]|^/,i]}]},{scope:{3:"operator"}, -match:[n,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:s},{ -match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:t},{begin:"`",end:"`", -contains:[{begin:/\\./}]}]}}})();hljs.registerLanguage("r",e)})();/*! `ini` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n=e.regex,a={className:"number", -relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}] -},s=e.COMMENT();s.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const i={ -className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/ -}]},t={className:"literal",begin:/\bon|off|true|false|yes|no\b/},r={ -className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''", -end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"' -},{begin:"'",end:"'"}]},l={begin:/\[/,end:/\]/,contains:[s,t,i,r,a,"self"], -relevance:0},c=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ -name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, -contains:[s,{className:"section",begin:/\[+/,end:/\]+/},{ -begin:n.concat(c,"(\\s*\\.\\s*",c,")*",n.lookahead(/\s*=\s*[^#\s]/)), -className:"attr",starts:{end:/$/,contains:[s,l,t,i,r,a]}}]}}})() -;hljs.registerLanguage("ini",e)})();/*! `less` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict" -;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],r=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],o=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-height","max-width","min-height","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),n=i.concat(r) -;return a=>{const s=(e=>({IMPORTANT:{scope:"meta",begin:"!important"}, -BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number", -begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{ -className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{ -scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", -contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ -scope:"number", -begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", -relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/} -}))(a),l=n,d="([\\w-]+|@\\{[\\w-]+\\})",c=[],g=[],m=e=>({className:"string", -begin:"~?"+e+".*?"+e}),p=(e,t,i)=>({className:e,begin:t,relevance:i}),b={ -$pattern:/[a-z-]+/,keyword:"and or not only",attribute:t.join(" ")},u={ -begin:"\\(",end:"\\)",contains:g,keywords:b,relevance:0} -;g.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,m("'"),m('"'),s.CSS_NUMBER_MODE,{ -begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", -excludeEnd:!0} -},s.HEXCOLOR,u,p("variable","@@?[\\w-]+",10),p("variable","@\\{[\\w-]+\\}"),p("built_in","~?`[^`]*?`"),{ -className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0 -},s.IMPORTANT);const h=g.concat({begin:/\{/,end:/\}/,contains:c}),f={ -beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not" -}].concat(g)},v={begin:d+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0, -contains:[{begin:/-(webkit|moz|ms|o)-/},s.CSS_VARIABLE,{className:"attribute", -begin:"\\b("+o.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0, -illegal:"[<=$]",relevance:0,contains:g}}]},w={className:"keyword", -begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", -starts:{end:"[;{}]",keywords:b,returnEnd:!0,contains:g,relevance:0}},k={ -className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{ -begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:h}},y={variants:[{ -begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:d,end:/\{/}],returnBegin:!0, -returnEnd:!0,illegal:"[<='$\"]",relevance:0, -contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,f,p("keyword","all\\b"),p("variable","@\\{[\\w-]+\\}"),{ -begin:"\\b("+e.join("|")+")\\b",className:"selector-tag" -},s.CSS_NUMBER_MODE,p("selector-tag",d,0),p("selector-id","#"+d),p("selector-class","\\."+d,0),p("selector-tag","&",0),s.ATTRIBUTE_SELECTOR_MODE,{ -className:"selector-pseudo",begin:":("+i.join("|")+")"},{ -className:"selector-pseudo",begin:":(:)?("+r.join("|")+")"},{begin:/\(/, -end:/\)/,relevance:0,contains:h},{begin:"!important"},s.FUNCTION_DISPATCH]},x={ -begin:`[\\w-]+:(:)?(${l.join("|")})`,returnBegin:!0,contains:[y]} -;return c.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,w,k,x,v,y),{ -name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:c}}})() -;hljs.registerLanguage("less",e)})();/*! `fortran` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n=e.regex,a={ -variants:[e.COMMENT("!","$",{relevance:0}),e.COMMENT("^C[ ]","$",{relevance:0 -}),e.COMMENT("^C$","$",{relevance:0})] -},t=/(_[a-z_\d]+)?/,i=/([de][+-]?\d+)?/,c={className:"number",variants:[{ -begin:n.concat(/\b\d+/,/\.(\d*)/,i,t)},{begin:n.concat(/\b\d+/,i,t)},{ -begin:n.concat(/\.\d+/,i,t)}],relevance:0},o={className:"function", -beginKeywords:"subroutine function program",illegal:"[${=\\n]", -contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]} -;return{name:"Fortran",case_insensitive:!0,aliases:["f90","f95"],keywords:{ -keyword:["kind","do","concurrent","local","shared","while","private","call","intrinsic","where","elsewhere","type","endtype","endmodule","endselect","endinterface","end","enddo","endif","if","forall","endforall","only","contains","default","return","stop","then","block","endblock","endassociate","public","subroutine|10","function","program",".and.",".or.",".not.",".le.",".eq.",".ge.",".gt.",".lt.","goto","save","else","use","module","select","case","access","blank","direct","exist","file","fmt","form","formatted","iostat","name","named","nextrec","number","opened","rec","recl","sequential","status","unformatted","unit","continue","format","pause","cycle","exit","c_null_char","c_alert","c_backspace","c_form_feed","flush","wait","decimal","round","iomsg","synchronous","nopass","non_overridable","pass","protected","volatile","abstract","extends","import","non_intrinsic","value","deferred","generic","final","enumerator","class","associate","bind","enum","c_int","c_short","c_long","c_long_long","c_signed_char","c_size_t","c_int8_t","c_int16_t","c_int32_t","c_int64_t","c_int_least8_t","c_int_least16_t","c_int_least32_t","c_int_least64_t","c_int_fast8_t","c_int_fast16_t","c_int_fast32_t","c_int_fast64_t","c_intmax_t","C_intptr_t","c_float","c_double","c_long_double","c_float_complex","c_double_complex","c_long_double_complex","c_bool","c_char","c_null_ptr","c_null_funptr","c_new_line","c_carriage_return","c_horizontal_tab","c_vertical_tab","iso_c_binding","c_loc","c_funloc","c_associated","c_f_pointer","c_ptr","c_funptr","iso_fortran_env","character_storage_size","error_unit","file_storage_size","input_unit","iostat_end","iostat_eor","numeric_storage_size","output_unit","c_f_procpointer","ieee_arithmetic","ieee_support_underflow_control","ieee_get_underflow_mode","ieee_set_underflow_mode","newunit","contiguous","recursive","pad","position","action","delim","readwrite","eor","advance","nml","interface","procedure","namelist","include","sequence","elemental","pure","impure","integer","real","character","complex","logical","codimension","dimension","allocatable|10","parameter","external","implicit|10","none","double","precision","assign","intent","optional","pointer","target","in","out","common","equivalence","data"], -literal:[".False.",".True."], -built_in:["alog","alog10","amax0","amax1","amin0","amin1","amod","cabs","ccos","cexp","clog","csin","csqrt","dabs","dacos","dasin","datan","datan2","dcos","dcosh","ddim","dexp","dint","dlog","dlog10","dmax1","dmin1","dmod","dnint","dsign","dsin","dsinh","dsqrt","dtan","dtanh","float","iabs","idim","idint","idnint","ifix","isign","max0","max1","min0","min1","sngl","algama","cdabs","cdcos","cdexp","cdlog","cdsin","cdsqrt","cqabs","cqcos","cqexp","cqlog","cqsin","cqsqrt","dcmplx","dconjg","derf","derfc","dfloat","dgamma","dimag","dlgama","iqint","qabs","qacos","qasin","qatan","qatan2","qcmplx","qconjg","qcos","qcosh","qdim","qerf","qerfc","qexp","qgamma","qimag","qlgama","qlog","qlog10","qmax1","qmin1","qmod","qnint","qsign","qsin","qsinh","qsqrt","qtan","qtanh","abs","acos","aimag","aint","anint","asin","atan","atan2","char","cmplx","conjg","cos","cosh","exp","ichar","index","int","log","log10","max","min","nint","sign","sin","sinh","sqrt","tan","tanh","print","write","dim","lge","lgt","lle","llt","mod","nullify","allocate","deallocate","adjustl","adjustr","all","allocated","any","associated","bit_size","btest","ceiling","count","cshift","date_and_time","digits","dot_product","eoshift","epsilon","exponent","floor","fraction","huge","iand","ibclr","ibits","ibset","ieor","ior","ishft","ishftc","lbound","len_trim","matmul","maxexponent","maxloc","maxval","merge","minexponent","minloc","minval","modulo","mvbits","nearest","pack","present","product","radix","random_number","random_seed","range","repeat","reshape","rrspacing","scale","scan","selected_int_kind","selected_real_kind","set_exponent","shape","size","spacing","spread","sum","system_clock","tiny","transpose","trim","ubound","unpack","verify","achar","iachar","transfer","dble","entry","dprod","cpu_time","command_argument_count","get_command","get_command_argument","get_environment_variable","is_iostat_end","ieee_arithmetic","ieee_support_underflow_control","ieee_get_underflow_mode","ieee_set_underflow_mode","is_iostat_eor","move_alloc","new_line","selected_char_kind","same_type_as","extends_type_of","acosh","asinh","atanh","bessel_j0","bessel_j1","bessel_jn","bessel_y0","bessel_y1","bessel_yn","erf","erfc","erfc_scaled","gamma","log_gamma","hypot","norm2","atomic_define","atomic_ref","execute_command_line","leadz","trailz","storage_size","merge_bits","bge","bgt","ble","blt","dshiftl","dshiftr","findloc","iall","iany","iparity","image_index","lcobound","ucobound","maskl","maskr","num_images","parity","popcnt","poppar","shifta","shiftl","shiftr","this_image","sync","change","team","co_broadcast","co_max","co_min","co_sum","co_reduce"] -},illegal:/\/\*/,contains:[{className:"string",relevance:0, -variants:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},o,{begin:/^C\s*=(?!=)/, -relevance:0},a,c]}}})();hljs.registerLanguage("fortran",e)})();/*! `css` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict" -;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],i=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],r=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-height","max-width","min-height","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse() -;return a=>{const n=a.regex,l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"}, -BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number", -begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{ -className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{ -scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", -contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ -scope:"number", -begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", -relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/} -}))(a),s=[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE];return{name:"CSS", -case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"}, -classNameAliases:{keyframePosition:"selector-tag"},contains:[l.BLOCK_COMMENT,{ -begin:/-(webkit|moz|ms|o)-(?=[a-z])/},l.CSS_NUMBER_MODE,{ -className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{ -className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 -},l.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ -begin:":("+i.join("|")+")"},{begin:":(:)?("+o.join("|")+")"}]},l.CSS_VARIABLE,{ -className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:/:/,end:/[;}{]/, -contains:[l.BLOCK_COMMENT,l.HEXCOLOR,l.IMPORTANT,l.CSS_NUMBER_MODE,...s,{ -begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" -},contains:[{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}] -},l.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]",relevance:0, -illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/},{ -begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ -$pattern:/[a-z-]+/,keyword:"and or not only",attribute:t.join(" ")},contains:[{ -begin:/[a-z-]+(?=:)/,className:"attribute"},...s,l.CSS_NUMBER_MODE]}]},{ -className:"selector-tag",begin:"\\b("+e.join("|")+")\\b"}]}}})() -;hljs.registerLanguage("css",e)})();/*! `perl` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{ -const n=e.regex,t=/[dualxmsipngr]{0,12}/,r={$pattern:/[\w.]+/, -keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" -},s={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:r},i={begin:/->\{/, -end:/\}/},a={variants:[{begin:/\$\d/},{ -begin:n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") -},{begin:/[$%@][^\s\w{]/,relevance:0}] -},c=[e.BACKSLASH_ESCAPE,s,a],o=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],g=(e,r,s="\\1")=>{ -const i="\\1"===s?s:n.concat(s,r) -;return n.concat(n.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,i,/(?:\\.|[^\\\/])*?/,s,t) -},l=(e,r,s)=>n.concat(n.concat("(?:",e,")"),r,/(?:\\.|[^\\\/])*?/,s,t),d=[a,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ -endsWithParent:!0}),i,{className:"string",contains:c,variants:[{ -begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", -end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ -begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", -relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", -contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", -contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ -begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number", -begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", -relevance:0},{ -begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", -keywords:"split return print reverse grep",relevance:0, -contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ -begin:g("s|tr|y",n.either(...o,{capture:!0}))},{begin:g("s|tr|y","\\(","\\)")},{ -begin:g("s|tr|y","\\[","\\]")},{begin:g("s|tr|y","\\{","\\}")}],relevance:2},{ -className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ -begin:l("(?:m|qr)?",/\//,/\//)},{begin:l("m|qr",n.either(...o,{capture:!0 -}),/\1/)},{begin:l("m|qr",/\(/,/\)/)},{begin:l("m|qr",/\[/,/\]/)},{ -begin:l("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub", -end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{ -begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$", -subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}] -}];return s.contains=d,i.contains=d,{name:"Perl",aliases:["pl","pm"],keywords:r, -contains:d}}})();hljs.registerLanguage("perl",e)})();/*! `swift` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";function e(e){ -return e?"string"==typeof e?e:e.source:null}function a(e){return t("(?=",e,")")} -function t(...a){return a.map((a=>e(a))).join("")}function n(...a){const t=(e=>{ -const a=e[e.length-1] -;return"object"==typeof a&&a.constructor===Object?(e.splice(e.length-1,1),a):{} -})(a);return"("+(t.capture?"":"?:")+a.map((a=>e(a))).join("|")+")"} -const i=e=>t(/\b/,e,/\w$/.test(e)?/\b/:/\B/),s=["Protocol","Type"].map(i),u=["init","self"].map(i),c=["Any","Self"],r=["actor","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],o=["false","nil","true"],l=["assignment","associativity","higherThan","left","lowerThan","none","right"],m=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],p=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],d=n(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),F=n(d,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),b=t(d,F,"*"),h=n(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),f=n(h,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),w=t(h,f,"*"),y=t(/[A-Z]/,f,"*"),g=["autoclosure",t(/convention\(/,n("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",t(/objc\(/,w,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],E=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] -;return e=>{const d={match:/\s+/,relevance:0},h=e.COMMENT("/\\*","\\*/",{ -contains:["self"]}),v=[e.C_LINE_COMMENT_MODE,h],A={match:[/\./,n(...s,...u)], -className:{2:"keyword"}},N={match:t(/\./,n(...r)),relevance:0 -},C=r.filter((e=>"string"==typeof e)).concat(["_|0"]),D={variants:[{ -className:"keyword", -match:n(...r.filter((e=>"string"!=typeof e)).concat(c).map(i),...u)}]},k={ -$pattern:n(/\b\w+/,/#\w+/),keyword:C.concat(m),literal:o},B=[A,N,D],_=[{ -match:t(/\./,n(...p)),relevance:0},{className:"built_in", -match:t(/\b/,n(...p),/(?=\()/)}],S={match:/->/,relevance:0},M=[S,{ -className:"operator",relevance:0,variants:[{match:b},{match:`\\.(\\.|${F})+`}] -}],x="([0-9a-fA-F]_*)+",I={className:"number",relevance:0,variants:[{ -match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{ -match:`\\b0x(${x})(\\.(${x}))?([pP][+-]?(([0-9]_*)+))?\\b`},{ -match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},L=(e="")=>({ -className:"subst",variants:[{match:t(/\\/,e,/[0\\tnr"']/)},{ -match:t(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),O=(e="")=>({className:"subst", -match:t(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),T=(e="")=>({className:"subst", -label:"interpol",begin:t(/\\/,e,/\(/),end:/\)/}),$=(e="")=>({begin:t(e,/"""/), -end:t(/"""/,e),contains:[L(e),O(e),T(e)]}),j=(e="")=>({begin:t(e,/"/), -end:t(/"/,e),contains:[L(e),T(e)]}),P={className:"string", -variants:[$(),$("#"),$("##"),$("###"),j(),j("#"),j("##"),j("###")]},K={ -match:t(/`/,w,/`/)},z=[K,{className:"variable",match:/\$\d+/},{ -className:"variable",match:`\\$${f}+`}],q=[{match:/(@|#(un)?)available/, -className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:E, -contains:[...M,I,P]}]}},{className:"keyword",match:t(/@/,n(...g))},{ -className:"meta",match:t(/@/,w)}],U={match:a(/\b[A-Z]/),relevance:0,contains:[{ -className:"type", -match:t(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,f,"+") -},{className:"type",match:y,relevance:0},{match:/[?!]+/,relevance:0},{ -match:/\.\.\./,relevance:0},{match:t(/\s+&\s+/,a(y)),relevance:0}]},Z={ -begin://,keywords:k,contains:[...v,...B,...q,S,U]};U.contains.push(Z) -;const V={begin:/\(/,end:/\)/,relevance:0,keywords:k,contains:["self",{ -match:t(w,/\s*:/),keywords:"_|0",relevance:0 -},...v,...B,..._,...M,I,P,...z,...q,U]},W={begin://,contains:[...v,U] -},G={begin:/\(/,end:/\)/,keywords:k,contains:[{ -begin:n(a(t(w,/\s*:/)),a(t(w,/\s+/,w,/\s*:/))),end:/:/,relevance:0,contains:[{ -className:"keyword",match:/\b_\b/},{className:"params",match:w}] -},...v,...B,...M,I,P,...q,U,V],endsParent:!0,illegal:/["']/},R={ -match:[/func/,/\s+/,n(K.match,w,b)],className:{1:"keyword",3:"title.function"}, -contains:[W,G,d],illegal:[/\[/,/%/]},X={ -match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, -contains:[W,G,d],illegal:/\[|%/},H={match:[/operator/,/\s+/,b],className:{ -1:"keyword",3:"title"}},J={begin:[/precedencegroup/,/\s+/,y],className:{ -1:"keyword",3:"title"},contains:[U],keywords:[...l,...o],end:/}/} -;for(const e of P.variants){const a=e.contains.find((e=>"interpol"===e.label)) -;a.keywords=k;const t=[...B,..._,...M,I,P,...z];a.contains=[...t,{begin:/\(/, -end:/\)/,contains:["self",...t]}]}return{name:"Swift",keywords:k, -contains:[...v,R,X,{beginKeywords:"struct protocol class extension enum actor", -end:"\\{",excludeEnd:!0,keywords:k,contains:[e.inherit(e.TITLE_MODE,{ -className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...B] -},H,J,{beginKeywords:"import",end:/$/,contains:[...v],relevance:0 -},...B,..._,...M,I,P,...z,...q,U,V]}}})();hljs.registerLanguage("swift",e)})();/*! `go` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const n={ -keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], -type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], -literal:["true","false","iota","nil"], -built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] -};return{name:"Go",aliases:["golang"],keywords:n,illegal:"{var e=(()=>{"use strict" -;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","module","global"],i=[].concat(r,t,s) -;return o=>{const l=o.regex,b=e,d={begin:/<[A-Za-z0-9\\._:-]+/, -end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ -const a=e[0].length+e.index,t=e.input[a] -;if("<"===t||","===t)return void n.ignoreMatch();let s -;">"===t&&(((e,{after:n})=>{const a="",M={ -match:[/const|var|let/,/\s+/,b,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(C)], -keywords:"async",className:{1:"keyword",3:"title.function"},contains:[S]} -;return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{ -PARAMS_CONTAINS:p,CLASS_REFERENCE:R},illegal:/#(?![$_A-z])/, -contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ -label:"use_strict",className:"meta",relevance:10, -begin:/^\s*['"]use (strict|asm)['"]/ -},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,y,N,_,f,E,R,{className:"attr", -begin:b+l.lookahead(":"),relevance:0},M,{ -begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", -keywords:"return throw case",relevance:0,contains:[f,o.REGEXP_MODE,{ -className:"function",begin:C,returnBegin:!0,end:"\\s*=>",contains:[{ -className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{ -className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, -excludeEnd:!0,keywords:g,contains:p}]}]},{begin:/,/,relevance:0},{match:/\s+/, -relevance:0},{variants:[{begin:"<>",end:""},{ -match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin, -"on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{ -begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},O,{ -beginKeywords:"while if switch catch for"},{ -begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", -returnBegin:!0,label:"func.def",contains:[S,o.inherit(o.TITLE_MODE,{begin:b, -className:"title.function"})]},{match:/\.\.\./,relevance:0},x,{match:"\\$"+b, -relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, -contains:[S]},k,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, -className:"variable.constant"},w,T,{match:/\$[(.]/}]}}})() -;hljs.registerLanguage("javascript",e)})();/*! `rust` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict";return e=>{const t=e.regex,n={ +1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"}, +match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[r,a]},{scope:{ +2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"}, +match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{ +match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`", +contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{ +const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={ +"variable.constant":["__FILE__","__LINE__","__ENCODING__"], +"variable.language":["self","super"], +keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"], +built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"], +literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={ +begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s] +}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10 +}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/, +end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c], +variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{ +begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{ +begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//, +end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{ +begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{ +begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ +begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ +begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ +begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), +contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, +contains:[e.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",u={className:"number", +relevance:0,variants:[{ +begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{ +begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" +},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ +begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ +begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{ +className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0, +keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{ +match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class", +4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{ +2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{ +1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{ +match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{ +begin:e.IDENT_RE+"::"},{className:"symbol", +begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", +begin:":(?!\\s)",contains:[d,{begin:t}],relevance:0},u,{className:"variable", +begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ +className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0, +relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*", +keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c], +illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{ +begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[", +end:"\\][a-z]*"}]}].concat(o,l),relevance:0}].concat(o,l) +;c.contains=m,b.contains=m;const p=[{begin:/^\s*=>/,starts:{end:"$",contains:m} +},{className:"meta.prompt", +begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", +starts:{end:"$",keywords:r,contains:m}}];return l.unshift(o),{name:"Ruby", +aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/, +contains:[e.SHEBANG({binary:"ruby"})].concat(p).concat(l).concat(m)}}, +grmr_rust:e=>{ +const n=e.regex,t=/(r#)?/,a=n.concat(t,e.UNDERSCORE_IDENT_RE),i=n.concat(t,e.IDENT_RE),r={ className:"title.function.invoke",relevance:0, -begin:t.concat(/\b/,/(?!let\b)/,e.IDENT_RE,t.lookahead(/\s*\(/)) -},a="([ui](8|16|32|64|128|size)|f(32|64))?",i=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","panic!","file!","format!","format_args!","include_bin!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"] -;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?", -type:["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"], -keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"], -literal:["true","false","Some","None","Ok","Err"],built_in:i},illegal:""},n]}}})() -;hljs.registerLanguage("rust",e)})();/*! `java` grammar compiled for Highlight.js 11.4.0 */ -(()=>{var e=(()=>{"use strict" -;var e="\\.([0-9](_*[0-9])*)",a="[0-9a-fA-F](_*[0-9a-fA-F])*",n={ -className:"number",variants:[{ -begin:`(\\b([0-9](_*[0-9])*)((${e})|\\.)?|(${e}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` -},{begin:`\\b([0-9](_*[0-9])*)((${e})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ -begin:`(${e})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{ -begin:`\\b0[xX]((${a})\\.?|(${a})?\\.(${a}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` -},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${a})[lL]?\\b`},{ -begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], -relevance:0};function s(e,a,n){return-1===n?"":e.replace(a,(t=>s(e,a,n-1)))} -return e=>{e.regex -;const a="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",t=a+s("(?:<"+a+"~~~(?:\\s*,\\s*"+a+"~~~)*>)?",/~~~/g,2),i={ -keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed"], -literal:["false","true","null"], -type:["char","boolean","long","float","int","byte","short","double"], -built_in:["super","this"]},r={className:"meta",begin:"@"+a,contains:[{ -begin:/\(/,end:/\)/,contains:["self"]}]},l={className:"params",begin:/\(/, -end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} -;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/, -contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, -relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ -begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 -},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/, -className:"string",contains:[e.BACKSLASH_ESCAPE] -},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ -match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,a],className:{ -1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{ -begin:[a,/\s+/,a,/\s+/,/=/],className:{1:"type",3:"variable",5:"operator"}},{ -begin:[/record/,/\s+/,a],className:{1:"keyword",3:"title.class"}, -contains:[l,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ -beginKeywords:"new throw return else",relevance:0},{ -begin:["(?:"+t+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ -2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/, -end:/\)/,keywords:i,relevance:0, -contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,n,e.C_BLOCK_COMMENT_MODE] -},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},n,r]}}})() -;hljs.registerLanguage("java",e)})(); \ No newline at end of file +keyword:"Self",built_in:o,type:l}},{className:"punctuation",begin:"->"},r]}}, +grmr_scss:e=>{const n=te(e),t=se,a=re,i="@[a-z-]+",r={className:"variable", +begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS", +case_insensitive:!0,illegal:"[=/|']", +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{ +className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ +className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 +},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", +begin:"\\b("+ae.join("|")+")\\b",relevance:0},{className:"selector-pseudo", +begin:":("+a.join("|")+")"},{className:"selector-pseudo", +begin:":(:)?("+t.join("|")+")"},r,{begin:/\(/,end:/\)/, +contains:[n.CSS_NUMBER_MODE]},n.CSS_VARIABLE,{className:"attribute", +begin:"\\b("+oe.join("|")+")\\b"},{ +begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" +},{begin:/:/,end:/[;}{]/,relevance:0, +contains:[n.BLOCK_COMMENT,r,n.HEXCOLOR,n.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.IMPORTANT,n.FUNCTION_DISPATCH] +},{begin:"@(page|font-face)",keywords:{$pattern:i,keyword:"@page @font-face"}},{ +begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, +keyword:"and or not only",attribute:ie.join(" ")},contains:[{begin:i, +className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" +},r,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE] +},n.FUNCTION_DISPATCH]}},grmr_shell:e=>({name:"Shell Session", +aliases:["console","shellsession"],contains:[{className:"meta.prompt", +begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/, +subLanguage:"bash"}}]}),grmr_sql:e=>{ +const n=e.regex,t=e.COMMENT("--","$"),a=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],i=a,r=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!a.includes(e))),s={ +match:n.concat(/\b/,n.either(...i),/\s*\(/),relevance:0,keywords:{built_in:i}} +;function o(e){ +return n.concat(/\b/,n.either(...e.map((e=>e.replace(/\s+/,"\\s+")))),/\b/)} +const l={scope:"keyword", +match:o(["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"]), +relevance:0};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ +$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:n,when:t}={})=>{const a=t +;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?e+"|0":e)) +})(r,{when:e=>e.length<3}),literal:["true","false","unknown"], +type:["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"], +built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] +},contains:[{scope:"type", +match:o(["double precision","large object","with timezone","without timezone"]) +},l,s,{scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},{scope:"string",variants:[{ +begin:/'/,end:/'/,contains:[{match:/''/}]}]},{begin:/"/,end:/"/,contains:[{ +match:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{scope:"operator", +match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}, +grmr_swift:e=>{const n={match:/\s+/,relevance:0},t=e.COMMENT("/\\*","\\*/",{ +contains:["self"]}),a=[e.C_LINE_COMMENT_MODE,t],i={match:[/\./,m(...ke,...xe)], +className:{2:"keyword"}},r={match:b(/\./,m(...Me)),relevance:0 +},s=Me.filter((e=>"string"==typeof e)).concat(["_|0"]),o={variants:[{ +className:"keyword", +match:m(...Me.filter((e=>"string"!=typeof e)).concat(Oe).map(Ne),...xe)}]},l={ +$pattern:m(/\b\w+/,/#\w+/),keyword:s.concat(Ce),literal:Ae},c=[i,r,o],g=[{ +match:b(/\./,m(...Te)),relevance:0},{className:"built_in", +match:b(/\b/,m(...Te),/(?=\()/)}],u={match:/->/,relevance:0},p=[u,{ +className:"operator",relevance:0,variants:[{match:Ie},{match:`\\.(\\.|${De})+`}] +}],_="([0-9]_*)+",h="([0-9a-fA-F]_*)+",f={className:"number",relevance:0, +variants:[{match:`\\b(${_})(\\.(${_}))?([eE][+-]?(${_}))?\\b`},{ +match:`\\b0x(${h})(\\.(${h}))?([pP][+-]?(${_}))?\\b`},{match:/\b0o([0-7]_*)+\b/ +},{match:/\b0b([01]_*)+\b/}]},E=(e="")=>({className:"subst",variants:[{ +match:b(/\\/,e,/[0\\tnr"']/)},{match:b(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}] +}),y=(e="")=>({className:"subst",match:b(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/) +}),w=(e="")=>({className:"subst",label:"interpol",begin:b(/\\/,e,/\(/),end:/\)/ +}),v=(e="")=>({begin:b(e,/"""/),end:b(/"""/,e),contains:[E(e),y(e),w(e)] +}),N=(e="")=>({begin:b(e,/"/),end:b(/"/,e),contains:[E(e),w(e)]}),k={ +className:"string", +variants:[v(),v("#"),v("##"),v("###"),N(),N("#"),N("##"),N("###")] +},x=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0, +contains:[e.BACKSLASH_ESCAPE]}],O={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//, +contains:x},M=e=>{const n=b(e,/\//),t=b(/\//,e);return{begin:n,end:t, +contains:[...x,{scope:"comment",begin:`#(?!.*${t})`,end:/$/}]}},A={ +scope:"regexp",variants:[M("###"),M("##"),M("#"),O]},S={match:b(/`/,$e,/`/) +},C=[S,{className:"variable",match:/\$\d+/},{className:"variable", +match:`\\$${Be}+`}],T=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{ +contains:[{begin:/\(/,end:/\)/,keywords:je,contains:[...p,f,k]}]}},{ +scope:"keyword",match:b(/@/,m(...ze),d(m(/\(/,/\s+/)))},{scope:"meta", +match:b(/@/,$e)}],R={match:d(/\b[A-Z]/),relevance:0,contains:[{className:"type", +match:b(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,Be,"+") +},{className:"type",match:Fe,relevance:0},{match:/[?!]+/,relevance:0},{ +match:/\.\.\./,relevance:0},{match:b(/\s+&\s+/,d(Fe)),relevance:0}]},D={ +begin://,keywords:l,contains:[...a,...c,...T,u,R]};R.contains.push(D) +;const I={begin:/\(/,end:/\)/,relevance:0,keywords:l,contains:["self",{ +match:b($e,/\s*:/),keywords:"_|0",relevance:0 +},...a,A,...c,...g,...p,f,k,...C,...T,R]},L={begin://, +keywords:"repeat each",contains:[...a,R]},B={begin:/\(/,end:/\)/,keywords:l, +contains:[{begin:m(d(b($e,/\s*:/)),d(b($e,/\s+/,$e,/\s*:/))),end:/:/, +relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params", +match:$e}]},...a,...c,...p,f,k,...T,R,I],endsParent:!0,illegal:/["']/},$={ +match:[/(func|macro)/,/\s+/,m(S.match,$e,Ie)],className:{1:"keyword", +3:"title.function"},contains:[L,B,n],illegal:[/\[/,/%/]},F={ +match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, +contains:[L,B,n],illegal:/\[|%/},z={match:[/operator/,/\s+/,Ie],className:{ +1:"keyword",3:"title"}},j={begin:[/precedencegroup/,/\s+/,Fe],className:{ +1:"keyword",3:"title"},contains:[R],keywords:[...Se,...Ae],end:/}/},U={ +begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,$e,/\s*/], +beginScope:{1:"keyword",3:"title.class"},keywords:l,contains:[L,...c,{begin:/:/, +end:/\{/,keywords:l,contains:[{scope:"title.class.inherited",match:Fe},...c], +relevance:0}]};for(const e of k.variants){ +const n=e.contains.find((e=>"interpol"===e.label));n.keywords=l +;const t=[...c,...g,...p,f,k,...C];n.contains=[...t,{begin:/\(/,end:/\)/, +contains:["self",...t]}]}return{name:"Swift",keywords:l,contains:[...a,$,F,{ +match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{ +1:"keyword",3:"keyword",5:"title.function"}},{match:[/class\b/,/\s+/,/var\b/], +scope:{1:"keyword",3:"keyword"}},U,z,j,{beginKeywords:"import",end:/$/, +contains:[...a],relevance:0},A,...c,...g,...p,f,k,...C,...T,R,I]}}, +grmr_typescript:e=>{ +const n=e.regex,t=ve(e),a=me,i=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],r={ +begin:[/namespace/,/\s+/,e.IDENT_RE],beginScope:{1:"keyword",3:"title.class"} +},s={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{ +keyword:"interface extends",built_in:i},contains:[t.exports.CLASS_REFERENCE] +},o={$pattern:me, +keyword:pe.concat(["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"]), +literal:_e,built_in:we.concat(i),"variable.language":ye},l={className:"meta", +begin:"@"+a},c=(e,n,t)=>{const a=e.contains.findIndex((e=>e.label===n)) +;if(-1===a)throw Error("can not find mode to replace");e.contains.splice(a,1,t)} +;Object.assign(t.keywords,o),t.exports.PARAMS_CONTAINS.push(l) +;const d=t.contains.find((e=>"attr"===e.scope)),g=Object.assign({},d,{ +match:n.concat(a,n.lookahead(/\s*\?:/))}) +;return t.exports.PARAMS_CONTAINS.push([t.exports.CLASS_REFERENCE,d,g]), +t.contains=t.contains.concat([l,r,s,g]), +c(t,"shebang",e.SHEBANG()),c(t,"use_strict",{className:"meta",relevance:10, +begin:/^\s*['"]use strict['"]/ +}),t.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(t,{ +name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),t},grmr_vbnet:e=>{ +const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,s={ +className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{ +begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{ +begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,r),/ *#/)}] +},o=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}] +}),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]}) +;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0, +classNameAliases:{label:"symbol"},keywords:{ +keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", +built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", +type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", +literal:"true false nothing"}, +illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ +className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, +end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s,{className:"number",relevance:0, +variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ +},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ +begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ +className:"label",begin:/^\w+:/},o,l,{className:"meta", +begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, +end:/$/,keywords:{ +keyword:"const disable else elseif enable end externalsource if region then"}, +contains:[l]}]}},grmr_wasm:e=>{e.regex;const n=e.COMMENT(/\(;/,/;\)/) +;return n.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/, +keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"] +},contains:[e.COMMENT(/;;/,/$/),n,{match:[/(?:offset|align)/,/\s*/,/=/], +className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{ +match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{ +begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword", +3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/, +className:"type"},{className:"keyword", +match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/ +},{className:"number",relevance:0, +match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/ +}]}},grmr_xml:e=>{ +const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={ +className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/, +contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] +},r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{ +className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={ +endsWithParent:!0,illegal:/`]+/}]}]}]};return{ +name:"HTML, XML", +aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], +case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{ +className:"meta",begin://,contains:[i,r,o,s]}]}] +},e.COMMENT(//,{relevance:10}),{begin://, +relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/, +relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{ +end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{ +end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ +className:"tag",begin:/<>|<\/>/},{className:"tag", +begin:n.concat(//,/>/,/\s/)))), +end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{ +className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(t,/>/))),contains:[{ +className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]} +},grmr_yaml:e=>{ +const n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={ +className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}], +contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{ +begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{variants:[{ +begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{ +begin:/[^\s,{}[\]]+/}]}),r={end:",",endsWithParent:!0,excludeEnd:!0,keywords:n, +relevance:0},s={begin:/\{/,end:/\}/,contains:[r],illegal:"\\n",relevance:0},o={ +begin:"\\[",end:"\\]",contains:[r],illegal:"\\n",relevance:0},l=[{ +className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{ +begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{ +begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},{className:"meta", +begin:"^---\\s*$",relevance:10},{className:"string", +begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ +begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, +relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type", +begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t +},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", +begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", +relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ +className:"number", +begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" +},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,o,{ +className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/, +scope:"char.escape",relevance:0}]},a],c=[...l] +;return c.pop(),c.push(i),r.contains=c,{name:"YAML",case_insensitive:!0, +aliases:["yml"],contains:l}}});const Pe=ne;for(const e of Object.keys(Ue)){ +const n=e.replace("grmr_","").replace("_","-");Pe.registerLanguage(n,Ue[e])} +return Pe}() +;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); \ No newline at end of file diff --git a/plugins/tiddlywiki/highlight/files/tiddlywiki.files b/plugins/tiddlywiki/highlight/files/tiddlywiki.files index acc957162f..b75b85598e 100644 --- a/plugins/tiddlywiki/highlight/files/tiddlywiki.files +++ b/plugins/tiddlywiki/highlight/files/tiddlywiki.files @@ -14,7 +14,7 @@ "fields": { "type": "text/css", "title": "$:/plugins/tiddlywiki/highlight/highlight.css", - "tags": "[[$:/tags/Stylesheet]]" + "tags": "[[$:/tags/Stylesheet]] [[$:/tags/Stylesheet/Highlight]]" } } ] diff --git a/plugins/tiddlywiki/highlight/highlightblock.js b/plugins/tiddlywiki/highlight/highlightblock.js index 3bc515fd63..fabefb8270 100644 --- a/plugins/tiddlywiki/highlight/highlightblock.js +++ b/plugins/tiddlywiki/highlight/highlightblock.js @@ -8,11 +8,11 @@ Wraps up the fenced code blocks parser for highlight and use in TiddlyWiki5 \*/ "use strict"; -var TYPE_MAPPINGS_BASE = "$:/config/HighlightPlugin/TypeMappings/"; +const TYPE_MAPPINGS_BASE = "$:/config/HighlightPlugin/TypeMappings/"; -var CodeBlockWidget = require("$:/core/modules/widgets/codeblock.js").codeblock; +const CodeBlockWidget = require("$:/core/modules/widgets/codeblock.js").codeblock; -var hljs = require("$:/plugins/tiddlywiki/highlight/highlight.js"); +const hljs = require("$:/plugins/tiddlywiki/highlight/highlight.js"); if(hljs.getLanguage !== undefined) { // load language definitions @@ -33,7 +33,7 @@ if(hljs.getLanguage !== undefined) { if($tw.browser && !domNode.isTiddlyWikiFakeDom) { hljs.highlightElement(domNode.children[0]); } else { - var text = domNode.textContent; + const text = domNode.textContent; domNode.children[0].innerHTML = hljs.highlight(text,{language: language, ignoreIllegals: true}).value; // If we're using the fakedom then specially save the original raw text if(domNode.isTiddlyWikiFakeDom) { diff --git a/plugins/tiddlywiki/highlight/readme.tid b/plugins/tiddlywiki/highlight/readme.tid index 402f84a69c..dd19ef236c 100644 --- a/plugins/tiddlywiki/highlight/readme.tid +++ b/plugins/tiddlywiki/highlight/readme.tid @@ -1,6 +1,6 @@ title: $:/plugins/tiddlywiki/highlight/readme -\define highlightVersion() 11.4.0 +\define highlightVersion() 11.11.1 This plugin provides syntax highlighting of code blocks using version <> of [[highlight.js|https://github.com/isagalaev/highlight.js]] from Ivan Sagalaev. This plugin does not work on browsers that do not fully support ~JavaScript ES6 (2015). If you need highlight.js running on those legacy browsers, you would need to install the "Highlight (Legacy)" plugin instead. Here's a [[ES6 compatibility table|https://caniuse.com/?search=es6]]. diff --git a/plugins/tiddlywiki/highlight/styles.tid b/plugins/tiddlywiki/highlight/styles.tid index fb1badeb97..58f9aa8826 100644 --- a/plugins/tiddlywiki/highlight/styles.tid +++ b/plugins/tiddlywiki/highlight/styles.tid @@ -1,5 +1,5 @@ title: $:/plugins/tiddlywiki/highlight/styles -tags: [[$:/tags/Stylesheet]] +tags: [[$:/tags/Stylesheet]] [[$:/tags/Stylesheet/Highlight]] pre.hljs { padding: 0; diff --git a/plugins/tiddlywiki/highlight/usage.tid b/plugins/tiddlywiki/highlight/usage.tid index fc1d8f12c7..1416a77522 100644 --- a/plugins/tiddlywiki/highlight/usage.tid +++ b/plugins/tiddlywiki/highlight/usage.tid @@ -2,9 +2,6 @@ title: $:/plugins/tiddlywiki/highlight/usage \import $:/plugins/tiddlywiki/highlight/readme -\define jsDelivrLink() https://www.jsdelivr.com/package/gh/highlightjs/cdn-release?path=build%2Flanguages&version=$(highlightVersion)$ -\define unpkgLink() https://unpkg.com/browse/@highlightjs/cdn-assets@$(highlightVersion)$/languages/ - ! Usage Syntax highlighting is triggered when you add language information to code blocks defined with triple backticks or with the `<$codeblock>` widget. For fenced code blocks, specify the code's language immediately after the first set of backticks: @@ -17,9 +14,20 @@ Syntax highlighting is triggered when you add language information to code block ! Adding Themes -You can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet]]. The available themes can be found on GitHub: +The available themes can be found from the following CDNs: -https://github.com/isagalaev/highlight.js/tree/master/src/styles +* jsDelivr +* unpkg + +You can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet/Highlight]], with type set to `text/css`. + +Then, check the new theme in the following list and uncheck others: + +<$list filter="[all[tiddlers+shadows]tag[$:/tags/Stylesheet/Highlight]sort[title]!is[draft]]"> + +<$checkbox tag="$:/tags/Stylesheet"> <$link/> + + ! Supporting Additional Languages @@ -31,8 +39,8 @@ You can import language definitions into <$text text="JavaScript"/> tiddlers, wi First, locate the language file(s) you need. You can fetch the files from the following CDNs: -* > class="tc-tiddlylink-external" target="_blank">jsDelivr -* > class="tc-tiddlylink-external" target="_blank">unpkg +* jsDelivr +* unpkg Then, click the button below to create a "highlight" module. Copy and paste the content of a language file into the the text area. Give your tiddler a meaningful title so you can keep track of the languages you've installed. You may choose to either create one tiddler per language or lump all language definitions into one tiddler. Save and reload your wiki. diff --git a/plugins/tiddlywiki/markdown/markdown-it-tiddlywiki.js b/plugins/tiddlywiki/markdown/markdown-it-tiddlywiki.js index ad55daa75d..e76470c4d1 100644 --- a/plugins/tiddlywiki/markdown/markdown-it-tiddlywiki.js +++ b/plugins/tiddlywiki/markdown/markdown-it-tiddlywiki.js @@ -133,25 +133,20 @@ function findNextMatch(ruleinfo,pos) { } // Add inline rule "macrocall" to parse <> -var MacroCallRegEx = /<<([^\s>"'=]+)[^>]*>>/g; function tw_macrocallinline(state,silent) { - var match, max, pos = state.pos; + var ruleinfo = pluginOpts.inlineRules.macrocallinline; - // Check start - max = state.posMax; - if(state.src.charCodeAt(pos) !== 0x3C || state.src.charCodeAt(pos+1) !== 0x3C /* << */|| pos + 3 >= max) { + var pos = state.pos; + var matchIndex = findNextMatch(ruleinfo,pos); + if(matchIndex === undefined || matchIndex !== pos) { return false; } - MacroCallRegEx.lastIndex = pos; - match = MacroCallRegEx.exec(state.src); - if(!match || match.index !== pos) { return false; } - if(!silent) { var token = state.push('tw_expr','',0); - token.content = state.src.slice(pos,pos+match[0].length); + token.content = state.src.slice(pos,ruleinfo.rule.nextCall.end); } - state.pos = MacroCallRegEx.lastIndex; + state.pos = ruleinfo.rule.nextCall.end; return true; } @@ -520,8 +515,10 @@ module.exports = function tiddlyWikiPlugin(markdown,options) { if(pluginOpts.inlineRules.transcludeinline) { md.inline.ruler.before('html_inline','tw_transcludeinline',tw_transcludeinline); } + if(pluginOpts.inlineRules.macrocallinline) { + md.inline.ruler.before('html_inline','tw_macrocallinline',tw_macrocallinline); + } - md.inline.ruler.before('html_inline','tw_macrocallinline',tw_macrocallinline); md.inline.ruler.at('html_inline',extendHtmlInline(md.inline.ruler.__rules__[md.inline.ruler.__find__('html_inline')].fn)); md.block.ruler.after('html_block','tw_block',tw_block,{ alt: [ 'paragraph', 'reference', 'blockquote' ] diff --git a/plugins/tiddlywiki/markdown/styles.tid b/plugins/tiddlywiki/markdown/styles.tid index 4185d43040..156801a06b 100644 --- a/plugins/tiddlywiki/markdown/styles.tid +++ b/plugins/tiddlywiki/markdown/styles.tid @@ -6,6 +6,9 @@ code-body: yes display: block; margin: 0px; } +span.markdown { + display: inline; +} .markdown hr { margin-top: 20px; margin-bottom: 20px; diff --git a/plugins/tiddlywiki/markdown/wrapper.js b/plugins/tiddlywiki/markdown/wrapper.js index 83da544b95..f1277ba74b 100755 --- a/plugins/tiddlywiki/markdown/wrapper.js +++ b/plugins/tiddlywiki/markdown/wrapper.js @@ -213,11 +213,20 @@ MarkdownParser.prototype.md = createMarkdownEngine(markdownOpts,pluginOpts); function MarkdownParser(type,text,options) { var env = {} var md = this.md; - var mdTree = md.parse(text,env); - var textToParse = '
\n' + md.renderer.render(mdTree,md.options,env) + '
'; + var mdTree, textToParse; - //console.log(JSON.stringify(mdTree,null,2)); - //console.log("\n----------------\n" + textToParse); + if(options.parseAsInline) { + mdTree = md.parseInline(text,env); + textToParse = '' + md.renderer.render(mdTree,md.options,env) + ''; + } else { + mdTree = md.parse(text,env); + textToParse = '
\n' + md.renderer.render(mdTree,md.options,env) + '
'; + } + + if($tw.log.MARKDOWN) { + console.log(JSON.stringify(mdTree,null,2)); + console.log("\n----------------\n" + textToParse); + } var wikiParser; diff --git a/plugins/tiddlywiki/menubar/styles.tid b/plugins/tiddlywiki/menubar/styles.tid index 26a96be01e..39ec6c6267 100644 --- a/plugins/tiddlywiki/menubar/styles.tid +++ b/plugins/tiddlywiki/menubar/styles.tid @@ -87,8 +87,6 @@ nav.tc-menubar li.tc-menubar-item > button { font-weight: 700; color: <>; color: <>; - fill: <>; - fill: <>; text-decoration: none; padding: 0.5em; margin: 0; @@ -105,16 +103,14 @@ nav.tc-menubar li.tc-menubar-item > button.tc-selected { background: <>; color: <>; color: <>; - fill: <>; - fill: <>; } nav.tc-menubar li.tc-menubar-item svg { transition: none; width: 1em; height: 1em; - fill: <>; - fill: <>; + color: <>; + color: <>; } nav.tc-menubar li.tc-menubar-item .tc-menubar-dropdown-arrow svg { @@ -124,8 +120,8 @@ nav.tc-menubar li.tc-menubar-item .tc-menubar-dropdown-arrow svg { nav.tc-menubar li.tc-menubar-item > a.tc-selected svg, nav.tc-menubar li.tc-menubar-item > button.tc-selected svg { - fill: <>; - fill: <>; + color: <>; + color: <>; } nav.tc-menubar li.tc-menubar-item > a:hover, @@ -135,8 +131,6 @@ nav.tc-menubar li.tc-menubar-item > button:hover { background: <>; color: <>; color: <>; - fill: <>; - fill: <>; border-radius: 0; text-decoration: none; } @@ -148,8 +142,6 @@ nav.tc-menubar li.tc-menubar-item > button:active { background: <>; color: <>; color: <>; - fill: <>; - fill: <>; border-radius: 0; text-decoration: none; } diff --git a/plugins/tiddlywiki/mobiledragdrop/files/LICENSE b/plugins/tiddlywiki/mobiledragdrop/files/LICENSE deleted file mode 100755 index 48eff026ba..0000000000 --- a/plugins/tiddlywiki/mobiledragdrop/files/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (c) 2013 Tim Ruffles - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/plugins/tiddlywiki/mobiledragdrop/files/ios-drag-drop.js b/plugins/tiddlywiki/mobiledragdrop/files/ios-drag-drop.js deleted file mode 100755 index 9804141c3d..0000000000 --- a/plugins/tiddlywiki/mobiledragdrop/files/ios-drag-drop.js +++ /dev/null @@ -1,477 +0,0 @@ -(function(doc) { - -function _exposeIosHtml5DragDropShim(config) { - log = noop; // noOp, remove this line to enable debugging - - var coordinateSystemForElementFromPoint; - - var DRAG_OVER_EMIT_FREQ = 50; - - function main() { - config = config || {}; - if (!config.hasOwnProperty("simulateAnchorClick")) config.simulateAnchorClick = true; - - coordinateSystemForElementFromPoint = navigator.userAgent.match(/OS [1-4](?:_\d+)+ like Mac/) ? "page" : "client"; - - var div = doc.createElement('div'); - var dragDiv = 'draggable' in div; - var evts = 'ondragstart' in div && 'ondrop' in div; - - var needsPatch = !(dragDiv || evts) || /iPad|iPhone|iPod|Android/.test(navigator.userAgent); - log((needsPatch ? "" : "not ") + "patching html5 drag drop"); - - if(!needsPatch) { - return; - } - - if(!config.enableEnterLeave) { - DragDrop.prototype.synthesizeEnterLeave = noop; - } - - if(config.holdToDrag){ - doc.addEventListener("touchstart", touchstartDelay(config.holdToDrag), {passive:false}); - } - else { - doc.addEventListener("touchstart", touchstart, {passive:false}); - } - } - - function DragDrop(event, el) { - - this.dragData = {}; - this.dragDataTypes = []; - this.dragImage = null; - this.dragImageTransform = null; - this.dragImageWebKitTransform = null; - this.customDragImage = null; - this.customDragImageX = null; - this.customDragImageY = null; - this.el = el || event.target; - this.dragOverTimer = null; - this.lastMoveEvent = null; - - log("dragstart"); - - if (this.dispatchDragStart()) { - this.createDragImage(); - this.listen(); - } - } - - DragDrop.prototype = { - listen: function() { - var move = onEvt(doc, "touchmove", this.move, this); - var end = onEvt(doc, "touchend", ontouchend, this); - var cancel = onEvt(doc, "touchcancel", cleanup, this); - - function ontouchend(event) { - this.dragend(event, event.target); - cleanup.call(this); - } - function cleanup() { - log("cleanup"); - this.dragDataTypes = []; - if (this.dragImage !== null) { - this.dragImage.parentNode.removeChild(this.dragImage); - this.dragImage = null; - this.dragImageTransform = null; - this.dragImageWebKitTransform = null; - } - this.customDragImage = null; - this.customDragImageX = null; - this.customDragImageY = null; - this.el = this.dragData = null; - return [move, end, cancel].forEach(function(handler) { - return handler.off(); - }); - } - }, - move: function(event) { - event.preventDefault(); - var pageXs = [], pageYs = []; - [].forEach.call(event.changedTouches, function(touch) { - pageXs.push(touch.pageX); - pageYs.push(touch.pageY); - }); - - var x = average(pageXs) - (this.customDragImageX || parseInt(this.dragImage.offsetWidth, 10) / 2); - var y = average(pageYs) - (this.customDragImageY || parseInt(this.dragImage.offsetHeight, 10) / 2); - this.translateDragImage(x, y); - - this.synthesizeEnterLeave(event); - this.synthesizeOver(event); - }, - // We use translate instead of top/left because of sub-pixel rendering and for the hope of better performance - // http://www.paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/ - translateDragImage: function(x, y) { - var translate = "translate(" + x + "px," + y + "px) "; - - if (this.dragImageWebKitTransform !== null) { - this.dragImage.style["-webkit-transform"] = translate + this.dragImageWebKitTransform; - } - if (this.dragImageTransform !== null) { - this.dragImage.style.transform = translate + this.dragImageTransform; - } - }, - synthesizeEnterLeave: function(event) { - var target = elementFromTouchEvent(this.el,event) - if (target != this.lastEnter) { - if (this.lastEnter) { - this.dispatchLeave(event); - } - this.lastEnter = target; - if (this.lastEnter) { - this.dispatchEnter(event); - } - } - }, - synthesizeOver: function(event) { - this.lastMoveEvent = event; - if(this.lastEnter && !this.dragOverTimer) { - this.dragOverTimer = setInterval(this.dispatchOver.bind(this), DRAG_OVER_EMIT_FREQ); - } - }, - clearDragOverTimer: function() { - if(this.dragOverTimer) { - clearInterval(this.dragOverTimer); - this.dragOverTimer = null; - } - }, - dragend: function(event) { - - // we'll dispatch drop if there's a target, then dragEnd. - // drop comes first http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#drag-and-drop-processing-model - log("dragend"); - - if (this.lastEnter) { - this.dispatchLeave(event); - } - - var target = elementFromTouchEvent(this.el,event) - if (target) { - log("found drop target " + target.tagName); - this.dispatchDrop(target, event); - } else { - log("no drop target"); - } - - var dragendEvt = doc.createEvent("Event"); - dragendEvt.initEvent("dragend", true, true); - this.el.dispatchEvent(dragendEvt); - this.clearDragOverTimer(); - }, - dispatchDrop: function(target, event) { - var dropEvt = doc.createEvent("Event"); - dropEvt.initEvent("drop", true, true); - - var touch = event.changedTouches[0]; - var x = touch[coordinateSystemForElementFromPoint + 'X']; - var y = touch[coordinateSystemForElementFromPoint + 'Y']; - - var targetOffset = getOffset(target); - - dropEvt.offsetX = x - targetOffset.x; - dropEvt.offsetY = y - targetOffset.y; - - dropEvt.dataTransfer = { - types: this.dragDataTypes, - getData: function(type) { - return this.dragData[type]; - }.bind(this), - dropEffect: "move" - }; - dropEvt.preventDefault = function() { - // https://www.w3.org/Bugs/Public/show_bug.cgi?id=14638 - if we don't cancel it, we'll snap back - }.bind(this); - - once(doc, "drop", function() { - log("drop event not canceled"); - },this); - - target.dispatchEvent(dropEvt); - }, - dispatchEnter: function(event) { - - var enterEvt = doc.createEvent("Event"); - enterEvt.initEvent("dragenter", true, true); - enterEvt.dataTransfer = { - types: this.dragDataTypes, - getData: function(type) { - return this.dragData[type]; - }.bind(this) - }; - - var touch = event.changedTouches[0]; - enterEvt.pageX = touch.pageX; - enterEvt.pageY = touch.pageY; - enterEvt.clientX = touch.clientX; - enterEvt.clientY = touch.clientY; - - this.lastEnter.dispatchEvent(enterEvt); - }, - dispatchOver: function() { - - var overEvt = doc.createEvent("Event"); - overEvt.initEvent("dragover", true, true); - overEvt.dataTransfer = { - types: this.dragDataTypes, - getData: function(type) { - return this.dragData[type]; - }.bind(this) - }; - - var touch = this.lastMoveEvent.changedTouches[0]; - overEvt.pageX = touch.pageX; - overEvt.pageY = touch.pageY; - overEvt.clientX = touch.clientX; - overEvt.clientY = touch.clientY; - - this.lastEnter.dispatchEvent(overEvt); - }, - dispatchLeave: function(event) { - - var leaveEvt = doc.createEvent("Event"); - leaveEvt.initEvent("dragleave", true, true); - leaveEvt.dataTransfer = { - types: this.dragDataTypes, - getData: function(type) { - return this.dragData[type]; - }.bind(this) - }; - - var touch = event.changedTouches[0]; - leaveEvt.pageX = touch.pageX; - leaveEvt.pageY = touch.pageY; - leaveEvt.clientX = touch.clientX; - leaveEvt.clientY = touch.clientY; - - this.lastEnter.dispatchEvent(leaveEvt); - this.lastEnter = null; - this.clearDragOverTimer(); - }, - dispatchDragStart: function() { - var evt = doc.createEvent("Event"); - evt.initEvent("dragstart", true, true); - evt.dataTransfer = { - setData: function(type, val) { - this.dragData[type] = val; - if (this.dragDataTypes.indexOf(type) == -1) { - this.dragDataTypes[this.dragDataTypes.length] = type; - } - return val; - }.bind(this), - setDragImage: function(el, x, y){ - this.customDragImage = el; - this.customDragImageX = x - this.customDragImageY = y - }.bind(this), - dropEffect: "move" - }; - return this.el.dispatchEvent(evt); - }, - createDragImage: function() { - if (this.customDragImage) { - this.dragImage = this.customDragImage.cloneNode(true); - duplicateStyle(this.customDragImage, this.dragImage); - } else { - this.dragImage = this.el.cloneNode(true); - duplicateStyle(this.el, this.dragImage); - } - this.dragImage.style.opacity = "0.5"; - this.dragImage.style.position = "absolute"; - this.dragImage.style.left = "0px"; - this.dragImage.style.top = "0px"; - this.dragImage.style.zIndex = "999999"; - - var transform = this.dragImage.style.transform; - if (typeof transform !== "undefined") { - this.dragImageTransform = ""; - if (transform != "none") { - this.dragImageTransform = transform.replace(/translate\(\D*\d+[^,]*,\D*\d+[^,]*\)\s*/g, ''); - } - } - - var webkitTransform = this.dragImage.style["-webkit-transform"]; - if (typeof webkitTransform !== "undefined") { - this.dragImageWebKitTransform = ""; - if (webkitTransform != "none") { - this.dragImageWebKitTransform = webkitTransform.replace(/translate\(\D*\d+[^,]*,\D*\d+[^,]*\)\s*/g, ''); - } - } - - this.translateDragImage(-9999, -9999); - - doc.body.appendChild(this.dragImage); - } - }; - - // delayed touch start event - function touchstartDelay(delay) { - return function(evt){ - var el = evt.target; - - do { - if (elementIsDraggable(el)) { - var heldItem = function() { - end.off(); - cancel.off(); - scroll.off(); - touchstart(evt); - }; - - var onReleasedItem = function() { - end.off(); - cancel.off(); - scroll.off(); - clearTimeout(timer); - }; - - var timer = setTimeout(heldItem, delay); - - var end = onEvt(el, 'touchend', onReleasedItem, this); - var cancel = onEvt(el, 'touchcancel', onReleasedItem, this); - var scroll = onEvt(window, 'scroll', onReleasedItem, this); - break; - } - } while ((el = el.parentNode) && el !== doc.body); - }; - }; - - // event listeners - function touchstart(evt) { - var el = evt.target; - do { - if (elementIsDraggable(el)) { - handleTouchStartOnAnchor(evt, el); - - evt.preventDefault(); - new DragDrop(evt,el); - break; - } - } while((el = el.parentNode) && el !== doc.body); - } - - function elementIsDraggable(el){ - // if an element is not draggable either explicitly or implicitly we can exit immediately - if(!el.draggable) return false; - - // if an element has been explicitly set to be draggable we're good to go - if(el.hasAttribute("draggable")) return true; - - // otherwise we investigate the implicit option - return (!config.requireExplicitDraggable); - } - - function elementIsAnchor(el){ - return el.tagName.toLowerCase() == "a"; - } - - function handleTouchStartOnAnchor(evt, el){ - // If draggable isn't explicitly set for anchors, then simulate a click event. - // Otherwise plain old vanilla links will stop working. - // https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Touch_events#Handling_clicks - if (!el.hasAttribute("draggable") && elementIsAnchor(el) && config.simulateAnchorClick) { - var clickEvt = document.createEvent("MouseEvents"); - clickEvt.initMouseEvent("click", true, true, el.ownerDocument.defaultView, 1, - evt.screenX, evt.screenY, evt.clientX, evt.clientY, - evt.ctrlKey, evt.altKey, evt.shiftKey, evt.metaKey, 0, null); - el.dispatchEvent(clickEvt); - log("Simulating click to anchor"); - } - } - - // DOM helpers - function elementFromTouchEvent(el,event) { - var touch = event.changedTouches[0]; - var target = doc.elementFromPoint( - touch[coordinateSystemForElementFromPoint + "X"], - touch[coordinateSystemForElementFromPoint + "Y"] - ); - return target; - } - - //calculate the offset position of an element (relative to the window, not the document) - function getOffset(el) { - var rect = el.getBoundingClientRect(); - return { - "x": rect.left, - "y": rect.top - }; - } - - function onEvt(el, event, handler, context) { - if(context) { - handler = handler.bind(context); - } - el.addEventListener(event, handler, {passive:false}); - return { - off: function() { - return el.removeEventListener(event, handler, {passive:false}); - } - }; - } - - function once(el, event, handler, context) { - if(context) { - handler = handler.bind(context); - } - function listener(evt) { - handler(evt); - return el.removeEventListener(event,listener); - } - return el.addEventListener(event,listener); - } - - // duplicateStyle expects dstNode to be a clone of srcNode - function duplicateStyle(srcNode, dstNode) { - // Is this node an element? - if (srcNode.nodeType == 1) { - // Remove any potential conflict attributes - dstNode.removeAttribute("id"); - dstNode.removeAttribute("class"); - dstNode.removeAttribute("style"); - dstNode.removeAttribute("draggable"); - - // Clone the style - var cs = window.getComputedStyle(srcNode); - for (var i = 0; i < cs.length; i++) { - var csName = cs[i]; - dstNode.style.setProperty(csName, cs.getPropertyValue(csName), cs.getPropertyPriority(csName)); - } - - // Pointer events as none makes the drag image transparent to document.elementFromPoint() - dstNode.style.pointerEvents = "none"; - } - - // Do the same for the children - if (srcNode.hasChildNodes()) { - for (var j = 0; j < srcNode.childNodes.length; j++) { - duplicateStyle(srcNode.childNodes[j], dstNode.childNodes[j]); - } - } - } - - // general helpers - function log(msg) { - console.log(msg); - } - - function average(arr) { - if (arr.length === 0) return 0; - return arr.reduce((function(s, v) { - return v + s; - }), 0) / arr.length; - } - - function noop() {} - - main(); - -}; - -if (typeof module === 'object' && typeof module.exports === 'object') { - module.exports = _exposeIosHtml5DragDropShim; -} else if (typeof window !== 'undefined') { - _exposeIosHtml5DragDropShim(window.iosDragDropShim); -} -})(document); \ No newline at end of file diff --git a/plugins/tiddlywiki/mobiledragdrop/files/tiddlywiki.files b/plugins/tiddlywiki/mobiledragdrop/files/tiddlywiki.files deleted file mode 100644 index 5fa76e26cc..0000000000 --- a/plugins/tiddlywiki/mobiledragdrop/files/tiddlywiki.files +++ /dev/null @@ -1,18 +0,0 @@ -{ - "tiddlers": [ - { - "file": "ios-drag-drop.js", - "fields": { - "type": "application/javascript", - "title": "$:/plugins/tiddlywiki/mobiledragdrop/ios-drag-drop.js" - } - }, - { - "file": "LICENSE", - "fields": { - "type": "text/plain", - "title": "$:/plugins/tiddlywiki/mobiledragdrop/license" - } - } - ] -} diff --git a/plugins/tiddlywiki/mobiledragdrop/plugin.info b/plugins/tiddlywiki/mobiledragdrop/plugin.info deleted file mode 100644 index ad4eee717c..0000000000 --- a/plugins/tiddlywiki/mobiledragdrop/plugin.info +++ /dev/null @@ -1,8 +0,0 @@ -{ - "title": "$:/plugins/tiddlywiki/mobiledragdrop", - "name": "Mobile Drag Drop", - "description": "Mobile drag and drop shim", - "author": "Tim Ruffles", - "list": "readme license", - "stability": "STABILITY_0_DEPRECATED" -} diff --git a/plugins/tiddlywiki/mobiledragdrop/rawmarkup.tid b/plugins/tiddlywiki/mobiledragdrop/rawmarkup.tid deleted file mode 100644 index 4359fee3dd..0000000000 --- a/plugins/tiddlywiki/mobiledragdrop/rawmarkup.tid +++ /dev/null @@ -1,7 +0,0 @@ -title: $:/plugins/tiddlywiki/mobiledragdrop/rawmarkup -tags: $:/tags/RawMarkupWikified - -`` diff --git a/plugins/tiddlywiki/mobiledragdrop/readme.tid b/plugins/tiddlywiki/mobiledragdrop/readme.tid deleted file mode 100644 index ae6181f133..0000000000 --- a/plugins/tiddlywiki/mobiledragdrop/readme.tid +++ /dev/null @@ -1,5 +0,0 @@ -title: $:/plugins/tiddlywiki/mobiledragdrop/readme - -This plugin provides a "shim" that enables HTML 5 compatible drag and drop operations on mobile browsers, including iOS and Android. The shim was created by Tim Ruffles and is published at https://github.com/timruffles/ios-html5-drag-drop-shim. - -After installing the plugin it is necessary to save the HTML file a second time before it will be fully enabled. diff --git a/plugins/tiddlywiki/mobiledragdrop/startup.js b/plugins/tiddlywiki/mobiledragdrop/startup.js deleted file mode 100644 index 311bacc547..0000000000 --- a/plugins/tiddlywiki/mobiledragdrop/startup.js +++ /dev/null @@ -1,20 +0,0 @@ -/*\ -title: $:/plugins/tiddlywiki/mobiledragdrop/startup.js -type: application/javascript -module-type: startup - -Startup initialisation - -\*/ - -"use strict"; - -// Export name and synchronous status -exports.name = "mobiledragdrop"; -exports.platforms = ["browser"]; -exports.after = ["startup"]; -exports.synchronous = true; - -exports.startup = function() { - window.addEventListener("touchmove", function() {}); -}; diff --git a/plugins/tiddlywiki/nodewebkitsaver/nodewebkit.js b/plugins/tiddlywiki/nodewebkitsaver/nodewebkit.js deleted file mode 100644 index 85fe21ef5f..0000000000 --- a/plugins/tiddlywiki/nodewebkitsaver/nodewebkit.js +++ /dev/null @@ -1,59 +0,0 @@ -/*\ -title: $:/core/modules/savers/nodewebkit.js -type: application/javascript -module-type: saver - -Handles saving changes in the NW.js environment. Not required by TiddlyDesktop, which re-uses the TiddlyFox saver, but useful if you're embedding a single TiddlyWiki document into a NW.js app. - -\*/ - - -/*jslint node: true, browser: true */ -/*global $tw: false, netscape: false, Components: false */ -"use strict"; - -var NodeWebKitSaver = function(wiki) { -}; - -NodeWebKitSaver.prototype.save = function(text,method,callback) { - // Bail out unless this is a save (rather than a download) - if(method !== "save") { - return false; - } - // Get the pathname of this document - var pathname = document.location.pathname; - // Test for a Windows path of the form /x:/blah/blah - if(/^\/[A-Z]\:\//i.test(pathname)) { - // Remove the leading slash - pathname = pathname.substr(1); - // Convert slashes to backslashes - pathname = pathname.replace(/\//g,"\\"); - } - // Try to save - var fs = require("fs"); - fs.writeFile(pathname,text,callback); - return true; -}; - -/* -Information about this saver -*/ -NodeWebKitSaver.prototype.info = { - name: "nodewebkit", - priority: 1700 -}; - -/* -Static method that returns true if this saver is capable of working -*/ -exports.canSave = function(wiki) { - // Check if we're running under node-webkit - return (typeof process == "object"); -}; - -/* -Create an instance of this saver -*/ -exports.create = function(wiki) { - return new NodeWebKitSaver(wiki); -}; diff --git a/plugins/tiddlywiki/nodewebkitsaver/plugin.info b/plugins/tiddlywiki/nodewebkitsaver/plugin.info deleted file mode 100644 index 5e167036c1..0000000000 --- a/plugins/tiddlywiki/nodewebkitsaver/plugin.info +++ /dev/null @@ -1,7 +0,0 @@ -{ - "title": "$:/plugins/tiddlywiki/nodewebkitsaver", - "name": "nw.js Saver", - "description": "Saver for nw.js", - "list": "readme", - "stability": "STABILITY_0_DEPRECATED" -} diff --git a/plugins/tiddlywiki/nodewebkitsaver/readme.tid b/plugins/tiddlywiki/nodewebkitsaver/readme.tid deleted file mode 100644 index 1662ffae82..0000000000 --- a/plugins/tiddlywiki/nodewebkitsaver/readme.tid +++ /dev/null @@ -1,5 +0,0 @@ -title: $:/plugins/tiddlywiki/nodewebkitsaver/readme - -This plugin provides a ''saver'' module for saving changes when using TiddlyWiki directly under NW.js (previously known as node-webkit). - -[[Source code|https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/plugins/tiddlywiki/nodewebkitsaver]] diff --git a/plugins/tiddlywiki/stacked-view/plugin.info b/plugins/tiddlywiki/stacked-view/plugin.info index 098752ed78..d28ec18685 100644 --- a/plugins/tiddlywiki/stacked-view/plugin.info +++ b/plugins/tiddlywiki/stacked-view/plugin.info @@ -3,5 +3,5 @@ "name": "Stacked View", "description": "Stacked card storyview", "list": "readme", - "stability": "STABILITY_1_EXPERIMENTAL" + "stability": "STABILITY_2_STABLE" } diff --git a/plugins/tiddlywiki/tahoelafs/plugin.info b/plugins/tiddlywiki/tahoelafs/plugin.info deleted file mode 100644 index c0d4e784ca..0000000000 --- a/plugins/tiddlywiki/tahoelafs/plugin.info +++ /dev/null @@ -1,7 +0,0 @@ -{ - "title": "$:/plugins/tiddlywiki/tahoelafs", - "name": "TahoeLAFS", - "description": "Tahoe-LAFS saver", - "list": "readme", - "stability": "STABILITY_0_DEPRECATED" -} diff --git a/plugins/tiddlywiki/tahoelafs/readme.tid b/plugins/tiddlywiki/tahoelafs/readme.tid deleted file mode 100644 index ed3c1d40e5..0000000000 --- a/plugins/tiddlywiki/tahoelafs/readme.tid +++ /dev/null @@ -1,7 +0,0 @@ -title: $:/plugins/tiddlywiki/tahoelafs/readme - -This plugin provides a ''saver'' module for saving changes under the [[Tahoe Least Authority File System|https://tahoe-lafs.org/]]. - -At this point it is largely for experimentation by @zooko. - -[[Source code|https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/plugins/tiddlywiki/tahoelafs]] diff --git a/plugins/tiddlywiki/tahoelafs/saver.js b/plugins/tiddlywiki/tahoelafs/saver.js deleted file mode 100644 index bfbe7f3222..0000000000 --- a/plugins/tiddlywiki/tahoelafs/saver.js +++ /dev/null @@ -1,52 +0,0 @@ -/*\ -title: $:/plugins/tiddlywiki/tahoelafs/saver.js -type: application/javascript -module-type: saver - -A bare bones saver for Tahoe-LAFS. It just PUTs the new HTML file back to the server at the same URL. - -\*/ - -"use strict"; - -/* -Select the appropriate saver module and set it up -*/ -var TahoeSaver = function(wiki) { - this.wiki = wiki; -}; - -TahoeSaver.prototype.save = function(text) { - // Do the HTTP post - var http = new XMLHttpRequest(); - http.open("PUT",document.location.toString(),true); - http.onreadystatechange = function() { - if(http.readyState == 4 && http.status == 200) { - window.alert("Saved to Tahoe-LAFS: " + http.responseText); - } - }; - http.send(text); - return true; -}; - -/* -Information about this saver -*/ -TahoeSaver.prototype.info = { - name: "tahoelafs", - priority: 1000 -}; - -/* -Static method that returns true if this saver is capable of working -*/ -exports.canSave = function(wiki) { - return true; -}; - -/* -Create an instance of this saver -*/ -exports.create = function(wiki) { - return new TahoeSaver(wiki); -}; diff --git a/plugins/tiddlywiki/text-slicer/styles.tid b/plugins/tiddlywiki/text-slicer/styles.tid index 370b4d6845..328486c812 100644 --- a/plugins/tiddlywiki/text-slicer/styles.tid +++ b/plugins/tiddlywiki/text-slicer/styles.tid @@ -96,7 +96,7 @@ div.tc-edit-template-document-tiddler-heading a:hover { .tc-view-template-document-tiddler-heading-icon svg, .tc-edit-template-document-tiddler-heading-icon svg { - fill: <>; + color: <>; } .tc-view-template-document-tiddler { diff --git a/plugins/tiddlywiki/tiddlyweb/config-tiddlers-filter.tid b/plugins/tiddlywiki/tiddlyweb/config-tiddlers-filter.tid index 4e5c951dbb..e71bb119a3 100644 --- a/plugins/tiddlywiki/tiddlyweb/config-tiddlers-filter.tid +++ b/plugins/tiddlywiki/tiddlyweb/config-tiddlers-filter.tid @@ -1,2 +1,2 @@ -title: $:/config/Server/ExternalFilters/[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[[$:/library/sjcl.js]] -[[$:/core]] +title: $:/config/Server/ExternalFilters/[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] -[[$:/library/sjcl.js]] -[[$:/core]] text: yes diff --git a/plugins/tiddlywiki/tiddlyweb/save-offline.tid b/plugins/tiddlywiki/tiddlyweb/save-offline.tid index 591a1e438a..06984d6527 100644 --- a/plugins/tiddlywiki/tiddlyweb/save-offline.tid +++ b/plugins/tiddlywiki/tiddlyweb/save-offline.tid @@ -2,6 +2,6 @@ title: $:/plugins/tiddlywiki/tiddlyweb/save/offline \import [subfilter{$:/core/config/GlobalImportFilter}] \define saveTiddlerFilter() -[is[tiddler]] -[[$:/boot/boot.css]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[[$:/plugins/tiddlywiki/filesystem]] -[[$:/plugins/tiddlywiki/tiddlyweb]] -[prefix[$:/temp/]] +[sort[title]] $(publishFilter)$ +[is[tiddler]] -[[$:/boot/boot.css]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] -[[$:/plugins/tiddlywiki/filesystem]] -[[$:/plugins/tiddlywiki/tiddlyweb]] -[prefix[$:/temp/]] +[sort[title]] $(publishFilter)$ \end {{$:/core/templates/tiddlywiki5.html}} diff --git a/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js b/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js index b33d3b5e6c..38e034df7d 100644 --- a/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js +++ b/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js @@ -175,7 +175,7 @@ TiddlyWebAdaptor.prototype.getSkinnyTiddlers = function(callback) { $tw.utils.httpRequest({ url: this.host + "recipes/" + this.recipe + "/tiddlers.json", data: { - filter: "[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[[$:/library/sjcl.js]] -[[$:/core]]" + filter: "[all[tiddlers]] -[[$:/isEncrypted]] -[prefix[$:/temp/]] -[prefix[$:/status/]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] -[[$:/library/sjcl.js]] -[[$:/core]]" }, callback: function(err,data) { // Check for errors diff --git a/plugins/tiddlywiki/tour/plugin.info b/plugins/tiddlywiki/tour/plugin.info index d21d0b3833..701a10cc7b 100644 --- a/plugins/tiddlywiki/tour/plugin.info +++ b/plugins/tiddlywiki/tour/plugin.info @@ -4,5 +4,5 @@ "description": "A tour of TiddlyWiki", "list": "readme docs settings", "dependents": ["$:/plugins/tiddlywiki/confetti","$:/plugins/tiddlywiki/dynannotate"], - "stability": "STABILITY_1_EXPERIMENTAL" + "stability": "STABILITY_2_STABLE" } diff --git a/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid b/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid index c2c14a7b05..c5f27662c3 100644 --- a/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid +++ b/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid @@ -3,7 +3,6 @@ title: $:/plugins/tiddlywiki/tour/simplified-tiddler-with-tags \whitespace trim \define tag-pill-styles() background-color:$(backgroundColor)$; -fill:$(foregroundColor)$; color:$(foregroundColor)$; \end diff --git a/plugins/tiddlywiki/tour/styles.tid b/plugins/tiddlywiki/tour/styles.tid index 7bb434dabe..1a9bf871bf 100644 --- a/plugins/tiddlywiki/tour/styles.tid +++ b/plugins/tiddlywiki/tour/styles.tid @@ -66,7 +66,6 @@ tags: $:/tags/Stylesheet .tc-tour-panel-controls .tc-tour-panel-list-button.tc-selected { color: <>; - fill: <>; background: <>; } @@ -104,7 +103,6 @@ tags: $:/tags/Stylesheet border-radius: 1em; background: <>; color: <>; - fill: <>; text-transform: uppercase; } @@ -167,7 +165,7 @@ tags: $:/tags/Stylesheet } .tc-tour-task svg { - fill: <>; + color: <>; vertical-align: middle; width: 1.2em; height: 1.2em; @@ -240,7 +238,6 @@ tags: $:/tags/Stylesheet .tc-tour-settings-tour-step-launch-button:hover { background: <>; color: <>; - fill: <>; } .tc-tour-settings-tour-step-heading-step-number { diff --git a/plugins/tiddlywiki/tw5.com-docs/plugin.info b/plugins/tiddlywiki/tw5.com-docs/plugin.info index e81d705929..2eb42fca74 100644 --- a/plugins/tiddlywiki/tw5.com-docs/plugin.info +++ b/plugins/tiddlywiki/tw5.com-docs/plugin.info @@ -3,5 +3,5 @@ "name": "TW5.com Docs", "description": "Documentation from tiddlywiki.com", "list": "readme", - "stability": "STABILITY_1_EXPERIMENTAL" + "stability": "STABILITY_2_STABLE" } diff --git a/plugins/tiddlywiki/twitter-archivist/archivist.js b/plugins/tiddlywiki/twitter-archivist/archivist.js index 69b7e8153b..a3f40fc510 100644 --- a/plugins/tiddlywiki/twitter-archivist/archivist.js +++ b/plugins/tiddlywiki/twitter-archivist/archivist.js @@ -7,6 +7,8 @@ Utility class for manipulating Twitter archives \*/ +/* eslint-disable no-await-in-loop */ +/* eslint-disable require-await */ "use strict"; function TwitterArchivist(options) { @@ -228,13 +230,22 @@ TwitterArchivistSourceBrowser.prototype.init = async function() { TwitterArchivistSourceBrowser.prototype.processFiles = async function(dirPath,encoding,callback) { const dirHandle = await this.walkDirectory(dirPath.split("/")); - for await (const [filename, fileHandle] of dirHandle.entries()) { + const asyncIterator = dirHandle.entries(); + await AsyncIteratorForEach(asyncIterator, async ([filename, fileHandle]) => { const contents = await fileHandle.getFile(); callback({ filename: filename, - contents: arrayBufferToBase64(await contents.arrayBuffer()) + contents: encoding === "base64" ? arrayBufferToBase64(await contents.arrayBuffer()) : await contents.text() }); - } + }); + + // for await (const [filename, fileHandle] of dirHandle.entries()) { + // const contents = await fileHandle.getFile(); + // callback({ + // filename: filename, + // contents: arrayBufferToBase64(await contents.arrayBuffer()) + // }); + // } }; TwitterArchivistSourceBrowser.prototype.loadTwitterJsData = async function(filePath) { @@ -309,6 +320,26 @@ function arrayBufferToBase64(arrayBuffer) { return base64; } + +async function AsyncIteratorForEach(iter, callback) { + + // Start the iteration + try { + while(true) { + // Await the next result object + const { value, done } = await iter.next(); + if(done) break; + await callback(value); + } + } finally { + // If the iterator supports cleanup, call it + if(typeof iter.return === "function") { + await iter.return(); + } + } +} + + exports.TwitterArchivist = TwitterArchivist; exports.TwitterArchivistSourceNodeJs = TwitterArchivistSourceNodeJs; exports.TwitterArchivistSourceBrowser = TwitterArchivistSourceBrowser; diff --git a/plugins/tiddlywiki/upgrade/save-tiddler-filter.tid b/plugins/tiddlywiki/upgrade/save-tiddler-filter.tid index 988cdae540..4f94addf43 100644 --- a/plugins/tiddlywiki/upgrade/save-tiddler-filter.tid +++ b/plugins/tiddlywiki/upgrade/save-tiddler-filter.tid @@ -1,6 +1,6 @@ title: $:/plugins/tiddlywiki/upgrade/save-tiddler-filter \define saveTiddlerFilter() -[is[tiddler]] -[[$:/UpgradeLibrary]] -[[$:/plugins/tiddlywiki/upgrade]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] +[is[tiddler]] -[[$:/UpgradeLibrary]] -[[$:/plugins/tiddlywiki/upgrade]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[has[plugin-type]field:platform[server]] +[sort[title]] \end {{$:/core/templates/tiddlywiki5.html}} diff --git a/plugins/tiddlywiki/upgrade/styles.tid b/plugins/tiddlywiki/upgrade/styles.tid index 944c6a9183..d6b880be1c 100644 --- a/plugins/tiddlywiki/upgrade/styles.tid +++ b/plugins/tiddlywiki/upgrade/styles.tid @@ -20,11 +20,11 @@ tags: $:/tags/Stylesheet .tc-upgrade-wizard svg.tc-image-download-button { width: 14em; height: 14em; - fill: <>; + color: <>; } .tc-upgrade-wizard:hover svg.tc-image-download-button { - fill: <>; + color: <>; } .tc-upgrade-wizard svg .tc-image-download-button-ring { diff --git a/plugins/tiddlywiki/wikitext-serialize/plugin.info b/plugins/tiddlywiki/wikitext-serialize/plugin.info new file mode 100644 index 0000000000..e841084579 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/plugin.info @@ -0,0 +1,7 @@ +{ + "title": "$:/plugins/tiddlywiki/wikitext-serialize", + "name": "WikitextSerialize", + "description": "Serialize wikitext abstract syntax tree back to wikitext format", + "list": "readme", + "stability": "STABILITY_1_EXPERIMENTAL" +} diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/codeblock.js b/plugins/tiddlywiki/wikitext-serialize/rules/codeblock.js new file mode 100644 index 0000000000..d1f4ff06ee --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/codeblock.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/codeblock.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "codeblock"; + +exports.serialize = function(tree,serialize) { + return "```" + tree.attributes.language.value + "\n" + tree.attributes.code.value + "\n```\n\n"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/codeinline.js b/plugins/tiddlywiki/wikitext-serialize/rules/codeinline.js new file mode 100644 index 0000000000..d3fbea957b --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/codeinline.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/codeinline.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "codeinline"; + +exports.serialize = function(tree,serialize) { + return "`" + serialize(tree.children) + "`"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/commentblock.js b/plugins/tiddlywiki/wikitext-serialize/rules/commentblock.js new file mode 100644 index 0000000000..7c0dd0dcd3 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/commentblock.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/commentblock.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "commentblock"; + +exports.serialize = function(tree,serialize) { + return tree.text + "\n\n" + serialize(tree.children); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/commentinline.js b/plugins/tiddlywiki/wikitext-serialize/rules/commentinline.js new file mode 100644 index 0000000000..5f66a06a20 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/commentinline.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/commentinline.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "commentinline"; + +exports.serialize = function(tree,serialize) { + return tree.text; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/conditional.js b/plugins/tiddlywiki/wikitext-serialize/rules/conditional.js new file mode 100644 index 0000000000..53f37f09c3 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/conditional.js @@ -0,0 +1,42 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/conditional.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "conditional"; + +exports.serialize = function(tree,serialize) { + // We always have "if" at the beginning + var filterCondition = tree.attributes.filter.value; + var ifClauseText = serialize(tree.children[0].children); + var result = "<%if " + filterCondition + "%>" + ifClauseText; + function serializeElseIf(listNode) { + // We receive the only list node inside list-template node + if(!listNode || listNode.type !== "list") { + return "<%else%>" + serialize(listNode); + } + var filter = listNode.attributes.filter.value || ""; + var bodyText = serialize(listNode.children[0].children); + var nextConditionResult = ""; + // May has an only any node inside list-empty node + if(listNode.children[1] && listNode.children[1].children[0]) { + if(listNode.children[1].children[0].type === "list") { + nextConditionResult = serializeElseIf(listNode.children[1].children[0]); + } else { + nextConditionResult = "<%else%>" + serialize(listNode.children[1]); + } + } + return "<%elseif " + filter + "%>" + bodyText + nextConditionResult; + } + if(tree.children[1] && tree.children[1].children) { + result += serializeElseIf(tree.children[1].children[0]); + } + result += "<%endif%>"; + if(tree.isBlock) { + result += "\n\n"; + } + return result; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/dash.js b/plugins/tiddlywiki/wikitext-serialize/rules/dash.js new file mode 100644 index 0000000000..a296398787 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/dash.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/dash.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "dash"; + +exports.serialize = function(tree,serialize) { + return tree.entity === "–" ? "--" : "---"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/bold.js b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/bold.js new file mode 100644 index 0000000000..6d2be877a0 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/bold.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/bold.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "bold"; + +exports.serialize = function(tree,serialize) { + return "''" + serialize(tree.children) + "''"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/italic.js b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/italic.js new file mode 100644 index 0000000000..9d941ba9a0 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/italic.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/italic.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "italic"; + +exports.serialize = function(tree,serialize) { + return "//" + serialize(tree.children) + "//"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/strikethrough.js b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/strikethrough.js new file mode 100644 index 0000000000..1a7d12e98d --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/strikethrough.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/strikethrough.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "strikethrough"; + +exports.serialize = function(tree,serialize) { + return "~~" + serialize(tree.children) + "~~"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/subscript.js b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/subscript.js new file mode 100644 index 0000000000..f8aea56445 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/subscript.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/subscript.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "subscript"; + +exports.serialize = function(tree,serialize) { + return ",," + serialize(tree.children) + ",,"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/superscript.js b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/superscript.js new file mode 100644 index 0000000000..3aa70e5cb5 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/superscript.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/superscript.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "superscript"; + +exports.serialize = function(tree,serialize) { + return "^^" + serialize(tree.children) + "^^"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/underscore.js b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/underscore.js new file mode 100644 index 0000000000..1b8d4b3b3e --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/underscore.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/emphasis/underscore.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "underscore"; + +exports.serialize = function(tree,serialize) { + return "__" + serialize(tree.children) + "__"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/entity.js b/plugins/tiddlywiki/wikitext-serialize/rules/entity.js new file mode 100644 index 0000000000..caef19c53c --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/entity.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/entity.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "entity"; + +exports.serialize = function(tree,serialize) { + return tree.entity; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/extlink.js b/plugins/tiddlywiki/wikitext-serialize/rules/extlink.js new file mode 100644 index 0000000000..a2f4b66d16 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/extlink.js @@ -0,0 +1,17 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/extlink.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "extlink"; + +exports.serialize = function(tree,serialize) { + if(tree.type === "text") { + return "~" + tree.text; + } else if(tree.type === "element" && tree.tag === "a") { + return tree.attributes.href.value; + } +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeblock.js b/plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeblock.js new file mode 100644 index 0000000000..7446c73037 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeblock.js @@ -0,0 +1,24 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeblock.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "filteredtranscludeblock"; + +exports.serialize = function(tree,serialize) { + var serialized = "{{{" + tree.attributes.filter.value; + // Tooltip text + if(tree.attributes.tooltip) serialized += "|" + tree.attributes.tooltip.value; + // Template title + if(tree.attributes.template) serialized += "||" + tree.attributes.template.value; + serialized += "}}"; + // Inline styles + if(tree.attributes.style) serialized += tree.attributes.style.value; + serialized += "}"; + // CSS classes + if(tree.attributes.itemClass) serialized += "." + tree.attributes.itemClass.value.split(" ").join("."); + return serialized + "\n\n"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeinline.js b/plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeinline.js new file mode 100644 index 0000000000..aabbe686a9 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeinline.js @@ -0,0 +1,15 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeinline.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "filteredtranscludeinline"; + +exports.serialize = function(tree,serialize) { + var filteredtranscludeblock = require("$:/plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeblock.js"); + var result = filteredtranscludeblock.serialize(tree,serialize); + return result.trimEnd(); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/fnprocdef.js b/plugins/tiddlywiki/wikitext-serialize/rules/fnprocdef.js new file mode 100644 index 0000000000..72d1f2380c --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/fnprocdef.js @@ -0,0 +1,24 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/fnprocdef.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "fnprocdef"; + +exports.serialize = function(tree,serialize) { + // Type of definition: "function", "procedure", or "widget" + var type = tree.isFunctionDefinition ? "function" : (tree.isProcedureDefinition ? "procedure" : "widget"); + // Name of the function, procedure, or widget + var name = tree.attributes.name.value; + // Parameters with default values + var params = tree.params.map(function(param) { + return param.name + (param.default ? ':"' + param.default + '"' : ""); + }).join(", "); + // Definition text + var definition = tree.attributes.value.value; + // Construct the serialized string, concat the children because pragma rule wrap everything below it as children + return "\\" + type + " " + name + "(" + params + ")\n" + definition + "\n\\end\n\n" + serialize(tree.children) + "\n"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/hardlinebreaks.js b/plugins/tiddlywiki/wikitext-serialize/rules/hardlinebreaks.js new file mode 100644 index 0000000000..17c525bb2c --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/hardlinebreaks.js @@ -0,0 +1,20 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/hardlinebreaks.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "hardlinebreaks"; + +exports.serialize = function(tree,serialize) { + var text = tree.tag === "br" ? "\n" : (tree.text || ""); + if(tree.isRuleStart) { + return '"""\n' + text; + } + if(tree.isRuleEnd) { + return text + '"""'; + } + return text + serialize(tree.children); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/heading.js b/plugins/tiddlywiki/wikitext-serialize/rules/heading.js new file mode 100644 index 0000000000..6602ab4b08 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/heading.js @@ -0,0 +1,17 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/heading.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "heading"; + +exports.serialize = function(tree,serialize) { + // Get heading level from number after `h` + var headingLevel = parseInt(tree.tag.substr(1),10); + var classes = tree.attributes.class ? tree.attributes.class.value.split(" ").join(".") : ""; + var headingText = serialize(tree.children); + return Array(headingLevel + 1).join("!") + (classes ? "." + classes : "") + " " + headingText + "\n\n"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/horizrule.js b/plugins/tiddlywiki/wikitext-serialize/rules/horizrule.js new file mode 100644 index 0000000000..21203794e8 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/horizrule.js @@ -0,0 +1,13 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/horizrule.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "horizrule"; + +exports.serialize = function(tree,serialize) { + return "---\n\n"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/html.js b/plugins/tiddlywiki/wikitext-serialize/rules/html.js new file mode 100644 index 0000000000..ff9b7be67e --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/html.js @@ -0,0 +1,30 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/html.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "html"; + +exports.serialize = function(tree,serialize) { + var tag = tree.tag; + var attributes = tree.orderedAttributes.map(function(attribute) { + return $tw.utils.serializeAttribute(attribute); + }).join(" "); + // Children + var children = tree.children ? serialize(tree.children) : ""; + var result = ""; + // Self-closing tag + if(tree.isSelfClosing) { + result += "<" + tag + (attributes ? " " + attributes : "") + "/>"; + } else { + // Opening and closing tags + result += "<" + tag + (attributes ? " " + attributes : "") + ">" + children + ""; + } + if(tree.isBlock) { + result += "\n\n"; + } + return result; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/image.js b/plugins/tiddlywiki/wikitext-serialize/rules/image.js new file mode 100644 index 0000000000..51dcc7399d --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/image.js @@ -0,0 +1,18 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/image.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "image"; + +exports.serialize = function(tree,serialize) { + var width = tree.attributes.width ? " " + $tw.utils.serializeAttribute(tree.attributes.width) : ""; + var height = tree.attributes.height ? " " + $tw.utils.serializeAttribute(tree.attributes.height) : ""; + var padSpace = width || height ? " " : ""; + var tooltip = tree.attributes.tooltip ? tree.attributes.tooltip.value + "|" : ""; + var source = tree.attributes.source.value; + return "[img" + width + height + padSpace + "[" + tooltip + source + "]]"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/import.js b/plugins/tiddlywiki/wikitext-serialize/rules/import.js new file mode 100644 index 0000000000..76cf8f6658 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/import.js @@ -0,0 +1,15 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/import.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "import"; + +exports.serialize = function(tree,serialize) { + var filter = tree.attributes.filter.value; + // Sibling below the pragma become children, so we append the serialized children to the end.. + return "\\import " + filter + "\n" + serialize(tree.children); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/list.js b/plugins/tiddlywiki/wikitext-serialize/rules/list.js new file mode 100644 index 0000000000..ff51b3193b --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/list.js @@ -0,0 +1,76 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/list.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "list"; + +var listTypes = require("$:/core/modules/parsers/wikiparser/rules/list.js").listTypes; +var listTags = Object.values(listTypes).map(function(type) { + return type.listTag; +}); +/* +Check if the child is a nested list or a simple line of list item +*/ +function isListNode(node) { + return node && node.type === "element" && listTags.includes(node.tag); +} +var itemTags = Object.values(listTypes).map(function(type) { + return type.itemTag; +}); + +exports.serialize = function (tree,serialize) { + // Helper function to find the marker for a given list container tag and item tag + function findMarker(listTag, itemTag) { + for(var key in listTypes) { + if(listTypes[key].listTag === listTag && listTypes[key].itemTag === itemTag) { + return key; // Return the marker associated with the list tag and item tag + } + } + return ""; // Return empty string if no matching marker is found + } + + // Recursive function to serialize list nodes, handling nested lists and formatting output + function serializeList(node, markerPrefix) { + var result = []; + if(node.type === "element" && isListNode(node)) { + node.children.forEach(function (child) { + if(itemTags.includes(child.tag)) { + var currentMarker = findMarker(node.tag, child.tag); + // Handle class attributes + var classAttr = child.attributes && child.attributes.class ? "." + child.attributes.class.value : ""; + /** + * same level text nodes may be split into multiple children, and separated by deeper list sub-tree. + * We collect same level text nodes into this list, and concat then submit them before enter deeper list. + */ + var content = []; + $tw.utils.each(child.children,function (subNode) { + if(isListNode(subNode)) { + // Recursive call for nested lists + if(content.length > 0) { + result.push(markerPrefix + currentMarker + classAttr + " " + content.join("").trim()); + content = []; + } + result.push(serializeList(subNode, markerPrefix + currentMarker).trim()) + } else { + content.push(serialize(subNode)) ; + } + return ""; // Default return for unhandled node types + }); + // prepend `#` mark to a new line, if it has content (and has or hasn't nested list), or if it has no content and also no nested list + if(content.length > 0 || child.children.length === 0) { + result.push(markerPrefix + currentMarker + classAttr + " " + content.join("").trim()); + content = []; + } + } + }); + } + return result.join("\n"); + } + + // Begin serialization from the root node, with an empty string as the initial marker prefix + return serializeList(tree, "") + "\n\n"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/macrocallblock.js b/plugins/tiddlywiki/wikitext-serialize/rules/macrocallblock.js new file mode 100644 index 0000000000..fff204891b --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/macrocallblock.js @@ -0,0 +1,27 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/macrocallblock.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "macrocallblock"; + +exports.serialize = function (node) { + var result = "<<"; + // Macro name + if(node.attributes && node.attributes["$variable"]) { + result += node.attributes["$variable"].value; + } + // Append ordered arguments if any + if(node.orderedAttributes) { + node.orderedAttributes.forEach(function (attribute) { + if(attribute.name !== "$variable") { + result += " " + $tw.utils.serializeAttribute(attribute,{assignmentSymbol:":"}); + } + }); + } + result += ">>\n\n"; + return result; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/macrocallinline.js b/plugins/tiddlywiki/wikitext-serialize/rules/macrocallinline.js new file mode 100644 index 0000000000..1797fe26f9 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/macrocallinline.js @@ -0,0 +1,15 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/macrocallinline.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "macrocallinline"; + +exports.serialize = function (tree,serialize) { + var macrocallblock = require("$:/plugins/tiddlywiki/wikitext-serialize/rules/macrocallblock.js"); + var result = macrocallblock.serialize(tree,serialize); + return result.trimEnd(); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/macrodef.js b/plugins/tiddlywiki/wikitext-serialize/rules/macrodef.js new file mode 100644 index 0000000000..7b17b86387 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/macrodef.js @@ -0,0 +1,21 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/macrodef.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "macrodef"; + +exports.serialize = function(tree,serialize) { + var name = tree.attributes.name.value; + var params = tree.params.map(function(param) { + return param.name + (param.default ? ":" + param.default : ""); + }).join(","); + var definition = tree.attributes.value.value; + if(tree.isBlock) { + return "\\define " + name + "(" + params + ") " + definition + "\n\n" + serialize(tree.children); + } + return "\\define " + name + "(" + params + ")\n" + definition + "\n\\end\n\n" + serialize(tree.children); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/parameters.js b/plugins/tiddlywiki/wikitext-serialize/rules/parameters.js new file mode 100644 index 0000000000..83c84a169a --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/parameters.js @@ -0,0 +1,16 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/parameters.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "parameters"; + +exports.serialize = function(tree,serialize) { + var params = tree.orderedAttributes.map(function(param) { + return param.name + (param.value ? ":" + param.value : ""); + }).join(","); + return "\\parameters(" + params + ")\n\n" + serialize(tree.children); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/parsermode.js b/plugins/tiddlywiki/wikitext-serialize/rules/parsermode.js new file mode 100644 index 0000000000..b25e5ae761 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/parsermode.js @@ -0,0 +1,14 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/parsermode.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "parsermode"; + +exports.serialize = function(tree,serialize) { + var mode = tree.parseAsInline ? "inline" : "block"; + return "\\parsermode " + mode + "\n\n" + serialize(tree.children); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/prettyextlink.js b/plugins/tiddlywiki/wikitext-serialize/rules/prettyextlink.js new file mode 100644 index 0000000000..418f3bdb7b --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/prettyextlink.js @@ -0,0 +1,15 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/prettyextlink.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "prettyextlink"; + +exports.serialize = function(tree,serialize) { + var tooltip = tree.children[0].text; + var url = tree.attributes.href.value; + return "[ext[" + (tooltip !== url ? tooltip + "|" : "") + url + "]]"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/prettylink.js b/plugins/tiddlywiki/wikitext-serialize/rules/prettylink.js new file mode 100644 index 0000000000..9b33e16ffe --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/prettylink.js @@ -0,0 +1,15 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/prettylink.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "prettylink"; + +exports.serialize = function(tree,serialize) { + var text = tree.children[0].text; + var target = tree.attributes.to ? tree.attributes.to.value : tree.attributes.href.value; + return "[[" + text + (text !== target ? "|" + target : "") + "]]"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/quoteblock.js b/plugins/tiddlywiki/wikitext-serialize/rules/quoteblock.js new file mode 100644 index 0000000000..e028d395da --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/quoteblock.js @@ -0,0 +1,24 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/quoteblock.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "quoteblock"; + +exports.serialize = function (tree,serialize) { + var result = []; + if(tree.type === "element" && tree.tag === "blockquote") { + // tree.attributes.class.value: "tc-quote" + result.push("<<<" + tree.attributes.class.value); + tree.children.forEach(function (child) { + if(child.type === "element" && child.tag === "p") { + result.push(serialize(child.children).trim()); + } + }); + result.push("<<<"); + } + return result.join("\n") + "\n\n"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/rules.js b/plugins/tiddlywiki/wikitext-serialize/rules/rules.js new file mode 100644 index 0000000000..110e113a36 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/rules.js @@ -0,0 +1,26 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/rules.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "rules"; + +exports.serialize = function (tree,serialize) { + var result = []; + if(tree.attributes.action && tree.attributes.rules) { + // tree.attributes.action.value: "except" + // tree.attributes.rules.value: "ruleone ruletwo rulethree" + result.push("\\rules " + tree.attributes.action.value + " " + tree.attributes.rules.value); + tree.children.forEach(function (child) { + if(child.type === "void" && child.attributes.action && child.attributes.rules) { + // child.attributes.action.value: "only" + // child.attributes.rules.value: "ruleone ruletwo rulethree" + result.push("\\rules " + child.attributes.action.value + " " + child.attributes.rules.value); + } + }); + } + return result.join("\n"); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/styleblock.js b/plugins/tiddlywiki/wikitext-serialize/rules/styleblock.js new file mode 100644 index 0000000000..1b9be3f2f7 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/styleblock.js @@ -0,0 +1,57 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/styleblock.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "styleblock"; + +exports.serialize = function(tree,serialize) { + var lines = []; + var classes = []; + var styles = []; + + // Same classes are set to each children. So only collect from first child. + var node = tree.children[0]; + if(node && node.attributes && node.attributes.class) { + var nodeClasses = node.attributes.class.value.split(" "); + for(var j = 0; j < nodeClasses.length; j++) { + if(classes.indexOf(nodeClasses[j]) === -1) { + classes.push(nodeClasses[j]); + } + } + } + if(node && node.attributes && node.attributes.style) { + var nodeStyles = node.attributes.style.value.split(";"); + for(var k = 0; k < nodeStyles.length; k++) { + var style = nodeStyles[k].trim(); + if(style && styles.indexOf(style) === -1) { + styles.push(style); + } + } + } + + // Add the style block header, sort styles first, and classes later. Original order is not preserved intentionally for simplicity. + if(classes.length > 0 || styles.length > 0) { + if(styles.length > 0) { + lines.push("@@"); + lines.push(styles.join(";")); + lines.push(";\n"); + } + if(classes.length > 0) { + lines.push("@@."); + lines.push(classes.join(".")); + lines.push("\n"); + } + } + // Serialize each child node and add to result + for(var i = 0; i < tree.children.length; i++) { + lines.push(serialize(tree.children[i])); + } + var result = lines.join("").replace(/\s+$/, ""); + // Add the closing @@ for the style block + result += "\n@@\n\n"; + return result; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/styleinline.js b/plugins/tiddlywiki/wikitext-serialize/rules/styleinline.js new file mode 100644 index 0000000000..f94a0b87c8 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/styleinline.js @@ -0,0 +1,28 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/styleinline.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "styleinline"; + +exports.serialize = function(tree,serialize) { + var result = "@@"; + // Add styles if present + if(tree.attributes && tree.attributes.style) { + result += tree.attributes.style.value.trim(); + } + // Add classes if present + if(tree.attributes && tree.attributes.class) { + result += "." + tree.attributes.class.value.trim().split(" ").join("."); + } + var children = serialize(tree.children); + // Ensure at least one space after the style/class + if(children && children[0] !== " ") { + result += " "; + } + result += children + "@@"; + return result; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/syslink.js b/plugins/tiddlywiki/wikitext-serialize/rules/syslink.js new file mode 100644 index 0000000000..26237b4972 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/syslink.js @@ -0,0 +1,18 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/syslink.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "syslink"; + +exports.serialize = function(tree,serialize) { + // Check if the link is suppressed. Tree may only have text, no children and attributes + var isSuppressed = tree.children && tree.children[0].text.substr(0,1) === "~"; + var serialized = isSuppressed ? "~" : ""; + // Append the link text + serialized += tree.attributes ? tree.attributes.to.value : tree.text; + return serialized; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/table.js b/plugins/tiddlywiki/wikitext-serialize/rules/table.js new file mode 100644 index 0000000000..6a8ee57e79 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/table.js @@ -0,0 +1,39 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/table.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "table"; + +exports.serialize = function(tree,serialize) { + var serialized = ""; + // Iterate over the table rows + for(var i = 0; i < tree.children.length; i++) { + var rowContainer = tree.children[i]; + // Iterate over the rows in the row container + for(var j = 0; j < rowContainer.children.length; j++) { + var row = rowContainer.children[j]; + // Start the row + serialized += "|"; + // Iterate over the cells in the row + for(var k = 0; k < row.children.length; k++) { + var cell = row.children[k]; + // if is th, append additional `!` + if(cell.tag === "th") { + serialized += "!"; + } + // Cell content + serialized += serialize(cell.children); + // End the cell + serialized += "|"; + } + // End the row + serialized += "\n"; + } + } + // Return the completed block + return serialized + "\n"; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/transcludeblock.js b/plugins/tiddlywiki/wikitext-serialize/rules/transcludeblock.js new file mode 100644 index 0000000000..695883615e --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/transcludeblock.js @@ -0,0 +1,57 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/transcludeblock.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "transcludeblock"; + +exports.serialize = function(tree,serialize) { + var result = "{{"; + function handleTransclude(transcludeNode) { + // Handle field + if(transcludeNode.attributes.$field) { + result += "!!" + transcludeNode.attributes.$field.value; + } + // Check for index attribute + if(transcludeNode.attributes.$index) { + result += "##" + transcludeNode.attributes.$index.value; + } + // Handle template + var tiddlerTitle = tree.attributes.tiddler ? tree.attributes.tiddler.value : undefined; + if(transcludeNode.attributes.$tiddler && transcludeNode.attributes.$tiddler.value !== tiddlerTitle) { + result += "||" + transcludeNode.attributes.$tiddler.value; + } + // Check for parameters + var params = []; + var excludedAttributes = ["tiddler", "$tiddler", "$field", "$index", "$template"]; + for(var key in transcludeNode.attributes) { + if(excludedAttributes.indexOf(key) === -1) { + params.push(transcludeNode.attributes[key].value); + } + } + if(params.length > 0) { + result += "|" + params.join("|"); + } + } + function handleTiddler(tiddlerNode) { + // Check for tiddler attribute + if(tree.attributes.tiddler.value) { + result += tree.attributes.tiddler.value; + } + $tw.utils.each(tree.children, function(child) { + if(child.type === "transclude") { + handleTransclude(child); + } + }); + } + if(tree.type === "tiddler") { + handleTiddler(tree); + } else if(tree.type === "transclude") { + handleTransclude(tree); + } + result += "}}\n\n"; + return result; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/transcludeinline.js b/plugins/tiddlywiki/wikitext-serialize/rules/transcludeinline.js new file mode 100644 index 0000000000..8c68d004a1 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/transcludeinline.js @@ -0,0 +1,15 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/transcludeinline.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "transcludeinline"; + +exports.serialize = function(tree,serialize) { + var transcludeblock = require("$:/plugins/tiddlywiki/wikitext-serialize/rules/transcludeblock.js"); + var result = transcludeblock.serialize(tree,serialize); + return result.trimEnd(); +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/typedblock.js b/plugins/tiddlywiki/wikitext-serialize/rules/typedblock.js new file mode 100644 index 0000000000..839d612e54 --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/typedblock.js @@ -0,0 +1,16 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/typedblock.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "typedblock"; + +exports.serialize = function (tree,serialize) { + if(tree.type === "void") { + return "$$$" + tree.parseType + (tree.renderType ? " > " + tree.renderType : "") + "\n" + tree.text + "\n$$$\n\n"; + } + return ""; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/wikilink.js b/plugins/tiddlywiki/wikitext-serialize/rules/wikilink.js new file mode 100644 index 0000000000..19be36223c --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/wikilink.js @@ -0,0 +1,17 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/wikilink.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "wikilink"; + +exports.serialize = function(tree,serialize) { + var isSuppressed = tree.children && tree.children[0].text.substr(0,1) === $tw.config.textPrimitives.unWikiLink; + + var serialized = isSuppressed ? $tw.config.textPrimitives.unWikiLink : ""; + serialized += tree.attributes ? tree.attributes.to.value : tree.text; + return serialized; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/rules/wikilinkprefix.js b/plugins/tiddlywiki/wikitext-serialize/rules/wikilinkprefix.js new file mode 100644 index 0000000000..e9635a918b --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/rules/wikilinkprefix.js @@ -0,0 +1,15 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/rules/wikilinkprefix.js +type: application/javascript +module-type: wikiruleserializer +\*/ + +"use strict"; + +exports.name = "wikilinkprefix"; + +exports.serialize = function(tree,serialize) { + var serialized = $tw.config.textPrimitives.unWikiLink; + serialized += tree.text; + return serialized; +}; diff --git a/plugins/tiddlywiki/wikitext-serialize/utils/parsetree.js b/plugins/tiddlywiki/wikitext-serialize/utils/parsetree.js new file mode 100644 index 0000000000..fb1c4e47bc --- /dev/null +++ b/plugins/tiddlywiki/wikitext-serialize/utils/parsetree.js @@ -0,0 +1,94 @@ +/*\ +title: $:/plugins/tiddlywiki/wikitext-serialize/utils/parsetree.js +type: application/javascript +module-type: utils + +Parse tree utility functions. + +\*/ + +"use strict"; + +function initSerializers(Parser) { + if(Parser && !Parser.prototype.serializers) { + Parser.prototype.serializers = {}; + $tw.modules.forEachModuleOfType("wikiruleserializer",function(title,module) { + var rule = module.name; + var serialize = module.serialize; + Parser.prototype.serializers[rule] = serialize; + }); + } +}; + +/* +Utility to get the (similarly but not 1:1 equal) original wikitext of a parse tree node or array of nodes. +Based on `node.rule` metadata added in `wikiparser.js`. +*/ +exports.serializeWikitextParseTree = function serializeWikitextParseTree(tree,options) { + options = options || {}; + var output = []; + if($tw.utils.isArray(tree)) { + $tw.utils.each(tree,function(node) { + output.push(serializeWikitextParseTree(node,options)); + }); + } else if(tree) { + if(tree.type === "text" && !tree.rule) { + output.push(tree.text); + } else { + var Parser = $tw.utils.getParser("text/vnd.tiddlywiki"); + // initialize the serializers only once on first use + initSerializers(Parser); + var serializeOneRule = Parser.prototype.serializers[tree.rule]; + if(serializeOneRule) { + output.push(serializeOneRule(tree,serializeWikitextParseTree)); + } else if(tree.rule === "parseblock") { + output.push(serializeWikitextParseTree(tree.children,options),"\n\n"); + } else { + // when no rule is found, just serialize the children, for example the void nodes + output.push(serializeWikitextParseTree(tree.children,options)); + } + } + } + return output.join(""); +}; + +/* +Serialize a parsed attribute node +*/ +exports.serializeAttribute = function(node,options) { + options = options || {}; + if(!node || typeof node !== "object" || !node.name || !node.type) { + return null; + } + // If name is number, means it is a positional attribute and name is omitted + var positional = parseInt(node.name) >= 0, + // `=` in a widget and might be `:` in a macro + assign = positional ? "" : (options.assignmentSymbol || "="), + attributeString = positional ? "" : node.name; + if(node.type === "string") { + if(node.value === "true") { + return attributeString; + } + attributeString += assign + '"' + node.value + '"'; + } else if(node.type === "filtered") { + attributeString += assign + "{{{" + node.filter + "}}}"; + } else if(node.type === "indirect") { + attributeString += assign + "{{" + node.textReference + "}}"; + } else if(node.type === "substituted") { + attributeString += assign + "`" + node.rawValue + "`"; + } else if(node.type === "macro") { + if(node.value && typeof node.value === "object" && node.value.type === "macrocall") { + var params = node.value.params.map(function(param) { + return param.value; + }).join(" "); + attributeString += assign + "<<" + node.value.name + " " + params + ">>"; + } else { + // Unsupported macro structure + return null; + } + } else { + // Unsupported type + return null; + } + return attributeString; +}; diff --git a/plugins/tiddlywiki/xlsx-utils/importer.js b/plugins/tiddlywiki/xlsx-utils/importer.js index 28a735e478..fd8ed75268 100644 --- a/plugins/tiddlywiki/xlsx-utils/importer.js +++ b/plugins/tiddlywiki/xlsx-utils/importer.js @@ -21,6 +21,7 @@ var XLSXImporter = function(options) { this.importSpec = options.importSpec || this.wiki.getTiddlerText(DEFAULT_IMPORT_SPEC_TITLE); this.logger = new $tw.utils.Logger("xlsx-utils"); this.results = []; + this.nextAutoTitle = 1; if(JSZip) { this.processWorkbook(); } @@ -50,6 +51,8 @@ XLSXImporter.prototype.processSheet = function(sheetImportSpecTitle) { this.sheetImportSpec = this.wiki.getTiddler(sheetImportSpecTitle); if(this.sheetImportSpec) { this.sheetName = this.sheetImportSpec.fields["import-sheet-name"]; + this.skipRowsTop = $tw.utils.parseInt(this.sheetImportSpec.fields["skip-rows-top"] || "0"); + this.applyTags = this.sheetImportSpec.fields["import-tags"] || ""; this.sheet = this.workbook.Sheets[this.sheetName]; if(!this.sheet) { this.logger.alert("Missing sheet '" + this.sheetName + "'"); @@ -57,11 +60,15 @@ XLSXImporter.prototype.processSheet = function(sheetImportSpecTitle) { // Get the size of the sheet this.sheetSize = this.measureSheet(this.sheet); // Read the column names from the first row - this.columnsByName = this.findColumns(this.sheet,this.sheetSize); + this.columnsByName = this.findColumns(this.sheet,this.sheetSize,this.skipRowsTop); // Iterate through the rows - for(this.row=this.sheetSize.startRow+1; this.row<=this.sheetSize.endRow; this.row++) { - // Iterate through the row import specifiers - $tw.utils.each(this.sheetImportSpec.fields.list || [],this.processRow.bind(this)); + const startRow = this.sheetSize.startRow + this.skipRowsTop + 1; + const endRow = this.sheetSize.endRow; + if(startRow < endRow) { + for(this.row=startRow; this.row<=endRow; this.row++) { + // Iterate through the row import specifiers + $tw.utils.each(this.sheetImportSpec.fields.list || [],this.processRow.bind(this)); + } } } } @@ -85,9 +92,17 @@ XLSXImporter.prototype.processRow = function(rowImportSpecTitle) { // Save the tiddler if not skipped if(!this.skipTiddler) { if(!this.tiddlerFields.title) { - this.logger.alert("Missing title field for " + JSON.stringify(this.tiddlerFields)); + var titleTemplate = this.rowImportSpec.fields["import-title-template"] || "Imported $autoindex$"; + this.tiddlerFields.title = this.wiki.getSubstitutedText(titleTemplate,$tw.rootWidget,{ + substitutions: [ + {name: "autoindex", value: $tw.utils.pad(this.nextAutoTitle++,5)} + ] + }); } - this.results.push(this.tiddlerFields); + if(this.applyTags) { + this.tiddlerFields.tags = this.applyTags; + } + this.results.push(this.tiddlerFields); } } }; @@ -102,10 +117,6 @@ XLSXImporter.prototype.processRowByColumn = function() { self.tiddlerFields[name] = cell.w; } }); - // Skip the tiddler entirely if it doesn't have a title - if(!this.tiddlerFields.title) { - this.skipTiddler = true; - } }; XLSXImporter.prototype.processRowByField = function() { @@ -133,7 +144,7 @@ XLSXImporter.prototype.processField = function(fieldImportSpecTitle) { value = cell.v.toString(); break; case "string": - // Intentional fall-through + // falls through default: value = cell.w; break; @@ -182,15 +193,16 @@ XLSXImporter.prototype.measureSheet = function(sheet) { } }; -XLSXImporter.prototype.findColumns = function(sheet,sheetSize) { +XLSXImporter.prototype.findColumns = function(sheet,sheetSize,skipRowsTop) { + skipRowsTop = skipRowsTop || 0; var columnsByName = {}; for(var col=sheetSize.startCol; col<=sheetSize.endCol; col++) { - var cell = sheet[XLSX.utils.encode_cell({c: col, r: sheetSize.startRow})], + var cell = sheet[XLSX.utils.encode_cell({c: col, r: sheetSize.startRow + skipRowsTop})], columnName; if(cell) { columnName = cell.w; if(columnName) { - columnsByName[columnName] = col; + columnsByName[columnName] = col; } } } diff --git a/readme.md b/readme.md index 14fda9f98c..8934f4e0b6 100644 --- a/readme.md +++ b/readme.md @@ -1,9 +1,9 @@

Welcome

Welcome to TiddlyWiki, a non-linear personal web notebook that anyone can use and keep forever, independently of any corporation.

TiddlyWiki is a complete interactive wiki in JavaScript. It can be used as a single HTML file in the browser or as a powerful Node.js application. It is highly customisable: the entire user interface is itself implemented in hackable WikiText.

Demo

Learn more and see it in action at https://tiddlywiki.com/

Developer Documentation

Developer documentation is in progress at https://tiddlywiki.com/dev/

Pull Request Previews

Pull request previews courtesy of Netlify

Deploys by Netlify

Join the Community

Official Forums

https://talk.tiddlywiki.org/

The new official forum for talking about TiddlyWiki: requests for help, announcements of new releases and plugins, debating new features, or just sharing experiences. You can participate via the associated website, or subscribe via email.

talk.tiddlywiki.org is a community run service that we host and maintain ourselves. The modest running costs are covered by community contributions.

Google Groups

For the convenience of existing users, we also continue to operate the original TiddlyWiki group (hosted on Google Groups since 2005): https://groups.google.com/group/TiddlyWiki -

Developer Forums

GitHub Stats

There are several resources for developers to learn more about TiddlyWiki and to discuss and contribute to its development.

Twitter

Other Forums

Documentation

There is also a discussion group specifically for discussing TiddlyWiki documentation improvement initiatives: https://groups.google.com/group/tiddlywikidocs +

Developer Forums

GitHub Stats

There are several resources for developers to learn more about TiddlyWiki and to discuss and contribute to its development.

Other Forums

Documentation

There is also a discussion group specifically for discussing TiddlyWiki documentation improvement initiatives: https://groups.google.com/group/tiddlywikidocs

-


Installing TiddlyWiki on Node.js

TiddlyWiki is a SingleFileApplication, which is easy to use. For advanced users and developers there is a possibility to use a Node.js client / server configuration. This configuration is also used to build the TiddlyWiki SinglePageApplication

  1. Install Node.js
    • Linux:
      Debian/Ubuntu:
      apt install nodejs
      May need to be followed up by:
      apt install npm
      Arch Linux
      yay -S tiddlywiki
      (installs node and tiddlywiki)
    • Mac
      brew install node
    • Android
    • Other
  2. Open a command line terminal and type:
    npm install -g tiddlywiki
    If it fails with an error you may need to re-run the command as an administrator:
    sudo npm install -g tiddlywiki (Mac/Linux)
  3. Ensure TiddlyWiki is installed by typing:
    tiddlywiki --version
    • In response, you should see TiddlyWiki report its current version (eg "5.3.7-prerelease". You may also see other debugging information reported.)
  4. Try it out:
    1. tiddlywiki mynewwiki --init server to create a folder for a new wiki that includes server-related components
    2. tiddlywiki mynewwiki --listen to start TiddlyWiki
    3. Visit http://127.0.0.1:8080/ in your browser
    4. Try editing and creating tiddlers
  5. Optionally, make an offline copy:
    • click the +


      Installing TiddlyWiki on Node.js

      TiddlyWiki is a SingleFileApplication, which is easy to use. For advanced users and developers there is a possibility to use a Node.js client / server configuration. This configuration is also used to build the TiddlyWiki SinglePageApplication

      1. Install Node.js
        • Linux:
          Debian/Ubuntu:
          apt install nodejs
          May need to be followed up by:
          apt install npm
          Arch Linux
          yay -S tiddlywiki
          (installs node and tiddlywiki)
        • Mac
          brew install node
        • Android
        • Other
      2. Open a command line terminal and type:
        npm install -g tiddlywiki
        If it fails with an error you may need to re-run the command as an administrator:
        sudo npm install -g tiddlywiki (Mac/Linux)
      3. Ensure TiddlyWiki is installed by typing:
        tiddlywiki --version
        • In response, you should see TiddlyWiki report its current version (eg "5.3.8". You may also see other debugging information reported.)
      4. Try it out:
        1. tiddlywiki mynewwiki --init server to create a folder for a new wiki that includes server-related components
        2. tiddlywiki mynewwiki --listen to start TiddlyWiki
        3. Visit http://127.0.0.1:8080/ in your browser
        4. Try editing and creating tiddlers
      5. Optionally, make an offline copy:
        • click the diff --git a/themes/tiddlywiki/seamless/base.tid b/themes/tiddlywiki/seamless/base.tid index 21656aa9e9..0f07c35295 100644 --- a/themes/tiddlywiki/seamless/base.tid +++ b/themes/tiddlywiki/seamless/base.tid @@ -94,7 +94,7 @@ html:-webkit-full-screen { /* Adjust the colour of the page controls */ body.tc-body .tc-page-controls svg { - fill: <>; + color: <>; } /* Adjust the colour of the sidebar selected tabs */ diff --git a/themes/tiddlywiki/snowwhite/base.tid b/themes/tiddlywiki/snowwhite/base.tid index 3ffd2c3f86..1d12a858c1 100644 --- a/themes/tiddlywiki/snowwhite/base.tid +++ b/themes/tiddlywiki/snowwhite/base.tid @@ -12,41 +12,41 @@ tags: [[$:/tags/Stylesheet]] } .tc-tiddler-info { - <> + box-shadow: inset 1px 2px 3px rgba(0,0,0,0.1); } @media screen { .tc-tiddler-frame { - <> + box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3); } } @media (max-width: <>) { .tc-tiddler-frame { - <> + box-shadow: none; } } .tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg { - <> + transition: fill 150ms ease-in-out; } .tc-tiddler-controls button.tc-selected, .tc-page-controls button.tc-selected { - <> + filter: drop-shadow(0px -1px 2px rgba(0,0,0,0.25)); } .tc-tiddler-frame input.tc-edit-texteditor, .tc-tiddler-frame select.tc-edit-texteditor { - <> + box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15); } .tc-edit-tags { - <> + box-shadow: inset 0 1px 8px rgba(0, 0, 0, 0.15); } .tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor { - <> + box-shadow: none border: none; outline: none; } @@ -56,59 +56,59 @@ textarea.tc-edit-texteditor { } canvas.tc-edit-bitmapeditor { - <> + box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5); } .tc-drop-down { border-radius: 4px; - <> + box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5); } .tc-block-dropdown { border-radius: 4px; - <> + box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5); } .tc-modal { border-radius: 6px; - <> + box-shadow: 0 3px 7px rgba(0,0,0,0.3); } .tc-modal-footer { border-radius: 0 0 6px 6px; - <>; + box-shadow: inset 0 1px 0 #fff; } .tc-alert { border-radius: 6px; - <> + box-shadow: 0 3px 7px rgba(0,0,0,0.6); } .tc-notification { border-radius: 6px; - <> + box-shadow: 0 3px 7px rgba(0,0,0,0.3); text-shadow: 0 1px 0 rgba(255,255,255, 0.8); } .tc-sidebar-lists .tc-tab-set .tc-tab-divider { border-top: none; height: 1px; - <> + background-image: linear-gradient(to right, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%); } .tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button { - <> + background-image: linear-gradient(to right, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%); } .tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected { - <> + background-image: linear-gradient(to right, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%); } .tc-message-box img { - <> + box-shadow: 1px 1px 3px rgba(0,0,0,0.5); } .tc-plugin-info { - <> + box-shadow: 1px 1px 3px rgba(0,0,0,0.5) } diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index c795ad362e..241d68b55c 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -93,13 +93,14 @@ button:-moz-focusring, input:-moz-focusring, textarea:-moz-focusring, select:-mo html button { line-height: 1.2; color: <>; - fill: <>; background: <>; border-color: <>; + cursor: pointer; } -button:disabled svg { - fill: <>; +button:disabled { + cursor: default; + color: <>; } /* @@ -124,7 +125,7 @@ body.tc-body { <> color: <>; background-color: <>; - fill: <>; + fill: currentColor; } <>; + color: <>; } /* @@ -602,7 +604,6 @@ button svg, button img, label svg, label img { border: none; cursor: pointer; color: <>; - fill: <>; } button:disabled.tc-btn-invisible { @@ -628,10 +629,6 @@ html body.tc-body .tc-btn-boxed svg { color: <>; } -html body.tc-body .tc-btn-boxed:hover svg { - fill: <>; -} - .tc-btn-rounded { font-size: 0.5em; line-height: 2; @@ -645,7 +642,7 @@ html body.tc-body .tc-btn-boxed:hover svg { html body.tc-body .tc-btn-rounded svg { font-size: 1.6666em; - fill: <>; + color: <>; } .tc-btn-rounded:hover { @@ -654,14 +651,10 @@ html body.tc-body .tc-btn-rounded svg { color: <>; } -html body.tc-body .tc-btn-rounded:hover svg { - fill: <>; -} - .tc-btn-icon svg { height: 1em; width: 1em; - fill: <>; + color: <>; } @@ -685,7 +678,6 @@ html body.tc-body .tc-btn-rounded:hover svg { margin: 4px 8px 4px 8px; background: <>; color: <>; - fill: <>; border: none; border-radius: 2px; font-size: 1.2em; @@ -698,7 +690,6 @@ html body.tc-body .tc-btn-rounded:hover svg { height: 2em; width: 2em; vertical-align: middle; - fill: <>; } .tc-primary-btn { @@ -711,7 +702,6 @@ html body.tc-body .tc-btn-rounded:hover svg { .tc-sidebar-lists button { color: <>; - fill: <>; } .tc-sidebar-lists button.tc-btn-mini { @@ -752,11 +742,11 @@ button svg.tc-image-button, button .tc-image-button img { .tc-unfold-banner svg, .tc-fold-banner svg { height: 0.75em; - fill: <>; + color: <>; } .tc-unfold-banner:hover svg, .tc-fold-banner:hover svg { - fill: <>; + color: <>; } .tc-fold-banner { @@ -911,11 +901,11 @@ button.tc-btn-invisible.tc-remove-tag-button { } .tc-topbar svg { - fill: <>; + color: <>; } .tc-topbar button:hover svg { - fill: <>; + color: <>; } @media (max-width: <>) { @@ -928,14 +918,14 @@ button.tc-btn-invisible.tc-remove-tag-button { .tc-sidebar-header { color: <>; - fill: <>; } .tc-sidebar-header .tc-title a.tc-tiddlylink-resolves { font-weight: normal; } -.tc-sidebar-header .tc-sidebar-lists p { +.tc-sidebar-header .tc-sidebar-lists p, +.tc-sidebar-tools-item { margin-top: 3px; margin-bottom: 3px; } @@ -977,11 +967,11 @@ button.tc-btn-invisible.tc-remove-tag-button { } .tc-page-controls svg { - fill: <>; + color: <>; } .tc-page-controls button:hover svg, .tc-page-controls a:hover svg { - fill: <>; + color: <>; } .tc-sidebar-lists .tc-menu-list-item { @@ -1139,7 +1129,6 @@ button.tc-btn-invisible.tc-remove-tag-button { .tc-view-field-name { width: 1%; /* Makes this column be as narrow as possible */ - white-space: nowrap; vertical-align: top; text-align: right; font-style: italic; @@ -1268,7 +1257,7 @@ button.tc-btn-invisible.tc-remove-tag-button { .tc-tiddler-controls button svg, .tc-tiddler-controls button img, .tc-search button svg, .tc-search a svg { - fill: <>; + color: <>; } .tc-tiddler-controls button svg, .tc-tiddler-controls button img { @@ -1283,12 +1272,12 @@ button.tc-btn-invisible.tc-remove-tag-button { .tc-tiddler-controls button.tc-selected svg, .tc-page-controls button.tc-selected svg { - fill: <>; + color: <>; } .tc-tiddler-controls button.tc-btn-invisible:hover svg, .tc-search button:hover svg, .tc-search a:hover svg { - fill: <>; + color: <>; } @media print { @@ -1416,7 +1405,6 @@ html body.tc-body.tc-single-tiddler-window { vertical-align: middle; background-color: <>; color: <>; - fill: <>; border-radius: 4px; padding: 3px; margin: 2px 0 2px 4px; @@ -1447,7 +1435,6 @@ html body.tc-body.tc-single-tiddler-window { .tc-editor-toolbar button:hover { background-color: <>; - fill: <>; color: <>; } @@ -1528,43 +1515,43 @@ html body.tc-body.tc-single-tiddler-window { */ .tc-page-controls svg.tc-image-new-button { - fill: <>; + color: <>; } .tc-page-controls svg.tc-image-options-button { - fill: <>; + color: <>; } .tc-page-controls svg.tc-image-save-button { - fill: <>; + color: <>; } .tc-tiddler-controls button svg.tc-image-info-button { - fill: <>; + color: <>; } .tc-tiddler-controls button svg.tc-image-edit-button { - fill: <>; + color: <>; } .tc-tiddler-controls button svg.tc-image-close-button { - fill: <>; + color: <>; } .tc-tiddler-controls button svg.tc-image-delete-button { - fill: <>; + color: <>; } .tc-tiddler-controls button svg.tc-image-cancel-button { - fill: <>; + color: <>; } .tc-tiddler-controls button svg.tc-image-done-button { - fill: <>; + color: <>; } .tc-page-controls svg.tc-image-layout-button { - fill: <>; + color: <>; } /* @@ -1704,7 +1691,7 @@ html body.tc-body.tc-single-tiddler-window { .tc-edit-field-remove svg { height: 1em; width: 1em; - fill: <>; + color: <>; vertical-align: middle; } @@ -1818,7 +1805,7 @@ html body.tc-body.tc-single-tiddler-window { .tc-btn-dropdown svg, .tc-btn-dropdown img { height: 1em; width: 1em; - fill: <>; + color: <>; } .tc-drop-down-wrapper { @@ -1841,15 +1828,15 @@ html body.tc-body.tc-single-tiddler-window { } .tc-drop-down button svg, .tc-drop-down a svg { - fill: <>; + color: <>; } .tc-drop-down button:disabled svg { - fill: <>; + color: <>; } .tc-drop-down button.tc-btn-invisible:hover svg { - fill: <>; + color: <>; } .tc-drop-down .tc-drop-down-info { @@ -2336,7 +2323,6 @@ html body.tc-body.tc-single-tiddler-window { .tc-manager-list-item-heading-selected { font-weight: bold; color: <>; - fill: <>; background-color: <>; } @@ -2463,7 +2449,7 @@ html body.tc-body.tc-single-tiddler-window { } .tc-alert-toolbar svg { - fill: <>; + color: <>; } .tc-alert-subtitle { @@ -2520,14 +2506,12 @@ html body.tc-body.tc-single-tiddler-window { border-bottom: none; background: <>; color: <>; - fill: <>; } .tc-drafts-list a:hover { text-decoration: none; background: <>; color: <>; - fill: <>; } .tc-drafts-list a svg { @@ -2556,13 +2540,16 @@ html body.tc-body.tc-single-tiddler-window { display: flex; text-shadow: none; border: 1px solid <>; - fill: <>; background-color: <>; margin: 0.5em 0 0.5em 0; padding: 4px; align-items: center; } +.tc-plugin-info svg { + color: <>; +} + .tc-sidebar-lists a.tc-tiddlylink.tc-plugin-info { color: <>; } @@ -2604,11 +2591,14 @@ a.tc-tiddlylink.tc-plugin-info:hover { text-decoration: none; background-color: <>; color: <>; - fill: <>; +} + +a.tc-tiddlylink.tc-plugin-info:hover svg { + color: <>; } a.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk > svg { - fill: <>; + color: <>; } a.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk .tc-plugin-info-stability { @@ -2732,7 +2722,6 @@ a.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk .tc-plugin-info-sta font-weight: bold; background: green; color: white; - fill: white; border-radius: 4px; padding: 3px; } @@ -2921,7 +2910,7 @@ input.tc-palette-manager-colour-input { width: 0.7em; height: 0.7em; vertical-align: middle; - fill: <>; + color: <>; } .tc-table-of-contents ol { @@ -3044,7 +3033,6 @@ html body.tc-dirty svg.tc-image-save-button-dynamic .tc-image-save-button-dynami } html body.tc-dirty span.tc-dirty-indicator, html body.tc-dirty span.tc-dirty-indicator svg { - fill: <>; color: <>; } @@ -3131,7 +3119,7 @@ html body.tc-dirty span.tc-dirty-indicator, html body.tc-dirty span.tc-dirty-ind .tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg, .tc-thumbnail-wrapper:hover .tc-thumbnail-icon img { - fill: #fff; + color: #fff; <> } @@ -3238,7 +3226,7 @@ html body.tc-dirty span.tc-dirty-indicator, html body.tc-dirty span.tc-dirty-ind } .tc-tree svg { - fill: #acacac; + color: #acacac; } .tc-tree span svg { @@ -3355,7 +3343,6 @@ span.tc-translink > a:first-child { } .tc-test-case-result-icon { - fill: #fff; padding: 0.25em; display: inline-block; line-height: 0; @@ -3364,6 +3351,10 @@ span.tc-translink > a:first-child { margin-right: 0.25em; } +.tc-test-case-result-icon svg { + color: #fff; +} + .tc-test-case-result-icon-pass { background-color: green; } @@ -3397,7 +3388,7 @@ span.tc-translink > a:first-child { } .tc-test-case-toolbar svg { - fill: <>; + color: <>; } .tc-test-case-toolbar .tc-drop-down { diff --git a/themes/tiddlywiki/vanilla/options.multids b/themes/tiddlywiki/vanilla/options.multids index c0b49d9611..ac64628d41 100644 --- a/themes/tiddlywiki/vanilla/options.multids +++ b/themes/tiddlywiki/vanilla/options.multids @@ -1,5 +1,5 @@ title: $:/themes/tiddlywiki/vanilla/options/ stickytitles: no -sidebarlayout: fixed-fluid -codewrapping: pre-wrap +sidebarlayout: fluid-fixed +codewrapping: pre diff --git a/themes/tiddlywiki/vanilla/settings.multids b/themes/tiddlywiki/vanilla/settings.multids index 1f5c6d4720..bb84bd8b98 100644 --- a/themes/tiddlywiki/vanilla/settings.multids +++ b/themes/tiddlywiki/vanilla/settings.multids @@ -1,6 +1,6 @@ title: $:/themes/tiddlywiki/vanilla/settings/ -fontfamily: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", system-ui, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji" +fontfamily: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", sans-serif, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji" codefontfamily: ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace backgroundimageattachment: fixed backgroundimagesize: auto