Commit Graph
13492 Commits
Author SHA1 Message Date
Jeremy Ruston 4d0d28ab96 Merge branch 'master' into colour-improvements 2026-09-10 17:48:38 +01:00
Jeremy Ruston 2b60da0dcf Updated Catalan translation 2026-09-10 14:00:07 +01:00
Jeremy Ruston 5d3f2685a3 Merge branch 'tiddlywiki-com' 2026-09-08 11:40:21 +01:00
Joshua Fontany 685a80dfc6 Document that an unquoted parameter value cannot contain a colon (#9999)
Calls stated that a value needs no delimiters if it contains no spaces or
quotes. A colon also requires them: name:value is call syntax, so the text
before the colon is read as a parameter name and the positional parameter
receives nothing, silently.

Call Syntax already has this right - param-name ":" value is one of its
productions - so this brings the prose into line with the grammar, and adds
a warning naming the two ways round it.
2026-09-08 09:39:22 +01:00
Théophile Desmedt 3aec096a07 Add $:/core/templates/plain-text and $:/core/templates/rendered-text (#10017)
* Add $:/core/templates/plain-text core template

This template renders a single `text` variable as plain text using the
<$text> widget. It enables exporting and downloading dynamic strings
via messages like `tm-download-file` using the `variables` paramObject,
eliminating the need to create temporary tiddlers in the wiki store
purely for rendering purposes.

* add release note

* add rendered text template

* update change note
2026-09-08 09:38:27 +01:00
Théophile Desmedt ddc59ee77b add examples using the new templates $:/core/templates/plain-text and $:/core/templates/rendered-text (#10019) 2026-09-08 09:38:05 +01:00
Zaid Almomani e0e6ab69b1 Fix LinkWidget href fallback when tv-filter-export-link returns empty (#10009) 2026-09-08 09:31:24 +01:00
Zaid Almomani e4ce6b3433 Sign CLA: Zaid (#10010) 2026-09-08 09:30:56 +01:00
Théophile Desmedt 47806feb85 Fix plugin library iframes hanging if onload never fires by adding readiness handshake (#10003)
* Fix race condition in plugin library iframe message handling

Introduce a PLUGIN-LIBRARY-READY handshake verb for plugin library iframes. 
This ensures that postMessage commands are not prematurely dropped before 
the iframe's internal script has fully bound its message listeners. 

Retains iframe.onload as a backward-compatible fallback for legacy or 
external libraries that do not emit the ready signal.

* add changenote

* feat(plugin-library): add PLUGIN-LIBRARY-READY handshake to plugin library iframe

    Add PLUGIN-LIBRARY-READY message emission in libraryserver.js

    Signals to parent window when iframe is ready to receive messages

    Complements browser-messaging.js PLUGIN-LIBRARY-READY handler

    Includes comprehensive tests for callback queueing and handshake flow

    Fixes race condition in plugin library iframe message handling

* fix(plugin-library): emit PLUGIN-LIBRARY-READY message on iframe initialization

Emit the PLUGIN-LIBRARY-READY message after the message listener is bound,

signaling to the parent window that the iframe is ready to receive postMessage

commands. This completes the handshake implementation to eliminate the race

condition where messages could be lost before the iframe's script initialization

completes.

* fix indentation

* remove extra space

* remove typo

* refactor(test-browser-messaging): update test descriptions and remove unused code

* lint fix

* fix: correct the update note
2026-09-08 09:28:15 +01:00
Mario Pietsch 5577a3d07b Allow colons in variable names in call syntax (#10015)
Accept a colon in the variable name of a `<<...>>` call and of an
`((...))` attribute reference, restoring the v5.3.8 name character
class. Call Syntax already describes the callee name as any
non-whitespace character other than `(` or `>`, and the colon is only
meaningful at the parameter name position.

* Add test cases for a colon name standalone, as an attribute value, as
  an =-separated parameter value, and with named parameters
* Add the 5.5.0 change note
2026-09-08 09:12:02 +01:00
Théophile Desmedt d62b75cceb Fix #10004 iframe DOM leak in unloadIFrame loop (#10018)
* Fix unloadIFrame loop condition for proper iframe unloading

* add changenote for #10018

* add missing field to changenote
2026-09-08 12:11:06 +04:00
dependabot[bot] 30a51be168 Bump @humanfs/node from 0.16.7 to 0.16.8 (#10008)
Bumps [@humanfs/node](https://github.com/humanwhocodes/humanfs/tree/HEAD/packages/node) from 0.16.7 to 0.16.8.
- [Release notes](https://github.com/humanwhocodes/humanfs/releases)
- [Changelog](https://github.com/humanwhocodes/humanfs/blob/main/packages/node/CHANGELOG.md)
- [Commits](https://github.com/humanwhocodes/humanfs/commits/node-v0.16.8/packages/node)

---
updated-dependencies:
- dependency-name: "@humanfs/node"
  dependency-version: 0.16.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-07 15:00:46 +04:00
Jeremy Ruston 38fa4486e4 Merge branch 'tiddlywiki-com' 2026-09-05 14:58:11 +01:00
Théophile Desmedt d0a0198f49 Fix image reference for TiddlyWiki architecture (#10000)
Fix the broken reference to "TiddlyWiki Architecture.svg"
2026-08-29 23:26:01 +01:00
Jeremy Ruston 52c60be3a0 Merge branch 'tiddlywiki-com' 2026-08-25 17:24:38 +01:00
Jeremy Ruston b3279e348d Update Quine URL 2026-08-25 17:24:25 +01:00
Jeremy Ruston 516135e1b2 Merge branch 'master' of https://github.com/TiddlyWiki/TiddlyWiki5 2026-08-24 22:13:04 +01:00
Jeremy Ruston 6845f1c47e Merge branch 'tiddlywiki-com' 2026-08-24 22:12:30 +01:00
Théophile Desmedt 6680967875 Improve discoverability of the style attribute feature (#9975)
* Improve discoverability of the style attribute feature

* Add missing tiddler  "Style Attributes"
2026-08-21 09:04:34 +02:00
Mario Pietsch f9d5ee0ad7 Add ButtonWidget examples and execution order (#9945)
Document the button widget with runnable test cases and explain how its
attributes combine.

* Add eleven test case tiddlers, listed by title prefix so a new one needs
  no edit to the widget page
* Describe the order in which a button runs body actions, to, message,
  popup, set and actions, whatever order they are written in
* Prefer class over a hardcoded style
2026-08-16 13:17:33 +02:00
Mario Pietsch 68630c939d Docs only Groupedlists examples (#9954)
* Add GroupedLists examples

Document grouped lists with runnable test cases over a shared
bibliography sample.

* Cover plain grouping, search, tabs by first character, both combined,
  and grouping on one field while searching another
* Name the grouped field in one procedure, so the grouping changes in
  one line
* Import it with import-compound, and list the examples by tag so a new
  one needs no page edit
* Rewrite the opening paragraph, which described only the sidebar tabs

* Replace GroupedLists code dumps with examples

Turn the two sidebar tabs the page describes into runnable test cases,
and tighten how the examples handle an empty result.

* Give each new example its own dummy payload, and point the page at the
  live tabs instead of quoting core source
* Carry the values through the filter from the start, so an All tab with
  no matches yields nothing rather than the literal All
* Use the list-empty widget

* use tc-tiny-gap instead of -left -right
2026-08-16 13:16:04 +02:00
Simon Huber 5e5937838b Fix: #9879 change release note for version 5.5.0 (#9968) 2026-08-14 12:56:09 +02:00
Simon Huber 6c8ac9b6a7 Refactor class attributes for edit field wrapper (#9879)
* Refactor class attributes for edit field wrapper

The problem here is, that if we have an existing field with name - say - "field1" and we want to add a field with name "field12345", at the moment we insert "field1" the edit-text widget re-renders because its classes change. The `tc-edit-field-exists` class must go outside to the container div.

* Add changenote for bugfix in field-name inputs

Fixes the field-name input re-rendering issue that caused loss of focus when inserting existing field-names.
2026-08-14 08:31:20 +02:00
Simon Huber 0c60e1fa7a Add class assignment to DOM node in editors (#9965)
* Add class assignment to DOM node in editor

* Fix indentation in assignDomNodeClasses method

* Fix conditional check for changedAttributes class

* Improve class assignment in EditTextWidget

Refactor class assignment logic to avoid duplicates and handle whitespace.

* Refactor DOM class assignment in EditTextWidget

* Refactor updateDomNodeClasses for clarity and efficiency

* Add changenote for enhancement in editor refresh behavior
2026-08-13 12:21:20 +02:00
Mario Pietsch b40b6de3ae Make sort order using sortby more consistent (#9747)
* make sort order more consistent

* Fix tests, as they are to be different due to the change.

* Add ChangeNote

* sortby: add "end" operand to place unlisted last

Give the sortby filter operator an optional second operand `end` that
places input titles missing from the reference list after the listed
ones, while the default still keeps them at the start.

* x-listops: read a second operand; `end` sorts unlisted titles to the
  end of the list, the default (no operand) leaves them at the start
* Document the optional `place` parameter on the sortby operator and
  rename the operator and examples tiddlers to match their titles
* Add a `sortby[...],[end]` example to the operator examples
* Replace the 5.5.0 change note with one describing the new `end`
  operand and its unchanged default
* Extend the sortby tests to cover both default (unlisted first) and
  `end` (unlisted last) placement

* Make the sortby end flag a suffix

Specify the placement of unlisted titles with an operator suffix.
Eg: `sortby:end[a b c]`

* Read the flag from `operator.suffix`
* Move the example and the change note to the suffix syntax
* Switch the sortby tests to the suffix syntax

* Cover the sortby guard and unlisted ordering

Close gaps found by mutating the sortby operator

* Sort two titles to catch an off-by-one in the length guard
* Keep unlisted titles in input order under the `end` suffix to catch a
  comparator tie break
* Return a single title untouched, exercising the early return
2026-08-13 11:18:38 +01:00
dependabot[bot] aac08a6252 Bump js-yaml from 4.3.0 to 4.3.1 (#9966)
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.3.0 to 4.3.1.
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.1/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.3.0...4.3.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-12 15:19:57 +02:00
Simon Huber 40b353bd0e Touch a temp tiddler when removing a tag (#9889)
* Touch a temp tiddler when removing a tag

Like that removing a tag doesn't make TiddlyWiki5 wait for the Typing timeout to remove it but removes it instantly, because also a non-draft Tiddler has changed

* Add release notes for bugfix in Edit Mode tags

Fixes an issue where tags of Tiddlers in Edit Mode don't animate instantly when they get removed.

* Add inline comment

* Update release version to 5.5.0 in changenote
2026-08-11 10:50:55 +02:00
superuser-does 7efbd01801 update 5.4.0 release notes: there was no change to default code wrap (#9962) 2026-08-08 11:46:30 +02:00
Théophile Desmedt 5143138c16 [DOCS] Update [[Custom Widgets]] with new example for overriding LinkWidget (#9961)
* [DOCS] Update [[Custom Widgets]] with new example for overriding LinkWidget

* fix: non-svg link icon are now sizing properly

* replace HelloThere by list-link in the example for robustness

* Add class to span for better styling in Custom Widgets

* Fix typo in Custom Widgets.tid documentation

* Improve doc by using the proper macro to link widgets

* Change font size style to important for title icon

Updated the font size style for the title icon to be important.

* Update transclude and slot elements in Custom Widgets

Provide a fallback if no body for the link is given

* Enhance link widget to show icons conditionally

Updated the link widget to conditionally display an icon next to the link based on the target tiddler's icon field. Modified the rendering logic to use a conditional statement for the icon display.

* Change transclude height to size in Custom Widgets
2026-08-07 22:05:06 +02:00
Jeremy Ruston 251871f9cf Merge branch 'master' into colour-improvements 2026-08-06 10:53:18 +01:00
Jeremy Ruston 8e65fdc06a Merge branch 'tiddlywiki-com' 2026-08-06 10:50:33 +01:00
Jeremy Ruston ceb0817176 Update Quine instructions 2026-08-06 10:48:53 +01:00
Simon Huber 2f578589a0 Fix typo in story width variable name (#9958)
* Fix typo in story width variable name

* Add change note for release 5.5.0

Fixes a typo in the CSS custom properties
2026-08-06 11:20:13 +02:00
Mario PietschandClaude Opus 4.6 916df90cc9 Fix $tw.utils.pulseElement() (#9741)
* Fix $tw.utils.pulseElement() by replacing missing $tw.browser.animationEnd

Use $tw.utils.convertEventName("animationEnd") and add pulse CSS animation

Fixes #6835

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Add ChangeNote

* add tc- prefix to pulse class

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-07-30 06:15:38 +02:00
dependabot[bot] ea18c85a4c Bump brace-expansion from 1.1.12 to 1.1.16 (#9953)
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.12 to 1.1.16.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.16)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.16
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-28 21:53:27 +02:00
Mario Pietsch abf134afe4 Fix regression introduced by PR #9815 (#9944)
* Keep retained tiddler subdirectories on save

Make generateTiddlerFilepath keep a retained tiddler's recorded subdirectory
and produce a valid filename for every path segment.

* Normalise originalpath separators to "/" before the sanitiser, so recorded
  subdirectories survive
* Validate each path segment (reserved names, trailing dots or spaces), so
  "sub/CON" is valid on every OS
* Run that pass after transliteration, which can itself create a reserved name
* Add filesystem and adversarial specs, covering generateTiddlerFileInfo and
  generateTiddlerExtension

* update changenote
2026-07-28 11:34:09 +01:00
Saq Imtiaz 45d2ca948a Optimizes filterrunprefixes & filters using ES2017 (#9943)
* refactor: use ES2017 to optimize filter run prefixes

* chore: eslint

* chore: eslint

* fix: added missing file

* refactor: prefix, suffix and subfilter operators

* refactor: further improvements using new String methods

* docs: added changenote

* chore: renamed docs tiddler

* chore: renamed docs tiddler
2026-07-28 12:32:48 +02:00
Mario Pietsch 94b046b8cb Fix button widget selection state with setTitle (#9951)
Make the button widget apply selectedClass correctly when the state is
addressed with setTitle instead of set.

Issue #9949, the button could not be rendered at all

* Guard the setField read in isSelected(), which dereferenced the result of
  getTiddler() directly. A missing state tiddler threw a TypeError, and that
  tiddler is normally only created by the first click

Issue #9950, every button of a set reported itself as selected

* Rewrite isSelected() as an if/else. The nested ternary mixed `||` with
  `?:`, so the setTitle branch returned a fallback value instead of a
  comparison
* Watch the setTitle state tiddler in refresh(), so the selected class
  follows the state as it already does for set

Documentation and tests

* Document that setField takes preference over setIndex. That has always
  been the behaviour, it was never written down
* Document that selectedClass and default apply to setTitle as well as to set
* Add wiki based test cases for the set, setTitle, setField and setIndex
  selection paths. Six of the seven fail against v5.4.1, the one that passes
  uses set, which was never broken

Fixes #9949
Fixes #9950
2026-07-28 11:19:12 +01:00
Saq Imtiaz c710a56b21 Optimizes x-listops using ES2017 (#9942)
* refactor: use ES2017 to optimize x-listops

* chore: eslint

* refactor: optimize listops.js using ES2017

* refactor: prefix operator

* docs: added changenote

* feat: added tests
2026-07-28 11:12:35 +01:00
saqimtiaz e681096127 fix: remove duplicate widget evaluation for multi-valued variables 2026-07-24 21:04:54 +02:00
Théophile DesmedtandSaq Imtiaz 24b433211d feat: add JSON output support to makepatches operator (#9940)
* feat: enhance makepatches function to support multiple suffixes and JSON output format

* feat: add release notes for makepatches JSON output enhancement

* doc: update makepatches operator documentation to document new json output

* doc: add JSON output examples to makepatches and applypatches documentation

* chore: convert space indentations to tabs

* test: add tests for makepatches operator with JSON output support

* chore: change space to tab indentation

* test: add DiffMergePatch4 integration test for testing makepatches json output

* fix: remove superfluous heading character

* refactor the parsing of the makepatches suffixes

Co-authored-by: Saq Imtiaz <saq.imtiaz@gmail.com>

* refactor: improve makepatches function for better readability and performance

* chore: apply style guide by collapsing consecutive variable assignments

* chore: remove extraneous tabs

---------

Co-authored-by: Saq Imtiaz <saq.imtiaz@gmail.com>
2026-07-24 16:17:34 +02:00
Jeremy Ruston a64bbeaf52 Merge branch 'master' into colour-improvements 2026-07-23 17:27:52 +01:00
Jeremy Ruston 9fecc7b1d9 Increase browser test timeout for slower CI runners 2026-07-23 17:20:13 +01:00
Jeremy Ruston 2bc7826b5e Add missing from-version markers to colour docs 2026-07-23 13:45:21 +01:00
Jeremy Ruston d6174f0c46 Add tests for colour utilities, sendmessage duplicate values and interpolation suffixes 2026-07-23 13:45:21 +01:00
Jeremy Ruston c6c29ec68e Docs corrections from review
Updates the palette customisation docs for the layer model, fixes a mangled
sentence in the change note, and tidies wording
2026-07-23 13:32:19 +01:00
Jeremy Ruston fd96e5c8cb Add tests for changecount, scheme imports, derived palette entries and readability tests 2026-07-23 13:32:19 +01:00
Jeremy Ruston 52a36c01ff Fix customisations panel selection when the palette redirects its imports
The panel is now chosen from the current palette's own customisations field
before falling back to the consolidated palette, so AutoToggle keeps its
panel after a palette has been chosen in it. Also mirrors the colour scheme
inheritance hop in the palette preview, and removes two leftover DeltaPhi
suffixes
2026-07-23 13:32:19 +01:00
Jeremy Ruston 002fd550a8 Store palette customisations in a layer above the palette itself
Customisations no longer modify the palette tiddler. They are stored in a
tiddler titled $:/config/PaletteCustomisations/<palette-title> that imports
the palette and is compiled in its place, so plugin palettes continue to
receive updates. Adds a reset button to the palette chooser, and a warning
banner and per-entry markers to the palette editor. Also excludes the type
field from palette field inheritance, which previously broke compilation of
JSON data tiddler palettes
2026-07-22 18:18:34 +01:00
Jeremy Ruston c1d9b07b20 Standardise on customisations terminology for palette customisation panels
Renames the settings field to customisations, the panel tiddlers from
Settings to Customisations, and updates the docs to match
2026-07-22 17:36:20 +01:00