Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changed importVariable to store its ownvariables #4108

Merged
merged 5 commits into from
Jan 30, 2020

Conversation

flibbles
Copy link
Contributor

More clock-cycles for ya'

The ImportVariable widget creates a setWidget for every single variable it would find in its tiddlers, and it would create a long-ass call trees. Instead, maybe it should just instantiate the SetWidgets just long enough to extract the variable they computed, and then store the variable in itself.

This seems like such an obvious improvement, that I feel like I'm overlooking something. So let me know if you do. Because otherwise, check out these savings:

The following snapshots were created from

  1. Opening my tiddler project.
  2. Opening and editing one fairly populated tiddler
  3. Initiating profiling
  4. Saving changes
  5. End profiling

This is the performance of vanilla:
Screen Shot 2019-07-14 at 4 21 31 PM
Those purple barcode towers go on for several pages. They're tiddlywiki traversing a long tree of setWidgets, one for each globally-defined variable. It amounts to 200-300 functions calls before anything of substance gets called. And if any widget tries to look up a global variable, it must traverse far back up the tree (albeit through prototyping, which isn't too bad performance wise). This traversal happens for every rendered tiddler.

Now this is with my improvement:
Screen Shot 2019-07-14 at 4 20 23 PM
Those huge towers are now compressed inside the ImportVariablesWidget.refresh call.

If you look at the total time at the bottom, they are 242 ms and 165ms, which suggests a 30% speed improvement in refreshing tiddlers. I did see a lot of variation, but in average, 80 ms was always shaved off in the performance.

I don't think the improvement is this good. I think it's just Chrome optimizing its profiling for one over the other. That's why one snapshot has clean purple bars, while the other looks like barcodes. But still, I counted, and there are about 4000 less function calls when refreshing a tiddler. So I'm certain there is an improvement.

Also, memory. Since we're not keeping around all those pointless SetWidgets, there should be a theoretical improvement in tiddlywiki's memory foot print. Let's see:
Screen Shot 2019-07-14 at 4 25 19 PM

And now:
Screen Shot 2019-07-14 at 4 28 33 PM

Okay, so only about 20 KB were shaved off. But it's not nothing.

I've been trying to figure out some circumstance where this improvement causes problems, but I've yet to come up with one. @Jermolene, you know the code base best. Is there a reason we created mock-SetWidgets for every single variable to use on every single tiddler?

Before, importVariables was creating a setWidget for every single variable it would find in its tiddlers, and it would create a long-ass call tree. Now, instead, it just accumulates the variables in itself.
@Jermolene
Copy link
Owner

Thanks @flibbles very cunning, and thanks for the detailed notes. I'm keen to get v5.1.20 released soon, so I'd prefer to leave this until afterwards so that we can thoroughly test it.

I don't think the improvement is this good. I think it's just Chrome optimizing its profiling for one over the other. That's why one snapshot has clean purple bars, while the other looks like barcodes

It's a huge win if it makes browser dev tool flame graphs more usable.

Also, memory

Terrific that you're so adept with the tools. We've not paid much attention to memory usage and I suspect we have some leaks...

@Jermolene Jermolene added the post-v5.1.20 After the release of v5.1.20 (and any bug fix releases) label Jul 14, 2019
@flibbles
Copy link
Contributor Author

Understood. It'll be here waiting.

(I profiled it on Firefox too. About 400ms -> 320ms, but I still don't think the performance improvement is THAT good)

@flibbles
Copy link
Contributor Author

flibbles commented Sep 7, 2019

@Jermolene Might this come in now that v5.1.20 is out?

If it makes you feel more confident about this change, I've been using it for months now for my own projects, and for my Relink plugin. No problems at all.

@Jermolene
Copy link
Owner

Thanks @flibbles - there's actually going to be a v5.1.21 bug fix release soon, and then I'll work through the PRs with the tag "post-v5.1.20".

Learned the hardway while working on tw5-relink that Object.assign
doesn't exist in IE11. Using $tw.utils.extend instead.
@pmario
Copy link
Contributor

pmario commented Nov 26, 2019

@Jermolene ... Did some debugging and would really love to have this PR merged. Using FF it has 2 nice effects: Makes UI snappier and creates a much nicer flame-chart.

@pmario
Copy link
Contributor

pmario commented Nov 26, 2019

@flibbles ... There seems to be a problem in tiddler edit-mode

@flibbles
Copy link
Contributor Author

What do you mean?

@pmario
Copy link
Contributor

pmario commented Nov 26, 2019

RSOD: TypeError: eventInfo.handlerObject[eventInfo.handlerMethod] is undefined

@flibbles
Copy link
Contributor Author

I need a bit more information, because my modification has been working for me.

@flibbles
Copy link
Contributor Author

I mean, I see where that error must be occurring. I just can't seem to replicate it.

@pmario
Copy link
Contributor

pmario commented Nov 26, 2019

I'm running it with:

node tiddlywiki edtions/tw5.com-server --server

May be a plugin problem somewhere

@Jermolene
Copy link
Owner

Thanks for the nudge @flibbles, I'd like to get this merged.

@pmario thanks for reviewing it, I'm not going to have a chance to look at it for a few days I'm afraid.

@pmario
Copy link
Contributor

pmario commented Nov 26, 2019

node 12.13.1

@flibbles
Copy link
Contributor Author

I'm still not replicating it. When you say edit mode, do you mean editing and saving a tiddler?

@pmario
Copy link
Contributor

pmario commented Nov 26, 2019

  • create a new tiddler
  • click into text area. -> RSOD

@flibbles
Copy link
Contributor Author

Also, looking at the code, I don't see how this exception could ever be thrown.

exports.addEventListeners = function(domNode,events) {
    $tw.utils.each(events,function(eventInfo) {
        var handler;
        if(eventInfo.handlerFunction) {
            handler = eventInfo.handlerFunction;
        } else if(eventInfo.handlerObject) {
            if(eventInfo.handlerMethod) {
                handler = function(event) {
                    eventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);
                };	
            } else {
                handler = eventInfo.handlerObject;
            }
        }
        domNode.addEventListener(eventInfo.name,handler,false);
    });
};

It always checks if it's undefined before using it. What version of Tiddlywiki are you using? I'm trying this on cutting edge right now. I've been using it on v20 I think.

@flibbles
Copy link
Contributor Author

Oops. Nevermind. I'm stupid. It can be thrown (although it's still not happening for me).

@pmario
Copy link
Contributor

pmario commented Nov 26, 2019

I did use your "enhence" branch. Maybe I should merge it to master.

@flibbles
Copy link
Contributor Author

Theeeerrrre it is. Yeah. I'm getting it when I'm strictly on my enhance branch. Not sure why it's broken. It works fine when merged, but I'll look into this. I should at least know why this is happening.

@pmario
Copy link
Contributor

pmario commented Nov 26, 2019

seems to be my fault :/ ... if merged with master it seems to work

@flibbles
Copy link
Contributor Author

Hmm. Okay. Looks like when I made the PR, I rebased onto master at a point when an unrelated bug was checked in. My bad. Merging it does indeed resolve the problem.

Should be good for merging. I've been using this modification for several months now without issue.

@Jermolene
Copy link
Owner

Hi @flibbles I think this change may not be entirely backwards compatible, albeit subtly.

Importvariables will extract any set widgets that it finds. It doesn't care whether those set widgets were created with \define or via an explicit <$set>. In the latter case, it is possible for importvariables to bring in something like <$set name=myvar value={{mytiddler}}/>. The trouble is that because the set widget is removed from the widget tree there's no way for the variable value to get refreshed when mytiddler changes.

Using <$set> widgets in that way would be unusual but it works today. I'll give it a bit more thought; this may be a case where tactically breaking somewhat theoretical backwards compatibility is worth it.

@pmario
Copy link
Contributor

pmario commented Nov 27, 2019

@Jermolene I did the following test, which works as expected.

test-fibbles.zip

the zip contains 3 tiddlers.

test-macro

\define test() {{my-tiddler}}

<pre><$view field="text"/></pre>

result

<<test>>

my-tiddler

aaaaaaaaaa

I do open the dev console and write.

var x = $tw.wiki.getTiddler("my-tiddler")
$tw.wiki.addTiddler(new $tw.Tiddler(x,{text: "test test test"}))

And everything updates as expected.

@Jermolene
Copy link
Owner

@pmario you need to use a <$set> widget, not a \define, otherwise the transclusion won't be processed.

@pmario
Copy link
Contributor

pmario commented Nov 27, 2019

How? A definition like the following won't be imported by importvariables. It only gets macro definitions.

<$set name="myVariable" value={{my-tiddler}}></$set>

@pmario
Copy link
Contributor

pmario commented Nov 27, 2019

Importvariables will extract any set widgets that it finds. It doesn't care whether those set widgets were created with \define or via an explicit <$set>.

I think that's not true. At least I'm unable to create variables that are imported like this.

@flibbles
Copy link
Contributor Author

flibbles commented Nov 27, 2019

Okay, I see what you mean, @Jermolene. The following reveals the issue

title: val

AAA
title: mac

<$set name="mymacro" value={{val}} >

<<mymacro>>
</$set>
title: test

\import mac

<<mymacro>>

Then you change the value of val from AAA to BBB. tiddler mac shows the update properly, but test does not.

Hmm. I guess you're right. The old way wouldn't have had this problem. Though I'm also inclined to agree with @pmario. I was very surprised when working on this issue to find out that <$set> widgets are pulled in by importVariable. Their very syntax implies that they should be self-contained to whatever is between their elements.

Ever since I've found out, I've been concerned that setWidgets are polluting my global macro namespace, and I wouldn't be surprised if very few, if any, deliberately use <$set> to define global macros.

@pmario
Copy link
Contributor

pmario commented Nov 27, 2019

@flibbles Did you test your example with tiddlywiki.com? It doesn't work for me, if I use

<$set name="mymacro" value={{val}} >
<<mymacro>>
</$set>

The whitespace is needed. Why. IMO that's a bug in tiddlywiki.com?

@flibbles
Copy link
Contributor Author

flibbles commented Nov 27, 2019

I'm using my enhance branch merged onto v5.1.21. I tried it on tw5.com-server and was able to replicate the issue using the tiddler examples I just provided.

The whitespace shouldn't be needed. I just always prefer block rendering to inline.

@pmario
Copy link
Contributor

pmario commented Nov 27, 2019

Jeremy wrote

Using <$set> widgets in that way would be unusual but it works today. I'll give it a bit more thought; this may be a case where tactically breaking somewhat theoretical backwards compatibility is worth it.

hmmm, I couldn't even think about an implementation that is different between "old" and "new".

I think most users use the $:/tags/Macros definition to create global macros. The tiddler code would look like this: <$set name="mymacro" value={{val}}/>

Which doesn't work with tiddlywiki.com

@pmario
Copy link
Contributor

pmario commented Nov 27, 2019

2 years ago parameter substitution for set-variables was suppressed. See: 35cbb12

This created a difference between macro definitions and set-variables since version 5.1.18 (I think). So was it an oversight, that import-variables didn't make a difference here?

@flibbles
Copy link
Contributor Author

If you really want to know why importing <$set> widgets is weird, feast your eyes:

title: macros

<$set name="outer" value="Cats">

   <$set name="inner" value="<<outer>>" >

   </$set>
</$set>

<$set name="outer" value="Dogs">

</$set>
title: test

\import macros

<<inner>>

One would think macro inner would only use the macro outer that contains it, but in this case, you can get the inner macro to render using an unrelated outer macro. It's not intuitive.

@pmario
Copy link
Contributor

pmario commented Nov 27, 2019

@flibbles ... Yea, I think that your PR makes things more consistent and intuitive. So only \defined set-variables should work.

I think, this would also make it possible to speed up the while loop, if we would check for isMacroDefinition. Because if it is not, it could be ignored. ... just a thought.

@flibbles
Copy link
Contributor Author

Actually, what I just posted doesn't work. My bad, because only the first dive into setWidgets is read.

<$set A><$set B><$set C></$set></$set></$set>
<$set D></$set>

D gets missed. And yeah @pmario. I would think it's more intuitive if non-isMacroDefinition weren't included during imports.

@Jermolene
Copy link
Owner

The fact that importvariables works with explicit set widgets is really a feature, not a bug. It means for example that it's easy to have a global variable that is dynamically recomputed. In fact, thinking about it, we could make the main page template a lot more extensible by implementing the current nested set widgets to a single tagged importvariables.

@flibbles
Copy link
Contributor Author

In that case, there's no optimization to be had. Not unless one can think of a way to store the necessary components in ImportVariables so that it performs execution with everything else instead of doing it before hand. But that may involve storing so much stuff in the importVariables widget that much of the benefit is lost.

Pity. The way ImportVariables works right now, Tiddlywiki's stack depth increases with every globally defined macro.

@flibbles
Copy link
Contributor Author

flibbles commented Nov 27, 2019

Well... maybe there is a way. If ImportVariables holds onto its own tree of setWidgets, but it doesn't actually add them as children, it can still recalculate them as needed, and use them to replace the variables within itself. Maybe? I think this might work?

However, this does cost us some of the optimization's benefits, and all of the optimizations memory improvement.

I can try this, @Jermolene, if you're adamant that <$set> widgets must remain supported, though I still find it odd that importing the tiddler:

<$set name="A" value="value1">text</$set>
<$set name="B" value="value2">text</$set>

will import A, but not B.

@Jermolene
Copy link
Owner

@flibbles perhaps we could use the isMacroDefinition flag, and thus only process the <$set> widgets that are "safe", leaving the others intact?

@flibbles
Copy link
Contributor Author

There is merit to that. I'd have to be careful though. Implementing /imports and <$sets> using different systems might result in incorrect behavior in cases where variables are defined multiple times.

I think whatever I do, I'll need to pin down the behavior with a few unit tests that we can all agree on.

@flibbles
Copy link
Contributor Author

Okay, @Jermolene, I've followed your advice. New commits added. Whenever ImportVariables imports a setWidget, it adds it onto the end of its chain like it used to. But whenever it imports a macro definition, it folds the variable into whatever widget is on the end of the chain.

Since >99% of all imported variables are macros, that means we get the performance boost of my improvement while still being able to handle setWidgets with non-simple attributes.

Also wrote a couple tests.

@flibbles
Copy link
Contributor Author

flibbles commented Dec 5, 2019

@Jermolene, should be good to go, unless there are any other objections.

@flibbles
Copy link
Contributor Author

flibbles commented Jan 9, 2020

bump

@flibbles
Copy link
Contributor Author

@Jermolene nudge

@Jermolene
Copy link
Owner

Thanks @flibbles

@Jermolene Jermolene merged commit aa817f6 into Jermolene:master Jan 30, 2020
@flibbles flibbles deleted the enhance branch May 16, 2020 02:57
telmiger added a commit to telmiger/TiddlyWiki5 that referenced this pull request Jun 14, 2020
* Scale embedded videos and audios to fit their container (Jermolene#3943)

* Update videoparser.js

* Update audioparser.js

* Update videoparser.js

* Update audioparser.js

* 2nd attempt to fix overflowing content in vertical tabs

Previously we'd tried to fix it with word-break: break-word, but that broke other things (see 81f1e6a). This overflow: auto approach appears to be best practice.

* Fix newTagNameTiddler being undefined in ControlPanel (Jermolene#4326)

* fix newTagNameTiddler being undefined in ControlPanel

* Update Basics.tid

* prevent newTagNameTiddler being undefined

* Update Basics.tid

* Update tag-picker.tid

* Update tag-picker.tid

* Fix typos in tag-picker (Jermolene#4336)

... sorry @Jermolene

* Replace div with span in colour picker (Jermolene#4333)

* Replace '<<...>>' with a macrocall widget (Jermolene#4346)

... because there is another macrocall inside.

This was introduced by the commit 'Fix sizes of SVG icons in documentation' (SHA: 9395d75) where this probably slipped through in a regular expression replacement session.

I searched through the codebase and the other replacements of this type are ok.

* Correct the jsonstringify documentation (Jermolene#4344)

The jsonstringify substitution table does not list all substitutions, and it listed `'` as being replaced when it's not.  This updates the table based on the code at https://github.com/Jermolene/TiddlyWiki5/blob/master/core/modules/utils/utils.js#L537

* Add discord to forums tiddler. (Jermolene#4343)

* Syncer: add hidden setting for disabling lazy loading

* Range widget: fix refreshing

The range widget wasn't refreshing correctly when the underlying tiddler value changed

* Comment plugin: Add link to top post

* Fix comment plugin typo

* Improve docs on installing plugins under Node.js

* Add "index" attribute to range widget

* Remove &nbsp from tag pill in edit mode (Jermolene#4366)

* remove &nbsp from tag pill in edit mode

PR: fix missing space between edittemplate tags Jermolene#3585 introduced an unbreakable space ...

The `&nbsp` isn't needed and **causes problems**, if users copy&paste the tag text, because the "new" tag in the text input field now contains an space in front of the tag. This space invalidates the tag, so it doesn't function anymore. 

see [comment in GG](https://groups.google.com/d/msg/tiddlywiki/RQEyqPQIZSM/uaU7lgJJAAAJ) .. I also had a problem like this some time ago, which costed me several hours of debugging.

* Update base.tid

* Update tag.tid

* Signing the CLA (Jermolene#4367)

* Sign the CLA as ento (Jermolene#4222)

* Upgrade to Jasmine 3 (Jermolene#4226)

* process.exit() only exist in a node.js environment

* updateInterval has been removed from upstream

From upstream commit:
jasmine/jasmine@b6eb9a4

* Update Jasmine to 3.4.0

* Reuse the evalInContext helper

* Fix expected parse result to match the actual result

* 'describe' cannot be nested inside 'it' blocks

Jasmine started to explicitly raise an error in these cases since:
jasmine/jasmine#1411

* Be consistent about how to refer to library files

* Update link to Jasmine's official website

* Remove "hack-to-give-us-something-to-compare-against"

It looked messy in the control panel listing.

* Ensure splash screen isn't shown when JS is disabled

* Fix bug with millisecond 0XXX  date format

* Correct fix for bug with millisecond 0XXX date format

Milliseconds need 3 digits, not 4...

* Refactor andtidwiki.js (The saver for Android apps including AndTidWiki, Tiddloid and Tiddloid Lite) (Jermolene#4276)

* Create tiddloid.js

* Update andtidwiki.js

* Delete tiddloid.js

* Update andtidwiki.js

* Update andtidwiki.js

* Update andtidwiki.js

* Update andtidwiki.js

* Update andtidwiki.js

* Update andtidwiki.js

* Add Elixir to languages supported by Highlight plugin

Fixes Jermolene#4378

* Slight optimisation of $tw.utils.addClass()

* Fix wiki referenced by navigator widget's rename tiddler handler

* Make the single window template compatible with the page template

The tv-* variables were missing, making toolbar buttons appear incorrectly. There was also no tc-page-container class.

Fixes Jermolene#4372

* Avoid setting an explicit colour in the new-journal-button icon

This change means that the colour for the date on the new journal button icon will change according to the current colour palette, and simplifies things for Jermolene#4379

* Add script to optimise SVGs

Fixes Jermolene#4379. Optimised SVGs in the next commit

* Optimised SVG icons

* Remove extraneous paths from line-width and list icons

Fixes Jermolene#4369 and Jermolene#4368

* Update docs for "each" filter

* Signing the CLA (Jermolene#4387)

* Update links to Json Mangler plugin github pages (Jermolene#4388)

The plugin's repo appears to have been renamed.

* Tweak docs for each filter

* Fix tests in tiddlywiki-com branch by forcing an older version of node.js

* Another attempt to force Travis to use an old Node.js

Another attempt at 55ed290

* Update class settings in edit template to match view template

@pmario this adds the tc-tagged- classes to the edit template, do you think that's useful?

* Update tests (Jermolene#4392)

add 3 new tiddlers, add 1 "enlist" test, fix all tests that failed, because 3 new tiddlers where added. stopped ESLint to complain about global vars, fix some mixed-tab-space indent typos.

* Updated Portuguese Translation

See https://groups.google.com/d/msg/tiddlywiki/esj5IB935oo/xS-F9n5FBAAJ

* Fix bug with importvariables and empty set widgets

A self-closing set widget doesn't have a "children" property.

* Add support for $:/tags/Macro/View macros that are only visible within view templates

* Initial commit of freelinks plugin

* It's 2020!

* Update TiddlyFox docs

Fixes Jermolene#4399

* Fix "remove" tooltip in keyboard shortcuts (Jermolene#4405)

this PR just fixes the tooltip of the small "remove" button in the keyboard-shortcut dropdown

* Signing the CLA (Jermolene#4403)

* Add support for file type webm & ogg theora (Jermolene#4404)

* Add a faint background to freelinks

* Don't freelink within links and buttons

* Restore whitespace for page control buttons

Even with whitespace trim, we need a single space between the icon and text

* Freelinks: Add note about customising within which tiddlers are freelinked

* Replace "&times" with close-button in keyboard-shortcuts (Jermolene#4406)

this PR replaces the `&times` in the keyboard-shortcuts dropdown with the `$:/core/images/close-button`

* Use match operator instead of prefix

Fixes Jermolene#4407

* Add a new example that shows using all before to determine the nummeric position of a title in a list. (Jermolene#4412)

See discussion https://groups.google.com/forum/?hl=en#!topic/tiddlywiki/wY6haW2cYMA

* Fix stamp dropdown not transcluding caption field

* Replace Markdown parsing library with Remarkable (Jermolene#3876)

* Replace Markdown parsing library with Remarkable

* Fix handling of block-level elements

* Update documentation

* Add config options for Parser actions

* Add Config options for Remarkable library

* Match code style

* Update documentation

* Handle ordered lists and horizontal rules

* Update to v2.0.0 of Remarkable library

* Fix bug with navigating via location hash

Introduced in 8159c4a, the problem was that it is actually valid for storyTitle and/or historyTitle to be falsey in the Story constructor.

* Introduction edition: fix some display issues

Two of the tiddlers incorporate content dynamically drawn from the core, and so the size of the tiddlers has increased as the core has grown.

* Docs: Update length Operator.tid (Jermolene#4428)

* Docs: Update sign Operator.tid (Jermolene#4426)

* Railroad plugin: Use message box colours so that they change with the palette

* Docs: fix typos and font-size (Jermolene#2795)

* Docs:  bring tm-fold-xxx message docs on par with the code, that is executed. (Jermolene#4353)

* Changed importVariable to store its own variables (Jermolene#4108)

* Changed importVariable to store its ownvariables

Before, importVariables was creating a setWidget for every single variable it would find in its tiddlers, and it would create a long-ass call tree. Now, instead, it just accumulates the variables in itself.

* Can't use Object.assign

Learned the hardway while working on tw5-relink that Object.assign
doesn't exist in IE11. Using $tw.utils.extend instead.

* Retaining setWidget transclusion flexibility

* One more test to verify mixing sets and macros

* Make "type" input look consistent with "fields" input (Jermolene#4358)

* add class tc-edit-texteditor to type field, trim ...

... whitespace, make look consistent

* define width 20% for type input field

* add second nbsp; for consistency with type input

* Add whitespace trims to tag-picker macro (Jermolene#4360)

* Add optional storyview to list-tagged-draggable macro (Jermolene#4329)

* add optional storyview to list-tagged-draggable macro

* Update list.tid

* Add "none" as an option in the icon dropdown in tag manager (Jermolene#4361)

* add no-icon option to tagmanager and add ...

... whitespace trims

* Update Misc.multids

* Signing the CLA (Jermolene#4424)

* Ensure GitHub and GitLab savers use a default path of `/` if empty

The empty string gets a slash appended further down this method.

* Add download button/link to binary tiddler warning banners in view and edit mode (Jermolene#4423)

* Fix support for zip files in some environments (Jermolene#4432)

In some environments (at least on my own machine), TiddlyWiki detects zip files as type `"application/x-zip-compressed"` instead of `"application/zip"`. This commit adds support for zip files with type `"application/x-zip-compressed"` so that they are encoded in `"base64"` like other zip files with type `"application/zip"`.

* More listops tests (Jermolene#4409)

* add a new-line before the log text to increase readability of the test output

* make eslint, jslint happy

* make eslint happy

* add more listops tests

* new listops filter tests

* remove new-line

* make eslint happier.

* revert eslint settings

* Docs: Fix typos in button widget docs

* Docs: Update ViewWidget.tid (Jermolene#4437)

* Update chinese translations (Jermolene#4325)

* Update chinese translations
* Imporve chinese translations for UI of basic tab in controlpanel
* Add chinese translations for description of throttle.refresh field

* Add chinese translations for the `none` option of icon dropdown in tag manager

* Extend jsontiddlers macro to generate unformatted output

* First attempt at sharing plugin/edition

* Include share.html in the main build

* Fix path.posix.sep which appears to be undefined on Travis CI

* Fix Travis CI syntax error

We were getting "SyntaxError: Use of const in strict mode."

* Temporarily remove markdown plugin from prerelease

It's giving errors under Travis CI

* Travis CI: Move to Node.js 12

Apparently the default Node 10 doesn't include Math.trunc()

* Travis CI: Try deleting and recreating .travis.yml

It appears to have worked for some people c.f. stackoverflow

* Travis CI: Add .travis.yml back again

* Travis CI: Another attempt to fix things

Seems that I don't understand YAML

* Share: Exclude the $:/build tiddler

* Share plugin: Improve startup error handling

* Add tabindex support to button widgets (Jermolene#4442)

This pull request adds support for specifying a tabindex for button widgets following the same pattern as the LinkWidget.

* Signing the CLA (Jermolene#4447)

* Share plugin: Add warning prompt

* Update release note

Better late than never

* Browser-storage plugin: Don't save popup state by default

* Update documentation for tabindex support for ButtonWidget (Jermolene#4465)

Documentation for changes introduced in Jermolene#4442

* Share plugin: Add prominent warning in readme

* Enhance colour macro with a fallback to a configuration tiddler

* First commit of new Menu Bar plugin

* Tweak some system buttons to look better in the new menu bar

The reveal widget leaves behind an unnecessary span, which breaks the CSS used to target the button.

* Disable sticky titles for the prerelease

Sadly, they don't play nicely with the new menu bar

* Update release note

* Menubar tweaks

* Fix old references to "top menu" to the new "menu bar" terminology
* Use vanilla breakpoint for responsive adjustment to menu bar padding

* Push top right menu items to the right

Looking more backwards compatible

* Menubar: Reverse order of top right menu items

* Prerelease: Disable browser storage to make testing less confusing

* Fix broken filters introduced in b179a60

The mistake arose because browser local storage was enabled

* Signing the CLA (Jermolene#4440)

* Markdown plugin: Description notes remarkable instead of markdown-js (Jermolene#4422)

* Add action-popup widget

Fixes Jermolene#4185

* Add hidden setting for default tiddler icon

* Fix test for needing to update text editor DOM

Checking the active element is clumsy, and interferes with debugging. Checking the content is clearer, and avoids the Firefox bug.

Fixes Jermolene#4472

* Fix lack of refresh when button widget actions attribute changes

* ViewTemplate: Add tc-tiddler-overridden-shadow class

* Remove unsafe externalimages build target from server edition

See Jermolene#4484

* Fix suspected typo that impacts refresh handling (Jermolene#4464)

* Add menubar-background and menubar-foreground to Nord palette (Jermolene#4482)

Nord palette

* Add color descriptions for menubar-background and ... (Jermolene#4481)

menubar-foreground to PaletteColours.multids

* Mention importing process more explicitly (Jermolene#3666)

* Mention importing process more explicitly

* Explicitly mention "images"

So this page shows up in a search for "images".

* Apply PR suggestions

* Add chinese translations for color descriptions for menubar-background and menubar-foreground (Jermolene#4488)

* Introducing "Dynannotate" plugin for overlaying annotations

* Clarify docs on the path-prefix subcommand of the listen command

* Update LinkWidget.tid (Jermolene#4489)

* Add german descriptions for menubar-background... (Jermolene#4483)

* add german descriptions for menubar-background...

* Update PaletteColours.multids

* Update PaletteColours.multids

* Better readability for "Community" Tiddler with various ... (Jermolene#4493)

... color palettes

* Signing the CLA (Jermolene#4492)

* Added gitea saver (Jermolene#4491)

* added gitea saver

* create nonexistent file

* Add "Gruvbox Dark" color palette (Jermolene#4494)

* Add "Gruvbox Dark" color palette

this adds the "gruvbox dark" color palette (https://github.com/morhetz/gruvbox) which is also available for highlight.js and codemirror

* add "credits" field

* change "credits" field to "license" field

* Add support for a custom class to modal wrapper (Jermolene#4490)

* Add support for a custom class to modal wrapper

As per Jermolene#4485 add support for a custom class to modal wrapper, by means of a field in the modal tiddler. The class is added to the modal wrapper in addition to the default class, allowing for custom styling via css of any part of the modal.

* Remove redundant check for tiddler.

* Menubar: Move behind modals in z-order

Fixes Jermolene#4499

* Add chinese translations for description of Gitea saver (Jermolene#4498)

* Menubar: Move behind modals in z-order

Fixed fix for Jermolene#4499

* Use CamelCase for Gitea (Jermolene#4496)

* Menubar: Add an optional dropdown for the sidebar tabs

* Update highlight.js to latest v9.18.1 (Jermolene#4502)

* update highlight.pack.js to latest v9.18.1

* Update readme.tid

* Update GruvBoxDark.tid (Jermolene#4501)

* Menubar: Fix links in sidebar "open" tab

Fixes @BurningTreeC's report Jermolene@061a2c6#commitcomment-37826117

* Highlight Plugin: Update readme to reflect version change (Jermolene#4503)

* Revert "Fix test for needing to update text editor DOM"

This reverts commit a65ec87.

* Add a hidden setting for disabling the page dropzone

* Menu bar: Fix search result visibility

Fixes Jermolene#4509

* Update GruvBoxDark.tid (Jermolene#4510)

better readability, was wrong the first time

* Fix the index names of chinese translations for Gitea saver in ControlPanel.multids (Jermolene#4506)

* Docs: Clarify Node.js docs

* Fixes issue with Jermolene#4504 and importvariable copying (Jermolene#4518)

* Fixes issue with Jermolene#4504 and importvariable copying

ImportVariables widget was using $tw.utils.extend to copy the
variables from temporary set widgets into itself. However,
$tw.utils.extend does NOT behave like Object.assign. It not only
copies all self-owned variables over, but also all variables
in that object's prototype chain. This led to some redundant copying,
and a problem where some variables might show up more than once
(like transclusion).

Fixed now. importvariables widget does its own copying, since it
can't rely on $tw.utils.extend to do the right job, and it can't
count on Object.assign to be there.

* Added test to prevent reversion of Jermolene#4504

* Slight corrections to new importvariables test

* Improve ability to disable drag and drop

Now we disable the draggable list macros too.

* Update docs for disabling drag and drop

* Update Nord Palette for better readability (Jermolene#4517)

* Update Vanilla.tid (Jermolene#4515)

* Menubar: Fix positioning of toprightbar when narrow

Fixes Jermolene#4477

* Add backlinks indexer (Jermolene#4421)

* Add tests for backlinks

* Add backlinks indexer

* Use backlinks indexer in getTiddlerBacklinks if available

* Extract link extraction into its own method

This way we can provide an arbitrary parse tree, rather than just a
title, which will allow us to compare lists of outgoing links between
versions of a single tiddler

* Use new extractLinks method in backlinks indexer

...rather than copy-pasting the implementation

* Remove ES6-isms

TiddlyWiki needs to work with browsers that only support ES5

* GruvBoxDark palette contrast tweaks (Jermolene#4522)

* Fix the datauri macro to work with _canonical_uri tiddlers

* Update release note

* Fix syncer to handler errors properly (Jermolene#4373)

* First commit

* Add throttling of saves

Now we refuse to save a tiddler more often than once per second.

* Wait for a timeout before trying again after an error

* Modest optimisations of isDirty() method

* Synchronise system tiddlers and deletions from the server

Fixes two long-standing issues:

* Changes to system tiddlers are not synchronised from the server to the browser
* Deletions of tiddlers on the server are not propagated to browser clients

* Make sure we update the dirty status even if there isn't a task to perform

* Replace save-wiki button with popup sync menu

* Remove the "Server" control panel tab

We don't need it with the enhanced sync dropdown

* Add indentation to the save-wiki button

* Fix spacing in dropdown menu items

* Switch between cloud icons according to dirty status

* Add a menu item to copy syncer logs to the clipboard

* Improve animated icon

* Remove indentation from save-wiki button

@pmario the annoying thing is that using `\trim whitespace` trims significant whitespace too, so it means we have to use <$text text=" "/> when we need a space that won't be trimmed. For the moment, I've removed the indentation but will keep thinking about it.

* Further icon, UI and copy text tweaks

Move the icons and styles from the core into the TiddlyWeb plugin

* Clean up PR diff

* Tweak animation durations

* Break the actions from the syncer dropdown into separate tiddlers

@pmario I think this makes things a bit easier to follow

* Refactor syncadaptor creation and logging

The goal is for the syncadaptor to be able to log to the same logger as the syncer, so that the "copy syncer logs to clipboard" data is more useful.

* Don't transition the dirty indicator container colour, just the SVG's colour

* Only trigger a sync for changes to tiddlers we're interested in

Otherwise it is triggered by the creation of the alert tiddlers used to display errors.

* Restore deleting local tiddlers removed from the server

(I had commented it out for some testing and accidentally commited it).

* Guard against missing adaptor info

* We still need to trigger a timeout when there was no task to process

* Avoid repeatedly polling for changes

Instead we only trigger a timeout call at if there is a pending task (ie a tiddler that has changed but isn't yet old enough to save).

* Lazy loading: include skinny versions of lazily loaded tiddlers in the index.html

* Introduce _is_skinny field for indicating that a tiddler is subject to lazy loading

* Remove savetrail plugin from prerelease

It doesn't yet work with the new syncer

* Make the savetrail plugin work again

* Clear outstanding alerts when synchronisation is restored

* Logger: only remove alerts from the same component

Missed off 9f5c0de

* Make the saving throttle interval configurable (Jermolene#4385)

After switching Bob to use the core syncer the throttle interval makes saving feel very sluggish compared to the message queue setup that I had before.
The editing lock that I use to prevent conflicts with multiple users doesn't go away until the save is completed, and with the 1 second delay it means that if you edit a tiddler and save it than you have to wait one second before you can edit it again.

* Tweaks to appearance of alerts

* Exclude temp tiddlers from offline snapshots

Otherwise alerts will persist

* Tweak appearance of status line in dropdown

* Update release note

* Web server: Don't include full path in error messages

Fixes Jermolene#3724

* In change event handler check for deletions

* Disable the official plugin library when the tiddlyweb plugin is loaded

* Hide error details from browser for /files/ route

See Jermolene#3724 (comment) -- thanks @pmario

* Revert all the changes to the relationship between the syncer and the syncadaptor

Previously we had some major rearrangements to make it possible for the syncadaptor to route it's logging to the logger used by the syncer. The motivation is so that the "copy logs to clipboard" button is more useful.

On reflection, changing the interface this drastically is undesirable from a backwards compatibility perspective, so I'm going to investigate other ways to achieve the logger sharing

* Make the tiddlyweb adaptor use the syncer's logger

So that both are availavble when copying the syncer logs to the clipboard

* Update release note

* Support setting port=0 to get an OS assigned port

Quite useful

* Update code comment

* UI: Use "Get latest changes from server" instead of "Refresh"

* Add getUpdatedTiddlers() method to syncadaptor API

See Jermolene#4373 (comment)

* Refactor revision handling within the syncer

Thanks @pmario

* Fix typo in tiddlywebadaptor

* Improve presentation of errors

See Jermolene#4373 (comment)

* Add docs for getTiddlerRevision()

* Remove unused error animation

* Update comment for GET /recipes/default/tiddlers/tiddlers.json

* Optimise SVG cloud image

* Add optional list of allowed filters for get all tiddlers route

An attempt to address @Arlen22's concern here:

Jermolene#4373 (review)

* Fix network error alert text translatability

* Fix error code and logging for GET /recipes/default/tiddlers/tiddlers.json

Thanks @Arlen22

* Flip GET /recipes/default/tiddlers/tiddlers.json allowed filter handling to be secure by default

* Validate updates received from getUpdatedTiddlers()

* Add syncer method to force loading of a tiddler from the server

* Remove the release note update to remove the merge conflict

* Fix crash when there's no config section in the tiddlywiki.info file

* Use config tiddler title to check filter query (merge into fix-syncer) (Jermolene#4478)

* Use config tiddler title to check filter query

* Create config-tiddlers-filter.tid

* Add config switch to enable all filters on GET /recipes/default/tiddlers/tiddlers.json

And update docs

* Fix bug when deleting a tiddler with a shadow

Reported by @kookma at Jermolene#4373 (comment)

Co-authored-by: jed <inmysocks@fastmail.com>
Co-authored-by: Arlen22 <arlenbee@gmail.com>

* Updates for Dutch translation

Thanks @gernert

* Fix ActionPopupWidget example

Thanks @twMat

The example had been written while there was a bug that changed the state tiddler titles used by the sidebar

* Update syncer to distinguish connection errors from other errors

We can automatically remove connection errors when things resume working

* Update chinese translations (Jermolene#4528)

* add description of field `_is_skinny`
* add alert message `Error/NetworkErrorAlert`

* TiddlyWebAdaptor: Trim whitespace from save button

Fixes Jermolene#4530

* Update release note

* Fix release note typo

* Add TiddlyDesktop's wikilist colours to Gruvbox palette (Jermolene#4521)

* Update documentation for Modals (Jermolene#4495)

Update documentation for modals to include the custom class introduced in Jermolene#4485, as well as the footer and subtitle fields that don't appear to be documented.

* Add "class" attribute to dropzone widget

* Fix range widget for IE10/11 (Jermolene#4534)

As detailed in Jermolene#4519 the range widget currently does not save its value to the state tiddler on IE 10/11 as they do not support the input event, but rather the change event is fired instead of the input event. This has patch has been tested in IE11 and should work in IE10 as well.

Note that on Chrome and Firefox, the change event will fire only once after the user stops dragging the range slider (In addition the input event). However this does lead to an extra refresh as the handleInputEvent method already checks to see if the current value of the slider is different from the saved value before saving to the store.

* fr-FR translations catch up (Jermolene#4535)

* fr-FR translated strings for the Gitea saver

* fr-FR translation for the _is_skinny description

* fr-FR translation for the Network Error alert

* fr-FR translation for Menu Bar colors

* fr-FR translation for the hint of the add button in EditTemplate

* fr-FR translation for the default focus field hint

* fr-FR translation for throttle.refresh field description

* fr-FR translation for Icon: None in TagManager

* fr-FR translation for Plugins "Also requires:"

* Add NewJournalTags.tid in fr-FR directory

* fr-FR translations for plugin related strings

* fr-FR translation for Sidebar visibility toggle hint

* fr-FR translation for the sidebar search hint

* fr-FR translation for two Palette Editor hints

* Minor tweaks to plugin library listings

* Adds a name to the core plugin
* Make plugin listings consistently show "name: description"
* Make plugin listings consistently sort by title (thus grouping publishers)
* Add a missing plugin name

See discussion here: Jermolene#4508 (comment)

* Travis-CI: Fix nvm failing to install Node.js v12.4.0

Something must have changed on the travis-ci end to cause things to suddenly fail

* Update German translations (Jermolene#4539)

* add a new-line before the log text to increase readability of the test output

* make eslint, jslint happy

* it shouldn't be there

* fremove this file from my PRs

* update German translations

* Add support for woff2 files

* Signing the CLA (Jermolene#4235)

Co-authored-by: Jeremy Ruston <jeremy@jermolene.com>

* Update issue templates

* Add pull request template

* Docs: fix broken link

Fixes Jermolene#4266

* Add dependents to codemirror addons (Jermolene#4278)

* use dependents in codemirror-autocomplete

* add dependents to codemirror-mode-htmlmixed

* add dependents to sublime keymap

* add dependents to vim keymap

* add dependents to htmlmixed mode

* add dependents to htmlembedded mode

* add dependents to markdown mode

* fix typo in markdown-mode

* fix typo in codemirror-mode-htmlembedded

* fix typo in codemirror-keymap-sublime

* fix typo in codemirror-keymap-vim

* fix typo in codemirror-mode-htmlembedded

* fix typo in codemirror-mode-markdown

* Let chained `>` blockquotes generate valid HTML (Jermolene#4332)

* Replace "p" with "div" in itemTag

'>> text' will now be valid html.

* Make the new div's behave like p's

* Enable the internals plugin by default in docs (Jermolene#4335)

* Enable the internals plugin by default in docs

1. Why hide such a useful thing from the users?

2. When playing around with code examples from the docs they may want to know how the resulting html looks.

* Improve doc

* Typo

Co-authored-by: Jeremy Ruston <jeremy@jermolene.com>

* Update jsonstringify Operator.tid (Jermolene#4348)

* Enable indexers in tag test (Jermolene#4355)

Setting enableIndexers to an empty array ends up disabling all indexers
for the wiki

* Fix missing comma in editions/tw5.com/tiddlywiki.info

* New release banner

Congratulations @telmiger

* Remove internal version number info from dynnannotate plugin

* Fix count widget to return "0" for an empty filter string instead of undefined

* AddPlugins: Add a clearer prompt for plugins that have subplugins

* AddPlugins: Add new "updates" tab

* Release note update

* Add new compare filter operator

Fixes Jermolene#4554

* Plugin Chooser: Include currently installed version

* Plugin Chooser: Distinguish between install, reinstall, update and downgrade

* Release note update

* Plugin Chooser: Use existing template for updates tab

* Release note update

* Additional fr-FR translation for Control Panel  (Jermolene#4555)

* fr-FR translation for strings relative to plugin updates

* Missing fr-FR translation for a string in ControlPanel

* Missing fr-FR translation for Copy to Clipboard caption & hint

* Missing fr-FR translations for the Edit Template

* fr-FR translations for updates/upgrades in plugin chooser

* Add chinese translations for AddPlugins things (Jermolene#4546)

* Add chinese translations for AddPlugins things
* "updates" tab
* prompt for plugins that have subplugins

* Improve chinese wording

* Update chinese translations for AddPlugins
* add Plugins/Downgrade/Caption
* add Plugins/Update/Caption
* update Plugins/Updates/UpdateAll/Caption

* Plugin Chooser: Use separate tab state for each plugin library

Fixing the third issue at Jermolene#4486 (comment) from @kookma

* Plugin Chooser: Don't display the "already installed" message twice

Fixing the first issue here Jermolene#4486 (comment) by @kookma

* Plugin Chooser: Colour of update all button should match individual update buttons

Fixes the final issue mentioned by @kookma at Jermolene#4486 (comment)

* Plugin Chooser: Ensure official plugin library is shown first

* Control Panel Plugin Listing: Fallback to last component of title if name field is missing

* Fix makelibrary.js to use enviroment variable paths (Jermolene#4559)

This makes makelibrary.js use environment variables to find paths for plugins, themes and languages instead of just using the paths hardcoded in boot.js

* Makelibrary.js: Minor refactoring

* Update copyright date in license

* Add has:index (Jermolene#4540)

* has:index

* has:index

* has:index docs

* has op examples

* has op examples

* operator macros typo missing </div>

* possible mistake

* Update RangeWidget.tid (Jermolene#4453)

* Update RevealWidget.tid (Jermolene#4451)

* Update ViewWidget.tid (Jermolene#4441)

ref Jermolene#4438

* fix the example path (Jermolene#4419)

* Reduced indexOf calls in wiki.sortByList (Jermolene#4275) (Jermolene#4397)

Examined the tests in test-tag. They already cover all the use cases
I could think of.

* Fixed join filter operator to never returns null (Jermolene#4396)

If the operator were passed an empty list, it would return null
which could cause some proceeding operators to crash.

* Add Mandar Vaze to Individual Contrib. Agreement (Jermolene#4543)

* Add details about special tag in usage for ribbon (Jermolene#4544)

Resolve Jermolene#2581

* Signing the CLA to start contributing (Jermolene#4562)

My Chinese name is Lin Dongwu, I will use that to sign it.

* Fix: z-index for codemirror hint not large enough (Jermolene#4551)

It is currently covered by other tiddler.

* Fix link

* Update release note

* Plugin Chooser: Display libraries as separate tabs

Suggested by @kookma

* Fix wrong configurations in `tiddlywiki.info` for editions `zh-Hant` and `zh-Hans` (Jermolene#4564)

* Remove unwanted whitespace from sidebar links (Jermolene#4552)

* add a new-line before the log text to increase readability of the test output

* make eslint, jslint happy

* it shouldn't be there

* fremove this file from my PRs

* fix 4532. Links should not add unwanted whitespace, since this causes problems with CSS styling

* remove whitespace from tiddler title and add a little bit of margin-right to the tiddler icon.

* use default parameters for link handling, which results in less code

* introduce tc-viewswitcher class to be able to style icon distance to text

* Add new parameters to fields-widget and fields-operator. (Jermolene#4433)

* add a new-line before the log text to increase readability of the test output

* make eslint, jslint happy

* extend fields-widget with include/exclude/sort/reverse and fields-filter with include and exclude params plus DOCS

* remove new-line

* remove eslint settings

* restore old eslint settings

* remove typo

* jsontiddlers macro: parse "spaces" parameter as integer

* Utils: ParseInt should specify a radix

Thanks @pmario

* Action create tiddler improvements (Jermolene#4436)

* add a new-line before the log text to increase readability of the test output

* make eslint, jslint happy

* add $template and $overwrite parameter

* documentation for new parameters + 4 new examples

* remove unwanted files

* Release note update

* Preparing for v5.1.22 release

* Update readme for v5.1.22

* Version number update for 5.1.22

* Add Product Hunt badge

* Signing the CLA (Jermolene#4581)

* Fix broken links in static rendering

Fixes Jermolene#4577

* Make commands for static generation more complete (Jermolene#4588)

* Make commands for static generation more complete

* Added message about installing on node.js

* Update information about Quine for iOS

* Update cla-individual.md (Jermolene#4607)

* Add Nicolas Petton to the list of contributors (Jermolene#4617)

Co-authored-by: Jeremy Ruston <jeremy@jermolene.com>

* Docs updates and fixing broken links (Jermolene#4628)

* Corecting URL of LuckySushi shop

* Android-Instructions remained for Andtidwiki

* Updating description and feature set of Timimi
Updating URL of Widdly
Resolving minor camelcase issues in TiddlySpot

* Detailed instructions about termux and adding it to save methods

* Correcting the words "open source" and "Unix"

* Changing link protocols of verified domains to https

* Fix mailto links Forums.tid (Jermolene#4616)

To avoid users being mislead when trying to subscribe by email to one of the
Google Groups, put only the relevant mailto link in each forum section.

Co-authored-by: Jeremy Ruston <jeremy@jermolene.com>

* Clarify Introduction to filter notation.tid (Jermolene#4639)

I'm reading the documentation for the first time and I'm trying to clarify parts which are hard to understand for first-time users.

* Update Generating Static Sites with TiddlyWiki.tid (Jermolene#4636)

* Update rendertiddlers.tid (Jermolene#4635)

* Update RoadMap tiddler

Fixes Jermolene#4661

* Update How to apply custom styles.tid (Jermolene#4663)

* Update TiddlyWiki in the Sky for TiddlyWeb (Jermolene#4667)

remove refs to TiddlySpace

* Update LinkWidget.tid (Jermolene#4690)

add image link

* Update Images in WikiText.tid (Jermolene#4691)

* Update KeyboardWidget.tid (Jermolene#4606)

Add railroad for key strings.

* Update Saving on a PHP Server.tid (Jermolene#4714)

As suggested by @Marxsal

* Visual changes to Saving Tiddler (Jermolene#4640)

* Styles and templates for visual changes to Saving methods listing

* Color coding saver methods according to delivery

* Changes to tags and few tiddlers
- The tag InternetExplorer has been changed to [[Internet Explorer]]
- A tag for Edge is added
- Reclassified TiddlyServer as DIY instead of App
The existing criteriion for classification is unclear. Here is my reasoning for the change. An app is something user can simply install and run. Like TiddlyDesktop or Tiddloid. A DIY is something user has to install additional runtimes for. Thus Nodejs is a DIY. In the same vein, TiddlyServer is a DIY

* Adding Twexe

* Reversing accidental changes to StoryList

* Restyling Download button and Card Size

* Removing "Read more" links

Entire card is now clickable
To give visual clues regarding the clickability of card, title will change color to blue on card hover

* Removing margins from elements under link and adding padding instead.

Why this change? Margins are not "clickable". Having margins under <a> tag means there are minute dead areas where the mouse pointer will change shape, is not clickable and degrade user experience. Paddings are "clickable"

Co-authored-by: donmor <donmor3000@hotmail.com>
Co-authored-by: Jeremy Ruston <jeremy@jermolene.com>
Co-authored-by: Simon Huber <huber.simon@protonmail.com>
Co-authored-by: Nils-Hero Lindemann <nilsherolindemann@gmail.com>
Co-authored-by: Matt Lauber <github@mklauber.com>
Co-authored-by: Mario Pietsch <pmariojo@gmail.com>
Co-authored-by: Xavier Maysonnave <x.maysonnave@gmail.com>
Co-authored-by: Marica Odagaki <ento.entotto@gmail.com>
Co-authored-by: Will Atwood Mitchell <wam@users.noreply.github.com>
Co-authored-by: Stefan Krüger <git@s-light.eu>
Co-authored-by: TonyM <31584658+AnthonyMuscio@users.noreply.github.com>
Co-authored-by: Brooks Boyd <MidnightLightning@users.noreply.github.com>
Co-authored-by: twMat <boardsmm@gmail.com>
Co-authored-by: Cameron Fischer <fischer.cameron@gmail.com>
Co-authored-by: Lee Sheng Long <github@sll.ee>
Co-authored-by: Bram Chen <bram.chen@gmail.com>
Co-authored-by: saqimtiaz <saq.imtiaz@gmail.com>
Co-authored-by: lucible <45129600+lucible@users.noreply.github.com>
Co-authored-by: scott willeke <scott@willeke.com>
Co-authored-by: JesseWeinstein <jesse@wefu.org>
Co-authored-by: Matthias Bilger <matthias@bilger.info>
Co-authored-by: Rob Hoelz <rob@hoelz.ro>
Co-authored-by: Joshua Fontany <joshua.fontany@gmail.com>
Co-authored-by: jed <inmysocks@fastmail.com>
Co-authored-by: Arlen22 <arlenbee@gmail.com>
Co-authored-by: Xavier Cazin <xavier@cazin.eu>
Co-authored-by: Mohammad Rahmani <830394+kookma@users.noreply.github.com>
Co-authored-by: Mandar Vaze <mandarvaze@gmail.com>
Co-authored-by: lin onetwo <linonetwo012@gmail.com>
Co-authored-by: idotobi <16611056+idotobi@users.noreply.github.com>
Co-authored-by: Marxsal <throaway@yahoo.com>
Co-authored-by: mocsa <13969648+mocsa@users.noreply.github.com>
Co-authored-by: Nicolas Petton <nicolas@petton.fr>
Co-authored-by: Rizwan <ibnishak@live.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
post-v5.1.20 After the release of v5.1.20 (and any bug fix releases)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants