From 697dc8db4cc7e041a37d517c61d8ac1e82e02228 Mon Sep 17 00:00:00 2001 From: Mateusz Wilczek <36714554+mateuszwilczek@users.noreply.github.com> Date: Tue, 19 Sep 2023 16:52:04 +0200 Subject: [PATCH 01/33] Improve `jsonstringify` and `stringify` operators docs (#7650) --- .../jsonstringify Operator (Examples).tid | 9 ------ .../stringify_Operator_(Examples).tid | 4 +-- .../filters/jsonstringify Operator.tid | 28 ++----------------- .../tiddlers/filters/stringify_Operator.tid | 26 ++++++++--------- .../howtos/Constructing JSON tiddlers.tid | 8 +++--- 5 files changed, 21 insertions(+), 54 deletions(-) delete mode 100644 editions/tw5.com/tiddlers/filters/examples/jsonstringify Operator (Examples).tid diff --git a/editions/tw5.com/tiddlers/filters/examples/jsonstringify Operator (Examples).tid b/editions/tw5.com/tiddlers/filters/examples/jsonstringify Operator (Examples).tid deleted file mode 100644 index ead9ffb38..000000000 --- a/editions/tw5.com/tiddlers/filters/examples/jsonstringify Operator (Examples).tid +++ /dev/null @@ -1,9 +0,0 @@ -created: 20171029155046637 -modified: 20171029155227382 -tags: [[Operator Examples]] [[stringify Operator]] -title: jsonstringify Operator (Examples) -type: text/vnd.tiddlywiki - -<<.operator-example 1 """[[Title with "double quotes" and single ' and \backslash]] +[jsonstringify[]]""">> -<<.operator-example 2 """[[Accents and emojis -> äñøßπ ⌛🎄🍪🍓 without suffix]] +[jsonstringify[]]""">> -<<.operator-example 3 """[[Accents and emojis -> äñøßπ ⌛🎄🍪🍓 with rawunicode suffix]] +[jsonstringify:rawunicode[]]""">> diff --git a/editions/tw5.com/tiddlers/filters/examples/stringify_Operator_(Examples).tid b/editions/tw5.com/tiddlers/filters/examples/stringify_Operator_(Examples).tid index a664cf7d2..cc5a51429 100644 --- a/editions/tw5.com/tiddlers/filters/examples/stringify_Operator_(Examples).tid +++ b/editions/tw5.com/tiddlers/filters/examples/stringify_Operator_(Examples).tid @@ -1,9 +1,9 @@ created: 20161017154944352 -modified: 20171029155233487 +modified: 20230919124059118 tags: [[Operator Examples]] [[stringify Operator]] title: stringify Operator (Examples) type: text/vnd.tiddlywiki <<.operator-example 1 """[[Title with "double quotes" and single ' and \backslash]] +[stringify[]]""">> <<.operator-example 2 """[[Accents and emojis -> äñøßπ ⌛🎄🍪🍓 without suffix]] +[stringify[]]""">> -<<.operator-example 3 """[[Accents and emojis -> äñøßπ ⌛🎄🍪🍓 with rawunicode suffix]] +[stringify:rawunicode[]]""">> +<<.operator-example 3 """[[Accents and emojis -> äñøßπ ⌛🎄🍪🍓 with rawunicode suffix]] +[stringify:rawunicode[]]""">> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/filters/jsonstringify Operator.tid b/editions/tw5.com/tiddlers/filters/jsonstringify Operator.tid index a7e4d565c..748a851bb 100644 --- a/editions/tw5.com/tiddlers/filters/jsonstringify Operator.tid +++ b/editions/tw5.com/tiddlers/filters/jsonstringify Operator.tid @@ -1,36 +1,12 @@ caption: jsonstringify created: 20171029155051467 from-version: 5.1.14 -modified: 20171029155143797 -op-input: a [[selection of titles|Title Selection]] -op-output: the input with JSON string encodings applied +modified: 20230919124826880 op-parameter: op-parameter-name: -op-purpose: apply JSON string encoding to a string -op-suffix: <<.from-version "5.1.23">> optionally, the keyword `rawunicode` +op-purpose: deprecated, use <<.olink stringify>> instead op-suffix-name: R tags: [[Filter Operators]] [[String Operators]] title: jsonstringify Operator type: text/vnd.tiddlywiki -The following substitutions are made: - -|!Character |!Replacement |!Condition | -|`\` |`\\` |Always | -|`"` |`\"` |Always | -|Carriage return (0x0d) |`\\r` |Always | -|Line feed (0x0a) |`\\n` |Always | -|Backspace (0x08) |`\\b` |Always | -|Form field (0x0c) |`\\f` |Always | -|Tab (0x09) |`\\t` |Always | -|Characters from 0x00 to 0x1f |`\\u####` where #### is four hex digits |Always | -|Characters from 0x80 to 0xffff|`\\u####` where #### is four hex digits |If `rawunicode` suffix is not present (default) | -|Characters from 0x80 to 0xffff|Unchanged |If `rawunicode` suffix is present <<.from-version "5.1.23">> | - -<<.from-version "5.1.23">> If the suffix `rawunicode` is present, Unicode characters above 0x80 (such as ß, ä, ñ or 🎄) will be passed through unchanged. Without the suffix, they will be substituted with `\\u` codes, which was the default behavior before 5.1.23. - -<<.note """Technical note: Characters outside the Basic Multilingual Plane, such as 🎄 and other emojis, will be encoded as a UTF-16 surrogate pair, i.e. with two `\u` sequences.""">> - -Also see the [[stringify Operator]]. - -<<.operator-examples "jsonstringify">> diff --git a/editions/tw5.com/tiddlers/filters/stringify_Operator.tid b/editions/tw5.com/tiddlers/filters/stringify_Operator.tid index e06be4387..73dabb1c2 100644 --- a/editions/tw5.com/tiddlers/filters/stringify_Operator.tid +++ b/editions/tw5.com/tiddlers/filters/stringify_Operator.tid @@ -1,6 +1,7 @@ caption: stringify created: 20161017153038029 -modified: 20171029155143797 +from-version: 5.1.14 +modified: 20230919130847809 op-input: a [[selection of titles|Title Selection]] op-output: the input with ~JavaScript string encodings applied op-parameter: @@ -11,26 +12,25 @@ op-suffix-name: R tags: [[Filter Operators]] [[String Operators]] title: stringify Operator type: text/vnd.tiddlywiki -from-version: 5.1.14 The following substitutions are made: |!Character |!Replacement |!Condition | |`\` |`\\` |Always | |`"` |`\"` |Always | -|Carriage return (0x0d) |`\\r` |Always | -|Line feed (0x0a) |`\\n` |Always | -|Backspace (0x08) |`\\b` |Always | -|Form field (0x0c) |`\\f` |Always | -|Tab (0x09) |`\\t` |Always | -|Characters from 0x00 to 0x1f |`\\x##` where ## is two hex digits |Always | -|Characters from 0x80 to 0xffff|`\\u####` where #### is four hex digits |If `rawunicode` suffix is not present (default) | +|Carriage return (0x0d) |`\r` |Always | +|Line feed (0x0a) |`\n` |Always | +|Backspace (0x08) |`\b` |Always | +|Form field (0x0c) |`\f` |Always | +|Tab (0x09) |`\t` |Always | +|Characters from 0x00 to 0x1f |`\x##` where ## is two hex digits |Always | +|Characters from 0x80 to 0xffff|`\u####` where #### is four hex digits |If `rawunicode` suffix is not present (default) | |Characters from 0x80 to 0xffff|<<.from-version "5.1.23">> Unchanged |If `rawunicode` suffix is present | -<<.from-version "5.1.23">> If the suffix `rawunicode` is present, Unicode characters above 0x80 (such as ß, ä, ñ or 🎄) will be passed through unchanged. Without the suffix, they will be substituted with `\\u` codes, which was the default behavior before 5.1.23. +<<.from-version "5.1.23">> If the suffix `rawunicode` is present, Unicode characters above 0x80 (such as ß, ä, ñ or 🎄) will be passed through unchanged. Without the suffix, they will be substituted with `\u` codes, which was the default behavior before 5.1.23. -<<.note """Technical note: Characters outside the Basic Multilingual Plane, such as 🎄 and other emojis, will be encoded as a UTF-16 surrogate pair, i.e. with two `\u` sequences.""">> +<<.note """Characters outside the Basic Multilingual Plane, such as 🎄 and other emojis, will be encoded as a UTF-16 surrogate pair, i.e. with two `\u` sequences.""">> -Also see the [[jsonstringify Operator]]. +<<.olink jsonstringify>> is considered deprecated, as it duplicates the functionality of <<.op stringify>>. -<<.operator-examples "stringify">> +<<.operator-examples "stringify">> \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/howtos/Constructing JSON tiddlers.tid b/editions/tw5.com/tiddlers/howtos/Constructing JSON tiddlers.tid index 58b36244c..ff4c7927c 100644 --- a/editions/tw5.com/tiddlers/howtos/Constructing JSON tiddlers.tid +++ b/editions/tw5.com/tiddlers/howtos/Constructing JSON tiddlers.tid @@ -1,7 +1,7 @@ -title: Constructing JSON tiddlers -tags: [[JSON in TiddlyWiki]] [[Learning]] created: 20220427174702859 -modified: 20220427174702859 +modified: 20230809113620964 +tags: [[JSON in TiddlyWiki]] Learning +title: Constructing JSON tiddlers See [[JSON in TiddlyWiki]] for an overview of using JSON in TiddlyWiki. @@ -13,4 +13,4 @@ At a high level, we have several ways to generate JSON data in TiddlyWiki's own * [[jsontiddler Macro]] * [[jsontiddlers Macro]] -When constructing JSON data manually, the [[jsonstringify Operator]] is needed to ensure that any special characters are properly escaped. +When constructing JSON data manually, the [[stringify Operator]] is needed to ensure that any special characters are properly escaped. From 711d1658e239074acf0488528af5e5c80b5f1c85 Mon Sep 17 00:00:00 2001 From: Simon Huber Date: Thu, 21 Sep 2023 18:57:53 +0200 Subject: [PATCH 02/33] Edittemplate delete button should also delete the typeInputTiddler (#7749) If we don't delete the typeInputTiddler with the click on the "delete" button then the dropdown stays filtered - but the text input seems to be empty. This PR corrects this behavior --- core/ui/EditTemplate/type.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ui/EditTemplate/type.tid b/core/ui/EditTemplate/type.tid index faa89639f..c1c38b72a 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 <>
<$fieldmangler> -<$macrocall $name="keyboard-driven-input" tiddler=<> storeTitle=<> refreshTitle=<> selectionStateTitle=<> field="type" tag="input" default="" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<> class="tc-edit-typeeditor tc-edit-texteditor tc-popup-handle" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}} cancelPopups="yes" configTiddlerFilter="[[$:/core/ui/EditTemplate/type]]" inputCancelActions=<>/><$button popup=<> 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 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="[] [] []"/> +<$macrocall $name="keyboard-driven-input" tiddler=<> storeTitle=<> refreshTitle=<> selectionStateTitle=<> field="type" tag="input" default="" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<> class="tc-edit-typeeditor tc-edit-texteditor tc-popup-handle" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}} cancelPopups="yes" configTiddlerFilter="[[$:/core/ui/EditTemplate/type]]" inputCancelActions=<>/><$button popup=<> 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 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="[] [] [] []"/>
From bd99cf3385ef876cfeae8863997948821c7e7c13 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Thu, 21 Sep 2023 18:11:54 +0100 Subject: [PATCH 03/33] Docs: Clarify that whitespace trim is inherited by procedure and widget definitions --- .../tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid | 10 +++++++--- .../tiddlers/procedures/Procedure Definitions.tid | 4 +++- editions/tw5.com/tiddlers/widgets/Custom Widgets.tid | 4 +++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/editions/tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid b/editions/tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid index 273a35bea..6e9f78287 100644 --- a/editions/tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid +++ b/editions/tw5.com/tiddlers/pragmas/Pragma_ _whitespace.tid @@ -1,13 +1,17 @@ created: 20220917113002350 -modified: 20230419103154329 +modified: 20230921180332436 tags: Pragmas title: Pragma: \whitespace type: text/vnd.tiddlywiki -<<.from-version "5.1.15">> The ''\whitespace'' [[pragma|Pragmas]] determines how spaces and newlines are treated within wikitext. Note that this only applies to the printable text, and not to other text, such as the values of attributes. +<<.from-version "5.1.15">> The ''\whitespace'' [[pragma|Pragmas]] determines how spaces and newlines are treated within wikitext. * ''notrim'' -- whitespace text is not subject to special processing (the default) -* ''trim'' -- whitespace text is removed +* ''trim'' -- whitespace text is ignored + +Note that the processing only applies to the printable text, and not to other text, such as the values of attributes. + +The whitespace setting only applies to the parsed content in which it appears. The setting is inherited by embedded [[Procedure Definitions]] and [[Custom Widgets]] definitions, but is not inherited by [[Macro definitions]]. ``` \whitespace trim|notrim diff --git a/editions/tw5.com/tiddlers/procedures/Procedure Definitions.tid b/editions/tw5.com/tiddlers/procedures/Procedure Definitions.tid index aa6d37a72..7d2ef564c 100644 --- a/editions/tw5.com/tiddlers/procedures/Procedure Definitions.tid +++ b/editions/tw5.com/tiddlers/procedures/Procedure Definitions.tid @@ -1,5 +1,5 @@ created: 20221007125701001 -modified: 20230419103154329 +modified: 20230921180332436 tags: WikiText Procedures title: Procedure Definitions type: text/vnd.tiddlywiki @@ -18,6 +18,8 @@ This is the procedure text (param=<>) \end ``` +Note that the [[Pragma: \whitespace]] setting is inherited from the parsing context in which the procedure definition occurs. That means that a tiddler containing multiple procedure definitions only needs a single whitespace pragma at the top of the tiddler, and the setting will be automatically inherited by the procedure definitions without needing the pragma to be repeated. + !! Procedure Definition with Set Widget Procedures are implemented as a special kind of [[variable|Variables]] and so internally are actually defined with a <<.wlink SetWidget>> widget. diff --git a/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid b/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid index 3d762bed2..b8c48b2c3 100644 --- a/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid +++ b/editions/tw5.com/tiddlers/widgets/Custom Widgets.tid @@ -1,5 +1,5 @@ created: 20221007144237585 -modified: 20230419103154328 +modified: 20230921180332436 tags: Concepts Reference title: Custom Widgets type: text/vnd.tiddlywiki @@ -22,6 +22,8 @@ This is the widget, and the attribute is <>. The name of the widget must start with a dollar sign. If it is a user defined widget that does not override an existing widget then it must include at least one period (dot) within the name (for example `$my.widget` or `$acme.logger`). +Note that the [[Pragma: \whitespace]] setting is inherited from the parsing context in which the procedure definition occurs. That means that a tiddler containing multiple procedure definitions only needs a single whitespace pragma at the top of the tiddler, and the setting will be automatically inherited by the procedure definitions without needing the pragma to be repeated. + !! Using Custom Widgets Custom widgets are called in the same way as ordinary built-in widgets: From 526e997aa4de03acdc2ff56ac7c19b3ff06cbb64 Mon Sep 17 00:00:00 2001 From: Maurycy Zarzycki Date: Fri, 22 Sep 2023 20:11:15 +0200 Subject: [PATCH 04/33] Add translation changes to Polish from e16635a5adf00ce486eb2b4bed56f7806fd92a38 (#7752) --- languages/pl-PL/Help/server.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/pl-PL/Help/server.tid b/languages/pl-PL/Help/server.tid index 85213cd9b..afd74aca8 100644 --- a/languages/pl-PL/Help/server.tid +++ b/languages/pl-PL/Help/server.tid @@ -1,5 +1,5 @@ title: $:/language/Help/server -description: Tworzy serwer HTTP wystawiający TiddlyWiki (zalecamy użycie komendy "--listen" zamiast tej) +description: (nieaktualne: patrz komenda 'listen') Tworzy serwer HTTP wystawiający TiddlyWiki (zalecamy użycie komendy "--listen" zamiast tej) Dawna komenda do stawiania serwera wystawiającego wiki. From 780e5d33a404af871748aba4eed2347b35cd8b17 Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Mon, 25 Sep 2023 02:19:04 +0700 Subject: [PATCH 05/33] Slightly speed up [all[shadows+tiddlers]] filters (#7702) The `all` filter operator has shortcuts to optimise common patterns like `[all[shadows+tiddlers]]` or `[all[tiddlers]]`. In those cases, the filter operator function returns early and never uses the `result` linked list that was created, so it's immediately garbage-collected. Let's delay creating it until we know it's actually going to be used. --- core/modules/filters/all.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/modules/filters/all.js b/core/modules/filters/all.js index a36749e92..3554a74b3 100644 --- a/core/modules/filters/all.js +++ b/core/modules/filters/all.js @@ -28,12 +28,8 @@ function getAllFilterOperators() { Export our filter function */ exports.all = function(source,operator,options) { - // Get our suboperators - var allFilterOperators = getAllFilterOperators(); - // Cycle through the suboperators accumulating their results - var results = new $tw.utils.LinkedList(), - subops = operator.operand.split("+"); // Check for common optimisations + var subops = operator.operand.split("+"); if(subops.length === 1 && subops[0] === "") { return source; } else if(subops.length === 1 && subops[0] === "tiddlers") { @@ -46,6 +42,10 @@ exports.all = function(source,operator,options) { return options.wiki.eachShadowPlusTiddlers; } // Do it the hard way + // Get our suboperators + var allFilterOperators = getAllFilterOperators(); + // Cycle through the suboperators accumulating their results + var results = new $tw.utils.LinkedList(); for(var t=0; t Date: Mon, 25 Sep 2023 02:19:50 +0700 Subject: [PATCH 06/33] Fix list widget bug with counter-last when appending items (#7712) * Add failing test for list widget with counter-last The failing test appends a value to a list without changing the rest of the list, and the counter-last value doesn't get updated correctly when that happens. Also added another test, which passes, testing removing the last item of the list, just in case of a regression. * Improve unit tests for counter-last list widget bug The unit tests were looking very similar to each other, so I factored out the common code and made them into simple data-driven tests. * Fix bug where counter-last fails in list widget The only scenario that was failing was when counter-last was used, but the list was strictly appended to with no other changes made. The one unit test that was failing now passes with this fix. * Improve bugfix to list widget counter-last Now we only refresh the last item if it was truly necessary. --- core/modules/widgets/list.js | 11 ++++++++++ editions/test/tiddlers/tests/test-widget.js | 23 +++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/core/modules/widgets/list.js b/core/modules/widgets/list.js index 41344a02e..75592e669 100755 --- a/core/modules/widgets/list.js +++ b/core/modules/widgets/list.js @@ -225,6 +225,8 @@ ListWidget.prototype.handleListChanges = function(changedTiddlers) { // If we are providing an counter variable then we must refresh the items, otherwise we can rearrange them var hasRefreshed = false,t; if(this.counterName) { + var mustRefreshOldLast = false; + var oldLength = this.children.length; // Cycle through the list and remove and re-insert the first item that has changed, and all the remaining items for(t=0; t 0) { + var oldLastIdx = oldLength-1; + this.removeListItem(oldLastIdx); + this.insertListItem(oldLastIdx,this.list[oldLastIdx]); + } // If there are items to remove and we have not refreshed then recreate the item that will now be at the last position if(!hasRefreshed && this.children.length > this.list.length) { this.removeListItem(this.list.length-1); diff --git a/editions/test/tiddlers/tests/test-widget.js b/editions/test/tiddlers/tests/test-widget.js index 544ed928f..4da9e20b0 100755 --- a/editions/test/tiddlers/tests/test-widget.js +++ b/editions/test/tiddlers/tests/test-widget.js @@ -527,6 +527,29 @@ describe("Widget module", function() { expect(wrapper.children[0].children[15].sequenceNumber).toBe(53); }); + var testCounterLast = function(oldList, newList) { + return function() { + var wiki = new $tw.Wiki(); + // Add some tiddlers + wiki.addTiddler({title: "Numbers", text: "", list: oldList}); + var text = "<$list filter='[list[Numbers]]' variable='item' counter='c'><><$text text={{{ [match[no]then[, ]] }}} />"; + var widgetNode = createWidgetNode(parseText(text,wiki),wiki); + // Render the widget node to the DOM + var wrapper = renderWidgetNode(widgetNode); + // Test the rendering + expect(wrapper.innerHTML).toBe("

" + oldList.split(' ').join(', ') + "

"); + // Append a number + wiki.addTiddler({title: "Numbers", text: "", list: newList}); + refreshWidgetNode(widgetNode,wrapper,["Numbers"]); + expect(wrapper.innerHTML).toBe("

" + newList.split(' ').join(', ') + "

"); + } + } + + it("the list widget with counter-last should update correctly when list is appended", testCounterLast("1 2 3 4", "1 2 3 4 5")); + it("the list widget with counter-last should update correctly when last item is removed", testCounterLast("1 2 3 4", "1 2 3")); + it("the list widget with counter-last should update correctly when first item is inserted", testCounterLast("1 2 3 4", "0 1 2 3 4")); + it("the list widget with counter-last should update correctly when first item is removed", testCounterLast("1 2 3 4", "2 3 4")); + it("should deal with the list widget followed by other widgets", function() { var wiki = new $tw.Wiki(); // Add some tiddlers From 9ee1ef7e23fa9923df0ff0155e9f9cab44859a88 Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Mon, 25 Sep 2023 02:20:13 +0700 Subject: [PATCH 07/33] Fix a dangling link in filter run prefix docs (#7715) One example was moved to another tiddler but its link wasn't updated to follow it. This fixes the link to point to the example again. --- editions/tw5.com/tiddlers/filters/syntax/Filter Expression.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/filters/syntax/Filter Expression.tid b/editions/tw5.com/tiddlers/filters/syntax/Filter Expression.tid index f923a03a6..8521859ac 100644 --- a/editions/tw5.com/tiddlers/filters/syntax/Filter Expression.tid +++ b/editions/tw5.com/tiddlers/filters/syntax/Filter Expression.tid @@ -50,7 +50,7 @@ In technical / logical terms: |`~run` |`:else[run]` |else |... ELSE run | ||`:intersection`|intersection of sets|| -For the difference between `+` and `:intersection`, see [[Filter Run Prefix (Examples)]]. +For the difference between `+` and `:intersection`, see [[Intersection Filter Run Prefix (Examples)]]. The input of a run is normally a list of all the non-[[shadow|ShadowTiddlers]] tiddler titles in the wiki (in no particular order). But the `+` prefix can change this: From 773c1f83f24f5da81224a0b8f8abbb759041a9dd Mon Sep 17 00:00:00 2001 From: lin onetwo Date: Mon, 25 Sep 2023 04:54:52 +0800 Subject: [PATCH 08/33] API for deleting core hooks (#7751) * feat: Delete hooks from the hashmap * fix: not using findIndex in the core * Update HookMechanism.tid --- boot/boot.js | 12 ++++++++ editions/dev/tiddlers/new/HookMechanism.tid | 31 +++++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/boot/boot.js b/boot/boot.js index 06d4628c0..1468e00b6 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -2674,6 +2674,18 @@ $tw.hooks.addHook = function(hookName,definition) { } }; +/* +Delete hooks from the hashmap +*/ +$tw.hooks.removeHook = function(hookName,definition) { + if($tw.utils.hop($tw.hooks.names,hookName)) { + var p = $tw.hooks.names[hookName].indexOf(definition); + if(p !== -1) { + $tw.hooks.names[hookName].splice(p, 1); + } + } +}; + /* Invoke the hook by key */ diff --git a/editions/dev/tiddlers/new/HookMechanism.tid b/editions/dev/tiddlers/new/HookMechanism.tid index 0034c9fab..4e4659bca 100644 --- a/editions/dev/tiddlers/new/HookMechanism.tid +++ b/editions/dev/tiddlers/new/HookMechanism.tid @@ -1,9 +1,14 @@ created: 20141122200310516 -modified: 20201213161842776 +modified: 20230923031318421 +tags: Mechanisms title: HookMechanism type: text/vnd.tiddlywiki -The hook mechanism provides a way for plugins to intercept and modify default functionality. Hooks are added as follows: +The hook mechanism provides a way for plugins to intercept and modify default functionality. + +!! Add a hook + +Hooks are added as follows: ```js /* @@ -13,6 +18,8 @@ handler: function to be called when hook is invoked $tw.hooks.addHook(name,handler); ``` +!!! Params and return + The handler function will be called with parameters that depend on the specific hook in question, but they always follow the pattern `handler(value,params...)` * ''value'': an optional value that is to be transformed by the hook function @@ -20,11 +27,29 @@ The handler function will be called with parameters that depend on the specific If required by the hook in question, the handler function must return the modified ''value''. +!!! Multiple handlers + Multiple handlers can be assigned to the same name using repeated calls. When a hook is invoked by name all registered functions will be called sequentially in their order of addition. Note that the ''value'' passed to the subsequent hook function will be the return value of the previous hook function. -Though not essential care should be taken to ensure that hooks are added before they are invoked. For example: [[Hook: th-opening-default-tiddlers-list]] should ideally be added before the story startup module is invoked otherwise any hook specified additions to the default tiddlers will not be seen on the initial loading of the page, though will be visible if the user clicks the home button. +Be careful not to `addHook` in widget's `render` method, which will be call several times. You could `addHook` in methods that only called once, e.g. the constructor of widget class. Otherwise you should `removeHook` then add it again. + +!!! Timing of registration + +Though not essential care should be taken to ensure that hooks are added before they are invoked. + +For example: [[Hook: th-opening-default-tiddlers-list]] should ideally be added before the story startup module is invoked. Otherwise any hook specified additions to the default tiddlers will not be seen on the initial loading of the page, though will be visible if the user clicks the home button. + +!! Remove a hook + +You should clean up the callback when your widget is going to unmount. + +```js +$tw.hooks.removeHook(handler) +``` + +The `handler` should be the same function instance you used in `addHook` (check by `===`). You can save it to `this.xxxHookHandler` on your widget, and call `removeHook` in [[destroy method|Widget `destroy` method examples]]. !! Example From 1be8f0a9336952d4745d2bd4f2327e353580a272 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Tue, 26 Sep 2023 17:55:01 +0100 Subject: [PATCH 09/33] Comments plugin should use palette colours --- plugins/tiddlywiki/comments/styles.tid | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/tiddlywiki/comments/styles.tid b/plugins/tiddlywiki/comments/styles.tid index 613c4fdec..ed3cf1ddf 100644 --- a/plugins/tiddlywiki/comments/styles.tid +++ b/plugins/tiddlywiki/comments/styles.tid @@ -5,13 +5,13 @@ tags: [[$:/tags/Stylesheet]] .tc-is-comment-header { padding: 0.25em; - border: 2px solid #c1e1ea; + border: 2px solid <>; border-radius: 4px; - background: #f1fcff; + background: <>; } .tc-comments-segment { - border-top: 2px solid #d7eef4; + border-top: 2px solid <>; } .tc-comment-button button { @@ -25,7 +25,7 @@ tags: [[$:/tags/Stylesheet]] } .tc-comment-button button svg { - fill: #26cb56; + fill: <>; height: 2em; width: 2em; } @@ -44,18 +44,18 @@ tags: [[$:/tags/Stylesheet]] .tc-comment-entry { position: relative; - border: 2px solid #c1e1ea; + border: 2px solid <>; border-radius: 4px; margin: 0.5em 0 0 0; - background: #f1fcff; + background: <>; } .tc-comment-entry-heading { font-size: 0.7em; font-weight: bold; text-transform: uppercase; - background: #d7eef4; - color: #5B6D80; + background: <>; + color: <>; padding: 0 0.5em; } From b4a862c61874657af10349d86c6ecbdb11e50dae Mon Sep 17 00:00:00 2001 From: Mario Pietsch Date: Thu, 28 Sep 2023 15:59:50 +0200 Subject: [PATCH 10/33] Fix #7757 vanilla styles should be first (#7758) --- themes/tiddlywiki/vanilla/base.tid | 1 + 1 file changed, 1 insertion(+) diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index 4603589ae..031b849bf 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -1,5 +1,6 @@ title: $:/themes/tiddlywiki/vanilla/base tags: [[$:/tags/Stylesheet]] +list-before: code-body: yes \define custom-background-datauri() From bbaa0890b53446c1a5eca564e80cfe18b1171767 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 30 Sep 2023 13:30:31 +0100 Subject: [PATCH 11/33] Fix broken render commands Fixes #7759 --- editions/empty/tiddlywiki.info | 2 +- editions/highlightdemo/tiddlywiki.info | 2 +- editions/katexdemo/tiddlywiki.info | 2 +- editions/server-external-js/tiddlywiki.info | 2 +- editions/server/tiddlywiki.info | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/editions/empty/tiddlywiki.info b/editions/empty/tiddlywiki.info index 2b108e917..c754aad8a 100644 --- a/editions/empty/tiddlywiki.info +++ b/editions/empty/tiddlywiki.info @@ -23,7 +23,7 @@ "static": [ "--render","$:/core/templates/static.template.html","static.html","text/plain", "--render","$:/core/templates/alltiddlers.template.html","alltiddlers.html","text/plain", - "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain", + "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain","$:/core/templates/static.tiddler.html", "--render","$:/core/templates/static.template.css","static/static.css","text/plain"] } } diff --git a/editions/highlightdemo/tiddlywiki.info b/editions/highlightdemo/tiddlywiki.info index 69dc1336b..075859c8c 100644 --- a/editions/highlightdemo/tiddlywiki.info +++ b/editions/highlightdemo/tiddlywiki.info @@ -15,7 +15,7 @@ "static": [ "--render","$:/core/templates/static.template.html","static.html","text/plain", "--render","$:/core/templates/alltiddlers.template.html","alltiddlers.html","text/plain", - "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain", + "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain","$:/core/templates/static.tiddler.html", "--render","$:/core/templates/static.template.css","static/static.css","text/plain"] } } diff --git a/editions/katexdemo/tiddlywiki.info b/editions/katexdemo/tiddlywiki.info index 4d1ad4c32..bd07b3e28 100644 --- a/editions/katexdemo/tiddlywiki.info +++ b/editions/katexdemo/tiddlywiki.info @@ -15,7 +15,7 @@ "static": [ "--render","$:/core/templates/static.template.html","static.html","text/plain", "--render","$:/core/templates/alltiddlers.template.html","alltiddlers.html","text/plain", - "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain", + "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain","$:/core/templates/static.tiddler.html", "--render","$:/core/templates/static.template.css","static/static.css","text/plain"] } } diff --git a/editions/server-external-js/tiddlywiki.info b/editions/server-external-js/tiddlywiki.info index 407cf9a8a..b0c245b49 100644 --- a/editions/server-external-js/tiddlywiki.info +++ b/editions/server-external-js/tiddlywiki.info @@ -17,7 +17,7 @@ "static": [ "--render","$:/core/templates/static.template.html","static.html","text/plain", "--render","$:/core/templates/alltiddlers.template.html","alltiddlers.html","text/plain", - "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain", + "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain","$:/core/templates/static.tiddler.html", "--render","$:/core/templates/static.template.css","static/static.css","text/plain"], "tiddlywikicore": [ "--render","$:/core/templates/tiddlywiki5.js","[[tiddlywikicore-]addsuffixaddsuffix[.js]]","text/plain"] diff --git a/editions/server/tiddlywiki.info b/editions/server/tiddlywiki.info index 9067d778e..e35ff95f8 100644 --- a/editions/server/tiddlywiki.info +++ b/editions/server/tiddlywiki.info @@ -15,7 +15,7 @@ "static": [ "--render","$:/core/templates/static.template.html","static.html","text/plain", "--render","$:/core/templates/alltiddlers.template.html","alltiddlers.html","text/plain", - "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain", + "--render","[!is[system]]","[encodeuricomponent[]addprefix[static/]addsuffix[.html]]","text/plain","$:/core/templates/static.tiddler.html", "--render","$:/core/templates/static.template.css","static/static.css","text/plain"] } } \ No newline at end of file From bb2973fc29508a0512c1dc17151606aff43b7bf4 Mon Sep 17 00:00:00 2001 From: Robin Munn Date: Sat, 30 Sep 2023 22:33:40 +0700 Subject: [PATCH 12/33] Make flexbox or grid layouts possible (#7690) Both flexbox and grid layouts need the container div to be the direct parent of the children it lays out. To enable that, we need a class that can select the direct parent of the list widget in PageTemplate.tid so that that class can have `display: flex` or `display: grid` applied to it. The `tc-page-container` div is not suitable, because it contains a `<$dropzone>` inside it, and the dropzone widget creates a div so tc-page-container is no longer the direct parent of the list. Instead, a tc-page-container-inner class is added to the dropzone widget in addition to its existing tc-dropzone class, so that grid or flexbox layouts can target tc-page-container-inner for setting the appropriate CSS `display` property. --- core/ui/PageTemplate.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/ui/PageTemplate.tid b/core/ui/PageTemplate.tid index 38b4c915b..20891e35d 100644 --- a/core/ui/PageTemplate.tid +++ b/core/ui/PageTemplate.tid @@ -20,7 +20,7 @@ code-body: yes <$navigator story="$:/StoryList" history="$:/HistoryList" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}> -<$dropzone enable=<>> +<$dropzone enable=<> class="tc-dropzone tc-page-container-inner"> <$list filter="[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]" variable="listItem"> From 5bb81554229b7cfde39a3c4ca216f92b585b30df Mon Sep 17 00:00:00 2001 From: Joe Bordes Date: Sun, 1 Oct 2023 10:00:06 +0200 Subject: [PATCH 13/33] i18n(ES) update to latest version changes (#7761) --- core/language/en-GB/Help/savewikifolder.tid | 4 ++-- languages/es-ES/Buttons.multids | 2 ++ languages/es-ES/Fields.multids | 4 ++++ languages/es-ES/Help/listen.tid | 2 +- languages/es-ES/Help/savewikifolder.tid | 17 ++++++++++++++++- languages/es-ES/Help/server.tid | 2 +- languages/es-ES/Misc.multids | 3 +++ languages/es-ES/SiteTitle.tid | 2 +- 8 files changed, 30 insertions(+), 6 deletions(-) diff --git a/core/language/en-GB/Help/savewikifolder.tid b/core/language/en-GB/Help/savewikifolder.tid index 5c6405ad2..82565f7bc 100644 --- a/core/language/en-GB/Help/savewikifolder.tid +++ b/core/language/en-GB/Help/savewikifolder.tid @@ -19,7 +19,7 @@ The following options are supported: ** ''yes'' will "explode" plugins into separate tiddler files and save them to the plugin directory within the wiki folder ** ''no'' will suppress exploding plugins into their constituent tiddler files. It will save the plugin as a single JSON tiddler in the tiddlers folder -Note that both ''explodePlugins'' options will produce wiki folders that build the same exact same original wiki. The difference lies in how plugins are represented in the wiki folder. +Note that both ''explodePlugins'' options will produce wiki folders that build the exact same original wiki. The difference lies in how plugins are represented in the wiki folder. A common usage is to convert a TiddlyWiki HTML file into a wiki folder: @@ -31,4 +31,4 @@ Save the plugin to the tiddlers directory of the target wiki folder: ``` tiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder explodePlugins=no -``` \ No newline at end of file +``` diff --git a/languages/es-ES/Buttons.multids b/languages/es-ES/Buttons.multids index 1e36bc00e..5ee88ead4 100644 --- a/languages/es-ES/Buttons.multids +++ b/languages/es-ES/Buttons.multids @@ -67,6 +67,8 @@ More/Caption: Más More/Hint: Otras acciones NewHere/Caption: Nuevo aquí NewHere/Hint: Crea un nuevo tiddler etiquetado con el título de este tiddler +NetworkActivity/Caption: actividad de red +NetworkActivity/Hint: Cancelar la actividad de red NewJournal/Caption: Nueva entrada NewJournal/Hint: Crea una nueva entrada de diario NewJournalHere/Caption: Entrada nueva aquí diff --git a/languages/es-ES/Fields.multids b/languages/es-ES/Fields.multids index fe0b54dd9..4ea73213e 100644 --- a/languages/es-ES/Fields.multids +++ b/languages/es-ES/Fields.multids @@ -1,11 +1,13 @@ title: $:/language/Docs/Fields/ _canonical_uri: Dirección (URI) completa -absoluta o relativa- de un tiddler externo de imagen +author: Nombre del autor de un plugin bag: Nombre de la bolsa de la que procede un tiddler caption: Texto que se muestra en una pestaña o botón, con independencia del título del tiddler que lo define code-body: La plantilla de vista mostrará el tiddler como código si se establece en ''yes'' color: Valor CSS del color de fondo asociado a un tiddler component: Nombre del componente responsable de un [[tiddler de alerta|AlertMechanism]] +core-version: Para un plugin, indica con qué versión de TiddlyWiki es compatible current-tiddler: Usado para incluir el tiddler superior en una [[historia|HistoryMechanism]] created: Fecha de creación del tiddler creator: Nombre del autor del tiddler @@ -22,7 +24,9 @@ list-before: Título del tiddler antes del que el presente será añadido a una list-after: Título del tiddler tras el que el presente será añadido a una lista de tiddlers. modified: Fecha y hora de última modificación modifier: Nombre del tiddler asociado con quien modificó por última vez el presente tiddler +module-type: Para los tiddlers javascript, especifica de qué tipo de módulo se trata name: Nombre asociado con un complemento o extensión +parent-plugin: Para un plugin, especifica de qué plugin es un subplugin plugin-priority: Valor numérico que indica la prioridad de un complemento o extensión plugin-type: Tipo de complemento o extensión revision: Revisión del tiddler existente en el servidor diff --git a/languages/es-ES/Help/listen.tid b/languages/es-ES/Help/listen.tid index 9cfae2bb1..c3b77dc66 100644 --- a/languages/es-ES/Help/listen.tid +++ b/languages/es-ES/Help/listen.tid @@ -18,7 +18,7 @@ Todos los parámetros son opcionales con valores predeterminados seguros y se pu * ''anon-username'' - el nombre de usuario para firmar ediciones de usuarios anónimos * ''username'' - nombre de usuario opcional para autenticación básica * ''password'' - contraseña opcional para autenticación básica -* ''authenticated-user-header'' - nombre opcional del encabezado que se utilizará para la autenticación de confianza +* ''authenticated-user-header'' - nombre opcional del encabezado de solicitud que se utilizará para la autenticación de confianza. * ''readers'' - lista separada por comas de los usuarios autorizados a leer de este wiki * ''writers'' - lista separada por comas de los usuarios autorizados a escribir en este wiki * ''csrf-disable'' - establecer a "yes" para deshabilitar las comprobaciones CSRF (el valor predeterminado es "no") diff --git a/languages/es-ES/Help/savewikifolder.tid b/languages/es-ES/Help/savewikifolder.tid index 6522b7155..268180aae 100644 --- a/languages/es-ES/Help/savewikifolder.tid +++ b/languages/es-ES/Help/savewikifolder.tid @@ -4,7 +4,7 @@ description: Guarda un wiki en una nueva carpeta de wiki <<.from-version "5.1.20">> Guarda el wiki actual como una carpeta de wiki, incluidos tiddlers, complementos y configuración: ``` ---savewikifolder [] +--savewikifolder [] [ [=] ]* ``` * La carpeta wiki de destino debe estar vacía o no existir @@ -12,8 +12,23 @@ description: Guarda un wiki en una nueva carpeta de wiki * Los complementos de la biblioteca oficial de complementos se reemplazan con referencias a esos complementos en el archivo `tiddlywiki.info` * Los complementos personalizados se descomprimen en su propia carpeta +Se admiten las siguientes opciones: + +* ''filter'': una expresión de filtro que define los tiddlers que se incluirán en la salida. +* ''explodePlugins'': por defecto "yes". +** ''yes'' desplegará los plugins en archivos tiddler separados y los guardará en el directorio de plugins dentro de la carpeta wiki +** ''no'' no realizará el despliegue del plugin en sus archivos tiddler constituyentes si no que guardará el plugin como un único tiddler JSON en la carpeta tiddlers. + +Ten en cuenta que ambas opciones ''explodePlugins'' producirán carpetas wiki que construirán exactamente el mismo wiki original. La diferencia radica en cómo se representan los plugins en la carpeta wiki. + Un uso común es convertir un archivo HTML de TiddlyWiki en una carpeta wiki: ``` tiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder ``` + +Guarda el plugin en el directorio tiddlers de la carpeta wiki de destino: + +``` +tiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder explodePlugins=no +``` diff --git a/languages/es-ES/Help/server.tid b/languages/es-ES/Help/server.tid index b16769dfe..a05099240 100644 --- a/languages/es-ES/Help/server.tid +++ b/languages/es-ES/Help/server.tid @@ -1,5 +1,5 @@ title: $:/language/Help/server -description: Proporciona interfaz de servidor HTTP a TiddlyWiki (en desuso a favor del nuevo comando listen) +description: (en desuso: utiliza el comando 'listen') Proporciona interfaz de servidor HTTP a TiddlyWiki Comando obsoleto para servir una wiki a través de HTTP. diff --git a/languages/es-ES/Misc.multids b/languages/es-ES/Misc.multids index 457ad56e2..6c0839027 100644 --- a/languages/es-ES/Misc.multids +++ b/languages/es-ES/Misc.multids @@ -25,6 +25,8 @@ Encryption/RepeatPassword: Repite la contraseña Encryption/PasswordNoMatch: Las contraseñas no coinciden Encryption/SetPassword: Establecer contraseña Error/Caption: Error +Error/DeserializeOperator/MissingOperand: Error de filtro: Falta el operando 'deserialize +Error/DeserializeOperator/UnknownDeserializer: Error de filtro: Deserializador desconocido proporcionado como operando para el operador 'deserialize'. Error/Filter: Error de filtro Error/FilterSyntax: Error de sintaxis en la expresión de filtro Error/FilterRunPrefix: Error en Filtro: Prefijo desconocido para la ejecución del filtro @@ -40,6 +42,7 @@ Error/RetrievingSkinny: Error al recuperar la lista resumida de tiddlers Error/SavingToTWEdit: Error al guardar en TWEdit Error/WhileSaving: Error al guardar Error/XMLHttpRequest: Código de error XMLHttpRequest +Error/ZoominTextNode: Error de vista de historia: Parece que has intentado interactuar con un tiddler que se muestra en un contenedor personalizado. La causa más probable es el uso de `$:/tags/StoryTiddlerTemplateFilter` con una plantilla que contiene texto o espacios en blanco al principio. Utiliza el pragma `\whitespace trim` y asegúrate de que todo el contenido del tiddler está envuelto en un único elemento HTML. El texto que causó este problema: InternalJavaScriptError/Hint: Hay un problema. Se recomienda que reinicies TiddlyWiki InternalJavaScriptError/Title: Error interno de JavaScript LayoutSwitcher/Description: Abre el selector de diseño diff --git a/languages/es-ES/SiteTitle.tid b/languages/es-ES/SiteTitle.tid index f1899630c..875fe88b1 100644 --- a/languages/es-ES/SiteTitle.tid +++ b/languages/es-ES/SiteTitle.tid @@ -1,3 +1,3 @@ title: $:/SiteTitle -Mi ~TiddlyWiki \ No newline at end of file +Mi TiddlyWiki From d17525ec8e3a5e3b93e8410cb09f6707ef657b21 Mon Sep 17 00:00:00 2001 From: Mateusz Wilczek <36714554+mateuszwilczek@users.noreply.github.com> Date: Tue, 3 Oct 2023 22:37:49 +0200 Subject: [PATCH 14/33] Improve file type names (TID, SVG, ICO) in hints (#7764) * Make filetype names in hints consistent * Make ICO content type hint more consistent --- core/language/en-GB/Exporters.multids | 2 +- core/language/en-GB/Types/image_svg_xml.tid | 2 +- core/language/en-GB/Types/image_x-icon.tid | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/language/en-GB/Exporters.multids b/core/language/en-GB/Exporters.multids index e455b8bf1..6ac52efe7 100644 --- a/core/language/en-GB/Exporters.multids +++ b/core/language/en-GB/Exporters.multids @@ -3,4 +3,4 @@ title: $:/language/Exporters/ StaticRiver: Static HTML JsonFile: JSON file CsvFile: CSV file -TidFile: ".tid" file +TidFile: TID text file diff --git a/core/language/en-GB/Types/image_svg_xml.tid b/core/language/en-GB/Types/image_svg_xml.tid index 9f7c23ba3..94c3ea949 100644 --- a/core/language/en-GB/Types/image_svg_xml.tid +++ b/core/language/en-GB/Types/image_svg_xml.tid @@ -1,5 +1,5 @@ title: $:/language/Docs/Types/image/svg+xml -description: Structured Vector Graphics image +description: SVG image name: image/svg+xml group: Image group-sort: 1 diff --git a/core/language/en-GB/Types/image_x-icon.tid b/core/language/en-GB/Types/image_x-icon.tid index 6ae32331c..55420387a 100644 --- a/core/language/en-GB/Types/image_x-icon.tid +++ b/core/language/en-GB/Types/image_x-icon.tid @@ -1,5 +1,5 @@ title: $:/language/Docs/Types/image/x-icon -description: ICO format icon file +description: ICO icon name: image/x-icon group: Image group-sort: 1 From 3fb71e2553d810f41fdca1d537865d8c5c4172c4 Mon Sep 17 00:00:00 2001 From: Timur Date: Thu, 5 Oct 2023 03:24:14 +1000 Subject: [PATCH 15/33] Signing the CLA (#7766) --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index 9c4173e01..b5926fc44 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -549,3 +549,5 @@ Eric Haberstroh, @pille1842, 2023/07/23 @cmo-pomerium, 2023/08/03 BuckarooBanzay, @BuckarooBanzay, 2023/09/01 + +Timur, @T1mL3arn, 2023/10/04 From def508a2209b9aa7f56fd7e5c88ed2595ec3ca41 Mon Sep 17 00:00:00 2001 From: Timur Date: Thu, 5 Oct 2023 03:24:45 +1000 Subject: [PATCH 16/33] Fix offline upgrade download link (#6088) * Fix offline upgrade download link In Firefox (92.0.1) `href="#"` does not allow to start downloading of `upgrade.html` (Chrome has no such problem). Making href completely empty fixes the issue. * Update plugins/tiddlywiki/upgrade/UpgradeWizard.tid --- plugins/tiddlywiki/upgrade/UpgradeWizard.tid | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/tiddlywiki/upgrade/UpgradeWizard.tid b/plugins/tiddlywiki/upgrade/UpgradeWizard.tid index c45e57c60..922441bd6 100644 --- a/plugins/tiddlywiki/upgrade/UpgradeWizard.tid +++ b/plugins/tiddlywiki/upgrade/UpgradeWizard.tid @@ -50,7 +50,7 @@ For help and support, visit [[the TiddlyWiki discussion forum|http://groups.goog
-//Your data will not leave your browser. Download this upgrader to use it offline// +//Your data will not leave your browser. Download this upgrader to use it offline// //If clicking the link doesn't work, right-click the link and save it that way.// From 1eceb5f47f6412953a6317e5d68c66a57039ff33 Mon Sep 17 00:00:00 2001 From: Bram Chen Date: Thu, 5 Oct 2023 01:25:10 +0800 Subject: [PATCH 17/33] Update chinese language files (#7765) * Improve consistency of naming file types and content types in some UI hints. --- languages/zh-Hans/Exporters.multids | 2 +- languages/zh-Hans/Types/image_svg_xml.tid | 2 +- languages/zh-Hans/Types/image_x-icon.tid | 2 +- languages/zh-Hant/Exporters.multids | 2 +- languages/zh-Hant/Types/image_svg_xml.tid | 2 +- languages/zh-Hant/Types/image_x-icon.tid | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/languages/zh-Hans/Exporters.multids b/languages/zh-Hans/Exporters.multids index 9786906da..d63644c0a 100644 --- a/languages/zh-Hans/Exporters.multids +++ b/languages/zh-Hans/Exporters.multids @@ -3,4 +3,4 @@ title: $:/language/Exporters/ StaticRiver: 静态 HTML JsonFile: JSON 文件 CsvFile: CSV 文件 -TidFile: ".tid" 文件 +TidFile: TID 文本文件 diff --git a/languages/zh-Hans/Types/image_svg_xml.tid b/languages/zh-Hans/Types/image_svg_xml.tid index 471564b30..3dcc47c57 100644 --- a/languages/zh-Hans/Types/image_svg_xml.tid +++ b/languages/zh-Hans/Types/image_svg_xml.tid @@ -1,4 +1,4 @@ title: $:/language/Docs/Types/image/svg+xml -description: 结构式矢量图 +description: SVG 图像 name: image/svg+xml group: 图像 diff --git a/languages/zh-Hans/Types/image_x-icon.tid b/languages/zh-Hans/Types/image_x-icon.tid index 5e126f903..a5b5159bc 100644 --- a/languages/zh-Hans/Types/image_x-icon.tid +++ b/languages/zh-Hans/Types/image_x-icon.tid @@ -1,4 +1,4 @@ title: $:/language/Docs/Types/image/x-icon -description: 图标 +description: ICO 图标 name: image/x-icon group: 图像 diff --git a/languages/zh-Hant/Exporters.multids b/languages/zh-Hant/Exporters.multids index 933feeb3a..7829a0f72 100644 --- a/languages/zh-Hant/Exporters.multids +++ b/languages/zh-Hant/Exporters.multids @@ -3,4 +3,4 @@ title: $:/language/Exporters/ StaticRiver: 靜態 HTML JsonFile: JSON 檔案 CsvFile: CSV 檔案 -TidFile: ".tid" 檔案 +TidFile: TID 文字檔案 diff --git a/languages/zh-Hant/Types/image_svg_xml.tid b/languages/zh-Hant/Types/image_svg_xml.tid index bcf53f66a..a069952c7 100644 --- a/languages/zh-Hant/Types/image_svg_xml.tid +++ b/languages/zh-Hant/Types/image_svg_xml.tid @@ -1,4 +1,4 @@ title: $:/language/Docs/Types/image/svg+xml -description: 結構式向量圖 +description: SVG 圖片 name: image/svg+xml group: 圖片 diff --git a/languages/zh-Hant/Types/image_x-icon.tid b/languages/zh-Hant/Types/image_x-icon.tid index 90a255ffb..5dd06b877 100644 --- a/languages/zh-Hant/Types/image_x-icon.tid +++ b/languages/zh-Hant/Types/image_x-icon.tid @@ -1,4 +1,4 @@ title: $:/language/Docs/Types/image/x-icon -description: 圖示 +description: ICO 圖示 name: image/x-icon group: 圖片 From 68da654eb356ff83b3d319b496663347b93cb783 Mon Sep 17 00:00:00 2001 From: Mateusz Wilczek <36714554+mateuszwilczek@users.noreply.github.com> Date: Wed, 4 Oct 2023 23:15:23 +0200 Subject: [PATCH 18/33] Change favicon format from ICO to PNG, fix #7665 (#7671) * Change favicon format from ICO to PNG * Revert renaming `./favicon.ico` Keep the backwards compatible file name `./favicon.ico` (though they will actually be in PNG format now). * Add SVG template for creating favicons Add `favicons.svg`, the template for creating the current PNG favicons, along with some helpful information about it in `favicons.svg.md`. * Add source Inkscape SVG Add source Inkscape SVG as an example of image tiddler in tw-com --- .../de-AT-server/tiddlers/system/favicon.ico | Bin 6518 -> 0 bytes .../de-AT-server/tiddlers/system/favicon.png | Bin 0 -> 5734 bytes .../tiddlers/system/favicon.png.meta} | 2 +- editions/dev/tiddlers/images/favicon.ico | Bin 6518 -> 0 bytes editions/dev/tiddlers/images/favicon.png | Bin 0 -> 5542 bytes .../tiddlers/images/favicon.png.meta} | 2 +- .../es-ES-server/tiddlers/system/favicon.ico | Bin 6518 -> 0 bytes .../es-ES-server/tiddlers/system/favicon.png | Bin 0 -> 5734 bytes .../tiddlers/system/favicon.png.meta} | 2 +- editions/es-ES/tiddlers/images/favicon.ico | Bin 6518 -> 0 bytes editions/es-ES/tiddlers/images/favicon.png | Bin 0 -> 5766 bytes .../tiddlers/images/favicon.png.meta} | 2 +- .../es-ES/tiddlers/images/green_favicon.ico | Bin 6518 -> 0 bytes .../es-ES/tiddlers/images/green_favicon.png | Bin 0 -> 5824 bytes ...avicon.ico.meta => green_favicon.png.meta} | 2 +- .../fr-FR-server/tiddlers/system/favicon.ico | Bin 6518 -> 0 bytes .../tiddlers/system/favicon.ico.meta | 2 - .../fr-FR-server/tiddlers/system/favicon.png | Bin 0 -> 5734 bytes .../tiddlers/system/favicon.png.meta | 2 + editions/fr-FR/tiddlers/images/favicon.ico | Bin 6518 -> 0 bytes .../fr-FR/tiddlers/images/favicon.ico.meta | 2 - editions/fr-FR/tiddlers/images/favicon.png | Bin 0 -> 5766 bytes .../fr-FR/tiddlers/images/favicon.png.meta | 2 + .../fr-FR/tiddlers/images/green_favicon.ico | Bin 6518 -> 0 bytes .../fr-FR/tiddlers/images/green_favicon.png | Bin 0 -> 5824 bytes ...avicon.ico.meta => green_favicon.png.meta} | 2 +- editions/ja-JP/tiddlers/images/favicon.ico | Bin 6518 -> 0 bytes .../ja-JP/tiddlers/images/favicon.ico.meta | 2 - editions/ja-JP/tiddlers/images/favicon.png | Bin 0 -> 5766 bytes .../ja-JP/tiddlers/images/favicon.png.meta | 2 + .../ja-JP/tiddlers/images/green_favicon.ico | Bin 6518 -> 0 bytes .../ja-JP/tiddlers/images/green_favicon.png | Bin 0 -> 5824 bytes ...avicon.ico.meta => green_favicon.png.meta} | 2 +- .../ko-KR-server/tiddlers/system/favicon.ico | Bin 6518 -> 0 bytes .../tiddlers/system/favicon.ico.meta | 2 - .../ko-KR-server/tiddlers/system/favicon.png | Bin 0 -> 5734 bytes .../tiddlers/system/favicon.png.meta | 2 + editions/ko-KR/tiddlers/images/favicon.ico | Bin 6518 -> 0 bytes .../ko-KR/tiddlers/images/favicon.ico.meta | 2 - editions/ko-KR/tiddlers/images/favicon.png | Bin 0 -> 5766 bytes .../ko-KR/tiddlers/images/favicon.png.meta | 2 + .../ko-KR/tiddlers/images/green_favicon.ico | Bin 6518 -> 0 bytes .../ko-KR/tiddlers/images/green_favicon.png | Bin 0 -> 5824 bytes ...avicon.ico.meta => green_favicon.png.meta} | 2 +- .../prerelease/tiddlers/system/favicon.ico | Bin 120606 -> 0 bytes .../tiddlers/system/favicon.ico.meta | 2 - .../prerelease/tiddlers/system/favicon.png | Bin 0 -> 4924 bytes .../tiddlers/system/favicon.png.meta | 2 + editions/tw.org/tiddlers/$__favicon.ico.png | Bin 6307 -> 5712 bytes .../tiddlers/system/favicon.ico | Bin 6518 -> 0 bytes .../tiddlers/system/favicon.ico.meta | 2 - .../tiddlers/system/tiddlywiki.com.server.png | Bin 0 -> 5734 bytes .../system/tiddlywiki.com.server.png.meta | 2 + .../favicons/classic.tiddlywiki.com.ico | Bin 894 -> 0 bytes .../favicons/classic.tiddlywiki.com.png | Bin 0 -> 235 bytes ...o.meta => classic.tiddlywiki.com.png.meta} | 2 +- .../tiddlers/_tw_shared/favicons/favicons.svg | 296 ++++++++++++++++++ .../_tw_shared/favicons/favicons.svg.md | 15 + .../favicons/links.tiddlywiki.org.ico | Bin 5076 -> 0 bytes .../favicons/links.tiddlywiki.org.png | Bin 0 -> 4443 bytes ...ico.meta => links.tiddlywiki.org.png.meta} | 2 +- .../favicons/tiddlywiki.com.dev.ico | Bin 6518 -> 0 bytes .../favicons/tiddlywiki.com.dev.png | Bin 0 -> 5542 bytes ...v.ico.meta => tiddlywiki.com.dev.png.meta} | 2 +- .../_tw_shared/favicons/tiddlywiki.com.ico | Bin 109030 -> 0 bytes .../_tw_shared/favicons/tiddlywiki.com.png | Bin 0 -> 5766 bytes ...i.com.ico.meta => tiddlywiki.com.png.meta} | 2 +- .../favicons/tiddlywiki.com.prerelease.ico | Bin 120606 -> 0 bytes .../favicons/tiddlywiki.com.prerelease.png | Bin 0 -> 4924 bytes ...eta => tiddlywiki.com.prerelease.png.meta} | 2 +- .../favicons/tiddlywiki.com.upgrade.ico | Bin 25718 -> 0 bytes .../favicons/tiddlywiki.com.upgrade.png | Bin 0 -> 5541 bytes ...o.meta => tiddlywiki.com.upgrade.png.meta} | 2 +- .../_tw_shared/favicons/tiddlywiki.org.ico | Bin 6307 -> 0 bytes .../_tw_shared/favicons/tiddlywiki.org.png | Bin 0 -> 5712 bytes ...i.org.ico.meta => tiddlywiki.org.png.meta} | 0 .../tiddlers/images/Favicon template.svg | 296 ++++++++++++++++++ .../tiddlers/images/Favicon template.svg.meta | 3 + editions/tw5.com/tiddlers/images/favicon.ico | Bin 109030 -> 0 bytes .../tw5.com/tiddlers/images/favicon.ico.meta | 2 - editions/tw5.com/tiddlers/images/favicon.png | Bin 0 -> 5766 bytes .../tw5.com/tiddlers/images/favicon.png.meta | 2 + .../tw5.com/tiddlers/images/green_favicon.ico | Bin 6518 -> 0 bytes .../tiddlers/images/green_favicon.ico.meta | 2 - .../tw5.com/tiddlers/images/green_favicon.png | Bin 0 -> 5824 bytes .../tiddlers/images/green_favicon.png.meta | 2 + editions/zh-Hans/tiddlers/images/favicon.ico | Bin 6518 -> 0 bytes .../zh-Hans/tiddlers/images/favicon.ico.meta | 2 - editions/zh-Hans/tiddlers/images/favicon.png | Bin 0 -> 5766 bytes .../zh-Hans/tiddlers/images/favicon.png.meta | 2 + .../zh-Hans/tiddlers/images/green_favicon.ico | Bin 6518 -> 0 bytes .../tiddlers/images/green_favicon.ico.meta | 2 - .../zh-Hans/tiddlers/images/green_favicon.png | Bin 0 -> 5824 bytes .../tiddlers/images/green_favicon.png.meta | 2 + editions/zh-Hant/tiddlers/images/favicon.ico | Bin 6518 -> 0 bytes .../zh-Hant/tiddlers/images/favicon.ico.meta | 2 - editions/zh-Hant/tiddlers/images/favicon.png | Bin 0 -> 5766 bytes .../zh-Hant/tiddlers/images/favicon.png.meta | 2 + .../zh-Hant/tiddlers/images/green_favicon.ico | Bin 6518 -> 0 bytes .../tiddlers/images/green_favicon.ico.meta | 2 - .../zh-Hant/tiddlers/images/green_favicon.png | Bin 0 -> 5824 bytes .../tiddlers/images/green_favicon.png.meta | 2 + plugins/tiddlywiki/upgrade/favicon.ico | Bin 25718 -> 0 bytes plugins/tiddlywiki/upgrade/favicon.ico.meta | 2 - plugins/tiddlywiki/upgrade/favicon.png | Bin 0 -> 5541 bytes plugins/tiddlywiki/upgrade/favicon.png.meta | 2 + 106 files changed, 652 insertions(+), 42 deletions(-) delete mode 100644 editions/de-AT-server/tiddlers/system/favicon.ico create mode 100644 editions/de-AT-server/tiddlers/system/favicon.png rename editions/{es-ES-server/tiddlers/system/favicon.ico.meta => de-AT-server/tiddlers/system/favicon.png.meta} (53%) delete mode 100644 editions/dev/tiddlers/images/favicon.ico create mode 100644 editions/dev/tiddlers/images/favicon.png rename editions/{de-AT-server/tiddlers/system/favicon.ico.meta => dev/tiddlers/images/favicon.png.meta} (53%) delete mode 100644 editions/es-ES-server/tiddlers/system/favicon.ico create mode 100644 editions/es-ES-server/tiddlers/system/favicon.png rename editions/{es-ES/tiddlers/images/favicon.ico.meta => es-ES-server/tiddlers/system/favicon.png.meta} (53%) delete mode 100644 editions/es-ES/tiddlers/images/favicon.ico create mode 100644 editions/es-ES/tiddlers/images/favicon.png rename editions/{dev/tiddlers/images/favicon.ico.meta => es-ES/tiddlers/images/favicon.png.meta} (53%) delete mode 100644 editions/es-ES/tiddlers/images/green_favicon.ico create mode 100644 editions/es-ES/tiddlers/images/green_favicon.png rename editions/es-ES/tiddlers/images/{green_favicon.ico.meta => green_favicon.png.meta} (59%) delete mode 100644 editions/fr-FR-server/tiddlers/system/favicon.ico delete mode 100644 editions/fr-FR-server/tiddlers/system/favicon.ico.meta create mode 100644 editions/fr-FR-server/tiddlers/system/favicon.png create mode 100644 editions/fr-FR-server/tiddlers/system/favicon.png.meta delete mode 100644 editions/fr-FR/tiddlers/images/favicon.ico delete mode 100644 editions/fr-FR/tiddlers/images/favicon.ico.meta create mode 100644 editions/fr-FR/tiddlers/images/favicon.png create mode 100644 editions/fr-FR/tiddlers/images/favicon.png.meta delete mode 100644 editions/fr-FR/tiddlers/images/green_favicon.ico create mode 100644 editions/fr-FR/tiddlers/images/green_favicon.png rename editions/fr-FR/tiddlers/images/{green_favicon.ico.meta => green_favicon.png.meta} (59%) delete mode 100644 editions/ja-JP/tiddlers/images/favicon.ico delete mode 100644 editions/ja-JP/tiddlers/images/favicon.ico.meta create mode 100644 editions/ja-JP/tiddlers/images/favicon.png create mode 100644 editions/ja-JP/tiddlers/images/favicon.png.meta delete mode 100644 editions/ja-JP/tiddlers/images/green_favicon.ico create mode 100644 editions/ja-JP/tiddlers/images/green_favicon.png rename editions/ja-JP/tiddlers/images/{green_favicon.ico.meta => green_favicon.png.meta} (59%) delete mode 100644 editions/ko-KR-server/tiddlers/system/favicon.ico delete mode 100644 editions/ko-KR-server/tiddlers/system/favicon.ico.meta create mode 100644 editions/ko-KR-server/tiddlers/system/favicon.png create mode 100644 editions/ko-KR-server/tiddlers/system/favicon.png.meta delete mode 100644 editions/ko-KR/tiddlers/images/favicon.ico delete mode 100644 editions/ko-KR/tiddlers/images/favicon.ico.meta create mode 100644 editions/ko-KR/tiddlers/images/favicon.png create mode 100644 editions/ko-KR/tiddlers/images/favicon.png.meta delete mode 100644 editions/ko-KR/tiddlers/images/green_favicon.ico create mode 100644 editions/ko-KR/tiddlers/images/green_favicon.png rename editions/ko-KR/tiddlers/images/{green_favicon.ico.meta => green_favicon.png.meta} (59%) delete mode 100644 editions/prerelease/tiddlers/system/favicon.ico delete mode 100644 editions/prerelease/tiddlers/system/favicon.ico.meta create mode 100644 editions/prerelease/tiddlers/system/favicon.png create mode 100644 editions/prerelease/tiddlers/system/favicon.png.meta delete mode 100644 editions/tw5.com-server/tiddlers/system/favicon.ico delete mode 100644 editions/tw5.com-server/tiddlers/system/favicon.ico.meta create mode 100644 editions/tw5.com-server/tiddlers/system/tiddlywiki.com.server.png create mode 100644 editions/tw5.com-server/tiddlers/system/tiddlywiki.com.server.png.meta delete mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.ico create mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.png rename editions/tw5.com/tiddlers/_tw_shared/favicons/{classic.tiddlywiki.com.ico.meta => classic.tiddlywiki.com.png.meta} (80%) create mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg create mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg.md delete mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.ico create mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.png rename editions/tw5.com/tiddlers/_tw_shared/favicons/{links.tiddlywiki.org.ico.meta => links.tiddlywiki.org.png.meta} (80%) delete mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.ico create mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.png rename editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.dev.ico.meta => tiddlywiki.com.dev.png.meta} (79%) delete mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.ico create mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.png rename editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.ico.meta => tiddlywiki.com.png.meta} (78%) delete mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.ico create mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.png rename editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.prerelease.ico.meta => tiddlywiki.com.prerelease.png.meta} (81%) delete mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.ico create mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.png rename editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.com.upgrade.ico.meta => tiddlywiki.com.upgrade.png.meta} (80%) delete mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.org.ico create mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.org.png rename editions/tw5.com/tiddlers/_tw_shared/favicons/{tiddlywiki.org.ico.meta => tiddlywiki.org.png.meta} (100%) create mode 100644 editions/tw5.com/tiddlers/images/Favicon template.svg create mode 100644 editions/tw5.com/tiddlers/images/Favicon template.svg.meta delete mode 100644 editions/tw5.com/tiddlers/images/favicon.ico delete mode 100644 editions/tw5.com/tiddlers/images/favicon.ico.meta create mode 100644 editions/tw5.com/tiddlers/images/favicon.png create mode 100644 editions/tw5.com/tiddlers/images/favicon.png.meta delete mode 100644 editions/tw5.com/tiddlers/images/green_favicon.ico delete mode 100644 editions/tw5.com/tiddlers/images/green_favicon.ico.meta create mode 100644 editions/tw5.com/tiddlers/images/green_favicon.png create mode 100644 editions/tw5.com/tiddlers/images/green_favicon.png.meta delete mode 100644 editions/zh-Hans/tiddlers/images/favicon.ico delete mode 100644 editions/zh-Hans/tiddlers/images/favicon.ico.meta create mode 100644 editions/zh-Hans/tiddlers/images/favicon.png create mode 100644 editions/zh-Hans/tiddlers/images/favicon.png.meta delete mode 100644 editions/zh-Hans/tiddlers/images/green_favicon.ico delete mode 100644 editions/zh-Hans/tiddlers/images/green_favicon.ico.meta create mode 100644 editions/zh-Hans/tiddlers/images/green_favicon.png create mode 100644 editions/zh-Hans/tiddlers/images/green_favicon.png.meta delete mode 100644 editions/zh-Hant/tiddlers/images/favicon.ico delete mode 100644 editions/zh-Hant/tiddlers/images/favicon.ico.meta create mode 100644 editions/zh-Hant/tiddlers/images/favicon.png create mode 100644 editions/zh-Hant/tiddlers/images/favicon.png.meta delete mode 100644 editions/zh-Hant/tiddlers/images/green_favicon.ico delete mode 100644 editions/zh-Hant/tiddlers/images/green_favicon.ico.meta create mode 100644 editions/zh-Hant/tiddlers/images/green_favicon.png create mode 100644 editions/zh-Hant/tiddlers/images/green_favicon.png.meta delete mode 100644 plugins/tiddlywiki/upgrade/favicon.ico delete mode 100644 plugins/tiddlywiki/upgrade/favicon.ico.meta create mode 100644 plugins/tiddlywiki/upgrade/favicon.png create mode 100644 plugins/tiddlywiki/upgrade/favicon.png.meta diff --git a/editions/de-AT-server/tiddlers/system/favicon.ico b/editions/de-AT-server/tiddlers/system/favicon.ico deleted file mode 100644 index 3765a9a888b5c9a36a9eaeff61349fcd0fe63470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 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 diff --git a/editions/dev/tiddlers/images/favicon.png b/editions/dev/tiddlers/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2cb686ca769389a930f4a0d601b71007febe7d GIT binary patch literal 5542 zcmV;X6pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H16*Eah zK~#9!?VWjiRn@h}zk8o^#|$I{1VI8xKp9o)fZ~LT1I0SER0yT@>8titU;BK0)xJKh zsGs-r*;-pWJnPWs$0~!gR;>y+prWW0CmtX}LJ|nG1OhiVcRuU=aY+nA!kupt&iZ`# zklfsJ&OYn++iS1A_gZ@?5uta9QlU8~R>UMaT4_~bA;T1u3#z|D%78M!4LE^<0~h&$ zFc1Wq1l6PzyF{c>qZ&j>one`4UDX@vp?4`v^>hLR7MwJgXyhDAI7cbYP^hs2MOjf6 z_ykr7tk5FML`Ro-r*Gb76CjuJRE68`GA1F`6qLGL!HIcQAgs4wA!02mC^g?^N=?Wn zK&EBESZ8ZEaH&%2o1)|@ptzg1bRWozDD|9of9Y%7^ijknKpGO7Q#HcU+$h5Jzu0FO1@bX}<-{-zh!4CkFV_PB$9`=~w*-UE;^m+pL=TuErO8x+< z5?eYtinW%gn+s>uF6o^Fc&fr3aO>G3{20(S;+?pON*?zXhHm4Et*yO=0RFj^Co9w( zV2q7%LbA$2&&b94LDqX>U~bh6g?irxKPeffu~zu!4*yQiwEzp0;g44SLczb-c&6hT zsE0foHr~$NV)YyXEEwzbM}vP-$Tw{WGa`TWhOBC?uMc*A0xTF?*cu7^1;wQ{Zkej=YboU%Dj zq{dLzrS9qV4c&$SEel5UH=@?N0w>uJ7HoJy67 z>c!1ZRg~nH01L)C-P-!IJ?7^{PIkHU^DG?U$`1kVQMxr2dXsip}GwR>ToCSD!uvaM_wZZQhV}XVKeWF7_LIm*p-1h-h zwr+cjjP@5bClrTq)FGf{{;*NnGFAc(TdzH8V%VyY(eCQHO=(#GZRuay;P=FV0I#Lg zFVeCA2QqeEwYAxU4S`~E!Ss!9reFb-A}06PD(vBgK)5%hAs{fX>S`2c*edMtGBG%> z^1P%8a3D+9mR=y1rS43M0RA~ulj*G~+Q+6tcxmgiRc9nj0Hx$dw$^%?XnvZ|EFd(e zYD7%29(&cV*G&ivtw*@7tJ&C@1vmj%s0N?^6C3T<84(&y`DYjJ_FC5B53i z)-jPAx*7t01zb*_k#>|%zQA|&#eLBnj1wlK3I^ji<#t@>{04M}*5O2MICPJojQ~}^ zwE)t(t;mKVKjJ*|epJ!WgFZ8cT!!o1--60W9`8VZQS-$|BEWas%)YcV+DPQXM=LuO z+Skk;*3z6Pu> zKEc}gKC!0HAQtNI{W6R}lQ4!|gE8Q&BTeoWnZUX21c>-;H1ab3pPY)>KzRpYcn4t& zm3|A?&w(P$ezTT4MHlSs=(9EBC_7U{(A5Zm&4kC;2F z!V}QN!%?38D606q;(tC{yK;SyRiirnV08E#P1HysVFyNO{=yU1JC}_ zksNR~y6jY}rq8+;-bED{11DniKNHob3SC?U+L^$cT8MuuR`Xh{-JcNK{TbGtRo#XZ zd9wflmZ3+Rv5n6hL;wKS*}o*X_$nmg%P;885{$~PV^)3x-6zG`P)ef;hhP*A!8qa4 zcznAR!D?DbY}azEU4M_youjRJv0}O;Pc^R$C&Xl!8QHwZX`b{cy5IN?y=^GYi4PNc z@7DbE6s0jo%)&A5hbU*CEOa{uy8r3u{-?v3TfmB9?OBD@6t@o6zFH)(BfhGp3@|;Q z9VllB%3X$X^+mb+q1^qz-S@!n{W~tPf;Nz_4{6ix)Aq8&k$OA6B62!JM6v3<2>sZ2bL~#Wrt04zwrlk zg3P=NP;&U$SrXihwfnQY4nxW;z(Nnz0>{O+yhd!tdxz_#-+0_pU&kC?o&Bkb(wG(3 z;-2zqZo$uo^4l0%giSr*a!`Jb-ch`M554qU+u+F|6iw zSi6=JYg&o;HX$vWknsM_r)#d#_!wDKjxH=mm5jtFI~7$l%tj(l68>m5(V9PPHQ~$S zUSivq68`YVI43*^+U(qOEggd{9dmH8ABn~HsN0BOxWI5_$BDBgeGA}g0Pvc`t7x}N zwBbc0;=?uZ*I*`b6p%9FVB3KA0Q9Z+T8QA%hY|oFwsi@CSEpd@{?t}hFBGeJ9TIK^ z6(_)vN#fr^@XZ-SK7F9`@!gglDY2bj#uaKH+&NVuMAkh{@a2n$eEx?xYi#NH1Zdmq z5kks8r?MGHY~VKBm_xsYQT|no0cU3}VZoN%4gZ0i1YSHB;w6aonxOn3i4hTeZ7B2e{CFg-L^r=;Ba||-A*`b~+|f-h5qj^I zPLoKrVvTlHZ>R_Ivep}2_heETuC{a-LYvnTeC_K*>;4QJe9n^ub`t*Z-w3~d8(7iK zZn4iZed87rM4)OlFfsQpv5si%Jj@X@ZA6nb0Na;BEI@eq9YohY-k#4PzD>k-El;Fl ztpX8~IDb~CJP-gNvhqRnfC=bgyW(u(Qz(mQ!wX+_r2Vy6`)iZBg+eWl&jbK1vMg`! z5@{i{^m|CK$p$vj-oIrr;@gzoO%%)82_QPUEU$$2)f0Mi2GY92MmG_w`T3*i55Gq2 zgLVRVr*GaSupzHb&Hjx97hg$i`#UzmT{+GTFJkRko$hVcv=yH27!a~B??YR#iO8DY z*(i5vDK`=M_};YdqeQi1tvfgt3%kQhn!~GYq>luC%VvU0zLk-n981fh!w67NYQ7ER zb%#cI2V$0g)kgbJr*Fr*1Yf%bY2B8I+cg&$o_7zo08?s0ATQ?gMIEERmsrN{F@t=N z@F)LC=WD4a{oL{-i?)}6gts<*`O?1Q483q1;>?qjR_pOc}9Bct5 zy%kl8r*r+%#^8%F249q6MeZZ=`J==(zk;=ARVGbn_Imx+HweCRDbe*$WdnRbJ;_ZU zMLM+r06MCkh#7J_xvCjpxZ=G()5_fb4w01yZ-XjF5vp(qs<0e=;D6;lE`Casz(8t#hju z0y%NV9b;}m6%NTlZ#ukGoFcD9?Avyx?~iNQ8#D)##R(-`_eS74lPNAx9)Y;f&fP2%luv?Kf~vxWDr( z)uV600;hbZ#G-x7z|@s_Pd6 z8Lb{}448;9WJ=O91wfg6;~ zkSfXyu#Ne7}*)xf>5N&*oWLKmmpQmp+ zixam1B_p#n3|LypKOMT}pB@2-FAfPjk~RSvUP|bQ)L7#}hy@_hk{k%`e)%JSD~Vzo z+Kd;A$ao{v1D!4Uq(uOLf)afPkXBZwgqw+OK6><7+i~^Q{*6i9Ul&*Aj{xre$+fj? ze5S$w(7V56c2aFf>H$+~LKb=^kXC)UM1maJlxgi-pHw+pBab0vht~Z)YFh_gkjcmI zRxvd#QPZCq0f538HEWbov(oVgti7MdO?+3%8G2=WhbV!oB{zCz)@(`k!j$U7d8XI?RiS>FPK(3;_i&e9vo5a0Jn`G{xASiy zxMU{Mx;>#8uyf+Ca()iKa+f6!rgoq+V+9`YPOp0@l?ziY6zJKo@ph4eXjnz z7OSA8?<`P@Q@urG^&?127e~ctC$94zMHQAGAi-urZ++*WgN`~??67MvN6gA00S2aY zoiXSll&f!Q&x9ofCHi{qPCb4sy;7k!eH3X8nA3pNwzgtH!pncsWh%3BmExZC6v|z8 zU{+8Y50g%y&av~fyD%%R%?$xODaO%i6Jyv_sa*My$Mjqk59d!^(ykTT?}l~080O^) zQaT?lwre?&HNQWqckP<=zv#YW(WPUM&>q6?eh;jpY*8o!=UETpIOX=NpK6-SBG6&h zYIt?BWqUUYas|^?x1`-}k<9Fz1?N=^i-~?sLGmuRGH_k^bW){a#J>dz?M0W4Nl1C( zYap`rF=CAivl1=j7;_7blm9j4>qGC|LacF7B4d7yA##bkx^7cOh?^+_0QjCBRc1IN zFC%hR@;#^zu1lUv?x2WRfbeGz;ymqVB)nuSF|7R?5nlt=-ZexUUh3KpNwgP_n2GcB z)Ptz3J*x;VzWS(U--@cKg|lii7EF-Qa^XeaUfbj~+?S-{7)p2_p?CflB>=(RUoiz;nBF_=1+cIFsOKoB#k! zTixO{-B$|COInF7jRfDguC1I&ViIj7vhE2YtA3rL2AsIgda!+_k$MkKKMuih>K#Yk zAW}T<30YJ7&aBD!*p+z##7Ph?*ibi9!Gk2ZVkrKt1Q%Zw-wKWeI{#k8Pvo-)+M{qH zs~;h<`nM^Qz#Kj!Jqr;00`YH24~){$xF$Z*kpu$V?_FOvjqB^Pvdx)MAK*yhpHnqi zDV_n6kAN^d=(2I>!XaQ5piB=E4IumLIxY8V4zI>}`s}0=HDWuK5qj&}>G=U8Z^SwN zr)lfVYFbI?{ag2lZ`&+y^~P7TiBHxE01$X~#0jFUxxl%(n3Ed=&%rt2!K4;vVq2FG zTKe7eO=|zs(S1)wISRn=pqxcW*oQ71iE(@q%f1rZgEFoFKIriT0O0Kl&DL$3??iD| z)`p%#=H-r4ZpR#U)zPb;Sz$s;Z;qe6mo-*;@J#tzvKvOtz$jox&nH0JdcoX^3oP{S zfH66Fpy|aNav8?)lTf82zYG`&`>_05uy!pc+VDbBTh1w4hvF(+ljp~iQ4^PofVX-L z0otrVVB6+fP~0a_#4#kgxDw~t52O2zP2}sJ026>{?;^kfX`NR-NLkJYM9D0UDNz{5 zpO0Dj^#(oYq8-Zg^dnxu)dLg)4Zs}WA;8x=e1NWI3iGNiMz~wSdB+C+>O)KTkE11R z~#k59SRYVp&qH;QJ`bdl>NBmEviw^y9AUYBqM)Ms{lgbeuK#w>M5! zO0Gk=8Yt1n4LW#yb7c)(b#guHbTDbe>zZMxhp2 zB8v(fo~0cRVeAq9XpbYnq5i^xih(++&#{Dal;%u?u_RgxIeFO!tP){`hW9Kb%L-=H z?d-|=>+u9Q;%s7G#V|`5qp+kxA;T=8Tq|{)KpF9WUIk{`B9sE3#1~syfhGk_7VOkW oqll^(rRoi_)@CXSr#s32154OoE0^4FHUIzs07*qoM6N<$f+hvA1ONa4 literal 0 HcmV?d00001 diff --git a/editions/de-AT-server/tiddlers/system/favicon.ico.meta b/editions/dev/tiddlers/images/favicon.png.meta similarity index 53% rename from editions/de-AT-server/tiddlers/system/favicon.ico.meta rename to editions/dev/tiddlers/images/favicon.png.meta index 2f3e81713..76d0be1a8 100644 --- a/editions/de-AT-server/tiddlers/system/favicon.ico.meta +++ b/editions/dev/tiddlers/images/favicon.png.meta @@ -1,2 +1,2 @@ title: $:/favicon.ico -type: image/x-icon +type: image/png diff --git a/editions/es-ES-server/tiddlers/system/favicon.ico b/editions/es-ES-server/tiddlers/system/favicon.ico deleted file mode 100644 index 3765a9a888b5c9a36a9eaeff61349fcd0fe63470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 zcmeHKTW?fV6h4}$uRQqRV;_tm82JspVN4V=6YqB(lz1UZFG8_Es{sQFG^JP~K|<6D z1Zb!xq(()&(WF2FEpzFVX*(@5y|;7eT+b}`x6iEUo|AKCS~&QiUCGJbXYX~}YpuQ3 z+M0HccCWT-l_th2ZS{Sc_K2owRaJ%m2Q}?!v9?;Q2^4{0tcyX@#Cj$8U|s*C)h^%u z8n?H<*6oeq!yIeav!h?L=H&g=F3-W;8wd3Rb;ES3H9|Lf;`H&$1N70ee)@J_m~P%! z$a}6vuLD=*ga6Gg&(FIy-lUoFEDiaRG%=Q@)@>t_7WC8MG^LX|HM}}Nz*TubE^z)j zKTCuC3DWgEwKs>0wAdRROi6t(#|IkdfHT#(eLB{@+aD%|t`k$V^?5&i`qm&puhfE0 zK~I9VJZI2@hHb?>F@^?Gl0`0;r+hxo?204K*0^D?po3v&rvH3XP@b`fY%}p(j??M3 z2(gd8{%nk(@AXSD8w%^?BcFs8uKpg)TsS)|`E`9iMUjx9KT{-PIl`Ao>oh-|K^QkDHW&EJm^i((OqM-_q`zfa%TD` z)qj;})qVCKVu0gE-LEv~_yIk~ZzUSuH^(pY08frZ##Kk`0Y{B}(5k>O$+5B2`>XQ! zKh2RRtHk%X_>fN}h#Y#mAY);@XI;%Rp4M8I_t!eN*T;EO&czz`HVd3`eq65ncb@Ef zsMhT{RO9l_t1(k<4qVWHcDeEx|A~j29}qFwB;qY@mW4aoab%p%9F9=^i$)zV;~;m< zPGt04PS;bZOda!G$|%q5^8O8;+g=)=^X*gA-8DytcZOs>%VihyFKUu18~Ji}GE3P4 zPIx3myWbA%jBF^`6Jdo!{`aAsf7YJU$5)G~`Lj8kS7tWu!%X&8{Z62eBP*wYP}y9b<`|V{YM|bfOu8+cn(>rA8=QBPaRK) zUdsyhyc?AFZtwd+YS}tMUp0-=!TJ$u+a4-G_g;xhKdL-=4w?i%{-8f> zcx5qPaxGzb<`Fs1Nq{d9%YXbZD{aAbOqC0t?|3~Rb06}@-2(WPYbfL)S3n+o1;}P} zQuDmidY~?d7>w?#4kqTN47*H<{2u5_i1$o_qO+wvvD5OwuW5rnE^1^N`3-kk^#kUx z3*r{{%?{AJ5Brl85$Bl`bHv$#=<884D*3OqerRZVB9o|p!FcpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H174u0% zK~#9!?VWjiRn@h}zx$j!XCxscOd-GpBsf!tI@H6e7ATj|9U;>glzSRzR02j!5Q0ft~ zMo7w~qzu6xH1X}2R~PK1pG}zP>(5hC@W@a__%4*1xDcV81L9O5B}TVvm9SO7=R%5& zeuK7g+{+6qbppf@WiyK`{&v@;n&cWG?;?%eNq!(XTj`o3Su#E9VaK= zRTTC9(JOwt?W7_=)sKs8?H1=_67B&EoZRptc-ksG^M(~KarS!xluny_B~mT}MxoxGVfLx7!A9z0!9)R%w> zx{QM|61So;Js$Ccn7@go)8b2VWFyX3fva`7 zMRi$Nub8Zp?aK>WdMyF=&UiT6=ku=x&ela16Kqy|{%c3CezK<55#YP&bMsWc{3l@7 z_F(lkQoLnkKJrP$Uu(V*#4B$n5`g;!#gycs1ss(FePJoV$ zolSsEpZ8vcdPOyyHTvbp%VV|#l+7%%sEWE=7k;lqrsnsp+I-ht#+VVn*Y0{!!fE^^*8oBYAt=(Pu&500VEmhMfCmAPj0$ zeqR&(?ASemLj)KN+yvmSZ%WZckr-s(bu-4C%%eU_KJQcp|JSV`L=;p2Iq8iVS9C>y zI}fRS@4*IL5($81%y5#<$?x)SN#DySW6BlL(E`Y69skS#<{Jo-+x zaFHPASJN;IhuQzp_@BMgm~U9gLci z)U%P8o-dqn zRN_g15rY$QUtew00E7?*>2U29HcO|})2_LIw$Hcs{+Ux0jDrSX8afEWfD{y~1z}K; zQsQrJ!{6$_SKoxEq891ty^T9ed5Ix_=5kxUz3G8mgL7|1rES9DBmcHjM`IZ?99L<1 z@0zH=1F@cF$2xu_reT9H4aq_ngQzntCEl7w-219sdsEQ%q z(EQHFM-c!Z=U2C|f6g;#4p%}aM@_bodg(+`FZ&**;bC@+5dvd&2FC0RlFtnkE0sP! zu3hCgx9`FE?Ot3v_o2Bx3DIKa;W-JJTVXVy2=WZ=o3@)=*X_qLHn;PS#+*!Y?zx4k zB`+rCO%a0hNf(e=aAhFu8SS4ps8~*dDM=X8Q&4P{!}m}X{0mM-qzi&J0f~2!gVc2i(q;k<;@wc?cZD5AX zG;)4ffOSIrGSP&pVi}uz)JqVRX93K)$G_qJ<~Cd<`_U4(3@H{9Qi>4@FsSXb?Kr+E zJw8G;HkT1kKS0`5=f&Pt5rWi9CNkow`{FA6ge+}o$t0bVPs)X7By0>)(?F1A05Sn; zo_~$p1;0E_<*F$*2Hklh1FpZA=J!6Q<%2KrH?>A*B2tpDj2Ygs7e1lOw?#*c2;lJ{ z5SgN6>g-BjFo5lhu?(Gi`-$InO~bvf3g?c!xOSD}t**yYUElpSvZA1-*f6B0V9d$H zn4N)n#9%D;;TQ)G)FqK1)c$D=O>b|iFmOb<7suBnR6o0l?7OERRJD7{b>vXYBZnT% zD8Ghux$(CJh#*Wx6q6w)Mx2hw;i;|zuo(z+(e6a+hOf{ZE^_Xjj$$!|U`Q#5B&#m) zKB505?%fptX60A{0JLxZmi-SrjjLq8K3V+`?tNAG+Z>$)=n~%AMh?tdM%~}m>c_5(7R8$i@W^9Jty z)%r~LQZ&7}0e|aJ`#N3IU5d(7VI-pA>PH24NL)yREdEDnhQl@~mHxYw!ZrgoS8k3F~`TSq(pzg)D zy8N3!>{XEJj)d3%ZV#;=f2~U>Oh~VY3^0_pd68xk13;mOpx51j1xR@dX$z9*O$Yb#PpLtri7 za}q!RfVvmgVVy7v)6hY>RD;(4l9ml$b^g~=QG=%?DBSplwX#19__II52M+zWQcex-OvQx1Yc{iTYLV(zNd5<3hZVzx-6UWHhWl z^0T9kgCXOd*;`pdfWaDe^)3)gwT)PiMPld)1?O*Jm?EWP*t=$-P z;di|Kf10>#nYUXF0H6rvj~a3oaq1Z$j0Uo9|55ZO^Q)cIy>#?8sA97OibV{{=qMVI z8OZBTO+rnvp{69A@L;R-`OzFMeD%$EYa8*^He$#~Bl-K08LraprRL9T0vkIqG%3*d z^Kpjvu^)^sp1-TKVD>r?*T#bY88=;yF*_sr1lauT@mj&*!o9Z=_uk4LNhwT5gsPxe z&1fzUn$z87u?)k26q3%J5O!k+Z*@IYih=u_SAr+rKKflcZ4p|v~lx3uFu*nq#et=mc|zQ$G@Tf&Q8daLRvf8_V^5I$0B zPj>ZrmjoDBJpVo5%b2QuRbkN2Z|*(|IRd!8+ZWeEr{SvZnm@i4uj(tGj$O5AL(l{O z5Ryk@IimFIFUAt15~=N5;=7;FzWKY5cQd^Q8zQd#AN1QVlx}6&EdlJS7OVk2i^YHp zSp&$Na%IdO*b(OqCF%Fmx-qolZLX4i@fzOeV~gjn3z+}_LJ*Vgp;@>4ZaxW)HArIB?3)Saud4F?A*SpIq6BEUe66f~a!Ow*$ z=Jf$vHH;7REZ-h5x_JIB1iy>Y9AU^v4Pl+!A9AjtCjsiebG#uO)CgrB!i)MaZ*1}7 z6%i8vz$!iSfXGc&O~d(Z@OdarZ*MxP`esl|Mj}JLA*gjzY%8Q~ZynJ1OfVM)MSx+& zOPm_wt^lzjw9vl^jz^l)P1|SNLXJl#vIw-29DIQ+(}fh&^u#qj4W-$JP*uz$heUl0Lb9N{pie{u01$1C*+4}3 zT>dr(t(&&?yq=Z@l9s(8o_9A5NnG*CP|0T*lN;?JeA1lJI4>lv70Si-wM*SX<5mJ? zWx__&KR)WwRXa49?)}xB)wP2`^7l_q7y*v$``Z(e&KeiZ+t&%doEog^4~qZ*_E#2c zmx$XUu?O5`l|5>Kl#9*;ML~LfR1`grueLGhI78UI1tLVKhMhHkRLDkdccza(-eG@r zVaPf6VeMg#EuQ~(A>@)sM%=LSof9Q4Vj7Y~`Za-UHE(Sr2a28#E^$N%a_+e$?sfRp zwB(S5DGX{tPwL;oj7qZ<{5ME5rT1r>ZWH9ee@|oH41hse`wsfdliN z3yK8h5rfIT^TxOmz>pc-qzXA(0j0+ipT$SY@wsBmyjQvP5KYN-|GpGH1QPF)TA(F&wHZPaXW>DTKowB zOkB3itGVS=U~@R%mmV(%|M2PwQ<>G2B!)ixGt{)?faa*Eq4J5p1l8v_Yvzwgy<}p1 z48V-=2q09Il#9;_NBCcOu-;%_yELMP&k?r)8MkI(t2Fo~0b%XII=AnkVfFeRt?Qu= z&BQz^P^RAB(oWS=f9tu#jG~Zz_Y?-+dQHr$nnqG3J?*OVdTR1~EOx5~_4@qc!iZC< zg^be9*>}_D=Ba-94lpM4*;5$y>pMbf72~aK#NX16Wz^81CeK?{N8{@s(E7=?n4A{M zxcPE2r(GTP_p25!KdR{F2~g_u`>q=Q>QhlUP!Kf&0DO1TLz${UdlNW6oHuCr0 zP=s`Qse5T%V23f-H%Qa)RMg_Bs>8jvlGcy5M5Sb1+STVX=-(%Y{e9Q&1C-DGpB~k| z@cFMBz528*ywYp>FxwkhG0ycs9xB zP9SsIRg742e^i<`1skX64wliwu$?~Uga#ib>lM)ye$)v7kY8Nb=EeGB1S>-QuD7Ov z^56U+q;x3F?V<6F4b-oCH#`++G?0Dw)QCH$yY@zY4q@O=uIX-rXtg29dYyfFVbqTi zsq^N|i~4$)HT6<|=8lbjZ>aNG3Dh16+QQKsE?Pd=jAFB39-h;!@uoT5)USL8N5}DR z=Z-xHMPSVz6^11qh&V=aNK?8zq+U7^H3DPMke-4$Hz&}$Ip7&dA;f|)6Rf{Tf4VRx z+niCg0lKtUrp>()DVGBw$7hAvh-K6;jM*6|7Bj+ZM7q6rDr<3->_c;Ty0oYV-El+6 zeGVO4cTw@!A0v9!0oPy5z@J_h@tnDKl~cXsr3O!Z^KD~SKCw2I@`*VC0CwFxdze(k z%fLnP@X2kb*~z|pYDmGE_RZf?x$v(M-`jdh9_G=*P^@MYvkAp!L36k;<>rJG_LZ8} zAQa_#U{jwb0Kof~6&Z#May=rX{BZ?6u{RLlu**2-2S^?Qe%Mb1 z|Ctm@QLJ6NK1+a3jd07HGtk5X0yzWd>&*!z@Gl`)YG1kFjovo6UP*vM*ggG`;ZpO@ zkW$_ay>Fg(k3rG}gaOa{_>=};RHye44ffg0<- zE?r;P>wDt#2?8969R)=uBaTZ1Vv>YOKz@RUv|R}KmPC2WD=i-$S%k4qI3#_I0LP-N zU{;P-s2562UZ@Cpu0)(l?8@CX16!r!bAkNGU^HwT`O_T~BO^91M$-%X#Jr}*S} z1vyd*@&x2+h(Q982{N<8=QeOS2-VsVY;l07m&ke{IEa+x0Ehy9hB+PIC9mJ!fXV zb7y8}=4jeI+P&JgZJLnpiJ1hTq=# zsLfJdXSI|Mi#d#Eg|5S%nf%u~cHBR5WcNkqnf>XBhH9E=t*6M)ZE~D=ne0dR(rjx3 z#ipE@KwozscvU@k7dSnRQ?F2B!ApzwL5k1M(p2L~DGT{zBuI&XkL>TfK;Tt%02e&I z&KBY^*Vd%VVlVEUrr@m}eGM`=1HNgrYEK$GQ;nxsocz7*WIwi#oHYk%{QR4gNhT>g z*sse&hHV8|ejJ~;1_Z?pC|Sa z?Bx5tg+h0F%|vq6)5!!m&K`((yINzx{vQeUg8gEXjx65vVwloV@g(Au3@v2sxm)U& z=6l;ce14u?A6E%mo~E(0Z|HWx-oz&-vgCbTU(9$qnmbso(CiR)Tbgjt#Kn{3x?mw+ z*O#5D{|d>g`|Ll&0LPEIUx?=Tfjq}=AsOB`#xLuDPL4(9RcGvhM~!{Rs)J*aV?$sS z_5W3M{GVv#$ujXgDIVlgIYbU!?|^Sc-g<7Q&9eKF@IkM&s=@{zNIwV~YuE$NT7E1Q z|JK209Xiv}-bAX_RP^Vjcs_yJpGd5zE&F=CC?9wg7T%QSbbi5%50 zW#t0q^<4jqQsH1Gok}Lc3*M(#Z!xp{W=lmM>p~6-_IK0tl@Dq9>IF*2V|u=E)g8^k z58nJi){{&+EqRdJN0066FV+?Vhj%?Ld^*Y4s23Q4Uppx@aDzDiL+|vJ53;Z!6Zg0! zKYmh6i-g*Tb?6*9^7LbCegE=zuVN$D@`#N5&Lnx-FX!O$d1KRKI$!AaYF*?rnAt)4 zTd_I#qhnTG7ZdnC#>zJ@+W%x$a({j z*~e-R<>dvIiVvIQi}R>+Sl7iwG91jSlh2Uwdzh6Rr(ey>3oO+S_^-0OI=eoqB#vWU zsUTeS)nu=Jk;dOYENid3sfH#Rj?4ds%IClFo$RYrolFB0HbAaIzTkD^92)ppRViu2 zb-r`uFp7mG5kuqWa{T~I&Z$OB^&S1dKOO04gp7Ft7@W^lyewMur1+n2#6T>;XYvu) zz~Newg}Jhawb`#OZ3MK`0e>ZfKADr;P47v3u46`gnX|-MkxMsYq$446y!#q)4Fx{( z`r_yxvL6K|&Wql3vxfKEt0eM3$X2yC%sB&h5%>u?Ebg5tI>y&?#>mKB)P%6NyUm*n z1w^i_&B+z$i;+VU{#jFqL|~qlT%#19nG|(zUiugMqV^$q=Q0ySoq+wty)26SVT=Lw zU7kbSOZ+|GP~f*Nd56M15Pg8kXQcfz)Tgn>p_rlGt9Q#@;_XNr3 zdjd7Utp1dOQz|dlAK;tS-%@oJ%Wtf|%QndFKZ@109zJ9L0sMUZ*Lrjpk}>PQa0d86 z?R^XBDs>;a)xHOq#$oKgOT{qbFQ)(Ivn<;7##$JYCn1-2~k-?6~o-U5pP diff --git a/editions/es-ES/tiddlers/images/favicon.png b/editions/es-ES/tiddlers/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d797bbe8d6a97ef6f36ffe3cbd366009024b6eee GIT binary patch literal 5766 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 diff --git a/editions/es-ES/tiddlers/images/green_favicon.png b/editions/es-ES/tiddlers/images/green_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac96b571f719bcc7f685a5160edfa7f542b58a79 GIT binary patch literal 5824 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 KMNUMnLSTX@V<&|G literal 0 HcmV?d00001 diff --git a/editions/es-ES/tiddlers/images/green_favicon.ico.meta b/editions/es-ES/tiddlers/images/green_favicon.png.meta similarity index 59% rename from editions/es-ES/tiddlers/images/green_favicon.ico.meta rename to editions/es-ES/tiddlers/images/green_favicon.png.meta index f2e1cfa3c..1f2a3ecc0 100644 --- a/editions/es-ES/tiddlers/images/green_favicon.ico.meta +++ b/editions/es-ES/tiddlers/images/green_favicon.png.meta @@ -1,2 +1,2 @@ title: $:/green_favicon.ico -type: image/x-icon +type: image/png diff --git a/editions/fr-FR-server/tiddlers/system/favicon.ico b/editions/fr-FR-server/tiddlers/system/favicon.ico deleted file mode 100644 index 3765a9a888b5c9a36a9eaeff61349fcd0fe63470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 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 diff --git a/editions/fr-FR/tiddlers/images/favicon.ico.meta b/editions/fr-FR/tiddlers/images/favicon.ico.meta deleted file mode 100644 index 2f3e81713..000000000 --- a/editions/fr-FR/tiddlers/images/favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/favicon.ico -type: image/x-icon diff --git a/editions/fr-FR/tiddlers/images/favicon.png b/editions/fr-FR/tiddlers/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d797bbe8d6a97ef6f36ffe3cbd366009024b6eee GIT binary patch literal 5766 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 diff --git a/editions/fr-FR/tiddlers/images/green_favicon.png b/editions/fr-FR/tiddlers/images/green_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac96b571f719bcc7f685a5160edfa7f542b58a79 GIT binary patch literal 5824 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 KMNUMnLSTX@V<&|G literal 0 HcmV?d00001 diff --git a/editions/fr-FR/tiddlers/images/green_favicon.ico.meta b/editions/fr-FR/tiddlers/images/green_favicon.png.meta similarity index 59% rename from editions/fr-FR/tiddlers/images/green_favicon.ico.meta rename to editions/fr-FR/tiddlers/images/green_favicon.png.meta index f2e1cfa3c..1f2a3ecc0 100644 --- a/editions/fr-FR/tiddlers/images/green_favicon.ico.meta +++ b/editions/fr-FR/tiddlers/images/green_favicon.png.meta @@ -1,2 +1,2 @@ title: $:/green_favicon.ico -type: image/x-icon +type: image/png diff --git a/editions/ja-JP/tiddlers/images/favicon.ico b/editions/ja-JP/tiddlers/images/favicon.ico deleted file mode 100644 index d4fae0448a29e0e6ddf169c171e6bebc1a1f71b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 zcmeHKT})h65WbqIuYK^rM;?r6YV_4teQNbVE3`IhqQ*2$Y)!QbwX|t#iYcvHC16Vo zjnY1VKcP}$M2rx$YN2hY20?b&&B6l9&+fA9AItua=Q}W$vv>Ehy9hB+PIC9mJ!fXV zb7y8}=4jeI+P&JgZJLnpiJ1hTq=# zsLfJdXSI|Mi#d#Eg|5S%nf%u~cHBR5WcNkqnf>XBhH9E=t*6M)ZE~D=ne0dR(rjx3 z#ipE@KwozscvU@k7dSnRQ?F2B!ApzwL5k1M(p2L~DGT{zBuI&XkL>TfK;Tt%02e&I z&KBY^*Vd%VVlVEUrr@m}eGM`=1HNgrYEK$GQ;nxsocz7*WIwi#oHYk%{QR4gNhT>g z*sse&hHV8|ejJ~;1_Z?pC|Sa z?Bx5tg+h0F%|vq6)5!!m&K`((yINzx{vQeUg8gEXjx65vVwloV@g(Au3@v2sxm)U& z=6l;ce14u?A6E%mo~E(0Z|HWx-oz&-vgCbTU(9$qnmbso(CiR)Tbgjt#Kn{3x?mw+ z*O#5D{|d>g`|Ll&0LPEIUx?=Tfjq}=AsOB`#xLuDPL4(9RcGvhM~!{Rs)J*aV?$sS z_5W3M{GVv#$ujXgDIVlgIYbU!?|^Sc-g<7Q&9eKF@IkM&s=@{zNIwV~YuE$NT7E1Q z|JK209Xiv}-bAX_RP^Vjcs_yJpGd5zE&F=CC?9wg7T%QSbbi5%50 zW#t0q^<4jqQsH1Gok}Lc3*M(#Z!xp{W=lmM>p~6-_IK0tl@Dq9>IF*2V|u=E)g8^k z58nJi){{&+EqRdJN0066FV+?Vhj%?Ld^*Y4s23Q4Uppx@aDzDiL+|vJ53;Z!6Zg0! zKYmh6i-g*Tb?6*9^7LbCegE=zuVN$D@`#N5&Lnx-FX!O$d1KRKI$!AaYF*?rnAt)4 zTd_I#qhnTG7ZdnC#>zJ@+W%x$a({j z*~e-R<>dvIiVvIQi}R>+Sl7iwG91jSlh2Uwdzh6Rr(ey>3oO+S_^-0OI=eoqB#vWU zsUTeS)nu=Jk;dOYENid3sfH#Rj?4ds%IClFo$RYrolFB0HbAaIzTkD^92)ppRViu2 zb-r`uFp7mG5kuqWa{T~I&Z$OB^&S1dKOO04gp7Ft7@W^lyewMur1+n2#6T>;XYvu) zz~Newg}Jhawb`#OZ3MK`0e>ZfKADr;P47v3u46`gnX|-MkxMsYq$446y!#q)4Fx{( z`r_yxvL6K|&Wql3vxfKEt0eM3$X2yC%sB&h5%>u?Ebg5tI>y&?#>mKB)P%6NyUm*n z1w^i_&B+z$i;+VU{#jFqL|~qlT%#19nG|(zUiugMqV^$q=Q0ySoq+wty)26SVT=Lw zU7kbSOZ+|GP~f*Nd56M15Pg8kXQcfz)Tgn>p_rlGt9Q#@;_XNr3 zdjd7Utp1dOQz|dlAK;tS-%@oJ%Wtf|%QndFKZ@109zJ9L0sMUZ*Lrjpk}>PQa0d86 z?R^XBDs>;a)xHOq#$oKgOT{qbFQ)(Ivn<;7##$JYCn1-2~k-?6~o-U5pP diff --git a/editions/ja-JP/tiddlers/images/favicon.ico.meta b/editions/ja-JP/tiddlers/images/favicon.ico.meta deleted file mode 100644 index 2f3e81713..000000000 --- a/editions/ja-JP/tiddlers/images/favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/favicon.ico -type: image/x-icon diff --git a/editions/ja-JP/tiddlers/images/favicon.png b/editions/ja-JP/tiddlers/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d797bbe8d6a97ef6f36ffe3cbd366009024b6eee GIT binary patch literal 5766 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 diff --git a/editions/ja-JP/tiddlers/images/green_favicon.png b/editions/ja-JP/tiddlers/images/green_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac96b571f719bcc7f685a5160edfa7f542b58a79 GIT binary patch literal 5824 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 KMNUMnLSTX@V<&|G literal 0 HcmV?d00001 diff --git a/editions/ja-JP/tiddlers/images/green_favicon.ico.meta b/editions/ja-JP/tiddlers/images/green_favicon.png.meta similarity index 59% rename from editions/ja-JP/tiddlers/images/green_favicon.ico.meta rename to editions/ja-JP/tiddlers/images/green_favicon.png.meta index f2e1cfa3c..1f2a3ecc0 100644 --- a/editions/ja-JP/tiddlers/images/green_favicon.ico.meta +++ b/editions/ja-JP/tiddlers/images/green_favicon.png.meta @@ -1,2 +1,2 @@ title: $:/green_favicon.ico -type: image/x-icon +type: image/png diff --git a/editions/ko-KR-server/tiddlers/system/favicon.ico b/editions/ko-KR-server/tiddlers/system/favicon.ico deleted file mode 100644 index 3765a9a888b5c9a36a9eaeff61349fcd0fe63470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 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 diff --git a/editions/ko-KR/tiddlers/images/favicon.ico.meta b/editions/ko-KR/tiddlers/images/favicon.ico.meta deleted file mode 100644 index 2f3e81713..000000000 --- a/editions/ko-KR/tiddlers/images/favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/favicon.ico -type: image/x-icon diff --git a/editions/ko-KR/tiddlers/images/favicon.png b/editions/ko-KR/tiddlers/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d797bbe8d6a97ef6f36ffe3cbd366009024b6eee GIT binary patch literal 5766 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 diff --git a/editions/ko-KR/tiddlers/images/green_favicon.png b/editions/ko-KR/tiddlers/images/green_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac96b571f719bcc7f685a5160edfa7f542b58a79 GIT binary patch literal 5824 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 KMNUMnLSTX@V<&|G literal 0 HcmV?d00001 diff --git a/editions/ko-KR/tiddlers/images/green_favicon.ico.meta b/editions/ko-KR/tiddlers/images/green_favicon.png.meta similarity index 59% rename from editions/ko-KR/tiddlers/images/green_favicon.ico.meta rename to editions/ko-KR/tiddlers/images/green_favicon.png.meta index f2e1cfa3c..1f2a3ecc0 100644 --- a/editions/ko-KR/tiddlers/images/green_favicon.ico.meta +++ b/editions/ko-KR/tiddlers/images/green_favicon.png.meta @@ -1,2 +1,2 @@ title: $:/green_favicon.ico -type: image/x-icon +type: image/png diff --git a/editions/prerelease/tiddlers/system/favicon.ico b/editions/prerelease/tiddlers/system/favicon.ico deleted file mode 100644 index 707c675775ab832d50811114b4bf057ea348dfec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120606 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 diff --git a/editions/prerelease/tiddlers/system/favicon.ico.meta b/editions/prerelease/tiddlers/system/favicon.ico.meta deleted file mode 100644 index 2f3e81713..000000000 --- a/editions/prerelease/tiddlers/system/favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/favicon.ico -type: image/x-icon diff --git a/editions/prerelease/tiddlers/system/favicon.png b/editions/prerelease/tiddlers/system/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..bbf053e2893bb9383004c3249368e9f5c6a868f9 GIT binary patch literal 4924 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 literal 0 HcmV?d00001 diff --git a/editions/prerelease/tiddlers/system/favicon.png.meta b/editions/prerelease/tiddlers/system/favicon.png.meta new file mode 100644 index 000000000..76d0be1a8 --- /dev/null +++ b/editions/prerelease/tiddlers/system/favicon.png.meta @@ -0,0 +1,2 @@ +title: $:/favicon.ico +type: image/png diff --git a/editions/tw.org/tiddlers/$__favicon.ico.png b/editions/tw.org/tiddlers/$__favicon.ico.png index c6b279307e6e01953987b393fe7b601fe719d4cb..b147a217b8d2b85d1bcdd205de614f42032ecfab 100644 GIT binary patch literal 5712 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 F0s!XZV;TSe diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.png b/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.png new file mode 100644 index 0000000000000000000000000000000000000000..c0ae6e6963917c54e10d8b2eb5b5ca1c2aca11d0 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP_2P?mk0mC`TPM}bQr;B5V#p$CH5ArrB@VMG{mM?$7 z61!sd4lZs(M&|=3Cwtn?Trt5*A?y5;uU{WNOAX~Yv*l@zp@Y|dra7znOc@#km}W@c ztNy&PL*ZBi(~O^mlRFp~I#$>`G{~5_``}W?)0}C|a?G0@bCbVH+vf(b?#V02OJu6z ZDf6$6YidyDUkh{tgQu&X%Q~loCIH0+PeA|x literal 0 HcmV?d00001 diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.ico.meta b/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.png.meta similarity index 80% rename from editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.ico.meta rename to editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.png.meta index 53a3ac055..c83def11f 100644 --- a/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.ico.meta +++ b/editions/tw5.com/tiddlers/_tw_shared/favicons/classic.tiddlywiki.com.png.meta @@ -1,3 +1,3 @@ title: $:/_tw_shared/favicons/classic.tiddlywiki.com -type: image/x-icon +type: image/png tags: TiddlyWikiSitesMenu \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg b/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg new file mode 100644 index 000000000..26f29a39e --- /dev/null +++ b/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg @@ -0,0 +1,296 @@ + + + + diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg.md b/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg.md new file mode 100644 index 000000000..7238bccdc --- /dev/null +++ b/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg.md @@ -0,0 +1,15 @@ +`favicons.svg` is an Inkscape file used to create most of the favicons in this folder. It should also be usable in any other vector graphics software. It's a template, not supposed to be directly displayed anywhere in wiki. + +Every favicon is stored in a separate layer. This allows to export all favicons at once in Inkscape: + +1. Go to Export > Batch Export > Layers. +2. Select layers/favicons you want to export. +3. Select "Export Selected Only" +4. Choose PNG without suffix (exported files will be named after the layers). +5. Change DPI to batch export at different resolution (the default 96 DPI will export at 128x128, 144 DPI would export at 192x192 and so on). If changing the DPI is undesired, the favicons can be single-exported (hide all layers but one, Export > Single Image) at specified DPI and resolution. +6. Specify only export path without file name prefix (exported files will be named after the layers). +7. Export. + +The colours used in the favicons are saved as swatches, named after the favicon using the colour. + +If the icons were to be used as SVG, the individual layers should be separately exported and then cleaned up from Inkscape's metadata. \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.ico b/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.ico deleted file mode 100644 index 7ad263dad243fda0f89c04503a5fd1dcc372c05a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5076 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�K>gun%x=iJ9eE|SGj&DzItBIURIcvtc)RYVo$>4qD_=nAA z9$VMZDMrgn7JPxtSm*_O(-y@nxiNG4Y6yZ!Fj?Rg+tDGK zJSmj#5y5d3w6<11H90SdM0s~hnWMdD<-K!b%;Za<(3URPmX!E`(IUDbU>ZnH{BX!* z2fgyPBR{<`yu+|YDe+EV$1q55B(ou>Tm-&qF-r7#&BaeXnm<}*B) z3~tn{v{fk?0ex~U>^|#`RH>248dzxWuY4ml&b#peM$Ep54}dQ z^<5F$&TVkla{b1kOIN>bYQCeL?)2f`hG2i6jwbn>+Ae_cdSmva3`MsUpEhTkfK5k}kICSUJ*3CX=7NR?mK3l_dgos|!m#UddHc?Nb2p`3W!t&YXm)AqPH#_- zL^Ii;2%q`VQ=jbS8iFOXFg2LU_PM(H8)$*!D6qC>X;*c2)u(49^~&1-04%0++PX7X zS4kpS&6vI#m@`a;fZKQei>?aLY3!x*x9QYMn=5u7ScrD297n;1b*HFS3;;lI;Bvk4 zgP9;qWfU|pARAEh`uijU0Nh-s14uXbN@rJnePc;*Pznr_Y*{YuZZnEYvX(8{?!fjS z2*3v-aUq*Md6G*o0KnTbrgzZ1P)lo7M`vB2{~`#293A+4_izC}4qeqD2*3yBl_w{; z26H(+5Cr)N=QcH0G&MiA=Tg#GqEN_vg|h(w4)%O=m%hmnfFMX|*>Qna4BKup1i^v+ zi)uyJ+B#~r+tiBks8kz^$&zVuahV#8s-*mv0N;5`1`meGK>g*UEK|I8XK4BaAFub zG`hMQ()Z2n>1_c3Fd4i*zjT(xbOHbb_{~S@u?*>(q6xy#D{rg1e<>t*C7EPJr?Gtm zi8o7rf?=|cAQ4y)Ogc8dtGhv5Uo?H{b1+O|F`YuDrHaG_PFz17SDEMo42zIyE7z9I|Q5Ursm;K;g^_c;mI}I{EX7QIN4-69}H0@Sf#K-)sn2 h`RtxCrerW#{2!zMV>m{Gb8G+r002ovPDHLkV1gHVaZ~^R literal 0 HcmV?d00001 diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.ico.meta b/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.png.meta similarity index 80% rename from editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.ico.meta rename to editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.png.meta index a21a05c4a..d53b194b7 100644 --- a/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.ico.meta +++ b/editions/tw5.com/tiddlers/_tw_shared/favicons/links.tiddlywiki.org.png.meta @@ -1,3 +1,3 @@ title: $:/_tw_shared/favicons/links.tiddlywiki.org -type: image/x-icon +type: image/png tags: TiddlyWikiSitesMenu diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.ico b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.ico deleted file mode 100644 index b73f67d49f5af866118de94dbdbadd75e9bd2cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 zcmeHKYitx%6dp}X)WoFtNRwK2r`uYp`1oPeXf)PFBN&4rm=H-c(I1Lp5b+TOW1^zJ zBqqLD)V_8W5oimF(rAgar9f$|q_t=btvuS==kCs9cV>5XujiZXZKvCDx6p3UVK9<6Tc`9( zzSgYqkGrCiHVY)>9q4=f>TCQRm(X7O5gzO|G?!IQ%3M3AVmjXSeOq7|x|oQb%w4Mq{h$BkV2O|7@j~_IKk>^`*6q zx^d)hlhyRb*uirqlWC8$mDi8z-m0EhplIrht$l4ern4>W1|!>aUSU>7&$9ht_TpiE znrZ)^(d}=v>J9w;Gqrfcca>>_uTQ|&lBXtGx*KYZ8; zb4fAG1iPbVIzG?Ie9e39y1uw#e1+Y9y1rN~KSTbG0~`6TfpRAVIUYF*f|~RGuZEQa zQ{P>tTE?Y|>I3ExCt_7-eL7ssS!XS&Cbvm>*fRBVzsX*p9IMm&M&k*#@<3#U&$-S> zcnTkNgO6hm>HLuA9WLfR=Q@L0@_n(7IMpXeGo1sUcWS%GlR8*?@80mVwW3c|a=l|q zo%}%esorkyp1LqhSc1CG1-`JaOYNT+O`aEgh4V|DcUOlFrQ*9PgZHPd!~b2$80OGc z3%*iB@$Ix8v1royKoFZtDR!OK;cnXZKz^Y-K6CA@yEVtUjXI2)yOmGtUG7n;|F)FoOpgVq^>Wj1HWS^CZm?}GjM8g*KwD@ z;gN@Nr;ZMp>{B`?#5L-{;|&q(JLzS52YfF*K(X6G{QuviX&@#8UoqkazUiEB=Q@@y zemh6aG2oAdSG-hxd{1#XOW&Q11177cT#0W`HO7L#4@6>BMLX0)s_uOJznQ+@ zz!mTvmRd6!&V<(hpZ2$i_(s!w;5pg2o9ZYylzk3-64+dF%LAqM`E2*|D}xVmY~F%b zXB!vx!D%_By+u6&r_bgdz^}lo?YQ>7>#IN+)uUK8_F!>Z;?;IMr#{uiC+B+)#63;$ zY9~CWG5BG=&H_FMuXe&oH->naYfOUEf>)=*$ux(%iTnWmKHInep9H7PWcz&Pulne8 up1V?B>+-2Jw4dXI(NB*7{vZ;Ep?)p69Qfq<*j-q=;DH4XEO_9*^1wfunj(1s diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.png b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2cb686ca769389a930f4a0d601b71007febe7d GIT binary patch literal 5542 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 literal 0 HcmV?d00001 diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.ico.meta b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.png.meta similarity index 79% rename from editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.ico.meta rename to editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.png.meta index 4f14e4af1..0913aa504 100644 --- a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.ico.meta +++ b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.dev.png.meta @@ -1,3 +1,3 @@ title: $:/_tw_shared/favicons/tiddlywiki.com.dev -type: image/x-icon +type: image/png tags: TiddlyWikiSitesMenu diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.ico b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.ico deleted file mode 100644 index abf226e9ba1bfd7efbe56a97cd895d311d5a67df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109030 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 diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.png b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.png new file mode 100644 index 0000000000000000000000000000000000000000..bbf053e2893bb9383004c3249368e9f5c6a868f9 GIT binary patch literal 4924 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 literal 0 HcmV?d00001 diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.ico.meta b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.png.meta similarity index 81% rename from editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.ico.meta rename to editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.png.meta index a5d98ea5e..4757a18bc 100644 --- a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.ico.meta +++ b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.prerelease.png.meta @@ -1,3 +1,3 @@ title: $:/_tw_shared/favicons/tiddlywiki.com.prerelease -type: image/x-icon +type: image/png tags: TiddlyWikiSitesMenu diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.ico b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.ico deleted file mode 100644 index 6d8d018e9d8419ff0813a364fb5ec483e529f177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25718 zcmeHO=}#6%7+*>HMZ~in^+V$k8^83EQER;L53nI^l*&;eH4#vX+F()Z0g2jzDW#^E zN(2u=j3h)$B{js5T4D@AYoIEZL8{2rf*dO6JKf)lV}@aOXJ+3^%TBV{nR#cP=lT6+ zc8+J})wD@kkhWlfroR_xOW)PB4>U~+4Skgk)3lHEyrp`cUPRNg-R1O`rs?^1L+iEk z!L66i?0<6h+p0$=_jNw}E^(ml;O8zph$9cbp$y8})x+28EY1J$@!8|mb%$bHH7Vgl z=0RE1L0w*+Y`UZTN=S2l=I?a}qowuowxKR$K$fgtl!M)kKP30?^6aJ|OO}has~0|P zI2t!(q^sdrJki^i^w!)V1MSUZr2nP+K^%Gb4P^}L>N4AYJ^zUn53tclcm2^g(p7Pt zxJE{ZD4-0=q7H8dWSjATHZtP;@ws#z;|r16alfMu>hd-~hf#k(KjF)^{*ot!d7ScB z8Q`MzO71utpo?t>aKiU<*lxwQ%jF{J>FFdPA%Q%5_RP!#w+x;K=wjOe-ztk8Z71R! zdUXu$XXVP3q`SM@)CS1n`vY`>1B_Mt*n<9J6%rE@U+bnetXj2-^z`(YR)b6yBXrU+ zmCeWZW5s(?Qqnlx)P~ioSCih}UPBuolm9m9c+Tp_H*6O6?Ac?go7%8;?OM{;*JmgK zvRPepE@AU9ju?gH&f%y&&P>@Y*rVY$JjiKWqe3UNs-n~ZP>7319|ac z?6?8htS&l-vUwO&*^r%`t*o2cuzB-lR+M|JW_8sa8lAt{JYIinY^-hlixw@i*8ghl z!0PAu$2V0_P(X5Xb4gZK7FoD(p{YHSCr>7+sj2R=d3kxHsi|pYgK&?NaA0d$I?@nb-e5oz~d+{a1Yr#}fwYQ@Y%Q_?e&Jfj^YcE zPtIjjKFmmZS(_4W+s}x)kO5hc=?&X_C8OiF3-2{w{PCBE8DI8W&7q$B2HDU7UB1Gh zDz~%r()&;IGt26a#Ey7^O{Fe$K__&p+Uu?I`bKC{OW~ZT9b*ZuB>7{Ja^H&8K8R#G5Hv%UU?Z0M-bb;;Ug zcRavYDm&IS9E&3_A2)a%ubDvTf=(F@fI)R$z+5Uj$36P#fKS`pj05xq=$7FCSY+1+ zy1q%WYn!JRPm+f-DEXW`!U737LM6e&>yL zFDfb`nVFg6&hu1xg)K7Q0vpHu=^Opv=FOX)s2E)z2=3DXE8ho1ejBX4Jn8qq9uW~?ik)&Wb?Q`d>((vX z9Kc4=IuTe|{P3-b+8*mqyJ18>tBs0^5@M$uOq({1R8&;hRp(wSi}0}iMEDo2%47c_ zy0>L!EU?GK#7JYO988}+om5smR*aFmZrwVv zYu7H))zxK*UuOKn9Kd5{(<<|ykukX6PQO>x_p)WnNPBy`kyxobnfVWE02VJFS6%-Y z8Mb`+a$6jfl$02Wlg^V_|6mQsV`kHK*1x=g_`il~+oSyb`}cWKN@H!=|TW%ob6+W)c~1Oh+y?0j3YX}bT_`BeqE!)?P;;jF3^c%3gx9Exg+n@OD_`iYQm**c_wrsIA|JByk(ji3p?Yeg}ACJP@51u(Nl(pWbX+3g9m^9|B3Q~bt2Zvf$R&=4I5w!waedc?3u7{6y6;b?8#O7$(!*1 zN1kW+58y))-J?{&$(My}=rFp!%G(pjG<<9Dslu-;x?9F$WYee%8IZ;M>jH^SMK`@; zM(-NYJ16w+0X>8MKmGq*g&(J^!+^tp!+^tp!+^tp!+^tp!+^tp!+^tp!+^tp?-}?H D7^!VM diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.png b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..38f6614313d0560d90fca242a626a4fab5ae2af5 GIT binary patch literal 5541 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 literal 0 HcmV?d00001 diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.ico.meta b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.png.meta similarity index 80% rename from editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.ico.meta rename to editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.png.meta index ef6c637c9..9479c07b2 100644 --- a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.ico.meta +++ b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.com.upgrade.png.meta @@ -1,3 +1,3 @@ title: $:/_tw_shared/favicons/tiddlywiki.com.upgrade -type: image/x-icon +type: image/png tags: TiddlyWikiSitesMenu diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.org.ico b/editions/tw5.com/tiddlers/_tw_shared/favicons/tiddlywiki.org.ico deleted file mode 100644 index c6b279307e6e01953987b393fe7b601fe719d4cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6307 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 + + + diff --git a/editions/tw5.com/tiddlers/images/Favicon template.svg.meta b/editions/tw5.com/tiddlers/images/Favicon template.svg.meta new file mode 100644 index 000000000..8d6a1a197 --- /dev/null +++ b/editions/tw5.com/tiddlers/images/Favicon template.svg.meta @@ -0,0 +1,3 @@ +title: Favicon template.svg +tags: picture +type: image/svg+xml \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/images/favicon.ico b/editions/tw5.com/tiddlers/images/favicon.ico deleted file mode 100644 index abf226e9ba1bfd7efbe56a97cd895d311d5a67df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109030 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 diff --git a/editions/tw5.com/tiddlers/images/green_favicon.ico.meta b/editions/tw5.com/tiddlers/images/green_favicon.ico.meta deleted file mode 100644 index f2e1cfa3c..000000000 --- a/editions/tw5.com/tiddlers/images/green_favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/green_favicon.ico -type: image/x-icon diff --git a/editions/tw5.com/tiddlers/images/green_favicon.png b/editions/tw5.com/tiddlers/images/green_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac96b571f719bcc7f685a5160edfa7f542b58a79 GIT binary patch literal 5824 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 KMNUMnLSTX@V<&|G literal 0 HcmV?d00001 diff --git a/editions/tw5.com/tiddlers/images/green_favicon.png.meta b/editions/tw5.com/tiddlers/images/green_favicon.png.meta new file mode 100644 index 000000000..1f2a3ecc0 --- /dev/null +++ b/editions/tw5.com/tiddlers/images/green_favicon.png.meta @@ -0,0 +1,2 @@ +title: $:/green_favicon.ico +type: image/png diff --git a/editions/zh-Hans/tiddlers/images/favicon.ico b/editions/zh-Hans/tiddlers/images/favicon.ico deleted file mode 100644 index d4fae0448a29e0e6ddf169c171e6bebc1a1f71b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 zcmeHKT})h65WbqIuYK^rM;?r6YV_4teQNbVE3`IhqQ*2$Y)!QbwX|t#iYcvHC16Vo zjnY1VKcP}$M2rx$YN2hY20?b&&B6l9&+fA9AItua=Q}W$vv>Ehy9hB+PIC9mJ!fXV zb7y8}=4jeI+P&JgZJLnpiJ1hTq=# zsLfJdXSI|Mi#d#Eg|5S%nf%u~cHBR5WcNkqnf>XBhH9E=t*6M)ZE~D=ne0dR(rjx3 z#ipE@KwozscvU@k7dSnRQ?F2B!ApzwL5k1M(p2L~DGT{zBuI&XkL>TfK;Tt%02e&I z&KBY^*Vd%VVlVEUrr@m}eGM`=1HNgrYEK$GQ;nxsocz7*WIwi#oHYk%{QR4gNhT>g z*sse&hHV8|ejJ~;1_Z?pC|Sa z?Bx5tg+h0F%|vq6)5!!m&K`((yINzx{vQeUg8gEXjx65vVwloV@g(Au3@v2sxm)U& z=6l;ce14u?A6E%mo~E(0Z|HWx-oz&-vgCbTU(9$qnmbso(CiR)Tbgjt#Kn{3x?mw+ z*O#5D{|d>g`|Ll&0LPEIUx?=Tfjq}=AsOB`#xLuDPL4(9RcGvhM~!{Rs)J*aV?$sS z_5W3M{GVv#$ujXgDIVlgIYbU!?|^Sc-g<7Q&9eKF@IkM&s=@{zNIwV~YuE$NT7E1Q z|JK209Xiv}-bAX_RP^Vjcs_yJpGd5zE&F=CC?9wg7T%QSbbi5%50 zW#t0q^<4jqQsH1Gok}Lc3*M(#Z!xp{W=lmM>p~6-_IK0tl@Dq9>IF*2V|u=E)g8^k z58nJi){{&+EqRdJN0066FV+?Vhj%?Ld^*Y4s23Q4Uppx@aDzDiL+|vJ53;Z!6Zg0! zKYmh6i-g*Tb?6*9^7LbCegE=zuVN$D@`#N5&Lnx-FX!O$d1KRKI$!AaYF*?rnAt)4 zTd_I#qhnTG7ZdnC#>zJ@+W%x$a({j z*~e-R<>dvIiVvIQi}R>+Sl7iwG91jSlh2Uwdzh6Rr(ey>3oO+S_^-0OI=eoqB#vWU zsUTeS)nu=Jk;dOYENid3sfH#Rj?4ds%IClFo$RYrolFB0HbAaIzTkD^92)ppRViu2 zb-r`uFp7mG5kuqWa{T~I&Z$OB^&S1dKOO04gp7Ft7@W^lyewMur1+n2#6T>;XYvu) zz~Newg}Jhawb`#OZ3MK`0e>ZfKADr;P47v3u46`gnX|-MkxMsYq$446y!#q)4Fx{( z`r_yxvL6K|&Wql3vxfKEt0eM3$X2yC%sB&h5%>u?Ebg5tI>y&?#>mKB)P%6NyUm*n z1w^i_&B+z$i;+VU{#jFqL|~qlT%#19nG|(zUiugMqV^$q=Q0ySoq+wty)26SVT=Lw zU7kbSOZ+|GP~f*Nd56M15Pg8kXQcfz)Tgn>p_rlGt9Q#@;_XNr3 zdjd7Utp1dOQz|dlAK;tS-%@oJ%Wtf|%QndFKZ@109zJ9L0sMUZ*Lrjpk}>PQa0d86 z?R^XBDs>;a)xHOq#$oKgOT{qbFQ)(Ivn<;7##$JYCn1-2~k-?6~o-U5pP diff --git a/editions/zh-Hans/tiddlers/images/favicon.ico.meta b/editions/zh-Hans/tiddlers/images/favicon.ico.meta deleted file mode 100644 index 2f3e81713..000000000 --- a/editions/zh-Hans/tiddlers/images/favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/favicon.ico -type: image/x-icon diff --git a/editions/zh-Hans/tiddlers/images/favicon.png b/editions/zh-Hans/tiddlers/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d797bbe8d6a97ef6f36ffe3cbd366009024b6eee GIT binary patch literal 5766 zcmV;17J2E3P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H1786NC zK~#9!?VWjGRn@h|fBT#}Wey3MAPGZ4AOY%t6bD)yz+$mZ)i9_}t?je6ebzo-WzZVp z1UU9t>nmzopCUu*)8c?QLIvu8P!S1`1QG%XA@h9av)>;XWJt)pxl8 z)JdpD%ELgJKs~4k_O4z&u2f2fRELSdPJrC|i$)5Uya>TX3QUzS35W{N<63~-z;^Pt`IOA$O>_j_9J;$A~&|Q8#ZrvCeyAHz~7@hztE)E zmCKPL7q}XT9-vKa0=ZsDwII5o`TdnEr#N*2_<$Sl-8;^uDz^*7tss*InQ}cQk?U0H zetz}xoIN@LyczL}il!@qg&^kuVhGq;+oY5$3RX;bd!QMS1BL)XAm%M9x<*R*0D`j_ zijeFC9$dF#{F?)X2m^uu^A;6dA%uKL!W7N~2)>k>yno&D3GbcJ1jt>uf4orSlL9e^ zGZOMc6#1LAk7R#yMiJnu{2k%p)`*7?;x53znGGkBr!_~!(t@W_twWvwa~BuS6lg1f zvFJEn6eSAsj@8S?e>@}!a9e(vrQK#CP{M}Hy}7ymskMQHS93D3_pDN@r>#LM}YZ@ z_l=e)AAro%MHNsK3*_Z%mQ5%dFa*e5Qj(xZ_ZDEhE}x*Nf&-e%J-y(uoT`w!fj8xs zL@Szmqb~fQ+5;Jis=jw^epzft36Ps#XmZ-M*Yr6*B>0ZmYJdHQca@k!LV)~y6vd{l z5>n36Wf8Ke;F9QY_uAZC)Swe!uXX>Ezzw<-LQaBfl(G9C4XP11f6=}LQixae-XB0# zf#lk?%g3(|H~~5~cK8$s*ZX}ytr66r8qQhsaK_<)O#!#%msvE8Rl4v8q6#2hx}AT! zVavEagh%NWD4kv z!iCWOqziv=r~yUtoTpQPM+6ABMm&ThL+{%`!-1TpxJZxUF#4PV<}EDFM$vWwM!jPP z71~u*%X#(T>_a|j0I6tC>B1kB2zR-ZCw$TX^A;6dfsh;Yz8uU3ftb1Gk*trr)&N2v z5Hery!oltm$Orp11`kvPWkWxON_uUZD0#e@Z6#?chE}l7L zQ?$=aTt07c(Nr%qfOe1GXG2a6Eb+(-xbfb-B0{k;$jT^*Uck&cHvmAnh}Sp_)Qc-8nmCBZVLE4Fgq>TtVj8T2+;!(jAO(Xe{KNqHlau!dx(JW~TnA9s1jtOYa9&PikKawnj^xLe#{1t#Rnm2mvmgdioImA73_{{fDgVF7d5yM7Tv<>(V%EQ1~?vtyHw7c40=0LE(3FR9lq> z;F7K%Ro3dGKNLt$HWL-mcW8fXl!0e{JGRrUhq@*wRdr5^4q5r;Ks&|dR-CSH-TLTA zm2<{N^8It7$r&5olO3_q08H=t%VyU{e<+ZVX7S#l7ce~5$naPrlQP1&?$UT1PDxR@ zm8Mn~qf;!5NHFzfJgzkWqrSbV?*4~_0I3$g+{a`TOv>;$U|R#;QGk)%E`cupK}`T} zV6|)2K%K&Ihbtt->w!PPhQ*|inrIICb1Q2cEnVvXE!_l&GZ7iC>QV_JMvpLiZPEJ! z71fT&E&?X@!CW?wjr?S-uazT*@H z5{H=>nP?(5%0QS|!C(+bDQRwX)7<8!uE|MdjRS{s;2w%GD#a3#=i2Pjvf#eG>4wq@ zTjj)zi0&^YW`vWOW})P;Z9sKY%5W2tGQ-Ip9nQ!^6C)B#7!7?}tx`fwgOfu??G%+; zDK58iu);QANHHooG#WrkaJ$qT!~35#oj?G9U(HQn$+L%O5AmvCWVp(VbECQVycp7w z`qxoHKw_Mc#5f~UCw8p1x!jVH!!`;JwzId)O3@)Jc83-cEtZyS3Q6B~3?4b!@cHg$ zQ&IUaveLhu`;+5M{Kwo8JiWRiBqK!#_`wCkxM5~I5n=u}N)4)D!ssw2blN*^x8y*D zjgrGQ4j!>lQSG3v*@@FBQ51pMBrvFg$Z(aI2$kpv12K^*F;NDhBUGZoRbrzIgjyvu!xoPAHKR9PX z1o!_mjVE5Npt;Q*w1&mU82CkQ3KPc$F9Tgw1zG7~Ckz6=8F@XZ_@-7D#pR)$hAbup zAsD3yArrUnX=QhD+bKWFN)O}7{~W`tX|Vx!RfK>U=f?2Z-D83({7@h!(!hB+kz9CI z=t3_v4Wveb0hD-4)%r4dmPDw$~( z#-)XEUQT3>qeVwx;BaXmh&M=NoB)p1IeBL7Q5N2k+T&;&drp1`3h8+#90 zDLG=Ls?N!=T1T(j$ch3{;Ra%(RFdLMB*hy^Pc}0y%|h~UlP-x6q0b*4t zaj42pYrDIf06n6n!O4TqA7<5t8a+&Gh~b-(Z#_N*=rs<^<(9m?rJlQ=ILMp-sPAHp zjzNy?d%E{}?1oMPoOT7IrOnOijWxXXQ7spp70vmRqnMZx?ze;m9l=9=v+MY&-EIKd zfEbT_N2g@dmrZQ?vWWgs!o6)!)n*~@Qd#74+PX1fLeb(puEbi_w)e8J6juQIeuS9QmaVmKLU8A zL9Dt#8BEkQxp-$w{Ry85g*rtb%R|wiV|or^Q1Rj$Raj5T`;Z!C3Q!h`1`V``qoItq zx772m{cSycRi>a&8j42kIoN(e8k3H|V8`B8R&T87@jFFOs;E*e3`N824vl|)-KtsmPut!ix={P+O9kuhj=gQfc0T%|ky+=*>Js%5Ulp}s zcWV6UwJP5Fq@L_C9lQEfwGIkP+xr|?0(MK;ksc1PJro20SiP}^oUt9D-a0&kl(6+* z-zx2jY6lh7-lg_S#OLsBiI{DndKs%-Q|Hx(=Q`J|N`XP`_MrtD84A)#+011yywpUV5wA4>pACmbKE;hoQvGX}U+y z6OPq6dHBU6ehJD^RI#z^|6N`HE$xQQ(Gl(@Jd6zp1ma>0oIhEwQ+YDJE^gxwYmd_6 zkBBTuqub=#a*77n@Jyy15AK?Q+@OnXBj^h*! z03f7VAcgjCp?KM(cq5lgjnSpviNb^JJpaZqs{CBKPa@YH|Mv+5s0yoiFVU8AR6t6w zU-*_Q6ZO$gN2JwjAJ($*pAAU=@0C@>)VFOq!5%pNk4Sq1sdOrQSg@Z?Iep8`=#E!kK-1Af^?`{i-@B#k3a^)0fuNt63MYvxSsP_`2GXsnU z!7W!N`u)CN?Qdhvdnay#hFcU81%*xh3s3jrt}RH4RQ` z8lA*N`);_}of+FbHt%CGjN2`M*5f zj(w-rIcm3QlvUa(tF-q?N|RARRls6ausbAHySvAH{@5r3Qzu6D`(THvItNd!stiUf z<=d|=8+Y&&m#{}a5uOZ&@JFSXxq3#N-|y>oOLqCNqUdx<+N>RgrmE|mG_|^VE#}bJ z;_CP6WmT<%2mYr#D1o#>h{t=8^{H6BZ2ZSab_TLRsv@}Ky56&peZl@i)}W@dZQjv8 z)&1h%j|Hjviu`=dqgh)#CO{`13}ln$OdrPB0F_7$_I|?7eQjRvW>(ib`Q|`-P}(Pj z(yJ_cCBWL{_L z0BBlZP7l3#PC~${W7RjgID9Pl$tj=hZt?2(4K2ah`c`0(l*oP&VBPWw?*V>2J$zC| zIMXJ1?lyU=TE8x73zQFiS`?LAsc-gNsIK5dM6X-DZ2ZT45ajgGaQ~Xqq>y`S_}%&= z?|lBvJH0co`f~9CHqT1fnfQS$z$jf9!KvlT*F z#KNU{uGUimS|LsBiK%P(gNHUk-za!0)v6%x0DPXfzApBR09L!!QOUwfO&QASn~`1= z$QqSw4%FtCCIok$yyou{0ibhn2%hn^b=!6|dnBaKcDG=6YFNEo(20pu2L%CCRdklx z^S940miM;k;}Zb@n%mTcz%E}J*xK&)$YttE9hp**_q{4_U`K1p5THIhLoLr?r&c>Co96A zkFPao$_<{X{(cbvVD<8xJpysFFZMv$QG1_S;G(mlQIw92nTK9DOl_lQ?=>kig4CqY zl%Da{u*)7BenN?P-!wnBuUe6L#M=w|_4GB%vfcpklrJqV_@MT5iHnR#Ffsdrj#9K; zH4E!JNE{IY?wXep^g8^}k*e3iG^m2J$NR1Y1Y-G`N5{X}pKJTwOWBsJdx3TRz5Zye zgLk$zoc1^KXD4(Y>QLR_&*z>>+d~Y`>2*`Hi2hxvwr`Ijn7jKfv+aS;PdIW{3Joxi;uL?!jof>O4)^f|0i5`z2O@oRWJ5{w# zN-J$_+tqwpJH%7WIzN`%ukOF$dGLshC4W5Br`k6;4Rc<8JfqrQGV`mi^!lR{>NJaM zR(}k`HmjQzFCFp7)$4-UsIaT3jaT2T@k-mIC7GEzF_PR_!+GNFF`BJTBt22A{#KUgl5X`<(y)1$jBGn%R97Laz1p+Uf=;d4DSRDjmx1(0F@GJ+FP( zzk;VmgW%`aC;NPIdZ{1c5N^C8q2~=EDP9k^nCGm@%k+COFLmkCrGB3eZ@4(Yy=Uw2 zH)@@AVF)h7i#@$|o5nwOHWO}ENliBOYP?zP8U-KJva2)xudvjLqKNKdNnUk=B5=AS zyG!~Xq-k?#%$O46(~&u`Q3leJ&1^4h?edJIKrGJ=%ewRFyx4%0R`sh5&=ck^E}kin zt3Y}^L7I&UV^hr}#+k5~6wD@p-65&0bx?fBimiv^US~~<<+iJmyguh}cS$>s{Q0m? z?>cAtFm9gXdzMqlVH^Lwrn0`e(RK5>N3%8rQa%AE0KiQPOH$p6dyRzY!SKl^XNGg< z^(kKY<~#Sb^4R}Y`26e%qr(`RY9Y+rQ7%8sqF}XYq$iubTK3g6S+6MKO5oE$PXK^R z@;4ijZOQjb#P0%Odz|W*E6ksr!1QyX`#k;3>5@G0N=5f{5(t=$3d`>r1%vDarU9-YMSw2M zU$}pSR9Ft&d?t}V2skS%f*I#Vmrcozs4^MV;dGqf8U{qtQNn*U9Z9+^0c}et3D8Z1 z`-(1;n#=>fcZN{lGX;5HUr8H5X~{q!K)1`dsQCLr(Uu_j!4Mt!UucN@K)ZH>mH=It zx2WhWguDk>01WoSh$YC6q~w`(%O|`w;7B zVeMm?2L`NG8ps4V-fKv)rOeb2bCL2I1Ov64XakbJOXRxhu&R$bi*60p`jJV;2DM>2*a^_1?XY;?XepI!1Yu-}~6n`~Qzw*Hke%uFR2uA(|FEPQehIlt#_@E>jFj47X$VEV$nVLCdLKiV2 zQJE;tsWTB{a2k|}jxk|fyKbZHTH3Co-FjW`$LIHqQ=h){Z8v!NqB~9V+|KPe=RD_} zSJQ6LZq$}7)5O@IEx$?A?$9)?q2coSR!v(Y_Lhr1fg&*G_r;)TV!s~Td-jz(S39hG z8y!}=#nF_&A9L*C%!q!)mn&{=bZp$eZla}V^|n(-=nMKYX{X0r+h~nzGqnXjrQy_t z(qPu~ek?Kv$U-XXA5zsSoD(g9bX_PL|P4MeMZ&KO=_EFCC|cTwCbbi9H0pQbP7f z+D#9-nk7AG*jCIFfNq${|$7Cj0ft)C$2>)y`N0EH2;_RE~ zuUT8D+t2!Agng{uy|i`mfV7)>20ND>?}1w^qfL86OegiS@J0_#^-$+jH$CEdwIUxgE^^m& zE?O*zU#5_0X1)su~sc$;%;X3u;)ZFelgV29I1J7x?(2hA_Cr-FY7)cpKRP z{$`s4_sQ`cWqI%=>I49JTIH#q_r(TSJfZIB&mjY{^mah3skrZ4{G`lBy%X%N;_2t2 zc9rQ`1Ba{PLY69D+Fcjt&y4M&SUxFvsrBBUnX1Z@^*|rMfOzG7b;O%e{eZWsp7XpT zbd*_DjL*AU<-1!i-r;5uUpsvtP_ws#woTe9@CK6(=||?Lj*tl(AXgdX7R0|t#E>46 zg>=;(NRNj#-eNU7Kqlu@RWJP<{ob_#-YasIo;T-n{XVas9@|;<{#T<9-Vgf2$3>sZ z{JEC!T0bJ^nF;U(V!3zbq||}ym?{@Oe`@?Snfs7Gt{1?sTtgubxdQUwD?qN87diaj zJa4uhs0$(&#b5HYr7q=WrCkEqX*w_Rw>>>U(R|!&kyr3r>)M?R=c3uaM9#*WR{elE z?1H$(dou#`?xP~-ctw975%)lxB?LZdMm_&Ed*1hibCJ};1~r`ZK`lVd>52X#zs0&E zCuBWB-_JPJM$puP?OxkJe`0v38m$?7`0lC&ouTet&)miD%#dZoBbHA{70!vcIu!m^ z=IHjo5jvf)lP?$Q&E~VO8|7ako{QQ4Fx(@*yWvBX4l;cS-%8W~qxz%bn?2|H1NqhJ zui5fce){?g9rXQ&if{H@-+w^9zW*{?Ci64uzo3Kk!{y$W@y#4-^`DRrQ2TGQW!LM! z=QWtOgW3yUs~+H`_IoU+)>!NNYoYoe&Jk)idagx4M`d1zgZ9_RgwY{hWJ6 e?wPoEkl*0=7Qas4-+Dck)=L&xvcP}G0{;MK0De0F diff --git a/editions/zh-Hans/tiddlers/images/green_favicon.ico.meta b/editions/zh-Hans/tiddlers/images/green_favicon.ico.meta deleted file mode 100644 index f2e1cfa3c..000000000 --- a/editions/zh-Hans/tiddlers/images/green_favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/green_favicon.ico -type: image/x-icon diff --git a/editions/zh-Hans/tiddlers/images/green_favicon.png b/editions/zh-Hans/tiddlers/images/green_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac96b571f719bcc7f685a5160edfa7f542b58a79 GIT binary patch literal 5824 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 KMNUMnLSTX@V<&|G literal 0 HcmV?d00001 diff --git a/editions/zh-Hans/tiddlers/images/green_favicon.png.meta b/editions/zh-Hans/tiddlers/images/green_favicon.png.meta new file mode 100644 index 000000000..1f2a3ecc0 --- /dev/null +++ b/editions/zh-Hans/tiddlers/images/green_favicon.png.meta @@ -0,0 +1,2 @@ +title: $:/green_favicon.ico +type: image/png diff --git a/editions/zh-Hant/tiddlers/images/favicon.ico b/editions/zh-Hant/tiddlers/images/favicon.ico deleted file mode 100644 index d4fae0448a29e0e6ddf169c171e6bebc1a1f71b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 zcmeHKT})h65WbqIuYK^rM;?r6YV_4teQNbVE3`IhqQ*2$Y)!QbwX|t#iYcvHC16Vo zjnY1VKcP}$M2rx$YN2hY20?b&&B6l9&+fA9AItua=Q}W$vv>Ehy9hB+PIC9mJ!fXV zb7y8}=4jeI+P&JgZJLnpiJ1hTq=# zsLfJdXSI|Mi#d#Eg|5S%nf%u~cHBR5WcNkqnf>XBhH9E=t*6M)ZE~D=ne0dR(rjx3 z#ipE@KwozscvU@k7dSnRQ?F2B!ApzwL5k1M(p2L~DGT{zBuI&XkL>TfK;Tt%02e&I z&KBY^*Vd%VVlVEUrr@m}eGM`=1HNgrYEK$GQ;nxsocz7*WIwi#oHYk%{QR4gNhT>g z*sse&hHV8|ejJ~;1_Z?pC|Sa z?Bx5tg+h0F%|vq6)5!!m&K`((yINzx{vQeUg8gEXjx65vVwloV@g(Au3@v2sxm)U& z=6l;ce14u?A6E%mo~E(0Z|HWx-oz&-vgCbTU(9$qnmbso(CiR)Tbgjt#Kn{3x?mw+ z*O#5D{|d>g`|Ll&0LPEIUx?=Tfjq}=AsOB`#xLuDPL4(9RcGvhM~!{Rs)J*aV?$sS z_5W3M{GVv#$ujXgDIVlgIYbU!?|^Sc-g<7Q&9eKF@IkM&s=@{zNIwV~YuE$NT7E1Q z|JK209Xiv}-bAX_RP^Vjcs_yJpGd5zE&F=CC?9wg7T%QSbbi5%50 zW#t0q^<4jqQsH1Gok}Lc3*M(#Z!xp{W=lmM>p~6-_IK0tl@Dq9>IF*2V|u=E)g8^k z58nJi){{&+EqRdJN0066FV+?Vhj%?Ld^*Y4s23Q4Uppx@aDzDiL+|vJ53;Z!6Zg0! zKYmh6i-g*Tb?6*9^7LbCegE=zuVN$D@`#N5&Lnx-FX!O$d1KRKI$!AaYF*?rnAt)4 zTd_I#qhnTG7ZdnC#>zJ@+W%x$a({j z*~e-R<>dvIiVvIQi}R>+Sl7iwG91jSlh2Uwdzh6Rr(ey>3oO+S_^-0OI=eoqB#vWU zsUTeS)nu=Jk;dOYENid3sfH#Rj?4ds%IClFo$RYrolFB0HbAaIzTkD^92)ppRViu2 zb-r`uFp7mG5kuqWa{T~I&Z$OB^&S1dKOO04gp7Ft7@W^lyewMur1+n2#6T>;XYvu) zz~Newg}Jhawb`#OZ3MK`0e>ZfKADr;P47v3u46`gnX|-MkxMsYq$446y!#q)4Fx{( z`r_yxvL6K|&Wql3vxfKEt0eM3$X2yC%sB&h5%>u?Ebg5tI>y&?#>mKB)P%6NyUm*n z1w^i_&B+z$i;+VU{#jFqL|~qlT%#19nG|(zUiugMqV^$q=Q0ySoq+wty)26SVT=Lw zU7kbSOZ+|GP~f*Nd56M15Pg8kXQcfz)Tgn>p_rlGt9Q#@;_XNr3 zdjd7Utp1dOQz|dlAK;tS-%@oJ%Wtf|%QndFKZ@109zJ9L0sMUZ*Lrjpk}>PQa0d86 z?R^XBDs>;a)xHOq#$oKgOT{qbFQ)(Ivn<;7##$JYCn1-2~k-?6~o-U5pP diff --git a/editions/zh-Hant/tiddlers/images/favicon.ico.meta b/editions/zh-Hant/tiddlers/images/favicon.ico.meta deleted file mode 100644 index 2f3e81713..000000000 --- a/editions/zh-Hant/tiddlers/images/favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/favicon.ico -type: image/x-icon diff --git a/editions/zh-Hant/tiddlers/images/favicon.png b/editions/zh-Hant/tiddlers/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d797bbe8d6a97ef6f36ffe3cbd366009024b6eee GIT binary patch literal 5766 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 diff --git a/editions/zh-Hant/tiddlers/images/green_favicon.ico.meta b/editions/zh-Hant/tiddlers/images/green_favicon.ico.meta deleted file mode 100644 index f2e1cfa3c..000000000 --- a/editions/zh-Hant/tiddlers/images/green_favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/green_favicon.ico -type: image/x-icon diff --git a/editions/zh-Hant/tiddlers/images/green_favicon.png b/editions/zh-Hant/tiddlers/images/green_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac96b571f719bcc7f685a5160edfa7f542b58a79 GIT binary patch literal 5824 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 KMNUMnLSTX@V<&|G literal 0 HcmV?d00001 diff --git a/editions/zh-Hant/tiddlers/images/green_favicon.png.meta b/editions/zh-Hant/tiddlers/images/green_favicon.png.meta new file mode 100644 index 000000000..1f2a3ecc0 --- /dev/null +++ b/editions/zh-Hant/tiddlers/images/green_favicon.png.meta @@ -0,0 +1,2 @@ +title: $:/green_favicon.ico +type: image/png diff --git a/plugins/tiddlywiki/upgrade/favicon.ico b/plugins/tiddlywiki/upgrade/favicon.ico deleted file mode 100644 index 6d8d018e9d8419ff0813a364fb5ec483e529f177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25718 zcmeHO=}#6%7+*>HMZ~in^+V$k8^83EQER;L53nI^l*&;eH4#vX+F()Z0g2jzDW#^E zN(2u=j3h)$B{js5T4D@AYoIEZL8{2rf*dO6JKf)lV}@aOXJ+3^%TBV{nR#cP=lT6+ zc8+J})wD@kkhWlfroR_xOW)PB4>U~+4Skgk)3lHEyrp`cUPRNg-R1O`rs?^1L+iEk z!L66i?0<6h+p0$=_jNw}E^(ml;O8zph$9cbp$y8})x+28EY1J$@!8|mb%$bHH7Vgl z=0RE1L0w*+Y`UZTN=S2l=I?a}qowuowxKR$K$fgtl!M)kKP30?^6aJ|OO}has~0|P zI2t!(q^sdrJki^i^w!)V1MSUZr2nP+K^%Gb4P^}L>N4AYJ^zUn53tclcm2^g(p7Pt zxJE{ZD4-0=q7H8dWSjATHZtP;@ws#z;|r16alfMu>hd-~hf#k(KjF)^{*ot!d7ScB z8Q`MzO71utpo?t>aKiU<*lxwQ%jF{J>FFdPA%Q%5_RP!#w+x;K=wjOe-ztk8Z71R! zdUXu$XXVP3q`SM@)CS1n`vY`>1B_Mt*n<9J6%rE@U+bnetXj2-^z`(YR)b6yBXrU+ zmCeWZW5s(?Qqnlx)P~ioSCih}UPBuolm9m9c+Tp_H*6O6?Ac?go7%8;?OM{;*JmgK zvRPepE@AU9ju?gH&f%y&&P>@Y*rVY$JjiKWqe3UNs-n~ZP>7319|ac z?6?8htS&l-vUwO&*^r%`t*o2cuzB-lR+M|JW_8sa8lAt{JYIinY^-hlixw@i*8ghl z!0PAu$2V0_P(X5Xb4gZK7FoD(p{YHSCr>7+sj2R=d3kxHsi|pYgK&?NaA0d$I?@nb-e5oz~d+{a1Yr#}fwYQ@Y%Q_?e&Jfj^YcE zPtIjjKFmmZS(_4W+s}x)kO5hc=?&X_C8OiF3-2{w{PCBE8DI8W&7q$B2HDU7UB1Gh zDz~%r()&;IGt26a#Ey7^O{Fe$K__&p+Uu?I`bKC{OW~ZT9b*ZuB>7{Ja^H&8K8R#G5Hv%UU?Z0M-bb;;Ug zcRavYDm&IS9E&3_A2)a%ubDvTf=(F@fI)R$z+5Uj$36P#fKS`pj05xq=$7FCSY+1+ zy1q%WYn!JRPm+f-DEXW`!U737LM6e&>yL zFDfb`nVFg6&hu1xg)K7Q0vpHu=^Opv=FOX)s2E)z2=3DXE8ho1ejBX4Jn8qq9uW~?ik)&Wb?Q`d>((vX z9Kc4=IuTe|{P3-b+8*mqyJ18>tBs0^5@M$uOq({1R8&;hRp(wSi}0}iMEDo2%47c_ zy0>L!EU?GK#7JYO988}+om5smR*aFmZrwVv zYu7H))zxK*UuOKn9Kd5{(<<|ykukX6PQO>x_p)WnNPBy`kyxobnfVWE02VJFS6%-Y z8Mb`+a$6jfl$02Wlg^V_|6mQsV`kHK*1x=g_`il~+oSyb`}cWKN@H!=|TW%ob6+W)c~1Oh+y?0j3YX}bT_`BeqE!)?P;;jF3^c%3gx9Exg+n@OD_`iYQm**c_wrsIA|JByk(ji3p?Yeg}ACJP@51u(Nl(pWbX+3g9m^9|B3Q~bt2Zvf$R&=4I5w!waedc?3u7{6y6;b?8#O7$(!*1 zN1kW+58y))-J?{&$(My}=rFp!%G(pjG<<9Dslu-;x?9F$WYee%8IZ;M>jH^SMK`@; zM(-NYJ16w+0X>8MKmGq*g&(J^!+^tp!+^tp!+^tp!+^tp!+^tp!+^tp!+^tp?-}?H D7^!VM diff --git a/plugins/tiddlywiki/upgrade/favicon.ico.meta b/plugins/tiddlywiki/upgrade/favicon.ico.meta deleted file mode 100644 index 2f3e81713..000000000 --- a/plugins/tiddlywiki/upgrade/favicon.ico.meta +++ /dev/null @@ -1,2 +0,0 @@ -title: $:/favicon.ico -type: image/x-icon diff --git a/plugins/tiddlywiki/upgrade/favicon.png b/plugins/tiddlywiki/upgrade/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..38f6614313d0560d90fca242a626a4fab5ae2af5 GIT binary patch literal 5541 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 literal 0 HcmV?d00001 diff --git a/plugins/tiddlywiki/upgrade/favicon.png.meta b/plugins/tiddlywiki/upgrade/favicon.png.meta new file mode 100644 index 000000000..76d0be1a8 --- /dev/null +++ b/plugins/tiddlywiki/upgrade/favicon.png.meta @@ -0,0 +1,2 @@ +title: $:/favicon.ico +type: image/png From 23b75bbc5dfc49762ad136dbfe75040409c8b9f6 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Thu, 5 Oct 2023 22:25:07 +0100 Subject: [PATCH 19/33] Add links to archived versions of TiddlyWiki @pmario v5.3.0 and v5.3.1 are missing from the archive, would you be able to kindly prepare a PR? --- editions/tw5.com/tiddlers/about/Archive.tid | 44 +++++++++++++++++++ .../tiddlers/releasenotes/Releases.tid | 4 +- 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 editions/tw5.com/tiddlers/about/Archive.tid diff --git a/editions/tw5.com/tiddlers/about/Archive.tid b/editions/tw5.com/tiddlers/about/Archive.tid new file mode 100644 index 000000000..0ad86f303 --- /dev/null +++ b/editions/tw5.com/tiddlers/about/Archive.tid @@ -0,0 +1,44 @@ +title: TiddlyWiki Archive +created: 20231005205623086 +modified: 20231005210538879 +tags: About + +\procedure versions() +5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 +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 +\end + +Older versions of TiddlyWiki are available in the [[archive|https://github.com/Jermolene/jermolene.github.io/tree/master/archive]]: + + + + <$list filter=<> variable="version"> + <$let + filename=`TiddlyWiki-$(version)$` + emptyFilename=`Empty-$(filename)$` + > + + + + + + + + + +
+ <$text text=`v$(version)$`/> + + <$view tiddler={{{ [addprefix[Release ]] }}} field="released" format="date" template="DDth mmm YYYY"/> + + addprefix[https://tiddlywiki.com/archive/full/]]}}} rel="noopener noreferrer" target="_blank"> + <$text text=`$(filename)$.html`/> + + + addprefix[https://tiddlywiki.com/archive/empty/]]}}} rel="noopener noreferrer" target="_blank"> + <$text text=`$(emptyFilename)$.html`/> + +
diff --git a/editions/tw5.com/tiddlers/releasenotes/Releases.tid b/editions/tw5.com/tiddlers/releasenotes/Releases.tid index e738520a7..57e5d3fd4 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Releases.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Releases.tid @@ -1,9 +1,11 @@ created: 20150419144523070 -modified: 20220802100223019 +modified: 20231005205612322 tags: About title: Releases type: text/vnd.tiddlywiki New releases of TiddlyWiki and TiddlyDesktop are announced via the [[official discussion groups|Forums]] and [[Twitter|https://twitter.com/TiddlyWiki]] +See the [[TiddlyWiki Archive]] to download older versions. + <> From 35e45f3b9081277e6a4f4f70718c54d89117dfde Mon Sep 17 00:00:00 2001 From: Mateusz Wilczek <36714554+mateuszwilczek@users.noreply.github.com> Date: Fri, 6 Oct 2023 22:39:43 +0200 Subject: [PATCH 20/33] Clean up after #7671 (Change favicon format from ICO to PNG) (#7774) * Delete editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg * Delete editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg.md --- .../tiddlers/_tw_shared/favicons/favicons.svg | 296 ------------------ .../_tw_shared/favicons/favicons.svg.md | 15 - 2 files changed, 311 deletions(-) delete mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg delete mode 100644 editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg.md diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg b/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg deleted file mode 100644 index 26f29a39e..000000000 --- a/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg +++ /dev/null @@ -1,296 +0,0 @@ - - - - diff --git a/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg.md b/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg.md deleted file mode 100644 index 7238bccdc..000000000 --- a/editions/tw5.com/tiddlers/_tw_shared/favicons/favicons.svg.md +++ /dev/null @@ -1,15 +0,0 @@ -`favicons.svg` is an Inkscape file used to create most of the favicons in this folder. It should also be usable in any other vector graphics software. It's a template, not supposed to be directly displayed anywhere in wiki. - -Every favicon is stored in a separate layer. This allows to export all favicons at once in Inkscape: - -1. Go to Export > Batch Export > Layers. -2. Select layers/favicons you want to export. -3. Select "Export Selected Only" -4. Choose PNG without suffix (exported files will be named after the layers). -5. Change DPI to batch export at different resolution (the default 96 DPI will export at 128x128, 144 DPI would export at 192x192 and so on). If changing the DPI is undesired, the favicons can be single-exported (hide all layers but one, Export > Single Image) at specified DPI and resolution. -6. Specify only export path without file name prefix (exported files will be named after the layers). -7. Export. - -The colours used in the favicons are saved as swatches, named after the favicon using the colour. - -If the icons were to be used as SVG, the individual layers should be separately exported and then cleaned up from Inkscape's metadata. \ No newline at end of file From 327ecf8f662ca9814b63dc4a8702cebe8f6fe1e2 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Fri, 6 Oct 2023 21:49:02 +0100 Subject: [PATCH 21/33] Don't refresh the body editor when switching the preview on and off (#7747) * Don't refresh the body editor when switching the preview on and off * Focus editor when switching the preview on or off --- core/ui/EditTemplate/body/default.tid | 20 ++++++++++++-------- core/ui/EditorToolbar/preview.tid | 6 ++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/core/ui/EditTemplate/body/default.tid b/core/ui/EditTemplate/body/default.tid index a2128efb0..68133d48e 100644 --- a/core/ui/EditTemplate/body/default.tid +++ b/core/ui/EditTemplate/body/default.tid @@ -1,5 +1,9 @@ title: $:/core/ui/EditTemplate/body/default +\function edit-preview-state() +[{$:/config/ShowEditPreview/PerTiddler}!match[yes]then[$:/state/showeditpreview]] :else[] +[get[text]] :else[[no]] +\end + \define config-visibility-title() $:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$ \end @@ -10,15 +14,16 @@ $:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$ \whitespace trim <$let - edit-preview-state={{{ [{$:/config/ShowEditPreview/PerTiddler}!match[yes]then[$:/state/showeditpreview]] :else[] }}} importTitle=<> importState=<> > <$dropzone importTitle=<> autoOpenOnImport="no" contentTypesFilter={{$:/config/Editor/ImportContentTypesFilter}} class="tc-dropzone-editor" enable={{{ [{$:/config/DragAndDrop/Enable}match[no]] :else[subfilter{$:/config/Editor/EnableImportFilter}then[yes]else[no]] }}} filesOnly="yes" actions=<> > -<$reveal stateTitle=<> type="match" text="yes" tag="div"> -

+
+
<$transclude tiddler="$:/core/ui/EditTemplate/body/editor" mode="inline"/> +<$list filter="[function[edit-preview-state]match[yes]]" variable="ignore"> +
<$transclude tiddler={{$:/state/editpreviewtype}} mode="inline"> @@ -29,13 +34,12 @@ $:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$
+ +
- -<$reveal stateTitle=<> type="nomatch" text="yes" tag="div"> +
-<$transclude tiddler="$:/core/ui/EditTemplate/body/editor" mode="inline"/> - - + diff --git a/core/ui/EditorToolbar/preview.tid b/core/ui/EditorToolbar/preview.tid index 106b28d3c..3c8cef505 100644 --- a/core/ui/EditorToolbar/preview.tid +++ b/core/ui/EditorToolbar/preview.tid @@ -9,11 +9,17 @@ button-classes: tc-text-editor-toolbar-item-start-group shortcuts: ((preview)) \whitespace trim +<$let + edit-preview-state={{{ [{$:/config/ShowEditPreview/PerTiddler}!match[yes]then[$:/state/showeditpreview]] :else[] }}} +> <$reveal state=<> type="match" text="yes" tag="span"> {{$:/core/images/preview-open}} <$action-setfield $tiddler=<> $value="no"/> +<$action-sendmessage $message="tm-edit-text-operation" $param="focus-editor"/> <$reveal state=<> type="nomatch" text="yes" tag="span"> {{$:/core/images/preview-closed}} <$action-setfield $tiddler=<> $value="yes"/> +<$action-sendmessage $message="tm-edit-text-operation" $param="focus-editor"/> + From 66a8e2dbf28503a514da2bea5114187b8b84a04f Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 7 Oct 2023 21:55:39 +0100 Subject: [PATCH 22/33] Ensure {{}} doesn't generate a transclude widget with no attributes (#7768) --- core/modules/parsers/wikiparser/rules/transcludeblock.js | 3 +++ core/modules/parsers/wikiparser/rules/transcludeinline.js | 3 +++ 2 files changed, 6 insertions(+) diff --git a/core/modules/parsers/wikiparser/rules/transcludeblock.js b/core/modules/parsers/wikiparser/rules/transcludeblock.js index c033c2440..d6dad6df3 100644 --- a/core/modules/parsers/wikiparser/rules/transcludeblock.js +++ b/core/modules/parsers/wikiparser/rules/transcludeblock.js @@ -81,6 +81,9 @@ exports.parse = function() { } return [tiddlerNode]; } else { + // No template or text reference is provided, so we'll use a blank target. Otherwise we'll generate + // a transclude widget that transcludes the current tiddler, often leading to recursion errors + transcludeNode.attributes["$tiddler"] = {name: "$tiddler", type: "string", value: ""}; return [transcludeNode]; } } diff --git a/core/modules/parsers/wikiparser/rules/transcludeinline.js b/core/modules/parsers/wikiparser/rules/transcludeinline.js index 3ce9dc78e..87529ca8d 100644 --- a/core/modules/parsers/wikiparser/rules/transcludeinline.js +++ b/core/modules/parsers/wikiparser/rules/transcludeinline.js @@ -79,6 +79,9 @@ exports.parse = function() { } return [tiddlerNode]; } else { + // No template or text reference is provided, so we'll use a blank target. Otherwise we'll generate + // a transclude widget that transcludes the current tiddler, often leading to recursion errors + transcludeNode.attributes["$tiddler"] = {name: "$tiddler", type: "string", value: ""}; return [transcludeNode]; } } From 12f42ad62f648cdc5daf779a32df2db77151fbbc Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sun, 8 Oct 2023 10:29:42 +0100 Subject: [PATCH 23/33] Add a summary for each release, and include in archive listing --- editions/tw5.com/tiddlers/about/Archive.tid | 56 ++++++++++++++++--- .../tiddlers/releasenotes/Release 5.1.0.tid | 1 + .../tiddlers/releasenotes/Release 5.1.1.tid | 1 + .../tiddlers/releasenotes/Release 5.1.10.tid | 1 + .../tiddlers/releasenotes/Release 5.1.11.tid | 1 + .../tiddlers/releasenotes/Release 5.1.12.tid | 1 + .../tiddlers/releasenotes/Release 5.1.13.tid | 1 + .../tiddlers/releasenotes/Release 5.1.14.tid | 1 + .../tiddlers/releasenotes/Release 5.1.15.tid | 1 + .../tiddlers/releasenotes/Release 5.1.16.tid | 1 + .../tiddlers/releasenotes/Release 5.1.17.tid | 1 + .../tiddlers/releasenotes/Release 5.1.18.tid | 1 + .../tiddlers/releasenotes/Release 5.1.19.tid | 1 + .../tiddlers/releasenotes/Release 5.1.2.tid | 1 + .../tiddlers/releasenotes/Release 5.1.20.tid | 1 + .../tiddlers/releasenotes/Release 5.1.21.tid | 1 + .../tiddlers/releasenotes/Release 5.1.22.tid | 1 + .../tiddlers/releasenotes/Release 5.1.23.tid | 1 + .../tiddlers/releasenotes/Release 5.1.3.tid | 1 + .../tiddlers/releasenotes/Release 5.1.4.tid | 1 + .../tiddlers/releasenotes/Release 5.1.5.tid | 1 + .../tiddlers/releasenotes/Release 5.1.6.tid | 1 + .../tiddlers/releasenotes/Release 5.1.7.tid | 1 + .../tiddlers/releasenotes/Release 5.1.8.tid | 1 + .../tiddlers/releasenotes/Release 5.1.9.tid | 1 + .../tiddlers/releasenotes/Release 5.2.0.tid | 1 + .../tiddlers/releasenotes/Release 5.2.1.tid | 1 + .../tiddlers/releasenotes/Release 5.2.2.tid | 1 + .../tiddlers/releasenotes/Release 5.2.3.tid | 1 + .../tiddlers/releasenotes/Release 5.2.4.tid | 1 + .../tiddlers/releasenotes/Release 5.2.5.tid | 1 + .../tiddlers/releasenotes/Release 5.2.6.tid | 1 + .../tiddlers/releasenotes/Release 5.2.7.tid | 1 + .../tiddlers/releasenotes/Release 5.3.0.tid | 1 + .../tiddlers/releasenotes/Release 5.3.1.tid | 1 + 35 files changed, 81 insertions(+), 9 deletions(-) diff --git a/editions/tw5.com/tiddlers/about/Archive.tid b/editions/tw5.com/tiddlers/about/Archive.tid index 0ad86f303..988f65e7b 100644 --- a/editions/tw5.com/tiddlers/about/Archive.tid +++ b/editions/tw5.com/tiddlers/about/Archive.tid @@ -15,26 +15,64 @@ Older versions of TiddlyWiki are available in the [[archive|https://github.com/J - <$list filter=<> variable="version"> + + + + + + + + <$list filter="[enlistreverse[]]" variable="version"> <$let filename=`TiddlyWiki-$(version)$` emptyFilename=`Empty-$(filename)$` + releaseTiddler={{{ [addprefix[Release ]] }}} + releaseDate={{{ [get[released]format:date[TIMESTAMP]] }}} + nextVersion={{{ [enlistafter] }}} + nextReleaseTiddler={{{ [addprefix[Release ]] }}} + nextReleaseDate={{{ [get[released]format:date[TIMESTAMP]] }}} + lifetime={{{ [subtractdivide[86400000]add[0.5]fixed[0]] }}} > - + + + - diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.0.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.0.tid index 29403c9a7..b10ed54d5 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.0.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.0.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.0 type: text/vnd.tiddlywiki released: 201409201500 +description: First non-beta release //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.18-beta...v5.1.0]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.1.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.1.tid index db16984c0..6ee16c1d8 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.1.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.1.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.1 type: text/vnd.tiddlywiki released: 201409221100 +description: [[KaTeX Plugin]] //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.0...v5.1.1]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid index 3b72acd96..aab812aeb 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.10.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.10 type: text/vnd.tiddlywiki released: 20160107231609312 +description: Text slicer, fold/unfold, performance optimisations, translations, external text tiddlers //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.9...v5.1.10]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid index 18eff4b38..4bf6744bc 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.11.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.11 type: text/vnd.tiddlywiki released: 20160130124109312 +description: Bug fix release for v5.1.10 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.10...v5.1.11]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.12.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.12.tid index ee26fb2a4..50e4a0c1a 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.12.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.12.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.12 type: text/vnd.tiddlywiki released: 20160713104714652 +description: Editor toolbars, improved bitmap editor, Internals plugin, WikifyWidget //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.11...v5.1.12]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.13.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.13.tid index 593e1c85c..a9fd5a94f 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.13.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.13.tid @@ -5,6 +5,7 @@ released: 20160725084810809 tags: ReleaseNotes title: Release 5.1.13 type: text/vnd.tiddlywiki +description: Bug fix release for v5.1.12 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.12...v5.1.13]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.14.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.14.tid index 57a2cc6f7..ea2898821 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.14.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.14.tid @@ -5,6 +5,7 @@ released: 20170426160031661 tags: ReleaseNotes title: Release 5.1.14 type: text/vnd.tiddlywiki +description: Drag and drop improvements, initial RTL support, plugins for XLSX import, QR Codes, ~BibTeX, Google Analytics, Twitter //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.13...v5.1.14]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.15.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.15.tid index a3db96697..68dd3389b 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.15.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.15.tid @@ -5,6 +5,7 @@ released: 20171113161124237 tags: ReleaseNotes title: Release 5.1.15 type: text/vnd.tiddlywiki +description: Explorer tab, whitespace pragma, save and render commands //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.14...v5.1.15]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid index 90c62c110..6a97267e1 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.16.tid @@ -5,6 +5,7 @@ released: 20180425155658451 tags: ReleaseNotes title: Release 5.1.16 type: text/vnd.tiddlywiki +description: [[Dynaview Plugin]], import previews, DiffTextWidget, rotate left in bitmap editor, StartupActions //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.15...v5.1.16]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.17.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.17.tid index 99cc96e52..a80e2d5a1 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.17.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.17.tid @@ -5,6 +5,7 @@ released: 20180512104329616 tags: ReleaseNotes title: Release 5.1.17 type: text/vnd.tiddlywiki +description: Minor bug fix release //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.16...v5.1.17]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.18.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.18.tid index 9338869c2..4b2501ea3 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.18.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.18.tid @@ -5,6 +5,7 @@ released: 20181206090053690 tags: ReleaseNotes title: Release 5.1.18 type: text/vnd.tiddlywiki +description: Global keyboard shortcuts, HTTP server improvements, support for splash screens, `~` filter run prefix, external JS support //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.17...v5.1.18]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.19.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.19.tid index 942dea49c..2e6f12baa 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.19.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.19.tid @@ -5,6 +5,7 @@ released: 20181220163418974 tags: ReleaseNotes title: Release 5.1.19 type: text/vnd.tiddlywiki +description: Bug fix release for v5.1.18 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.18...v5.1.19]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.2.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.2.tid index 18c5c8f7a..71bc7c332 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.2.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.2.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.2 type: text/vnd.tiddlywiki released: 20140927162659979 +description: Minor fixes //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.1...v5.1.2]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.20.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.20.tid index a56247222..513f4f946 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.20.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.20.tid @@ -5,6 +5,7 @@ released: 20190809141328809 tags: ReleaseNotes title: Release 5.1.20 type: text/vnd.tiddlywiki +description: New conditional, mathematics and string operators, GitHub Saver, save wiki folder command, [[Innerwiki Plugin]] //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.19...v5.1.20]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.21.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.21.tid index 1511c6dd5..c099b5411 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.21.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.21.tid @@ -5,6 +5,7 @@ released: 20190910152313608 tags: ReleaseNotes title: Release 5.1.21 type: text/vnd.tiddlywiki +description: Bug fix release for v5.1.20 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.20...v5.1.21]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.22.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.22.tid index 9805c3f38..813aed85b 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.22.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.22.tid @@ -5,6 +5,7 @@ released: 20200415160825341 tags: ReleaseNotes title: Release 5.1.22 type: text/vnd.tiddlywiki +description: Dynamic plugin loading, compare operator, new plugins: Menubar, Freelinks, Dynannotate, Share //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.21...v5.1.22]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.23.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.23.tid index 8427d97ab..c12a3b4db 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.23.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.23.tid @@ -5,6 +5,7 @@ released: 20201224132933812 tags: ReleaseNotes title: Release 5.1.23 type: text/vnd.tiddlywiki +description: Switchable page templates, EventCatcherWidget, Rename during import, many plugin and filter improvements //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.22...v5.1.23]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.3.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.3.tid index 8958a21ab..d7196c284 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.3.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.3.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.3 type: text/vnd.tiddlywiki released: 20141020171015200 +description: Journals, ActionWidgets, <<.olink addprefix>> and <<.olink addsuffix>> operators, "includeWikis" //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.2...v5.1.3]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.4.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.4.tid index 68b241721..09d8572a5 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.4.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.4.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.4 type: text/vnd.tiddlywiki released: 20141022155524581 +description: Dragging links into text boxes, coloured errors and warnings under Node.js //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.3...v5.1.4]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.5.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.5.tid index 4d19b0be1..5177bfa1c 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.5.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.5.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.5 type: text/vnd.tiddlywiki released: 20141126153016142 +description: Export button, more ActionWidgets, Danish and Greek translations //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.4...v5.1.5]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.6.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.6.tid index ba4e04d5b..7bf74d8b3 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.6.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.6.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.6 type: text/vnd.tiddlywiki released: 20141219155007260 +description: Minor bug fix release for v5.1.5 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.5...v5.1.6]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.7.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.7.tid index b19a60521..1525a0171 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.7.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.7.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.7 type: text/vnd.tiddlywiki released: 20141219215007260 +description: Hot fix release for v5.1.7 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.6...v5.1.7]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.8.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.8.tid index ec43827aa..bf2ad97d5 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.8.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.8.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.8 type: text/vnd.tiddlywiki released: 2015041716307227 +description: Plugin library, Railroad Plugin, sticky titles, 7 new translations //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.7...v5.1.8]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.9.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.9.tid index 8ab977572..6c98838dd 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.1.9.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.1.9.tid @@ -5,6 +5,7 @@ tags: ReleaseNotes title: Release 5.1.9 type: text/vnd.tiddlywiki released: 20150703153725652 +description: Fluid-fixed layout, vars widget, open in new window \define custom-colour-picker(tiddler,colour) <$edit-text tiddler="""$tiddler$""" index="""$colour$""" type="color" tag="input"/> diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.0.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.0.tid index 369a31f59..2d3909022 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.0.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.0.tid @@ -5,6 +5,7 @@ released: 20211003151502543 tags: ReleaseNotes title: Release 5.2.0 type: text/vnd.tiddlywiki +description: JSON store area, nestable macros, counter attribute for ListWidget, MessageCatcherWidget //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.1.23...v5.2.0]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid index b0894362c..40d33f59d 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.1.tid @@ -5,6 +5,7 @@ released: 20211208115833846 tags: ReleaseNotes title: Release 5.2.1 type: text/vnd.tiddlywiki +description: Filter cascades, LetWidget, trigonometric operators //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.0...v5.2.1]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.2.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.2.tid index 914a629ce..d89193044 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.2.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.2.tid @@ -5,6 +5,7 @@ released: 20220325130817150 tags: ReleaseNotes title: Release 5.2.2 type: text/vnd.tiddlywiki +description: Minor bug fix release //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.1...v5.2.2]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.3.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.3.tid index 7aeb4fcbd..a810603be 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.3.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.3.tid @@ -5,6 +5,7 @@ released: 20220802122551819 tags: ReleaseNotes title: Release 5.2.3 type: text/vnd.tiddlywiki +description: Minor fixes and improvements //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.2...v5.2.3]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid index 46a2ea4df..461a528c8 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.4.tid @@ -5,6 +5,7 @@ released: 20221213163110439 tags: ReleaseNotes title: Release 5.2.4 type: text/vnd.tiddlywiki +description: Hot fixes for v5.2.3, Twitter archivist plugin, GenesisWidget, JSON read operators, nested macro definitions //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.3...v5.2.4]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.5.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.5.tid index 4ada9efa4..72ee38c34 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.5.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.5.tid @@ -5,6 +5,7 @@ released: 20221219184500440 tags: ReleaseNotes title: Release 5.2.5 type: text/vnd.tiddlywiki +description: Hot fix release for v5.2.4 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.4...v5.2.5]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid index 575d9d47b..008b96225 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.6.tid @@ -5,6 +5,7 @@ released: 20230320184352916 tags: ReleaseNotes title: Release 5.2.6 type: text/vnd.tiddlywiki +description: Markdown improvements, indentable pragmas, accessible save wiki button //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.5...v5.2.6]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid index 62a6b5264..af175912f 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.2.7.tid @@ -5,6 +5,7 @@ released: 20230326083239710 tags: ReleaseNotes title: Release 5.2.7 type: text/vnd.tiddlywiki +description: Bug fix release for v5.2.6 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.6...v5.2.7]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.0.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.3.0.tid index 48e4d7490..68e3263ba 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.0.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.3.0.tid @@ -5,6 +5,7 @@ released: 20230701123439630 tags: ReleaseNotes title: Release 5.3.0 type: text/vnd.tiddlywiki +description: Parameterised transclusions, procedures, functions, custom widgets //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.2.7...v5.3.0]]// diff --git a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.1.tid b/editions/tw5.com/tiddlers/releasenotes/Release 5.3.1.tid index b4c326125..522bc08be 100644 --- a/editions/tw5.com/tiddlers/releasenotes/Release 5.3.1.tid +++ b/editions/tw5.com/tiddlers/releasenotes/Release 5.3.1.tid @@ -5,6 +5,7 @@ released: 20230820112855583 tags: ReleaseNotes title: Release 5.3.1 type: text/vnd.tiddlywiki +description: Bug fix release for v5.3.0 //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.3.0...v5.3.1]]// From 774058912d50682b16650a527eca176d6ba78f89 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Mon, 9 Oct 2023 17:12:22 +0100 Subject: [PATCH 24/33] Update release note --- .../prerelease/tiddlers/Release 5.3.2.tid | 54 ++++++++++++------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/editions/prerelease/tiddlers/Release 5.3.2.tid b/editions/prerelease/tiddlers/Release 5.3.2.tid index ce4f218c5..9dddb2916 100644 --- a/editions/prerelease/tiddlers/Release 5.3.2.tid +++ b/editions/prerelease/tiddlers/Release 5.3.2.tid @@ -4,6 +4,7 @@ modified: 20230820114855583 tags: ReleaseNotes title: Release 5.3.2 type: text/vnd.tiddlywiki +description: Under development //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.3.1...master]]// @@ -11,27 +12,50 @@ type: text/vnd.tiddlywiki Improvements to the following translations: -* +* Chinese +* Polish +* Spanish + +! Plugin Improvements + +* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/1be8f0a9336952d4745d2bd4f2327e353580a272">> comments plugin to use predefined palette colours ! Widget Improvements * +! Usability Improvements + +* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/pull/7747">> editor preview button to automatically focus the editor +* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7764">> file type names in the export menu + ! Hackability Improvements -* +* <<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7737">> an automatic build of the external core TiddlyWiki at https://tiddlywiki.com/empty-external-core.html +* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7690">> the default page layout to better support CSS grid and flexbox layouts ! Bug Fixes -* +* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/issues/7665">> `{{}}` generating a recursion error +* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7758">> ordering of Vanilla stylesheets +* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/commit/fa9bfa07a095548eb2f8339b0b1b816d2e6794ef">> missing closing tag in tag-pill-inner macro +* <<.link-badge-removed "https://github.com/Jermolene/TiddlyWiki5/issues/7732">> invalid "type" attribute from textarea elements generated by the EditTextWidget +* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7749">> editor "type" dropdown state tiddlers +* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7712">> handling of "counter-last" variable when appending items with the ListWidget +* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/6088">> upgrade download link in Firefox ! Node.js Improvements * +! Performance Improvements + +* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7702">> performance of predefined patterns with [[all Operator]] +* <<.link-badge-updated "https://github.com/Jermolene/TiddlyWiki5/issues/7671">> favicon format to PNG + ! Developer Improvements -* +* <<.link-badge-improved "https://github.com/Jermolene/TiddlyWiki5/pull/7751">> global hook handling to support removing hooks ! Acknowledgements @@ -39,22 +63,16 @@ Improvements to the following translations: <<.contributors """ AnthonyMuscio -btheado -catter-fly -cmo-pomerium -CrossEye -flibbles -hffqyd -lilscribby +BramChen +BuckarooBanzay +BurningTreeC +EvidentlyCube +joebordes +kookma linonetwo -Marxsal mateuszwilczek -pille1842 pmario rmunn -saqimtiaz -stevesunypoly -TiddlyTweeter -twMat -yaisog +simonbaird +T1mL3arn """>> From 7726982d71e783c26f6af5903b0ccd4a0c92d0e1 Mon Sep 17 00:00:00 2001 From: Maurycy Zarzycki Date: Wed, 11 Oct 2023 22:07:49 +0200 Subject: [PATCH 25/33] Polish Translations 2023-10-11 (#7779) * Add translations introduced in 5bb81554229b7cfde39a3c4ca216f92b585b30df * Add translations introduced in d17525ec8e3a5e3b93e8410cb09f6707ef657b21 --- languages/pl-PL/Exporters.multids | 2 +- languages/pl-PL/Help/savewikifolder.tid | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/languages/pl-PL/Exporters.multids b/languages/pl-PL/Exporters.multids index 5a7d965c1..38f4e0427 100644 --- a/languages/pl-PL/Exporters.multids +++ b/languages/pl-PL/Exporters.multids @@ -3,5 +3,5 @@ title: $:/language/Exporters/ StaticRiver: Statyczny HTML JsonFile: Plik JSON CsvFile: Plik CSV -TidFile: Plik ".tid" +TidFile: Plik tekstowy TID diff --git a/languages/pl-PL/Help/savewikifolder.tid b/languages/pl-PL/Help/savewikifolder.tid index c5edba093..52e7db6ac 100644 --- a/languages/pl-PL/Help/savewikifolder.tid +++ b/languages/pl-PL/Help/savewikifolder.tid @@ -19,6 +19,8 @@ Wspierane argumenty: ** `yes` rozdzieli wtyczki na osobne pliki tiddlerów i zapisze je do podfolderu z wtyczkami ** `no` każda wtyczka będzie zapisana jako jeden zbiorczy plik w formacie JSON w folderze z tiddlerami +Obie wartości dla `explodePlugins` stworzą taką samą wiki. Różnica będzie jedynie w sposobie rozlokowania wtyczek. + Typowe zastosowanie to konwersja pliku TiddlyWiki w formie pliku HTML do formatu folderu: ``` @@ -29,4 +31,4 @@ Zapisanie wtyczek jako zwykłych tiddlerów: ``` tiddlywiki --load ./mojawiki.html --savewikifolder ./folderwiki explodePlugins=no -``` \ No newline at end of file +``` From 4c9c85aec50ff5b9c0dc4f3f29b76d361ed5cba1 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 14 Oct 2023 09:31:11 +0100 Subject: [PATCH 26/33] Add support for list-template and list-empty widgets for specifying list widget templates (#7784) Cherry picked from #7710 --- core/modules/widgets/list.js | 58 ++++++++++++++++--- .../list-widget/WithExplicitTemplates.tid | 29 ++++++++++ .../WithExplicitTemplatesInBlockMode.tid | 32 ++++++++++ ...xplicitTemplatesOverriddenByAttributes.tid | 33 +++++++++++ .../tests/data/list-widget/WithLimit.tid | 25 ++++++++ .../data/list-widget/WithMissingTemplate.tid | 26 +++++++++ .../tw5.com/tiddlers/widgets/ListWidget.tid | 5 +- 7 files changed, 198 insertions(+), 10 deletions(-) create mode 100644 editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplates.tid create mode 100644 editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesInBlockMode.tid create mode 100644 editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesOverriddenByAttributes.tid create mode 100644 editions/test/tiddlers/tests/data/list-widget/WithLimit.tid create mode 100644 editions/test/tiddlers/tests/data/list-widget/WithMissingTemplate.tid diff --git a/core/modules/widgets/list.js b/core/modules/widgets/list.js index 75592e669..39c7e1b84 100755 --- a/core/modules/widgets/list.js +++ b/core/modules/widgets/list.js @@ -60,6 +60,7 @@ ListWidget.prototype.render = function(parent,nextSibling) { Compute the internal state of the widget */ ListWidget.prototype.execute = function() { + var self = this; // Get our attributes this.template = this.getAttribute("template"); this.editTemplate = this.getAttribute("editTemplate"); @@ -67,6 +68,8 @@ ListWidget.prototype.execute = function() { this.counterName = this.getAttribute("counter"); this.storyViewName = this.getAttribute("storyview"); this.historyTitle = this.getAttribute("history"); + // Look for <$list-template> and <$list-empty> widgets as immediate child widgets + this.findExplicitTemplates(); // Compose the list elements this.list = this.getTiddlerList(); var members = [], @@ -85,18 +88,48 @@ ListWidget.prototype.execute = function() { this.history = []; }; +ListWidget.prototype.findExplicitTemplates = function() { + var self = this; + this.explicitListTemplate = null; + this.explicitEmptyTemplate = null; + var searchChildren = function(childNodes) { + $tw.utils.each(childNodes,function(node) { + if(node.type === "list-template") { + self.explicitListTemplate = node.children; + } else if(node.type === "list-empty") { + self.explicitEmptyTemplate = node.children; + } else if(node.type === "element" && node.tag === "p") { + searchChildren(node.children); + } + }); + }; + searchChildren(this.parseTreeNode.children); +} + ListWidget.prototype.getTiddlerList = function() { + var limit = $tw.utils.getInt(this.getAttribute("limit",""),undefined); var defaultFilter = "[!is[system]sort[title]]"; - return this.wiki.filterTiddlers(this.getAttribute("filter",defaultFilter),this); + var results = this.wiki.filterTiddlers(this.getAttribute("filter",defaultFilter),this); + if(limit !== undefined) { + if(limit >= 0) { + results = results.slice(0,limit); + } else { + results = results.slice(limit); + } + } + return results; }; ListWidget.prototype.getEmptyMessage = function() { var parser, - emptyMessage = this.getAttribute("emptyMessage",""); - // this.wiki.parseText() calls - // new Parser(..), which should only be done, if needed, because it's heavy! - if (emptyMessage === "") { - return []; + emptyMessage = this.getAttribute("emptyMessage"); + // If emptyMessage attribute is not present or empty then look for an explicit empty template + if(!emptyMessage) { + if(this.explicitEmptyTemplate) { + return this.explicitEmptyTemplate; + } else { + return []; + } } parser = this.wiki.parseText("text/vnd.tiddlywiki",emptyMessage,{parseAsInline: true}); if(parser) { @@ -122,12 +155,19 @@ ListWidget.prototype.makeItemTemplate = function(title,index) { if(template) { templateTree = [{type: "transclude", attributes: {tiddler: {type: "string", value: template}}}]; } else { + // Check for child nodes of the list widget if(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) { - templateTree = this.parseTreeNode.children; - } else { + // Check for a <$list-item> widget + if(this.explicitListTemplate) { + templateTree = this.explicitListTemplate; + } else if (!this.explicitEmptyTemplate) { + templateTree = this.parseTreeNode.children; + } + } + if(!templateTree) { // Default template is a link to the title templateTree = [{type: "element", tag: this.parseTreeNode.isBlock ? "div" : "span", children: [{type: "link", attributes: {to: {type: "string", value: title}}, children: [ - {type: "text", text: title} + {type: "text", text: title} ]}]}]; } } diff --git a/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplates.tid b/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplates.tid new file mode 100644 index 000000000..aad322f54 --- /dev/null +++ b/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplates.tid @@ -0,0 +1,29 @@ +title: ListWidget/WithExplicitTemplates +description: List widget with explicit templates +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + ++ +title: Output + +\whitespace trim + +\procedure test(filter) +<$list filter=<>> + <$list-template> + <$text text=<>/> + + <$list-empty> + None! + + +\end + +<> + +<> + ++ +title: ExpectedResult + +

123

None!

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesInBlockMode.tid b/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesInBlockMode.tid new file mode 100644 index 000000000..8e61c2e24 --- /dev/null +++ b/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesInBlockMode.tid @@ -0,0 +1,32 @@ +title: ListWidget/WithExplicitTemplatesInBlockMode +description: List widget with explicit templates in block mode +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + ++ +title: Output + +\whitespace trim + +\procedure test(filter) +<$list filter=<>> + + <$list-template> + <$text text=<>/> + + + <$list-empty> + None! + + + +\end + +<> + +<> + ++ +title: ExpectedResult + +123None! \ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesOverriddenByAttributes.tid b/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesOverriddenByAttributes.tid new file mode 100644 index 000000000..0ce5780af --- /dev/null +++ b/editions/test/tiddlers/tests/data/list-widget/WithExplicitTemplatesOverriddenByAttributes.tid @@ -0,0 +1,33 @@ +title: ListWidget/WithExplicitTemplatesOverriddenByAttributes +description: List widget with explicit templates +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + ++ +title: Output + +\whitespace trim + +\procedure test(filter) +<$list filter=<> emptyMessage="Zero" template="Template"> + <$list-template> + <$text text=<>/> + + <$list-empty> + None! + + +\end + +<> + +<> + ++ +title: Template + +<$text text=<>/><$text text=<>/> ++ +title: ExpectedResult + +

112233

Zero

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/list-widget/WithLimit.tid b/editions/test/tiddlers/tests/data/list-widget/WithLimit.tid new file mode 100644 index 000000000..2f630a1dc --- /dev/null +++ b/editions/test/tiddlers/tests/data/list-widget/WithLimit.tid @@ -0,0 +1,25 @@ +title: ListWidget/WithLimit +description: List widget with limit +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + ++ +title: Output + +Zero: <$list filter="1 2 3 4" limit="0" template="Template"/> + +One: <$list filter="1 2 3 4" limit="1" template="Template"/> + +Two: <$list filter="1 2 3 4" limit="2" template="Template"/> + +Minus Two: <$list filter="1 2 3 4" limit="-2" template="Template"/> + ++ +title: Template + +<$text text=<>/> ++ +title: ExpectedResult + +

Zero:

One: 1

Two: 12

Minus Two: 34 +

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/list-widget/WithMissingTemplate.tid b/editions/test/tiddlers/tests/data/list-widget/WithMissingTemplate.tid new file mode 100644 index 000000000..40fb2f07b --- /dev/null +++ b/editions/test/tiddlers/tests/data/list-widget/WithMissingTemplate.tid @@ -0,0 +1,26 @@ +title: ListWidget/WithMissingTemplate +description: List widget with explicit templates +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + ++ +title: Output + +\whitespace trim + +\procedure test(filter) +<$list filter=<>> + <$list-empty> + None! + + +\end + +<> + +<> + ++ +title: ExpectedResult + +

123

None!

\ No newline at end of file diff --git a/editions/tw5.com/tiddlers/widgets/ListWidget.tid b/editions/tw5.com/tiddlers/widgets/ListWidget.tid index b36d0f3bf..592185d36 100644 --- a/editions/tw5.com/tiddlers/widgets/ListWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/ListWidget.tid @@ -1,6 +1,6 @@ caption: list created: 20131024141900000 -modified: 20230725203601441 +modified: 20230831182949930 tags: Widgets Lists title: ListWidget type: text/vnd.tiddlywiki @@ -70,6 +70,8 @@ See GroupedLists for how to generate nested and grouped lists using the ListWidg The content of the `<$list>` widget is an optional template to use for rendering each tiddler in the list. +<<.from-version "5.3.2">> If the widgets `<$list-template>` or `<$list-empty>` are found as immediate children of the <<.wid "ListWidget">> widget then the content of those widgets are used as the list item template and/or the empty template. Note that the <<.attr "emptyMessage">> and <<.attr "template">> attributes take precedence if they are present. + The action of the list widget depends on the results of the filter combined with several options for specifying the template: * If the filter evaluates to an empty list, the text of the ''emptyMessage'' attribute is rendered, and all other templates are ignored @@ -79,6 +81,7 @@ The action of the list widget depends on the results of the filter combined with |!Attribute |!Description | |filter |The [[tiddler filter|Filters]] to display | +|limit |<<.from-version "5.3.2">> Optional numeric limit for the number of results that are returned. Negative values will return the results from the end of the list | |template |The title of a template tiddler for transcluding each tiddler in the list. When no template is specified, the body of the ListWidget serves as the item template. With no body, a simple link to the tiddler is returned. | |editTemplate |An alternative template to use for [[DraftTiddlers|DraftMechanism]] in edit mode | |variable |The name for a [[variable|Variables]] in which the title of each listed tiddler is stored. Defaults to ''currentTiddler'' | From b7562f0c7b08b81a7965b37c57d496846e1660b5 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 14 Oct 2023 09:41:21 +0100 Subject: [PATCH 27/33] Conditional Shortcut Syntax (#7710) * Initial Commit * Update docs * Add support for elseif blocks * Another test * WIP * Change from `{%if%}` to `<%if%>` See discussion here - https://talk.tiddlywiki.org/t/proposed-if-widget/7882/64 * Don't use the widget body as the template if a list-empty widget is present See discussion here - https://github.com/Jermolene/TiddlyWiki5/pull/7710#issuecomment-1717193296 * List widget should search recursively for list-template and list-empty * Allow block mode content within an if/then/else clause * Update docs * Add from-version tag to docs --- .../parsers/wikiparser/rules/conditional.js | 120 ++++++++++++++++++ core/modules/parsers/wikiparser/wikiparser.js | 37 ++++-- .../tests/data/conditionals/Basic.tid | 26 ++++ .../tests/data/conditionals/BlockMode.tid | 37 ++++++ .../tiddlers/tests/data/conditionals/Else.tid | 26 ++++ .../tests/data/conditionals/Elseif.tid | 32 +++++ .../tests/data/conditionals/MissingEndIf.tid | 26 ++++ .../data/conditionals/MultipleResults.tid | 12 ++ .../tests/data/conditionals/Nested.tid | 38 ++++++ .../tests/data/conditionals/NestedElseif.tid | 60 +++++++++ .../wikitext/Conditional Shortcut Syntax.tid | 61 +++++++++ 11 files changed, 467 insertions(+), 8 deletions(-) create mode 100644 core/modules/parsers/wikiparser/rules/conditional.js create mode 100644 editions/test/tiddlers/tests/data/conditionals/Basic.tid create mode 100644 editions/test/tiddlers/tests/data/conditionals/BlockMode.tid create mode 100644 editions/test/tiddlers/tests/data/conditionals/Else.tid create mode 100644 editions/test/tiddlers/tests/data/conditionals/Elseif.tid create mode 100644 editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid create mode 100644 editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid create mode 100644 editions/test/tiddlers/tests/data/conditionals/Nested.tid create mode 100644 editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid create mode 100644 editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid diff --git a/core/modules/parsers/wikiparser/rules/conditional.js b/core/modules/parsers/wikiparser/rules/conditional.js new file mode 100644 index 000000000..23940fd88 --- /dev/null +++ b/core/modules/parsers/wikiparser/rules/conditional.js @@ -0,0 +1,120 @@ +/*\ +title: $:/core/modules/parsers/wikiparser/rules/conditional.js +type: application/javascript +module-type: wikirule + +Conditional shortcut syntax + +``` +This is a <% if [{something}] %>Elephant<% elseif [{else}] %>Pelican<% else %>Crocodile<% endif %> +``` + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +exports.name = "conditional"; +exports.types = {inline: true, block: true}; + +exports.init = function(parser) { + this.parser = parser; + // Regexp to match + this.matchRegExp = /\<\%\s*if\s+/mg; + this.terminateIfRegExp = /\%\>/mg; +}; + +exports.findNextMatch = function(startPos) { + // Look for the next <% if shortcut + this.matchRegExp.lastIndex = startPos; + this.match = this.matchRegExp.exec(this.parser.source); + // If not found then return no match + if(!this.match) { + return undefined; + } + // Check for the next %> + this.terminateIfRegExp.lastIndex = this.match.index; + this.terminateIfMatch = this.terminateIfRegExp.exec(this.parser.source); + // If not found then return no match + if(!this.terminateIfMatch) { + return undefined; + } + // Return the position at which the construction was found + return this.match.index; +}; + +/* +Parse the most recent match +*/ +exports.parse = function() { + // Get the filter condition + var filterCondition = this.parser.source.substring(this.match.index + this.match[0].length,this.terminateIfMatch.index); + // Advance the parser position to past the %> + this.parser.pos = this.terminateIfMatch.index + this.terminateIfMatch[0].length; + // Parse the if clause + return this.parseIfClause(filterCondition); +}; + +exports.parseIfClause = function(filterCondition) { + // Create the list widget + var listWidget = { + type: "list", + tag: "$list", + isBlock: this.is.block, + children: [ + { + type: "list-template", + tag: "$list-template" + }, + { + type: "list-empty", + tag: "$list-empty" + } + ] + }; + $tw.utils.addAttributeToParseTreeNode(listWidget,"filter",filterCondition); + $tw.utils.addAttributeToParseTreeNode(listWidget,"variable","condition"); + $tw.utils.addAttributeToParseTreeNode(listWidget,"limit","1"); + // Check for an immediately following double linebreak + var hasLineBreak = !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/g); + // Parse the body looking for else or endif + var reEndString = "\\<\\%\\s*(endif)\\s*\\%\\>|\\<\\%\\s*(else)\\s*\\%\\>|\\<\\%\\s*(elseif)\\s+([\\s\\S]+?)\\%\\>", + ex; + if(hasLineBreak) { + ex = this.parser.parseBlocksTerminatedExtended(reEndString); + } else { + var reEnd = new RegExp(reEndString,"mg"); + ex = this.parser.parseInlineRunTerminatedExtended(reEnd,{eatTerminator: true}); + } + // Put the body into the list template + listWidget.children[0].children = ex.tree; + // Check for an else or elseif + if(ex.match) { + if(ex.match[1] === "endif") { + // Nothing to do if we just found an endif + } else if(ex.match[2] === "else") { + // Check for an immediately following double linebreak + hasLineBreak = !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\S\n\r]*\r?\n(?:[^\S\n\r]*\r?\n|$))/g); + // If we found an else then we need to parse the body looking for the endif + var reEndString = "\\<\\%\\s*(endif)\\s*\\%\\>", + ex; + if(hasLineBreak) { + ex = this.parser.parseBlocksTerminatedExtended(reEndString); + } else { + var reEnd = new RegExp(reEndString,"mg"); + ex = this.parser.parseInlineRunTerminatedExtended(reEnd,{eatTerminator: true}); + } + // Put the parsed content inside the list empty template + listWidget.children[1].children = ex.tree; + } else if(ex.match[3] === "elseif") { + // Parse the elseif clause by reusing this parser, passing the new filter condition + listWidget.children[1].children = this.parseIfClause(ex.match[4]); + } + } + // Return the parse tree node + return [listWidget]; +}; + +})(); diff --git a/core/modules/parsers/wikiparser/wikiparser.js b/core/modules/parsers/wikiparser/wikiparser.js index bb457b205..293b7d3d3 100644 --- a/core/modules/parsers/wikiparser/wikiparser.js +++ b/core/modules/parsers/wikiparser/wikiparser.js @@ -223,7 +223,7 @@ Parse a block from the current position terminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis */ WikiParser.prototype.parseBlock = function(terminatorRegExpString) { - var terminatorRegExp = terminatorRegExpString ? new RegExp("(" + terminatorRegExpString + "|\\r?\\n\\r?\\n)","mg") : /(\r?\n\r?\n)/mg; + var terminatorRegExp = terminatorRegExpString ? new RegExp(terminatorRegExpString + "|\\r?\\n\\r?\\n","mg") : /(\r?\n\r?\n)/mg; this.skipWhitespace(); if(this.pos >= this.sourceLength) { return []; @@ -264,11 +264,21 @@ WikiParser.prototype.parseBlocksUnterminated = function() { }; /* -Parse blocks of text until a terminating regexp is encountered +Parse blocks of text until a terminating regexp is encountered. Wrapper for parseBlocksTerminatedExtended that just returns the parse tree */ WikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) { - var terminatorRegExp = new RegExp("(" + terminatorRegExpString + ")","mg"), - tree = []; + var ex = this.parseBlocksTerminatedExtended(terminatorRegExpString); + return ex.tree; +}; + +/* +Parse blocks of text until a terminating regexp is encountered +*/ +WikiParser.prototype.parseBlocksTerminatedExtended = function(terminatorRegExpString) { + var terminatorRegExp = new RegExp(terminatorRegExpString,"mg"), + result = { + tree: [] + }; // Skip any whitespace this.skipWhitespace(); // Check if we've got the end marker @@ -277,7 +287,7 @@ WikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) { // Parse the text into blocks while(this.pos < this.sourceLength && !(match && match.index === this.pos)) { var blocks = this.parseBlock(terminatorRegExpString); - tree.push.apply(tree,blocks); + result.tree.push.apply(result.tree,blocks); // Skip any whitespace this.skipWhitespace(); // Check if we've got the end marker @@ -286,8 +296,9 @@ WikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) { } if(match && match.index === this.pos) { this.pos = match.index + match[0].length; + result.match = match; } - return tree; + return result; }; /* @@ -330,6 +341,11 @@ WikiParser.prototype.parseInlineRunUnterminated = function(options) { }; WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) { + var ex = this.parseInlineRunTerminatedExtended(terminatorRegExp,options); + return ex.tree; +}; + +WikiParser.prototype.parseInlineRunTerminatedExtended = function(terminatorRegExp,options) { options = options || {}; var tree = []; // Find the next occurrence of the terminator @@ -349,7 +365,10 @@ WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,option if(options.eatTerminator) { this.pos += terminatorMatch[0].length; } - return tree; + return { + match: terminatorMatch, + tree: tree + }; } } // Process any inline rule, along with the text preceding it @@ -373,7 +392,9 @@ WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,option this.pushTextWidget(tree,this.source.substr(this.pos),this.pos,this.sourceLength); } this.pos = this.sourceLength; - return tree; + return { + tree: tree + }; }; /* diff --git a/editions/test/tiddlers/tests/data/conditionals/Basic.tid b/editions/test/tiddlers/tests/data/conditionals/Basic.tid new file mode 100644 index 000000000..ff2d2df4d --- /dev/null +++ b/editions/test/tiddlers/tests/data/conditionals/Basic.tid @@ -0,0 +1,26 @@ +title: Conditionals/Basic +description: Basic conditional shortcut syntax +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Text + +This is a <% if [match[one]] %>Elephant<% endif %>, I think. ++ +title: Output + +<$let something="one"> +{{Text}} + + +<$let something="two"> +{{Text}} + ++ +title: ExpectedResult + +

+This is a Elephant, I think. +

+This is a , I think. +

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/conditionals/BlockMode.tid b/editions/test/tiddlers/tests/data/conditionals/BlockMode.tid new file mode 100644 index 000000000..45233baa4 --- /dev/null +++ b/editions/test/tiddlers/tests/data/conditionals/BlockMode.tid @@ -0,0 +1,37 @@ +title: Conditionals/BlockMode +description: Basic conditional shortcut syntax in block mode +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +\procedure test(animal) +<% if [match[Elephant]] %> + +! It is an elephant + +<% else %> + +<% if [match[Giraffe]] %> + +! It is a giraffe + +<% else %> + +! It is completely unknown + +<% endif %> + +<% endif %> + +\end + +<> + +<> + +<> ++ +title: ExpectedResult + +

It is a giraffe

It is an elephant

It is completely unknown

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/conditionals/Else.tid b/editions/test/tiddlers/tests/data/conditionals/Else.tid new file mode 100644 index 000000000..7bc32b34e --- /dev/null +++ b/editions/test/tiddlers/tests/data/conditionals/Else.tid @@ -0,0 +1,26 @@ +title: Conditionals/Else +description: Else conditional shortcut syntax +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Text + +This is a <% if [match[one]] %>Elephant<% else %>Crocodile<% endif %>, I think. ++ +title: Output + +<$let something="one"> +{{Text}} + + +<$let something="two"> +{{Text}} + ++ +title: ExpectedResult + +

+This is a Elephant, I think. +

+This is a Crocodile, I think. +

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/conditionals/Elseif.tid b/editions/test/tiddlers/tests/data/conditionals/Elseif.tid new file mode 100644 index 000000000..d37f3380c --- /dev/null +++ b/editions/test/tiddlers/tests/data/conditionals/Elseif.tid @@ -0,0 +1,32 @@ +title: Conditionals/Elseif +description: Elseif conditional shortcut syntax +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Text + +This is a <% if [match[one]] %>Elephant<% elseif [match[two]] %>Antelope<% else %>Crocodile<% endif %>, I think. ++ +title: Output + +<$let something="one"> +{{Text}} + + +<$let something="two"> +{{Text}} + + +<$let something="three"> +{{Text}} + ++ +title: ExpectedResult + +

+This is a Elephant, I think. +

+This is a Antelope, I think. +

+This is a Crocodile, I think. +

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid b/editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid new file mode 100644 index 000000000..cacaf9869 --- /dev/null +++ b/editions/test/tiddlers/tests/data/conditionals/MissingEndIf.tid @@ -0,0 +1,26 @@ +title: Conditionals/MissingEndif +description: Conditional shortcut syntax with missing endif +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Text + +This is a <% if [match[one]] %>Elephant ++ +title: Output + +<$let something="one"> +{{Text}} + + +<$let something="two"> +{{Text}} + ++ +title: ExpectedResult + +

+This is a Elephant +

+This is a +

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid b/editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid new file mode 100644 index 000000000..baa966ed5 --- /dev/null +++ b/editions/test/tiddlers/tests/data/conditionals/MultipleResults.tid @@ -0,0 +1,12 @@ +title: Conditionals/MultipleResults +description: Check that multiple results from the filter are ignored +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +This is a <% if 1 2 3 4 5 6 %>Elephant<% endif %>, I think. ++ +title: ExpectedResult + +

This is a Elephant, I think.

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/conditionals/Nested.tid b/editions/test/tiddlers/tests/data/conditionals/Nested.tid new file mode 100644 index 000000000..dffa791fc --- /dev/null +++ b/editions/test/tiddlers/tests/data/conditionals/Nested.tid @@ -0,0 +1,38 @@ +title: Conditionals/Nested +description: Nested conditional shortcut syntax +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +\procedure test(animal) +<% if [match[Elephant]] %> +It is an elephant +<% else %> +<% if [match[Giraffe]] %> +It is a giraffe +<% else %> +It is completely unknown +<% endif %> +<% endif %> +\end + +<> + +<> + +<> + ++ +title: ExpectedResult + + + +It is a giraffe + + +It is an elephant + + +It is completely unknown + diff --git a/editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid b/editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid new file mode 100644 index 000000000..6fba8cac8 --- /dev/null +++ b/editions/test/tiddlers/tests/data/conditionals/NestedElseif.tid @@ -0,0 +1,60 @@ +title: Conditionals/NestedElseif +description: Nested elseif conditional shortcut syntax +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Text + +\whitespace trim +This is a + <% if [match[one]] %> + <% if [match[one]] %> + Indian + <% elseif [match[two]] %> + African + <% else %> + Unknown + <% endif %> + Elephant + <% elseif [match[two]] %> + Antelope + <% else %> + Crocodile + <% endif %> +, I think. ++ +title: Output + +<$let something="one" another="one"> +{{Text}} + + +<$let something="one" another="two"> +{{Text}} + + +<$let something="one" another="three"> +{{Text}} + + +<$let something="two"> +{{Text}} + + +<$let something="three"> +{{Text}} + ++ +title: ExpectedResult + +

+This is a Indian Elephant, I think. +

+This is a African Elephant, I think. +

+This is a Unknown Elephant, I think. +

+This is a Antelope, I think. +

+This is a Crocodile, I think. +

\ No newline at end of file diff --git a/editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid b/editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid new file mode 100644 index 000000000..6cdfb1517 --- /dev/null +++ b/editions/tw5.com/tiddlers/wikitext/Conditional Shortcut Syntax.tid @@ -0,0 +1,61 @@ +created: 20230901122740573 +modified: 20230901123102263 +tags: WikiText +title: Conditional Shortcut Syntax +type: text/vnd.tiddlywiki + +<<.from-version "5.3.2">> The conditional shortcut syntax provides a convenient way to express if-then-else logic within WikiText. It evaluates a filter and considers the condition to be true if there is at least one result (regardless of the value of that result). + +A simple example: + +<$macrocall $name='wikitext-example-without-html' +src='<% if [{$:/$:/info/url/protocol}match[file:]] %> + Loaded from a file URI +<% else %> + Not loaded from a file URI +<% endif %> +'/> + +One or more `<% elseif %>` clauses may be included before the `<% else %>` clause: + +<$macrocall $name='wikitext-example-without-html' +src='<% 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 %> +'/> + +The conditional shortcut syntax can be nested: + +<$macrocall $name='wikitext-example-without-html' +src='\procedure test(animal) +<% if [match[Elephant]] %> + It is an elephant +<% else %> + <% if [match[Giraffe]] %> + It is a giraffe + <% else %> + It is completely unknown + <% endif %> +<% endif %> +\end + +<> + +<> + +<> +'/> + +Notes: + +* Clauses are parsed in inline mode by default. Force block mode parsing by following the opening `<% if %>`, `<% elseif %>` or `<% else %>` with two line breaks +* Within an "if" or "elseif" clause, the variable `condition` contains the value of the first result of evaluating the filter condition +* Widgets and HTML elements must be within a single conditional clause; it is not possible to start an element in one conditional clause and end it in another +* The conditional shortcut syntax cannot contain pragmas such as procedure definitions + From 96b05433517ed15e2e23c72f0cdef6d3e51922e9 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 14 Oct 2023 09:42:34 +0100 Subject: [PATCH 28/33] Add barcode reader widget to qrcode plugin (#7746) * Add barcode reader widget to qrcode plugin * Don't use a fixed ID --- editions/tw5.com/tiddlywiki.info | 3 +- plugins/tiddlywiki/qrcode/barcodereader.js | 90 ++++ plugins/tiddlywiki/qrcode/doc/examples.tid | 3 - plugins/tiddlywiki/qrcode/doc/readme.tid | 13 - plugins/tiddlywiki/qrcode/docs.tid | 3 + .../tiddlywiki/qrcode/docs/barcodereader.tid | 44 ++ .../qrcode/{doc/usage.tid => docs/makeqr.tid} | 8 +- plugins/tiddlywiki/qrcode/examples.tid | 3 + .../{ => examples/make}/MakeContactQR.tid | 2 +- .../{ => examples/make}/MakeGenericQR.tid | 2 +- .../qrcode/{ => examples/make}/MakeWifiQR.tid | 2 +- .../tiddlywiki/qrcode/examples/make/make.tid | 5 + .../qrcode/examples/read/BarCodeReader.tid | 17 + .../tiddlywiki/qrcode/examples/read/read.tid | 5 + .../qrcode/files/html5-qrcode/LICENSE | 201 +++++++++ .../qrcode/files/html5-qrcode/README.md | 398 ++++++++++++++++++ .../files/html5-qrcode/html5-qrcode.min.js | 1 + .../qrcode/files/{ => qrcode}/LICENSE | 0 .../qrcode/files/{ => qrcode}/README.md | 0 .../qrcode/files/{ => qrcode}/qrcode.js | 0 .../tiddlywiki/qrcode/files/tiddlywiki.files | 24 +- plugins/tiddlywiki/qrcode/makeqr.js | 2 +- plugins/tiddlywiki/qrcode/plugin.info | 2 +- plugins/tiddlywiki/qrcode/readme.tid | 15 + 24 files changed, 813 insertions(+), 30 deletions(-) create mode 100644 plugins/tiddlywiki/qrcode/barcodereader.js delete mode 100644 plugins/tiddlywiki/qrcode/doc/examples.tid delete mode 100644 plugins/tiddlywiki/qrcode/doc/readme.tid create mode 100644 plugins/tiddlywiki/qrcode/docs.tid create mode 100644 plugins/tiddlywiki/qrcode/docs/barcodereader.tid rename plugins/tiddlywiki/qrcode/{doc/usage.tid => docs/makeqr.tid} (79%) create mode 100644 plugins/tiddlywiki/qrcode/examples.tid rename plugins/tiddlywiki/qrcode/{ => examples/make}/MakeContactQR.tid (95%) rename plugins/tiddlywiki/qrcode/{ => examples/make}/MakeGenericQR.tid (87%) rename plugins/tiddlywiki/qrcode/{ => examples/make}/MakeWifiQR.tid (95%) create mode 100644 plugins/tiddlywiki/qrcode/examples/make/make.tid create mode 100644 plugins/tiddlywiki/qrcode/examples/read/BarCodeReader.tid create mode 100644 plugins/tiddlywiki/qrcode/examples/read/read.tid create mode 100644 plugins/tiddlywiki/qrcode/files/html5-qrcode/LICENSE create mode 100644 plugins/tiddlywiki/qrcode/files/html5-qrcode/README.md create mode 100644 plugins/tiddlywiki/qrcode/files/html5-qrcode/html5-qrcode.min.js rename plugins/tiddlywiki/qrcode/files/{ => qrcode}/LICENSE (100%) rename plugins/tiddlywiki/qrcode/files/{ => qrcode}/README.md (100%) rename plugins/tiddlywiki/qrcode/files/{ => qrcode}/qrcode.js (100%) create mode 100644 plugins/tiddlywiki/qrcode/readme.tid diff --git a/editions/tw5.com/tiddlywiki.info b/editions/tw5.com/tiddlywiki.info index 30787a42f..2065260bc 100644 --- a/editions/tw5.com/tiddlywiki.info +++ b/editions/tw5.com/tiddlywiki.info @@ -6,7 +6,8 @@ "tiddlywiki/railroad", "tiddlywiki/evernote", "tiddlywiki/internals", - "tiddlywiki/menubar" + "tiddlywiki/menubar", + "tiddlywiki/qrcode" ], "themes": [ "tiddlywiki/vanilla", diff --git a/plugins/tiddlywiki/qrcode/barcodereader.js b/plugins/tiddlywiki/qrcode/barcodereader.js new file mode 100644 index 000000000..79d259254 --- /dev/null +++ b/plugins/tiddlywiki/qrcode/barcodereader.js @@ -0,0 +1,90 @@ +/*\ +title: $:/plugins/tiddlywiki/qrcode/barcodereader.js +type: application/javascript +module-type: widget + +barcodereader widget for reading barcodes + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +var Widget = require("$:/core/modules/widgets/widget.js").widget; + +var nextID = 0; + +var BarCodeReaderWidget = function(parseTreeNode,options) { + this.initialise(parseTreeNode,options); +}; + +/* +Inherit from the base widget class +*/ +BarCodeReaderWidget.prototype = new Widget(); + +/* +Render this widget into the DOM +*/ +BarCodeReaderWidget.prototype.render = function(parent,nextSibling) { + var self = this; + this.parentDomNode = parent; + this.computeAttributes(); + // Make the child widgets + this.makeChildWidgets(); + // Generate an ID for this element + var id = "capture-widget-internal-" + nextID; + nextID += 1; + // Create the DOM node and render children + var domNode = this.document.createElement("div"); + domNode.className = "tc-readcode-widget"; + domNode.setAttribute("width","300px"); + domNode.setAttribute("height","300px"); + domNode.id = id; + parent.insertBefore(domNode,nextSibling); + this.renderChildren(domNode,null); + this.domNodes.push(domNode); + // Setup the qrcode library + if($tw.browser) { + var __Html5QrcodeLibrary__ = require("$:/plugins/tiddlywiki/qrcode/html5-qrcode/html5-qrcode.js").__Html5QrcodeLibrary__; + function onScanSuccess(decodedText, decodedResult) { + self.invokeActionString(self.getAttribute("actionsSuccess",""),self,{},{ + format: decodedResult.result.format.formatName, + text: decodedText + }); + console.log("Scan result",decodedResult,decodedText); + } + function onScanFailure(errorMessage) { + self.invokeActionString(self.getAttribute("actionsFailure",""),self,{},{ + error: errorMessage + }); + console.log("Scan error",errorMessage); + } + var html5QrcodeScanner = new __Html5QrcodeLibrary__.Html5QrcodeScanner( + id, + { + fps: 10, + qrbox: 250 + } + ); + html5QrcodeScanner.render(onScanSuccess,onScanFailure); + } +}; + +/* +Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering +*/ +BarCodeReaderWidget.prototype.refresh = function(changedTiddlers) { + var changedAttributes = this.computeAttributes(), + hasChangedAttributes = $tw.utils.count(changedAttributes) > 0; + if(hasChangedAttributes) { + return this.refreshSelf(); + } + return this.refreshChildren(changedTiddlers) || hasChangedAttributes; +}; + +exports.barcodereader = BarCodeReaderWidget; + +})(); diff --git a/plugins/tiddlywiki/qrcode/doc/examples.tid b/plugins/tiddlywiki/qrcode/doc/examples.tid deleted file mode 100644 index 5bd19afa8..000000000 --- a/plugins/tiddlywiki/qrcode/doc/examples.tid +++ /dev/null @@ -1,3 +0,0 @@ -title: $:/plugins/tiddlywiki/qrcode/examples - -<> \ No newline at end of file diff --git a/plugins/tiddlywiki/qrcode/doc/readme.tid b/plugins/tiddlywiki/qrcode/doc/readme.tid deleted file mode 100644 index 89e2427e6..000000000 --- a/plugins/tiddlywiki/qrcode/doc/readme.tid +++ /dev/null @@ -1,13 +0,0 @@ -title: $:/plugins/tiddlywiki/qrcode/readme - -The QR code plugin provides a macro that enables any text to be rendered as a [[QR code|https://en.wikipedia.org/wiki/QR_code]]. QR codes are a type of 2-dimensional bar code that encodes arbitrary data: text, numbers, links. QR code readers are available or built-in for smartphones, making them a convenient means to transfer information between devices - -The QR code plugin adds the following features to TiddlyWiki: - -* A new [[makeqr Macro]] that renders specified text as a QR code image that can be displayed or printed -* A new toolbar button that can display several QR code renderings of the content of a tiddler: -** Raw content -** Rendered, formatted content -** URL of tiddler - -The QR code plugin is based on the library [[qrcode.js by Zeno Zeng|https://github.com/zenozeng/node-yaqrcode]]. \ No newline at end of file diff --git a/plugins/tiddlywiki/qrcode/docs.tid b/plugins/tiddlywiki/qrcode/docs.tid new file mode 100644 index 000000000..6f7c5d930 --- /dev/null +++ b/plugins/tiddlywiki/qrcode/docs.tid @@ -0,0 +1,3 @@ +title: $:/plugins/tiddlywiki/qrcode/docs + +<> \ No newline at end of file diff --git a/plugins/tiddlywiki/qrcode/docs/barcodereader.tid b/plugins/tiddlywiki/qrcode/docs/barcodereader.tid new file mode 100644 index 000000000..b3f079e52 --- /dev/null +++ b/plugins/tiddlywiki/qrcode/docs/barcodereader.tid @@ -0,0 +1,44 @@ +title: $:/plugins/tiddlywiki/qrcode/docs/barcodereader +tags: $:/tags/QRCodeDocs +caption: barcodereader Widget + +The `<$barcodereader>` widget allows barcodes to be read from the device camera or from an image file. In the case of the camera, a live preview feed is shown to allow the barcode to be framed. + +Note that for security reasons browsers restrict the operation of the camera to only work with web pages that have been loaded via HTTPS, or via localhost. Safari and Firefox allow usage from a file URI, but Chrome crashes when attempting to use the barcode reader from a file URI. + +The `<$barcodereader>` widget has the following attributes: + +|!Name |!Description | +|actionsSuccess |Action string to be executed when a code is successfully decoded | +|actionsFailure |Action string to be executed in the event of an error | + +The following variables are passed to the ''actionsSuccess'' handler: + +|!Name |!Description | +|format |Barcode format (see below) | +|text |Decoded text | + +The following barcode formats are supported: + +* 0: "QR_CODE" +* 1: "AZTEC" +* 2: "CODABAR" +* 3: "CODE_39" +* 4: "CODE_93" +* 5: "CODE_128" +* 6: "DATA_MATRIX" +* 7: "MAXICODE" +* 8: "ITF" +* 9: "EAN_13" +* 10: "EAN_8" +* 11: "PDF_417" +* 12: "RSS_14" +* 13: "RSS_EXPANDED" +* 14: "UPC_A" +* 15: "UPC_E" +* 16: "UPC_EAN_EXTENSION" + +The following variables are passed to the ''actionsFailure'' handler: + +|!Name |!Description | +|error |Error message | diff --git a/plugins/tiddlywiki/qrcode/doc/usage.tid b/plugins/tiddlywiki/qrcode/docs/makeqr.tid similarity index 79% rename from plugins/tiddlywiki/qrcode/doc/usage.tid rename to plugins/tiddlywiki/qrcode/docs/makeqr.tid index fb186c901..7f5329d3e 100644 --- a/plugins/tiddlywiki/qrcode/doc/usage.tid +++ b/plugins/tiddlywiki/qrcode/docs/makeqr.tid @@ -1,8 +1,8 @@ -title: $:/plugins/tiddlywiki/qrcode/usage +title: $:/plugins/tiddlywiki/qrcode/docs/qrcode +tags: $:/tags/QRCodeDocs +caption: makeqr Macro -! `makeqr` Macro - -The <<.def makeqr>> [[macro|Macros]] converts text data into an image of the corresponding QR code. The image is returned as [[base64-encoded data URI|https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs]]. +The ''makeqr'' [[macro|Macros]] converts text data into an image of the corresponding QR code. The image is returned as [[base64-encoded data URI|https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs]]. !! Parameters diff --git a/plugins/tiddlywiki/qrcode/examples.tid b/plugins/tiddlywiki/qrcode/examples.tid new file mode 100644 index 000000000..460f9250f --- /dev/null +++ b/plugins/tiddlywiki/qrcode/examples.tid @@ -0,0 +1,3 @@ +title: $:/plugins/tiddlywiki/qrcode/examples + +<> \ No newline at end of file diff --git a/plugins/tiddlywiki/qrcode/MakeContactQR.tid b/plugins/tiddlywiki/qrcode/examples/make/MakeContactQR.tid similarity index 95% rename from plugins/tiddlywiki/qrcode/MakeContactQR.tid rename to plugins/tiddlywiki/qrcode/examples/make/MakeContactQR.tid index 5eeb2d231..8398facd3 100644 --- a/plugins/tiddlywiki/qrcode/MakeContactQR.tid +++ b/plugins/tiddlywiki/qrcode/examples/make/MakeContactQR.tid @@ -1,4 +1,4 @@ -title: $:/plugins/tiddlywiki/qrcode/MakeContactQR +title: $:/plugins/tiddlywiki/qrcode/make/MakeContactQR tags: $:/tags/MakeQR caption: Contact diff --git a/plugins/tiddlywiki/qrcode/MakeGenericQR.tid b/plugins/tiddlywiki/qrcode/examples/make/MakeGenericQR.tid similarity index 87% rename from plugins/tiddlywiki/qrcode/MakeGenericQR.tid rename to plugins/tiddlywiki/qrcode/examples/make/MakeGenericQR.tid index 9f0bcc286..864c13566 100644 --- a/plugins/tiddlywiki/qrcode/MakeGenericQR.tid +++ b/plugins/tiddlywiki/qrcode/examples/make/MakeGenericQR.tid @@ -1,4 +1,4 @@ -title: $:/plugins/tiddlywiki/qrcode/MakeGenericQR +title: $:/plugins/tiddlywiki/qrcode/make/MakeGenericQR tags: $:/tags/MakeQR caption: Generic diff --git a/plugins/tiddlywiki/qrcode/MakeWifiQR.tid b/plugins/tiddlywiki/qrcode/examples/make/MakeWifiQR.tid similarity index 95% rename from plugins/tiddlywiki/qrcode/MakeWifiQR.tid rename to plugins/tiddlywiki/qrcode/examples/make/MakeWifiQR.tid index f7c58d842..3502d6fdf 100644 --- a/plugins/tiddlywiki/qrcode/MakeWifiQR.tid +++ b/plugins/tiddlywiki/qrcode/examples/make/MakeWifiQR.tid @@ -1,4 +1,4 @@ -title: $:/plugins/tiddlywiki/qrcode/MakeWifiQR +title: $:/plugins/tiddlywiki/qrcode/make/MakeWifiQR tags: $:/tags/MakeQR caption: Wifi diff --git a/plugins/tiddlywiki/qrcode/examples/make/make.tid b/plugins/tiddlywiki/qrcode/examples/make/make.tid new file mode 100644 index 000000000..0bc9424ce --- /dev/null +++ b/plugins/tiddlywiki/qrcode/examples/make/make.tid @@ -0,0 +1,5 @@ +title: $:/plugins/tiddlywiki/qrcode/examples/make +tags: $:/tags/QRCodeExample +caption: Making Barcodes + +<> diff --git a/plugins/tiddlywiki/qrcode/examples/read/BarCodeReader.tid b/plugins/tiddlywiki/qrcode/examples/read/BarCodeReader.tid new file mode 100644 index 000000000..c6e9dcb6b --- /dev/null +++ b/plugins/tiddlywiki/qrcode/examples/read/BarCodeReader.tid @@ -0,0 +1,17 @@ +title: $:/plugins/tiddlywiki/qrcode/examples/read/BarCodeReader +tags: $:/tags/ReadQR +caption: Barcode Reader + +\procedure success() +<$action-setfield $tiddler="$:/state/BarCodeReaderDemoStatus" text=<> result=<> success="yes"/> +\end + +\procedure failure() +<$action-setfield $tiddler="$:/state/BarCodeReaderDemoStatus" text=<> success="no"/> +\end + +Scanning status: {{$:/state/BarCodeReaderDemoStatus}} + +{{$:/state/BarCodeReaderDemoStatus||$:/core/ui/TiddlerFields}} + +<$barcodereader actionsSuccess=<> actionsFail=<>/> diff --git a/plugins/tiddlywiki/qrcode/examples/read/read.tid b/plugins/tiddlywiki/qrcode/examples/read/read.tid new file mode 100644 index 000000000..29534ca09 --- /dev/null +++ b/plugins/tiddlywiki/qrcode/examples/read/read.tid @@ -0,0 +1,5 @@ +title: $:/plugins/tiddlywiki/qrcode/examples/read +tags: $:/tags/QRCodeExample +caption: Reading Barcodes + +<> diff --git a/plugins/tiddlywiki/qrcode/files/html5-qrcode/LICENSE b/plugins/tiddlywiki/qrcode/files/html5-qrcode/LICENSE new file mode 100644 index 000000000..cbfe2224f --- /dev/null +++ b/plugins/tiddlywiki/qrcode/files/html5-qrcode/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [2020] [MINHAZ ] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/plugins/tiddlywiki/qrcode/files/html5-qrcode/README.md b/plugins/tiddlywiki/qrcode/files/html5-qrcode/README.md new file mode 100644 index 000000000..3a5fcdc50 --- /dev/null +++ b/plugins/tiddlywiki/qrcode/files/html5-qrcode/README.md @@ -0,0 +1,398 @@ +# Html5-QRCode + +## Lightweight & cross platform QR Code and Bar code scanning library for the web + +Use this lightweight library to easily / quickly integrate QR code, bar code, and other common code scanning capabilities to your web application. + +## Key highlights +- 🔲 Support scanning [different types of bar codes and QR codes](#supported-code-formats). + +- 🖥 Supports [different platforms](#supported-platforms) be it Android, IOS, MacOs, Windows or Linux + +- 🌐 Supports [different browsers](#supported-platforms) like Chrome, Firefox, Safari, Edge, Opera ... + +- 📷 Supports scanning with camera as well as local files + +- ➡️ Comes with an [end to end library with UI](#easy-mode---with-end-to-end-scanner-user-interface) as well as a [low level library to build your own UI with](#pro-mode---if-you-want-to-implement-your-own-user-interface). + +- 🔦 Supports customisations like [flash/torch support](#showtorchbuttonifsupported---boolean--undefined), zooming etc. + + +Supports two kinds of APIs + +- `Html5QrcodeScanner` — End-to-end scanner with UI, integrate with less than ten lines of code. + +- `Html5Qrcode` — Powerful set of APIs you can use to build your UI without worrying about camera setup, handling permissions, reading codes, etc. + +> Support for scanning local files on the device is a new addition and helpful for the web browser which does not support inline web-camera access in smartphones. **Note:** This doesn't upload files to any server — everything is done locally. + +[![CircleCI](https://dl.circleci.com/status-badge/img/gh/mebjas/html5-qrcode/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/mebjas/html5-qrcode/tree/master) [![GitHub issues](https://img.shields.io/github/issues/mebjas/html5-qrcode)](https://github.com/mebjas/html5-qrcode/issues) [![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/mebjas/html5-qrcode)](https://github.com/mebjas/html5-qrcode/releases) ![GitHub](https://img.shields.io/github/license/mebjas/html5-qrcode) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/51e4f0ef8b0b42e1b93ce29875dd23a0)](https://www.codacy.com/gh/mebjas/html5-qrcode/dashboard?utm_source=github.com&utm_medium=referral&utm_content=mebjas/html5-qrcode&utm_campaign=Badge_Grade) [![Gitter](https://badges.gitter.im/html5-qrcode/community.svg)](https://gitter.im/html5-qrcode/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +![GitHub all releases](https://img.shields.io/github/downloads/mebjas/html5-qrcode/total?label=Github%20downloads&style=for-the-badge) [![npm](https://img.shields.io/npm/dw/html5-qrcode?label=npm%20downloads&style=for-the-badge)](https://www.npmjs.com/package/html5-qrcode) [![](https://img.shields.io/badge/Medium-12100E?style=for-the-badge&logo=medium&logoColor=white)](https://bit.ly/3CZiASv) + +| | | +| -- | -- | +| _Demo at [scanapp.org](https://scanapp.org)_ | _Demo at [qrcode.minhazav.dev](https://qrcode.minhazav.dev) - **Scanning different types of codes**_ | + +## We need your help! + +![image](https://user-images.githubusercontent.com/3007365/222830114-e5bcca15-bf8a-434e-9f48-339e82a0a4ef.png) +Help incentivise feature development, bug fixing by supporting the sponsorhip goals of this project. See [list of sponsered feature requests here](https://github.com/mebjas/html5-qrcode/wiki/Feature-request-sponsorship-goals#feature-requests). + +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/L3L84G0C8) + +## Documentation + +The documentation for this project has been moved to [scanapp.org/html5-qrcode-docs](https://scanapp.org/html5-qrcode-docs/). + +- [Getting started](https://scanapp.org/html5-qrcode-docs/docs/intro) +- [Supported frameworks](https://scanapp.org/html5-qrcode-docs/docs/supported_frameworks) +- [Supported 1D and 2D Code formats](https://scanapp.org/html5-qrcode-docs/docs/supported_code_formats) +- [Detailed API documentation](https://scanapp.org/html5-qrcode-docs/docs/apis) + +## Supported platforms + +We are working continuously on adding support for more and more platforms. If you find a platform or a browser where the library is not working, please feel free to file an issue. Check the [demo link](https://blog.minhazav.dev/research/html5-qrcode.html) to test it out. + +**Legends** +- ![](https://scanapp.org/assets/github_assets/done.png) Means full support — inline webcam and file based +- ![](https://scanapp.org/assets/github_assets/partial.png) Means partial support — only file based, webcam in progress + +### PC / Mac + +| Firefox
Firefox | Chrome
Chrome | Safari
Safari | Opera
Opera | Edge
Edge +| --------- | --------- | --------- | --------- | ------- | +|![](https://scanapp.org/assets/github_assets/done.png)| ![](https://scanapp.org/assets/github_assets/done.png)| ![](https://scanapp.org/assets/github_assets/done.png)| ![](https://scanapp.org/assets/github_assets/done.png) | ![](https://scanapp.org/assets/github_assets/done.png) + +### Android + +| Chrome
Chrome | Firefox
Firefox | Edge
Edge | Opera
Opera | Opera-Mini
Opera Mini | UC
UC +| --------- | --------- | --------- | --------- | --------- | --------- | +|![](https://scanapp.org/assets/github_assets/done.png)| ![](https://scanapp.org/assets/github_assets/done.png)| ![](https://scanapp.org/assets/github_assets/done.png)| ![](https://scanapp.org/assets/github_assets/done.png)| ![](https://scanapp.org/assets/github_assets/partial.png) | ![](https://scanapp.org/assets/github_assets/partial.png) + +### IOS + +| Safari
Safari | Chrome
Chrome | Firefox
Firefox | Edge
Edge +| --------- | --------- | --------- | --------- | +|![](https://scanapp.org/assets/github_assets/done.png)| ![](https://scanapp.org/assets/github_assets/done.png)* | ![](https://scanapp.org/assets/github_assets/done.png)* | ![](https://scanapp.org/assets/github_assets/partial.png) + + +> \* Supported for IOS versions >= 15.1 +> +> Before version 15.1, Webkit for IOS is used by Chrome, Firefox, and other browsers in IOS and they do not have webcam permissions yet. There is an ongoing issue on fixing the support for iOS - [issue/14](https://github.com/mebjas/html5-qrcode/issues/14) + +### Framework support +The library can be easily used with several other frameworks, I have been adding examples for a few of them and would continue to add more. + +|| | | | +| -------- | -------- | -------- | -------- | -------- | +| [Html5](./examples/html5) | [VueJs](./examples/vuejs) | [ElectronJs](./examples/electron) | [React](https://github.com/scanapp-org/html5-qrcode-react) | [Lit](./examples/lit) + +### Supported Code formats +Code scanning is dependent on [Zxing-js](https://github.com/zxing-js/library) library. We will be working on top of it to add support for more types of code scanning. If you feel a certain type of code would be helpful to have, please file a feature request. + +| Code | Example | +| ---- | ----- | +| QR Code | | +| AZTEC | | +| CODE_39| | +| CODE_93| | +| CODE_128| | +| ITF| | +| EAN_13| | +| EAN_8| | +| PDF_417| | +| UPC_A| | +| UPC_E| | +| DATA_MATRIX| | +| MAXICODE*| | +| RSS_14*| | +| RSS_EXPANDED*| | + +> *Formats are not supported by our experimental integration with native +> BarcodeDetector API integration ([Read more](/experimental.md)). + +## Description - [View Demo](https://blog.minhazav.dev/research/html5-qrcode.html) + +> See an end to end scanner experience at [scanapp.org](https://scanapp.org). + +This is a cross-platform JavaScript library to integrate QR code, bar codes & a few other types of code scanning capabilities to your applications running on HTML5 compatible browser. + +Supports: +- Querying camera on the device (with user permissions) +- Rendering live camera feed, with easy to use user interface for scanning +- Supports scanning a different kind of QR codes, bar codes and other formats +- Supports selecting image files from the device for scanning codes + +## How to use + +Find detailed guidelines on how to use this library on [scanapp.org/html5-qrcode-docs](https://scanapp.org/html5-qrcode-docs/docs/intro). + +## Demo +
+_Scan this image or visit [blog.minhazav.dev/research/html5-qrcode.html](https://blog.minhazav.dev/research/html5-qrcode.html)_ + +### For more information +Check these articles on how to use this library: + +- [QR and barcode scanner using HTML and JavaScript](https://minhazav.medium.com/qr-and-barcode-scanner-using-html-and-javascript-2cdc937f793d) +- [HTML5 QR Code scanning — launched v1.0.1 without jQuery dependency and refactored Promise based APIs](https://blog.minhazav.dev/HTML5-QR-Code-scanning-launched-v1.0.1/). +- [HTML5 QR Code scanning with JavaScript — Support for scanning the local file and using default camera added (v1.0.5)](https://blog.minhazav.dev/HTML5-QR-Code-scanning-support-for-local-file-and-default-camera/) + +## Screenshots +![screenshot](https://scanapp.org/assets/github_assets/screen.gif)
+_Figure: Screenshot from Google Chrome running on MacBook Pro_ + +## Documentation +Find the full API documentation at [scanapp.org/html5-qrcode-docs/docs/apis](https://scanapp.org/html5-qrcode-docs/docs/apis). + +### Extra optional `configuration` in `start()` method +Configuration object that can be used to configure both the scanning behavior and the user interface (UI). Most of the fields have default properties that will be used unless a different value is provided. If you do not want to override anything, you can just pass in an empty object `{}`. + +#### `fps` — Integer, Example = 10 +A.K.A frame per second, the default value for this is 2, but it can be increased to get faster scanning. Increasing too high value could affect performance. Value `>1000` will simply fail. + +#### `qrbox` — `QrDimensions` or `QrDimensionFunction` (Optional), Example = `{ width: 250, height: 250 }` +Use this property to limit the region of the viewfinder you want to use for scanning. The rest of the viewfinder would be shaded. For example, by passing config `{ qrbox : { width: 250, height: 250 } }`, the screen will look like: + + + +This can be used to set a rectangular scanning area with config like: + +```js +let config = { qrbox : { width: 400, height: 150 } } +``` + +This config also accepts a function of type +```ts +/** + * A function that takes in the width and height of the video stream +* and returns QrDimensions. +* +* Viewfinder refers to the video showing camera stream. +*/ +type QrDimensionFunction = + (viewfinderWidth: number, viewfinderHeight: number) => QrDimensions; +``` + +This allows you to set dynamic QR box dimensions based on the video dimensions. See this blog article for example: [Setting dynamic QR box size in Html5-qrcode - ScanApp blog](https://scanapp.org/blog/2022/01/09/setting-dynamic-qr-box-size-in-html5-qrcode.html) + +> This might be desirable for bar code scanning. + +If this value is not set, no shaded QR box will be rendered and the scanner will scan the entire area of video stream. + +#### `aspectRatio` — Float, Example 1.777778 for 16:9 aspect ratio +Use this property to render the video feed in a certain aspect ratio. Passing a nonstandard aspect ratio like `100000:1` could lead to the video feed not even showing up. Ideal values can be: +| Value | Aspect Ratio | Use Case | +| ----- | ------------ | -------- | +|1.333334 | 4:3 | Standard camera aspect ratio | +|1.777778 | 16:9 | Full screen, cinematic | +|1.0 | 1:1 | Square view | + +If you do not pass any value, the whole viewfinder would be used for scanning. +**Note**: this value has to be smaller than the width and height of the `QR code HTML element`. + +#### `disableFlip` — Boolean (Optional), default = false +By default, the scanner can scan for horizontally flipped QR Codes. This also enables scanning QR code using the front camera on mobile devices which are sometimes mirrored. This is `false` by default and I recommend changing this only if: +- You are sure that the camera feed cannot be mirrored (Horizontally flipped) +- You are facing performance issues with this enabled. + +Here's an example of a normal and mirrored QR Code +| Normal QR Code | Mirrored QR Code | +| ----- | ---- | +| |
| + +#### `rememberLastUsedCamera` — Boolean (Optional), default = true +If `true` the last camera used by the user and weather or not permission was granted would be remembered in the local storage. If the user has previously granted permissions — the request permission option in the UI will be skipped and the last selected camera would be launched automatically for scanning. + +If `true` the library shall remember if the camera permissions were previously +granted and what camera was last used. If the permissions is already granted for +"camera", QR code scanning will automatically * start for previously used camera. + +#### `supportedScanTypes` - `Array | []` +> This is only supported for `Html5QrcodeScanner`. + +Default = `[Html5QrcodeScanType.SCAN_TYPE_CAMERA, Html5QrcodeScanType.SCAN_TYPE_FILE]` + +This field can be used to: +- Limit support to either of `Camera` or `File` based scan. +- Change default scan type. + +How to use: + +```js +function onScanSuccess(decodedText, decodedResult) { + // handle the scanned code as you like, for example: + console.log(`Code matched = ${decodedText}`, decodedResult); +} + +let config = { + fps: 10, + qrbox: {width: 100, height: 100}, + rememberLastUsedCamera: true, + // Only support camera scan type. + supportedScanTypes: [Html5QrcodeScanType.SCAN_TYPE_CAMERA] +}; + +let html5QrcodeScanner = new Html5QrcodeScanner( + "reader", config, /* verbose= */ false); +html5QrcodeScanner.render(onScanSuccess); +``` + +For file based scan only choose: +```js +supportedScanTypes: [Html5QrcodeScanType.SCAN_TYPE_FILE] +``` + +For supporting both as it is today, you can ignore this field or set as: +```js +supportedScanTypes: [ + Html5QrcodeScanType.SCAN_TYPE_CAMERA, + Html5QrcodeScanType.SCAN_TYPE_FILE] +``` + +To set the file based scan as defult change the order: +```js +supportedScanTypes: [ + Html5QrcodeScanType.SCAN_TYPE_FILE, + Html5QrcodeScanType.SCAN_TYPE_CAMERA] +``` + +#### `showTorchButtonIfSupported` - `boolean | undefined` +> This is only supported for `Html5QrcodeScanner`. + +If `true` the rendered UI will have button to turn flash on or off based on device + browser support. The value is `false` by default. + +### Scanning only specific formats +By default, both camera stream and image files are scanned against all the +supported code formats. Both `Html5QrcodeScanner` and `Html5Qrcode` classes can + be configured to only support a subset of supported formats. Supported formats +are defined in +[enum Html5QrcodeSupportedFormats](https://github.com/mebjas/html5-qrcode/blob/master/src/core.ts#L14). + +```ts +enum Html5QrcodeSupportedFormats { + QR_CODE = 0, + AZTEC, + CODABAR, + CODE_39, + CODE_93, + CODE_128, + DATA_MATRIX, + MAXICODE, + ITF, + EAN_13, + EAN_8, + PDF_417, + RSS_14, + RSS_EXPANDED, + UPC_A, + UPC_E, + UPC_EAN_EXTENSION, +} +``` + +I recommend using this only if you need to explicitly omit support for certain +formats or want to reduce the number of scans done per second for performance +reasons. + +#### Scanning only QR code with `Html5Qrcode` +```js +const html5QrCode = new Html5Qrcode( + "reader", { formatsToSupport: [ Html5QrcodeSupportedFormats.QR_CODE ] }); +const qrCodeSuccessCallback = (decodedText, decodedResult) => { + /* handle success */ +}; +const config = { fps: 10, qrbox: { width: 250, height: 250 } }; + +// If you want to prefer front camera +html5QrCode.start({ facingMode: "user" }, config, qrCodeSuccessCallback); +``` + +#### Scanning only QR code and UPC codes with `Html5QrcodeScanner` +```js +function onScanSuccess(decodedText, decodedResult) { + // Handle the scanned code as you like, for example: + console.log(`Code matched = ${decodedText}`, decodedResult); +} + +const formatsToSupport = [ + Html5QrcodeSupportedFormats.QR_CODE, + Html5QrcodeSupportedFormats.UPC_A, + Html5QrcodeSupportedFormats.UPC_E, + Html5QrcodeSupportedFormats.UPC_EAN_EXTENSION, +]; +const html5QrcodeScanner = new Html5QrcodeScanner( + "reader", + { + fps: 10, + qrbox: { width: 250, height: 250 }, + formatsToSupport: formatsToSupport + }, + /* verbose= */ false); +html5QrcodeScanner.render(onScanSuccess); +``` + +## Experimental features +The library now supports some experimental features which are supported in the +library but not recommended for production usage either due to limited testing +done or limited compatibility for underlying APIs used. Read more about it [here](/experimental.md). +Some experimental features include: +- [Support for BarcodeDetector JavaScript API](/experimental.md) + +## How to modify and build +1. Code changes should only be made to [/src](./src) only. + +2. Run `npm install` to install all dependencies. + +3. Run `npm run-script build` to build JavaScript output. The output JavaScript distribution is built to [/dist/html5-qrcode.min.js](./dist/html5-qrcode.min.js). If you are developing on Windows OS, run `npm run-script build-windows`. + +4. Testing + - Run `npm test` + - Run the tests before sending a pull request, all tests should run. + - Please add tests for new behaviors sent in PR. + +5. Send a pull request + - Include code changes only to `./src`. **Do not change `./dist` manually.** + - In the pull request add a comment like + ```text + @all-contributors please add @mebjas for this new feature or tests + ``` + - For calling out your contributions, the bot will update the contributions file. + - Code will be built & published by the author in batches. + +## How to contribute +You can contribute to the project in several ways: + +- File issue ticket for any observed bug or compatibility issue with the project. +- File feature request for missing features. +- Take open bugs or feature request and work on it and send a Pull Request. +- Write unit tests for existing codebase (which is not covered by tests today). **Help wanted on this** - [read more](./tests). + +## Support 💖 + +This project would not be possible without all of our fantastic contributors and [sponsors](https://github.com/sponsors/mebjas). If you'd like to support the maintenance and upkeep of this project you can [donate via GitHub Sponsors](https://github.com/sponsors/mebjas). + +**Sponsor the project for priortising feature requests / bugs relevant to you**. (Depends on scope of ask and bandwidth of the contributors). + + +webauthor@ +ben-gy +bujjivadu + + +Help incentivise feature development, bug fixing by supporting the sponsorhip goals of this project. See [list of sponsered feature requests here](https://github.com/mebjas/html5-qrcode/wiki/Feature-request-sponsorship-goals#feature-requests). + +Also, huge thanks to following organizations for non monitery sponsorships + + +
+ +
+
+ +
+ + +## Credits +The decoder used for the QR code reading is from `Zxing-js` https://github.com/zxing-js/library
\ No newline at end of file diff --git a/plugins/tiddlywiki/qrcode/files/html5-qrcode/html5-qrcode.min.js b/plugins/tiddlywiki/qrcode/files/html5-qrcode/html5-qrcode.min.js new file mode 100644 index 000000000..18db263db --- /dev/null +++ b/plugins/tiddlywiki/qrcode/files/html5-qrcode/html5-qrcode.min.js @@ -0,0 +1 @@ +var __Html5QrcodeLibrary__;(()=>{var t={449:function(t,e,r){!function(t){"use strict";function e(t){return null==t}var n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])};var i,o=function(t){function e(e){var r,n,i,o=this.constructor,s=t.call(this,e)||this;return Object.defineProperty(s,"name",{value:o.name,enumerable:!1}),r=s,n=o.prototype,(i=Object.setPrototypeOf)?i(r,n):r.__proto__=n,function(t,e){void 0===e&&(e=t.constructor);var r=Error.captureStackTrace;r&&r(t,e)}(s),s}return function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}(e,t),e}(Error);class s extends o{constructor(t=undefined){super(t),this.message=t}getKind(){return this.constructor.kind}}s.kind="Exception";class a extends s{}a.kind="ArgumentException";class c extends s{}c.kind="IllegalArgumentException";class l{constructor(t){if(this.binarizer=t,null===t)throw new c("Binarizer must be non-null.")}getWidth(){return this.binarizer.getWidth()}getHeight(){return this.binarizer.getHeight()}getBlackRow(t,e){return this.binarizer.getBlackRow(t,e)}getBlackMatrix(){return null!==this.matrix&&void 0!==this.matrix||(this.matrix=this.binarizer.getBlackMatrix()),this.matrix}isCropSupported(){return this.binarizer.getLuminanceSource().isCropSupported()}crop(t,e,r,n){const i=this.binarizer.getLuminanceSource().crop(t,e,r,n);return new l(this.binarizer.createBinarizer(i))}isRotateSupported(){return this.binarizer.getLuminanceSource().isRotateSupported()}rotateCounterClockwise(){const t=this.binarizer.getLuminanceSource().rotateCounterClockwise();return new l(this.binarizer.createBinarizer(t))}rotateCounterClockwise45(){const t=this.binarizer.getLuminanceSource().rotateCounterClockwise45();return new l(this.binarizer.createBinarizer(t))}toString(){try{return this.getBlackMatrix().toString()}catch(t){return""}}}class h extends s{static getChecksumInstance(){return new h}}h.kind="ChecksumException";class u{constructor(t){this.source=t}getLuminanceSource(){return this.source}getWidth(){return this.source.getWidth()}getHeight(){return this.source.getHeight()}}class d{static arraycopy(t,e,r,n,i){for(;i--;)r[n++]=t[e++]}static currentTimeMillis(){return Date.now()}}class f extends s{}f.kind="IndexOutOfBoundsException";class g extends f{constructor(t=undefined,e=undefined){super(e),this.index=t,this.message=e}}g.kind="ArrayIndexOutOfBoundsException";class w{static fill(t,e){for(let r=0,n=t.length;rr)throw new c("fromIndex("+e+") > toIndex("+r+")");if(e<0)throw new g(e);if(r>t)throw new g(r)}static asList(...t){return t}static create(t,e,r){return Array.from({length:t}).map((t=>Array.from({length:e}).fill(r)))}static createInt32Array(t,e,r){return Array.from({length:t}).map((t=>Int32Array.from({length:e}).fill(r)))}static equals(t,e){if(!t)return!1;if(!e)return!1;if(!t.length)return!1;if(!e.length)return!1;if(t.length!==e.length)return!1;for(let r=0,n=t.length;r>1,s=r(e,t[o]);if(s>0)n=o+1;else{if(!(s<0))return o;i=o-1}}return-n-1}static numberComparator(t,e){return t-e}}class m{static numberOfTrailingZeros(t){let e;if(0===t)return 32;let r=31;return e=t<<16,0!==e&&(r-=16,t=e),e=t<<8,0!==e&&(r-=8,t=e),e=t<<4,0!==e&&(r-=4,t=e),e=t<<2,0!==e&&(r-=2,t=e),r-(t<<1>>>31)}static numberOfLeadingZeros(t){if(0===t)return 32;let e=1;return t>>>16==0&&(e+=16,t<<=16),t>>>24==0&&(e+=8,t<<=8),t>>>28==0&&(e+=4,t<<=4),t>>>30==0&&(e+=2,t<<=2),e-=t>>>31,e}static toHexString(t){return t.toString(16)}static toBinaryString(t){return String(parseInt(String(t),2))}static bitCount(t){return t=(t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135,63&(t+=t>>>8)+(t>>>16)}static truncDivision(t,e){return Math.trunc(t/e)}static parseInt(t,e=undefined){return parseInt(t,e)}}m.MIN_VALUE_32_BITS=-2147483648,m.MAX_VALUE=Number.MAX_SAFE_INTEGER;class p{constructor(t,e){void 0===t?(this.size=0,this.bits=new Int32Array(1)):(this.size=t,this.bits=null==e?p.makeArray(t):e)}getSize(){return this.size}getSizeInBytes(){return Math.floor((this.size+7)/8)}ensureCapacity(t){if(t>32*this.bits.length){const e=p.makeArray(t);d.arraycopy(this.bits,0,e,0,this.bits.length),this.bits=e}}get(t){return 0!=(this.bits[Math.floor(t/32)]&1<<(31&t))}set(t){this.bits[Math.floor(t/32)]|=1<<(31&t)}flip(t){this.bits[Math.floor(t/32)]^=1<<(31&t)}getNextSet(t){const e=this.size;if(t>=e)return e;const r=this.bits;let n=Math.floor(t/32),i=r[n];i&=~((1<<(31&t))-1);const o=r.length;for(;0===i;){if(++n===o)return e;i=r[n]}const s=32*n+m.numberOfTrailingZeros(i);return s>e?e:s}getNextUnset(t){const e=this.size;if(t>=e)return e;const r=this.bits;let n=Math.floor(t/32),i=~r[n];i&=~((1<<(31&t))-1);const o=r.length;for(;0===i;){if(++n===o)return e;i=~r[n]}const s=32*n+m.numberOfTrailingZeros(i);return s>e?e:s}setBulk(t,e){this.bits[Math.floor(t/32)]=e}setRange(t,e){if(ethis.size)throw new c;if(e===t)return;e--;const r=Math.floor(t/32),n=Math.floor(e/32),i=this.bits;for(let o=r;o<=n;o++){const s=(2<<(or?0:31&t));i[o]|=s}}clear(){const t=this.bits.length,e=this.bits;for(let r=0;rthis.size)throw new c;if(e===t)return!0;e--;const n=Math.floor(t/32),i=Math.floor(e/32),o=this.bits;for(let s=n;s<=i;s++){const a=(2<<(sn?0:31&t))&4294967295;if((o[s]&a)!==(r?a:0))return!1}return!0}appendBit(t){this.ensureCapacity(this.size+1),t&&(this.bits[Math.floor(this.size/32)]|=1<<(31&this.size)),this.size++}appendBits(t,e){if(e<0||e>32)throw new c("Num bits must be between 0 and 32");this.ensureCapacity(this.size+e);for(let r=e;r>0;r--)this.appendBit(1==(t>>r-1&1))}appendBitArray(t){const e=t.size;this.ensureCapacity(this.size+e);for(let r=0;r>1&1431655765|(1431655765&r)<<1,r=r>>2&858993459|(858993459&r)<<2,r=r>>4&252645135|(252645135&r)<<4,r=r>>8&16711935|(16711935&r)<<8,r=r>>16&65535|(65535&r)<<16,t[e-i]=r}if(this.size!==32*r){const e=32*r-this.size;let n=t[0]>>>e;for(let i=1;i>>e}t[r-1]=n}this.bits=t}static makeArray(t){return new Int32Array(Math.floor((t+31)/32))}equals(t){if(!(t instanceof p))return!1;const e=t;return this.size===e.size&&w.equals(this.bits,e.bits)}hashCode(){return 31*this.size+w.hashCode(this.bits)}toString(){let t="";for(let e=0,r=this.size;e=900)throw new E("incorect value");const e=I.VALUES_TO_ECI.get(t);if(void 0===e)throw new E("incorect value");return e}static getCharacterSetECIByName(t){const e=I.NAME_TO_ECI.get(t);if(void 0===e)throw new E("incorect value");return e}equals(t){if(!(t instanceof I))return!1;const e=t;return this.getName()===e.getName()}}I.VALUE_IDENTIFIER_TO_ECI=new Map,I.VALUES_TO_ECI=new Map,I.NAME_TO_ECI=new Map,I.Cp437=new I(A.Cp437,Int32Array.from([0,2]),"Cp437"),I.ISO8859_1=new I(A.ISO8859_1,Int32Array.from([1,3]),"ISO-8859-1","ISO88591","ISO8859_1"),I.ISO8859_2=new I(A.ISO8859_2,4,"ISO-8859-2","ISO88592","ISO8859_2"),I.ISO8859_3=new I(A.ISO8859_3,5,"ISO-8859-3","ISO88593","ISO8859_3"),I.ISO8859_4=new I(A.ISO8859_4,6,"ISO-8859-4","ISO88594","ISO8859_4"),I.ISO8859_5=new I(A.ISO8859_5,7,"ISO-8859-5","ISO88595","ISO8859_5"),I.ISO8859_6=new I(A.ISO8859_6,8,"ISO-8859-6","ISO88596","ISO8859_6"),I.ISO8859_7=new I(A.ISO8859_7,9,"ISO-8859-7","ISO88597","ISO8859_7"),I.ISO8859_8=new I(A.ISO8859_8,10,"ISO-8859-8","ISO88598","ISO8859_8"),I.ISO8859_9=new I(A.ISO8859_9,11,"ISO-8859-9","ISO88599","ISO8859_9"),I.ISO8859_10=new I(A.ISO8859_10,12,"ISO-8859-10","ISO885910","ISO8859_10"),I.ISO8859_11=new I(A.ISO8859_11,13,"ISO-8859-11","ISO885911","ISO8859_11"),I.ISO8859_13=new I(A.ISO8859_13,15,"ISO-8859-13","ISO885913","ISO8859_13"),I.ISO8859_14=new I(A.ISO8859_14,16,"ISO-8859-14","ISO885914","ISO8859_14"),I.ISO8859_15=new I(A.ISO8859_15,17,"ISO-8859-15","ISO885915","ISO8859_15"),I.ISO8859_16=new I(A.ISO8859_16,18,"ISO-8859-16","ISO885916","ISO8859_16"),I.SJIS=new I(A.SJIS,20,"SJIS","Shift_JIS"),I.Cp1250=new I(A.Cp1250,21,"Cp1250","windows-1250"),I.Cp1251=new I(A.Cp1251,22,"Cp1251","windows-1251"),I.Cp1252=new I(A.Cp1252,23,"Cp1252","windows-1252"),I.Cp1256=new I(A.Cp1256,24,"Cp1256","windows-1256"),I.UnicodeBigUnmarked=new I(A.UnicodeBigUnmarked,25,"UnicodeBigUnmarked","UTF-16BE","UnicodeBig"),I.UTF8=new I(A.UTF8,26,"UTF8","UTF-8"),I.ASCII=new I(A.ASCII,Int32Array.from([27,170]),"ASCII","US-ASCII"),I.Big5=new I(A.Big5,28,"Big5"),I.GB18030=new I(A.GB18030,29,"GB18030","GB2312","EUC_CN","GBK"),I.EUC_KR=new I(A.EUC_KR,30,"EUC_KR","EUC-KR");class S extends s{}S.kind="UnsupportedOperationException";class _{static decode(t,e){const r=this.encodingName(e);return this.customDecoder?this.customDecoder(t,r):"undefined"==typeof TextDecoder||this.shouldDecodeOnFallback(r)?this.decodeFallback(t,r):new TextDecoder(r).decode(t)}static shouldDecodeOnFallback(t){return!_.isBrowser()&&"ISO-8859-1"===t}static encode(t,e){const r=this.encodingName(e);return this.customEncoder?this.customEncoder(t,r):"undefined"==typeof TextEncoder?this.encodeFallback(t):(new TextEncoder).encode(t)}static isBrowser(){return"undefined"!=typeof window&&"[object Window]"==={}.toString.call(window)}static encodingName(t){return"string"==typeof t?t:t.getName()}static encodingCharacterSet(t){return t instanceof I?t:I.getCharacterSetECIByName(t)}static decodeFallback(t,e){const r=this.encodingCharacterSet(e);if(_.isDecodeFallbackSupported(r)){let e="";for(let r=0,n=t.length;r3&&239===t[0]&&187===t[1]&&191===t[2];for(let e=0;e0?0==(128&r)?o=!1:s--:0!=(128&r)&&(0==(64&r)?o=!1:(s++,0==(32&r)?a++:(s++,0==(16&r)?c++:(s++,0==(8&r)?l++:o=!1))))),n&&(r>127&&r<160?n=!1:r>159&&(r<192||215===r||247===r)&&m++),i&&(h>0?r<64||127===r||r>252?i=!1:h--:128===r||160===r||r>239?i=!1:r>160&&r<224?(u++,f=0,d++,d>g&&(g=d)):r>127?(h++,d=0,f++,f>w&&(w=f)):(d=0,f=0))}return o&&s>0&&(o=!1),i&&h>0&&(i=!1),o&&(p||a+c+l>0)?T.UTF8:i&&(T.ASSUME_SHIFT_JIS||g>=3||w>=3)?T.SHIFT_JIS:n&&i?2===g&&2===u||10*m>=r?T.SHIFT_JIS:T.ISO88591:n?T.ISO88591:i?T.SHIFT_JIS:o?T.UTF8:T.PLATFORM_DEFAULT_ENCODING}static format(t,...e){let r=-1;return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g,(function(t,n,i,o,s,a){if("%%"===t)return"%";if(void 0===e[++r])return;t=o?parseInt(o.substr(1)):void 0;let c,l=s?parseInt(s.substr(1)):void 0;switch(a){case"s":c=e[r];break;case"c":c=e[r][0];break;case"f":c=parseFloat(e[r]).toFixed(t);break;case"p":c=parseFloat(e[r]).toPrecision(t);break;case"e":c=parseFloat(e[r]).toExponential(t);break;case"x":c=parseInt(e[r]).toString(l||16);break;case"d":c=parseFloat(parseInt(e[r],l||10).toPrecision(t)).toFixed(0)}c="object"==typeof c?JSON.stringify(c):(+c).toString(l);let h=parseInt(i),u=i&&i[0]+""=="0"?"0":" ";for(;c.lengtho){if(-1===s)s=i-o;else if(i-o!==s)throw new c("row lengths do not match");o=i,a++}l++}else if(t.substring(l,l+e.length)===e)l+=e.length,n[i]=!0,i++;else{if(t.substring(l,l+r.length)!==r)throw new c("illegal character encountered: "+t.substring(l));l+=r.length,n[i]=!1,i++}if(i>o){if(-1===s)s=i-o;else if(i-o!==s)throw new c("row lengths do not match");a++}const h=new N(s,a);for(let t=0;t>>(31&t)&1)}set(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]|=1<<(31&t)&4294967295}unset(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]&=~(1<<(31&t)&4294967295)}flip(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]^=1<<(31&t)&4294967295}xor(t){if(this.width!==t.getWidth()||this.height!==t.getHeight()||this.rowSize!==t.getRowSize())throw new c("input matrix dimensions do not match");const e=new p(Math.floor(this.width/32)+1),r=this.rowSize,n=this.bits;for(let i=0,o=this.height;ithis.height||i>this.width)throw new c("The region must fit inside the matrix");const s=this.rowSize,a=this.bits;for(let r=e;ra&&(a=t),32*es){let t=31;for(;c>>>t==0;)t--;32*e+t>s&&(s=32*e+t)}}}return s=0&&0===e[r];)r--;if(r<0)return null;const n=Math.floor(r/t);let i=32*Math.floor(r%t);const o=e[r];let s=31;for(;o>>>s==0;)s--;return i+=s,Int32Array.from([i,n])}getWidth(){return this.width}getHeight(){return this.height}getRowSize(){return this.rowSize}equals(t){if(!(t instanceof N))return!1;const e=t;return this.width===e.width&&this.height===e.height&&this.rowSize===e.rowSize&&w.equals(this.bits,e.bits)}hashCode(){let t=this.width;return t=31*t+this.width,t=31*t+this.height,t=31*t+this.rowSize,t=31*t+w.hashCode(this.bits),t}toString(t="X ",e=" ",r="\n"){return this.buildToString(t,e,r)}buildToString(t,e,r){let n=new y;for(let i=0,o=this.height;i>M.LUMINANCE_SHIFT]++;const s=M.estimateBlackPoint(o);if(n<3)for(let t=0;t>M.LUMINANCE_SHIFT]++}const o=M.estimateBlackPoint(i),s=t.getMatrix();for(let t=0;ti&&(n=o,i=t[o]),t[o]>r&&(r=t[o]);let o=0,s=0;for(let r=0;rs&&(o=r,s=i)}if(n>o){const t=n;n=o,o=t}if(o-n<=e/16)throw new D;let a=o-1,c=-1;for(let e=o-1;e>n;e--){const i=e-n,s=i*i*(o-e)*(r-t[e]);s>c&&(a=e,c=s)}return a<=R.MINIMUM_DIMENSION&&r>=R.MINIMUM_DIMENSION){const n=t.getMatrix();let i=e>>R.BLOCK_SIZE_POWER;0!=(e&R.BLOCK_SIZE_MASK)&&i++;let o=r>>R.BLOCK_SIZE_POWER;0!=(r&R.BLOCK_SIZE_MASK)&&o++;const s=R.calculateBlackPoints(n,i,o,e,r),a=new N(e,r);R.calculateThresholdForBlock(n,i,o,e,r,s,a),this.matrix=a}else this.matrix=super.getBlackMatrix();return this.matrix}createBinarizer(t){return new R(t)}static calculateThresholdForBlock(t,e,r,n,i,o,s){const a=i-R.BLOCK_SIZE,c=n-R.BLOCK_SIZE;for(let i=0;ia&&(l=a);const h=R.cap(i,2,r-3);for(let r=0;rc&&(i=c);const a=R.cap(r,2,e-3);let u=0;for(let t=-2;t<=2;t++){const e=o[h+t];u+=e[a-2]+e[a-1]+e[a]+e[a+1]+e[a+2]}const d=u/25;R.thresholdBlock(t,i,l,d,n,s)}}}static cap(t,e,r){return tr?r:t}static thresholdBlock(t,e,r,n,i,o){for(let s=0,a=r*i+e;so&&(r=o);for(let o=0;os&&(e=s);let c=0,l=255,h=0;for(let i=0,o=r*n+e;ih&&(h=r)}if(h-l>R.MIN_DYNAMIC_RANGE)for(i++,o+=n;i>2*R.BLOCK_SIZE_POWER;if(h-l<=R.MIN_DYNAMIC_RANGE&&(u=l/2,i>0&&o>0)){const t=(a[i-1][o]+2*a[i][o-1]+a[i-1][o-1])/4;l>10,n[r]=i}return n}getRow(t,e){if(t<0||t>=this.getHeight())throw new c("Requested row is outside the image: "+t);const r=this.getWidth(),n=t*r;return null===e?e=this.buffer.slice(n,n+r):(e.lengthnew L(t.deviceId,t.label)))}))}findDeviceById(t){return v(this,void 0,void 0,(function*(){const e=yield this.listVideoInputDevices();return e?e.find((e=>e.deviceId===t)):null}))}decodeFromInputVideoDevice(t,e){return v(this,void 0,void 0,(function*(){return yield this.decodeOnceFromVideoDevice(t,e)}))}decodeOnceFromVideoDevice(t,e){return v(this,void 0,void 0,(function*(){let r;this.reset(),r=t?{deviceId:{exact:t}}:{facingMode:"environment"};const n={video:r};return yield this.decodeOnceFromConstraints(n,e)}))}decodeOnceFromConstraints(t,e){return v(this,void 0,void 0,(function*(){const r=yield navigator.mediaDevices.getUserMedia(t);return yield this.decodeOnceFromStream(r,e)}))}decodeOnceFromStream(t,e){return v(this,void 0,void 0,(function*(){this.reset();const r=yield this.attachStreamToVideo(t,e);return yield this.decodeOnce(r)}))}decodeFromInputVideoDeviceContinuously(t,e,r){return v(this,void 0,void 0,(function*(){return yield this.decodeFromVideoDevice(t,e,r)}))}decodeFromVideoDevice(t,e,r){return v(this,void 0,void 0,(function*(){let n;n=t?{deviceId:{exact:t}}:{facingMode:"environment"};const i={video:n};return yield this.decodeFromConstraints(i,e,r)}))}decodeFromConstraints(t,e,r){return v(this,void 0,void 0,(function*(){const n=yield navigator.mediaDevices.getUserMedia(t);return yield this.decodeFromStream(n,e,r)}))}decodeFromStream(t,e,r){return v(this,void 0,void 0,(function*(){this.reset();const n=yield this.attachStreamToVideo(t,e);return yield this.decodeContinuously(n,r)}))}stopAsyncDecode(){this._stopAsyncDecode=!0}stopContinuousDecode(){this._stopContinuousDecode=!0}attachStreamToVideo(t,e){return v(this,void 0,void 0,(function*(){const r=this.prepareVideoElement(e);return this.addVideoSource(r,t),this.videoElement=r,this.stream=t,yield this.playVideoOnLoadAsync(r),r}))}playVideoOnLoadAsync(t){return new Promise(((e,r)=>this.playVideoOnLoad(t,(()=>e()))))}playVideoOnLoad(t,e){this.videoEndedListener=()=>this.stopStreams(),this.videoCanPlayListener=()=>this.tryPlayVideo(t),t.addEventListener("ended",this.videoEndedListener),t.addEventListener("canplay",this.videoCanPlayListener),t.addEventListener("playing",e),this.tryPlayVideo(t)}isVideoPlaying(t){return t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2}tryPlayVideo(t){return v(this,void 0,void 0,(function*(){if(this.isVideoPlaying(t))console.warn("Trying to play video that is already playing.");else try{yield t.play()}catch(t){console.warn("It was not possible to play the video.")}}))}getMediaElement(t,e){const r=document.getElementById(t);if(!r)throw new a(`element with id '${t}' not found`);if(r.nodeName.toLowerCase()!==e.toLowerCase())throw new a(`element with id '${t}' must be an ${e} element`);return r}decodeFromImage(t,e){if(!t&&!e)throw new a("either imageElement with a src set or an url must be provided");return e&&!t?this.decodeFromImageUrl(e):this.decodeFromImageElement(t)}decodeFromVideo(t,e){if(!t&&!e)throw new a("Either an element with a src set or an URL must be provided");return e&&!t?this.decodeFromVideoUrl(e):this.decodeFromVideoElement(t)}decodeFromVideoContinuously(t,e,r){if(void 0===t&&void 0===e)throw new a("Either an element with a src set or an URL must be provided");return e&&!t?this.decodeFromVideoUrlContinuously(e,r):this.decodeFromVideoElementContinuously(t,r)}decodeFromImageElement(t){if(!t)throw new a("An image element must be provided.");this.reset();const e=this.prepareImageElement(t);let r;return this.imageElement=e,r=this.isImageLoaded(e)?this.decodeOnce(e,!1,!0):this._decodeOnLoadImage(e),r}decodeFromVideoElement(t){const e=this._decodeFromVideoElementSetup(t);return this._decodeOnLoadVideo(e)}decodeFromVideoElementContinuously(t,e){const r=this._decodeFromVideoElementSetup(t);return this._decodeOnLoadVideoContinuously(r,e)}_decodeFromVideoElementSetup(t){if(!t)throw new a("A video element must be provided.");this.reset();const e=this.prepareVideoElement(t);return this.videoElement=e,e}decodeFromImageUrl(t){if(!t)throw new a("An URL must be provided.");this.reset();const e=this.prepareImageElement();this.imageElement=e;const r=this._decodeOnLoadImage(e);return e.src=t,r}decodeFromVideoUrl(t){if(!t)throw new a("An URL must be provided.");this.reset();const e=this.prepareVideoElement(),r=this.decodeFromVideoElement(e);return e.src=t,r}decodeFromVideoUrlContinuously(t,e){if(!t)throw new a("An URL must be provided.");this.reset();const r=this.prepareVideoElement(),n=this.decodeFromVideoElementContinuously(r,e);return r.src=t,n}_decodeOnLoadImage(t){return new Promise(((e,r)=>{this.imageLoadedListener=()=>this.decodeOnce(t,!1,!0).then(e,r),t.addEventListener("load",this.imageLoadedListener)}))}_decodeOnLoadVideo(t){return v(this,void 0,void 0,(function*(){return yield this.playVideoOnLoadAsync(t),yield this.decodeOnce(t)}))}_decodeOnLoadVideoContinuously(t,e){return v(this,void 0,void 0,(function*(){yield this.playVideoOnLoadAsync(t),this.decodeContinuously(t,e)}))}isImageLoaded(t){return!!t.complete&&0!==t.naturalWidth}prepareImageElement(t){let e;return void 0===t&&(e=document.createElement("img"),e.width=200,e.height=200),"string"==typeof t&&(e=this.getMediaElement(t,"img")),t instanceof HTMLImageElement&&(e=t),e}prepareVideoElement(t){let e;return t||"undefined"==typeof document||(e=document.createElement("video"),e.width=200,e.height=200),"string"==typeof t&&(e=this.getMediaElement(t,"video")),t instanceof HTMLVideoElement&&(e=t),e.setAttribute("autoplay","true"),e.setAttribute("muted","true"),e.setAttribute("playsinline","true"),e}decodeOnce(t,e=!0,r=!0){this._stopAsyncDecode=!1;const n=(i,o)=>{if(this._stopAsyncDecode)return o(new D("Video stream has ended before any code could be detected.")),void(this._stopAsyncDecode=void 0);try{i(this.decode(t))}catch(t){if(e&&t instanceof D||(t instanceof h||t instanceof E)&&r)return setTimeout(n,this._timeBetweenDecodingAttempts,i,o);o(t)}};return new Promise(((t,e)=>n(t,e)))}decodeContinuously(t,e){this._stopContinuousDecode=!1;const r=()=>{if(this._stopContinuousDecode)this._stopContinuousDecode=void 0;else try{const n=this.decode(t);e(n,null),setTimeout(r,this.timeBetweenScansMillis)}catch(t){e(null,t),(t instanceof h||t instanceof E||t instanceof D)&&setTimeout(r,this._timeBetweenDecodingAttempts)}};r()}decode(t){const e=this.createBinaryBitmap(t);return this.decodeBitmap(e)}_isHTMLVideoElement(t){return 0!==t.videoWidth}drawFrameOnCanvas(t,e,r){e||(e={sx:0,sy:0,sWidth:t.videoWidth,sHeight:t.videoHeight,dx:0,dy:0,dWidth:t.videoWidth,dHeight:t.videoHeight}),r||(r=this.captureCanvasContext),r.drawImage(t,e.sx,e.sy,e.sWidth,e.sHeight,e.dx,e.dy,e.dWidth,e.dHeight)}drawImageOnCanvas(t,e,r=this.captureCanvasContext){e||(e={sx:0,sy:0,sWidth:t.naturalWidth,sHeight:t.naturalHeight,dx:0,dy:0,dWidth:t.naturalWidth,dHeight:t.naturalHeight}),r||(r=this.captureCanvasContext),r.drawImage(t,e.sx,e.sy,e.sWidth,e.sHeight,e.dx,e.dy,e.dWidth,e.dHeight)}createBinaryBitmap(t){this.getCaptureCanvasContext(t),this._isHTMLVideoElement(t)?this.drawFrameOnCanvas(t):this.drawImageOnCanvas(t);const e=this.getCaptureCanvas(t),r=new B(e),n=new R(r);return new l(n)}getCaptureCanvasContext(t){if(!this.captureCanvasContext){const e=this.getCaptureCanvas(t).getContext("2d");this.captureCanvasContext=e}return this.captureCanvasContext}getCaptureCanvas(t){if(!this.captureCanvas){const e=this.createCaptureCanvas(t);this.captureCanvas=e}return this.captureCanvas}decodeBitmap(t){return this.reader.decode(t,this._hints)}createCaptureCanvas(t){if("undefined"==typeof document)return this._destroyCaptureCanvas(),null;const e=document.createElement("canvas");let r,n;return void 0!==t&&(t instanceof HTMLVideoElement?(r=t.videoWidth,n=t.videoHeight):t instanceof HTMLImageElement&&(r=t.naturalWidth||t.width,n=t.naturalHeight||t.height)),e.style.width=r+"px",e.style.height=n+"px",e.width=r,e.height=n,e}stopStreams(){this.stream&&(this.stream.getVideoTracks().forEach((t=>t.stop())),this.stream=void 0),!1===this._stopAsyncDecode&&this.stopAsyncDecode(),!1===this._stopContinuousDecode&&this.stopContinuousDecode()}reset(){this.stopStreams(),this._destroyVideoElement(),this._destroyImageElement(),this._destroyCaptureCanvas()}_destroyVideoElement(){this.videoElement&&(void 0!==this.videoEndedListener&&this.videoElement.removeEventListener("ended",this.videoEndedListener),void 0!==this.videoPlayingEventListener&&this.videoElement.removeEventListener("playing",this.videoPlayingEventListener),void 0!==this.videoCanPlayListener&&this.videoElement.removeEventListener("loadedmetadata",this.videoCanPlayListener),this.cleanVideoSource(this.videoElement),this.videoElement=void 0)}_destroyImageElement(){this.imageElement&&(void 0!==this.imageLoadedListener&&this.imageElement.removeEventListener("load",this.imageLoadedListener),this.imageElement.src=void 0,this.imageElement.removeAttribute("src"),this.imageElement=void 0)}_destroyCaptureCanvas(){this.captureCanvasContext=void 0,this.captureCanvas=void 0}addVideoSource(t,e){try{t.srcObject=e}catch(r){t.src=URL.createObjectURL(e)}}cleanVideoSource(t){try{t.srcObject=null}catch(e){t.src=""}this.videoElement.removeAttribute("src")}}class x{constructor(t,e,r=(null==e?0:8*e.length),n,i,o=d.currentTimeMillis()){this.text=t,this.rawBytes=e,this.numBits=r,this.resultPoints=n,this.format=i,this.timestamp=o,this.text=t,this.rawBytes=e,this.numBits=null==r?null==e?0:8*e.length:r,this.resultPoints=n,this.format=i,this.resultMetadata=null,this.timestamp=null==o?d.currentTimeMillis():o}getText(){return this.text}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}getResultPoints(){return this.resultPoints}getBarcodeFormat(){return this.format}getResultMetadata(){return this.resultMetadata}putMetadata(t,e){null===this.resultMetadata&&(this.resultMetadata=new Map),this.resultMetadata.set(t,e)}putAllMetadata(t){null!==t&&(null===this.resultMetadata?this.resultMetadata=t:this.resultMetadata=new Map(t))}addResultPoints(t){const e=this.resultPoints;if(null===e)this.resultPoints=t;else if(null!==t&&t.length>0){const r=new Array(e.length+t.length);d.arraycopy(e,0,r,0,e.length),d.arraycopy(t,0,r,e.length,t.length),this.resultPoints=r}}getTimestamp(){return this.timestamp}toString(){return this.text}}!function(t){t[t.AZTEC=0]="AZTEC",t[t.CODABAR=1]="CODABAR",t[t.CODE_39=2]="CODE_39",t[t.CODE_93=3]="CODE_93",t[t.CODE_128=4]="CODE_128",t[t.DATA_MATRIX=5]="DATA_MATRIX",t[t.EAN_8=6]="EAN_8",t[t.EAN_13=7]="EAN_13",t[t.ITF=8]="ITF",t[t.MAXICODE=9]="MAXICODE",t[t.PDF_417=10]="PDF_417",t[t.QR_CODE=11]="QR_CODE",t[t.RSS_14=12]="RSS_14",t[t.RSS_EXPANDED=13]="RSS_EXPANDED",t[t.UPC_A=14]="UPC_A",t[t.UPC_E=15]="UPC_E",t[t.UPC_EAN_EXTENSION=16]="UPC_EAN_EXTENSION"}(P||(P={}));var k,U=P;!function(t){t[t.OTHER=0]="OTHER",t[t.ORIENTATION=1]="ORIENTATION",t[t.BYTE_SEGMENTS=2]="BYTE_SEGMENTS",t[t.ERROR_CORRECTION_LEVEL=3]="ERROR_CORRECTION_LEVEL",t[t.ISSUE_NUMBER=4]="ISSUE_NUMBER",t[t.SUGGESTED_PRICE=5]="SUGGESTED_PRICE",t[t.POSSIBLE_COUNTRY=6]="POSSIBLE_COUNTRY",t[t.UPC_EAN_EXTENSION=7]="UPC_EAN_EXTENSION",t[t.PDF417_EXTRA_METADATA=8]="PDF417_EXTRA_METADATA",t[t.STRUCTURED_APPEND_SEQUENCE=9]="STRUCTURED_APPEND_SEQUENCE",t[t.STRUCTURED_APPEND_PARITY=10]="STRUCTURED_APPEND_PARITY"}(k||(k={}));var H,V,z,G,Y,X,W=k;class j{constructor(t,e,r,n,i=-1,o=-1){this.rawBytes=t,this.text=e,this.byteSegments=r,this.ecLevel=n,this.structuredAppendSequenceNumber=i,this.structuredAppendParity=o,this.numBits=null==t?0:8*t.length}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}setNumBits(t){this.numBits=t}getText(){return this.text}getByteSegments(){return this.byteSegments}getECLevel(){return this.ecLevel}getErrorsCorrected(){return this.errorsCorrected}setErrorsCorrected(t){this.errorsCorrected=t}getErasures(){return this.erasures}setErasures(t){this.erasures=t}getOther(){return this.other}setOther(t){this.other=t}hasStructuredAppend(){return this.structuredAppendParity>=0&&this.structuredAppendSequenceNumber>=0}getStructuredAppendParity(){return this.structuredAppendParity}getStructuredAppendSequenceNumber(){return this.structuredAppendSequenceNumber}}class Z{exp(t){return this.expTable[t]}log(t){if(0===t)throw new c;return this.logTable[t]}static addOrSubtract(t,e){return t^e}}class Q{constructor(t,e){if(0===e.length)throw new c;this.field=t;const r=e.length;if(r>1&&0===e[0]){let t=1;for(;tr.length){const t=e;e=r,r=t}let n=new Int32Array(r.length);const i=r.length-e.length;d.arraycopy(r,0,n,0,i);for(let t=i;t=t.getDegree()&&!n.isZero();){const i=n.getDegree()-t.getDegree(),s=e.multiply(n.getCoefficient(n.getDegree()),o),a=t.multiplyByMonomial(i,s),c=e.buildMonomial(i,s);r=r.addOrSubtract(c),n=n.addOrSubtract(a)}return[r,n]}toString(){let t="";for(let e=this.getDegree();e>=0;e--){let r=this.getCoefficient(e);if(0!==r){if(r<0?(t+=" - ",r=-r):t.length>0&&(t+=" + "),0===e||1!==r){const e=this.field.log(r);0===e?t+="1":1===e?t+="a":(t+="a^",t+=e)}0!==e&&(1===e?t+="x":(t+="x^",t+=e))}}return t}}class K extends s{}K.kind="ArithmeticException";class q extends Z{constructor(t,e,r){super(),this.primitive=t,this.size=e,this.generatorBase=r;const n=new Int32Array(e);let i=1;for(let r=0;r=e&&(i^=t,i&=e-1);this.expTable=n;const o=new Int32Array(e);for(let t=0;t=(r/2|0);){let t=i,e=s;if(i=o,s=a,i.isZero())throw new J("r_{i-1} was zero");o=t;let r=n.getZero();const c=i.getCoefficient(i.getDegree()),l=n.inverse(c);for(;o.getDegree()>=i.getDegree()&&!o.isZero();){const t=o.getDegree()-i.getDegree(),e=n.multiply(o.getCoefficient(o.getDegree()),l);r=r.addOrSubtract(n.buildMonomial(t,e)),o=o.addOrSubtract(i.multiplyByMonomial(t,e))}if(a=r.multiply(s).addOrSubtract(e),o.getDegree()>=i.getDegree())throw new $("Division algorithm failed to reduce polynomial?")}const c=a.getCoefficient(0);if(0===c)throw new J("sigmaTilde(0) was zero");const l=n.inverse(c);return[a.multiplyScalar(l),o.multiplyScalar(l)]}findErrorLocations(t){const e=t.getDegree();if(1===e)return Int32Array.from([t.getCoefficient(1)]);const r=new Int32Array(e);let n=0;const i=this.field;for(let o=1;o1,h,h+r-1),h+=r-1;else for(let t=r-1;t>=0;--t)l[h++]=0!=(e&1<=8?et.readCode(t,e,8):et.readCode(t,e,r)<<8-r}static convertBoolArrayToByteArray(t){let e=new Uint8Array((t.length+7)/8);for(let r=0;r","?","[","]","{","}","CTRL_UL"],et.DIGIT_TABLE=["CTRL_PS"," ","0","1","2","3","4","5","6","7","8","9",",",".","CTRL_UL","CTRL_US"];class rt{constructor(){}static round(t){return NaN===t?0:t<=Number.MIN_SAFE_INTEGER?Number.MIN_SAFE_INTEGER:t>=Number.MAX_SAFE_INTEGER?Number.MAX_SAFE_INTEGER:t+(t<0?-.5:.5)|0}static distance(t,e,r,n){const i=t-r,o=e-n;return Math.sqrt(i*i+o*o)}static sum(t){let e=0;for(let r=0,n=t.length;r!==n;r++)e+=t[r];return e}}class nt{static floatToIntBits(t){return t}}nt.MAX_VALUE=Number.MAX_SAFE_INTEGER;class it{constructor(t,e){this.x=t,this.y=e}getX(){return this.x}getY(){return this.y}equals(t){if(t instanceof it){const e=t;return this.x===e.x&&this.y===e.y}return!1}hashCode(){return 31*nt.floatToIntBits(this.x)+nt.floatToIntBits(this.y)}toString(){return"("+this.x+","+this.y+")"}static orderBestPatterns(t){const e=this.distance(t[0],t[1]),r=this.distance(t[1],t[2]),n=this.distance(t[0],t[2]);let i,o,s;if(r>=e&&r>=n?(o=t[0],i=t[1],s=t[2]):n>=r&&n>=e?(o=t[1],i=t[0],s=t[2]):(o=t[2],i=t[0],s=t[1]),this.crossProductZ(i,o,s)<0){const t=i;i=s,s=t}t[0]=i,t[1]=o,t[2]=s}static distance(t,e){return rt.distance(t.x,t.y,e.x,e.y)}static crossProductZ(t,e,r){const n=e.x,i=e.y;return(r.x-n)*(t.y-i)-(r.y-i)*(t.x-n)}}class ot{constructor(t,e){this.bits=t,this.points=e}getBits(){return this.bits}getPoints(){return this.points}}class st extends ot{constructor(t,e,r,n,i){super(t,e),this.compact=r,this.nbDatablocks=n,this.nbLayers=i}getNbLayers(){return this.nbLayers}getNbDatablocks(){return this.nbDatablocks}isCompact(){return this.compact}}class at{constructor(t,e,r,n){this.image=t,this.height=t.getHeight(),this.width=t.getWidth(),null==e&&(e=at.INIT_SIZE),null==r&&(r=t.getWidth()/2|0),null==n&&(n=t.getHeight()/2|0);const i=e/2|0;if(this.leftInit=r-i,this.rightInit=r+i,this.upInit=n-i,this.downInit=n+i,this.upInit<0||this.leftInit<0||this.downInit>=this.height||this.rightInit>=this.width)throw new D}detect(){let t=this.leftInit,e=this.rightInit,r=this.upInit,n=this.downInit,i=!1,o=!0,s=!1,a=!1,c=!1,l=!1,h=!1;const u=this.width,d=this.height;for(;o;){o=!1;let f=!0;for(;(f||!a)&&e=u){i=!0;break}let g=!0;for(;(g||!c)&&n=d){i=!0;break}let w=!0;for(;(w||!l)&&t>=0;)w=this.containsBlackPoint(r,n,t,!1),w?(t--,o=!0,l=!0):l||t--;if(t<0){i=!0;break}let m=!0;for(;(m||!h)&&r>=0;)m=this.containsBlackPoint(t,e,r,!0),m?(r--,o=!0,h=!0):h||r--;if(r<0){i=!0;break}o&&(s=!0)}if(!i&&s){const i=e-t;let o=null;for(let e=1;null===o&&er||s<-1||s>n)throw new D;i=!1,-1===o?(e[t]=0,i=!0):o===r&&(e[t]=r-1,i=!0),-1===s?(e[t+1]=0,i=!0):s===n&&(e[t+1]=n-1,i=!0)}i=!0;for(let t=e.length-2;t>=0&&i;t-=2){const o=Math.floor(e[t]),s=Math.floor(e[t+1]);if(o<-1||o>r||s<-1||s>n)throw new D;i=!1,-1===o?(e[t]=0,i=!0):o===r&&(e[t]=r-1,i=!0),-1===s?(e[t+1]=0,i=!0):s===n&&(e[t+1]=n-1,i=!0)}}}class lt{constructor(t,e,r,n,i,o,s,a,c){this.a11=t,this.a21=e,this.a31=r,this.a12=n,this.a22=i,this.a32=o,this.a13=s,this.a23=a,this.a33=c}static quadrilateralToQuadrilateral(t,e,r,n,i,o,s,a,c,l,h,u,d,f,g,w){const m=lt.quadrilateralToSquare(t,e,r,n,i,o,s,a);return lt.squareToQuadrilateral(c,l,h,u,d,f,g,w).times(m)}transformPoints(t){const e=t.length,r=this.a11,n=this.a12,i=this.a13,o=this.a21,s=this.a22,a=this.a23,c=this.a31,l=this.a32,h=this.a33;for(let u=0;u>1&127):(n<<=10,n+=(e>>2&992)+(e>>1&31))}let i=this.getCorrectedParameterData(n,this.compact);this.compact?(this.nbLayers=1+(i>>6),this.nbDataBlocks=1+(63&i)):(this.nbLayers=1+(i>>11),this.nbDataBlocks=1+(2047&i))}getRotation(t,e){let r=0;t.forEach(((t,n,i)=>{r=(t>>e-2<<1)+(1&t)+(r<<3)})),r=((1&r)<<11)+(r>>1);for(let t=0;t<4;t++)if(m.bitCount(r^this.EXPECTED_CORNER_BITS[t])<=2)return t;throw new D}getCorrectedParameterData(t,e){let r,n;e?(r=7,n=2):(r=10,n=4);let i=r-n,o=new Int32Array(r);for(let e=r-1;e>=0;--e)o[e]=15&t,t>>=4;try{new tt(q.AZTEC_PARAM).decode(o,i)}catch(t){throw new D}let s=0;for(let t=0;t2){let r=this.distancePoint(c,t)*this.nbCenterLayers/(this.distancePoint(i,e)*(this.nbCenterLayers+2));if(r<.75||r>1.25||!this.isWhiteOrBlackRectangle(t,s,a,c))break}e=t,r=s,n=a,i=c,o=!o}if(5!==this.nbCenterLayers&&7!==this.nbCenterLayers)throw new D;this.compact=5===this.nbCenterLayers;let s=new it(e.getX()+.5,e.getY()-.5),a=new it(r.getX()+.5,r.getY()+.5),c=new it(n.getX()-.5,n.getY()+.5),l=new it(i.getX()-.5,i.getY()-.5);return this.expandSquare([s,a,c,l],2*this.nbCenterLayers-3,2*this.nbCenterLayers)}getMatrixCenter(){let t,e,r,n;try{let i=new at(this.image).detect();t=i[0],e=i[1],r=i[2],n=i[3]}catch(i){let o=this.image.getWidth()/2,s=this.image.getHeight()/2;t=this.getFirstDifferent(new dt(o+7,s-7),!1,1,-1).toResultPoint(),e=this.getFirstDifferent(new dt(o+7,s+7),!1,1,1).toResultPoint(),r=this.getFirstDifferent(new dt(o-7,s+7),!1,-1,1).toResultPoint(),n=this.getFirstDifferent(new dt(o-7,s-7),!1,-1,-1).toResultPoint()}let i=rt.round((t.getX()+n.getX()+e.getX()+r.getX())/4),o=rt.round((t.getY()+n.getY()+e.getY()+r.getY())/4);try{let s=new at(this.image,15,i,o).detect();t=s[0],e=s[1],r=s[2],n=s[3]}catch(s){t=this.getFirstDifferent(new dt(i+7,o-7),!1,1,-1).toResultPoint(),e=this.getFirstDifferent(new dt(i+7,o+7),!1,1,1).toResultPoint(),r=this.getFirstDifferent(new dt(i-7,o+7),!1,-1,1).toResultPoint(),n=this.getFirstDifferent(new dt(i-7,o-7),!1,-1,-1).toResultPoint()}return i=rt.round((t.getX()+n.getX()+e.getX()+r.getX())/4),o=rt.round((t.getY()+n.getY()+e.getY()+r.getY())/4),new dt(i,o)}getMatrixCornerPoints(t){return this.expandSquare(t,2*this.nbCenterLayers,this.getDimension())}sampleGrid(t,e,r,n,i){let o=ut.getInstance(),s=this.getDimension(),a=s/2-this.nbCenterLayers,c=s/2+this.nbCenterLayers;return o.sampleGrid(t,s,s,a,a,c,a,c,c,a,c,e.getX(),e.getY(),r.getX(),r.getY(),n.getX(),n.getY(),i.getX(),i.getY())}sampleLine(t,e,r){let n=0,i=this.distanceResultPoint(t,e),o=i/r,s=t.getX(),a=t.getY(),c=o*(e.getX()-t.getX())/i,l=o*(e.getY()-t.getY())/i;for(let t=0;t.1&&h<.9?0:h<=.1===c?1:-1}getFirstDifferent(t,e,r,n){let i=t.getX()+r,o=t.getY()+n;for(;this.isValid(i,o)&&this.image.get(i,o)===e;)i+=r,o+=n;for(i-=r,o-=n;this.isValid(i,o)&&this.image.get(i,o)===e;)i+=r;for(i-=r;this.isValid(i,o)&&this.image.get(i,o)===e;)o+=n;return o-=n,new dt(i,o)}expandSquare(t,e,r){let n=r/(2*e),i=t[0].getX()-t[2].getX(),o=t[0].getY()-t[2].getY(),s=(t[0].getX()+t[2].getX())/2,a=(t[0].getY()+t[2].getY())/2,c=new it(s+n*i,a+n*o),l=new it(s-n*i,a-n*o);return i=t[1].getX()-t[3].getX(),o=t[1].getY()-t[3].getY(),s=(t[1].getX()+t[3].getX())/2,a=(t[1].getY()+t[3].getY())/2,[c,new it(s+n*i,a+n*o),l,new it(s-n*i,a-n*o)]}isValid(t,e){return t>=0&&t0&&e{r.foundPossibleResultPoint(t)}))}}reset(){}}class wt{decode(t,e){try{return this.doDecode(t,e)}catch(r){if(e&&!0===e.get(C.TRY_HARDER)&&t.isRotateSupported()){const r=t.rotateCounterClockwise(),n=this.doDecode(r,e),i=n.getResultMetadata();let o=270;null!==i&&!0===i.get(W.ORIENTATION)&&(o+=i.get(W.ORIENTATION)%360),n.putMetadata(W.ORIENTATION,o);const s=n.getResultPoints();if(null!==s){const t=r.getHeight();for(let e=0;e>(o?8:5));let a;a=o?n:15;const c=Math.trunc(n/2);for(let o=0;o=n)break;try{i=t.getBlackRow(l,i)}catch(t){continue}for(let t=0;t<2;t++){if(1===t&&(i.reverse(),e&&!0===e.get(C.NEED_RESULT_POINT_CALLBACK))){const t=new Map;e.forEach(((e,r)=>t.set(r,e))),t.delete(C.NEED_RESULT_POINT_CALLBACK),e=t}try{const n=this.decodeRow(l,i,e);if(1===t){n.putMetadata(W.ORIENTATION,180);const t=n.getResultPoints();null!==t&&(t[0]=new it(r-t[0].getX()-1,t[0].getY()),t[1]=new it(r-t[1].getX()-1,t[1].getY()))}return n}catch(t){}}}throw new D}static recordPattern(t,e,r){const n=r.length;for(let t=0;t=i)throw new D;let o=!t.get(e),s=0,a=e;for(;a0&&n>=0;)t.get(--e)!==i&&(n--,i=!i);if(n>=0)throw new D;wt.recordPattern(t,e+1,r)}static patternMatchVariance(t,e,r){const n=t.length;let i=0,o=0;for(let r=0;ro?n-o:o-n;if(c>r)return Number.POSITIVE_INFINITY;a+=c}return a/i}}class mt extends wt{static findStartPattern(t){const e=t.getSize(),r=t.getNextSet(0);let n=0,i=Int32Array.from([0,0,0,0,0,0]),o=r,s=!1;for(let a=r;a=0&&t.isRange(Math.max(0,o-(a-o)/2),o,!1))return Int32Array.from([o,a,r]);o+=i[0]+i[1],i=i.slice(2,i.length-1),i[n-1]=0,i[n]=0,n--}else n++;i[n]=1,s=!s}throw new D}static decodeCode(t,e,r){wt.recordPattern(t,r,e);let n=mt.MAX_AVG_VARIANCE,i=-1;for(let t=0;t=0)return i;throw new D}decodeRow(t,e,r){const n=r&&!0===r.get(C.ASSUME_GS1),i=mt.findStartPattern(e),o=i[2];let s=0;const a=new Uint8Array(20);let c;switch(a[s++]=o,o){case mt.CODE_START_A:c=mt.CODE_CODE_A;break;case mt.CODE_START_B:c=mt.CODE_CODE_B;break;case mt.CODE_START_C:c=mt.CODE_CODE_C;break;default:throw new E}let l=!1,u=!1,d="",f=i[0],g=i[1];const w=Int32Array.from([0,0,0,0,0,0]);let m=0,p=0,A=o,I=0,S=!0,_=!1,T=!1;for(;!l;){const t=u;switch(u=!1,m=p,p=mt.decodeCode(e,w,g),a[s++]=p,p!==mt.CODE_STOP&&(S=!0),p!==mt.CODE_STOP&&(I++,A+=I*p),f=g,g+=w.reduce(((t,e)=>t+e),0),p){case mt.CODE_START_A:case mt.CODE_START_B:case mt.CODE_START_C:throw new E}switch(c){case mt.CODE_CODE_A:if(p<64)d+=T===_?String.fromCharCode(" ".charCodeAt(0)+p):String.fromCharCode(" ".charCodeAt(0)+p+128),T=!1;else if(p<96)d+=T===_?String.fromCharCode(p-64):String.fromCharCode(p+64),T=!1;else switch(p!==mt.CODE_STOP&&(S=!1),p){case mt.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case mt.CODE_FNC_2:case mt.CODE_FNC_3:break;case mt.CODE_FNC_4_A:!_&&T?(_=!0,T=!1):_&&T?(_=!1,T=!1):T=!0;break;case mt.CODE_SHIFT:u=!0,c=mt.CODE_CODE_B;break;case mt.CODE_CODE_B:c=mt.CODE_CODE_B;break;case mt.CODE_CODE_C:c=mt.CODE_CODE_C;break;case mt.CODE_STOP:l=!0}break;case mt.CODE_CODE_B:if(p<96)d+=T===_?String.fromCharCode(" ".charCodeAt(0)+p):String.fromCharCode(" ".charCodeAt(0)+p+128),T=!1;else switch(p!==mt.CODE_STOP&&(S=!1),p){case mt.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case mt.CODE_FNC_2:case mt.CODE_FNC_3:break;case mt.CODE_FNC_4_B:!_&&T?(_=!0,T=!1):_&&T?(_=!1,T=!1):T=!0;break;case mt.CODE_SHIFT:u=!0,c=mt.CODE_CODE_A;break;case mt.CODE_CODE_A:c=mt.CODE_CODE_A;break;case mt.CODE_CODE_C:c=mt.CODE_CODE_C;break;case mt.CODE_STOP:l=!0}break;case mt.CODE_CODE_C:if(p<100)p<10&&(d+="0"),d+=p;else switch(p!==mt.CODE_STOP&&(S=!1),p){case mt.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case mt.CODE_CODE_A:c=mt.CODE_CODE_A;break;case mt.CODE_CODE_B:c=mt.CODE_CODE_B;break;case mt.CODE_STOP:l=!0}}t&&(c=c===mt.CODE_CODE_A?mt.CODE_CODE_B:mt.CODE_CODE_A)}const y=g-f;if(g=e.getNextUnset(g),!e.isRange(g,Math.min(e.getSize(),g+(g-f)/2),!1))throw new D;if(A-=I*m,A%103!==m)throw new h;const N=d.length;if(0===N)throw new D;N>0&&S&&(d=c===mt.CODE_CODE_C?d.substring(0,N-2):d.substring(0,N-1));const M=(i[1]+i[0])/2,R=f+y/2,O=a.length,b=new Uint8Array(O);for(let t=0;tn&&(i=e);n=i,e=0;let o=0,s=0;for(let i=0;in&&(s|=1<0;i++){let r=t[i];if(r>n&&(e--,2*r>=o))return-1}return s}}while(e>3);return-1}static patternToChar(t){for(let e=0;e="A"&&i<="Z"))throw new E;o=String.fromCharCode(i.charCodeAt(0)+32);break;case"$":if(!(i>="A"&&i<="Z"))throw new E;o=String.fromCharCode(i.charCodeAt(0)-64);break;case"%":if(i>="A"&&i<="E")o=String.fromCharCode(i.charCodeAt(0)-38);else if(i>="F"&&i<="J")o=String.fromCharCode(i.charCodeAt(0)-11);else if(i>="K"&&i<="O")o=String.fromCharCode(i.charCodeAt(0)+16);else if(i>="P"&&i<="T")o=String.fromCharCode(i.charCodeAt(0)+43);else if("U"===i)o="\0";else if("V"===i)o="@";else if("W"===i)o="`";else{if("X"!==i&&"Y"!==i&&"Z"!==i)throw new E;o=""}break;case"/":if(i>="A"&&i<="O")o=String.fromCharCode(i.charCodeAt(0)-32);else{if("Z"!==i)throw new E;o=":"}}r+=o,n++}else r+=e}return r}}pt.ALPHABET_STRING="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%",pt.CHARACTER_ENCODINGS=[52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,168,162,138,42],pt.ASTERISK_ENCODING=148;class At extends wt{constructor(){super(...arguments),this.narrowLineWidth=-1}decodeRow(t,e,r){let n=this.decodeStart(e),i=this.decodeEnd(e),o=new y;At.decodeMiddle(e,n[1],i[0],o);let s=o.toString(),a=null;null!=r&&(a=r.get(C.ALLOWED_LENGTHS)),null==a&&(a=At.DEFAULT_ALLOWED_LENGTHS);let c=s.length,l=!1,h=0;for(let t of a){if(c===t){l=!0;break}t>h&&(h=t)}if(!l&&c>h&&(l=!0),!l)throw new E;const u=[new it(n[1],t),new it(i[0],t)];return new x(s,null,0,u,U.ITF,(new Date).getTime())}static decodeMiddle(t,e,r,n){let i=new Int32Array(10),o=new Int32Array(5),s=new Int32Array(5);for(i.fill(0),o.fill(0),s.fill(0);e0&&n>=0&&!t.get(n);n--)r--;if(0!==r)throw new D}static skipWhiteSpace(t){const e=t.getSize(),r=t.getNextSet(0);if(r===e)throw new D;return r}decodeEnd(t){t.reverse();try{let e,r=At.skipWhiteSpace(t);try{e=At.findGuardPattern(t,r,At.END_PATTERN_REVERSED[0])}catch(n){n instanceof D&&(e=At.findGuardPattern(t,r,At.END_PATTERN_REVERSED[1]))}this.validateQuietZone(t,e[0]);let n=e[0];return e[0]=t.getSize()-e[1],e[1]=t.getSize()-n,e}finally{t.reverse()}}static findGuardPattern(t,e,r){let n=r.length,i=new Int32Array(n),o=t.getSize(),s=!1,a=0,c=e;i.fill(0);for(let l=e;l=0)return r%10;throw new D}}At.PATTERNS=[Int32Array.from([1,1,2,2,1]),Int32Array.from([2,1,1,1,2]),Int32Array.from([1,2,1,1,2]),Int32Array.from([2,2,1,1,1]),Int32Array.from([1,1,2,1,2]),Int32Array.from([2,1,2,1,1]),Int32Array.from([1,2,2,1,1]),Int32Array.from([1,1,1,2,2]),Int32Array.from([2,1,1,2,1]),Int32Array.from([1,2,1,2,1]),Int32Array.from([1,1,3,3,1]),Int32Array.from([3,1,1,1,3]),Int32Array.from([1,3,1,1,3]),Int32Array.from([3,3,1,1,1]),Int32Array.from([1,1,3,1,3]),Int32Array.from([3,1,3,1,1]),Int32Array.from([1,3,3,1,1]),Int32Array.from([1,1,1,3,3]),Int32Array.from([3,1,1,3,1]),Int32Array.from([1,3,1,3,1])],At.MAX_AVG_VARIANCE=.38,At.MAX_INDIVIDUAL_VARIANCE=.5,At.DEFAULT_ALLOWED_LENGTHS=[6,8,10,12,14],At.START_PATTERN=Int32Array.from([1,1,1,1]),At.END_PATTERN_REVERSED=[Int32Array.from([1,1,2]),Int32Array.from([1,1,3])];class Ct extends wt{constructor(){super(...arguments),this.decodeRowStringBuffer=""}static findStartGuardPattern(t){let e,r=!1,n=0,i=Int32Array.from([0,0,0]);for(;!r;){i=Int32Array.from([0,0,0]),e=Ct.findGuardPattern(t,n,!1,this.START_END_PATTERN,i);let o=e[0];n=e[1];let s=o-(n-o);s>=0&&(r=t.isRange(s,o,!1))}return e}static checkChecksum(t){return Ct.checkStandardUPCEANChecksum(t)}static checkStandardUPCEANChecksum(t){let e=t.length;if(0===e)return!1;let r=parseInt(t.charAt(e-1),10);return Ct.getStandardUPCEANChecksum(t.substring(0,e-1))===r}static getStandardUPCEANChecksum(t){let e=t.length,r=0;for(let n=e-1;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}r*=3;for(let n=e-2;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}return(1e3-r)%10}static decodeEnd(t,e){return Ct.findGuardPattern(t,e,!1,Ct.START_END_PATTERN,new Int32Array(Ct.START_END_PATTERN.length).fill(0))}static findGuardPatternWithoutCounters(t,e,r,n){return this.findGuardPattern(t,e,r,n,new Int32Array(n.length))}static findGuardPattern(t,e,r,n,i){let o=t.getSize(),s=0,a=e=r?t.getNextUnset(e):t.getNextSet(e),c=n.length,l=r;for(let r=e;r=0)return o;throw new D}}Ct.MAX_AVG_VARIANCE=.48,Ct.MAX_INDIVIDUAL_VARIANCE=.7,Ct.START_END_PATTERN=Int32Array.from([1,1,1]),Ct.MIDDLE_PATTERN=Int32Array.from([1,1,1,1,1]),Ct.END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Ct.L_PATTERNS=[Int32Array.from([3,2,1,1]),Int32Array.from([2,2,2,1]),Int32Array.from([2,1,2,2]),Int32Array.from([1,4,1,1]),Int32Array.from([1,1,3,2]),Int32Array.from([1,2,3,1]),Int32Array.from([1,1,1,4]),Int32Array.from([1,3,1,2]),Int32Array.from([1,2,1,3]),Int32Array.from([3,1,1,2])];class Et{constructor(){this.CHECK_DIGIT_ENCODINGS=[24,20,18,17,12,6,3,10,9,5],this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(t,e,r){let n=this.decodeRowStringBuffer,i=this.decodeMiddle(e,r,n),o=n.toString(),s=Et.parseExtensionString(o),a=[new it((r[0]+r[1])/2,t),new it(i,t)],c=new x(o,null,0,a,U.UPC_EAN_EXTENSION,(new Date).getTime());return null!=s&&c.putAllMetadata(s),c}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),o=e[1],s=0;for(let e=0;e<5&&o=10&&(s|=1<<4-e),4!==e&&(o=t.getNextSet(o),o=t.getNextUnset(o))}if(5!==r.length)throw new D;let a=this.determineCheckDigit(s);if(Et.extensionChecksum(r.toString())!==a)throw new D;return o}static extensionChecksum(t){let e=t.length,r=0;for(let n=e-2;n>=0;n-=2)r+=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);r*=3;for(let n=e-1;n>=0;n-=2)r+=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);return r*=3,r%10}determineCheckDigit(t){for(let e=0;e<10;e++)if(t===this.CHECK_DIGIT_ENCODINGS[e])return e;throw new D}static parseExtensionString(t){if(5!==t.length)return null;let e=Et.parseExtension5String(t);return null==e?null:new Map([[W.SUGGESTED_PRICE,e]])}static parseExtension5String(t){let e;switch(t.charAt(0)){case"0":e="£";break;case"5":e="$";break;case"9":switch(t){case"90000":return null;case"99991":return"0.00";case"99990":return"Used"}e="";break;default:e=""}let r=parseInt(t.substring(1)),n=r%100;return e+(r/100).toString()+"."+(n<10?"0"+n:n.toString())}}class It{constructor(){this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(t,e,r){let n=this.decodeRowStringBuffer,i=this.decodeMiddle(e,r,n),o=n.toString(),s=It.parseExtensionString(o),a=[new it((r[0]+r[1])/2,t),new it(i,t)],c=new x(o,null,0,a,U.UPC_EAN_EXTENSION,(new Date).getTime());return null!=s&&c.putAllMetadata(s),c}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),o=e[1],s=0;for(let e=0;e<2&&o=10&&(s|=1<<1-e),1!==e&&(o=t.getNextSet(o),o=t.getNextUnset(o))}if(2!==r.length)throw new D;if(parseInt(r.toString())%4!==s)throw new D;return o}static parseExtensionString(t){return 2!==t.length?null:new Map([[W.ISSUE_NUMBER,parseInt(t)]])}}class St{static decodeRow(t,e,r){let n=Ct.findGuardPattern(e,r,!1,this.EXTENSION_START_PATTERN,new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));try{return(new Et).decodeRow(t,e,n)}catch(r){return(new It).decodeRow(t,e,n)}}}St.EXTENSION_START_PATTERN=Int32Array.from([1,1,2]);class _t extends Ct{constructor(){super(),this.decodeRowStringBuffer="",_t.L_AND_G_PATTERNS=_t.L_PATTERNS.map((t=>Int32Array.from(t)));for(let t=10;t<20;t++){let e=_t.L_PATTERNS[t-10],r=new Int32Array(e.length);for(let t=0;t=e.getSize()||!e.isRange(l,u,!1))throw new D;let d=a.toString();if(d.length<8)throw new E;if(!_t.checkChecksum(d))throw new h;let f=(n[1]+n[0])/2,g=(c[1]+c[0])/2,w=this.getBarcodeFormat(),m=[new it(f,t),new it(g,t)],p=new x(d,null,0,m,w,(new Date).getTime()),A=0;try{let r=St.decodeRow(t,e,c[1]);p.putMetadata(W.UPC_EAN_EXTENSION,r.getText()),p.putAllMetadata(r.getResultMetadata()),p.addResultPoints(r.getResultPoints()),A=r.getText().length}catch(t){}let I=null==r?null:r.get(C.ALLOWED_EAN_EXTENSIONS);if(null!=I){let t=!1;for(let e in I)if(A.toString()===e){t=!0;break}if(!t)throw new D}return p}decodeEnd(t,e){return _t.findGuardPattern(t,e,!1,_t.START_END_PATTERN,new Int32Array(_t.START_END_PATTERN.length).fill(0))}static checkChecksum(t){return _t.checkStandardUPCEANChecksum(t)}static checkStandardUPCEANChecksum(t){let e=t.length;if(0===e)return!1;let r=parseInt(t.charAt(e-1),10);return _t.getStandardUPCEANChecksum(t.substring(0,e-1))===r}static getStandardUPCEANChecksum(t){let e=t.length,r=0;for(let n=e-1;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}r*=3;for(let n=e-2;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}return(1e3-r)%10}}class Tt extends _t{constructor(){super(),this.decodeMiddleCounters=Int32Array.from([0,0,0,0])}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),o=e[1],s=0;for(let e=0;e<6&&o=10&&(s|=1<<5-e)}r=Tt.determineFirstDigit(r,s),o=_t.findGuardPattern(t,o,!0,_t.MIDDLE_PATTERN,new Int32Array(_t.MIDDLE_PATTERN.length).fill(0))[1];for(let e=0;e<6&&ot));n[0]=0,n[1]=0,n[2]=0,n[3]=0;const i=t.getSize();let o=e[1],s=0;for(let e=0;e<6&&o=10&&(s|=1<<5-e)}return{rowOffset:o,resultString:Dt.determineNumSysAndCheckDigit(r,s)}}decodeEnd(t,e){return Dt.findGuardPatternWithoutCounters(t,e,!0,Dt.MIDDLE_END_PATTERN)}checkChecksum(t){return _t.checkChecksum(Dt.convertUPCEtoUPCA(t))}static determineNumSysAndCheckDigit(t,e){for(let r=0;r<=1;r++)for(let n=0;n<10;n++)if(e===this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[r][n])return String.fromCharCode("0".charCodeAt(0)+r)+t+String.fromCharCode("0".charCodeAt(0)+n);throw D.getNotFoundInstance()}getBarcodeFormat(){return U.UPC_E}static convertUPCEtoUPCA(t){const e=t.slice(1,7).split("").map((t=>t.charCodeAt(0))),r=new y;r.append(t.charAt(0));let n=e[5];switch(n){case 0:case 1:case 2:r.appendChars(e,0,2),r.append(n),r.append("0000"),r.appendChars(e,2,3);break;case 3:r.appendChars(e,0,3),r.append("00000"),r.appendChars(e,3,2);break;case 4:r.appendChars(e,0,4),r.append("00000"),r.append(e[4]);break;default:r.appendChars(e,0,5),r.append("0000"),r.append(n)}return t.length>=8&&r.append(t.charAt(7)),r.toString()}}Dt.MIDDLE_END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Dt.NUMSYS_AND_CHECK_DIGIT_PATTERNS=[Int32Array.from([56,52,50,49,44,38,35,42,41,37]),Int32Array.from([7,11,13,14,19,25,28,21,22,26])];class Mt extends wt{constructor(t){super();let r=null==t?null:t.get(C.POSSIBLE_FORMATS),n=[];e(r)?(n.push(new Tt),n.push(new Nt),n.push(new yt),n.push(new Dt)):(r.indexOf(U.EAN_13)>-1&&n.push(new Tt),r.indexOf(U.UPC_A)>-1&&n.push(new Nt),r.indexOf(U.EAN_8)>-1&&n.push(new yt),r.indexOf(U.UPC_E)>-1&&n.push(new Dt)),this.readers=n}decodeRow(t,e,r){for(let n of this.readers)try{const i=n.decodeRow(t,e,r),o=i.getBarcodeFormat()===U.EAN_13&&"0"===i.getText().charAt(0),s=null==r?null:r.get(C.POSSIBLE_FORMATS),a=null==s||s.includes(U.UPC_A);if(o&&a){const t=i.getRawBytes(),e=new x(i.getText().substring(1),t,t?t.length:null,i.getResultPoints(),U.UPC_A);return e.putAllMetadata(i.getResultMetadata()),e}return i}catch(t){}throw new D}reset(){for(let t of this.readers)t.reset()}}class Rt extends wt{constructor(){super(),this.decodeFinderCounters=new Int32Array(4),this.dataCharacterCounters=new Int32Array(8),this.oddRoundingErrors=new Array(4),this.evenRoundingErrors=new Array(4),this.oddCounts=new Array(this.dataCharacterCounters.length/2),this.evenCounts=new Array(this.dataCharacterCounters.length/2)}getDecodeFinderCounters(){return this.decodeFinderCounters}getDataCharacterCounters(){return this.dataCharacterCounters}getOddRoundingErrors(){return this.oddRoundingErrors}getEvenRoundingErrors(){return this.evenRoundingErrors}getOddCounts(){return this.oddCounts}getEvenCounts(){return this.evenCounts}parseFinderValue(t,e){for(let r=0;rn&&(n=e[i],r=i);t[r]++}static decrement(t,e){let r=0,n=e[0];for(let i=1;i=Rt.MIN_FINDER_PATTERN_RATIO&&r<=Rt.MAX_FINDER_PATTERN_RATIO){let e=Number.MAX_SAFE_INTEGER,r=Number.MIN_SAFE_INTEGER;for(let n of t)n>r&&(r=n),n=s-a-1&&(t-=Bt.combins(n-c-(s-a),s-a-2)),s-a-1>1){let r=0;for(let t=n-c-(s-a-2);t>e;t--)r+=Bt.combins(n-c-t-1,s-a-3);t-=r*(s-1-a)}else n-c>e&&t--;i+=t}n-=c}return i}static combins(t,e){let r,n;t-e>e?(n=e,r=t-e):(n=t-e,r=e);let i=1,o=1;for(let e=t;e>r;e--)i*=e,o<=n&&(i/=o,o++);for(;o<=n;)i/=o,o++;return i}}class Lt{static buildBitArray(t){let e=2*t.length-1;null==t[t.length-1].getRightChar()&&(e-=1);let r=new p(12*e),n=0,i=t[0].getRightChar().getValue();for(let t=11;t>=0;--t)0!=(i&1<=0;--t)0!=(o&1<=0;--e)0!=(t&1<10||r<0||r>10)throw new E;this.firstDigit=e,this.secondDigit=r}getFirstDigit(){return this.firstDigit}getSecondDigit(){return this.secondDigit}getValue(){return 10*this.firstDigit+this.secondDigit}isFirstDigitFNC1(){return this.firstDigit===kt.FNC1}isSecondDigitFNC1(){return this.secondDigit===kt.FNC1}isAnyFNC1(){return this.firstDigit===kt.FNC1||this.secondDigit===kt.FNC1}}kt.FNC1=10;class Ut{constructor(){}static parseFieldsInGeneralPurpose(t){if(!t)return null;if(t.length<2)throw new D;let e=t.substring(0,2);for(let r of Ut.TWO_DIGIT_DATA_LENGTH)if(r[0]===e)return r[1]===Ut.VARIABLE_LENGTH?Ut.processVariableAI(2,r[2],t):Ut.processFixedAI(2,r[1],t);if(t.length<3)throw new D;let r=t.substring(0,3);for(let e of Ut.THREE_DIGIT_DATA_LENGTH)if(e[0]===r)return e[1]===Ut.VARIABLE_LENGTH?Ut.processVariableAI(3,e[2],t):Ut.processFixedAI(3,e[1],t);for(let e of Ut.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH)if(e[0]===r)return e[1]===Ut.VARIABLE_LENGTH?Ut.processVariableAI(4,e[2],t):Ut.processFixedAI(4,e[1],t);if(t.length<4)throw new D;let n=t.substring(0,4);for(let e of Ut.FOUR_DIGIT_DATA_LENGTH)if(e[0]===n)return e[1]===Ut.VARIABLE_LENGTH?Ut.processVariableAI(4,e[2],t):Ut.processFixedAI(4,e[1],t);throw new D}static processFixedAI(t,e,r){if(r.lengththis.information.getSize())return t+4<=this.information.getSize();for(let e=t;ethis.information.getSize()){let e=this.extractNumericValueFromBitArray(t,4);return new kt(this.information.getSize(),0===e?kt.FNC1:e-1,kt.FNC1)}let e=this.extractNumericValueFromBitArray(t,7);return new kt(t+7,(e-8)/11,(e-8)%11)}extractNumericValueFromBitArray(t,e){return Ht.extractNumericValueFromBitArray(this.information,t,e)}static extractNumericValueFromBitArray(t,e,r){let n=0;for(let i=0;ithis.information.getSize())return!1;let e=this.extractNumericValueFromBitArray(t,5);if(e>=5&&e<16)return!0;if(t+7>this.information.getSize())return!1;let r=this.extractNumericValueFromBitArray(t,7);if(r>=64&&r<116)return!0;if(t+8>this.information.getSize())return!1;let n=this.extractNumericValueFromBitArray(t,8);return n>=232&&n<253}decodeIsoIec646(t){let e=this.extractNumericValueFromBitArray(t,5);if(15===e)return new Ft(t+5,Ft.FNC1);if(e>=5&&e<15)return new Ft(t+5,"0"+(e-5));let r,n=this.extractNumericValueFromBitArray(t,7);if(n>=64&&n<90)return new Ft(t+7,""+(n+1));if(n>=90&&n<116)return new Ft(t+7,""+(n+7));switch(this.extractNumericValueFromBitArray(t,8)){case 232:r="!";break;case 233:r='"';break;case 234:r="%";break;case 235:r="&";break;case 236:r="'";break;case 237:r="(";break;case 238:r=")";break;case 239:r="*";break;case 240:r="+";break;case 241:r=",";break;case 242:r="-";break;case 243:r=".";break;case 244:r="/";break;case 245:r=":";break;case 246:r=";";break;case 247:r="<";break;case 248:r="=";break;case 249:r=">";break;case 250:r="?";break;case 251:r="_";break;case 252:r=" ";break;default:throw new E}return new Ft(t+8,r)}isStillAlpha(t){if(t+5>this.information.getSize())return!1;let e=this.extractNumericValueFromBitArray(t,5);if(e>=5&&e<16)return!0;if(t+6>this.information.getSize())return!1;let r=this.extractNumericValueFromBitArray(t,6);return r>=16&&r<63}decodeAlphanumeric(t){let e=this.extractNumericValueFromBitArray(t,5);if(15===e)return new Ft(t+5,Ft.FNC1);if(e>=5&&e<15)return new Ft(t+5,"0"+(e-5));let r,n=this.extractNumericValueFromBitArray(t,6);if(n>=32&&n<58)return new Ft(t+6,""+(n+33));switch(n){case 58:r="*";break;case 59:r=",";break;case 60:r="-";break;case 61:r=".";break;case 62:r="/";break;default:throw new $("Decoding invalid alphanumeric value: "+n)}return new Ft(t+6,r)}isAlphaTo646ToAlphaLatch(t){if(t+1>this.information.getSize())return!1;for(let e=0;e<5&&e+tthis.information.getSize())return!1;for(let e=t;ethis.information.getSize())return!1;for(let e=0;e<4&&e+t{e.forEach((e=>{t.getLeftChar().getValue()===e.getLeftChar().getValue()&&t.getRightChar().getValue()===e.getRightChar().getValue()&&t.getFinderPatter().getValue()===e.getFinderPatter().getValue()&&(r=!0)}))})),r}}class ee extends Rt{constructor(t){super(...arguments),this.pairs=new Array(ee.MAX_PAIRS),this.rows=new Array,this.startEnd=[2],this.verbose=!0===t}decodeRow(t,e,r){this.pairs.length=0,this.startFromEven=!1;try{return ee.constructResult(this.decodeRow2pairs(t,e))}catch(t){this.verbose&&console.log(t)}return this.pairs.length=0,this.startFromEven=!0,ee.constructResult(this.decodeRow2pairs(t,e))}reset(){this.pairs.length=0,this.rows.length=0}decodeRow2pairs(t,e){let r,n=!1;for(;!n;)try{this.pairs.push(this.retrieveNextPair(e,this.pairs,t))}catch(t){if(t instanceof D){if(!this.pairs.length)throw new D;n=!0}}if(this.checkChecksum())return this.pairs;if(r=!!this.rows.length,this.storeRow(t,!1),r){let t=this.checkRowsBoolean(!1);if(null!=t)return t;if(t=this.checkRowsBoolean(!0),null!=t)return t}throw new D}checkRowsBoolean(t){if(this.rows.length>25)return this.rows.length=0,null;this.pairs.length=0,t&&(this.rows=this.rows.reverse());let e=null;try{e=this.checkRows(new Array,0)}catch(t){this.verbose&&console.log(t)}return t&&(this.rows=this.rows.reverse()),e}checkRows(t,e){for(let r=e;re.length)continue;let r=!0;for(let n=0;nt){i=e.isEquivalent(this.pairs);break}n=e.isEquivalent(this.pairs),r++}i||n||ee.isPartialRow(this.pairs,this.rows)||(this.rows.push(r,new te(this.pairs,t,e)),this.removePartialRows(this.pairs,this.rows))}removePartialRows(t,e){for(let r of e)if(r.getPairs().length!==t.length)for(let e of r.getPairs())for(let r of t)if($t.equals(e,r))break}static isPartialRow(t,e){for(let r of e){let e=!0;for(let n of t){let t=!1;for(let e of r.getPairs())if(n.equals(e)){t=!0;break}if(!t){e=!1;break}}if(e)return!0}return!1}getRows(){return this.rows}static constructResult(t){let e=Jt(Lt.buildBitArray(t)).parseInformation(),r=t[0].getFinderPattern().getResultPoints(),n=t[t.length-1].getFinderPattern().getResultPoints(),i=[r[0],r[1],n[0],n[1]];return new x(e,null,null,i,U.RSS_EXPANDED,null)}checkChecksum(){let t=this.pairs.get(0),e=t.getLeftChar(),r=t.getRightChar();if(null==r)return!1;let n=r.getChecksumPortion(),i=2;for(let t=1;t=0?r:this.isEmptyPair(e)?0:e[e.length-1].getFinderPattern().getStartEnd()[1];let s=e.length%2!=0;this.startFromEven&&(s=!s);let a=!1;for(;i=0&&!t.get(e);)e--;e++,n=this.startEnd[0]-e,i=e,o=this.startEnd[1]}else i=this.startEnd[0],o=t.getNextUnset(this.startEnd[1]+1),n=o-this.startEnd[1];let s,a=this.getDecodeFinderCounters();d.arraycopy(a,0,a,1,a.length-1),a[0]=n;try{s=this.parseFinderValue(a,ee.FINDER_PATTERNS)}catch(t){return null}return new bt(s,[i,o],i,o,e)}decodeDataCharacter(t,e,r,n){let i=this.getDataCharacterCounters();for(let t=0;t.3)throw new D;let a=this.getOddCounts(),c=this.getEvenCounts(),l=this.getOddRoundingErrors(),h=this.getEvenRoundingErrors();for(let t=0;t8){if(e>8.7)throw new D;r=8}let n=t/2;0==(1&t)?(a[n]=r,l[n]=e-r):(c[n]=r,h[n]=e-r)}this.adjustOddEvenCounts(17);let u=4*e.getValue()+(r?0:2)+(n?0:1)-1,d=0,f=0;for(let t=a.length-1;t>=0;t--){if(ee.isNotA1left(e,r,n)){let e=ee.WEIGHTS[u][2*t];f+=a[t]*e}d+=a[t]}let g=0;for(let t=c.length-1;t>=0;t--)if(ee.isNotA1left(e,r,n)){let e=ee.WEIGHTS[u][2*t+1];g+=c[t]*e}let w=f+g;if(0!=(1&d)||d>13||d<4)throw new D;let m=(13-d)/2,p=ee.SYMBOL_WIDEST[m],A=9-p,C=Bt.getRSSvalue(a,p,!0),E=Bt.getRSSvalue(c,A,!1),I=ee.EVEN_TOTAL_SUBSET[m],S=ee.GSUM[m];return new Ot(C*I+E+S,w)}static isNotA1left(t,e,r){return!(0==t.getValue()&&e&&r)}adjustOddEvenCounts(t){let e=rt.sum(new Int32Array(this.getOddCounts())),r=rt.sum(new Int32Array(this.getEvenCounts())),n=!1,i=!1;e>13?i=!0:e<4&&(n=!0);let o=!1,s=!1;r>13?s=!0:r<4&&(o=!0);let a=e+r-t,c=1==(1&e),l=0==(1&r);if(1==a)if(c){if(l)throw new D;i=!0}else{if(!l)throw new D;s=!0}else if(-1==a)if(c){if(l)throw new D;n=!0}else{if(!l)throw new D;o=!0}else{if(0!=a)throw new D;if(c){if(!l)throw new D;e1)for(let e of this.possibleRightPairs)if(e.getCount()>1&&ne.checkChecksum(t,e))return ne.constructResult(t,e);throw new D}static addOrTally(t,e){if(null==e)return;let r=!1;for(let n of t)if(n.getValue()===e.getValue()){n.incrementCount(),r=!0;break}r||t.push(e)}reset(){this.possibleLeftPairs.length=0,this.possibleRightPairs.length=0}static constructResult(t,e){let r=4537077*t.getValue()+e.getValue(),n=new String(r).toString(),i=new y;for(let t=13-n.length;t>0;t--)i.append("0");i.append(n);let o=0;for(let t=0;t<13;t++){let e=i.charAt(t).charCodeAt(0)-"0".charCodeAt(0);o+=0==(1&t)?3*e:e}o=10-o%10,10===o&&(o=0),i.append(o.toString());let s=t.getFinderPattern().getResultPoints(),a=e.getFinderPattern().getResultPoints();return new x(i.toString(),null,0,[s[0],s[1],a[0],a[1]],U.RSS_14,(new Date).getTime())}static checkChecksum(t,e){let r=(t.getChecksumPortion()+16*e.getChecksumPortion())%79,n=9*t.getFinderPattern().getValue()+e.getFinderPattern().getValue();return n>72&&n--,n>8&&n--,r===n}decodePair(t,e,r,n){try{let i=this.findFinderPattern(t,e),o=this.parseFoundFinderPattern(t,r,e,i),s=null==n?null:n.get(C.NEED_RESULT_POINT_CALLBACK);if(null!=s){let n=(i[0]+i[1])/2;e&&(n=t.getSize()-1-n),s.foundPossibleResultPoint(new it(n,r))}let a=this.decodeDataCharacter(t,o,!0),c=this.decodeDataCharacter(t,o,!1);return new re(1597*a.getValue()+c.getValue(),a.getChecksumPortion()+4*c.getChecksumPortion(),o)}catch(t){return null}}decodeDataCharacter(t,e,r){let n=this.getDataCharacterCounters();for(let t=0;t8&&(r=8);let i=Math.floor(t/2);0==(1&t)?(s[i]=r,c[i]=e-r):(a[i]=r,l[i]=e-r)}this.adjustOddEvenCounts(r,i);let h=0,u=0;for(let t=s.length-1;t>=0;t--)u*=9,u+=s[t],h+=s[t];let d=0,f=0;for(let t=a.length-1;t>=0;t--)d*=9,d+=a[t],f+=a[t];let g=u+3*d;if(r){if(0!=(1&h)||h>12||h<4)throw new D;let t=(12-h)/2,e=ne.OUTSIDE_ODD_WIDEST[t],r=9-e,n=Bt.getRSSvalue(s,e,!1),i=Bt.getRSSvalue(a,r,!0),o=ne.OUTSIDE_EVEN_TOTAL_SUBSET[t],c=ne.OUTSIDE_GSUM[t];return new Ot(n*o+i+c,g)}{if(0!=(1&f)||f>10||f<4)throw new D;let t=(10-f)/2,e=ne.INSIDE_ODD_WIDEST[t],r=9-e,n=Bt.getRSSvalue(s,e,!0),i=Bt.getRSSvalue(a,r,!1),o=ne.INSIDE_ODD_TOTAL_SUBSET[t],c=ne.INSIDE_GSUM[t];return new Ot(i*o+n+c,g)}}findFinderPattern(t,e){let r=this.getDecodeFinderCounters();r[0]=0,r[1]=0,r[2]=0,r[3]=0;let n=t.getSize(),i=!1,o=0;for(;o=0&&i!==t.get(o);)o--;o++;const s=n[0]-o,a=this.getDecodeFinderCounters(),c=new Int32Array(a.length);d.arraycopy(a,0,c,1,a.length-1),c[0]=s;const l=this.parseFinderValue(c,ne.FINDER_PATTERNS);let h=o,u=n[1];return r&&(h=t.getSize()-1-h,u=t.getSize()-1-u),new bt(l,[o,n[1]],h,u,e)}adjustOddEvenCounts(t,e){let r=rt.sum(new Int32Array(this.getOddCounts())),n=rt.sum(new Int32Array(this.getEvenCounts())),i=!1,o=!1,s=!1,a=!1;t?(r>12?o=!0:r<4&&(i=!0),n>12?a=!0:n<4&&(s=!0)):(r>11?o=!0:r<5&&(i=!0),n>10?a=!0:n<4&&(s=!0));let c=r+n-e,l=(1&r)==(t?1:0),h=1==(1&n);if(1===c)if(l){if(h)throw new D;o=!0}else{if(!h)throw new D;a=!0}else if(-1===c)if(l){if(h)throw new D;i=!0}else{if(!h)throw new D;s=!0}else{if(0!==c)throw new D;if(l){if(!h)throw new D;rt.reset()))}}class oe{constructor(t,e,r){this.ecCodewords=t,this.ecBlocks=[e],r&&this.ecBlocks.push(r)}getECCodewords(){return this.ecCodewords}getECBlocks(){return this.ecBlocks}}class se{constructor(t,e){this.count=t,this.dataCodewords=e}getCount(){return this.count}getDataCodewords(){return this.dataCodewords}}class ae{constructor(t,e,r,n,i,o){this.versionNumber=t,this.symbolSizeRows=e,this.symbolSizeColumns=r,this.dataRegionSizeRows=n,this.dataRegionSizeColumns=i,this.ecBlocks=o;let s=0;const a=o.getECCodewords(),c=o.getECBlocks();for(let t of c)s+=t.getCount()*(t.getDataCodewords()+a);this.totalCodewords=s}getVersionNumber(){return this.versionNumber}getSymbolSizeRows(){return this.symbolSizeRows}getSymbolSizeColumns(){return this.symbolSizeColumns}getDataRegionSizeRows(){return this.dataRegionSizeRows}getDataRegionSizeColumns(){return this.dataRegionSizeColumns}getTotalCodewords(){return this.totalCodewords}getECBlocks(){return this.ecBlocks}static getVersionForDimensions(t,e){if(0!=(1&t)||0!=(1&e))throw new E;for(let r of ae.VERSIONS)if(r.symbolSizeRows===t&&r.symbolSizeColumns===e)return r;throw new E}toString(){return""+this.versionNumber}static buildVersions(){return[new ae(1,10,10,8,8,new oe(5,new se(1,3))),new ae(2,12,12,10,10,new oe(7,new se(1,5))),new ae(3,14,14,12,12,new oe(10,new se(1,8))),new ae(4,16,16,14,14,new oe(12,new se(1,12))),new ae(5,18,18,16,16,new oe(14,new se(1,18))),new ae(6,20,20,18,18,new oe(18,new se(1,22))),new ae(7,22,22,20,20,new oe(20,new se(1,30))),new ae(8,24,24,22,22,new oe(24,new se(1,36))),new ae(9,26,26,24,24,new oe(28,new se(1,44))),new ae(10,32,32,14,14,new oe(36,new se(1,62))),new ae(11,36,36,16,16,new oe(42,new se(1,86))),new ae(12,40,40,18,18,new oe(48,new se(1,114))),new ae(13,44,44,20,20,new oe(56,new se(1,144))),new ae(14,48,48,22,22,new oe(68,new se(1,174))),new ae(15,52,52,24,24,new oe(42,new se(2,102))),new ae(16,64,64,14,14,new oe(56,new se(2,140))),new ae(17,72,72,16,16,new oe(36,new se(4,92))),new ae(18,80,80,18,18,new oe(48,new se(4,114))),new ae(19,88,88,20,20,new oe(56,new se(4,144))),new ae(20,96,96,22,22,new oe(68,new se(4,174))),new ae(21,104,104,24,24,new oe(56,new se(6,136))),new ae(22,120,120,18,18,new oe(68,new se(6,175))),new ae(23,132,132,20,20,new oe(62,new se(8,163))),new ae(24,144,144,22,22,new oe(62,new se(8,156),new se(2,155))),new ae(25,8,18,6,16,new oe(7,new se(1,5))),new ae(26,8,32,6,14,new oe(11,new se(1,10))),new ae(27,12,26,10,24,new oe(14,new se(1,16))),new ae(28,12,36,10,16,new oe(18,new se(1,22))),new ae(29,16,36,14,16,new oe(24,new se(1,32))),new ae(30,16,48,14,22,new oe(28,new se(1,49)))]}}ae.VERSIONS=ae.buildVersions();class ce{constructor(t){const e=t.getHeight();if(e<8||e>144||0!=(1&e))throw new E;this.version=ce.readVersion(t),this.mappingBitMatrix=this.extractDataRegion(t),this.readMappingMatrix=new N(this.mappingBitMatrix.getWidth(),this.mappingBitMatrix.getHeight())}getVersion(){return this.version}static readVersion(t){const e=t.getHeight(),r=t.getWidth();return ae.getVersionForDimensions(e,r)}readCodewords(){const t=new Int8Array(this.version.getTotalCodewords());let e=0,r=4,n=0;const i=this.mappingBitMatrix.getHeight(),o=this.mappingBitMatrix.getWidth();let s=!1,a=!1,c=!1,l=!1;do{if(r!==i||0!==n||s)if(r!==i-2||0!==n||0==(3&o)||a)if(r!==i+4||2!==n||0!=(7&o)||c)if(r!==i-2||0!==n||4!=(7&o)||l){do{r=0&&!this.readMappingMatrix.get(n,r)&&(t[e++]=255&this.readUtah(r,n,i,o)),r-=2,n+=2}while(r>=0&&n=0&&n=0);r+=3,n+=1}else t[e++]=255&this.readCorner4(i,o),r-=2,n+=2,l=!0;else t[e++]=255&this.readCorner3(i,o),r-=2,n+=2,c=!0;else t[e++]=255&this.readCorner2(i,o),r-=2,n+=2,a=!0;else t[e++]=255&this.readCorner1(i,o),r-=2,n+=2,s=!0}while(r7?e-1:e;o[n].codewords[i]=t[h++]}if(h!==t.length)throw new c;return o}getNumDataCodewords(){return this.numDataCodewords}getCodewords(){return this.codewords}}class he{constructor(t){this.bytes=t,this.byteOffset=0,this.bitOffset=0}getBitOffset(){return this.bitOffset}getByteOffset(){return this.byteOffset}readBits(t){if(t<1||t>32||t>this.available())throw new c(""+t);let e=0,r=this.bitOffset,n=this.byteOffset;const i=this.bytes;if(r>0){const o=8-r,s=t>8-s<>a,t-=s,r+=s,8===r&&(r=0,n++)}if(t>0){for(;t>=8;)e=e<<8|255&i[n],n++,t-=8;if(t>0){const o=8-t,s=255>>o<>o,r+=t}}return this.bitOffset=r,this.byteOffset=n,e}available(){return 8*(this.bytes.length-this.byteOffset)-this.bitOffset}}!function(t){t[t.PAD_ENCODE=0]="PAD_ENCODE",t[t.ASCII_ENCODE=1]="ASCII_ENCODE",t[t.C40_ENCODE=2]="C40_ENCODE",t[t.TEXT_ENCODE=3]="TEXT_ENCODE",t[t.ANSIX12_ENCODE=4]="ANSIX12_ENCODE",t[t.EDIFACT_ENCODE=5]="EDIFACT_ENCODE",t[t.BASE256_ENCODE=6]="BASE256_ENCODE"}(V||(V={}));class ue{static decode(t){const e=new he(t),r=new y,n=new y,i=new Array;let o=V.ASCII_ENCODE;do{if(o===V.ASCII_ENCODE)o=this.decodeAsciiSegment(e,r,n);else{switch(o){case V.C40_ENCODE:this.decodeC40Segment(e,r);break;case V.TEXT_ENCODE:this.decodeTextSegment(e,r);break;case V.ANSIX12_ENCODE:this.decodeAnsiX12Segment(e,r);break;case V.EDIFACT_ENCODE:this.decodeEdifactSegment(e,r);break;case V.BASE256_ENCODE:this.decodeBase256Segment(e,r,i);break;default:throw new E}o=V.ASCII_ENCODE}}while(o!==V.PAD_ENCODE&&e.available()>0);return n.length()>0&&r.append(n.toString()),new j(t,r.toString(),0===i.length?null:i,null)}static decodeAsciiSegment(t,e,r){let n=!1;do{let i=t.readBits(8);if(0===i)throw new E;if(i<=128)return n&&(i+=128),e.append(String.fromCharCode(i-1)),V.ASCII_ENCODE;if(129===i)return V.PAD_ENCODE;if(i<=229){const t=i-130;t<10&&e.append("0"),e.append(""+t)}else switch(i){case 230:return V.C40_ENCODE;case 231:return V.BASE256_ENCODE;case 232:e.append(String.fromCharCode(29));break;case 233:case 234:case 241:break;case 235:n=!0;break;case 236:e.append("[)>05"),r.insert(0,"");break;case 237:e.append("[)>06"),r.insert(0,"");break;case 238:return V.ANSIX12_ENCODE;case 239:return V.TEXT_ENCODE;case 240:return V.EDIFACT_ENCODE;default:if(254!==i||0!==t.available())throw new E}}while(t.available()>0);return V.ASCII_ENCODE}static decodeC40Segment(t,e){let r=!1;const n=[];let i=0;do{if(8===t.available())return;const o=t.readBits(8);if(254===o)return;this.parseTwoBytes(o,t.readBits(8),n);for(let t=0;t<3;t++){const o=n[t];switch(i){case 0:if(o<3)i=o+1;else{if(!(o0)}static decodeTextSegment(t,e){let r=!1,n=[],i=0;do{if(8===t.available())return;const o=t.readBits(8);if(254===o)return;this.parseTwoBytes(o,t.readBits(8),n);for(let t=0;t<3;t++){const o=n[t];switch(i){case 0:if(o<3)i=o+1;else{if(!(o0)}static decodeAnsiX12Segment(t,e){const r=[];do{if(8===t.available())return;const n=t.readBits(8);if(254===n)return;this.parseTwoBytes(n,t.readBits(8),r);for(let t=0;t<3;t++){const n=r[t];switch(n){case 0:e.append("\r");break;case 1:e.append("*");break;case 2:e.append(">");break;case 3:e.append(" ");break;default:if(n<14)e.append(String.fromCharCode(n+44));else{if(!(n<40))throw new E;e.append(String.fromCharCode(n+51))}}}}while(t.available()>0)}static parseTwoBytes(t,e,r){let n=(t<<8)+e-1,i=Math.floor(n/1600);r[0]=i,n-=1600*i,i=Math.floor(n/40),r[1]=i,r[2]=n-40*i}static decodeEdifactSegment(t,e){do{if(t.available()<=16)return;for(let r=0;r<4;r++){let r=t.readBits(6);if(31===r){const e=8-t.getBitOffset();return void(8!==e&&t.readBits(e))}0==(32&r)&&(r|=64),e.append(String.fromCharCode(r))}}while(t.available()>0)}static decodeBase256Segment(t,e,r){let n=1+t.getByteOffset();const i=this.unrandomize255State(t.readBits(8),n++);let o;if(o=0===i?t.available()/8|0:i<250?i:250*(i-249)+this.unrandomize255State(t.readBits(8),n++),o<0)throw new E;const s=new Uint8Array(o);for(let e=0;e=0?r:r+256}}ue.C40_BASIC_SET_CHARS=["*","*","*"," ","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],ue.C40_SHIFT2_SET_CHARS=["!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_"],ue.TEXT_BASIC_SET_CHARS=["*","*","*"," ","0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],ue.TEXT_SHIFT2_SET_CHARS=ue.C40_SHIFT2_SET_CHARS,ue.TEXT_SHIFT3_SET_CHARS=["`","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","{","|","}","~",String.fromCharCode(127)];class de{constructor(){this.rsDecoder=new tt(q.DATA_MATRIX_FIELD_256)}decode(t){const e=new ce(t),r=e.getVersion(),n=e.readCodewords(),i=le.getDataBlocks(n,r);let o=0;for(let t of i)o+=t.getNumDataCodewords();const s=new Uint8Array(o),a=i.length;for(let t=0;ts&&(l=s,h[0]=e,h[1]=r,h[2]=n,h[3]=i),l>a&&(l=a,h[0]=r,h[1]=n,h[2]=i,h[3]=e),l>c&&(h[0]=n,h[1]=i,h[2]=e,h[3]=r),h}detectSolid2(t){let e=t[0],r=t[1],n=t[2],i=t[3],o=this.transitionsBetween(e,i),s=fe.shiftPoint(r,n,4*(o+1)),a=fe.shiftPoint(n,r,4*(o+1));return this.transitionsBetween(s,e)this.transitionsBetween(a,h)+this.transitionsBetween(c,h)?l:h:l:this.isValid(h)?h:null}shiftToModuleCenter(t){let e=t[0],r=t[1],n=t[2],i=t[3],o=this.transitionsBetween(e,i)+1,s=this.transitionsBetween(n,i)+1,a=fe.shiftPoint(e,r,4*s),c=fe.shiftPoint(n,r,4*o);o=this.transitionsBetween(a,i)+1,s=this.transitionsBetween(c,i)+1,1==(1&o)&&(o+=1),1==(1&s)&&(s+=1);let l,h,u=(e.getX()+r.getX()+n.getX()+i.getX())/4,d=(e.getY()+r.getY()+n.getY()+i.getY())/4;return e=fe.moveAway(e,u,d),r=fe.moveAway(r,u,d),n=fe.moveAway(n,u,d),i=fe.moveAway(i,u,d),a=fe.shiftPoint(e,r,4*s),a=fe.shiftPoint(a,i,4*o),l=fe.shiftPoint(r,e,4*s),l=fe.shiftPoint(l,n,4*o),c=fe.shiftPoint(n,i,4*s),c=fe.shiftPoint(c,r,4*o),h=fe.shiftPoint(i,n,4*s),h=fe.shiftPoint(h,e,4*o),[a,l,c,h]}isValid(t){return t.getX()>=0&&t.getX()0&&t.getY()Math.abs(i-r);if(s){let t=r;r=n,n=t,t=i,i=o,o=t}let a=Math.abs(i-r),c=Math.abs(o-n),l=-a/2,h=n0){if(e===o)break;e+=h,l-=a}}return d}}class ge{constructor(){this.decoder=new de}decode(t,e=null){let r,n;if(null!=e&&e.has(C.PURE_BARCODE)){const e=ge.extractPureBits(t.getBlackMatrix());r=this.decoder.decode(e),n=ge.NO_POINTS}else{const e=new fe(t.getBlackMatrix()).detect();r=this.decoder.decode(e.getBits()),n=e.getPoints()}const i=r.getRawBytes(),o=new x(r.getText(),i,8*i.length,n,U.DATA_MATRIX,d.currentTimeMillis()),s=r.getByteSegments();null!=s&&o.putMetadata(W.BYTE_SEGMENTS,s);const a=r.getECLevel();return null!=a&&o.putMetadata(W.ERROR_CORRECTION_LEVEL,a),o}reset(){}static extractPureBits(t){const e=t.getTopLeftOnBit(),r=t.getBottomRightOnBit();if(null==e||null==r)throw new D;const n=this.moduleSize(e,t);let i=e[1];const o=r[1];let s=e[0];const a=(r[0]-s+1)/n,c=(o-i+1)/n;if(a<=0||c<=0)throw new D;const l=n/2;i+=l,s+=l;const h=new N(a,c);for(let e=0;e=we.FOR_BITS.size)throw new c;return we.FOR_BITS.get(t)}}we.FOR_BITS=new Map,we.FOR_VALUE=new Map,we.L=new we(z.L,"L",1),we.M=new we(z.M,"M",0),we.Q=new we(z.Q,"Q",3),we.H=new we(z.H,"H",2);class me{constructor(t){this.errorCorrectionLevel=we.forBits(t>>3&3),this.dataMask=7&t}static numBitsDiffering(t,e){return m.bitCount(t^e)}static decodeFormatInformation(t,e){const r=me.doDecodeFormatInformation(t,e);return null!==r?r:me.doDecodeFormatInformation(t^me.FORMAT_INFO_MASK_QR,e^me.FORMAT_INFO_MASK_QR)}static doDecodeFormatInformation(t,e){let r=Number.MAX_SAFE_INTEGER,n=0;for(const i of me.FORMAT_INFO_DECODE_LOOKUP){const o=i[0];if(o===t||o===e)return new me(i[1]);let s=me.numBitsDiffering(t,o);s40)throw new c;return Ce.VERSIONS[t-1]}static decodeVersionInformation(t){let e=Number.MAX_SAFE_INTEGER,r=0;for(let n=0;n6&&(e.setRegion(t-11,0,3,6),e.setRegion(0,t-11,6,3)),e}toString(){return""+this.versionNumber}}Ce.VERSION_DECODE_INFO=Int32Array.from([31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017]),Ce.VERSIONS=[new Ce(1,new Int32Array(0),new pe(7,new Ae(1,19)),new pe(10,new Ae(1,16)),new pe(13,new Ae(1,13)),new pe(17,new Ae(1,9))),new Ce(2,Int32Array.from([6,18]),new pe(10,new Ae(1,34)),new pe(16,new Ae(1,28)),new pe(22,new Ae(1,22)),new pe(28,new Ae(1,16))),new Ce(3,Int32Array.from([6,22]),new pe(15,new Ae(1,55)),new pe(26,new Ae(1,44)),new pe(18,new Ae(2,17)),new pe(22,new Ae(2,13))),new Ce(4,Int32Array.from([6,26]),new pe(20,new Ae(1,80)),new pe(18,new Ae(2,32)),new pe(26,new Ae(2,24)),new pe(16,new Ae(4,9))),new Ce(5,Int32Array.from([6,30]),new pe(26,new Ae(1,108)),new pe(24,new Ae(2,43)),new pe(18,new Ae(2,15),new Ae(2,16)),new pe(22,new Ae(2,11),new Ae(2,12))),new Ce(6,Int32Array.from([6,34]),new pe(18,new Ae(2,68)),new pe(16,new Ae(4,27)),new pe(24,new Ae(4,19)),new pe(28,new Ae(4,15))),new Ce(7,Int32Array.from([6,22,38]),new pe(20,new Ae(2,78)),new pe(18,new Ae(4,31)),new pe(18,new Ae(2,14),new Ae(4,15)),new pe(26,new Ae(4,13),new Ae(1,14))),new Ce(8,Int32Array.from([6,24,42]),new pe(24,new Ae(2,97)),new pe(22,new Ae(2,38),new Ae(2,39)),new pe(22,new Ae(4,18),new Ae(2,19)),new pe(26,new Ae(4,14),new Ae(2,15))),new Ce(9,Int32Array.from([6,26,46]),new pe(30,new Ae(2,116)),new pe(22,new Ae(3,36),new Ae(2,37)),new pe(20,new Ae(4,16),new Ae(4,17)),new pe(24,new Ae(4,12),new Ae(4,13))),new Ce(10,Int32Array.from([6,28,50]),new pe(18,new Ae(2,68),new Ae(2,69)),new pe(26,new Ae(4,43),new Ae(1,44)),new pe(24,new Ae(6,19),new Ae(2,20)),new pe(28,new Ae(6,15),new Ae(2,16))),new Ce(11,Int32Array.from([6,30,54]),new pe(20,new Ae(4,81)),new pe(30,new Ae(1,50),new Ae(4,51)),new pe(28,new Ae(4,22),new Ae(4,23)),new pe(24,new Ae(3,12),new Ae(8,13))),new Ce(12,Int32Array.from([6,32,58]),new pe(24,new Ae(2,92),new Ae(2,93)),new pe(22,new Ae(6,36),new Ae(2,37)),new pe(26,new Ae(4,20),new Ae(6,21)),new pe(28,new Ae(7,14),new Ae(4,15))),new Ce(13,Int32Array.from([6,34,62]),new pe(26,new Ae(4,107)),new pe(22,new Ae(8,37),new Ae(1,38)),new pe(24,new Ae(8,20),new Ae(4,21)),new pe(22,new Ae(12,11),new Ae(4,12))),new Ce(14,Int32Array.from([6,26,46,66]),new pe(30,new Ae(3,115),new Ae(1,116)),new pe(24,new Ae(4,40),new Ae(5,41)),new pe(20,new Ae(11,16),new Ae(5,17)),new pe(24,new Ae(11,12),new Ae(5,13))),new Ce(15,Int32Array.from([6,26,48,70]),new pe(22,new Ae(5,87),new Ae(1,88)),new pe(24,new Ae(5,41),new Ae(5,42)),new pe(30,new Ae(5,24),new Ae(7,25)),new pe(24,new Ae(11,12),new Ae(7,13))),new Ce(16,Int32Array.from([6,26,50,74]),new pe(24,new Ae(5,98),new Ae(1,99)),new pe(28,new Ae(7,45),new Ae(3,46)),new pe(24,new Ae(15,19),new Ae(2,20)),new pe(30,new Ae(3,15),new Ae(13,16))),new Ce(17,Int32Array.from([6,30,54,78]),new pe(28,new Ae(1,107),new Ae(5,108)),new pe(28,new Ae(10,46),new Ae(1,47)),new pe(28,new Ae(1,22),new Ae(15,23)),new pe(28,new Ae(2,14),new Ae(17,15))),new Ce(18,Int32Array.from([6,30,56,82]),new pe(30,new Ae(5,120),new Ae(1,121)),new pe(26,new Ae(9,43),new Ae(4,44)),new pe(28,new Ae(17,22),new Ae(1,23)),new pe(28,new Ae(2,14),new Ae(19,15))),new Ce(19,Int32Array.from([6,30,58,86]),new pe(28,new Ae(3,113),new Ae(4,114)),new pe(26,new Ae(3,44),new Ae(11,45)),new pe(26,new Ae(17,21),new Ae(4,22)),new pe(26,new Ae(9,13),new Ae(16,14))),new Ce(20,Int32Array.from([6,34,62,90]),new pe(28,new Ae(3,107),new Ae(5,108)),new pe(26,new Ae(3,41),new Ae(13,42)),new pe(30,new Ae(15,24),new Ae(5,25)),new pe(28,new Ae(15,15),new Ae(10,16))),new Ce(21,Int32Array.from([6,28,50,72,94]),new pe(28,new Ae(4,116),new Ae(4,117)),new pe(26,new Ae(17,42)),new pe(28,new Ae(17,22),new Ae(6,23)),new pe(30,new Ae(19,16),new Ae(6,17))),new Ce(22,Int32Array.from([6,26,50,74,98]),new pe(28,new Ae(2,111),new Ae(7,112)),new pe(28,new Ae(17,46)),new pe(30,new Ae(7,24),new Ae(16,25)),new pe(24,new Ae(34,13))),new Ce(23,Int32Array.from([6,30,54,78,102]),new pe(30,new Ae(4,121),new Ae(5,122)),new pe(28,new Ae(4,47),new Ae(14,48)),new pe(30,new Ae(11,24),new Ae(14,25)),new pe(30,new Ae(16,15),new Ae(14,16))),new Ce(24,Int32Array.from([6,28,54,80,106]),new pe(30,new Ae(6,117),new Ae(4,118)),new pe(28,new Ae(6,45),new Ae(14,46)),new pe(30,new Ae(11,24),new Ae(16,25)),new pe(30,new Ae(30,16),new Ae(2,17))),new Ce(25,Int32Array.from([6,32,58,84,110]),new pe(26,new Ae(8,106),new Ae(4,107)),new pe(28,new Ae(8,47),new Ae(13,48)),new pe(30,new Ae(7,24),new Ae(22,25)),new pe(30,new Ae(22,15),new Ae(13,16))),new Ce(26,Int32Array.from([6,30,58,86,114]),new pe(28,new Ae(10,114),new Ae(2,115)),new pe(28,new Ae(19,46),new Ae(4,47)),new pe(28,new Ae(28,22),new Ae(6,23)),new pe(30,new Ae(33,16),new Ae(4,17))),new Ce(27,Int32Array.from([6,34,62,90,118]),new pe(30,new Ae(8,122),new Ae(4,123)),new pe(28,new Ae(22,45),new Ae(3,46)),new pe(30,new Ae(8,23),new Ae(26,24)),new pe(30,new Ae(12,15),new Ae(28,16))),new Ce(28,Int32Array.from([6,26,50,74,98,122]),new pe(30,new Ae(3,117),new Ae(10,118)),new pe(28,new Ae(3,45),new Ae(23,46)),new pe(30,new Ae(4,24),new Ae(31,25)),new pe(30,new Ae(11,15),new Ae(31,16))),new Ce(29,Int32Array.from([6,30,54,78,102,126]),new pe(30,new Ae(7,116),new Ae(7,117)),new pe(28,new Ae(21,45),new Ae(7,46)),new pe(30,new Ae(1,23),new Ae(37,24)),new pe(30,new Ae(19,15),new Ae(26,16))),new Ce(30,Int32Array.from([6,26,52,78,104,130]),new pe(30,new Ae(5,115),new Ae(10,116)),new pe(28,new Ae(19,47),new Ae(10,48)),new pe(30,new Ae(15,24),new Ae(25,25)),new pe(30,new Ae(23,15),new Ae(25,16))),new Ce(31,Int32Array.from([6,30,56,82,108,134]),new pe(30,new Ae(13,115),new Ae(3,116)),new pe(28,new Ae(2,46),new Ae(29,47)),new pe(30,new Ae(42,24),new Ae(1,25)),new pe(30,new Ae(23,15),new Ae(28,16))),new Ce(32,Int32Array.from([6,34,60,86,112,138]),new pe(30,new Ae(17,115)),new pe(28,new Ae(10,46),new Ae(23,47)),new pe(30,new Ae(10,24),new Ae(35,25)),new pe(30,new Ae(19,15),new Ae(35,16))),new Ce(33,Int32Array.from([6,30,58,86,114,142]),new pe(30,new Ae(17,115),new Ae(1,116)),new pe(28,new Ae(14,46),new Ae(21,47)),new pe(30,new Ae(29,24),new Ae(19,25)),new pe(30,new Ae(11,15),new Ae(46,16))),new Ce(34,Int32Array.from([6,34,62,90,118,146]),new pe(30,new Ae(13,115),new Ae(6,116)),new pe(28,new Ae(14,46),new Ae(23,47)),new pe(30,new Ae(44,24),new Ae(7,25)),new pe(30,new Ae(59,16),new Ae(1,17))),new Ce(35,Int32Array.from([6,30,54,78,102,126,150]),new pe(30,new Ae(12,121),new Ae(7,122)),new pe(28,new Ae(12,47),new Ae(26,48)),new pe(30,new Ae(39,24),new Ae(14,25)),new pe(30,new Ae(22,15),new Ae(41,16))),new Ce(36,Int32Array.from([6,24,50,76,102,128,154]),new pe(30,new Ae(6,121),new Ae(14,122)),new pe(28,new Ae(6,47),new Ae(34,48)),new pe(30,new Ae(46,24),new Ae(10,25)),new pe(30,new Ae(2,15),new Ae(64,16))),new Ce(37,Int32Array.from([6,28,54,80,106,132,158]),new pe(30,new Ae(17,122),new Ae(4,123)),new pe(28,new Ae(29,46),new Ae(14,47)),new pe(30,new Ae(49,24),new Ae(10,25)),new pe(30,new Ae(24,15),new Ae(46,16))),new Ce(38,Int32Array.from([6,32,58,84,110,136,162]),new pe(30,new Ae(4,122),new Ae(18,123)),new pe(28,new Ae(13,46),new Ae(32,47)),new pe(30,new Ae(48,24),new Ae(14,25)),new pe(30,new Ae(42,15),new Ae(32,16))),new Ce(39,Int32Array.from([6,26,54,82,110,138,166]),new pe(30,new Ae(20,117),new Ae(4,118)),new pe(28,new Ae(40,47),new Ae(7,48)),new pe(30,new Ae(43,24),new Ae(22,25)),new pe(30,new Ae(10,15),new Ae(67,16))),new Ce(40,Int32Array.from([6,30,58,86,114,142,170]),new pe(30,new Ae(19,118),new Ae(6,119)),new pe(28,new Ae(18,47),new Ae(31,48)),new pe(30,new Ae(34,24),new Ae(34,25)),new pe(30,new Ae(20,15),new Ae(61,16)))],function(t){t[t.DATA_MASK_000=0]="DATA_MASK_000",t[t.DATA_MASK_001=1]="DATA_MASK_001",t[t.DATA_MASK_010=2]="DATA_MASK_010",t[t.DATA_MASK_011=3]="DATA_MASK_011",t[t.DATA_MASK_100=4]="DATA_MASK_100",t[t.DATA_MASK_101=5]="DATA_MASK_101",t[t.DATA_MASK_110=6]="DATA_MASK_110",t[t.DATA_MASK_111=7]="DATA_MASK_111"}(G||(G={}));class Ee{constructor(t,e){this.value=t,this.isMasked=e}unmaskBitMatrix(t,e){for(let r=0;r0==(t+e&1)))],[G.DATA_MASK_001,new Ee(G.DATA_MASK_001,((t,e)=>0==(1&t)))],[G.DATA_MASK_010,new Ee(G.DATA_MASK_010,((t,e)=>e%3==0))],[G.DATA_MASK_011,new Ee(G.DATA_MASK_011,((t,e)=>(t+e)%3==0))],[G.DATA_MASK_100,new Ee(G.DATA_MASK_100,((t,e)=>0==(Math.floor(t/2)+Math.floor(e/3)&1)))],[G.DATA_MASK_101,new Ee(G.DATA_MASK_101,((t,e)=>t*e%6==0))],[G.DATA_MASK_110,new Ee(G.DATA_MASK_110,((t,e)=>t*e%6<3))],[G.DATA_MASK_111,new Ee(G.DATA_MASK_111,((t,e)=>0==(t+e+t*e%3&1)))]]);class Ie{constructor(t){const e=t.getHeight();if(e<21||1!=(3&e))throw new E;this.bitMatrix=t}readFormatInformation(){if(null!==this.parsedFormatInfo&&void 0!==this.parsedFormatInfo)return this.parsedFormatInfo;let t=0;for(let e=0;e<6;e++)t=this.copyBit(e,8,t);t=this.copyBit(7,8,t),t=this.copyBit(8,8,t),t=this.copyBit(8,7,t);for(let e=5;e>=0;e--)t=this.copyBit(8,e,t);const e=this.bitMatrix.getHeight();let r=0;const n=e-7;for(let t=e-1;t>=n;t--)r=this.copyBit(8,t,r);for(let t=e-8;t=0;e--)for(let i=t-9;i>=n;i--)r=this.copyBit(i,e,r);let i=Ce.decodeVersionInformation(r);if(null!==i&&i.getDimensionForVersion()===t)return this.parsedVersion=i,i;r=0;for(let e=5;e>=0;e--)for(let i=t-9;i>=n;i--)r=this.copyBit(e,i,r);if(i=Ce.decodeVersionInformation(r),null!==i&&i.getDimensionForVersion()===t)return this.parsedVersion=i,i;throw new E}copyBit(t,e,r){return(this.isMirror?this.bitMatrix.get(e,t):this.bitMatrix.get(t,e))?r<<1|1:r<<1}readCodewords(){const t=this.readFormatInformation(),e=this.readVersion(),r=Ee.values.get(t.getDataMask()),n=this.bitMatrix.getHeight();r.unmaskBitMatrix(this.bitMatrix,n);const i=e.buildFunctionPattern();let o=!0;const s=new Uint8Array(e.getTotalCodewords());let a=0,c=0,l=0;for(let t=n-1;t>0;t-=2){6===t&&t--;for(let e=0;e=0&&s[h].codewords.length!==l;)h--;h++;const u=l-n.getECCodewordsPerBlock();let d=0;for(let e=0;et.available())throw new E;const n=new Uint8Array(2*r);let i=0;for(;r>0;){const e=t.readBits(13);let o=e/96<<8&4294967295|e%96;o+=o<959?41377:42657,n[i]=o>>8&255,n[i+1]=255&o,i+=2,r--}try{e.append(_.decode(n,T.GB2312))}catch(t){throw new E(t)}}static decodeKanjiSegment(t,e,r){if(13*r>t.available())throw new E;const n=new Uint8Array(2*r);let i=0;for(;r>0;){const e=t.readBits(13);let o=e/192<<8&4294967295|e%192;o+=o<7936?33088:49472,n[i]=o>>8,n[i+1]=o,i+=2,r--}try{e.append(_.decode(n,T.SHIFT_JIS))}catch(t){throw new E(t)}}static decodeByteSegment(t,e,r,n,i,o){if(8*r>t.available())throw new E;const s=new Uint8Array(r);for(let e=0;e=Te.ALPHANUMERIC_CHARS.length)throw new E;return Te.ALPHANUMERIC_CHARS[t]}static decodeAlphanumericSegment(t,e,r,n){const i=e.length();for(;r>1;){if(t.available()<11)throw new E;const n=t.readBits(11);e.append(Te.toAlphaNumericChar(Math.floor(n/45))),e.append(Te.toAlphaNumericChar(n%45)),r-=2}if(1===r){if(t.available()<6)throw new E;e.append(Te.toAlphaNumericChar(t.readBits(6)))}if(n)for(let t=i;t=3;){if(t.available()<10)throw new E;const n=t.readBits(10);if(n>=1e3)throw new E;e.append(Te.toAlphaNumericChar(Math.floor(n/100))),e.append(Te.toAlphaNumericChar(Math.floor(n/10)%10)),e.append(Te.toAlphaNumericChar(n%10)),r-=3}if(2===r){if(t.available()<7)throw new E;const r=t.readBits(7);if(r>=100)throw new E;e.append(Te.toAlphaNumericChar(Math.floor(r/10))),e.append(Te.toAlphaNumericChar(r%10))}else if(1===r){if(t.available()<4)throw new E;const r=t.readBits(4);if(r>=10)throw new E;e.append(Te.toAlphaNumericChar(r))}}static parseECIValue(t){const e=t.readBits(8);if(0==(128&e))return 127&e;if(128==(192&e))return(63&e)<<8&4294967295|t.readBits(8);if(192==(224&e))return(31&e)<<16&4294967295|t.readBits(16);throw new E}}Te.ALPHANUMERIC_CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",Te.GB2312_SUBSET=1;class ye{constructor(t){this.mirrored=t}isMirrored(){return this.mirrored}applyMirroredCorrection(t){if(!this.mirrored||null===t||t.length<3)return;const e=t[0];t[0]=t[2],t[2]=e}}class Ne{constructor(){this.rsDecoder=new tt(q.QR_CODE_FIELD_256)}decodeBooleanArray(t,e){return this.decodeBitMatrix(N.parseFromBooleanArray(t),e)}decodeBitMatrix(t,e){const r=new Ie(t);let n=null;try{return this.decodeBitMatrixParser(r,e)}catch(t){n=t}try{r.remask(),r.setMirror(!0),r.readVersion(),r.readFormatInformation(),r.mirror();const t=this.decodeBitMatrixParser(r,e);return t.setOther(new ye(!0)),t}catch(t){if(null!==n)throw n;throw t}}decodeBitMatrixParser(t,e){const r=t.readVersion(),n=t.readFormatInformation().getErrorCorrectionLevel(),i=t.readCodewords(),o=Se.getDataBlocks(i,r,n);let s=0;for(const t of o)s+=t.getNumDataCodewords();const a=new Uint8Array(s);let c=0;for(const t of o){const e=t.getCodewords(),r=t.getNumDataCodewords();this.correctErrors(e,r);for(let t=0;t=r)return!1;return!0}crossCheckVertical(t,e,r,n){const i=this.image,o=i.getHeight(),s=this.crossCheckStateCount;s[0]=0,s[1]=0,s[2]=0;let a=t;for(;a>=0&&i.get(e,a)&&s[1]<=r;)s[1]++,a--;if(a<0||s[1]>r)return NaN;for(;a>=0&&!i.get(e,a)&&s[0]<=r;)s[0]++,a--;if(s[0]>r)return NaN;for(a=t+1;ar)return NaN;for(;ar)return NaN;const c=s[0]+s[1]+s[2];return 5*Math.abs(c-n)>=2*n?NaN:this.foundPatternCross(s)?Me.centerFromEnd(s,a):NaN}handlePossibleCenter(t,e,r){const n=t[0]+t[1]+t[2],i=Me.centerFromEnd(t,r),o=this.crossCheckVertical(e,i,2*t[1],n);if(!isNaN(o)){const e=(t[0]+t[1]+t[2])/3;for(const t of this.possibleCenters)if(t.aboutEquals(e,o,i))return t.combineEstimate(o,i,e);const r=new De(i,o,e);this.possibleCenters.push(r),null!==this.resultPointCallback&&void 0!==this.resultPointCallback&&this.resultPointCallback.foundPossibleResultPoint(r)}return null}}class Re extends it{constructor(t,e,r,n){super(t,e),this.estimatedModuleSize=r,this.count=n,void 0===n&&(this.count=1)}getEstimatedModuleSize(){return this.estimatedModuleSize}getCount(){return this.count}aboutEquals(t,e,r){if(Math.abs(e-this.getY())<=t&&Math.abs(r-this.getX())<=t){const e=Math.abs(t-this.estimatedModuleSize);return e<=1||e<=this.estimatedModuleSize}return!1}combineEstimate(t,e,r){const n=this.count+1,i=(this.count*this.getX()+e)/n,o=(this.count*this.getY()+t)/n,s=(this.count*this.estimatedModuleSize+r)/n;return new Re(i,o,s,n)}}class Oe{constructor(t){this.bottomLeft=t[0],this.topLeft=t[1],this.topRight=t[2]}getBottomLeft(){return this.bottomLeft}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}}class be{constructor(t,e){this.image=t,this.resultPointCallback=e,this.possibleCenters=[],this.crossCheckStateCount=new Int32Array(5),this.resultPointCallback=e}getImage(){return this.image}getPossibleCenters(){return this.possibleCenters}find(t){const e=null!=t&&void 0!==t.get(C.TRY_HARDER),r=null!=t&&void 0!==t.get(C.PURE_BARCODE),n=this.image,i=n.getHeight(),o=n.getWidth();let s=Math.floor(3*i/(4*be.MAX_MODULES));(sc[2]&&(t+=e-c[2]-s,i=o-1)}e=0,c[0]=0,c[1]=0,c[2]=0,c[3]=0,c[4]=0}else c[0]=c[2],c[1]=c[3],c[2]=c[4],c[3]=1,c[4]=0,e=3;else c[++e]++;else c[e]++;be.foundPatternCross(c)&&!0===this.handlePossibleCenter(c,t,o,r)&&(s=c[0],this.hasSkipped&&(a=this.haveMultiplyConfirmedCenters()))}const l=this.selectBestPatterns();return it.orderBestPatterns(l),new Oe(l)}static centerFromEnd(t,e){return e-t[4]-t[3]-t[2]/2}static foundPatternCross(t){let e=0;for(let r=0;r<5;r++){const n=t[r];if(0===n)return!1;e+=n}if(e<7)return!1;const r=e/7,n=r/2;return Math.abs(r-t[0])=o&&e>=o&&s.get(e-o,t-o);)i[2]++,o++;if(t=o&&e>=o&&!s.get(e-o,t-o)&&i[1]<=r;)i[1]++,o++;if(tr)return!1;for(;t>=o&&e>=o&&s.get(e-o,t-o)&&i[0]<=r;)i[0]++,o++;if(i[0]>r)return!1;const a=s.getHeight(),c=s.getWidth();for(o=1;t+o=a||e+o>=c)return!1;for(;t+o=a||e+o>=c||i[3]>=r)return!1;for(;t+o=r)return!1;const l=i[0]+i[1]+i[2]+i[3]+i[4];return Math.abs(l-n)<2*n&&be.foundPatternCross(i)}crossCheckVertical(t,e,r,n){const i=this.image,o=i.getHeight(),s=this.getCrossCheckStateCount();let a=t;for(;a>=0&&i.get(e,a);)s[2]++,a--;if(a<0)return NaN;for(;a>=0&&!i.get(e,a)&&s[1]<=r;)s[1]++,a--;if(a<0||s[1]>r)return NaN;for(;a>=0&&i.get(e,a)&&s[0]<=r;)s[0]++,a--;if(s[0]>r)return NaN;for(a=t+1;a=r)return NaN;for(;a=r)return NaN;const c=s[0]+s[1]+s[2]+s[3]+s[4];return 5*Math.abs(c-n)>=2*n?NaN:be.foundPatternCross(s)?be.centerFromEnd(s,a):NaN}crossCheckHorizontal(t,e,r,n){const i=this.image,o=i.getWidth(),s=this.getCrossCheckStateCount();let a=t;for(;a>=0&&i.get(a,e);)s[2]++,a--;if(a<0)return NaN;for(;a>=0&&!i.get(a,e)&&s[1]<=r;)s[1]++,a--;if(a<0||s[1]>r)return NaN;for(;a>=0&&i.get(a,e)&&s[0]<=r;)s[0]++,a--;if(s[0]>r)return NaN;for(a=t+1;a=r)return NaN;for(;a=r)return NaN;const c=s[0]+s[1]+s[2]+s[3]+s[4];return 5*Math.abs(c-n)>=n?NaN:be.foundPatternCross(s)?be.centerFromEnd(s,a):NaN}handlePossibleCenter(t,e,r,n){const i=t[0]+t[1]+t[2]+t[3]+t[4];let o=be.centerFromEnd(t,r),s=this.crossCheckVertical(e,Math.floor(o),t[2],i);if(!isNaN(s)&&(o=this.crossCheckHorizontal(Math.floor(o),Math.floor(s),t[2],i),!isNaN(o)&&(!n||this.crossCheckDiagonal(Math.floor(s),Math.floor(o),t[2],i)))){const t=i/7;let e=!1;const r=this.possibleCenters;for(let n=0,i=r.length;n=be.CENTER_QUORUM){if(null!=t)return this.hasSkipped=!0,Math.floor((Math.abs(t.getX()-e.getX())-Math.abs(t.getY()-e.getY()))/2);t=e}return 0}haveMultiplyConfirmedCenters(){let t=0,e=0;const r=this.possibleCenters.length;for(const r of this.possibleCenters)r.getCount()>=be.CENTER_QUORUM&&(t++,e+=r.getEstimatedModuleSize());if(t<3)return!1;const n=e/r;let i=0;for(const t of this.possibleCenters)i+=Math.abs(t.getEstimatedModuleSize()-n);return i<=.05*e}selectBestPatterns(){const t=this.possibleCenters.length;if(t<3)throw new D;const e=this.possibleCenters;let r;if(t>3){let n=0,i=0;for(const t of this.possibleCenters){const e=t.getEstimatedModuleSize();n+=e,i+=e*e}r=n/t;let o=Math.sqrt(i/t-r*r);e.sort(((t,e)=>{const n=Math.abs(e.getEstimatedModuleSize()-r),i=Math.abs(t.getEstimatedModuleSize()-r);return ni?1:0}));const s=Math.max(.2*r,o);for(let t=0;t3;t++){const n=e[t];Math.abs(n.getEstimatedModuleSize()-r)>s&&(e.splice(t,1),t--)}}if(e.length>3){let t=0;for(const r of e)t+=r.getEstimatedModuleSize();r=t/e.length,e.sort(((t,e)=>{if(e.getCount()===t.getCount()){const n=Math.abs(e.getEstimatedModuleSize()-r),i=Math.abs(t.getEstimatedModuleSize()-r);return ni?-1:0}return e.getCount()-t.getCount()})),e.splice(3)}return[e[0],e[1],e[2]]}}be.CENTER_QUORUM=2,be.MIN_SKIP=3,be.MAX_MODULES=57;class Be{constructor(t){this.image=t}getImage(){return this.image}getResultPointCallback(){return this.resultPointCallback}detect(t){this.resultPointCallback=null==t?null:t.get(C.NEED_RESULT_POINT_CALLBACK);const e=new be(this.image,this.resultPointCallback).find(t);return this.processFinderPatternInfo(e)}processFinderPatternInfo(t){const e=t.getTopLeft(),r=t.getTopRight(),n=t.getBottomLeft(),i=this.calculateModuleSize(e,r,n);if(i<1)throw new D("No pattern found in proccess finder.");const o=Be.computeDimension(e,r,n,i),s=Ce.getProvisionalVersionForDimension(o),a=s.getDimensionForVersion()-7;let c=null;if(s.getAlignmentPatternCenters().length>0){const t=r.getX()-e.getX()+n.getX(),o=r.getY()-e.getY()+n.getY(),s=1-3/a,l=Math.floor(e.getX()+s*(t-e.getX())),h=Math.floor(e.getY()+s*(o-e.getY()));for(let t=4;t<=16;t<<=1)try{c=this.findAlignmentInRegion(i,l,h,t);break}catch(t){if(!(t instanceof D))throw t}}const l=Be.createTransform(e,r,n,c,o),h=Be.sampleGrid(this.image,l,o);let u;return u=null===c?[n,e,r]:[n,e,r,c],new ot(h,u)}static createTransform(t,e,r,n,i){const o=i-3.5;let s,a,c,l;return null!==n?(s=n.getX(),a=n.getY(),c=o-3,l=c):(s=e.getX()-t.getX()+r.getX(),a=e.getY()-t.getY()+r.getY(),c=o,l=o),lt.quadrilateralToQuadrilateral(3.5,3.5,o,3.5,c,l,3.5,o,t.getX(),t.getY(),e.getX(),e.getY(),s,a,r.getX(),r.getY())}static sampleGrid(t,e,r){return ut.getInstance().sampleGridWithTransform(t,r,r,e)}static computeDimension(t,e,r,n){const i=rt.round(it.distance(t,e)/n),o=rt.round(it.distance(t,r)/n);let s=Math.floor((i+o)/2)+7;switch(3&s){case 0:s++;break;case 2:s--;break;case 3:throw new D("Dimensions could be not found.")}return s}calculateModuleSize(t,e,r){return(this.calculateModuleSizeOneWay(t,e)+this.calculateModuleSizeOneWay(t,r))/2}calculateModuleSizeOneWay(t,e){const r=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(t.getX()),Math.floor(t.getY()),Math.floor(e.getX()),Math.floor(e.getY())),n=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(e.getX()),Math.floor(e.getY()),Math.floor(t.getX()),Math.floor(t.getY()));return isNaN(r)?n/7:isNaN(n)?r/7:(r+n)/14}sizeOfBlackWhiteBlackRunBothWays(t,e,r,n){let i=this.sizeOfBlackWhiteBlackRun(t,e,r,n),o=1,s=t-(r-t);s<0?(o=t/(t-s),s=0):s>=this.image.getWidth()&&(o=(this.image.getWidth()-1-t)/(s-t),s=this.image.getWidth()-1);let a=Math.floor(e-(n-e)*o);return o=1,a<0?(o=e/(e-a),a=0):a>=this.image.getHeight()&&(o=(this.image.getHeight()-1-e)/(a-e),a=this.image.getHeight()-1),s=Math.floor(t+(s-t)*o),i+=this.sizeOfBlackWhiteBlackRun(t,e,s,a),i-1}sizeOfBlackWhiteBlackRun(t,e,r,n){const i=Math.abs(n-e)>Math.abs(r-t);if(i){let i=t;t=e,e=i,i=r,r=n,n=i}const o=Math.abs(r-t),s=Math.abs(n-e);let a=-o/2;const c=t0){if(d===n)break;d+=l,a-=o}}return 2===h?rt.distance(r+c,n,t,e):NaN}findAlignmentInRegion(t,e,r,n){const i=Math.floor(n*t),o=Math.max(0,e-i),s=Math.min(this.image.getWidth()-1,e+i);if(s-o<3*t)throw new D("Alignment top exceeds estimated module size.");const a=Math.max(0,r-i),c=Math.min(this.image.getHeight()-1,r+i);if(c-a<3*t)throw new D("Alignment bottom exceeds estimated module size.");return new Me(this.image,o,a,s-o,c-a,t,this.resultPointCallback).find()}}class Le{constructor(){this.decoder=new Ne}getDecoder(){return this.decoder}decode(t,e){let r,n;if(null!=e&&void 0!==e.get(C.PURE_BARCODE)){const i=Le.extractPureBits(t.getBlackMatrix());r=this.decoder.decodeBitMatrix(i,e),n=Le.NO_POINTS}else{const i=new Be(t.getBlackMatrix()).detect(e);r=this.decoder.decodeBitMatrix(i.getBits(),e),n=i.getPoints()}r.getOther()instanceof ye&&r.getOther().applyMirroredCorrection(n);const i=new x(r.getText(),r.getRawBytes(),void 0,n,U.QR_CODE,void 0),o=r.getByteSegments();null!==o&&i.putMetadata(W.BYTE_SEGMENTS,o);const s=r.getECLevel();return null!==s&&i.putMetadata(W.ERROR_CORRECTION_LEVEL,s),r.hasStructuredAppend()&&(i.putMetadata(W.STRUCTURED_APPEND_SEQUENCE,r.getStructuredAppendSequenceNumber()),i.putMetadata(W.STRUCTURED_APPEND_PARITY,r.getStructuredAppendParity())),i}reset(){}static extractPureBits(t){const e=t.getTopLeftOnBit(),r=t.getBottomRightOnBit();if(null===e||null===r)throw new D;const n=this.moduleSize(e,t);let i=e[1],o=r[1],s=e[0],a=r[0];if(s>=a||i>=o)throw new D;if(o-i!=a-s&&(a=s+(o-i),a>=t.getWidth()))throw new D;const c=Math.round((a-s+1)/n),l=Math.round((o-i+1)/n);if(c<=0||l<=0)throw new D;if(l!==c)throw new D;const h=Math.floor(n/2);i+=h,s+=h;const u=s+Math.floor((c-1)*n)-a;if(u>0){if(u>h)throw new D;s-=u}const d=i+Math.floor((l-1)*n)-o;if(d>0){if(d>h)throw new D;i-=d}const f=new N(c,l);for(let e=0;e0;){const s=Fe.findGuardPattern(t,i,--n,r,!1,o,c);if(null==s){n++;break}e=s}s[0]=new it(e[0],n),s[1]=new it(e[1],n),a=!0;break}}let l=n+1;if(a){let n=0,i=Int32Array.from([Math.trunc(s[0].getX()),Math.trunc(s[1].getX())]);for(;lFe.SKIPPED_ROW_COUNT_MAX)break;n++}}l-=n+1,s[2]=new it(i[0],l),s[3]=new it(i[1],l)}return l-n0&&c++o?n-o:o-n;if(c>r)return 1/0;a+=c}return a/i}}Fe.INDEXES_START_PATTERN=Int32Array.from([0,4,1,5]),Fe.INDEXES_STOP_PATTERN=Int32Array.from([6,2,7,3]),Fe.MAX_AVG_VARIANCE=.42,Fe.MAX_INDIVIDUAL_VARIANCE=.8,Fe.START_PATTERN=Int32Array.from([8,1,1,1,1,1,1,3]),Fe.STOP_PATTERN=Int32Array.from([7,1,1,3,1,1,1,2,1]),Fe.MAX_PIXEL_DRIFT=3,Fe.MAX_PATTERN_DRIFT=5,Fe.SKIPPED_ROW_COUNT_MAX=25,Fe.ROW_STEP=5,Fe.BARCODE_MIN_HEIGHT=10;class xe{constructor(t,e){if(0===e.length)throw new c;this.field=t;let r=e.length;if(r>1&&0===e[0]){let t=1;for(;tr.length){let t=e;e=r,r=t}let n=new Int32Array(r.length),i=r.length-e.length;d.arraycopy(r,0,n,0,i);for(let t=i;t=0;e--){let r=this.getCoefficient(e);0!==r&&(r<0?(t.append(" - "),r=-r):t.length()>0&&t.append(" + "),0!==e&&1===r||t.append(r),0!==e&&(1===e?t.append("x"):(t.append("x^"),t.append(e))))}return t.toString()}}class ke{add(t,e){return(t+e)%this.modulus}subtract(t,e){return(this.modulus+t-e)%this.modulus}exp(t){return this.expTable[t]}log(t){if(0===t)throw new c;return this.logTable[t]}inverse(t){if(0===t)throw new K;return this.expTable[this.modulus-this.logTable[t]-1]}multiply(t,e){return 0===t||0===e?0:this.expTable[(this.logTable[t]+this.logTable[e])%(this.modulus-1)]}getSize(){return this.modulus}equals(t){return t===this}}class Ue extends ke{constructor(t,e){super(),this.modulus=t,this.expTable=new Int32Array(t),this.logTable=new Int32Array(t);let r=1;for(let n=0;n0;t--){let r=n.evaluateAt(this.field.exp(t));i[e-t]=r,0!==r&&(o=!0)}if(!o)return 0;let s=this.field.getOne();if(null!=r)for(const e of r){let r=this.field.exp(t.length-1-e),n=new xe(this.field,new Int32Array([this.field.subtract(0,r),1]));s=s.multiply(n)}let a=new xe(this.field,i),c=this.runEuclideanAlgorithm(this.field.buildMonomial(e,1),a,e),l=c[0],u=c[1],d=this.findErrorLocations(l),f=this.findErrorMagnitudes(u,l,d);for(let e=0;e=Math.round(r/2);){let t=n,e=o;if(n=i,o=s,n.isZero())throw h.getChecksumInstance();i=t;let r=this.field.getZero(),a=n.getCoefficient(n.getDegree()),c=this.field.inverse(a);for(;i.getDegree()>=n.getDegree()&&!i.isZero();){let t=i.getDegree()-n.getDegree(),e=this.field.multiply(i.getCoefficient(i.getDegree()),c);r=r.add(this.field.buildMonomial(t,e)),i=i.subtract(n.multiplyByMonomial(t,e))}s=r.multiply(o).subtract(e).negative()}let a=s.getCoefficient(0);if(0===a)throw h.getChecksumInstance();let c=this.field.inverse(a);return[s.multiply(c),i.multiply(c)]}findErrorLocations(t){let e=t.getDegree(),r=new Int32Array(e),n=0;for(let i=1;i0){let e=r?this.topLeft:this.topRight,i=Math.trunc(e.getY()-t);i<0&&(i=0);let s=new it(e.getX(),i);r?n=s:o=s}if(e>0){let t=r?this.bottomLeft:this.bottomRight,n=Math.trunc(t.getY()+e);n>=this.image.getHeight()&&(n=this.image.getHeight()-1);let o=new it(t.getX(),n);r?i=o:s=o}return new Ve(this.image,n,i,o,s)}getMinX(){return this.minX}getMaxX(){return this.maxX}getMinY(){return this.minY}getMaxY(){return this.maxY}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}getBottomLeft(){return this.bottomLeft}getBottomRight(){return this.bottomRight}}class ze{constructor(t,e,r,n){this.columnCount=t,this.errorCorrectionLevel=n,this.rowCountUpperPart=e,this.rowCountLowerPart=r,this.rowCount=e+r}getColumnCount(){return this.columnCount}getErrorCorrectionLevel(){return this.errorCorrectionLevel}getRowCount(){return this.rowCount}getRowCountUpperPart(){return this.rowCountUpperPart}getRowCountLowerPart(){return this.rowCountLowerPart}}class Ge{constructor(){this.buffer=""}static form(t,e){let r=-1;return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g,(function(t,n,i,o,s,a){if("%%"===t)return"%";if(void 0===e[++r])return;t=o?parseInt(o.substr(1)):void 0;let c,l=s?parseInt(s.substr(1)):void 0;switch(a){case"s":c=e[r];break;case"c":c=e[r][0];break;case"f":c=parseFloat(e[r]).toFixed(t);break;case"p":c=parseFloat(e[r]).toPrecision(t);break;case"e":c=parseFloat(e[r]).toExponential(t);break;case"x":c=parseInt(e[r]).toString(l||16);break;case"d":c=parseFloat(parseInt(e[r],l||10).toPrecision(t)).toFixed(0)}c="object"==typeof c?JSON.stringify(c):(+c).toString(l);let h=parseInt(i),u=i&&i[0]+""=="0"?"0":" ";for(;c.length=0&&(e=this.codewords[n],null!=e))return e;if(n=this.imageRowToCodewordIndex(t)+r,nr,getValue:()=>n};i.getValue()>t?(t=i.getValue(),e=[],e.push(i.getKey())):i.getValue()===t&&e.push(i.getKey())}return Pe.toIntArray(e)}getConfidence(t){return this.values.get(t)}}class We extends Ye{constructor(t,e){super(t),this._isLeft=e}setRowNumbers(){for(let t of this.getCodewords())null!=t&&t.setRowNumberAsRowIndicatorColumn()}adjustCompleteIndicatorColumnRowNumbers(t){let e=this.getCodewords();this.setRowNumbers(),this.removeIncorrectCodewords(e,t);let r=this.getBoundingBox(),n=this._isLeft?r.getTopLeft():r.getTopRight(),i=this._isLeft?r.getBottomLeft():r.getBottomRight(),o=this.imageRowToCodewordIndex(Math.trunc(n.getY())),s=this.imageRowToCodewordIndex(Math.trunc(i.getY())),a=-1,c=1,l=0;for(let r=o;r=t.getRowCount()||i>r)e[r]=null;else{let t;t=c>2?(c-2)*i:i;let o=t>=r;for(let n=1;n<=t&&!o;n++)o=null!=e[r-n];o?e[r]=null:(a=n.getRowNumber(),l=1)}}}getRowHeights(){let t=this.getBarcodeMetadata();if(null==t)return null;this.adjustIncompleteIndicatorColumnRowNumbers(t);let e=new Int32Array(t.getRowCount());for(let t of this.getCodewords())if(null!=t){let r=t.getRowNumber();if(r>=e.length)continue;e[r]++}return e}adjustIncompleteIndicatorColumnRowNumbers(t){let e=this.getBoundingBox(),r=this._isLeft?e.getTopLeft():e.getTopRight(),n=this._isLeft?e.getBottomLeft():e.getBottomRight(),i=this.imageRowToCodewordIndex(Math.trunc(r.getY())),o=this.imageRowToCodewordIndex(Math.trunc(n.getY())),s=this.getCodewords(),a=-1;for(let e=i;e=t.getRowCount()?s[e]=null:a=r.getRowNumber())}}getBarcodeMetadata(){let t=this.getCodewords(),e=new Xe,r=new Xe,n=new Xe,i=new Xe;for(let o of t){if(null==o)continue;o.setRowNumberAsRowIndicatorColumn();let t=o.getValue()%30,s=o.getRowNumber();switch(this._isLeft||(s+=2),s%3){case 0:r.setValue(3*t+1);break;case 1:i.setValue(t/3),n.setValue(t%3);break;case 2:e.setValue(t+1)}}if(0===e.getValue().length||0===r.getValue().length||0===n.getValue().length||0===i.getValue().length||e.getValue()[0]<1||r.getValue()[0]+n.getValue()[0]Pe.MAX_ROWS_IN_BARCODE)return null;let o=new ze(e.getValue()[0],r.getValue()[0],n.getValue()[0],i.getValue()[0]);return this.removeIncorrectCodewords(t,o),o}removeIncorrectCodewords(t,e){for(let r=0;re.getRowCount())t[r]=null;else switch(this._isLeft||(o+=2),o%3){case 0:3*i+1!==e.getRowCountUpperPart()&&(t[r]=null);break;case 1:Math.trunc(i/3)===e.getErrorCorrectionLevel()&&i%3===e.getRowCountLowerPart()||(t[r]=null);break;case 2:i+1!==e.getColumnCount()&&(t[r]=null)}}}isLeft(){return this._isLeft}toString(){return"IsLeft: "+this._isLeft+"\n"+super.toString()}}class je{constructor(t,e){this.ADJUST_ROW_NUMBER_SKIP=2,this.barcodeMetadata=t,this.barcodeColumnCount=t.getColumnCount(),this.boundingBox=e,this.detectionResultColumns=new Array(this.barcodeColumnCount+2)}getDetectionResultColumns(){this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]),this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount+1]);let t,e=Pe.MAX_CODEWORDS_IN_BARCODE;do{t=e,e=this.adjustRowNumbersAndGetCount()}while(e>0&&e0&&i0&&(s[0]=r[e-1],s[4]=i[e-1],s[5]=o[e-1]),e>1&&(s[8]=r[e-2],s[10]=i[e-2],s[11]=o[e-2]),e>=1;r=1&e,Qe.RATIOS_TABLE[t]||(Qe.RATIOS_TABLE[t]=new Array(Pe.BARS_IN_MODULE)),Qe.RATIOS_TABLE[t][Pe.BARS_IN_MODULE-n-1]=Math.fround(i/Pe.MODULES_IN_CODEWORD)}}this.bSymbolTableReady=!0}static getDecodedValue(t){let e=Qe.getDecodedCodewordValue(Qe.sampleBitCounts(t));return-1!==e?e:Qe.getClosestDecodedValue(t)}static sampleBitCounts(t){let e=rt.sum(t),r=new Int32Array(Pe.BARS_IN_MODULE),n=0,i=0;for(let o=0;o1)for(let n=0;n=n)break}enew Array(Pe.BARS_IN_MODULE)));class Ke{constructor(){this.segmentCount=-1,this.fileSize=-1,this.timestamp=-1,this.checksum=-1}getSegmentIndex(){return this.segmentIndex}setSegmentIndex(t){this.segmentIndex=t}getFileId(){return this.fileId}setFileId(t){this.fileId=t}getOptionalData(){return this.optionalData}setOptionalData(t){this.optionalData=t}isLastSegment(){return this.lastSegment}setLastSegment(t){this.lastSegment=t}getSegmentCount(){return this.segmentCount}setSegmentCount(t){this.segmentCount=t}getSender(){return this.sender||null}setSender(t){this.sender=t}getAddressee(){return this.addressee||null}setAddressee(t){this.addressee=t}getFileName(){return this.fileName}setFileName(t){this.fileName=t}getFileSize(){return this.fileSize}setFileSize(t){this.fileSize=t}getChecksum(){return this.checksum}setChecksum(t){this.checksum=t}getTimestamp(){return this.timestamp}setTimestamp(t){this.timestamp=t}}class qe{static parseLong(t,e=undefined){return parseInt(t,e)}}class Je extends s{}Je.kind="NullPointerException";class $e{writeBytes(t){this.writeBytesOffset(t,0,t.length)}writeBytesOffset(t,e,r){if(null==t)throw new Je;if(e<0||e>t.length||r<0||e+r>t.length||e+r<0)throw new f;if(0!==r)for(let n=0;n0&&this.grow(t)}grow(t){let e=this.buf.length<<1;if(e-t<0&&(e=t),e<0){if(t<0)throw new tr;e=m.MAX_VALUE}this.buf=w.copyOfUint8Array(this.buf,e)}write(t){this.ensureCapacity(this.count+1),this.buf[this.count]=t,this.count+=1}writeBytesOffset(t,e,r){if(e<0||e>t.length||r<0||e+r-t.length>0)throw new f;this.ensureCapacity(this.count+r),d.arraycopy(t,e,this.buf,this.count,r),this.count+=r}writeTo(t){t.writeBytesOffset(this.buf,0,this.count)}reset(){this.count=0}toByteArray(){return w.copyOfUint8Array(this.buf,this.count)}size(){return this.count}toString(t){return t?"string"==typeof t?this.toString_string(t):this.toString_number(t):this.toString_void()}toString_void(){return new String(this.buf).toString()}toString_string(t){return new String(this.buf).toString()}toString_number(t){return new String(this.buf).toString()}close(){}}function rr(){if("undefined"!=typeof window)return window.BigInt||null;if(void 0!==r.g)return r.g.BigInt||null;if("undefined"!=typeof self)return self.BigInt||null;throw new Error("Can't search globals for BigInt!")}let nr;function ir(t){if(void 0===nr&&(nr=rr()),null===nr)throw new Error("BigInt is not supported!");return nr(t)}!function(t){t[t.ALPHA=0]="ALPHA",t[t.LOWER=1]="LOWER",t[t.MIXED=2]="MIXED",t[t.PUNCT=3]="PUNCT",t[t.ALPHA_SHIFT=4]="ALPHA_SHIFT",t[t.PUNCT_SHIFT=5]="PUNCT_SHIFT"}(X||(X={}));class or{static decode(t,e){let r=new y(""),n=I.ISO8859_1;r.enableDecoding(n);let i=1,o=t[i++],s=new Ke;for(;it[0])throw E.getFormatInstance();let n=new Int32Array(or.NUMBER_OF_SEQUENCE_CODEWORDS);for(let r=0;r0){for(let t=0;t<6;++t)o.write(Number(ir(a)>>ir(8*(5-t))));a=0,s=0}}n===e[0]&&r0){for(let t=0;t<6;++t)o.write(Number(ir(a)>>ir(8*(5-t))));a=0,s=0}}}return i.append(_.decode(o.toByteArray(),r)),n}static numericCompaction(t,e,r){let n=0,i=!1,o=new Int32Array(or.MAX_NUMERIC_CODEWORDS);for(;e0&&(r.append(or.decodeBase900toBase10(o,n)),n=0)}return e}static decodeBase900toBase10(t,e){let r=ir(0);for(let n=0;n@[\\]_`~!\r\t,:\n-.$/\"|*()?{}'",or.MIXED_CHARS="0123456789&\r\t,:#-.$/+%*=^",or.EXP900=rr()?function(){let t=[];t[0]=ir(1);let e=ir(900);t[1]=e;for(let r=2;r<16;r++)t[r]=t[r-1]*e;return t}():[],or.NUMBER_OF_SEQUENCE_CODEWORDS=2;class sr{constructor(){}static decode(t,e,r,n,i,o,s){let a,c=new Ve(t,e,r,n,i),l=null,h=null;for(let r=!0;;r=!1){if(null!=e&&(l=sr.getRowIndicatorColumn(t,c,e,!0,o,s)),null!=n&&(h=sr.getRowIndicatorColumn(t,c,n,!1,o,s)),a=sr.merge(l,h),null==a)throw D.getNotFoundInstance();let i=a.getBoundingBox();if(!r||null==i||!(i.getMinY()c.getMaxY()))break;c=i}a.setBoundingBox(c);let u=a.getBarcodeColumnCount()+1;a.setDetectionResultColumn(0,l),a.setDetectionResultColumn(u,h);let d=null!=l;for(let e=1;e<=u;e++){let r,n=d?e:u-e;if(void 0!==a.getDetectionResultColumn(n))continue;r=0===n||n===u?new We(c,0===n):new Ye(c),a.setDetectionResultColumn(n,r);let i=-1,l=i;for(let e=c.getMinY();e<=c.getMaxY();e++){if(i=sr.getStartColumn(a,n,e,d),i<0||i>c.getMaxX()){if(-1===l)continue;i=l}let h=sr.detectCodeword(t,c.getMinX(),c.getMaxX(),d,i,e,o,s);null!=h&&(r.setCodeword(e,h),l=i,o=Math.min(o,h.getWidth()),s=Math.max(s,h.getWidth()))}}return sr.createDecoderResult(a)}static merge(t,e){if(null==t&&null==e)return null;let r=sr.getBarcodeMetadata(t,e);if(null==r)return null;let n=Ve.merge(sr.adjustBoundingBox(t),sr.adjustBoundingBox(e));return new je(r,n)}static adjustBoundingBox(t){if(null==t)return null;let e=t.getRowHeights();if(null==e)return null;let r=sr.getMax(e),n=0;for(let t of e)if(n+=r-t,t>0)break;let i=t.getCodewords();for(let t=0;n>0&&null==i[t];t++)n--;let o=0;for(let t=e.length-1;t>=0&&(o+=r-e[t],!(e[t]>0));t--);for(let t=i.length-1;o>0&&null==i[t];t--)o--;return t.getBoundingBox().addMissingRows(n,o,t.isLeft())}static getMax(t){let e=-1;for(let r of t)e=Math.max(e,r);return e}static getBarcodeMetadata(t,e){let r,n;return null==t||null==(r=t.getBarcodeMetadata())?null==e?null:e.getBarcodeMetadata():null==e||null==(n=e.getBarcodeMetadata())?r:r.getColumnCount()!==n.getColumnCount()&&r.getErrorCorrectionLevel()!==n.getErrorCorrectionLevel()&&r.getRowCount()!==n.getRowCount()?null:r}static getRowIndicatorColumn(t,e,r,n,i,o){let s=new We(e,n);for(let a=0;a<2;a++){let c=0===a?1:-1,l=Math.trunc(Math.trunc(r.getX()));for(let a=Math.trunc(Math.trunc(r.getY()));a<=e.getMaxY()&&a>=e.getMinY();a+=c){let e=sr.detectCodeword(t,0,t.getWidth(),n,l,a,i,o);null!=e&&(s.setCodeword(a,e),l=n?e.getStartX():e.getEndX())}}return s}static adjustCodewordCount(t,e){let r=e[0][1],n=r.getValue(),i=t.getBarcodeColumnCount()*t.getBarcodeRowCount()-sr.getNumberOfECCodeWords(t.getBarcodeECLevel());if(0===n.length){if(i<1||i>Pe.MAX_CODEWORDS_IN_BARCODE)throw D.getNotFoundInstance();r.setValue(i)}else n[0]!==i&&r.setValue(i)}static createDecoderResult(t){let e=sr.createBarcodeMatrix(t);sr.adjustCodewordCount(t,e);let r=new Array,n=new Int32Array(t.getBarcodeRowCount()*t.getBarcodeColumnCount()),i=[],o=new Array;for(let s=0;s0;){for(let t=0;tnew Array(t.getBarcodeColumnCount()+2)));for(let t=0;t=0){if(n>=e.length)continue;e[n][r].setValue(t.getValue())}}r++}return e}static isValidBarcodeColumn(t,e){return e>=0&&e<=t.getBarcodeColumnCount()+1}static getStartColumn(t,e,r,n){let i=n?1:-1,o=null;if(sr.isValidBarcodeColumn(t,e-i)&&(o=t.getDetectionResultColumn(e-i).getCodeword(r)),null!=o)return n?o.getEndX():o.getStartX();if(o=t.getDetectionResultColumn(e).getCodewordNearby(r),null!=o)return n?o.getStartX():o.getEndX();if(sr.isValidBarcodeColumn(t,e-i)&&(o=t.getDetectionResultColumn(e-i).getCodewordNearby(r)),null!=o)return n?o.getEndX():o.getStartX();let s=0;for(;sr.isValidBarcodeColumn(t,e-i);){e-=i;for(let r of t.getDetectionResultColumn(e).getCodewords())if(null!=r)return(n?r.getEndX():r.getStartX())+i*s*(r.getEndX()-r.getStartX());s++}return n?t.getBoundingBox().getMinX():t.getBoundingBox().getMaxX()}static detectCodeword(t,e,r,n,i,o,s,a){i=sr.adjustCodewordStartColumn(t,e,r,n,i,o);let c,l=sr.getModuleBitCount(t,e,r,n,i,o);if(null==l)return null;let h=rt.sum(l);if(n)c=i+h;else{for(let t=0;t=e)&&c=e:ssr.CODEWORD_SKEW_SIZE)return i;s+=a}a=-a,n=!n}return s}static checkCodewordSkew(t,e,r){return e-sr.CODEWORD_SKEW_SIZE<=t&&t<=r+sr.CODEWORD_SKEW_SIZE}static decodeCodewords(t,e,r){if(0===t.length)throw E.getFormatInstance();let n=1<r/2+sr.MAX_ERRORS||r<0||r>sr.MAX_EC_CODEWORDS)throw h.getChecksumInstance();return sr.errorCorrection.decode(t,r,e)}static verifyCodewordCount(t,e){if(t.length<4)throw E.getFormatInstance();let r=t[0];if(r>t.length)throw E.getFormatInstance();if(0===r){if(!(e>=1;return e}static getCodewordBucketNumber(t){return t instanceof Int32Array?this.getCodewordBucketNumber_Int32Array(t):this.getCodewordBucketNumber_number(t)}static getCodewordBucketNumber_number(t){return sr.getCodewordBucketNumber(sr.getBitCountForCodeword(t))}static getCodewordBucketNumber_Int32Array(t){return(t[0]-t[2]+t[4]-t[6]+9)%9}static toString(t){let e=new Ge;for(let r=0;rt))}static getMaxWidth(t,e){return null==t||null==e?0:Math.trunc(Math.abs(t.getX()-e.getX()))}static getMinWidth(t,e){return null==t||null==e?m.MAX_VALUE:Math.trunc(Math.abs(t.getX()-e.getX()))}static getMaxCodewordWidth(t){return Math.floor(Math.max(Math.max(ar.getMaxWidth(t[0],t[4]),ar.getMaxWidth(t[6],t[2])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN),Math.max(ar.getMaxWidth(t[1],t[5]),ar.getMaxWidth(t[7],t[3])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN)))}static getMinCodewordWidth(t){return Math.floor(Math.min(Math.min(ar.getMinWidth(t[0],t[4]),ar.getMinWidth(t[6],t[2])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN),Math.min(ar.getMinWidth(t[1],t[5]),ar.getMinWidth(t[7],t[3])*Pe.MODULES_IN_CODEWORD/Pe.MODULES_IN_STOP_PATTERN)))}reset(){}}class cr extends s{}cr.kind="ReaderException";class lr{constructor(t,e){this.verbose=!0===t,e&&this.setHints(e)}decode(t,e){return e&&this.setHints(e),this.decodeInternal(t)}decodeWithState(t){return null!==this.readers&&void 0!==this.readers||this.setHints(null),this.decodeInternal(t)}setHints(t){this.hints=t;const r=!e(t)&&!0===t.get(C.TRY_HARDER),n=e(t)?null:t.get(C.POSSIBLE_FORMATS),i=new Array;if(!e(n)){const e=n.some((t=>t===U.UPC_A||t===U.UPC_E||t===U.EAN_13||t===U.EAN_8||t===U.CODABAR||t===U.CODE_39||t===U.CODE_93||t===U.CODE_128||t===U.ITF||t===U.RSS_14||t===U.RSS_EXPANDED));e&&!r&&i.push(new ie(t,this.verbose)),n.includes(U.QR_CODE)&&i.push(new Le),n.includes(U.DATA_MATRIX)&&i.push(new ge),n.includes(U.AZTEC)&&i.push(new gt),n.includes(U.PDF_417)&&i.push(new ar),e&&r&&i.push(new ie(t,this.verbose))}0===i.length&&(r||i.push(new ie(t,this.verbose)),i.push(new Le),i.push(new ge),i.push(new gt),i.push(new ar),r&&i.push(new ie(t,this.verbose))),this.readers=i}reset(){if(null!==this.readers)for(const t of this.readers)t.reset()}decodeInternal(t){if(null===this.readers)throw new cr("No readers where selected, nothing can be read.");for(const e of this.readers)try{return e.decode(t,this.hints)}catch(t){if(t instanceof cr)continue}throw new D("No MultiFormat Readers were able to detect the code.")}}var hr;!function(t){t[t.ERROR_CORRECTION=0]="ERROR_CORRECTION",t[t.CHARACTER_SET=1]="CHARACTER_SET",t[t.DATA_MATRIX_SHAPE=2]="DATA_MATRIX_SHAPE",t[t.MIN_SIZE=3]="MIN_SIZE",t[t.MAX_SIZE=4]="MAX_SIZE",t[t.MARGIN=5]="MARGIN",t[t.PDF417_COMPACT=6]="PDF417_COMPACT",t[t.PDF417_COMPACTION=7]="PDF417_COMPACTION",t[t.PDF417_DIMENSIONS=8]="PDF417_DIMENSIONS",t[t.AZTEC_LAYERS=9]="AZTEC_LAYERS",t[t.QR_VERSION=10]="QR_VERSION"}(hr||(hr={}));var ur=hr;class dr{constructor(t){this.field=t,this.cachedGenerators=[],this.cachedGenerators.push(new Q(t,Int32Array.from([1])))}buildGenerator(t){const e=this.cachedGenerators;if(t>=e.length){let r=e[e.length-1];const n=this.field;for(let i=e.length;i<=t;i++){const t=r.multiply(new Q(n,Int32Array.from([1,n.exp(i-1+n.getGeneratorBase())])));e.push(t),r=t}}return e[t]}encode(t,e){if(0===e)throw new c("No error correction bytes");const r=t.length-e;if(r<=0)throw new c("No data bytes provided");const n=this.buildGenerator(e),i=new Int32Array(r);d.arraycopy(t,0,i,0,r);let o=new Q(this.field,i);o=o.multiplyByMonomial(e,1);const s=o.divide(n)[1].getCoefficients(),a=e-s.length;for(let e=0;e=5&&(r+=fr.N1+(n-5)),n=1,s=i)}n>=5&&(r+=fr.N1+(n-5))}return r}}fr.N1=3,fr.N2=3,fr.N3=40,fr.N4=10;class gr{constructor(t,e){this.width=t,this.height=e;const r=new Array(e);for(let n=0;n!==e;n++)r[n]=new Uint8Array(t);this.bytes=r}getHeight(){return this.height}getWidth(){return this.width}get(t,e){return this.bytes[e][t]}getArray(){return this.bytes}setNumber(t,e,r){this.bytes[e][t]=r}setBoolean(t,e,r){this.bytes[e][t]=r?1:0}clear(t){for(const e of this.bytes)w.fill(e,t)}equals(t){if(!(t instanceof gr))return!1;const e=t;if(this.width!==e.width)return!1;if(this.height!==e.height)return!1;for(let t=0,r=this.height;t>\n"),t.toString()}setMode(t){this.mode=t}setECLevel(t){this.ecLevel=t}setVersion(t){this.version=t}setMaskPattern(t){this.maskPattern=t}setMatrix(t){this.matrix=t}static isValidMaskPattern(t){return t>=0&&t0;){for(6===o&&(o-=1);s>=0&&s=r;)t^=e<=0)for(let t=0;t!==r;t++){const r=n[t];r>=0&&pr.isEmpty(e.get(r,i))&&pr.embedPositionAdjustmentPattern(r-2,i-2,e)}}}}pr.POSITION_DETECTION_PATTERN=Array.from([Int32Array.from([1,1,1,1,1,1,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,1,1,1,1,1,1])]),pr.POSITION_ADJUSTMENT_PATTERN=Array.from([Int32Array.from([1,1,1,1,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,0,1,0,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,1,1,1,1])]),pr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE=Array.from([Int32Array.from([-1,-1,-1,-1,-1,-1,-1]),Int32Array.from([6,18,-1,-1,-1,-1,-1]),Int32Array.from([6,22,-1,-1,-1,-1,-1]),Int32Array.from([6,26,-1,-1,-1,-1,-1]),Int32Array.from([6,30,-1,-1,-1,-1,-1]),Int32Array.from([6,34,-1,-1,-1,-1,-1]),Int32Array.from([6,22,38,-1,-1,-1,-1]),Int32Array.from([6,24,42,-1,-1,-1,-1]),Int32Array.from([6,26,46,-1,-1,-1,-1]),Int32Array.from([6,28,50,-1,-1,-1,-1]),Int32Array.from([6,30,54,-1,-1,-1,-1]),Int32Array.from([6,32,58,-1,-1,-1,-1]),Int32Array.from([6,34,62,-1,-1,-1,-1]),Int32Array.from([6,26,46,66,-1,-1,-1]),Int32Array.from([6,26,48,70,-1,-1,-1]),Int32Array.from([6,26,50,74,-1,-1,-1]),Int32Array.from([6,30,54,78,-1,-1,-1]),Int32Array.from([6,30,56,82,-1,-1,-1]),Int32Array.from([6,30,58,86,-1,-1,-1]),Int32Array.from([6,34,62,90,-1,-1,-1]),Int32Array.from([6,28,50,72,94,-1,-1]),Int32Array.from([6,26,50,74,98,-1,-1]),Int32Array.from([6,30,54,78,102,-1,-1]),Int32Array.from([6,28,54,80,106,-1,-1]),Int32Array.from([6,32,58,84,110,-1,-1]),Int32Array.from([6,30,58,86,114,-1,-1]),Int32Array.from([6,34,62,90,118,-1,-1]),Int32Array.from([6,26,50,74,98,122,-1]),Int32Array.from([6,30,54,78,102,126,-1]),Int32Array.from([6,26,52,78,104,130,-1]),Int32Array.from([6,30,56,82,108,134,-1]),Int32Array.from([6,34,60,86,112,138,-1]),Int32Array.from([6,30,58,86,114,142,-1]),Int32Array.from([6,34,62,90,118,146,-1]),Int32Array.from([6,30,54,78,102,126,150]),Int32Array.from([6,24,50,76,102,128,154]),Int32Array.from([6,28,54,80,106,132,158]),Int32Array.from([6,32,58,84,110,136,162]),Int32Array.from([6,26,54,82,110,138,166]),Int32Array.from([6,30,58,86,114,142,170])]),pr.TYPE_INFO_COORDINATES=Array.from([Int32Array.from([8,0]),Int32Array.from([8,1]),Int32Array.from([8,2]),Int32Array.from([8,3]),Int32Array.from([8,4]),Int32Array.from([8,5]),Int32Array.from([8,7]),Int32Array.from([8,8]),Int32Array.from([7,8]),Int32Array.from([5,8]),Int32Array.from([4,8]),Int32Array.from([3,8]),Int32Array.from([2,8]),Int32Array.from([1,8]),Int32Array.from([0,8])]),pr.VERSION_INFO_POLY=7973,pr.TYPE_INFO_POLY=1335,pr.TYPE_INFO_MASK_PATTERN=21522;class Ar{constructor(t,e){this.dataBytes=t,this.errorCorrectionBytes=e}getDataBytes(){return this.dataBytes}getErrorCorrectionBytes(){return this.errorCorrectionBytes}}class Cr{constructor(){}static calculateMaskPenalty(t){return fr.applyMaskPenaltyRule1(t)+fr.applyMaskPenaltyRule2(t)+fr.applyMaskPenaltyRule3(t)+fr.applyMaskPenaltyRule4(t)}static encode(t,e,r=null){let n=Cr.DEFAULT_BYTE_MODE_ENCODING;const i=null!==r&&void 0!==r.get(ur.CHARACTER_SET);i&&(n=r.get(ur.CHARACTER_SET).toString());const o=this.chooseMode(t,n),s=new p;if(o===_e.BYTE&&(i||Cr.DEFAULT_BYTE_MODE_ENCODING!==n)){const t=I.getCharacterSetECIByName(n);void 0!==t&&this.appendECI(t,s)}this.appendModeInfo(o,s);const a=new p;let c;if(this.appendBytes(t,o,a,n),null!==r&&void 0!==r.get(ur.QR_VERSION)){const t=Number.parseInt(r.get(ur.QR_VERSION).toString(),10);c=Ce.getVersionForNumber(t);const n=this.calculateBitsNeeded(o,s,a,c);if(!this.willFit(n,c,e))throw new mr("Data too big for requested version")}else c=this.recommendVersion(e,o,s,a);const l=new p;l.appendBitArray(s);const h=o===_e.BYTE?a.getSizeInBytes():t.length;this.appendLengthInfo(h,c,o,l),l.appendBitArray(a);const u=c.getECBlocksForLevel(e),d=c.getTotalCodewords()-u.getTotalECCodewords();this.terminateBits(d,l);const f=this.interleaveWithECBytes(l,c.getTotalCodewords(),d,u.getNumBlocks()),g=new wr;g.setECLevel(e),g.setMode(o),g.setVersion(c);const w=c.getDimensionForVersion(),m=new gr(w,w),A=this.chooseMaskPattern(f,e,c,m);return g.setMaskPattern(A),pr.buildMatrix(f,e,c,A,m),g.setMatrix(m),g}static recommendVersion(t,e,r,n){const i=this.calculateBitsNeeded(e,r,n,Ce.getVersionForNumber(1)),o=this.chooseVersion(i,t),s=this.calculateBitsNeeded(e,r,n,o);return this.chooseVersion(s,t)}static calculateBitsNeeded(t,e,r,n){return e.getSize()+t.getCharacterCountBits(n)+r.getSize()}static getAlphanumericCode(t){return t159)&&(r<224||r>235))return!1}return!0}static chooseMaskPattern(t,e,r,n){let i=Number.MAX_SAFE_INTEGER,o=-1;for(let s=0;s=(t+7)/8}static terminateBits(t,e){const r=8*t;if(e.getSize()>r)throw new mr("data bits cannot fit in the QR Code"+e.getSize()+" > "+r);for(let t=0;t<4&&e.getSize()0)for(let t=n;t<8;t++)e.appendBit(!1);const i=t-e.getSizeInBytes();for(let t=0;t=r)throw new mr("Block ID too large");const s=t%r,a=r-s,c=Math.floor(t/r),l=c+1,h=Math.floor(e/r),u=h+1,d=c-h,f=l-u;if(d!==f)throw new mr("EC bytes mismatch");if(r!==a+s)throw new mr("RS blocks mismatch");if(t!==(h+d)*a+(u+f)*s)throw new mr("Total bytes mismatch");n=1<=0&&e<=9}static appendNumericBytes(t,e){const r=t.length;let n=0;for(;n=33088&&n<=40956?i=n-33088:n>=57408&&n<=60351&&(i=n-49472),-1===i)throw new mr("Invalid byte sequence");const o=192*(i>>8)+(255&i);e.appendBits(o,13)}}static appendECI(t,e){e.appendBits(_e.ECI.getBits(),4),e.appendBits(t.getValue(),8)}}Cr.ALPHANUMERIC_TABLE=Int32Array.from([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,36,-1,-1,-1,37,38,-1,-1,-1,-1,39,40,-1,41,42,43,0,1,2,3,4,5,6,7,8,9,44,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1]),Cr.DEFAULT_BYTE_MODE_ENCODING=I.UTF8.getName();class Er{write(t,e,r,n=null){if(0===t.length)throw new c("Found empty contents");if(e<0||r<0)throw new c("Requested dimensions are too small: "+e+"x"+r);let i=we.L,o=Er.QUIET_ZONE_SIZE;null!==n&&(void 0!==n.get(ur.ERROR_CORRECTION)&&(i=we.fromString(n.get(ur.ERROR_CORRECTION).toString())),void 0!==n.get(ur.MARGIN)&&(o=Number.parseInt(n.get(ur.MARGIN).toString(),10)));const s=Cr.encode(t,i,n);return this.renderResult(s,e,r,o)}writeToDom(t,e,r,n,i=null){"string"==typeof t&&(t=document.querySelector(t));const o=this.write(e,r,n,i);t&&t.appendChild(o)}renderResult(t,e,r,n){const i=t.getMatrix();if(null===i)throw new $;const o=i.getWidth(),s=i.getHeight(),a=o+2*n,c=s+2*n,l=Math.max(e,a),h=Math.max(r,c),u=Math.min(Math.floor(l/a),Math.floor(h/c)),d=Math.floor((l-o*u)/2),f=Math.floor((h-s*u)/2),g=this.createSVGElement(l,h);for(let t=0,e=f;te||i+s>r)throw new c("Crop rectangle does not fit within image data.");a&&this.reverseHorizontal(o,s)}getRow(t,e){if(t<0||t>=this.getHeight())throw new c("Requested row is outside the image: "+t);const r=this.getWidth();(null==e||e.length>16&255,o=r>>7&510,s=255&r;i[e]=(n+o+s)/4&255}this.luminances=i}else this.luminances=t;if(void 0===n&&(this.dataWidth=e),void 0===i&&(this.dataHeight=r),void 0===o&&(this.left=0),void 0===s&&(this.top=0),this.left+e>this.dataWidth||this.top+r>this.dataHeight)throw new c("Crop rectangle does not fit within image data.")}getRow(t,e){if(t<0||t>=this.getHeight())throw new c("Requested row is outside the image: "+t);const r=this.getWidth();(null==e||e.length"}}class Or extends Rr{constructor(t,e,r){super(t,0,0),this.binaryShiftStart=e,this.binaryShiftByteCount=r}appendTo(t,e){for(let r=0;r62?t.appendBits(this.binaryShiftByteCount-31,16):0===r?t.appendBits(Math.min(this.binaryShiftByteCount,31),5):t.appendBits(this.binaryShiftByteCount-31,5)),t.appendBits(e[this.binaryShiftStart+r],8)}addBinaryShift(t,e){return new Or(this,t,e)}toString(){return"<"+this.binaryShiftStart+"::"+(this.binaryShiftStart+this.binaryShiftByteCount-1)+">"}}function br(t,e,r){return new Rr(t,e,r)}const Br=["UPPER","LOWER","DIGIT","MIXED","PUNCT"],Lr=0,Pr=1,vr=2,Fr=3,xr=4,kr=new Rr(null,0,0),Ur=[Int32Array.from([0,327708,327710,327709,656318]),Int32Array.from([590318,0,327710,327709,656318]),Int32Array.from([262158,590300,0,590301,932798]),Int32Array.from([327709,327708,656318,0,327710]),Int32Array.from([327711,656380,656382,656381,0])];const Hr=function(t){for(let e of t)w.fill(e,-1);return t[Lr][xr]=0,t[Pr][xr]=0,t[Pr][Lr]=28,t[Fr][xr]=0,t[vr][xr]=0,t[vr][Lr]=15,t}(w.createInt32Array(6,6));class Vr{constructor(t,e,r,n){this.token=t,this.mode=e,this.binaryShiftByteCount=r,this.bitCount=n}getMode(){return this.mode}getToken(){return this.token}getBinaryShiftByteCount(){return this.binaryShiftByteCount}getBitCount(){return this.bitCount}latchAndAppend(t,e){let r=this.bitCount,n=this.token;if(t!==this.mode){let e=Ur[this.mode][t];n=br(n,65535&e,e>>16),r+=e>>16}let i=t===vr?4:5;return n=br(n,e,i),new Vr(n,t,0,r+i)}shiftAndAppend(t,e){let r=this.token,n=this.mode===vr?4:5;return r=br(r,Hr[this.mode][t],n),r=br(r,e,5),new Vr(r,this.mode,0,this.bitCount+n+5)}addBinaryShiftChar(t){let e=this.token,r=this.mode,n=this.bitCount;if(this.mode===xr||this.mode===vr){let t=Ur[r][Lr];e=br(e,65535&t,t>>16),n+=t>>16,r=Lr}let i=0===this.binaryShiftByteCount||31===this.binaryShiftByteCount?18:62===this.binaryShiftByteCount?9:8,o=new Vr(e,r,this.binaryShiftByteCount+1,n+i);return 2078===o.binaryShiftByteCount&&(o=o.endBinaryShift(t+1)),o}endBinaryShift(t){if(0===this.binaryShiftByteCount)return this;let e=this.token;return e=function(t,e,r){return new Or(t,e,r)}(e,t-this.binaryShiftByteCount,this.binaryShiftByteCount),new Vr(e,this.mode,0,this.bitCount)}isBetterThanOrEqualTo(t){let e=this.bitCount+(Ur[this.mode][t.mode]>>16);return this.binaryShiftByteCountt.binaryShiftByteCount&&t.binaryShiftByteCount>0&&(e+=10),e<=t.bitCount}toBitArray(t){let e=[];for(let r=this.endBinaryShift(t.length).token;null!==r;r=r.getPrevious())e.unshift(r);let r=new p;for(const n of e)n.appendTo(r,t);return r}toString(){return T.format("%s bits=%d bytes=%d",Br[this.mode],this.bitCount,this.binaryShiftByteCount)}static calculateBinaryShiftCost(t){return t.binaryShiftByteCount>62?21:t.binaryShiftByteCount>31?20:t.binaryShiftByteCount>0?10:0}}Vr.INITIAL_STATE=new Vr(kr,Lr,0,0);const zr=function(t){const e=T.getCharCode(" "),r=T.getCharCode("."),n=T.getCharCode(",");t[Lr][e]=1;const i=T.getCharCode("Z"),o=T.getCharCode("A");for(let e=o;e<=i;e++)t[Lr][e]=e-o+2;t[Pr][e]=1;const s=T.getCharCode("z"),a=T.getCharCode("a");for(let e=a;e<=s;e++)t[Pr][e]=e-a+2;t[vr][e]=1;const c=T.getCharCode("9"),l=T.getCharCode("0");for(let e=l;e<=c;e++)t[vr][e]=e-l+2;t[vr][n]=12,t[vr][r]=13;const h=["\0"," ","","","","","","","","\b","\t","\n","\v","\f","\r","","","","","","@","\\","^","_","`","|","~",""];for(let e=0;e","?","[","]","{","}"];for(let e=0;e0&&(t[xr][T.getCharCode(u[e])]=e);return t}(w.createInt32Array(5,256));class Gr{constructor(t){this.text=t}encode(){const t=T.getCharCode(" "),e=T.getCharCode("\n");let r=Dr.singletonList(Vr.INITIAL_STATE);for(let n=0;n0?(r=Gr.updateStateListForPair(r,n,i),n++):r=this.updateStateListForChar(r,n)}return Dr.min(r,((t,e)=>t.getBitCount()-e.getBitCount())).toBitArray(this.text)}updateStateListForChar(t,e){const r=[];for(let n of t)this.updateStateForChar(n,e,r);return Gr.simplifyStates(r)}updateStateForChar(t,e,r){let n=255&this.text[e],i=zr[t.getMode()][n]>0,o=null;for(let s=0;s<=xr;s++){let a=zr[s][n];if(a>0){if(null==o&&(o=t.endBinaryShift(e)),!i||s===t.getMode()||s===vr){const t=o.latchAndAppend(s,a);r.push(t)}if(!i&&Hr[t.getMode()][s]>=0){const t=o.shiftAndAppend(s,a);r.push(t)}}}if(t.getBinaryShiftByteCount()>0||0===zr[t.getMode()][n]){let n=t.addBinaryShiftChar(e);r.push(n)}}static updateStateListForPair(t,e,r){const n=[];for(let i of t)this.updateStateForPair(i,e,r,n);return this.simplifyStates(n)}static updateStateForPair(t,e,r,n){let i=t.endBinaryShift(e);if(n.push(i.latchAndAppend(xr,r)),t.getMode()!==xr&&n.push(i.shiftAndAppend(xr,r)),3===r||4===r){let t=i.latchAndAppend(vr,16-r).latchAndAppend(vr,1);n.push(t)}if(t.getBinaryShiftByteCount()>0){let r=t.addBinaryShiftChar(e).addBinaryShiftChar(e+1);n.push(r)}}static simplifyStates(t){let e=[];for(const r of t){let t=!0;for(const n of e){if(n.isBetterThanOrEqualTo(r)){t=!1;break}r.isBetterThanOrEqualTo(n)&&(e=e.filter((t=>t!==n)))}t&&e.push(r)}return e}}class Yr{constructor(){}static encodeBytes(t){return Yr.encode(t,Yr.DEFAULT_EC_PERCENT,Yr.DEFAULT_AZTEC_LAYERS)}static encode(t,e,r){let n,i,o,s,a,l=new Gr(t).encode(),h=m.truncDivision(l.getSize()*e,100)+11,u=l.getSize()+h;if(r!==Yr.DEFAULT_AZTEC_LAYERS){if(n=r<0,i=Math.abs(r),i>(n?Yr.MAX_NB_BITS_COMPACT:Yr.MAX_NB_BITS))throw new c(T.format("Illegal value %s for layers",r));o=Yr.totalBitsInLayer(i,n),s=Yr.WORD_SIZE[i];let t=o-o%s;if(a=Yr.stuffBits(l,s),a.getSize()+h>t)throw new c("Data to large for user specified layer");if(n&&a.getSize()>64*s)throw new c("Data to large for user specified layer")}else{s=0,a=null;for(let t=0;;t++){if(t>Yr.MAX_NB_BITS)throw new c("Data too large for an Aztec code");if(n=t<=3,i=n?t+1:t,o=Yr.totalBitsInLayer(i,n),u>o)continue;null!=a&&s===Yr.WORD_SIZE[i]||(s=Yr.WORD_SIZE[i],a=Yr.stuffBits(l,s));let e=o-o%s;if(!(n&&a.getSize()>64*s)&&a.getSize()+h<=e)break}}let d,f=Yr.generateCheckWords(a,o,s),g=a.getSize()/s,w=Yr.generateModeMessage(n,i,g),p=(n?11:14)+4*i,A=new Int32Array(p);if(n){d=p;for(let t=0;t=n||t.get(o+r))&&(s|=1<{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";var t;r.r(n),r.d(n,{Html5Qrcode:()=>W,Html5QrcodeScanType:()=>i,Html5QrcodeScanner:()=>ft,Html5QrcodeScannerState:()=>w,Html5QrcodeSupportedFormats:()=>t}),function(t){t[t.QR_CODE=0]="QR_CODE",t[t.AZTEC=1]="AZTEC",t[t.CODABAR=2]="CODABAR",t[t.CODE_39=3]="CODE_39",t[t.CODE_93=4]="CODE_93",t[t.CODE_128=5]="CODE_128",t[t.DATA_MATRIX=6]="DATA_MATRIX",t[t.MAXICODE=7]="MAXICODE",t[t.ITF=8]="ITF",t[t.EAN_13=9]="EAN_13",t[t.EAN_8=10]="EAN_8",t[t.PDF_417=11]="PDF_417",t[t.RSS_14=12]="RSS_14",t[t.RSS_EXPANDED=13]="RSS_EXPANDED",t[t.UPC_A=14]="UPC_A",t[t.UPC_E=15]="UPC_E",t[t.UPC_EAN_EXTENSION=16]="UPC_EAN_EXTENSION"}(t||(t={}));var e,i,o=new Map([[t.QR_CODE,"QR_CODE"],[t.AZTEC,"AZTEC"],[t.CODABAR,"CODABAR"],[t.CODE_39,"CODE_39"],[t.CODE_93,"CODE_93"],[t.CODE_128,"CODE_128"],[t.DATA_MATRIX,"DATA_MATRIX"],[t.MAXICODE,"MAXICODE"],[t.ITF,"ITF"],[t.EAN_13,"EAN_13"],[t.EAN_8,"EAN_8"],[t.PDF_417,"PDF_417"],[t.RSS_14,"RSS_14"],[t.RSS_EXPANDED,"RSS_EXPANDED"],[t.UPC_A,"UPC_A"],[t.UPC_E,"UPC_E"],[t.UPC_EAN_EXTENSION,"UPC_EAN_EXTENSION"]]);function s(e){return Object.values(t).includes(e)}!function(t){t[t.UNKNOWN=0]="UNKNOWN",t[t.URL=1]="URL"}(e||(e={})),function(t){t[t.SCAN_TYPE_CAMERA=0]="SCAN_TYPE_CAMERA",t[t.SCAN_TYPE_FILE=1]="SCAN_TYPE_FILE"}(i||(i={}));var a,c=function(){function t(){}return t.GITHUB_PROJECT_URL="https://github.com/mebjas/html5-qrcode",t.SCAN_DEFAULT_FPS=2,t.DEFAULT_DISABLE_FLIP=!1,t.DEFAULT_REMEMBER_LAST_CAMERA_USED=!0,t.DEFAULT_SUPPORTED_SCAN_TYPE=[i.SCAN_TYPE_CAMERA,i.SCAN_TYPE_FILE],t}(),l=function(){function t(t,e){this.format=t,this.formatName=e}return t.prototype.toString=function(){return this.formatName},t.create=function(e){if(!o.has(e))throw"".concat(e," not in html5QrcodeSupportedFormatsTextMap");return new t(e,o.get(e))},t}(),h=function(){function t(){}return t.createFromText=function(t){return{decodedText:t,result:{text:t}}},t.createFromQrcodeResult=function(t){return{decodedText:t.text,result:t}},t}();!function(t){t[t.UNKWOWN_ERROR=0]="UNKWOWN_ERROR",t[t.IMPLEMENTATION_ERROR=1]="IMPLEMENTATION_ERROR",t[t.NO_CODE_FOUND_ERROR=2]="NO_CODE_FOUND_ERROR"}(a||(a={}));var u=function(){function t(){}return t.createFrom=function(t){return{errorMessage:t,type:a.UNKWOWN_ERROR}},t}(),d=function(){function t(t){this.verbose=t}return t.prototype.log=function(t){this.verbose&&console.log(t)},t.prototype.warn=function(t){this.verbose&&console.warn(t)},t.prototype.logError=function(t,e){(this.verbose||!0===e)&&console.error(t)},t.prototype.logErrors=function(t){if(0===t.length)throw"Logger#logError called without arguments";this.verbose&&console.error(t)},t}();function f(t){return null==t}var g,w,m=function(){function t(){}return t.codeParseError=function(t){return"QR code parse error, error = ".concat(t)},t.errorGettingUserMedia=function(t){return"Error getting userMedia, error = ".concat(t)},t.onlyDeviceSupportedError=function(){return"The device doesn't support navigator.mediaDevices , only supported cameraIdOrConfig in this case is deviceId parameter (string)."},t.cameraStreamingNotSupported=function(){return"Camera streaming not supported by the browser."},t.unableToQuerySupportedDevices=function(){return"Unable to query supported devices, unknown error."},t.insecureContextCameraQueryError=function(){return"Camera access is only supported in secure context like https or localhost."},t.scannerPaused=function(){return"Scanner paused"},t}(),p=function(){function t(){}return t.scanningStatus=function(){return"Scanning"},t.idleStatus=function(){return"Idle"},t.errorStatus=function(){return"Error"},t.permissionStatus=function(){return"Permission"},t.noCameraFoundErrorStatus=function(){return"No Cameras"},t.lastMatch=function(t){return"Last Match: ".concat(t)},t.codeScannerTitle=function(){return"Code Scanner"},t.cameraPermissionTitle=function(){return"Request Camera Permissions"},t.cameraPermissionRequesting=function(){return"Requesting camera permissions..."},t.noCameraFound=function(){return"No camera found"},t.scanButtonStopScanningText=function(){return"Stop Scanning"},t.scanButtonStartScanningText=function(){return"Start Scanning"},t.torchOnButton=function(){return"Switch On Torch"},t.torchOffButton=function(){return"Switch Off Torch"},t.torchOnFailedMessage=function(){return"Failed to turn on torch"},t.torchOffFailedMessage=function(){return"Failed to turn off torch"},t.scanButtonScanningStarting=function(){return"Launching Camera..."},t.textIfCameraScanSelected=function(){return"Scan an Image File"},t.textIfFileScanSelected=function(){return"Scan using camera directly"},t.selectCamera=function(){return"Select Camera"},t.fileSelectionChooseImage=function(){return"Choose Image"},t.fileSelectionChooseAnother=function(){return"Choose Another"},t.fileSelectionNoImageSelected=function(){return"No image choosen"},t.anonymousCameraPrefix=function(){return"Anonymous Camera"},t.dragAndDropMessage=function(){return"Or drop an image to scan"},t.dragAndDropMessageOnlyImages=function(){return"Or drop an image to scan (other files not supported)"},t.zoom=function(){return"zoom"},t.loadingImage=function(){return"Loading image..."},t.cameraScanAltText=function(){return"Camera based scan"},t.fileScanAltText=function(){return"Fule based scan"},t}(),A=function(){function t(){}return t.poweredBy=function(){return"Powered by "},t.reportIssues=function(){return"Report issues"},t}(),C=function(){function t(){}return t.isMediaStreamConstraintsValid=function(t,e){if("object"!=typeof t){var r=typeof t;return e.logError("videoConstraints should be of type object, the "+"object passed is of type ".concat(r,"."),!0),!1}for(var n=new Set(["autoGainControl","channelCount","echoCancellation","latency","noiseSuppression","sampleRate","sampleSize","volume"]),i=0,o=Object.keys(t);i0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]r&&(r=s,e=o)}if(!e)throw"No largest barcode found";return e},e.prototype.createBarcodeDetectorFormats=function(t){for(var e=[],r=0,n=t;r0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]=n&&(t.isClosed=!0,t.parentElement.removeChild(t.surface),e())}))}))},t.prototype.getCapabilities=function(){return new B(this.getFirstTrackOrFail())},t}(),P=function(){function t(t){this.mediaStream=t}return t.prototype.render=function(t,e,r){return D(this,void 0,void 0,(function(){return M(this,(function(n){return[2,L.create(t,this.mediaStream,e,r)]}))}))},t.create=function(e){return D(this,void 0,void 0,(function(){var r;return M(this,(function(n){switch(n.label){case 0:if(!navigator.mediaDevices)throw"navigator.mediaDevices not supported";return r={audio:!1,video:e},[4,navigator.mediaDevices.getUserMedia(r)];case 1:return[2,new t(n.sent())]}}))}))},t}(),v=function(t,e,r,n){return new(r||(r=Promise))((function(i,o){function s(t){try{c(n.next(t))}catch(t){o(t)}}function a(t){try{c(n.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}c((n=n.apply(t,e||[])).next())}))},F=function(t,e){var r,n,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(c){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]t&&(this.logger.warn("`qrbox.width` or `qrbox` is larger than the width of the root element. The width will be truncated to the width of root element."),i=t),i)},e.prototype.validateQrboxConfig=function(t){if("number"!=typeof t&&"function"!=typeof t&&(void 0===t.width||void 0===t.height))throw"Invalid instance of QrDimensions passed for 'config.qrbox'. Both 'width' and 'height' should be set."},e.prototype.toQrdimensions=function(t,e,r){if("number"==typeof r)return{width:r,height:r};if("function"==typeof r)try{return r(t,e)}catch(t){throw new Error("qrbox config was passed as a function but it failed with unknown error"+t)}return r},e.prototype.setupUi=function(t,e,r){r.isShadedBoxEnabled()&&this.validateQrboxSize(t,e,r);var n=f(r.qrbox)?{width:t,height:e}:r.qrbox;this.validateQrboxConfig(n);var i=this.toQrdimensions(t,e,n);i.height>e&&this.logger.warn("[Html5Qrcode] config.qrbox has height that isgreater than the height of the video stream. Shading will be ignored");var o=r.isShadedBoxEnabled()&&i.height<=e,s={x:0,y:0,width:t,height:e},a=o?this.getShadedRegionBounds(t,e,i):s,c=this.createCanvasElement(a.width,a.height),l=c.getContext("2d",{willReadFrequently:!0});l.canvas.width=a.width,l.canvas.height=a.height,this.element.append(c),o&&this.possiblyInsertShadingElement(this.element,t,e,i),this.createScannerPausedUiElement(this.element),this.qrRegion=a,this.context=l,this.canvasElement=c},e.prototype.createScannerPausedUiElement=function(t){var e=document.createElement("div");e.innerText=m.scannerPaused(),e.style.display="none",e.style.position="absolute",e.style.top="0px",e.style.zIndex="1",e.style.background="rgba(9, 9, 9, 0.46)",e.style.color="#FFECEC",e.style.textAlign="center",e.style.width="100%",t.appendChild(e),this.scannerPausedUiElement=e},e.prototype.scanContext=function(t,e){var r=this;return this.stateManagerProxy.isPaused()?Promise.resolve(!1):this.qrcode.decodeAsync(this.canvasElement).then((function(e){return t(e.text,h.createFromQrcodeResult(e)),r.possiblyUpdateShaders(!0),!0})).catch((function(t){r.possiblyUpdateShaders(!1);var n=m.codeParseError(t);return e(n,u.createFrom(n)),!1}))},e.prototype.foreverScan=function(t,e,r){var n=this;if(this.shouldScan&&this.renderedCamera){var i=this.renderedCamera.getSurface(),o=i.videoWidth/i.clientWidth,s=i.videoHeight/i.clientHeight;if(!this.qrRegion)throw"qrRegion undefined when localMediaStream is ready.";var a=this.qrRegion.width*o,c=this.qrRegion.height*s,l=this.qrRegion.x*o,h=this.qrRegion.y*s;this.context.drawImage(i,l,h,a,c,0,0,this.qrRegion.width,this.qrRegion.height);var u=function(){n.foreverScanTimeout=setTimeout((function(){n.foreverScan(t,e,r)}),n.getTimeoutFps(t.fps))};this.scanContext(e,r).then((function(i){i||!0===t.disableFlip?u():(n.context.translate(n.context.canvas.width,0),n.context.scale(-1,1),n.scanContext(e,r).finally((function(){u()})))})).catch((function(t){n.logger.logError("Error happend while scanning context",t),u()}))}},e.prototype.createVideoConstraints=function(t){if("string"==typeof t)return{deviceId:{exact:t}};if("object"==typeof t){var e="facingMode",r="deviceId",n={user:!0,environment:!0},i="exact",o=function(t){if(t in n)return!0;throw"config has invalid 'facingMode' value = "+"'".concat(t,"'")},s=Object.keys(t);if(1!==s.length)throw"'cameraIdOrConfig' object should have exactly 1 key,"+" if passed as an object, found ".concat(s.length," keys");var a=Object.keys(t)[0];if(a!==e&&a!==r)throw"Only '".concat(e,"' and '").concat(r,"' ")+" are supported for 'cameraIdOrConfig'";if(a!==e){var c=t.deviceId;if("string"==typeof c)return{deviceId:c};if("object"==typeof c){if(i in c)return{deviceId:{exact:c["".concat(i)]}};throw"'deviceId' should be string or object with"+" ".concat(i," as key.")}throw"Invalid type of 'deviceId' = ".concat(typeof c)}var l=t.facingMode;if("string"==typeof l){if(o(l))return{facingMode:l}}else{if("object"!=typeof l)throw"Invalid type of 'facingMode' = ".concat(typeof l);if(!(i in l))throw"'facingMode' should be string or object with"+" ".concat(i," as key.");if(o(l["".concat(i)]))return{facingMode:{exact:l["".concat(i)]}}}}throw"Invalid type of 'cameraIdOrConfig' = ".concat(typeof t)},e.prototype.computeCanvasDrawConfig=function(t,e,r,n){if(t<=r&&e<=n)return{x:(r-t)/2,y:(n-e)/2,width:t,height:e};var i=t,o=e;return t>r&&(e*=r/t,t=r),e>n&&(t*=n/e,e=n),this.logger.log("Image downsampled from "+"".concat(i,"X").concat(o)+" to ".concat(t,"X").concat(e,".")),this.computeCanvasDrawConfig(t,e,r,n)},e.prototype.clearElement=function(){if(this.stateManagerProxy.isScanning())throw"Cannot clear while scan is ongoing, close it first.";var t=document.getElementById(this.elementId);t&&(t.innerHTML="")},e.prototype.possiblyUpdateShaders=function(t){this.qrMatch!==t&&(this.hasBorderShaders&&this.borderShaders&&this.borderShaders.length&&this.borderShaders.forEach((function(e){e.style.backgroundColor=t?Y.BORDER_SHADER_MATCH_COLOR:Y.BORDER_SHADER_DEFAULT_COLOR})),this.qrMatch=t)},e.prototype.possiblyCloseLastScanImageFile=function(){this.lastScanImageFile&&(URL.revokeObjectURL(this.lastScanImageFile),this.lastScanImageFile=null)},e.prototype.createCanvasElement=function(t,e,r){var n=t,i=e,o=document.createElement("canvas");return o.style.width="".concat(n,"px"),o.style.height="".concat(i,"px"),o.style.display="none",o.id=f(r)?"qr-canvas":r,o},e.prototype.getShadedRegionBounds=function(t,e,r){if(r.width>t||r.height>e)throw"'config.qrbox' dimensions should not be greater than the dimensions of the root HTML element.";return{x:(t-r.width)/2,y:(e-r.height)/2,width:r.width,height:r.height}},e.prototype.possiblyInsertShadingElement=function(t,e,r,n){if(!(e-n.width<1||r-n.height<1)){var i=document.createElement("div");i.style.position="absolute";var o=(e-n.width)/2,s=(r-n.height)/2;if(i.style.borderLeft="".concat(o,"px solid rgba(0, 0, 0, 0.48)"),i.style.borderRight="".concat(o,"px solid rgba(0, 0, 0, 0.48)"),i.style.borderTop="".concat(s,"px solid rgba(0, 0, 0, 0.48)"),i.style.borderBottom="".concat(s,"px solid rgba(0, 0, 0, 0.48)"),i.style.boxSizing="border-box",i.style.top="0px",i.style.bottom="0px",i.style.left="0px",i.style.right="0px",i.id="".concat(Y.SHADED_REGION_ELEMENT_ID),e-n.width<11||r-n.height<11)this.hasBorderShaders=!1;else{this.insertShaderBorders(i,40,5,-5,null,0,!0),this.insertShaderBorders(i,40,5,-5,null,0,!1),this.insertShaderBorders(i,40,5,null,-5,0,!0),this.insertShaderBorders(i,40,5,null,-5,0,!1),this.insertShaderBorders(i,5,45,-5,null,-5,!0),this.insertShaderBorders(i,5,45,null,-5,-5,!0),this.insertShaderBorders(i,5,45,-5,null,-5,!1),this.insertShaderBorders(i,5,45,null,-5,-5,!1),this.hasBorderShaders=!0}t.append(i)}},e.prototype.insertShaderBorders=function(t,e,r,n,i,o,s){var a=document.createElement("div");a.style.position="absolute",a.style.backgroundColor=Y.BORDER_SHADER_DEFAULT_COLOR,a.style.width="".concat(e,"px"),a.style.height="".concat(r,"px"),null!==n&&(a.style.top="".concat(n,"px")),null!==i&&(a.style.bottom="".concat(i,"px")),s?a.style.left="".concat(o,"px"):a.style.right="".concat(o,"px"),this.borderShaders||(this.borderShaders=[]),this.borderShaders.push(a),t.appendChild(a)},e.prototype.showPausedState=function(){if(!this.scannerPausedUiElement)throw"[internal error] scanner paused UI element not found";this.scannerPausedUiElement.style.display="block"},e.prototype.hidePausedState=function(){if(!this.scannerPausedUiElement)throw"[internal error] scanner paused UI element not found";this.scannerPausedUiElement.style.display="none"},e.prototype.getTimeoutFps=function(t){return 1e3/t},e}(),j="data:image/svg+xml;base64,",Z=j+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNzEuNjQzIDM3MS42NDMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM3MS42NDMgMzcxLjY0MyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTEwNS4wODQgMzguMjcxaDE2My43Njh2MjBIMTA1LjA4NHoiLz48cGF0aCBkPSJNMzExLjU5NiAxOTAuMTg5Yy03LjQ0MS05LjM0Ny0xOC40MDMtMTYuMjA2LTMyLjc0My0yMC41MjJWMzBjMC0xNi41NDItMTMuNDU4LTMwLTMwLTMwSDEyNS4wODRjLTE2LjU0MiAwLTMwIDEzLjQ1OC0zMCAzMHYxMjAuMTQzaC04LjI5NmMtMTYuNTQyIDAtMzAgMTMuNDU4LTMwIDMwdjEuMzMzYTI5LjgwNCAyOS44MDQgMCAwIDAgNC42MDMgMTUuOTM5Yy03LjM0IDUuNDc0LTEyLjEwMyAxNC4yMjEtMTIuMTAzIDI0LjA2MXYxLjMzM2MwIDkuODQgNC43NjMgMTguNTg3IDEyLjEwMyAyNC4wNjJhMjkuODEgMjkuODEgMCAwIDAtNC42MDMgMTUuOTM4djEuMzMzYzAgMTYuNTQyIDEzLjQ1OCAzMCAzMCAzMGg4LjMyNGMuNDI3IDExLjYzMSA3LjUwMyAyMS41ODcgMTcuNTM0IDI2LjE3Ny45MzEgMTAuNTAzIDQuMDg0IDMwLjE4NyAxNC43NjggNDUuNTM3YTkuOTg4IDkuOTg4IDAgMCAwIDguMjE2IDQuMjg4IDkuOTU4IDkuOTU4IDAgMCAwIDUuNzA0LTEuNzkzYzQuNTMzLTMuMTU1IDUuNjUtOS4zODggMi40OTUtMTMuOTIxLTYuNzk4LTkuNzY3LTkuNjAyLTIyLjYwOC0xMC43Ni0zMS40aDgyLjY4NWMuMjcyLjQxNC41NDUuODE4LjgxNSAxLjIxIDMuMTQyIDQuNTQxIDkuMzcyIDUuNjc5IDEzLjkxMyAyLjUzNCA0LjU0Mi0zLjE0MiA1LjY3Ny05LjM3MSAyLjUzNS0xMy45MTMtMTEuOTE5LTE3LjIyOS04Ljc4Ny0zNS44ODQgOS41ODEtNTcuMDEyIDMuMDY3LTIuNjUyIDEyLjMwNy0xMS43MzIgMTEuMjE3LTI0LjAzMy0uODI4LTkuMzQzLTcuMTA5LTE3LjE5NC0xOC42NjktMjMuMzM3YTkuODU3IDkuODU3IDAgMCAwLTEuMDYxLS40ODZjLS40NjYtLjE4Mi0xMS40MDMtNC41NzktOS43NDEtMTUuNzA2IDEuMDA3LTYuNzM3IDE0Ljc2OC04LjI3MyAyMy43NjYtNy42NjYgMjMuMTU2IDEuNTY5IDM5LjY5OCA3LjgwMyA0Ny44MzYgMTguMDI2IDUuNzUyIDcuMjI1IDcuNjA3IDE2LjYyMyA1LjY3MyAyOC43MzMtLjQxMyAyLjU4NS0uODI0IDUuMjQxLTEuMjQ1IDcuOTU5LTUuNzU2IDM3LjE5NC0xMi45MTkgODMuNDgzLTQ5Ljg3IDExNC42NjEtNC4yMjEgMy41NjEtNC43NTYgOS44Ny0xLjE5NCAxNC4wOTJhOS45OCA5Ljk4IDAgMCAwIDcuNjQ4IDMuNTUxIDkuOTU1IDkuOTU1IDAgMCAwIDYuNDQ0LTIuMzU4YzQyLjY3Mi0zNi4wMDUgNTAuODAyLTg4LjUzMyA1Ni43MzctMTI2Ljg4OC40MTUtMi42ODQuODIxLTUuMzA5IDEuMjI5LTcuODYzIDIuODM0LTE3LjcyMS0uNDU1LTMyLjY0MS05Ljc3Mi00NC4zNDV6bS0yMzIuMzA4IDQyLjYyYy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi0xLjMzM2MwLTUuNTE0IDQuNDg2LTEwIDEwLTEwaDE1djIxLjMzM2gtMTV6bS0yLjUtNTIuNjY2YzAtNS41MTQgNC40ODYtMTAgMTAtMTBoNy41djIxLjMzM2gtNy41Yy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi0xLjMzM3ptMTcuNSA5My45OTloLTcuNWMtNS41MTQgMC0xMC00LjQ4Ni0xMC0xMHYtMS4zMzNjMC01LjUxNCA0LjQ4Ni0xMCAxMC0xMGg3LjV2MjEuMzMzem0zMC43OTYgMjguODg3Yy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi04LjI3MWg5MS40NTdjLS44NTEgNi42NjgtLjQzNyAxMi43ODcuNzMxIDE4LjI3MWgtODIuMTg4em03OS40ODItMTEzLjY5OGMtMy4xMjQgMjAuOTA2IDEyLjQyNyAzMy4xODQgMjEuNjI1IDM3LjA0IDUuNDQxIDIuOTY4IDcuNTUxIDUuNjQ3IDcuNzAxIDcuMTg4LjIxIDIuMTUtMi41NTMgNS42ODQtNC40NzcgNy4yNTEtLjQ4Mi4zNzgtLjkyOS44LTEuMzM1IDEuMjYxLTYuOTg3IDcuOTM2LTExLjk4MiAxNS41Mi0xNS40MzIgMjIuNjg4aC05Ny41NjRWMzBjMC01LjUxNCA0LjQ4Ni0xMCAxMC0xMGgxMjMuNzY5YzUuNTE0IDAgMTAgNC40ODYgMTAgMTB2MTM1LjU3OWMtMy4wMzItLjM4MS02LjE1LS42OTQtOS4zODktLjkxNC0yNS4xNTktMS42OTQtNDIuMzcgNy43NDgtNDQuODk4IDI0LjY2NnoiLz48cGF0aCBkPSJNMTc5LjEyOSA4My4xNjdoLTI0LjA2YTUgNSAwIDAgMC01IDV2MjQuMDYxYTUgNSAwIDAgMCA1IDVoMjQuMDZhNSA1IDAgMCAwIDUtNVY4OC4xNjdhNSA1IDAgMCAwLTUtNXpNMTcyLjYyOSAxNDIuODZoLTEyLjU2VjEzMC44YTUgNSAwIDEgMC0xMCAwdjE3LjA2MWE1IDUgMCAwIDAgNSA1aDE3LjU2YTUgNSAwIDEgMCAwLTEwLjAwMXpNMjE2LjU2OCA4My4xNjdoLTI0LjA2YTUgNSAwIDAgMC01IDV2MjQuMDYxYTUgNSAwIDAgMCA1IDVoMjQuMDZhNSA1IDAgMCAwIDUtNVY4OC4xNjdhNSA1IDAgMCAwLTUtNXptLTUgMjQuMDYxaC0xNC4wNlY5My4xNjdoMTQuMDZ2MTQuMDYxek0yMTEuNjY5IDEyNS45MzZIMTk3LjQxYTUgNSAwIDAgMC01IDV2MTQuMjU3YTUgNSAwIDAgMCA1IDVoMTQuMjU5YTUgNSAwIDAgMCA1LTV2LTE0LjI1N2E1IDUgMCAwIDAtNS01eiIvPjwvc3ZnPg==",Q=j+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1OS4wMTggNTkuMDE4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OS4wMTggNTkuMDE4IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJtNTguNzQxIDU0LjgwOS01Ljk2OS02LjI0NGExMC43NCAxMC43NCAwIDAgMCAyLjgyLTcuMjVjMC01Ljk1My00Ljg0My0xMC43OTYtMTAuNzk2LTEwLjc5NlMzNCAzNS4zNjEgMzQgNDEuMzE0IDM4Ljg0MyA1Mi4xMSA0NC43OTYgNTIuMTFjMi40NDEgMCA0LjY4OC0uODI0IDYuNDk5LTIuMTk2bDYuMDAxIDYuMjc3YS45OTguOTk4IDAgMCAwIDEuNDE0LjAzMiAxIDEgMCAwIDAgLjAzMS0xLjQxNHpNMzYgNDEuMzE0YzAtNC44NSAzLjk0Ni04Ljc5NiA4Ljc5Ni04Ljc5NnM4Ljc5NiAzLjk0NiA4Ljc5NiA4Ljc5Ni0zLjk0NiA4Ljc5Ni04Ljc5NiA4Ljc5NlMzNiA0Ni4xNjQgMzYgNDEuMzE0ek0xMC40MzEgMTYuMDg4YzAgMy4wNyAyLjQ5OCA1LjU2OCA1LjU2OSA1LjU2OHM1LjU2OS0yLjQ5OCA1LjU2OS01LjU2OGMwLTMuMDcxLTIuNDk4LTUuNTY5LTUuNTY5LTUuNTY5cy01LjU2OSAyLjQ5OC01LjU2OSA1LjU2OXptOS4xMzggMGMwIDEuOTY4LTEuNjAyIDMuNTY4LTMuNTY5IDMuNTY4cy0zLjU2OS0xLjYwMS0zLjU2OS0zLjU2OCAxLjYwMi0zLjU2OSAzLjU2OS0zLjU2OSAzLjU2OSAxLjYwMSAzLjU2OSAzLjU2OXoiLz48cGF0aCBkPSJtMzAuODgyIDI4Ljk4NyA5LjE4LTEwLjA1NCAxMS4yNjIgMTAuMzIzYTEgMSAwIDAgMCAxLjM1MS0xLjQ3NWwtMTItMTFhMSAxIDAgMCAwLTEuNDE0LjA2M2wtOS43OTQgMTAuNzI3LTQuNzQzLTQuNzQzYTEuMDAzIDEuMDAzIDAgMCAwLTEuMzY4LS4wNDRMNi4zMzkgMzcuNzY4YTEgMSAwIDEgMCAxLjMyMiAxLjUwMWwxNi4zMTMtMTQuMzYyIDcuMzE5IDcuMzE4YS45OTkuOTk5IDAgMSAwIDEuNDE0LTEuNDE0bC0xLjgyNS0xLjgyNHoiLz48cGF0aCBkPSJNMzAgNDYuNTE4SDJ2LTQyaDU0djI4YTEgMSAwIDEgMCAyIDB2LTI5YTEgMSAwIDAgMC0xLTFIMWExIDEgMCAwIDAtMSAxdjQ0YTEgMSAwIDAgMCAxIDFoMjlhMSAxIDAgMSAwIDAtMnoiLz48L3N2Zz4=",K=j+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgNDYwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NjAgNDYwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMjMwIDBDMTAyLjk3NSAwIDAgMTAyLjk3NSAwIDIzMHMxMDIuOTc1IDIzMCAyMzAgMjMwIDIzMC0xMDIuOTc0IDIzMC0yMzBTMzU3LjAyNSAwIDIzMCAwem0zOC4zMzMgMzc3LjM2YzAgOC42NzYtNy4wMzQgMTUuNzEtMTUuNzEgMTUuNzFoLTQzLjEwMWMtOC42NzYgMC0xNS43MS03LjAzNC0xNS43MS0xNS43MVYyMDIuNDc3YzAtOC42NzYgNy4wMzMtMTUuNzEgMTUuNzEtMTUuNzFoNDMuMTAxYzguNjc2IDAgMTUuNzEgNy4wMzMgMTUuNzEgMTUuNzFWMzc3LjM2ek0yMzAgMTU3Yy0yMS41MzkgMC0zOS0xNy40NjEtMzktMzlzMTcuNDYxLTM5IDM5LTM5IDM5IDE3LjQ2MSAzOSAzOS0xNy40NjEgMzktMzkgMzl6Ii8+PC9zdmc+",q=function(){function t(){}return t.createDefault=function(){return{hasPermission:!1,lastUsedCameraId:null}},t}(),J=function(){function t(){this.data=q.createDefault();var e=localStorage.getItem(t.LOCAL_STORAGE_KEY);e?this.data=JSON.parse(e):this.reset()}return t.prototype.hasCameraPermissions=function(){return this.data.hasPermission},t.prototype.getLastUsedCameraId=function(){return this.data.lastUsedCameraId},t.prototype.setHasPermission=function(t){this.data.hasPermission=t,this.flush()},t.prototype.setLastUsedCameraId=function(t){this.data.lastUsedCameraId=t,this.flush()},t.prototype.resetLastUsedCameraId=function(){this.data.lastUsedCameraId=null,this.flush()},t.prototype.reset=function(){this.data=q.createDefault(),this.flush()},t.prototype.flush=function(){localStorage.setItem(t.LOCAL_STORAGE_KEY,JSON.stringify(this.data))},t.LOCAL_STORAGE_KEY="HTML5_QRCODE_DATA",t}(),$=function(){function t(){this.infoDiv=document.createElement("div")}return t.prototype.renderInto=function(t){this.infoDiv.style.position="absolute",this.infoDiv.style.top="10px",this.infoDiv.style.right="10px",this.infoDiv.style.zIndex="2",this.infoDiv.style.display="none",this.infoDiv.style.padding="5pt",this.infoDiv.style.border="1px solid #171717",this.infoDiv.style.fontSize="10pt",this.infoDiv.style.background="rgb(0 0 0 / 69%)",this.infoDiv.style.borderRadius="5px",this.infoDiv.style.textAlign="center",this.infoDiv.style.fontWeight="400",this.infoDiv.style.color="white",this.infoDiv.innerText=A.poweredBy();var e=document.createElement("a");e.innerText="ScanApp",e.href="https://scanapp.org",e.target="new",e.style.color="white",this.infoDiv.appendChild(e);var r=document.createElement("br"),n=document.createElement("br");this.infoDiv.appendChild(r),this.infoDiv.appendChild(n);var i=document.createElement("a");i.innerText=A.reportIssues(),i.href="https://github.com/mebjas/html5-qrcode/issues",i.target="new",i.style.color="white",this.infoDiv.appendChild(i),t.appendChild(this.infoDiv)},t.prototype.show=function(){this.infoDiv.style.display="block"},t.prototype.hide=function(){this.infoDiv.style.display="none"},t}(),tt=function(){function t(t,e){this.isShowingInfoIcon=!0,this.onTapIn=t,this.onTapOut=e,this.infoIcon=document.createElement("img")}return t.prototype.renderInto=function(t){var e=this;this.infoIcon.alt="Info icon",this.infoIcon.src=K,this.infoIcon.style.position="absolute",this.infoIcon.style.top="4px",this.infoIcon.style.right="4px",this.infoIcon.style.opacity="0.6",this.infoIcon.style.cursor="pointer",this.infoIcon.style.zIndex="2",this.infoIcon.style.width="16px",this.infoIcon.style.height="16px",this.infoIcon.onmouseover=function(t){return e.onHoverIn()},this.infoIcon.onmouseout=function(t){return e.onHoverOut()},this.infoIcon.onclick=function(t){return e.onClick()},t.appendChild(this.infoIcon)},t.prototype.onHoverIn=function(){this.isShowingInfoIcon&&(this.infoIcon.style.opacity="1")},t.prototype.onHoverOut=function(){this.isShowingInfoIcon&&(this.infoIcon.style.opacity="0.6")},t.prototype.onClick=function(){this.isShowingInfoIcon?(this.isShowingInfoIcon=!1,this.onTapIn(),this.infoIcon.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAQgAAAEIBarqQRAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE1SURBVDiNfdI7S0NBEAXgLya1otFgpbYSbISAgpXYi6CmiH9KCAiChaVga6OiWPgfRDQ+0itaGVNosXtluWwcuMzePfM4M3sq8lbHBubwg1dc4m1E/J/N4ghDPOIsfk/4xiEao5KX0McFljN4C9d4QTPXuY99jP3DsIoDPGM6BY5i5yI5R7O4q+ImFkJY2DCh3cAH2klyB+9J1xUMMAG7eCh1a+Mr+k48b5diXrFVwwLuS+BJ9MfR7+G0FHOHhTHhnXNWS87VDF4pcnfQK4Ep7XScNLmPTZgURNKKYENYWDpzW1BhscS1WHS8CDgURFJQrWcoF3c13KKbgg1BYQfy8xZWEzTTw1QZbAoKu8FqJnktdu5hcVSHmchiILzzuaDQvjBzV2m8yohCE1jHfPx/xhU+y4G/D75ELlRJsSYAAAAASUVORK5CYII=",this.infoIcon.style.opacity="1"):(this.isShowingInfoIcon=!0,this.onTapOut(),this.infoIcon.src=K,this.infoIcon.style.opacity="0.6")},t}(),et=function(){function t(){var t=this;this.infoDiv=new $,this.infoIcon=new tt((function(){t.infoDiv.show()}),(function(){t.infoDiv.hide()}))}return t.prototype.renderInto=function(t){this.infoDiv.renderInto(t),this.infoIcon.renderInto(t)},t}(),rt=function(){function t(){}return t.hasPermissions=function(){return t=this,e=void 0,n=function(){var t,e,r,n;return function(t,e){var r,n,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(c){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(i=2&a[0]?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]1},t.prototype.isCameraScanRequired=function(){for(var e=0,r=this.supportedScanTypes;ee)throw"Max ".concat(e," values expected for ")+"supportedScanTypes";for(var r=0,n=t;r0&&i[i.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]20){var e=t.substring(0,8),r=t.length,n=t.substring(r-8,r);t="".concat(e,"....").concat(n)}var i=p.fileSelectionChooseAnother()+" - "+t;this.fileSelectionButton.innerText=i},t.prototype.setInitialValueToButton=function(){var t=p.fileSelectionChooseImage()+" - "+p.fileSelectionNoImageSelected();this.fileSelectionButton.innerText=t},t.prototype.getFileScanInputId=function(){return"html5-qrcode-private-filescan-input"},t.create=function(e,r,n){return new t(e,r,n)},t}(),ut=function(){function t(t){this.selectElement=ot.createElement("select",it.CAMERA_SELECTION_SELECT_ID),this.cameras=t,this.options=[]}return t.prototype.render=function(t){var e=document.createElement("span");e.style.marginRight="10px";var r=this.cameras.length;if(0===r)throw new Error("No cameras found");if(1===r)e.style.display="none";else{var n=p.selectCamera();e.innerText="".concat(n," (").concat(this.cameras.length,") ")}for(var i=1,o=0,s=this.cameras;o0?(t.removeChild(e),n.renderCameraSelection(r)):(n.setHeaderMessage(p.noCameraFound(),U.STATUS_WARNING),i())})).catch((function(t){n.persistedDataManager.setHasPermission(!1),r?r.disabled=!1:i(),n.setHeaderMessage(t,U.STATUS_WARNING),n.showHideScanTypeSwapLink(!0)}))},t.prototype.createPermissionButton=function(t,e){var r=this,n=ot.createElement("button",this.getCameraPermissionButtonId());n.innerText=p.cameraPermissionTitle(),n.addEventListener("click",(function(){n.disabled=!0,r.createCameraListUi(t,e,n)})),e.appendChild(n)},t.prototype.createPermissionsUi=function(t,e){var r=this;nt.isCameraScanType(this.currentScanType)&&this.persistedDataManager.hasCameraPermissions()?rt.hasPermissions().then((function(n){n?r.createCameraListUi(t,e):(r.persistedDataManager.setHasPermission(!1),r.createPermissionButton(t,e))})).catch((function(n){r.persistedDataManager.setHasPermission(!1),r.createPermissionButton(t,e)})):this.createPermissionButton(t,e)},t.prototype.createSectionControlPanel=function(){var t=document.getElementById(this.getDashboardSectionId()),e=document.createElement("div");t.appendChild(e);var r=document.createElement("div");r.id=this.getDashboardSectionCameraScanRegionId(),r.style.display=nt.isCameraScanType(this.currentScanType)?"block":"none",e.appendChild(r);var n=document.createElement("div");n.style.textAlign="center",r.appendChild(n),this.scanTypeSelector.isCameraScanRequired()&&this.createPermissionsUi(r,n),this.renderFileScanUi(e)},t.prototype.renderFileScanUi=function(t){var e=nt.isFileScanType(this.currentScanType),r=this;this.fileSelectionUi=ht.create(t,e,(function(t){if(!r.html5Qrcode)throw"html5Qrcode not defined";nt.isFileScanType(r.currentScanType)&&(r.setHeaderMessage(p.loadingImage()),r.html5Qrcode.scanFileV2(t,!0).then((function(t){r.resetHeaderMessage(),r.qrCodeSuccessCallback(t.decodedText,t)})).catch((function(t){r.setHeaderMessage(t,U.STATUS_WARNING),r.qrCodeErrorCallback(t,u.createFrom(t))})))}))},t.prototype.renderCameraSelection=function(t){var e=this,r=this,n=document.getElementById(this.getDashboardSectionCameraScanRegionId());n.style.textAlign="center";var i=dt.create(n,!1),o=ut.create(n,t),s=document.createElement("span"),a=ot.createElement("button",it.CAMERA_START_BUTTON_ID);a.innerText=p.scanButtonStartScanningText(),s.appendChild(a);var c,l=ot.createElement("button",it.CAMERA_STOP_BUTTON_ID);l.innerText=p.scanButtonStopScanningText(),l.style.display="none",l.disabled=!0,s.appendChild(l),n.appendChild(s);var h=function(t){t||(a.style.display="none"),a.innerText=p.scanButtonStartScanningText(),a.style.opacity="1",a.disabled=!1,t&&(a.style.display="inline-block")};if(a.addEventListener("click",(function(t){a.innerText=p.scanButtonScanningStarting(),o.disable(),a.disabled=!0,a.style.opacity="0.5",e.scanTypeSelector.hasMoreThanOneScanType()&&r.showHideScanTypeSwapLink(!1),r.resetHeaderMessage();var n,u=o.getValue();r.persistedDataManager.setLastUsedCameraId(u),r.html5Qrcode.start(u,(n=r.config,{fps:n.fps,qrbox:n.qrbox,aspectRatio:n.aspectRatio,disableFlip:n.disableFlip,videoConstraints:n.videoConstraints}),r.qrCodeSuccessCallback,r.qrCodeErrorCallback).then((function(t){l.disabled=!1,l.style.display="inline-block",h(!1);var n=r.html5Qrcode.getRunningTrackCameraCapabilities();!0===e.config.showTorchButtonIfSupported&&function(t){t.torchFeature().isSupported()?(c?c.updateTorchCapability(t.torchFeature()):c=lt.create(s,t.torchFeature(),{display:"none",marginLeft:"5px"},(function(t){r.setHeaderMessage(t,U.STATUS_WARNING)})),c.show()):c&&c.hide()}(n),!0===e.config.showZoomSliderIfSupported&&function(t){var r=t.zoomFeature();if(r.isSupported()){i.setOnCameraZoomValueChangeCallback((function(t){r.apply(t)}));var n,o,s,a=1;e.config.defaultZoomValueIfSupported&&(a=e.config.defaultZoomValueIfSupported),n=a,o=r.min(),a=n>(s=r.max())?s:n",e.appendChild(t.cameraScanImage)},this.cameraScanImage.width=64,this.cameraScanImage.style.opacity="0.8",this.cameraScanImage.src=Z,this.cameraScanImage.alt=p.cameraScanAltText()},t.prototype.insertFileScanImageToScanRegion=function(){var t=this,e=document.getElementById(this.getScanRegionId());if(this.fileScanImage)return e.innerHTML="
",void e.appendChild(this.fileScanImage);this.fileScanImage=new Image,this.fileScanImage.onload=function(r){e.innerHTML="
",e.appendChild(t.fileScanImage)},this.fileScanImage.width=64,this.fileScanImage.style.opacity="0.8",this.fileScanImage.src=Q,this.fileScanImage.alt=p.fileScanAltText()},t.prototype.clearScanRegion=function(){document.getElementById(this.getScanRegionId()).innerHTML=""},t.prototype.getDashboardSectionId=function(){return"".concat(this.elementId,"__dashboard_section")},t.prototype.getDashboardSectionCameraScanRegionId=function(){return"".concat(this.elementId,"__dashboard_section_csr")},t.prototype.getDashboardSectionSwapLinkId=function(){return it.SCAN_TYPE_CHANGE_ANCHOR_ID},t.prototype.getScanRegionId=function(){return"".concat(this.elementId,"__scan_region")},t.prototype.getDashboardId=function(){return"".concat(this.elementId,"__dashboard")},t.prototype.getHeaderMessageContainerId=function(){return"".concat(this.elementId,"__header_message")},t.prototype.getCameraPermissionButtonId=function(){return it.CAMERA_PERMISSION_BUTTON_ID},t.prototype.getCameraScanRegion=function(){return document.getElementById(this.getDashboardSectionCameraScanRegionId())},t.prototype.getDashboardSectionSwapLink=function(){return document.getElementById(this.getDashboardSectionSwapLinkId())},t.prototype.getHeaderMessageDiv=function(){return document.getElementById(this.getHeaderMessageContainerId())},t}()})(),__Html5QrcodeLibrary__=n})();if (window) { if (!Html5QrcodeScanner) { var Html5QrcodeScanner = window.__Html5QrcodeLibrary__.Html5QrcodeScanner; } if (!Html5Qrcode) { var Html5Qrcode = window.__Html5QrcodeLibrary__.Html5Qrcode; } if (!Html5QrcodeSupportedFormats) { var Html5QrcodeSupportedFormats = window.__Html5QrcodeLibrary__.Html5QrcodeSupportedFormats } if (!Html5QrcodeScannerState) { var Html5QrcodeScannerState = window.__Html5QrcodeLibrary__.Html5QrcodeScannerState; } if (!Html5QrcodeScanType) { var Html5QrcodeScanType = window.__Html5QrcodeLibrary__.Html5QrcodeScanType; }} \ No newline at end of file diff --git a/plugins/tiddlywiki/qrcode/files/LICENSE b/plugins/tiddlywiki/qrcode/files/qrcode/LICENSE similarity index 100% rename from plugins/tiddlywiki/qrcode/files/LICENSE rename to plugins/tiddlywiki/qrcode/files/qrcode/LICENSE diff --git a/plugins/tiddlywiki/qrcode/files/README.md b/plugins/tiddlywiki/qrcode/files/qrcode/README.md similarity index 100% rename from plugins/tiddlywiki/qrcode/files/README.md rename to plugins/tiddlywiki/qrcode/files/qrcode/README.md diff --git a/plugins/tiddlywiki/qrcode/files/qrcode.js b/plugins/tiddlywiki/qrcode/files/qrcode/qrcode.js similarity index 100% rename from plugins/tiddlywiki/qrcode/files/qrcode.js rename to plugins/tiddlywiki/qrcode/files/qrcode/qrcode.js diff --git a/plugins/tiddlywiki/qrcode/files/tiddlywiki.files b/plugins/tiddlywiki/qrcode/files/tiddlywiki.files index 91384cd47..ff8ffea16 100644 --- a/plugins/tiddlywiki/qrcode/files/tiddlywiki.files +++ b/plugins/tiddlywiki/qrcode/files/tiddlywiki.files @@ -1,18 +1,34 @@ { "tiddlers": [ { - "file": "qrcode.js", + "file": "qrcode/qrcode.js", "fields": { "type": "application/javascript", - "title": "$:/plugins/tiddlywiki/qrcode/qrcode.js", + "title": "$:/plugins/tiddlywiki/qrcode/qrcode/qrcode.js", "module-type": "library" } },{ - "file": "LICENSE", + "file": "qrcode/LICENSE", "fields": { "type": "text/plain", - "title": "$:/plugins/tiddlywiki/qrcode/license" + "title": "$:/plugins/tiddlywiki/qrcode/qrcode/license" + } + },{ + "file": "html5-qrcode/html5-qrcode.min.js", + "fields": { + "type": "application/javascript", + "title": "$:/plugins/tiddlywiki/qrcode/html5-qrcode/html5-qrcode.js", + "module-type": "library" + }, + "prefix": "window.__Html5QrcodeLibrary__ = {};", + "suffix": "\n;exports.__Html5QrcodeLibrary__ = __Html5QrcodeLibrary__;window.__Html5QrcodeLibrary__ = __Html5QrcodeLibrary__;" + },{ + "file": "html5-qrcode/LICENSE", + "fields": { + "type": "text/plain", + "title": "$:/plugins/tiddlywiki/qrcode/html5-qrcode/license" } } ] } + diff --git a/plugins/tiddlywiki/qrcode/makeqr.js b/plugins/tiddlywiki/qrcode/makeqr.js index 561dfb4a5..2a4e37273 100644 --- a/plugins/tiddlywiki/qrcode/makeqr.js +++ b/plugins/tiddlywiki/qrcode/makeqr.js @@ -16,7 +16,7 @@ Macro to convert a string into a QR Code Information about this macro */ -var qrcode = require("$:/plugins/tiddlywiki/qrcode/qrcode.js"); +var qrcode = require("$:/plugins/tiddlywiki/qrcode/qrcode/qrcode.js"); var QRCODE_GENERATION_ERROR_PREFIX = '', QRCODE_GENERATION_ERROR_SUFFIX = ''; diff --git a/plugins/tiddlywiki/qrcode/plugin.info b/plugins/tiddlywiki/qrcode/plugin.info index 976bb2b3b..9d4f14872 100644 --- a/plugins/tiddlywiki/qrcode/plugin.info +++ b/plugins/tiddlywiki/qrcode/plugin.info @@ -3,5 +3,5 @@ "name": "QR Code", "description": "QR Code generator", "author": "Zeno Zeng", - "list": "readme usage examples license" + "list": "readme docs examples license" } diff --git a/plugins/tiddlywiki/qrcode/readme.tid b/plugins/tiddlywiki/qrcode/readme.tid new file mode 100644 index 000000000..9fbfc625a --- /dev/null +++ b/plugins/tiddlywiki/qrcode/readme.tid @@ -0,0 +1,15 @@ +title: $:/plugins/tiddlywiki/qrcode/readme + +The QR Code Plugin contains several features for working with QR codes and other types of barcode. + +* The ''makeqr'' macro enables any text to be rendered as a [[QR code|https://en.wikipedia.org/wiki/QR_code]]. QR codes are a type of 2-dimensional bar code that encodes arbitrary data: text, numbers, links. QR code readers are available or built-in for smartphones, making them a convenient means to transfer information between devices +* The `<$barcodereader>` widget that enables barcodes to be decoded from the device camera or direct from an image file +* A new toolbar button that can display several QR code renderings of the content of a tiddler: +** Raw content +** Rendered, formatted content +** URL of tiddler + +This plugin uses the following open source libraries: + +* [[qrcode.js by Zeno Zeng|https://github.com/zenozeng/node-yaqrcode]] +* [[Html5-QRCode by Minhaz|https://github.com/mebjas/html5-qrcode]] From 32966c9e915b0be405f6b42ce15f1b3194b5d3d0 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 14 Oct 2023 09:43:23 +0100 Subject: [PATCH 29/33] Introduce jsonset operator (#7742) --- core/modules/filters/json-ops.js | 77 +++++++++++++++ .../test/tiddlers/tests/test-json-filters.js | 18 ++++ editions/tw5.com/tiddlers/filters/jsonset.tid | 96 +++++++++++++++++++ 3 files changed, 191 insertions(+) create mode 100644 editions/tw5.com/tiddlers/filters/jsonset.tid diff --git a/core/modules/filters/json-ops.js b/core/modules/filters/json-ops.js index 2be9ec754..51e509432 100644 --- a/core/modules/filters/json-ops.js +++ b/core/modules/filters/json-ops.js @@ -68,6 +68,54 @@ exports["jsontype"] = function(source,operator,options) { return results; }; +exports["jsonset"] = function(source,operator,options) { + var suffixes = operator.suffixes || [], + type = suffixes[0] && suffixes[0][0], + indexes = operator.operands.slice(0,-1), + value = operator.operands[operator.operands.length - 1], + results = []; + if(operator.operands.length === 1 && operator.operands[0] === "") { + value = undefined; // Prevents the value from being assigned + } + switch(type) { + case "string": + // Use value unchanged + break; + case "boolean": + value = (value === "true" ? true : (value === "false" ? false : undefined)); + break; + case "number": + value = $tw.utils.parseNumber(value); + break; + case "array": + indexes = operator.operands; + value = []; + break; + case "object": + indexes = operator.operands; + value = {}; + break; + case "null": + indexes = operator.operands; + value = null; + break; + case "json": + value = $tw.utils.parseJSONSafe(value,function() {return undefined;}); + break; + default: + // Use value unchanged + break; + } + source(function(tiddler,title) { + var data = $tw.utils.parseJSONSafe(title,title); + if(data) { + data = setDataItem(data,indexes,value); + results.push(JSON.stringify(data)); + } + }); + return results; +}; + /* 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 */ @@ -186,5 +234,34 @@ function getDataItem(data,indexes) { return item; } +/* +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 +*/ +function setDataItem(data,indexes,value) { + // Ignore attempts to assign undefined + if(value === undefined) { + return data; + } + // Check for the root item + if(indexes.length === 0 || (indexes.length === 1 && indexes[0] === "")) { + return value; + } + // Traverse the JSON data structure using the index chain + var current = data; + for(var i = 0; i < indexes.length - 1; i++) { + var index = indexes[i]; + if($tw.utils.hop(current,index)) { + current = current[index]; + } else { + // Return the original JSON data structure if any of the index strings are invalid + return data; + } + } + // Add the value to the end of the index chain + var lastIndex = indexes[indexes.length - 1]; + current[lastIndex] = value; + return data; +} + })(); \ No newline at end of file diff --git a/editions/test/tiddlers/tests/test-json-filters.js b/editions/test/tiddlers/tests/test-json-filters.js index 68a82e774..b2f2c8e82 100644 --- a/editions/test/tiddlers/tests/test-json-filters.js +++ b/editions/test/tiddlers/tests/test-json-filters.js @@ -103,6 +103,24 @@ describe("json filter tests", function() { expect(wiki.filterTiddlers("[{First}jsontype[d],[f],[4]]")).toEqual(["null"]); }); + it("should support the jsonset operator", function() { + expect(wiki.filterTiddlers("[{First}jsonset[]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']); + expect(wiki.filterTiddlers("[{First}jsonset[],[Antelope]]")).toEqual(['"Antelope"']); + expect(wiki.filterTiddlers("[{First}jsonset:number[],[not a number]]")).toEqual(['0']); + expect(wiki.filterTiddlers("[{First}jsonset[id],[Antelope]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":"Antelope"}']); + expect(wiki.filterTiddlers("[{First}jsonset:notatype[id],[Antelope]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":"Antelope"}']); + expect(wiki.filterTiddlers("[{First}jsonset:boolean[id],[false]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":false}']); + expect(wiki.filterTiddlers("[{First}jsonset:boolean[id],[Antelope]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']); + expect(wiki.filterTiddlers("[{First}jsonset:number[id],[42]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":42}']); + expect(wiki.filterTiddlers("[{First}jsonset:null[id]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":null}']); + expect(wiki.filterTiddlers("[{First}jsonset:array[d],[f],[5]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null,[]]}}']); + expect(wiki.filterTiddlers("[{First}jsonset:object[d],[f],[5]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null,{}]}}']); + expect(wiki.filterTiddlers("[{First}jsonset[missing],[id],[Antelope]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']); + expect(wiki.filterTiddlers("[{First}jsonset:json[\"Antelope\"]]")).toEqual(['"Antelope"']); + expect(wiki.filterTiddlers("[{First}jsonset:json[id],[{\"a\":313}]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":{"a":313}}']); + expect(wiki.filterTiddlers("[{First}jsonset:json[notjson]]")).toEqual(['{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}}']); + }); + it("should support the format:json operator", function() { expect(wiki.filterTiddlers("[{First}format:json[]]")).toEqual(["{\"a\":\"one\",\"b\":\"\",\"c\":1.618,\"d\":{\"e\":\"four\",\"f\":[\"five\",\"six\",true,false,null]}}"]); expect(wiki.filterTiddlers("[{First}format:json[4]]")).toEqual(["{\n \"a\": \"one\",\n \"b\": \"\",\n \"c\": 1.618,\n \"d\": {\n \"e\": \"four\",\n \"f\": [\n \"five\",\n \"six\",\n true,\n false,\n null\n ]\n }\n}"]); diff --git a/editions/tw5.com/tiddlers/filters/jsonset.tid b/editions/tw5.com/tiddlers/filters/jsonset.tid new file mode 100644 index 000000000..9f70f6eb4 --- /dev/null +++ b/editions/tw5.com/tiddlers/filters/jsonset.tid @@ -0,0 +1,96 @@ +created: 20230915121010948 +modified: 20230915121010948 +tags: [[Filter Operators]] [[JSON Operators]] +title: jsonset Operator +caption: jsonset +op-purpose: set the value of a property in JSON strings +op-input: a selection of JSON strings +op-parameter: one or more indexes of the property to retrieve and sometimes a value to assign +op-output: the JSON strings with the specified property assigned + +<<.from-version "5.3.2">> See [[JSON in TiddlyWiki]] for background. + +The <<.op jsonset>> operator is used to set a property value in JSON strings. See also the following related operators: + +* <<.olink jsonget>> to retrieve the values of a property in JSON data +* <<.olink jsontype>> to retrieve the type of a JSON value +* <<.olink jsonindexes>> to retrieve the names of the fields of a JSON object, or the indexes of a JSON array +* <<.olink jsonextract>> to retrieve a JSON value as a string of JSON + +Properties within a JSON object are identified by a sequence of indexes. In the following example, the value at `[a]` is `one`, and the value at `[d][f][0]` is `five`. + +``` +{ + "a": "one", + "b": "", + "c": "three", + "d": { + "e": "four", + "f": [ + "five", + "six", + true, + false, + null + ], + "g": { + "x": "max", + "y": "may", + "z": "maize" + } + } +} +``` + +The following examples assume that this JSON data is contained in a variable called `jsondata`. + +The <<.op jsonset>> operator uses multiple operands to specify the indexes of the property to set. When used to assign strings the final operand is interpreted as the value to assign. For example: + +``` +[jsonset[d],[Jaguar]] --> {"a": "one","b": "","c": "three","d": "Jaguar"} +[jsonset[d],[f],[Panther]] --> {"a": "one","b": "","c": "three","d": "{"e": "four","f": "Panther","g": {"x": "max","y": "may","z": "maize"}}"} +``` + +Indexes can be dynamically composed from variables and transclusions: + +``` +[jsonset,{!!field},[0],{CurrentResult}] +``` + +The data type of the value to be assigned to the property can be specified with an optional suffix: + +|!Suffix |!Description | +|''string'' |The string is specified as the final operand | +|''boolean'' |The boolean value is true if the final operand is the string "true" and false if the final operand is the string "false". Any other value for the final string results prevents the property from being assigned | +|''number'' |The numeric value is taken from the final operand. Invalid numbers are interpreted as zero | +|''json'' |The JSON string value is taken from the final operand. Invalid JSON prevents the property from being assigned | +|''object'' |An empty object is assigned to the property. The final operand is not used as a value | +|''array'' |An empty array is assigned to the property. The final operand is not used as a value | +|''null'' |The special value null is assigned to the property. The final operand is not used as a value | + +For example: + +``` +Input string: +{"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}} + +[jsonset[]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}} +[jsonset[],[Antelope]] --> "Antelope" +[jsonset:number[],[not a number]] --> 0 +[jsonset[id],[Antelope]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":"Antelope"} +[jsonset:notatype[id],[Antelope]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":"Antelope"} +[jsonset:boolean[id],[false]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":false} +[jsonset:boolean[id],[Antelope]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}} +[jsonset:number[id],[42]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":42} +[jsonset:null[id]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]},"id":null} +[jsonset:array[d],[f],[5]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null,[]]}} +[jsonset:object[d],[f],[5]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null,{}]}} +[jsonset[missing],[id],[Antelope]] --> {"a":"one","b":"","c":1.618,"d":{"e":"four","f":["five","six",true,false,null]}} +``` + +A subtlety is that the special case of a single operand sets the value of that operand as the new JSON string, entirely replacing the input object. If that operand is blank, the operation is ignored and no assignment takes place. Thus: + +``` +[jsonset[Panther]] --> "Panther" +[jsonset[]] --> {"a": "one","b": "","c": "three","d": "{"e": "four","f": ["five", "six", true, false, null],"g": {"x": "max","y": "may","z": "maize"}}"} +``` From ff1437e4396d5e9b00d1244048d38834945f7119 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 14 Oct 2023 09:44:18 +0100 Subject: [PATCH 30/33] Fix refreshing of transcluded functions (#7698) * Passing test * Failing test * Fix test It still fails, but now fails correctly * Fix refreshing transcluded functions (#7755) We store the previous result of the filter function and recalculate it when the transclude widget needs to be refreshed, refreshing the widget if the result is different. --------- Co-authored-by: Jeremy Ruston <174761+Jermolene@users.noreply.github.com> Co-authored-by: Robin Munn --- core/modules/widgets/transclude.js | 25 ++++++++++++----- .../data/transclude/Variable-Refreshing.tid | 27 +++++++++++++++++++ .../tests/data/transclude/Variable-Static.tid | 15 +++++++++++ 3 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 editions/test/tiddlers/tests/data/transclude/Variable-Refreshing.tid create mode 100644 editions/test/tiddlers/tests/data/transclude/Variable-Static.tid diff --git a/core/modules/widgets/transclude.js b/core/modules/widgets/transclude.js index ac467a2c8..d30ab1fa7 100755 --- a/core/modules/widgets/transclude.js +++ b/core/modules/widgets/transclude.js @@ -109,6 +109,7 @@ TranscludeWidget.prototype.collectAttributes = function() { this.recursionMarker = this.getAttribute("recursionMarker","yes"); } else { this.transcludeVariable = this.getAttribute("$variable"); + this.transcludeVariableIsFunction = false; this.transcludeType = this.getAttribute("$type"); this.transcludeOutput = this.getAttribute("$output","text/html"); this.transcludeTitle = this.getAttribute("$tiddler",this.getVariable("currentTiddler")); @@ -184,7 +185,9 @@ TranscludeWidget.prototype.getTransclusionTarget = function() { if(this.transcludeVariable) { // Transcluding a variable var variableInfo = this.getVariableInfo(this.transcludeVariable,{params: this.getOrderedTransclusionParameters()}); + this.transcludeVariableIsFunction = variableInfo.srcVariable && variableInfo.srcVariable.isFunctionDefinition; text = variableInfo.text; + this.transcludeFunctionResult = text; return { text: variableInfo.text, type: this.transcludeType @@ -219,21 +222,24 @@ TranscludeWidget.prototype.parseTransclusionTarget = function(parseAsInline) { // Transcluding a variable var variableInfo = this.getVariableInfo(this.transcludeVariable,{params: this.getOrderedTransclusionParameters()}), srcVariable = variableInfo && variableInfo.srcVariable; + if(srcVariable && srcVariable.isFunctionDefinition) { + this.transcludeVariableIsFunction = true; + this.transcludeFunctionResult = (variableInfo.resultList ? variableInfo.resultList[0] : variableInfo.text) || ""; + } if(variableInfo.text) { if(srcVariable && srcVariable.isFunctionDefinition) { - var result = (variableInfo.resultList ? variableInfo.resultList[0] : variableInfo.text) || ""; parser = { tree: [{ type: "text", - text: result + text: this.transcludeFunctionResult }], - source: result, + source: this.transcludeFunctionResult, type: "text/vnd.tiddlywiki" }; if(parseAsInline) { parser.tree[0] = { type: "text", - text: result + text: this.transcludeFunctionResult }; } else { parser.tree[0] = { @@ -241,7 +247,7 @@ TranscludeWidget.prototype.parseTransclusionTarget = function(parseAsInline) { tag: "p", children: [{ type: "text", - text: result + text: this.transcludeFunctionResult }] } } @@ -430,12 +436,19 @@ TranscludeWidget.prototype.parserNeedsRefresh = function() { return (this.sourceText === undefined || parserInfo.sourceText !== this.sourceText || parserInfo.parserType !== this.parserType) }; +TranscludeWidget.prototype.functionNeedsRefresh = function() { + var oldResult = this.transcludeFunctionResult; + var variableInfo = this.getVariableInfo(this.transcludeVariable,{params: this.getOrderedTransclusionParameters()}); + var newResult = (variableInfo.resultList ? variableInfo.resultList[0] : variableInfo.text) || ""; + return oldResult !== newResult; +} + /* Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering */ TranscludeWidget.prototype.refresh = function(changedTiddlers) { var changedAttributes = this.computeAttributes(); - if(($tw.utils.count(changedAttributes) > 0) || (!this.transcludeVariable && changedTiddlers[this.transcludeTitle] && this.parserNeedsRefresh())) { + if(($tw.utils.count(changedAttributes) > 0) || (this.transcludeVariableIsFunction && this.functionNeedsRefresh()) || (!this.transcludeVariable && changedTiddlers[this.transcludeTitle] && this.parserNeedsRefresh())) { this.refreshSelf(); return true; } else { diff --git a/editions/test/tiddlers/tests/data/transclude/Variable-Refreshing.tid b/editions/test/tiddlers/tests/data/transclude/Variable-Refreshing.tid new file mode 100644 index 000000000..c1867c2fc --- /dev/null +++ b/editions/test/tiddlers/tests/data/transclude/Variable-Refreshing.tid @@ -0,0 +1,27 @@ +title: Transclude/Variable/Refreshing +description: Transcluding and refreshing a function +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output + +\function list-join(filter, sep:", ") [subfilterjoin] + +<$tiddler tiddler="TestData"> + +<> + + + ++ +title: TestData + + ++ +title: Actions + +<$action-setfield $tiddler="TestData" items={{{ [range[10]join[ ]] }}}/> ++ +title: ExpectedResult + +

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

\ No newline at end of file diff --git a/editions/test/tiddlers/tests/data/transclude/Variable-Static.tid b/editions/test/tiddlers/tests/data/transclude/Variable-Static.tid new file mode 100644 index 000000000..4158569c6 --- /dev/null +++ b/editions/test/tiddlers/tests/data/transclude/Variable-Static.tid @@ -0,0 +1,15 @@ +title: Transclude/Variable/Static +description: Transcluding a function +type: text/vnd.tiddlywiki-multiple +tags: [[$:/tags/wiki-test-spec]] + +title: Output +items: 1 2 3 4 5 6 7 8 9 10 + +\function list-join(filter, sep:", ") [subfilterjoin] + +<> ++ +title: ExpectedResult + +

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

\ No newline at end of file From fffbedd6b9cde269b45a8efef474c7ba8d480345 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 14 Oct 2023 10:25:16 +0100 Subject: [PATCH 31/33] Updated release note --- .../prerelease/tiddlers/Release 5.3.2.tid | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/editions/prerelease/tiddlers/Release 5.3.2.tid b/editions/prerelease/tiddlers/Release 5.3.2.tid index 9dddb2916..3faf8f013 100644 --- a/editions/prerelease/tiddlers/Release 5.3.2.tid +++ b/editions/prerelease/tiddlers/Release 5.3.2.tid @@ -8,6 +8,47 @@ description: Under development //[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.3.1...master]]// +! Major Improvements + +!! Conditional Shortcut Syntax + +<<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7710">> a new [[shortcut syntax|Conditional Shortcut Syntax]] for concisely expressing if-then-else logic. For example: + +``` +<% if [match[Elephant]] %> + It is an elephant +<% else %> + <% if [match[Giraffe]] %> + It is a giraffe + <% else %> + It is completely unknown + <% endif %> +<% endif %> +``` + +!! Explicit Templates for the ListWidget + +<<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7784">> support for `<$list-template>` and `<$list-empty>` as immediate children of the <<.wid "ListWidget">> widget to specify the list item template and/or the empty template. Note that the <<.attr "emptyMessage">> and <<.attr "template">> attributes take precedence if they are present. For example: + +``` +<$list filter=<>> + <$list-template> + <$text text=<>/> + + <$list-empty> + None! + + +``` + +!! jsonset operator + +<<.link-badge-added "https://github.com/Jermolene/TiddlyWiki5/pull/7742">> [[jsonset Operator]] for setting values within JSON objects + +!! QR Code Reader + +<<.link-badge-extended "https://github.com/Jermolene/TiddlyWiki5/pull/7746">> QR Code plugin to be able to read QR codes and a number of other bar code formats + ! Translation improvement Improvements to the following translations: @@ -43,6 +84,7 @@ Improvements to the following translations: * <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7749">> editor "type" dropdown state tiddlers * <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7712">> handling of "counter-last" variable when appending items with the ListWidget * <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/6088">> upgrade download link in Firefox +* <<.link-badge-fixed "https://github.com/Jermolene/TiddlyWiki5/pull/7698">> refreshing of transcluded functions ! Node.js Improvements From efa4f3413167e8061148a219b5a61012a974709b Mon Sep 17 00:00:00 2001 From: Simon Huber Date: Sun, 15 Oct 2023 13:32:17 +0200 Subject: [PATCH 32/33] Update Basics.tid to not use fixed height in edit widgets (#7789) --- core/ui/ControlPanel/Basics.tid | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/ui/ControlPanel/Basics.tid b/core/ui/ControlPanel/Basics.tid index dd5580ad5..b2ef2832a 100644 --- a/core/ui/ControlPanel/Basics.tid +++ b/core/ui/ControlPanel/Basics.tid @@ -26,10 +26,10 @@ caption: {{$:/language/ControlPanel/Basics/Caption}} |<$link to="$:/SiteSubtitle"><> |<$edit-text tiddler="$:/SiteSubtitle" default="" tag="input"/> | |<$link to="$:/status/UserName"><> |<$edit-text tiddler="$:/status/UserName" default="" tag="input"/> | |<$link to="$:/config/AnimationDuration"><> |<$edit-text tiddler="$:/config/AnimationDuration" default="" tag="input"/> | -|<$link to="$:/DefaultTiddlers"><> |<>
<$edit class="tc-edit-texteditor" tiddler="$:/DefaultTiddlers"/>
//<>// | +|<$link to="$:/DefaultTiddlers"><> |<>
<$edit class="tc-edit-texteditor" tiddler="$:/DefaultTiddlers" autoHeight="yes"/>
//<>// | |<$link to="$:/language/DefaultNewTiddlerTitle"><> |<$edit-text tiddler="$:/language/DefaultNewTiddlerTitle" default="" tag="input"/> | |<$link to="$:/config/NewJournal/Title"><> |<$edit-text tiddler="$:/config/NewJournal/Title" default="" tag="input"/> | -|<$link to="$:/config/NewJournal/Text"><> |<$edit tiddler="$:/config/NewJournal/Text" class="tc-edit-texteditor" default=""/> | +|<$link to="$:/config/NewJournal/Text"><> |<$edit tiddler="$:/config/NewJournal/Text" class="tc-edit-texteditor" default="" autoHeight="yes"/> | |<$link to="$:/config/NewTiddler/Tags"><> |<$vars currentTiddler="$:/config/NewTiddler/Tags" tagField="text">{{||$:/core/ui/EditTemplate/tags}}<$list filter="[tags[]] +[limit[1]]" variable="ignore"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><><$action-listops $tiddler=<> $field="text" $subfilter={{{ [get[tags]] }}}/><$action-setfield $tiddler=<> tags=""/> | |<$link to="$:/config/NewJournal/Tags"><> |<$vars currentTiddler="$:/config/NewJournal/Tags" tagField="text">{{||$:/core/ui/EditTemplate/tags}}<$list filter="[tags[]] +[limit[1]]" variable="ignore"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><><$action-listops $tiddler=<> $field="text" $subfilter={{{ [get[tags]] }}}/><$action-setfield $tiddler=<> tags=""/> | |<$link to="$:/config/AutoFocus"><> |{{$:/snippets/minifocusswitcher}} | From d3f569560155162aea70c585bb6e327c060357a2 Mon Sep 17 00:00:00 2001 From: lin onetwo Date: Sun, 15 Oct 2023 19:40:38 +0800 Subject: [PATCH 33/33] Fix: Evernote .enex image import (#7785) * feat: add modifier info * feat: replace image and attachment with [img[] and [[]] * feat: import as wikitext tid * fix: a few resources don't have title * fix: use hash as random name for images * fix: Firefox's DOMParser have problem in some cases * fix: bad char in title, and useless xmlns * Update sample-enex-with-image.xml.enex * Update enex-deserializer.js * Update readme.tid * fix: some dont have modified --- .../evernote/modules/enex-deserializer.js | 105 ++++++++++++++---- plugins/tiddlywiki/evernote/readme.tid | 1 + .../samples/sample-enex-with-image.xml.enex | 4 +- 3 files changed, 85 insertions(+), 25 deletions(-) diff --git a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js index 72e0e9201..0e195b5ea 100644 --- a/plugins/tiddlywiki/evernote/modules/enex-deserializer.js +++ b/plugins/tiddlywiki/evernote/modules/enex-deserializer.js @@ -15,6 +15,7 @@ For details see: https://blog.evernote.com/tech/2013/08/08/evernote-export-forma "use strict"; // DOMParser = require("$:/plugins/tiddlywiki/xmldom/dom-parser").DOMParser; +var illegalFilenameCharacters = /[\[\]<>;\:\"\/\\\|\?\*\^\?\$\(\)\s~]/g; /* Parse an ENEX file into tiddlers @@ -23,10 +24,13 @@ exports["application/enex+xml"] = function(text,fields) { // Collect output tiddlers in an array var results = []; // Parse the XML document - var parser = new DOMParser(), - doc = parser.parseFromString(text,"application/xml"); + var doc = new DOMParser().parseFromString(text,"application/xml"); // Output a report tiddler with information about the import var enex = doc.querySelector("en-export"); + if(!enex) { + // Firefox's DOMParser have problem in some cases. + throw new Error('Failed to parse ENEX file, no "en-export" node found, try use Chrome/Edge to export again.'); + } results.push({ title: "Evernote Import Report", text: "Evernote file imported on " + enex.getAttribute("export-date") + " from " + enex.getAttribute("application") + " (" + enex.getAttribute("version") + ")" @@ -34,47 +38,102 @@ exports["application/enex+xml"] = function(text,fields) { // Get all the "note" nodes var noteNodes = doc.querySelectorAll("note"); $tw.utils.each(noteNodes,function(noteNode) { - var result = { - title: getTextContent(noteNode,"title"), - type: "text/html", + var noteTitle = getTextContent(noteNode,"title"); + // get real note content node + var contentNode = noteNode.querySelector("content") + var contentText = (contentNode.textContent || "").replace(/ /g, ' ').trim(); + if(contentText) { + // The final content will be HTML instead of xml. And we will save it as wikitext, to make wiki syntax work, and remaining HTML will also work. + try { + // may error if content is not valid XML + contentNode = new DOMParser().parseFromString(contentText,"application/xml").querySelector("en-note") || contentNode; + } catch(e) { + // ignore + } + } + // process main content and metadata, and save as wikitext tiddler. + var noteResult = { + title: noteTitle.replace(illegalFilenameCharacters,"_"), tags: [], - text: getTextContent(noteNode,"content"), - modified: convertDate(getTextContent(noteNode,"created")), - created: convertDate(getTextContent(noteNode,"created")) - + modified: convertDate(getTextContent(noteNode,"updated") || getTextContent(noteNode,"created")), + modifier: getTextContent(noteNode,"author"), + created: convertDate(getTextContent(noteNode,"created")), + creator: getTextContent(noteNode,"author") }; + // process resources (images, PDFs, etc.) + $tw.utils.each(noteNode.querySelectorAll("resource"),function(resourceNode) { + // hash generated by applying https://github.com/vzhd1701/evernote-backup/pull/54 + var hash = resourceNode.querySelector("data").getAttribute("hash"); + var text = getTextContent(resourceNode,"data"); + var mimeType = getTextContent(resourceNode,"mime"); + var contentTypeInfo = $tw.config.contentTypeInfo[mimeType] || {extension:""}; + var title = getTextContent(resourceNode,"resource-attributes>file-name") + // a few resources don't have title, use hash as fallback + title = title || (hash + contentTypeInfo.extension); + // replace all system reserved characters in title + title = title.replace(illegalFilenameCharacters,"_"); + // prefix image title with note title, to avoid name conflicts which is quite common in web-clipped content + title = noteResult.title + "/" + title; + results.push({ + title: title, + type: mimeType, + width: getTextContent(resourceNode,"width"), + height: getTextContent(resourceNode,"height"), + text: text, + // give image same modified and modifier as the note, so they can be grouped together in the "Recent" + modified: noteResult.modified, + modifier: noteResult.modifier, + created: noteResult.created, + creator: noteResult.creator + }); + if(hash) { + fixAttachmentReference(contentNode, hash, mimeType, title); + } + }); + // export mixed content of wikitext and HTML + noteResult.text = contentNode.innerHTML; + // remove all ` xmlns="http://www.w3.org/1999/xhtml"` attributes to save some space + noteResult.text = noteResult.text.replace(/ xmlns="http:\/\/www.w3.org\/1999\/xhtml"/g, ""); $tw.utils.each(noteNode.querySelectorAll("tag"),function(tagNode) { - result.tags.push(tagNode.textContent); + noteResult.tags.push(tagNode.textContent); }); // If there's an update date, set modifiy date accordingly var update = getTextContent(noteNode,"updated"); if(update) { - result.modified = convertDate(update); + noteResult.modified = convertDate(update); } $tw.utils.each(noteNode.querySelectorAll("note-attributes>*"),function(attrNode) { - result[attrNode.tagName] = attrNode.textContent; - }); - results.push(result); - $tw.utils.each(noteNode.querySelectorAll("resource"),function(resourceNode) { - results.push({ - title: getTextContent(resourceNode,"resource-attributes>file-name"), - type: getTextContent(resourceNode,"mime"), - width: getTextContent(resourceNode,"width"), - height: getTextContent(resourceNode,"height"), - text: getTextContent(resourceNode,"data") - }); + noteResult[attrNode.tagName] = attrNode.textContent; }); + results.push(noteResult); }); // Return the output tiddlers return results; }; function getTextContent(node,selector) { - return (node.querySelector(selector) || {}).textContent; + return (node.querySelector(selector) || {}).textContent || ""; } function convertDate(isoDate) { return (isoDate || "").replace("T","").replace("Z","") + "000" } +function fixAttachmentReference(contentNode, md5Hash, mimeType, name) { + if(!contentNode) return; + var mediaNode = contentNode.querySelector('en-media[hash="' + md5Hash + '"]'); + if(!name) { + throw new Error("name is empty for resource hash" + md5Hash); + } + if(!mediaNode) return; + if(mimeType.indexOf("image/") === 0) { + // find en-media node, replace with image syntax + mediaNode.parentNode.replaceChild($tw.utils.domMaker("p", {text: "[img["+ name + "]]"}), mediaNode); + } else { + // For other than image attachments, we make a link to the tiddler + mediaNode.parentNode.replaceChild($tw.utils.domMaker("p", {text: "[["+ name + "]]"}), mediaNode); + } +} + + })(); diff --git a/plugins/tiddlywiki/evernote/readme.tid b/plugins/tiddlywiki/evernote/readme.tid index fd946fd52..9b46aff74 100644 --- a/plugins/tiddlywiki/evernote/readme.tid +++ b/plugins/tiddlywiki/evernote/readme.tid @@ -5,6 +5,7 @@ This plugin contains tool to assist migration of content from Evernote ENEX file !! Instructions # Download or save your ENEX file from Evernote +## Use [ext[evernote-backup|https://github.com/vzhd1701/evernote-backup]] to export ENEX file with resource hash, so images can be linked in the note # Rename the file to have an `.enex` extension # Drag the file into the TiddlyWiki browser window ## Alternatively, click the "Import" button in the "Tools" sidebar tab diff --git a/plugins/tiddlywiki/evernote/samples/sample-enex-with-image.xml.enex b/plugins/tiddlywiki/evernote/samples/sample-enex-with-image.xml.enex index b3e3e3918..b67dc0c44 100755 --- a/plugins/tiddlywiki/evernote/samples/sample-enex-with-image.xml.enex +++ b/plugins/tiddlywiki/evernote/samples/sample-enex-with-image.xml.enex @@ -30,7 +30,8 @@ Brett Kelly - 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 image/jpeg 1280 720 @@ -40,4 +41,3 @@ -
+ Version + + Released + + Lifetime + + Summary + + Download +
- <$text text=`v$(version)$`/> - - <$view tiddler={{{ [addprefix[Release ]] }}} field="released" format="date" template="DDth mmm YYYY"/> + <$link to=<>> + <$text text=`v$(version)$`/> + + + <$view tiddler=<> field="released" format="date" template="DDth mmm YYYY"/> + + <$list filter="[compare:number:lt[0]]" variable="ignore"> + Current + + <$list filter="[compare:number:gteq[0]]" variable="ignore"> + <$text text=<>/> + day<$list filter="[!compare:number:eq[1]]" variable="ignore">s + + + <$transclude $tiddler=<> $field="description" $format="inline"> + (none) + addprefix[https://tiddlywiki.com/archive/full/]]}}} rel="noopener noreferrer" target="_blank"> - <$text text=`$(filename)$.html`/> + Complete - + | addprefix[https://tiddlywiki.com/archive/empty/]]}}} rel="noopener noreferrer" target="_blank"> - <$text text=`$(emptyFilename)$.html`/> + Empty