* Create RootStylesheet.tid
* put stylesheets into single <style> tags
* viewHandler should not be a widget
* format RootStylesheet
* add ROOT_STYLESHEET_TITLE constant
* use let widget in RootStylesheet
* use view widget from #8135 for testing
* reformat RootStylesheet
* update view widget
* update view widget
* update view widget
* update view widget
* update view widget
* update view widget
* trying to fix the date parsing
* refactor view widget with more extensible architecture
* remove performance instrumentation
* hardcode reset and base stylesheets
* adopt ES2017 syntax for view widget
* don't hardcode vanilla/base
* remove unused constructors
* remove unused variable
* make refresh method static
* trying to fix missingThis
* add changenote
* revert change in vanilla/base
* Revert changes to the view widget
* Refactor RootStylesheet.tid
* Use transclude widget instead of view widget
* Remove hardcoded noramlize.css
* Add comment for debugging
* Migrate some templates to use RootStylesheet
* Remove PAGE_STYLESHEET_TITLE
Since it is no longer used in render.js
* Update change note
---------
Co-authored-by: Simon Huber <huber.simon@protonmail.com>
* Initial commit
* Add line ending configuration for consistent tests
* Initial commit
* Correctly consider editcost parameter
* Move diffPartsToChars() to $tw.utils
* Remove superfluous file
* Correct "efficiency" parameter naming in the documentation
The parameter was incorrectly referred to as "efficent" in several places.
* Update diffPartsToChars to ES2017 style
* Consolidate let/const declarations
* Revert the list-tagged-draggable to use title field by default
* Update list.tid
It seems `<$transclude field=<<__field__>> />` when field default value is empty does not work as expected.
This commit uses `field:"title"` instead of `field:""` in the list-tagged-draggable header.
* Update list.tid
The redundant `field` removed. The new `displayField` attribute is used to let user choose the filed they like to display when the list items are rendered as simple links.
* Update list.tid
The proposed field attribute in list-tagged-draggable updated to use the same `displayField` aslist-links-draggable.
* Create #9177
change note for #9177 was created
* Update list.tid
The `list-links-draggable` now is fully backward compatible. It uses caption as default field as before and is compatible with `list-links`.
The `list-tagged-draggable` is fully backward compatible while got a new displayField parameter.
* Update list-tagged-draggable Macro.tid
Update docs to reflect new displayField parameter
* Update list-links-draggable Macro.tid
Update documentation to reflect the new displayField parameter.
* Update list-tagged-draggable Macro.tid
Update docs. Remove formatting error in doc.
* tw5.com: removed Chrome browser from savetiddlers
Was deprecated in early 2025, and is now Firefox-only
Additional changes:
* Lowercased buggyj in line with how the name is used elsewhere on tw5.com and the rest of the internet
* Pulled url from the url field (following the example of Timimi resource tiddler)
* Changed formatting of title to match other community resources
* tw5.com: update French & Japanese savetiddlers plugin docs to note it is now Firefox-only
Please note this update was validated using machine translation
* Locale support for sort operator
* Add checkLanguageCode util function
* Update docs & add language code validation
* Replace multiple isDescending with reverse
* Revert "Replace multiple isDescending with reverse"
This reverts commit 793177b8bc.
* Simplify sortTiddler with Intl.Collator
* Add change notes
* Remove comment
* Update makeCompareFunction to support locale
* Update checkLanguageCode
* Add locale support for sortsub
* Add locale support for sort filter run prefix
* Revert "Add locale support for sort filter run prefix"
This reverts commit 9479a156d7.
* Remove checkLanguageCode
Since filters are able to catch errors now
* Update locale example
* Revert " Add locale support for sortsub"
This reverts commit 4a617188fc.
* Revert "Update makeCompareFunction to support locale"
This reverts commit 0ebca08036.
* Update docs
* Update change note
* New issue and bug report templates
* Change bug_report to .md file
* update bug report text
* Move To Reproduce up next to Problem Description
* Fix typo
* Bidirectional improvements for core classes
* Fix Control Panel table text direction
* Switch to logical properties
* Add -webkit-margin-* properties
* Improve backward compatibility
* Use supports CSS at-rule for fallback
* Tiddler controls, alert, TOC update.
* tc-tree & testcase update
* .tc-sidebar-scrollable use new syntax
* Snow white use standard value
* Update divider
* Avoid negative logic
* Remove :dir rules at the moment
* Use property procedures
* Add change note
* Update blockquote
* Update unfold banner
* Update tiddlerinfo close button
* Group supports rule
* Update tiddler title icon
* Fix wrong float and margin
* Migrate to diff-match-patch-es & update api
* Update acknowledgements
* Update change notes
* Fix editcost attribute not working
* Make library compatible with ES2017
* [ja_JP] Japanese translation update from commit: c625e3c, ac83b46, 314ce12
* [ja_JP] Japanese translation update from commit: b0d950f, 381388f, 4dc89f6, 6a39a4e
* [ja_JP] Japanese translation update from commit: 29a567f, 3597e65, 3378497
* [ja_JP] Japanese translation update from commit: 4dc89f6
* [ja_JP] Japanese translation update from commit: b0d950f, 381388f
* [ja_JP] Japanese translation update from commit: 614ba84
* [ja_JP] Japanese translation update from commit: 23a23d9
* [ja_JP] Japanese translation update from commit: 8993572
* [ja_JP] Japanese translation update from commit: 8993572, 697171a, 75e89a1, ee55ab6, a73e03c, ac83b46
* [ja_JP] Japanese translation update from commit: 8993572
* [ja_JP] Japanese translation update from commit: 8993572
* [ja_JP] Japanese translation update from commit: 81862b5
* [ja_JP] Japanese translation update from commit: 81d8d67
* [ja_JP] Japanese translation update from commit: 899a498
* [ja-JP] A little correction to the Japanese translation
* [ja_JP] Japanese translation update from commit: d63a189
* [ja_JP] Japanese translation update from commit: 789d64f
* [ja_JP] Japanese translation update from commit: 5490b78
* [ja-JP] A little correction to the Japanese translation
* [ja-JP] A little correction to the Japanese translation
* [ja-JP] A little correction to the Japanese translation
* [ja-JP] A little correction to the Japanese translation
* [ja_JP] Japanese translation update from commit: 29a567f
* Update aho-corasick.js
False positive matches
Symptom: Words like "it is", "Choose", "Set up" are incorrectly linked to tiddler "FooBar" when a tiddler titled "xxx x FooBar" exists.
Root cause: The Aho-Corasick algorithm's output merging mechanism in buildFailureLinks caused failure link outputs to be incorrectly merged into intermediate nodes, resulting in false matches.
Fix:
Remove incorrect output merging in buildFailureLinks
Implement proper output collection during search by traversing the failure link chain
Add exact match validation: verify that the matched text exactly equals the pattern before accepting it
Add cycle detection to prevent infinite loops in failure link traversal
* Update text.js
First character disappearing
Symptom: When freelinking is enabled, the first character of matched words disappears (e.g., "The" becomes "he", "Filter" becomes "ilter").
Root cause: When the current tiddler's title was being filtered out, it was done too late in the process (during parse tree construction), causing text rendering issues.
Fix:
Move the current tiddler title filtering to the match validation stage (in processTextWithMatches)
Use substring instead of slice for better stability
Add proper case-insensitive comparison for title matching
* Update text.js
add back description
* Update aho-corasick.js
add back description
* Update tiddlywiki.info
add freelinks plugin for testing
* Update tiddlywiki.info
restore
* Update tiddlywiki.info
add freelinks plugin for test
* Update aho-corasick.js
erase comment
* Update text.js
erase comment
* Update aho-corasick.js
add back some commets
* Update aho-corasick.js
clean comment
* change note #9397
change note #9397
* Update tiddlywiki.info
reversed to original
* Update #9397.tid
update detail
* Update #9397.tid
another link added
* Update #9397.tid
add "release: 5.4.0"
* Update #9397.tid
some format modified
* Deprecate some utility functions
* Drop IE support
* Update two function
* Update comment
* Further simplify with arrow function
* Fix node error
* Deprecate logTable
* Deprecate class functions
* Attempt to fix error
* Deprecate two functions
* Remove deprecation for getLocationPath
* Deprecate stringifyNumber, domContains, domMatchesSelector
* Deprecate $tw.utils.each
* Revert "Deprecate $tw.utils.each"
This reverts commit 650df1d575.
* Simplify getFullScreenApis
* Replace LLMap with Map
* Revert "Replace LLMap with Map"
This reverts commit 4410ac194a.
* Move some deprecated functions to deprecated.js
* Remove Opera & MS prefix
* Deprecate getLocationPath
* Fix code style
* Revert "Remove Opera & MS prefix"
This reverts commit e5771c00be.
* Revert "Simplify getFullScreenApis"
This reverts commit 894cb479ea.
* Further simplify toggleClass
* Second attempt to simplify $tw.utils.each
* Revert "Second attempt to simplify $tw.utils.each"
This reverts commit 74cb4f766e.
* Third attempt to simplify $tw.utils.each
* Add missing comma
* Update comments
* Deprecate hopArray
Since it is easy to implement it with some method
* Update change notes
* Deprecate tagToCssSelector
Since tc-tagged-* classes are deprecated
* Fix RSOE from decodebase64
* Update change note
* Revert "Fix RSOE from decodebase64"
This reverts commit 4145f08623.
* Use a more general implementation
* Operator error should let whole filter fail
* Add comment to disable indent rule
* Enable no-eval rule
And only disable it in evalGlobal
* Diable indent rule in bootprefix
* Update change note
* 更新 boot.js
Co-authored-by: Mario Pietsch <pmariojo@gmail.com>
---------
Co-authored-by: Mario Pietsch <pmariojo@gmail.com>
* Introduce let filter run prefix for assigning filter run result to a variable
* Get rid of the special behaviour for all[]
Not needed because the input to the filter run is available
* Fix tests
* Fix tests
* Cleanup
* Support for saving result lists in a variable
Extend let filter run prefix to store list of results, and add varlist operator for accessing variables as a list.
We already had partial support for variables returning a list of values in order for functions to work, now we extend it so that any variable can be used to store a list
We should extend the set widget so that it returns a result list that can be accessed with the varlist operator
* Docs update
* Introduce letlist widget for assigning lists to variables
Terrible name. Annoyingly, we can't overload the existing let or set widgets.
* Docs update
* Update DefaultTiddlers to highlight the new docs
* Fixed varlist crash with empty parameter
* Switch to triple brace syntax for assigning filtered lists
* Docs update
* Test for multivalued functions
* varlist operator: fixed crash accessing non-existent variable
See https://github.com/TiddlyWiki/TiddlyWiki5/pull/8972#issuecomment-2712068743
* Dispense with the letlist widget
What this PR actually does is rename the letlist widget to "let". The result is the same as using the letlist widget, but it is backwards compatible by virtue of the fact that all existing ways to access variables will only see the single value for the variable.
* Refactor the let filter run prefix to assign the input list to the variable named by the filter run
These semantics are much simpler, and allow the variable name to be computed.
* Missed off 211b135265
* Docs update
* Bug fix
* Introduce round brackets for multi-valued filter operands
Allowing us to drop the varlist operator
* Introduce => as a shortcut syntax for the let filter run prefix
Also relax the requirement for a filter run prefix to be followed by an opening square bracket
* Fix bug exposed in "Filter Operators" tiddler
See https://github.com/TiddlyWiki/TiddlyWiki5/pull/8972#issuecomment-2740003414
* Fix bug with missing variable attributes
See https://github.com/TiddlyWiki/TiddlyWiki5/pull/8972#issuecomment-2752792329
* Fix bug with round brackets for 2nd parameter onwards
* Allow functions to take multivalued parameters
* Simplify title operator
* Extend title operator to allow negated form to use multi-valued variables
* Remove duplicate test
* Update action-log widget to log multi-valued attributes
* Docs updates
* Fix typos
* Happy linter happy life
* Fix version numbers of from-version procedures
* Another incorrect version number
* Add change note
* Fix filenames of tests
* Typo
* Update let.js
* Docs updates
* fix: should use tree.isSelfClosing || isVoidElement
* docs: about html
* fix: Void element without self-closing slash (e.g., <br> instead of <br/>)
* Update editions/test/tiddlers/tests/data/serialize/VoidElements.tid
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@Leilei332 I hope you don't mind, but I've nominated you to be the lead of the QA team. If you're happy to take the role, please could you submit a community card?
* let claude write this
* Update validate-changenotes.yml
* Update validate-changenotes.yml
* Update validate-changenotes.yml
* Update validate-changenotes.yml
* refactor: move logic to sh file
* Introduce impact notes attached to change notes
No styles yet
* Add more tickets for demo and testing purposes
* Slightly better description for v5.4.0
* Formatting. More to do.
* Embarrassing typo
* Update field names
* Styling refinements
* Disable the #8702 changenote as it is not yet merged
* Add incompleteness warning
* refactor: extract a new $tw.wiki.getParser
* feat: allow $tw.utils.getParseTreeText to render other rules' text
* feat: two example getText handler
* Revert "feat: allow $tw.utils.getParseTreeText to render other rules' text"
This reverts commit 8a12498fa9.
* refactor: keep original getParseTreeText not touched
* refactor: use serialize in rules
* refactor: $tw.utils.extend({},options) -> options || {}
* Update codeinline.js
* Create test-wikitext-serialize.js
* DEBUG: only run my tests for development, remove before PR merge
* lint: if
* feat: add rule: 'parseBlock' metadata
* feat: handle tailing \n that may be missing
* feat: allow recursive
* feat: generate more rule and tests
* feat: generate more rule and tests
* fix: remove pragma:true, otherwise following text will become children of it
* fix: condition manually
Deekseek is silly
* fix: some test
* fix: some test
* feat: $tw.utils.serializeAttribute
* fix: use "" for string param
* feat: list
* refactor: ' -> "
* fix: parsemode don't have node
* fix: render invisible comment and parsemode as data element
* feat: add void: true, in ast node to prevent render
* feat: use void widget, so methods always return a widget
* feat: ast to use new widget type void
* test: add rule: 'parseBlock' and isRuleEnd: true
* lint: quote
* Update widget.js
* fix: void node need to handle its children
* Update test-wikitext-parser.js
* lint: quote
* Update void.js
* Update test-wikitext-parser.js
* fix: macrodef with comment (void node) not working
* lint: ' -> "
* feat: add to styleblock
* feat: styleblock
* feat: styleinline
* Update table.js
* lint: useless comments
* feat: transcludeblock
* refactor: reuse block on inline when possible
* feat: use void node to carry important info for typedblock
* feat: run all tests
* lint: useless ai generated comments
* Update conditional.js to not include space
* Update test-wikitext-serialize.js
* Update conditional.js
* refactor: move tiddlers to /data
* refactor: no need for new $tw.Wiki()
* lint: double quote
* refactor: lowercase the parseblock rule name
* fix: Wiki parser initialize blockRuleClasses only when first new an instance
* feat: restore inline macro def
* fix: macro in widget param
* fix: positional attribute in macro call
* fix: table space and horizrule block new line
* feat: make sure block rule all have \n\n for visiblity
* lint: function param
* fix: empty list item
* feat: add \n\n based on isBlock, if could also be inline
* fix: conditional without elseif
* refactor: use isBlock in macrodef to know inline or block
* fix: link may not have attribute and children
* DEBUG: render result and diff below body only on browser
DEBUG: render result below body only on browser
DEBUG: render result below body
DEBUG: fix build
DEBUG: show render result as ViewTemplate
* fix: remove pad space in />
* test: remove pad space in />
* Revert DEBUG: render result and diff below body only on browser
* refactor: fold commentText variable
* refactor: fold long comment
* fix: double quotes for parameter values
* Update void.js
* refactor: move all exports.serialize = function(tree,serialize) { to plugin
* fix: expost listTypes from core, and require it in plugin
* refactor: move serializeWikitextParseTree to plugin and init it
* refactor: move serializeAttribute util also to the plugin
* fix: Delete unused file
* Update macrodef.js
* Update test-wikitext-parser.js
* lint: fix
* Update plugins/tiddlywiki/wikitext-serialize/rules/filteredtranscludeblock.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update core/modules/widgets/void.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update plugins/tiddlywiki/wikitext-serialize/rules/list.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update plugins/tiddlywiki/wikitext-serialize/rules/list.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update plugins/tiddlywiki/wikitext-serialize/rules/styleblock.js
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Remove unused methods from VoidNodeWidget
Deleted render, execute, and refresh methods from VoidNodeWidget as they are no longer needed. The widget now only inherits from the base Widget class and exports the constructor.
* docs: about regex in styleinline.js
* Update parsetree.js
* Update core/modules/widgets/void.js
Co-authored-by: Jeremy Ruston <jeremy@jermolene.com>
* feat: Ensure at least one space after the style/class
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Jeremy Ruston <jeremy@jermolene.com>
* wip proposal still contains commented old code - tests are missing
* rename isTagNameSafe to makeTagNameSafe
* remove comments
* remove redundant space
* add htmlCustomPrimitives to the $tw.config object
* remove tag-sanitation from element.js
* WIP - add html-element sanitation to the new makeTagNameSafe function, so it can be used globally
* simplify sanitation logic and fix inline docs
* Move top comment into inline comments
* Enhance Freelinks with Aho-Corasick for long titles and large wikis
Replaces regex with Aho-Corasick, adds chunking (100 titles/chunk), cache toggle, and Chinese full-width symbol support. Tested with 11,714 tiddlers.
* delete comment
* Create AhoCorasick.js
* Update text.js
* Update text.js
* Update AhoCorasick.js
* Update text.js
* Update text.js
* move AhoCorasick to AhoCorasick.js
* update AhoCorasick.js
* Delete core/modules/utils/AhoCorasick.js
wrong place
* Update text.js
* indentation modify
* remove function {}
* remove function {}
* Rename AhoCorasick.js to aho-corasick.js
correct filename
* Update tiddlywiki.info add freelink
* missing a comma here
* clean up comments & use old style
* try add it to editions/tw5.com-server for testing
* try add it to editions/prerelease for testing
* optimized
* optimized
* add setting for "Persist AhoCorasick cache"
* add dynamic limits
* remove comment
* revert to 5f0b98d1fd
* try sort alphabet
* try sort alphabet
* try sort alphabet
* typo freelink -> freelinks
* typo freelink -> freelinks
* typo freelink -> freelinks
* Update readme.tid
* Update aho-corasick.js
Dynamically adjust limit parameters to avoid problems caused by hard-coded limits.
* Update text.js
Dynamically adjust limit parameters to avoid problems caused by hard-coded limits.
* Update tiddlywiki.info
remove other plugin for test plugin conflict
* Update tiddlywiki.info
* Update tiddlywiki.info
* Update aho-corasick.js
Description of major changes
Improve state transition logic - Ensure to go back to root node correctly in case of mismatch, and check root node for current character transition
Fix failed link traversal - Add condition node ! == this.trie to avoid infinite loop at root node
Enhance output collection - collect output not only from current node, but also from all nodes on failed link path, which is key to Aho-Corasick algorithm
Add safety limit - collectCount < 10 to prevent failed link loops
Translated with DeepL.com (free version)
* Update aho-corasick.js
Word Boundary Check - The isWordBoundaryMatch function checks if the match is on a word boundary:
Alphanumeric characters [a-zA-Z0-9_] are regarded as unicode characters
At least one non-unicode character must be present before and after the match for it to be considered valid.
* Update text.js
Word Boundary Check - The isWordBoundaryMatch function checks if the match is on a word boundary:
Alphanumeric characters [a-zA-Z0-9_] are regarded as unicode characters
At least one non-unicode character must be present before and after the match for it to be considered valid.
* Update settings.tid
Word Boundary Check - The isWordBoundaryMatch function checks if the match is on a word boundary:
Alphanumeric characters [a-zA-Z0-9_] are regarded as unicode characters
At least one non-unicode character must be present before and after the match for it to be considered valid.
* fix Word Boundary logic
* remove PersistentCache @ text.js
* remove PersistentCache @settings.tid
* Update readme.tid for Word Boundary Check
* Update aho-corasick.js Organize and delete comments
* Initial commit of freelinks plugin
* Update settings.tid Organize and delete comments
* Update tiddlywiki.info add back other plugin
* Update tiddlywiki.info alphabet sort
* Update readme.tid for new future
The plugin supports non-Western language tiddler titles (e.g., Chinese) and prioritizes longer tiddler titles for matching, ensuring accurate linking in diverse contexts.
Furthermore, the current tiddler title within its own content is excluded from generating links to avoid self-referencing.
* Update readme.tid
* Update plugins/tiddlywiki/freelinks/text.js
Co-authored-by: Mario Pietsch <pmariojo@gmail.com>
* Update plugins/tiddlywiki/freelinks/aho-corasick.js
Co-authored-by: Mario Pietsch <pmariojo@gmail.com>
* Update plugins/tiddlywiki/freelinks/aho-corasick.js
Co-authored-by: Mario Pietsch <pmariojo@gmail.com>
* Update plugins/tiddlywiki/freelinks/text.js
Co-authored-by: Mario Pietsch <pmariojo@gmail.com>
* Update plugins/tiddlywiki/freelinks/aho-corasick.js
Co-authored-by: Mario Pietsch <pmariojo@gmail.com>
* Update text.js
Added locale configuration support - Added LOCALE_CONFIG_TIDDLER constant to make the sorting locale configurable instead of hardcoded "zh"
Optimized title processing - Combined the filtering and escaping logic into a single pass to reduce duplication
Added trim() for ignoreCase - Applied .trim() to the ignore case variable for consistency
Enhanced refresh logic - Added locale configuration tiddler to the refresh check
Improved comments - Added explanation for why sorting is necessary (prioritizing longer titles)
* Update text.js
we don't need to specify 'zh' at all
* Update aho-corasick.js
This single line change would add support for:
Accented letters: á, é, í, ó, ú, à, è, ì, ò, ù, ä, ë, ï, ö, ü, ñ, ç, etc.
Most Western European languages (Spanish, French, German, Italian, Portuguese, etc.)
* Update aho-corasick.js useage
* Update readme.tid for Writing Style
* Update tiddlywiki.info
revert all the changes
* Update tiddlywiki.info
revert all the changes
* Update tiddlywiki.info
revert all the changes
* Update tiddlywiki.info
revert
* Update text.js
plugins/tiddlywiki/freelinks/text.js#L25
[ESLint PR code] reported by reviewdog 🐶
Strings must use doublequote.
* Update aho-corasick.js
plugins/tiddlywiki/freelinks/aho-corasick.js#L193
[ESLint PR code] reported by reviewdog 🐶
Strings must use doublequote.
Raw Output:
{"ruleId":"@stylistic/quotes","severity":2,"message":"Strings must use doublequote.","line":193,"column":50,"nodeType":"Literal","messageId":"wrongQuotes","endLine":193,"endColumn":52,"fix":{"range":[5743,5745],"text":"\"\""}}
---------
Co-authored-by: Mario Pietsch <pmariojo@gmail.com>
* Muted palette, minor adjustments
* revert download-background
* Change sidebar tiddler link foreground color
Change sidebar tiddler link foreground colour to make the search dropdown text readable. Using: #aaaaaa
* fix to to improve browser's compliance with user's intent when the widget's draggable attribute is set to no
* Update link.js with comments from the PR review
indentation changed from spaces to tabs
modified else statement into a else if statement for additional specificity
---------
Co-authored-by: Frédéric Demers <fastfreddy@fdemers.ca>
* docs: How to add new cascade and use it
* Update Cascade Mechanism.tid
* docs: update
* Update How to Create a Custom Cascade Entry.tid
* Refine with deepseek
* Use style property deletion rather than setting to none
* Remove cecily and slide, fix quotation marks
* Fix returning typo
* Add helper functions, use some timeouts to order events
* [DOCS] Improve "range Operator" documentation. Make placeholder "terms" consistent with filter strings
* update range operator table formatting a bit
* Rewrote tw_macrocallinline() parser so macrocall args containing ">"
will be parsed properly.
* Use $tw.log.MARKDOWN flag to print debug messages.
* Fix markdown parser to respect parseAsInline option. (#8917)
* Change default sidebar layout to fluid-fixed
* Default to not wrapping code blocks
* codewrapping should be "pre" not "no"
Co-authored-by: Leilei332 <LeiYiXia29@outlook.com>
* Info panel should stay open by default
---------
Co-authored-by: Leilei332 <LeiYiXia29@outlook.com>
* Replace fill: with currentColor
* Remove fill from wikitext
* Replace fill property with color property for svg selectors
* Further remove fill property
* Replace more fill properties
* Replace fill in seamless theme
* Replace fill in plugins
* feat: added info tiddlers for viewport dimensions
* feat: multi window support for dimensions info tiddlers
* refactor: introduce standalone eventbus and refactor for ES2017
* docs: extended docs for InfoMechanism to cover new additions
* eslint manual fixes
- update eslint to 2017
- add self to forbidden globals
- fix a few unfixable bugs caught by eslint
- convert newer features in twitter-archivist
* add eslint plugin to forbid features
* import changes from @saqimtiaz
* add package.json changes
* Move Node.js specific files out of the core plugin
* Package server files as new $:/core-server plugin
* Missed commander.js
* Fix crash in browser
* Extend server-only mechanism to be usable by other plugins
* in
* Revert "Extend server-only mechanism to be usable by other plugins"
This reverts commit 3faf503073.
* Revert "in"
This reverts commit b80213128f.
* Reapply "Extend server-only mechanism to be usable by other plugins"
This reverts commit c6c83bc18b.
* Fix test failure
* Move filesystem utilities into core-server
* Move old-style release notes out of the way
* Move the 5.4.0 release note into the right place
* Revert "Move the 5.4.0 release note into the right place"
This reverts commit 3f5c2bfba3.
* Revert "Move old-style release notes out of the way"
This reverts commit ee16e48a43.
These are mostly RGB entries that were previously missing, filled in with values from Vanilla.
The goal is still not to have any direct RGB colours in the palette, just computed colours derived from the base colours
The map filter run prefix is often used as a way to move a computed value in the input list into a variable so that it can be used as a parameter of a filter operator. The apply filter run prefix extends this idea to make the input list available as variables $1, $2 etc. Unlike the map prefix, the apply filter run is only evaluated once.
Instead, we'll special case transforming `<<colour X>>` into `[function[colour],[x]]`
Makes everything much easier and avoids all the kerfuffle of not being able to mix palettes
Also introduces palette inheritance
This finally allows us to have a palette that automatically switches between dark and light variants. The mechanism is more flexible that that, and allows for multiple colour schemes (night, morning, day, evening, for example) with automatic switching between them.
Will requires #7999 to work fully; for the moment when you switch between dark and light you will see the preview change, and then next time you select the palette it will be in the correct mode
Using the new wikify operator.
Currently has a bug whereby redirected colours (like "tiddler-background") do not work. Direct colours like "background" do work.
Note the hacks needed to makeFakeWidgetWithVariables work
The replacement library from https://colorjs.io/ is much, much larger but I think we can develop a custom build that uses treeshaking to whittle the code down to the bits that we need. @linonetwo does that sound feasible?
I intend the explore further improvements but I wanted to start by establishing a library that can do modern P3 and OKLCH colour calculations.
2024-10-21 09:03:39 +01:00
947 changed files with 16659 additions and 34611 deletions
Get the browser location.hash. We don't use location.hash because of the way that Firefox auto-urldecodes it (see http://stackoverflow.com/questions/1703552/encoding-of-window-location-hash)
Hello ~TiddlyWikiers - I have been a long time fan, recent contributor to the TW community.
Recently I have volunteered to run the [[TiddlyWiki Newsletter|https://tiddlywiki.substack.com/]] to spread the great news about TW.
I have been in the IT industry for about thirty years, mostly as a consultant and technical arcitect.
More recently I went back to study a masters in IT focussing on AI and data science.
Now my partner and I have started our own business ([[Sphere Innovations|https://sphere-innovations.com.au]]) - in consulting and building web applications for small to medium size businesses here in Australia.
Since 2014, when I started college, I've been on a quest for a lifelong PKM tool. I cherish my life and all my experiences, and I don’t want to forget any of them. When I’m deeply focused on a task, it’s easy to lose sight of other important parts of my life—so I needed a system to help me stay balanced.
Early on, I tried TiddlyWiki several times, but I was initially put off by its save mechanism and markup editing. That changed when I discovered an auto-backup script, which gave me the confidence to fully commit. Over time, I improved the script and eventually transitioned to using TidGi-Desktop and TidGi-Mobile.
Today, my TiddlyWiki holds all my game design ideas and progress logs—it has truly become my second brain. With the help of LLM-powered programming tools, I’ve enhanced it with numerous plugins, allowing me to manage my mind in a more programmable and structured way. As a game developer, TiddlyWiki isn't the core of my professional work; But I've invested so much time because it's fundamentally about upgrading my mind.
Most of my notes are open by default and shared publicly on my homepage as a digital garden.
''Hi, My name is Mario Pietsch''. Back in 2009 I was ''searching'' for ''a simple presentation tool'' and discovered ~TiddlyWiki Classic, Monkey Pirate ~TiddlyWiki ([[MPTW|https://mptw.tiddlyspot.com/]]) with ~TagglyTagging, Eric Shulman's ~TiddlyTools, Saq Imtiaz's navigation macros, and more. --- ''I was captivated''.
After a deep dive, I combined these elements into my own "Presentation Manager", along [[3 step by step tutorials|https://groups.google.com/g/tiddlywiki/c/qG_tZ1x0MEU/m/-vLA0luMicYJ]] to help others build it.
Thanks to ''the positive spirit'' of the ~TiddlyWiki community, I am proud to be part of it since 2009.
When Jeremy started developing ~TiddlyWiki 5 on ~GitHub, I joined in—opening [[issue no. 1|https://github.com/TiddlyWiki/TiddlyWiki5/issues/1]] all the way up to 13. For what that’s good ;) Since then, I have submitted nearly 600 pull requests and more than 500 issues, many of which have been merged or resolved.
My ~TiddlyWiki 5 "laboratory" is at https://wikilabs.github.io, and I also share content on my ''~YouTube'' channel: https://www.youtube.com/@pmario
The Developer Experience Team improves the experience of software contributors to the TiddlyWiki project. This includes enhancing documentation, streamlining contribution processes, and providing tools and resources to help developers effectively contribute to TiddlyWiki.
Tools and resources managed by the Developer Experience Team include:
* Advising and assisting contributors, particularly new developers
* Maintenance of developer-focused documentation on the https://tiddlywiki.com/dev/ site, including:
** Development environment setup guides
** Code review processes and best practices
** Contribution guidelines and documentation
* Continuous integration and deployment scripts providing feedback on pull requests
* Devising and implementing labelling systems for issues and pull requests
* Automation scripts to simplify common development tasks
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 Newsletter Team is responsible for producing the TiddlyWiki Newsletter, a monthly email newsletter that highlights news, updates, and community contributions related to TiddlyWiki.
The Quality Assurance Team is responsible for ensuring the quality and reliability of TiddlyWiki releases. This includes reviewing code submissions, testing new features, identifying bugs, and verifying that fixes are effective.
The Newsletter Team is responsible for producing the [[TiddlyWiki Newsletter]]. We would love to have your help if you would like to get involved.
! Audience
The newsletter is intended for TiddlyWiki end users who do not track all the discussions on https://talk.tiddlywiki.org/.
Coverage of developer topics such as JavaScript and intricate wikitext should be handled thoughtfully to avoid alienating the core audience of end users.
Subscribing to the newsletter is intended to give people confidence that they will not miss any important developments.
LoadedModules/Hint: These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process.
Palette/Caption: Palette
Palette/CustomSettings/Prompt: Custom settings for current palette: <<palette-link>>
Palette/Editor/Clone/Caption: clone
Palette/Editor/Clone/Prompt: It is recommended that you clone this shadow palette before editing it
Palette/Editor/Delete/Hint: delete this entry from the current palette
@@ -147,7 +148,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
AboveStory/ClassicPlugin/Warning: It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:
BinaryWarning/Prompt: This tiddler contains binary data
ClassicWarning/Hint: This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details.
Add a tracker to the filter tracker. Returns null if any of the parameters are invalid, or a tracker id if the tracker was added successfully. Options include:
filterString: the filter string to track
fnEnter: function to call when a title enters the filter results. Called even if the tiddler does not actually exist. Called as (title), and should return a truthy value that is stored in the tracker as the "enterValue"
fnLeave: function to call when a title leaves the filter results. Called as (title,enterValue)
fnChange: function to call when a tiddler changes in the filter results. Only called for filter results that identify a tiddler or shadow tiddler. Called as (title,enterValue), and may optionally return a replacement enterValue
fnProcess: function to call each time the tracker is processed, after any enter, leave or change functions are called. Called as (changes)
*/
track(options={}){
const{
filterString,
fnEnter,
fnLeave,
fnChange,
fnProcess
}=options;
constid=this.nextTrackerId++;
consttracker={
id,
filterString,
fnEnter,
fnLeave,
fnChange,
fnProcess,
previousResults:[],
resultValues:{}
};
this.trackers.set(id,tracker);
// Process the tracker
this.processTracker(id);
returnid;
}
untrack(id){
this.trackers.delete(id);
}
processTrackers(){
for(constidofthis.trackers.keys()){
this.processTracker(id);
}
}
processTracker(id){
consttracker=this.trackers.get(id);
if(!tracker)return;
constresults=[];
// Evaluate the filter and remove duplicate results
// If parsing failed (data equals original title and is a string), return unchanged
if(data===title&&typeofdata==="string"){
results.push(title);
}elseif(data){
data=deleteDataItem(data,indexes);
results.push(JSON.stringify(data));
}
});
returnresults;
};
/*
Given a JSON data structure and an array of index strings, return an array of the string representation of the values at the end of the index chain, or "undefined" if any of the index strings are invalid
*/
@@ -144,7 +160,7 @@ function convertDataItemValueToStrings(item) {
return["null"]
}elseif(typeofitem==="object"){
varresults=[],i,t;
if($tw.utils.isArray(item)){
if(Array.isArray(item)){
// Return all the items in arrays recursively
for(i=0;i<item.length;i++){
t=convertDataItemValueToStrings(item[i])
@@ -178,7 +194,7 @@ function convertDataItemKeysToStrings(item) {
return[];
}
varresults=[];
if($tw.utils.isArray(item)){
if(Array.isArray(item)){
for(vari=0;i<item.length;i++){
results.push(i.toString());
}
@@ -201,7 +217,7 @@ function getDataItemType(data,indexes) {
returnitem;
}elseif(item===null){
return"null";
}elseif($tw.utils.isArray(item)){
}elseif(Array.isArray(item)){
return"array";
}elseif(typeofitem==="object"){
return"object";
@@ -213,7 +229,7 @@ function getDataItemType(data,indexes) {
functiongetItemAtIndex(item,index){
if($tw.utils.hop(item,index)){
returnitem[index];
}elseif($tw.utils.isArray(item)){
}elseif(Array.isArray(item)){
index=$tw.utils.parseInt(index);
if(index<0){index=index+item.length};
returnitem[index];// Will be undefined if index was out-of-bounds
@@ -223,15 +239,16 @@ function getItemAtIndex(item,index) {
}
/*
Given a JSON data structure and an array of index strings, return the value at the end of the index chain, or "undefined" if any of the index strings are invalid
Traverse the index chain and return the item at the specified depth.
Returns the item at the end of the traversal, or undefined if traversal fails.
@@ -243,6 +260,13 @@ function getDataItem(data,indexes) {
returnitem;
}
/*
Given a JSON data structure and an array of index strings, return the value at the end of the index chain, or "undefined" if any of the index strings are invalid
*/
functiongetDataItem(data,indexes){
returntraverseIndexChain(data,indexes,false);
}
/*
Given a JSON data structure, an array of index strings and a value, return the data structure with the value added at the end of the index chain. If any of the index strings are invalid then the JSON data structure is returned unmodified. If the root item is targetted then a different data object will be returned
*/
@@ -255,18 +279,15 @@ function setDataItem(data,indexes,value) {
@@ -276,3 +297,32 @@ function setDataItem(data,indexes,value) {
}
returndata;
}
/*
Given a JSON data structure and an array of index strings, return the data structure with the item at the end of the index chain deleted. If any of the index strings are invalid then the JSON data structure is returned unmodified. If the root item is targetted then the JSON data structure is returned unmodified.
*/
functiondeleteDataItem(data,indexes){
// Check for the root item - don't delete the root
@@ -32,7 +35,7 @@ var CsvParser = function(type,text,options) {
$tw.utils.each(lines,function(columns){
maxColumns=Math.max(columns.length,maxColumns);
});
for(varline=0;line<lines.length;line++){
varcolumns=lines[line];
varrow={
@@ -55,3 +58,4 @@ var CsvParser = function(type,text,options) {
exports["text/csv"]=CsvParser;
exports["text/tab-delimited-values"]=CsvParser;
exports["text/tab-separated-values"]=CsvParser;
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.