1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-01-23 19:34:39 +00:00

Compare commits

..

1597 Commits

Author SHA1 Message Date
Jeremy Ruston
f49c55fe3c Version number update for 5.1.20 2019-08-09 14:17:35 +01:00
Jeremy Ruston
ad175e222b Preparing for v5.1.20 release 2019-08-09 14:16:39 +01:00
Jeremy Ruston
2a3ea14437 Docs: More updates to build docs 2019-08-09 14:09:15 +01:00
Jeremy Ruston
762810361f Docs: Update the build docs 2019-08-09 14:08:13 +01:00
Jeremy Ruston
9244a2f4fd Bring over remaining scripts from build.jermolene.github.io 2019-08-09 10:30:26 +01:00
Jeremy Ruston
067e8a9f94 Merge branch 'tiddlywiki-com' 2019-08-09 10:29:46 +01:00
Jeremy Ruston
a91ae1a877 More Catalan updates 2019-08-08 15:22:57 +01:00
Bram Chen
2be09f23eb Corrected typo in help link for GitLab saver (#4169)
* for zh-Hant and zh-Hans
2019-08-08 09:55:49 +01:00
Xavier Cazin
59264bbf2a fr-FR translation updates (#4167)
* Typo in GitLab saver link

* Improve fr-FR DateFormat for ViewTemplate subtitles

* Update fr-FR translations for Saving/GitService
2019-08-07 18:01:02 +01:00
Bram Chen
803c2c749f Add chinese translations for Saving/GitService (#4137) 2019-08-06 21:05:35 +01:00
Jeremy Ruston
c3df892321 More release note tweaks 2019-08-06 18:46:28 +01:00
Jeremy Ruston
68e6298e7d Tweaks to release note 2019-08-06 17:41:11 +01:00
Jeremy Ruston
9df64c1ecf Update Catalan translation 2019-08-06 16:02:43 +01:00
Jeremy Ruston
b8ac2d7a06 Release note: update contributor list 2019-08-06 14:57:46 +01:00
Jeremy Ruston
41d30bebc8 Update release note 2019-08-06 14:53:23 +01:00
Jeremy Ruston
6df7b617fb Docs tweaks 2019-08-06 14:53:14 +01:00
Simon Huber
31e7dbf020 Add "preventScroll" option to tm-focus-selector message (#4157)
* add "delayed" option to tm-focus-selector message

this delays the focussing for the time of the animation duration if delayed="yes" or delayed="true"

this is useful when navigating the story river up and down with keyboard shortcuts and the shortcuts focus the title input if a navigated tiddler is in edit mode -> navigation doesn't jump but stays smooth

* Update rootwidget.js

* Update WidgetMessage_ tm-focus-selector.tid

* add preventScroll="true" tip
2019-08-06 13:12:21 +01:00
Jeremy Ruston
f49ab78ebd Docs: Add another example to Conditional Operators 2019-08-05 14:28:59 +01:00
Jeremy Ruston
41d3e80397 Update release note
More to come, I've only got as far as June 28th...
2019-08-05 14:28:42 +01:00
Simon Huber
e1bb532d98 Fix popups not being cancelled correctly (#4158) 2019-08-04 13:01:24 +01:00
Jeremy Ruston
8159c4a865 Fix navigator widget when story and/or history attributes are missing
To fix the crash described here: https://groups.google.com/d/msgid/tiddlywiki/c5461591-bf27-4c85-9f27-9eef14c38816%40googlegroups.com?utm_medium=email&utm_source=footer
2019-08-04 11:34:45 +01:00
Simon Huber
0903fd2fec Update katex plugin to latest v0.10.2 (#4133)
* update katex.min.js to v0.10.2

* update katex-without-fontface.min.js to latest

* Update katex.min.css

* Update katex.js

* update katex fonts

* Delete katex.js ...

... we're using katex.min.js

* add version number to plugin.info

* Update readme.tid

* Create katex.js

* Update plugin.info
2019-08-03 17:36:40 +01:00
Simon Huber
62a7fa4203 Pop storyview for fields list in EditTemplate (#4148) 2019-08-02 15:05:30 +01:00
Simon Huber
776ce0f65f Pop storyview for tabs macro (#4149) 2019-08-02 15:05:12 +01:00
Simon Huber
4952be6518 "Open" SideBar tab: use tv-story-list and tv-history-list (#4150) 2019-08-02 15:03:09 +01:00
Simon Huber
427fbfd623 Fix tags not animating in viewtemplate (#4142)
* fix tags not animating in viewtemplate

this PR uses the addprefix removesuffix filters, not a new filter as proposed in #3763

* use new `then` operator
2019-08-02 14:32:36 +01:00
Jeremy Ruston
17711657b6 Add then and else operators
Fixes #4147
2019-08-02 14:27:58 +01:00
Jeremy Ruston
394725f00c Fix edit-bitmap crash with missing tiddlers
Fixes #4141
2019-08-02 09:16:36 +01:00
Simon Huber
9a2de11db1 Pop storyview for topright and topleft bar (#4146)
* pop storyview for topright bar

* pop storyview for topleft bar
2019-08-02 09:03:51 +01:00
Simon Huber
fab67a463b Pop storyview: fix bug where targetElement is null (#4143) 2019-08-02 08:51:16 +01:00
Simon Huber
64fe260f4d Fix: correct handling of tc-popup-keep when cancelling ... (#4144)
... popups through focussing inputs
2019-08-02 08:49:06 +01:00
Simon Huber
8db893b9c9 Add pop storyview for pagecontrols (#4145)
this PR adds the pop storyview to the page-control buttons in the sidebar
2019-08-02 08:47:47 +01:00
Simon Huber
2d4831f920 Tag-picker: delete double-definition of tag-actions (#4139) 2019-08-01 17:32:39 +01:00
Jeremy Ruston
0a6870656f Fix typo in b5653babd 2019-07-31 21:39:52 +01:00
Bimba Laszlo
b5653babdf Add GitLab saver, apply common lingo to Git savers (#3931)
* Transform GitHub saver to work with GitLab as well

You can choose which provider you want to use, the data is given in the
same place.

I tried to avoid code duplication, so service providers' unique
properties are in separate files, the settings of the selected provider
are loaded.

In two fields I am not sure that it fits into the current structure:

* module-type: gitservice
  Which module is a `gitservice` type, it will be listed in the
  drop-down menu.
* default-api-url: https://gitlab.com/api/v4
  The default URL to access the provider's API.

This is just a sketch, not a final version, suggestions for modification
are welcome!

* Rename saver from GitHub to GitService, update docs

* Split GitHub and GitLab to separate savers, apply common lingo

Sadly, it doesn't seem to make much sense to search for common parts in
the code, because there might be a Git service that is very different
from the GitHub API (such as BitBucket). Therefore, I feel that Git
savers are not able to share other than the translations.

I deleted the defaults values from the translations and set it to the
text entry because they should not depend on the translations.

* Add more information about the password field

It is not clear how to create a personal access token, thus added a link
to the help pages. In addition, GitLab only accepts personal access
token, GitHub also accepts the password, so I made this clear.

* Extract commit message to lingo

* Fix indentation

* Use improved base64 encoder

Fix conflict with a06acc4eb8
2019-07-31 21:38:52 +01:00
Jeremy Ruston
3afaa9de9a Add support for anchored searches 2019-07-31 21:36:12 +01:00
Jeremy Ruston
dbaccf792d Use the new "match" operator across the core
Instead of the old "prefix" hack
2019-07-31 09:30:16 +01:00
Jeremy Ruston
5faae2547d Add "match" operator for string comparison
Fixes #4130
2019-07-31 09:11:12 +01:00
Jeremy Ruston
7f78065992 Fix unnecessary "list" field creation when renaming tiddlers
Fixes #4120
2019-07-30 17:10:53 +01:00
Simon Huber
cb1d35e230 More Plugins - Button: use primary color (#4075)
* Update AddPlugins.tid

* Update base.tid

* Update AddPlugins.tid

* Update AddPlugins.tid

* Update base.tid
2019-07-30 13:49:40 +01:00
Simon Huber
0a2d532a7b Fix bug where edit widget input-tag is empty (#4088) 2019-07-30 13:49:05 +01:00
Simon Huber
e669ec098f Fix beyboard widget empty parameters (#4094) 2019-07-30 13:47:56 +01:00
Jeremy Ruston
269fa5313f Fix for index ordering issue
Fixes #4082

This version removes selective updating of the tag index, instead completely clearing the index on each update. I'm investigating restoring that optimisation.
2019-07-28 16:39:34 +01:00
Simon Huber
b30746813b Fix: store noStateReference in popup.js (#4115) 2019-07-26 17:13:53 +01:00
Jeremy Ruston
32c5490a20 Improve contribution banner
* Make it work with titles with crazy characters
* Hide the banner for tiddlers that didn't originate on GitHub

Fixes #4116 and #4129
2019-07-26 12:46:27 +01:00
jed
e86d4d29d5 Fix th-renaming-tiddler (see #4023) (#4037)
* Remove the th-renaming-tiddler hook from navigatior.js

The hook is invoked in the renameTiddler function which would cause the same hook to be called twice, and the version in the navigator widget didn't have the correct inputs and return value according to the documentation.

* Make it so that the th-renaming-tiddler hook isn't called twice

by removing it from the navigator.js file
2019-07-24 18:12:09 +01:00
Jeremy Ruston
cbd07465f3 Fix test rig shadow tiddler behaviour
The test rig previously used a simplified implementation of shadow tiddlers which broke with the new indexing engine. There was also a problem that made that even if indexers were disabled they were still initialised.

This PR fixes both problems, in preparation for fixing #4082
2019-07-16 16:53:37 +01:00
Jeremy Ruston
27b75f3922 Fix missing .tid extension from #4112 2019-07-16 15:43:18 +01:00
morosanuae
8a53cca00d Adding the "Font Awesome 5 Free SVGs for TiddlyWiki" resource site (#4112) 2019-07-15 18:09:40 +01:00
Mario Pietsch
5d36b484c6 Toc cosmetic changes for tabbed-xxxx macros (#4101)
* toc cosmetic changes.

* toc in right sidebar should use toc-item if itemCalssFilter is not defined
2019-07-15 12:31:50 +01:00
Simon Huber
e2bad34e89 Fix bug and typo in framed.js (#4110) 2019-07-15 10:11:36 +01:00
Cameron Fischer
b67e088e55 Reducing function calls across board (#4102) 2019-07-14 16:20:27 +01:00
Jeremy Ruston
cb77f3f503 Make big green (etc) buttons a bit rounder 2019-07-14 16:11:28 +01:00
Jeremy Ruston
8226efa154 Merge pull request #4106 from BurningTreeC/patch-17
fix missing tag for advanced-search keyboard shortcut
2019-07-14 16:08:01 +01:00
Jeremy Ruston
ac49b4d20c Cancel open popups when inputs get focus 2019-07-14 16:07:36 +01:00
Simon Huber
78cc80db13 fix missing tag for advanced-search keyboard shortcut 2019-07-14 17:06:09 +02:00
Jeremy Ruston
2bcb36f151 Add advanced-search kb shortcut ctrl-shift-A 2019-07-14 15:49:15 +01:00
Jeremy Ruston
8e7c0907f8 Add checkactions attribute to Checkbox widget
See discussion at https://groups.google.com/d/msgid/tiddlywiki/526754d5-8786-49cd-aaa1-c77311670116%40googlegroups.com:

The history here is that in v5.1.14 we added an "actions" attribute to the checkbox widget that specified an action string to be specified whenever the state of the checkbox changed. The same action string is executed regardless of whether the checkbox was checked or unchecked.

Then in v5.1.16 we merged https://github.com/Jermolene/TiddlyWiki5/pull/3182 which added the "uncheckactions" attribute. The difference between the two is that the uncheckactions are only executed if the checkbox is unchecked. The main "actions" attribute is executed before any actions in "uncheckactions", which makes it possible to arrange things so that the "actions" attribute sets things to the checked state while the "uncheckactions" attribute overwrites those changes to set things to the unchecked state.

In retrospect, it would have made more sense to have also added a "checkactions" attribute that was executed only if the checkbox was checked. I'll investigate adding it for v5.1.20.
2019-07-14 13:42:43 +01:00
Simon Huber
66dc7df745 Update popup.js 2019-07-14 09:37:53 +02:00
Simon Huber
fd88be4173 Update ShortcutInfo.multids 2019-07-14 07:25:50 +02:00
Simon Huber
880a2aa153 Update ShortcutInfo.multids 2019-07-14 07:25:02 +02:00
Simon Huber
173e9c6c3a add advanced search key combination ctrl-shift-A 2019-07-14 07:23:47 +02:00
Simon Huber
a87a299aa9 add advanced-search kb shortcut 2019-07-14 07:22:46 +02:00
Jeremy Ruston
f5b2599432 Make it possible to distinguish the two different sidebar elements with the class "tc-sidebar-lists" 2019-07-11 22:00:28 +01:00
Simon Huber
ba2f4822dd Merge branch 'master' into patch-10 2019-07-11 18:19:49 +02:00
Jeremy Ruston
a3a25f2453 Fix bug with popup cancelling if state is in a field other than 'text' 2019-07-11 17:07:25 +01:00
Simon Huber
ecbbe87a0d popup cancelling - use state reference
in the google group there's a discussion: https://groups.google.com/forum/#!topic/tiddlywiki/_mDDZ1jpMgU

buttons allow setting a state-reference for popups but the popup mechanism doesn't respect that
2019-07-11 07:35:06 +02:00
Simon Huber
217670cdf3 Update engine.js 2019-07-10 09:57:59 +02:00
Simon Huber
345a6a0f90 Update framed.js 2019-07-10 09:57:11 +02:00
Simon Huber
c647b42574 Update simple.js 2019-07-10 09:56:34 +02:00
Simon Huber
7811614d53 Update popup.js 2019-07-10 09:55:32 +02:00
Simon Huber
8aa6427d67 Update factory.js 2019-07-10 09:54:35 +02:00
Jeremy Ruston
86286c6fce Don't generate filenames starting with a period 2019-07-09 12:22:52 +01:00
Simon Huber
f7da4bafae big-green button: border-radius 2px
make it a bit more beautiful
2019-07-08 11:14:32 +02:00
Jeremy Ruston
08c900786e Make katex toolbar (text buttons) button same color 2019-07-07 17:31:54 +01:00
Simon Huber
efa593bb50 make katex toolbar (text buttons) button same color 2019-07-07 18:00:17 +02:00
Jeremy Ruston
19f2280803 German translations 2019-07-07 13:02:47 +01:00
pmario
6721d70de5 german translations 2019-07-07 01:08:25 +02:00
Jeremy Ruston
7b3d190974 Create Hidden Setting ViewTemplate and EditTemplate.tid 2019-07-05 07:29:06 +01:00
Jeremy Ruston
3997600137 Update chinese translations 2019-07-05 07:23:11 +01:00
Jeremy Ruston
9f31867731 Update core/modules/savers/github.js 2019-07-05 07:21:53 +01:00
Bram Chen
a06acc4eb8 Update core/modules/savers/github.js
Using "$tw.utils.base64Encode()" to encode content of data instead of calling module library directly.
2019-07-05 11:03:05 +08:00
BramChen
6f3db0118e Update chinese translations
* Add hint of toggle-sidebar keyboard shortcut
2019-07-05 10:30:19 +08:00
Jeremy Ruston
f5acf3adaa Make Using Stamp show up in Recent tab 2019-07-04 22:27:19 +01:00
Jeremy Ruston
5ac2064d18 Add toggle-sidebar keyboard shortcut 2019-07-04 22:18:40 +01:00
Jeremy Ruston
2a4c60b23d Allow tm-open-window to specify a page title 2019-07-04 15:59:34 +01:00
Jeremy Ruston
3edaa652ee Reveal widget: add option to avoid clamping popup position
Fixes #4041
2019-07-04 15:58:27 +01:00
Simon Huber
77fedf9582 fix keyboard shortcut 2019-07-04 12:00:10 +02:00
Simon Huber
cf4c4532c3 Update Buttons.multids 2019-07-04 09:00:34 +02:00
Simon Huber
ea0e1357bf Update ShortcutInfo.multids 2019-07-04 08:59:23 +02:00
Simon Huber
ef7210adf4 add alt-shift-S to toggle sidebar 2019-07-04 08:57:49 +02:00
Simon Huber
e91fb29253 add keyboard shortcut toggle-sidebar 2019-07-04 08:56:17 +02:00
Simon Huber
f978355ea4 make Using Stamp show up in Recent tab
... just a "modified" update
2019-07-04 07:50:47 +02:00
Simon Huber
1e1b2e28b6 Create Hidden Setting ViewTemplate and EditTemplate.tid
this PR adds information about the hidden settings for View- and EditTemplate
2019-07-04 07:45:04 +02:00
Jeremy Ruston
d489f61f2a include wiki in options sent to generateTiddlerFilePath 2019-07-03 17:54:58 +01:00
Jeremy Ruston
727d660715 Story PageTemplate: configurable View- and EditTemplates (#4051)
* Story PageTemplate: configurable View- and EditTemplates

* add $:/config/ui/ViewTemplate

* add $:/config/ui/EditTemplate
2019-07-03 17:42:13 +01:00
Simon Huber
6e5566b907 Add whitespace trim to pagetemplate, story and sidebar (#4052)
* add whitespace trim to pagetemplate

* add whitespace trim to story pagetemplate

* add whitespace trim to sidebar pagetemplate
2019-07-03 17:41:23 +01:00
Bram Chen
958b3e7b7c Improve the base64 encode/decode utility functions (#4053)
Make good use of "$:/core/modules/utils/base64-utf8/base64-utf8.module.js"
* Add a new base64Encode()
* Both of base64Encode and base64Decode work for Nodejs and Browsers
2019-07-03 17:39:32 +01:00
Simon Huber
c578566dea add $:/config/ui/EditTemplate 2019-07-03 15:09:32 +02:00
Simon Huber
8a0aef4dcb add $:/config/ui/ViewTemplate 2019-07-03 15:08:43 +02:00
Simon Huber
35a71ad577 Story PageTemplate: configurable View- and EditTemplates 2019-07-03 15:07:06 +02:00
jed
c202ef4201 include wiki in options sent to generateTiddlerFilePath
This adds options.wiki to the object sent to the generateTiddlerFilePath

The function generateTiddlerFilePath can take a wiki in the options object, but generateTiddlerFileInfo doesn't pass the wiki to it.
2019-07-03 12:11:10 +02:00
Jeremy Ruston
f42351e235 Add new readme build script, and update the readme build 2019-07-02 16:53:23 +01:00
Jeremy Ruston
da61917797 list-links macro: trim whitespace
Fixes #4044
2019-07-02 16:53:02 +01:00
Simon Huber
16a53ae394 Use Resources tag for escapecss examples (#4040) 2019-07-02 16:25:34 +01:00
Simon Huber
d1948621d3 Docs for stamp-button optionally wrap selection (#4047)
* make stamp-button optionally wrap selection

* Update Using Stamp.tid
2019-07-02 16:24:48 +01:00
Bram Chen
de04755a0a Fix bug with not definded variable (#4049)
Using the variable "resolveCredentialsFilepath" to provide a good debug information.
2019-07-02 15:40:07 +01:00
Jeremy Ruston
02b141f97f Docs: typo in "Using the external JavaScript template" 2019-07-02 15:35:11 +01:00
Simon Huber
15b576618f Docs: Add information about hidden setting EditTabIndex (#4045) 2019-07-02 15:33:43 +01:00
Simon Huber
91db09bd1e Katex dropdown: add description hint (#4048)
* katex dropdown: add description hint

* Update katex-dropdown.tid
2019-07-02 15:04:57 +01:00
Simon Huber
d2f1debf92 Make escapecss tiddlers show in recent tab (#4032)
* make escapecss show in recent tab

* make escapecss examples show in recent tab
2019-06-29 08:40:46 +01:00
Bram Chen
f6c9150d32 Add chinese translations for hint of sidebar-search keyboard shortcut (#4027) 2019-06-29 08:21:06 +01:00
Simon Huber
2f723dd85a Add docs for escapecss operator (#4028)
* Create escapecss_Operator.tid

* Create escapecss Operator (Examples).tid
2019-06-29 08:17:11 +01:00
Simon Huber
42bde75de2 Update KeyboardShortcuts.tid (#4030) 2019-06-29 08:16:35 +01:00
Simon Huber
112443c054 Update/fix nord palette notification background (#4031) 2019-06-29 08:15:46 +01:00
Jeremy Ruston
7781cb1f8b Streamline wording for sidebar search shortcut 2019-06-28 17:35:17 +01:00
Jeremy Ruston
bf51ae0019 Add keyboard shortcut for focusing sidebar search
Fixes #4020

Fixes #4025
2019-06-28 17:28:24 +01:00
Jeremy Ruston
ed67f4a88b Add new tm-focus-selector message 2019-06-28 17:27:36 +01:00
Bram Chen
274dffe750 Update chinese translations for the revised PaletteManager (#4019)
* Palette/Editor/Delete/Hint
 * Palette/Editor/Names/External/Show
2019-06-26 16:44:31 +01:00
Simon Huber
14003b0e88 Make framed editor use tiddler-editor-background color (#3611)
so we can customise it better if we don't like what we see
2019-06-26 14:53:49 +01:00
Simon Huber
36c7e82cc0 Add/refactor PaletteManager (#3832)
* add PaletteManager

* add hint for "external" palette-names

* macro utility, for local \import only

this tiddler is never meant to be tagged $:/tags/Macro

contains only a colour macro which allows to call `<<colour "...">>` within a tiddler and get the parameter-name instead of the resolved color

used in the PaletteManager to reveal the original color below the color that just uses its color with the colour macrocall

example:

```
\define get-real-index(string)
\import $:/core/macros/utils
<$wikify $name="result" text="""$string$"""> <- does the "colour" macrocall, but the one that returns the parameter name
<<result>>
</$wikify>
\end
<$set name="color" value={{{ [{$:/palette}getindex[color-of-interest]] }}}>

-> <<colour primary>>

<$wikify name="real-color-index" text="""<$macrocall $name="get-real-index" string=<<color>>/>""">

<<real-color-index>> -> primary

...
```

* transclude PaletteManager in snippets/paletteeditor

* transclude PaletteManager in core/ui/ControlPanel/Palette

* Update ControlPanel.multids

* add style for color inputs in PaletteManager

* Update PaletteManager.tid

* Update PaletteManager.tid

* add tooltips & aria-labels

* Update ControlPanel.multids

* Update PaletteManager.tid

* Update PaletteManager.tid

* Update PaletteManager.tid
2019-06-26 12:36:13 +01:00
Simon Huber
31b141097d Tags edittemplate: replace &times; with svg (#3859)
* tags edittemplate: replace &times; with close-button svg

* make close-button smaller + v-aligned middle
2019-06-26 12:34:18 +01:00
Simon Huber
448d108d69 Make ContributionBanner more solid (#3645)
this makes the contribution banner work with "badly" named tiddlers, too
2019-06-26 12:33:44 +01:00
Simon Huber
69d3a47073 Add escapecss filter (#3546)
* add escapecss filter

this filter would allow creating valid css classes from titles containing special characters

we assign a class to an element using `encodeuricomponent[]` so that the class name is encoded

in a stylesheet we create the classname by `<title>escapecss[]` which applies the uri encoding and escapes characters that need to be escaped

* Update encodings.js

* refactor tagToCssSelector, add escapeCssSelector

* use escapeCssSelector

* escape using CSS.escape if it's available

* Update encodings.js

* revert factoring out escapeCssSelector
2019-06-26 12:32:01 +01:00
Simon Huber
e313b0b7ca CSS.escape as startup module (#3574)
* don't know what I'm doing - apply polyfill methods

* don't know what I'm doing add CSS.escape polyfill

* execute polyfills in load-modules

* Delete cssescape.js

* add css-escape polyfill as startup module

* Update load-modules.js

* this was for testing :)

* Update css-escape-polyfill.js

* Update css-escape-polyfill.js
2019-06-26 12:31:22 +01:00
Simon Huber
dc9f4e2de7 Pop storyview: animation - don't x-overflow page (#3857)
... this makes the animation when inserting tiddlers / navigating to tiddlers in the pop storyview less jumpy

it simply sets `overflow-x` to `hidden` for the time of the insert-animation
2019-06-26 11:50:52 +01:00
Robin Munn
cb2bf25563 Fix examples for sentencecase and titlecase (#4010) 2019-06-24 10:36:28 +01:00
Jeremy Ruston
e09ac2ab37 CI: Fix commit field in $:/build 2019-06-23 20:11:55 +01:00
Jeremy Ruston
b580baf5ee Add a "commit" field to the $:/build tiddler 2019-06-21 15:21:10 +01:00
Jeremy Ruston
a6500ba711 DynaView: Suppress local storage errors 2019-06-21 15:19:51 +01:00
Jeremy Ruston
fd8ede07bf Release note updates 2019-06-21 10:52:54 +01:00
Jeremy Ruston
c8d6f3b681 Fix tests for changes to split operator
We now retain any blank strings
2019-06-21 10:36:53 +01:00
Jeremy Ruston
6582b106ee Fixes to split operator, plus instructions for using it to do search and replace 2019-06-21 10:21:52 +01:00
Jeremy Ruston
90684f9f52 Add support for [is[blank]] to detect empty/blank strings 2019-06-21 10:20:37 +01:00
twMat
ceb2d9f119 Update StartupActions.tid (#4002)
Regarding the bulleted tag pills; they should probably also be removed in place of text but I see value in keeping them for the sake of being able to easily peek at what they tag. We should probably have a section under Ctrlpanel>Settings where any startupaction-tiddlers are listed but since we don't yet, then the mentioned tag pills could perhaps remain.... except for the one in the PR.
2019-06-21 08:36:09 +01:00
Robin Munn
9b27f82a80 Fix sentencecase operator, add titlecase operator (#4006) 2019-06-21 08:24:02 +01:00
Jeremy Ruston
d8b79723cd Docs: Remove broken example of checkbox actions attribute
See https://github.com/Jermolene/TiddlyWiki5/pull/3996#issuecomment-503596160
2019-06-19 15:56:07 +01:00
Jeremy Ruston
2e2ed7902c Add sentencecase operator
Fixes #4000
2019-06-19 12:11:02 +01:00
twMat
6fd70f9c11 Docs: Update CheckBox example (#3996) 2019-06-18 10:49:52 +01:00
Bimba Laszlo
6099ec576c Fix typo in docs of performance instrumentation (#3995) 2019-06-18 09:41:50 +01:00
Jeremy Ruston
47dc59cd54 Fix caption for "join" operator docs
Thanks @twMat
2019-06-17 21:44:50 +01:00
Jeremy Ruston
c963680f9c Release note updates 2019-06-17 21:27:50 +01:00
Robin Munn
e6ac709840 Clarify that the split operator does not dedupe (#3981) 2019-06-17 21:21:48 +01:00
Robin Munn
32a2bea7f5 Better examples for mathematics operators (#3982)
Include = before each number in the Mathematics Operators examples,
so that people get used to seeing that in math examples where dupes
are likely.

Only the Mathematics Operators tiddler really needed to be changed;
the example tiddlers for individual operators were already using =.

Fixes #3979.
2019-06-17 21:21:23 +01:00
Robin Munn
62829dc9d3 Add untrunc operator, the mirror of trunc (#3994) 2019-06-17 18:34:30 +01:00
Robin Munn
58cb300a0a Fix typo (#3984) 2019-06-17 18:32:35 +01:00
Robin Munn
a4dcc20797 Signing the CLA as rmunn (#3992) 2019-06-17 18:31:54 +01:00
Xavier Cazin
2002ff72b7 fr-FR translation for GitHub saver related strings (#3988) 2019-06-17 16:46:03 +01:00
Jeremy Ruston
250a1e5356 Release note: Typo 2019-06-14 09:26:24 +01:00
Jeremy Ruston
630a0ecf9e Remove test for concat operator 2019-06-13 16:55:55 +01:00
Jeremy Ruston
fef2ea97a1 Final chunk of docs for new maths/string operators 2019-06-13 16:53:23 +01:00
Jeremy Ruston
73eb7fbd4e Maths operators: Remove concat (same as addsuffix) and add splitregexp 2019-06-13 16:52:19 +01:00
Jeremy Ruston
fc09f8e331 Tree macro: allow separator to be customised 2019-06-13 08:47:42 +01:00
twMat
1a08430a0c Docs: Fix typo in TextReference.tid (#3978)
minor correction - or am I mistaken?
2019-06-12 22:03:01 +01:00
Jeremy Ruston
23dd8da22c Remove draft inadvertantly included in e5e5b1d73
Thanks @twMat
2019-06-12 12:48:14 +01:00
Jeremy Ruston
e5e5b1d739 Fixes for 7fcdc83ba
Thanks @twMat
2019-06-12 11:34:07 +01:00
Jeremy Ruston
7fcdc83bae First batch of docs for the maths operators 2019-06-11 17:18:51 +01:00
Jeremy Ruston
86387a9185 Add some error trapping to maths operators 2019-06-11 17:18:18 +01:00
Jeremy Ruston
dd7837d164 Fix issue with allafter operator
Fixes #3962
2019-06-11 09:38:14 +01:00
Jeremy Ruston
4a66ecbf6f Update release note 2019-06-10 21:06:25 +01:00
Jeremy Ruston
f02352f6a1 Use default link text when link widget has no content
Fixes #3974
2019-06-10 21:04:21 +01:00
Jeremy Ruston
cd412d8ccb Update release note 2019-06-10 18:24:38 +01:00
Jeremy Ruston
18fe112da7 Extend the enlist operator to optionally not de-duplicate 2019-06-10 17:54:46 +01:00
Jeremy Ruston
37bb75f0cf Add support for = prefix for filter runs that doesn't remove duplicates 2019-06-10 17:54:20 +01:00
Jeremy Ruston
ac1d5b828d Fix regression in 7fcd2f132
Previously we saved tiddlers as .tid files using this template that explicitly excludes the "bag" field:

https://github.com/Jermolene/TiddlyWiki5/blob/master/core/templates/tid-tiddler.tid

Now we generate both .tid and .json files programmatically, and so we have to explicitly exclude the bag field
2019-06-10 17:52:26 +01:00
Jeremy Ruston
55bc6e086f Tweaks and fixes for the release note 2019-06-09 17:26:34 +01:00
Jeremy Ruston
6fdc5c8cb2 Docs: Update performance notes 2019-06-09 17:09:35 +01:00
Jeremy Ruston
7590977dd5 Update release note 2019-06-09 17:09:11 +01:00
Jeremy Ruston
1e8a56768f Update ListWidget docs
Fixes #3964
2019-06-08 17:34:06 +01:00
Jeremy Ruston
8012a3508f Ensure tiddlyspot saver works with local storage disabled
Fixes #3955
2019-06-08 16:38:13 +01:00
Jeremy Ruston
abb3c01505 Catalan Translation update 2019-06-08 13:19:41 +01:00
Jeremy Ruston
28c732d2be Improve action-createtiddler to return a draft title too 2019-06-04 12:33:01 +01:00
Jeremy Ruston
72c64013c7 Fix control panel stylesheets tab to use $:/state/... instead of $:/config/... 2019-06-03 13:28:59 +01:00
Jeremy Ruston
9c2726c530 Remove $tw.perf.log() banner under Node.js 2019-06-03 13:28:41 +01:00
Xavier Cazin
427b56039b fr-FR translations of Help on the savewikifolder and deletetiddlers commands (#3966)
* fr-FR translation of Help on the savewikifolder command

* fr-FR translation of Help on the deletetiddlers command
2019-06-02 20:49:50 +01:00
LordRatte
736ac9052d Update TiddlyDrive info on Tiddlywiki.com (#3961)
* Update TiddlyDrive info

* Accept Licence
2019-05-31 18:11:17 +01:00
twMat
6c08fec2ee Update Saving on TiddlySpot.tid (#3960)
Included mention of community created (i.e created by me) "shortcut" to set up new TW5 on TS.
2019-05-31 16:05:35 +01:00
Jeremy Ruston
147d758931 Add version tags for deletetiddlers and savewikifolders commands
@BramChen -- I added the tag to the Chinese translations, too, let me know if it is not right.
2019-05-31 08:38:34 +01:00
Bram Chen
5f6abad3c5 Update chinese translations (#3959)
* Add chinese translations for Saving/GitHub/ServerURL

* Improve simplified chinese wording

* Add chinese help text for deletetiddlers command
2019-05-31 08:36:19 +01:00
Jeremy Ruston
5b09881679 Add new deletetiddlers command 2019-05-30 16:54:57 +01:00
donmor
496610aa49 Signing the CLA for @donmor (#3957) 2019-05-30 09:42:57 +01:00
Jeremy Ruston
c80fcf19c0 More browser storage fixes
See 698733a4a
2019-05-29 09:37:48 +01:00
Jeremy Ruston
698733a4ad Fix crashes when localStorage not available
As reported by @bimlas in https://github.com/Jermolene/TiddlyWiki5/issues/3945#issuecomment-496797809
2019-05-29 09:01:11 +01:00
Jeremy Ruston
a8f70b08a8 Add indexes to the wiki store to improve performance (#3951)
* First pass at modular wiki indexes

An exploratory experiment

* Fix tests

* Faster checking for existence of index methods

We don't really need to check the type

* Use the index for the has operator

* Fix typo

* Move iterator index methods into indexer modules

Now boot.js doesn't know the core indexers

* Fix up the other iterator index functions

* Fix crash with missing index branch

* Limit the field indexer to values less than 128 characters

* Fallback to the old manual scan if the index method returns null
* Sadly, we can no longe re-use the field indexer to accelerate the `has` operator, because the index now omits tiddlers that have field values longer than the limit

Still need to make the index configuration exposed somehow

* Rearrange tests so that we can test with and without indexers

We also need to expose the list of enabled indexers as a config option

* Test the field indexer with different length fields

So that we test the indexed and non-indexed codepaths
2019-05-24 21:07:37 +01:00
Jeremy Ruston
b992b79adb Merge branch 'tiddlywiki-com' 2019-05-24 18:24:59 +01:00
Jeremy Ruston
feab75a6d1 Add support for preloading plugins by path instead of name 2019-05-24 12:06:11 +01:00
Jeremy Ruston
2f8053265e Performance: Add average filter execution time 2019-05-20 12:50:10 +01:00
Jeremy Ruston
409a297a63 Docs: Fix inaccuracies in "has" filter docs 2019-05-18 15:55:34 +01:00
Kartik Saranathan
ba0da99b17 Docs: fix typo (#3949) 2019-05-16 17:28:09 +01:00
Jeremy Ruston
634ac92ba2 Update splash screen to add new release banner
See #3935
2019-05-11 19:48:06 +01:00
Jeremy Ruston
184fd9dda8 Docs for Performance Instrumentation improvements
Left off e8d1fbba6
2019-05-11 19:28:09 +01:00
Jeremy Ruston
94d18a2f18 KaTeX: Fix bug with embedded SVGs
See https://github.com/Jermolene/TiddlyWiki5/issues/2500#issuecomment-489976530
2019-05-11 17:31:35 +01:00
Jeremy Ruston
ff85fcfe93 Fix typo from e8d1fbba6 2019-05-10 16:03:24 +01:00
Jeremy Ruston
e8d1fbba6c Performance Instrumentation: Track execution times for individual filters
Fixes #3941
2019-05-10 15:56:01 +01:00
Jeremy Ruston
7869546fef Speed up reveal widget
It turns out that the `localeCompare` function used by `compareStateText()` is very, very slow. Replacing it with a straightforward equality test makes one of my test rigs be 10x faster...

Note that this PR reverts the behaviour of match/nomatch to that before #3157. That change was not backwards compatible in that the switch to localeCompare meant that é === e, now it doesn't again.
2019-05-10 08:47:00 +01:00
Jeremy Ruston
dddfb7ce67 Merge remote-tracking branch 'origin/tiddlywiki-com' 2019-05-03 11:20:39 +01:00
Jeremy Ruston
5ae14a16ec Classic Storyview: Optimise for animation duration of zero (part 2)
See fddc5d4ee
2019-05-02 21:21:22 +01:00
Jeremy Ruston
fddc5d4ee6 Classic Storyview: Optimise for animation duration of zero (part 1)
Approximtely 50% speed improvement in tests opening a storyview with 8,000 entries.

(I've deferred the indentation adjustments until the next commit so that the git diffs are clearer)
2019-05-02 21:20:24 +01:00
Jeremy Ruston
091864ddaf Browser messaging: suppress logging
Commented out because it can be useful for debugging.
2019-05-02 20:21:58 +01:00
Jermolene
07198b9cda Update view toolbar "new here" button
Avoiding textual substitution fixes probems with tiddler titles containing double square brackets.
2019-04-23 17:54:49 +01:00
Jermolene
4401e71498 Docs: Update WebServer Parameter: csrf-disable 2019-04-23 17:53:19 +01:00
Bram Chen
df416814b1 Update chinese translations (#3917)
* Add chinese translations for Saving/GitHub/ServerURL

* Improve simplified chinese wording
2019-04-16 15:56:05 +01:00
Jermolene
b7e0930122 savewikifolder: Fix custom plugin fields
We need to carry across all plugin fields into the tiddlywiki.info file
2019-04-16 11:59:34 +01:00
Jermolene
0a5c826816 GitHub Saver: Fix ServerURL name 2019-04-16 10:15:58 +01:00
Jermolene
25c0ebb523 GitHub Saver: Make server URL configurable 2019-04-15 21:30:59 +01:00
Jermolene
b32a5aa9af GitHub saver: Fix problem with saving to a non-existent directory 2019-04-15 21:08:04 +01:00
Jermolene
232eba2f7d Http utilities: add xhr object to callback 2019-04-15 21:07:23 +01:00
Talha Mansoor
04a4a0f92e Add support of language aliases in highlight.js plugin (#3898)
listLanguages() returns a list of supported languages. It does not
return language aliases.

highlight.js has extensive support of language aliases which can be 
viewed here

https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html#language-names-and-aliases

But because of using listLanguages(), TW does not take advantage of 
alias.

getLanguage() method on the other hand supports aliases.

https://highlightjs.readthedocs.io/en/latest/api.html#getlanguage-name

To summarize, now user can use javascript, js or jsx for the code block. getLanguage() will return an object which means highlight.js supports
this language.
2019-04-15 18:45:45 +01:00
Jermolene
0513837228 Ensure tiddler.getFieldStringBlock uses a deterministic ordering
Makes diffs easier to track
2019-04-14 14:23:49 +01:00
Bram Chen
58cdbbf865 Add chinese help texts for the new savewikifolder command (#3911) 2019-04-14 14:14:20 +01:00
Jermolene
373afd72c8 Add savewikifolder command
Makes it much easier to convert a TiddlyWiki HTML file into a full wiki folder.
2019-04-14 12:04:00 +01:00
Jermolene
7fcd2f132e Filesystemadaptor: Improve handling of JSON files
Fixes #3875

* Use .json files (instead of .tid) for any tiddler whose fields contain values that can't be stored as a .tid file
* Save application/json tiddlers as .json files
* Refactor most of the file handling as re-usable utilities
2019-04-13 14:59:44 +01:00
Jermolene
edd3156430 Improve loading/importing of JSON files
First part of fix for #3875

The idea is to do a better of job of distinguishing JSON files that contain tiddlers versus those that contain plain blobs of JSON that should be stored as a single application/json tiddler.

Under Node.js, .json files with an accompanying metafile are always treated as a JSON blob. Without a meta file, those that appear to not contain valid tiddlers are returned as a JSON blob, otherwise the tiddlers within the file are imported.

In the browser, we don't have .meta files so we rely on the valid tiddler check.
2019-04-13 14:47:27 +01:00
Jermolene
8c72a28f0c Add ability to load plugins via the command line
Fixes #3907
2019-04-12 18:09:16 +01:00
00SS
61db047870 Docs: Update Headings in WikiText.tid (#3908)
Changed the example to use the **wikitext-example** macro and pointed out that wikitext only works till `<h6>`
2019-04-12 11:44:58 +01:00
Bimba Laszlo
9b72eabd1a Fix crash in GitHub saver (#3905)
If the path was not specified, RSOD error occurred when we wanted to
download the wiki:

  Uncaught TypeError: Cannot read property 'substring' of undefined
2019-04-11 08:21:55 +01:00
00SS
12b08b7abf Docs: Update ListMacro.tid (#3754)
Addressing 2 issues.
1) If the caption field of a tiddler is empty
2) A note addressing no input titles resulting in a Filter Run as brought up on [Google Groups](https://groups.google.com/forum/?hl=en#!topic/tiddlywikidev/VNl_cwu_rIE)
2019-04-10 11:22:12 +01:00
00SS
53124e1d82 DOCS: Update: TiddlyWiki5 Squared by Iannis Zannos.tid (#3773)
* Update TiddlyWiki5 Squared by Iannis Zannos.tid

Link no longer works. Changed it to the github page.

* Update TiddlyWiki5 Squared by Iannis Zannos.tid

Fixed URL linking to the "ur" field
2019-04-10 11:17:54 +01:00
00SS
4ecc99c9d5 DOCS: Correction: How to change the sort order of sub-branches in a TOC macro.tid (#3783)
Changed line
`<<toc-selective-expandable  "TableOfContents" "sort{fuzzy}">>`
to
`<<toc-selective-expandable  "TableOfContents" "sort{!!fuzzy}">>`

Tested that this is the correct code.
2019-04-10 11:17:07 +01:00
Bram Chen
61d87875ff Add chinese translations for configuration of GitHub saver (#3899) 2019-04-09 08:13:14 +01:00
Jermolene
73703da2e7 Minify base64-utif8 module
Minified with https://skalman.github.io/UglifyJS-online/
2019-04-08 21:37:32 +01:00
Jermolene
aa5eaa98fc Add a GitHub saver
Fixes #3890

I think it would be useful to have a simple tutorial for setting up saving via GitHub pages.
2019-04-08 21:08:58 +01:00
Simon Huber
662ae91067 Bugfix: reveal widget regression! (#3897) 2019-04-06 10:27:37 +01:00
Jermolene
d5fa68b46a Simplify PageTemplate
We no longer need to mess around with the currentTiddler variable to be able to access to the "name" field of the current language
2019-04-05 09:11:54 +01:00
Jermolene
6e81122fa3 Restore exclude parameter for selective TOC macros
Reverting 94607aa9cd
2019-03-30 12:10:42 +00:00
Jermolene
6575db07c7 Docs typo 2019-03-30 12:06:46 +00:00
Jermolene
f4d8c90191 Add missing "from-version" tags to new features 2019-03-30 10:55:22 +00:00
Jermolene
37ea659bf0 Refactor the dumpvariables macro as wikitext
Making it easier to customise
2019-03-30 10:52:49 +00:00
Jermolene
754c1251a9 Add new "variables" and "getvariables" operators 2019-03-30 10:52:28 +00:00
Jermolene
1c436cbbf3 DynaviewDemo: Rename tiddler-list field to story-list 2019-03-28 10:58:24 +00:00
Jermolene
94607aa9cd TOC macros: Remove redundant recursion protection
As discussed in #3881, it isn't really needed when user interaction is required to open child nodes.
2019-03-27 15:00:13 +00:00
Jermolene
62477c9fbb TOC Macros: fix recursion regression
Fixes #3881
2019-03-27 14:59:38 +00:00
jed
b1edcdb757 Add unusedtitle macro (#3880)
* Add uniquetitle macro

This macro is a wrapper on the $tw.wiki.generateNewTitle function to return a unique name, it has been requested multiple times in the forums.

* Add documentation tiddler for uniquetitle macro

* Add uniquetitle macro examples

* Change name from uniquetitle to unusedtitle for clarity

The title isn't unique, just not currently used in the wiki.

* Update uniquetitle to unusedtitle

* Change uniquetitle to unusedtitle

* Fix a typo
2019-03-26 21:57:58 +00:00
Brooks Boyd
d51a89135d Add signature for MidnightDesign, LLC to CLA Entity agreement (#3877) 2019-03-22 18:08:36 +00:00
Jermolene
d38b42f7c7 AWS Plugin: Don't error when no files to load 2019-03-22 17:27:20 +00:00
Jermolene
fffd0ee9e1 AWS: Add command for setting credentials profile 2019-03-22 09:20:25 +00:00
Jermolene
9f0d726f7d Dynaview: Simplify visibility tracking logic 2019-03-21 12:56:26 +00:00
Jermolene
7709192cc8 DynaView: Simplify visibility processing
And add a table of contents to the demo
2019-03-20 18:24:29 +00:00
Jermolene
02ae8969b2 Reveal widget: faulty logic for default handling
@BurningTreeC I think this might have been a typo in your recent refactorings; if you look back at an old version such as c0c1b557eb/core/modules/widgets/reveal.js then there is no sign of this fallback.

Fixes #3874
2019-03-20 16:50:34 +00:00
Simon Huber
a01dc6cb3d Docs: Typo 2019-03-18 12:40:15 +00:00
Simon Huber
f99fb4f9f5 Fix typos in WidgetSubclassingMechanism (#3870) 2019-03-17 18:13:13 +00:00
Jermolene
e52a616891 Add support for widget subclassing
Fixes #3865
2019-03-17 12:25:15 +00:00
Jermolene
05243a6c48 Docs: Add performance instrumentation docs 2019-03-16 16:39:08 +00:00
Jermolene
a89991cc46 Dynaview: Fix crash 2019-03-16 13:25:45 +00:00
Jermolene
f4fe254038 Clarify help for render command
The ordering of the bullet lists didn't match the order of the parameters
2019-03-16 13:25:34 +00:00
Jermolene
9f630b5829 v5.1.20 new release banner 2019-03-16 13:24:58 +00:00
Xavier Cazin
c904aeb05f fr-FR translation updates (#3856)
* update/improve translations of a few fr-FR strings

* update/add fr-FR for load and listen command docs
2019-03-13 09:34:44 +00:00
Simon Huber
efd7aa3a53 Make codemirror use tiddler-editor-border palette color (#3819) 2019-03-12 16:41:22 +00:00
Simon Huber
a4b24670f6 Update highlight.js to latest release v9.15.6 (#3635)
* update highlight.js to latest release v9.13.1

* update to v9.13.1 default.css

does the current default.css include adjustments for the different languages?

* Update highlight.pack.js

* Update readme.tid

* update highlight.pack to 9.15.6

* update version number + included languages
2019-03-12 12:04:38 +00:00
Simon Huber
2e0b2c8045 Palette manager: sort palettes by name, not description (#3853)
... currently it appears as if there was no sorting logic
2019-03-12 09:48:34 +00:00
Simon Huber
d068cb3625 Fix palette: missing type application/x-tiddler-dictionary (#3852) 2019-03-11 10:59:34 +00:00
Simon Huber
0d8c749f37 Rename SpartanDay to SpartanDay.tid (#3851)
* Rename SpartanDay to SpartanDay.tid

* Update SpartanDay.tid
2019-03-11 09:55:49 +00:00
Simon Huber
0303b7871b Rename SpartanNight to SpartanNight.tid (#3850) 2019-03-11 09:55:14 +00:00
Simon Huber
44d1a00bb0 Fix "cannot read substr of undefined" in removeprefix filter (#3826) 2019-03-11 09:38:15 +00:00
Simon Huber
784db30614 Fix removesuffix filter when title is undefined (#3827) 2019-03-11 09:37:49 +00:00
jdjdjdjdjdjd
26c6d6035e Add Spartan Day palette (#3846)
Ugh, hehe.. this is my first try at this. Hopefully got it right...
2019-03-11 09:25:54 +00:00
jdjdjdjdjdjd
b82cf3d070 Add Spartan Night palette (#3847)
* add Spartan Night palette

This and Spartan Day go hand in hand I feel like.

* Found a typo
2019-03-11 09:25:37 +00:00
jdjdjdjdjdjd
f07ffb2b41 Add @jdjdjdjdjdjd to the CLA (#3849) 2019-03-11 09:25:16 +00:00
Simon Huber
c9b16d88f3 Fix: reveal widget prevent undefined state (#3848)
the state didn't fall back to the default when there was no data-item to extract for a stateIndex

see the google group for a bug report: https://groups.google.com/forum/#!topic/TiddlyWiki/3jiFpayAIRc
2019-03-11 09:04:17 +00:00
Jermolene
256321cd42 Merge branch 'tiddlywiki-com' 2019-03-10 21:17:40 +00:00
Simon Huber
71aed78e2e Fix sticky draggable-placeholders in list macros (firefox) (#3823)
* fix draggable lists for firefox (sticky placeholders)

ff doesn't like whitespace and also those &nbsp; entities make problems

placeholder is styled in vanilla base

* tc-droppable-placeholder styles for tagged-draggable ...

and links-draggable lists

* make it beautiful
2019-03-10 20:05:18 +00:00
Simon Huber
0ab29e2c09 Community Palettes: Twilight by Thomas Elmiger (#3845) 2019-03-10 17:37:05 +00:00
Simon Huber
648c7ccd1f Add documentation for edit-text tabindex attribute (#3833)
* add tabindex attr to edit-text documentation

* add tabindex to edit widget documentation
2019-03-09 17:45:59 +00:00
Simon Huber
2dc70682cd Fix for SolarizedLight palette, missing tag and type (#3844) 2019-03-09 17:37:15 +00:00
Simon Huber
441011885c Fix: tm-full-screen when event.event undefined (#3835) 2019-03-09 17:09:34 +00:00
Simon Huber
449fd02cda Update Nord palette + solarized light palette (#3828)
* update Nord palette

* small change

* port solarized light palette

* Update SolarizedLight.tid
2019-03-09 17:08:58 +00:00
Joshua Fontany
a7dc8b5583 Signing the CLA (#3838)
* Signing the CLA

* added json mangler resource
2019-03-09 16:39:13 +00:00
Bram Chen
7478ba9165 Update Chinese languages (#3837)
* Add initial translation for zh-TW depends on zh-Hant

* Add initial translation for zh-CN depends on zh-Hans

* Add initial translation for zh-HK depends on zh-Hant

* Update chinese help texts for load command

    * for the new optional "noerror" parameter
2019-03-09 13:17:54 +00:00
Jermolene
12630d4a91 Provide an option for the load command to not error if no tiddlers are found 2019-03-08 16:43:04 +00:00
Jermolene
07635d7b3e Full edition: Fix plugin display 2019-03-07 18:46:38 +00:00
Jermolene
e61c71961b Fix default language
It is supposed to be the built-in core language, en-GB
2019-03-07 18:46:24 +00:00
Jermolene
f047e7cbf5 Add example startup action to switch to browser language 2019-03-07 18:45:52 +00:00
Jermolene
2c2d03f7a7 Refactor startup action execution so that they can switch language/theme 2019-03-07 18:43:23 +00:00
Jermolene
c036c22826 Add $:/info/browser/language to the info mechanism 2019-03-07 18:42:49 +00:00
Jermolene
6de13e2f60 Update release note 2019-03-05 22:22:55 +00:00
Jermolene
0c2689dd78 SaverHandler: Don't generate file if autosave disabled 2019-03-05 15:43:14 +00:00
Jermolene
a9e595c3f6 Dynaview: Add support for saving/restoring scroll position from local storage 2019-03-04 16:59:39 +00:00
Jermolene
348a0bc8bc Core: Allow startup navigation to be suppressed
Plugins can suppress it so that they can provide their own startup scroll handling
2019-03-04 16:59:15 +00:00
Jermolene
477c41f843 Add tooltip attribute to select widget 2019-03-04 12:24:16 +00:00
Simon Huber
0b1ce30a04 Add outline color to button, textarea, input (#3822)
* add outline-color to button, textarea, input

* add select elements, move to top

* use primary color
2019-03-03 21:22:13 +00:00
Simon Huber
e8b50df4a6 Porting the Nord palette (#3820)
https://github.com/arcticicestudio/nord

this palette is very popular, available for highlight.js, codemirror, all kinds of desktop/terminal applications ...
would be great to have it in tiddlywiki, too

this is a draft PR, certain things needs to be improved, but looks very good in tiddlywiki
2019-03-03 21:09:42 +00:00
Jermolene
2104017249 Browser-storage: Only save state tiddlers by default
And add it back to the prerelease now that it's a bit safer
2019-03-03 17:16:35 +00:00
Jeremy Ruston
148c1a0355 Clarify that filter operator brackets cannot be nested 2019-03-03 14:32:26 +00:00
Jermolene
dd4305d520 Browser-storage: Only delete our own items
We should only delete our own items because browsers share local storage with all file:// URIs
2019-03-03 11:30:14 +00:00
Simon Huber
638eb53429 Add tabindex attributes to edit templates (#3758)
* add tabindex attribute to editor-body edit-template

* add tabindex attr to fields edit-template

* add tabIndex variable to tags edit-template

* add tabindex attr to title edit-template

* add tabindex attr to type edit-template

* add tabindex attr to canonical-uri input

* add tabindex attr (as variable tabIndex) to tag-picker macro
2019-03-02 19:04:27 +01:00
Simon Huber
b6e2985ac6 Fix typo in edit-shortcut widget refresh - missing focus attr (#3815)
* fix edit-shortcut widget refresh - missing focus attr

* + typo fix. NOW it works
2019-03-02 18:16:55 +01:00
Simon Huber
87eab62b7e Make the keyboard-shortcut input focus automatically (#3776)
* add focus capability to edit-shortcut widget

* focus the keyboard-shortcut inputs in the control panel

... there's no other reason why it could have been opened other than just pressing a shorcut ...

... saves the mouseclick
2019-03-02 17:25:49 +01:00
Jermolene
fb0713ae78 Comments plugin: Fix extraneous paragraph in above story area
Fixes #3813
2019-03-02 16:18:50 +00:00
Simon Huber
16bb474fef Partial fix for the sticky dropzone on firefox (#3809)
in my tests listening for the dragend event and removing the tc-dragover class in that case removes the `tc-dragover` every time it should ...

without this, firefox often doesn't remove it and the green bar sticks at the top

investigating now if the droppable widget has a similar problem
2019-03-02 16:13:36 +01:00
Simon Huber
77e6f5c0e3 Fix for "Open" tab placeholders in FireFox (#3806)
* fix for "Open" tab placeholders in FireFox

this PR fixes the placeholders in FireFox not being removed on drag-leave from time to time

it consists of 2 mods where apparently both are needed:

- creating a `droppable-item` macro where whitespace is trimmed. that macro contains the droppable and inserts the placeholders
- removing the `&nbsp;` entity in favor of an inline style `height:2em;` on the placeholder div, putting it in a macro where whitespace can be trimmed, too

I'm investigating if there's a similar fix for the top page dropzone

* remove unnecessary whitespace trim, add css classes

`.tc-sidebar-tab-open-item { position: relative; }`

`.tc-sidebar-tab-open .tc-droppable-placeholer {  line-height:2em; height:2em; } `

* replace times entity with close-button

* add sidebar-open-tab styles
2019-03-02 14:54:23 +01:00
Simon Huber
41e338dc41 Add smartIndent to codemirror (#3810)
* add smartIndent config to codemirror

* add indentWithTabs config to codemirror

* make default tabSize same value as indentUnit

* make tab and enter do smart indentation
2019-03-02 14:46:10 +01:00
Jermolene
a6875df7ef Browser-storage: Add enable/disable and clear button 2019-03-01 22:06:14 +00:00
Jermolene
655fc31cee Server: Avoid displaying "undefined" for missing path prefix 2019-03-01 18:28:51 +00:00
Jermolene
18c00c2ef0 Don't allow $:/Import tiddler to be imported 2019-03-01 17:39:42 +00:00
Jermolene
b862348b06 Fix !is[variable] operator
Fixes #3804
2019-02-28 11:54:04 +00:00
Jermolene
36e76429b1 Add is[variable] filter
See discussion here https://groups.google.com/d/topic/tiddlywiki/4rEuAWc4EpM/discussion
2019-02-25 13:08:22 +00:00
Bimba Laszlo
181897514f Add links to plugins made by @bimlas (#3778) 2019-02-19 12:33:31 +01:00
Jermolene
810033bd71 Server: include path-prefix in display URL 2019-02-12 18:32:00 +00:00
Jermolene
6aab4d5524 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2019-02-12 12:14:58 +00:00
Jermolene
72f2a94251 Ensure things work when $:/config/AnimationDuration is blank or not a valid number
Thanks @jdjdjdjdjdjd
2019-02-12 12:14:55 +00:00
Bram Chen
6dedcd958d Update chinese translations (#3762)
* Add advanced search canned filter for "tiddlers modified this session"
2019-02-10 09:24:30 +00:00
Simon Huber
f97d18bb6e Adding optional tabindex attr to simple, framed and cm engines (#3756)
* add optional tabindex attribute to factory.js

* add changedAttributes.tabindex to refresh mechanic

* add optional tabindex attribute to edit widget

* remove some extra whitespace

* remove some trailing whitespace

* add optional tabindex attribute to simple engine

* add optional tabindex attribute to framed engine

* add optional tabindex attribute to cm engine
2019-02-08 16:11:39 +00:00
Jermolene
9d7d3fefa0 Split operator: Remove empty strings when splitting
See the discussion on 9b2d527; thanks @kookma
2019-02-08 15:59:07 +00:00
Jermolene
6ff7a7d261 BrowserStorage: Make sure tiddlers loaded from local storage mark wiki as dirty
Thanks @xcazin
2019-02-08 15:38:23 +00:00
Jermolene
2710fae71d BrowserStorage: Use path to make unique item names for non-file URIs
Previously, we were only using the path to disambiguate files on a file:// URI. That meant that all wikis on tiddlywiki.com was sharing the same pool of local storage...
2019-02-08 15:19:20 +00:00
Jermolene
0e6855eba8 Add advanced search canned filter for "tiddlers modified this session" 2019-02-08 11:07:06 +00:00
Jermolene
8b04cfd4d5 Fix problem with extraneous raw markup in saved files
Previously, raw markup tiddlers were being saved even if they weren't included in the saveTiddlerFilter. This meant that, for example, using "save empty" button in GettingStarted would include the splash screen markup tiddler.
2019-02-07 18:30:17 +00:00
Jermolene
2c37c25c28 BrowserStorage: Add startup log and fix save filter
The previous filter was rejecting tiddlers that needed to be deleted.
2019-02-07 17:59:55 +00:00
Jermolene
adb07ccba0 Add a test for all filter with blank operand
Actually quite a useful way to get all of the tiddlers that were passed into the filter.
2019-02-07 17:59:12 +00:00
Jermolene
b64216cfa7 BrowserStorage: Add another warning 2019-02-07 15:15:05 +00:00
Jermolene
9601e570af Fix further typo in cdeabba 2019-02-07 15:07:21 +00:00
Jermolene
5c5628e10b Fix typo in cdeabba 2019-02-07 15:00:39 +00:00
Jermolene
cdeabbaf56 Remove browser-storage plugin from main prerelease
But make sure it's in the "full" edition.
2019-02-07 14:53:59 +00:00
Jermolene
5577f7a4fe BrowserStorage: Add support for a custom quota exceeded message 2019-02-07 14:46:23 +00:00
Jermolene
51b4f63c5c BrowserStorage: Add a filter to determine which tiddlers are saved 2019-02-07 14:35:25 +00:00
Jermolene
7df58a6813 Fixed bug with length operator
Thanks @BurningTreeC
2019-02-07 12:56:12 +00:00
Jermolene
158f96a207 Fix split operator testcase 2019-02-07 12:48:23 +00:00
Jermolene
dc29acd656 Fixed bug with split operator 2019-02-07 12:45:07 +00:00
Jermolene
af40485e37 Docs updates 2019-02-07 11:19:06 +00:00
Jermolene
9b2d52716a Add new string operators: length, join, split, concat etc. 2019-02-07 11:18:53 +00:00
Jermolene
64b665e706 More maths operators 2019-02-07 11:18:32 +00:00
Jermolene
f709641967 Upsdate release note 2019-02-06 18:22:29 +00:00
Jermolene
94f143bf64 Autofocus advanced search text edit input 2019-02-06 17:53:00 +00:00
Bram Chen
22fe4451c8 Update Chinese translations (#3735)
* Update chinese translations
* Add field descriptions for toc-link
* Add help texts for gzip parameter of listen command

* Add missing chinese warning message of "Upgrader/System"
2019-02-06 15:10:01 +00:00
Jermolene
1c982fba2d Fix sticky titles dropdown overlap
Fixes #3572
2019-02-06 14:20:34 +00:00
Jermolene
0ea00b59b0 Add numeric maths filter operators
There are other ways we could add maths to TW5 (including @EvanBalster's awesome https://github.com/EvanBalster/TiddlyWikiFormula) but the approach here has the merit of simplicity because it reuses the existing filter evaluation mechanism. That means that it's not ordinary "2+2" maths, it's a unique list processing language...

Docs to come

Fixes #254
2019-02-06 14:19:55 +00:00
Simon Huber
5e9fc661a9 Tentative: Remove conditional from wrap-selection text-operation (#3749)
As per the discussion in #3749, the original purpose of the removed condition is unknown, and so we cannot be certain that removing it is safe, but doing so seems the best way of discovering more...
2019-02-05 17:18:20 +00:00
Jermolene
e5f3301c1c Merge branch 'pr/3634' 2019-02-05 16:21:06 +00:00
Jermolene
b08a7e3f04 Wording tweaks 2019-02-05 16:20:44 +00:00
Jermolene
44c66b98a9 Add default prefix for tm-fold-all-tiddlers message 2019-02-05 16:01:24 +00:00
bimlas
ce256102a7 Suggested slightly "better English" wording for the warning 2019-02-04 22:09:31 +01:00
Jermolene
6f5f9ca2fb Browser-storage: Handle quota exceeded error 2019-02-03 17:29:32 +00:00
Jermolene
e31c5563ff BrowserStorage: A new plugin to save tiddlers to local storage
Experimental at this point.
2019-02-03 12:51:15 +00:00
Jermolene
70f5dff81e Add a boot hook for modifying the tiddler store 2019-02-03 12:01:57 +00:00
Jermolene
689e172e79 Move some utility functions into boot.js
So that they are available to code running earlier in the boot process
2019-02-03 12:01:38 +00:00
Diego Mesa
5ffcd7e5da When renaming a tiddler only show references if there are any (#3654)
* fixing 3648 - now non updated references are shown only when non zero

Signed-off-by: Diego Mesa <diego898@gmail.com>

* change to list widget

As per @jermolene comments I changed to the list widget

* Putting back the accidently removed title (will no longer use github interface).

Signed-off-by: Diego Mesa <diego898@gmail.com>

* making sure I dont overwrite currentTiddler

Signed-off-by: Diego Mesa <diego898@gmail.com>
2019-02-01 17:33:39 +00:00
Jermolene
5a37a84a54 Enhance plugin library search to all fields
Fixes #3741
2019-02-01 17:26:20 +00:00
Simon Huber
4228c3f9cc Fix bug in reveal widget when stateTitle tiddler is missing (#3745)
in the group this bug was reported

when the stateTitle is missing it tries to get a field string of an undefined tiddler ...
2019-02-01 16:53:29 +00:00
Jermolene
a4eb139f99 Innerwiki: Add support for draggable anchors 2019-02-01 10:43:42 +00:00
Jermolene
7bc1458749 Boot: Enhance domMaker to support namespaces and styles 2019-02-01 10:43:14 +00:00
Jermolene
92b8368115 Innerwiki: Improve examples 2019-01-30 16:58:04 +00:00
Jermolene
c4bb2110e3 Merge branch 'tiddlywiki-com' 2019-01-29 17:40:54 +00:00
Jermolene
f7d938e4bc Innerwiki: improve wiki state examples 2019-01-29 17:40:40 +00:00
Jermolene
8defe41458 Dynaview demo: Avoid hiding tiddlers that scroll out of view
We were getting some problems on Firefox/Safari whereby tiddlers would flicker between visible and invisible, spinning up my laptop fan.
2019-01-29 11:38:25 +00:00
Jermolene
6753a1485a Dynaview: turn off scroll anchoring 2019-01-29 11:37:26 +00:00
Jermolene
7f97e3080c Innerwiki: make sure we can click through the svg overlays 2019-01-28 19:32:35 +00:00
Jermolene
b6d901f888 Innerwiki: Add support for SVG overlays 2019-01-28 18:21:24 +00:00
00SS
90b7961629 Update TiddlerFields.tid (#3733)
#3680 Was getting too complicated for me so opened a new PR
2019-01-27 19:29:13 +00:00
00SS
c5aa855ce6 Docs: add example to CountWidget.tid (#3732)
* Update CountWidget.tid

Just a simple example added.

* Update CountWidget.tid

Made a slight addition to conform with the same style used in the Examples section of the $text widget: TextWidget.tid

* Update CountWidget.tid

Modified to use the Documentation display macro:
`<<wikitext-example-without-html>>`
2019-01-27 19:28:42 +00:00
admls
036ea400c5 Signing the CLA (#3734) 2019-01-27 19:27:45 +00:00
Moritz Ulrich
049244e8a8 WebServer: Enable deflate and gzip compression (#3677)
* get-index: Enable deflate and gzip compression

* Spaces -> Tabs

* listen: Add optional `gzip=yes` parameter (defaults to "no")

* get-index: Add comment explaining the usage of `zlib.*Sync` instead of async.
2019-01-27 16:23:24 +00:00
JesseWeinstein
95aca11719 Signing the CLA (#3695) 2019-01-27 14:53:58 +00:00
00SS
02fbae4200 Update field description lingo (#3698)
Made this new PR for for the master branch, and closed #3697 
This PR is needed for text shown in the update PR #3680 which is for the tiddlywiki-com branch
2019-01-27 14:52:29 +00:00
Jeremy Ruston
fc3227831f Docs: fix HTTPS command typos
Fixes #3713
2019-01-27 14:35:58 +00:00
00SS
72ec4d05e4 Update Editor toolbar.tid (#3720)
Small corrections
2019-01-27 14:31:39 +00:00
00SS
07aeaaa1a4 Docs: Update Hidden Setting SaveWikiButton Filename.tid (#3721)
Rewording to make clearer
2019-01-27 14:29:46 +00:00
Marxsal
790d606885 Docs: fixing header typo (#3722) 2019-01-27 14:28:33 +00:00
Jermolene
c6f1fb7627 Innerwiki demo: Adjust default tiddlers 2019-01-27 12:43:10 +00:00
Jermolene
44816ea0da Fix URL for innerwiki demo 2019-01-27 11:07:51 +00:00
Jermolene
ca7b62a5f6 Introduce "innerwiki" plugin
From the readme:

This plugin enables TiddlyWiki to embed a modified copy of itself (an "innerwiki"). The primary motivation is to be able to produce screenshot illustrations that are automatically up-to-date with the appearance of TiddlyWiki as it changes over time, or to produce the same screenshot in different languages
2019-01-27 10:57:56 +00:00
Jermolene
353821f442 TagManager: Remove extraneous caption field
Fixes #3727
2019-01-26 17:38:46 +00:00
Jermolene
4c1e3aa8d6 Merge branch 'tiddlywiki-com' 2019-01-22 11:52:38 +00:00
Jermolene
952826e0fa Dynaview: cleaning up
It turns out that we don't need to disable any scroll anchoring done by the browser as our implementation of scroll anchoring will adapt itself.

Also removing an unneeded paragraph tag from the view template.
2019-01-18 17:56:07 +00:00
Marxsal
e6aaafbc8d Grammar and tense fixes. (#3708) 2019-01-18 17:09:27 +00:00
Jermolene
79eb6a5ec1 Docs typo 2019-01-18 09:19:58 +00:00
Jermolene
7c0528340d Docs: Clarify use of "actionTiddler" variable 2019-01-18 08:57:08 +00:00
Jermolene
273768da1d Docs updates for TW5's new branch development model 2019-01-15 17:39:45 +00:00
Jermolene
52a30be7c6 Remove confusing reference to "global tiddlers" 2019-01-15 16:28:52 +00:00
00SS
479726c46e Update TextWidget.tid (#3696)
Used Example display method of <<wikitext-example-without-html>> and added another example.
2019-01-15 16:14:50 +00:00
Ben Webber
3afb251b3a Add en-US localization (#3689) 2019-01-14 09:44:04 +00:00
Johannes Löthberg
1f829dd5a8 Fix typo password -> username (#3686) 2019-01-14 09:42:09 +00:00
Simon Huber
95dbdff08a Fix bug with event.event.target being undefined (#3683) 2019-01-14 09:41:19 +00:00
dnebauer
bfd09133de Add howto for changing highlight languages (#3674)
* Create howto.tid

Howto explains customising the languages supported by the highlight plugin. This involves:

* Using the highlight.js download page to get a zip archive containing the files for a highlight.js server which supports a set of languages selected by the user
* Replacing the highlight plugin's `highlight.pack.js` file with the `highlight.pack.js` file from the downloaded archive

* Update plugin.info

Add howto.
2019-01-14 09:32:58 +00:00
dnebauer
dc74fc4306 Update url of highlight.js github project (#3672)
Github repo of the highlight.js project has changed from `github.com/isagalaev/highlight.js` to `github.com/highlightjs/highlight.js`.
2019-01-14 09:31:29 +00:00
Bram Chen
557053ab35 Fix outdated external-js template. (#3657)
Fix outdated external-js template.

Add the missing raw markup sections:
  * the top of the head
  * the top of the body
  * the bottom of the body
2019-01-14 09:18:57 +00:00
Ben Webber
317d75171c Sign CLA (#3690) 2019-01-14 09:17:20 +00:00
Johannes Löthberg
0e568fe69a Signing the CLA (#3687) 2019-01-14 09:16:00 +00:00
Moritz Ulrich
e2fe40a282 Sign the CLA (#3678) 2019-01-14 09:14:22 +00:00
dnebauer
193fb32423 Signing the CLA (#3671) 2019-01-14 09:11:53 +00:00
Jermolene
e14e69bedc DynaView plugin: add optional scroll position preservation 2019-01-11 17:50:52 +00:00
Jermolene
af9f90e8cd Merge branch 'master' into tiddlywiki-com 2019-01-08 15:23:13 +00:00
Jermolene
b899563971 CI: Fix repo for rebuilding tiddlywiki-com 2019-01-08 14:58:59 +00:00
00SS
d0afbe50a1 Update Plugins.tid (#3688)
In response to the two Jeremy Ruston posts at: https://groups.google.com/forum/#!topic/tiddlywiki/aPjljLW1yHE/discussion
2019-01-08 14:21:06 +00:00
00SS
0aac98f361 Signing the CLA (#3631)
* Signing the CLA

* Update cla-individual.md

I have edited the file to remove my "name." A real name was required for signing, which I did, and it is now in record. I would prefer the name not be on the TW.com website.
2019-01-08 14:19:51 +00:00
Jermolene
fa638b8b5b CI: Enable continuous integration
Going live!
2019-01-08 14:02:46 +00:00
Jermolene
4d5a79acb8 CI: Add branch to travis commit messages 2019-01-08 13:46:18 +00:00
Jermolene
fcfdb0632b CI: Trigger build of "tiddlywiki-com" branch 2019-01-08 13:27:08 +00:00
Jermolene
d14d7f0168 CI: Remove non-functional attempt to set build timezone
And also trigger a build for testing
2019-01-08 11:33:45 +00:00
Jermolene
83bea2a270 CI: Another attempt to fix the timezone 2019-01-08 11:16:31 +00:00
Jermolene
2b8efdc3ea CI: Fix building of test.html 2019-01-08 11:00:14 +00:00
Jermolene
27d0b2b491 CI: Try to fix the timezone of the build
To match the timezone of my development machine used for previous builds
2019-01-08 10:47:56 +00:00
Jermolene
824930682a CI: Fix plugin library version and build test.html 2019-01-08 10:34:50 +00:00
Jermolene
d8104e2c41 CI: Add timezone to datestamps 2019-01-08 10:01:23 +00:00
Jermolene
06f1f1a532 CI: Make sure we can see commit error messages 2019-01-07 21:44:07 +00:00
Jermolene
6121c0b5a7 CI: Fix date format 2019-01-07 21:34:30 +00:00
Jermolene
2c5b1c4a8c CI: Remove extraneous log information 2019-01-07 21:31:43 +00:00
Jermolene
3d687a7935 CI: Fix switched tiddlywiki versions 2019-01-07 21:30:58 +00:00
Jermolene
5d20a54713 CI: Figure out why master is building with the wrong version number 2019-01-07 21:27:05 +00:00
Jermolene
14623d33d2 CI: Fixes
Things are starting to work now...

* Now we extract the version number from package.json to use in making the plugin library
* We start building the whole site (eek, going to be slow)
2019-01-07 20:07:32 +00:00
Jermolene
37b335a136 CI: Try to quieten the commits 2019-01-07 18:48:40 +00:00
Jermolene
d5a25c9a96 CI: Start building properly 2019-01-07 18:40:22 +00:00
Jermolene
6c48c24332 CI: Include the date in the build details 2019-01-07 17:32:46 +00:00
Jermolene
86e27d64f2 CI: Fix up getting the git branch details into the build 2019-01-07 17:27:18 +00:00
Jermolene
decbe33f1f CI: More tweaking git commands... 2019-01-07 17:08:25 +00:00
Jermolene
8205893af9 CI: Further attempts to fix up the git integration 2019-01-07 17:01:12 +00:00
Jermolene
75158c0366 CI: Fixing up the Git integration 2019-01-07 16:51:06 +00:00
Jermolene
a2d4239db0 CI: Pull scripts out into files
Still trying to get the github integration working
2019-01-07 16:42:30 +00:00
Jermolene
1d9c932e16 CI: Attempt to pull pages branch from GitHub before the build, and push afterwards
Using a testing repository for now
2019-01-07 16:29:42 +00:00
Jermolene
58f7e7bd85 CI: Fixing getting the build details into a file 2019-01-07 11:40:52 +00:00
Jermolene
8f54231d62 CI: Start to get the build details into the build 2019-01-07 11:21:10 +00:00
Jermolene
97f7f8f111 CI: Doh! A simpler way to get the branch name 2019-01-07 10:44:19 +00:00
Jermolene
4e0b03b19f CI: Fix git branch detection
The old code was returning "HEAD" where we really want "master"
2019-01-07 10:38:48 +00:00
Jermolene
097b0e2d4a CI: Further attempts to pass Git details to our build script 2019-01-07 10:31:56 +00:00
Jermolene
87f077314b CI: Now try passing some details about the current git commit 2019-01-06 21:56:32 +00:00
Jermolene
7a07c84eac CI: Still trying to pass an environment variable 2019-01-06 21:49:20 +00:00
Jermolene
512d5662cc CI: Another attempt to fix passing an environment variable to a script 2019-01-06 21:41:36 +00:00
Jermolene
32974eebdb CI: Still trying to pass an environment variable to our build script 2019-01-06 21:14:32 +00:00
Jermolene
eca5df9f01 CI: Fixing setting up job-specific environment variables 2019-01-06 21:08:31 +00:00
Jermolene
c42eba3308 CI: Pass environment variable to the build job 2019-01-06 19:08:23 +00:00
Jermolene
77d286213f CI: Fix another yml problem 2019-01-05 18:35:56 +00:00
Jermolene
da864e23d6 CI: Fix YAML errors
I don't understand YAML
2019-01-05 12:10:55 +00:00
Jermolene
d58bc33df4 CI: Investigate conditional stages
For "master" we need to rebuild the prerelease; for "tiddlywiki-com" we need to rebuild the main release using the latest release. I want to have as much of the travis specific build logic expressed in travis.yml as possible, hence having to figure out Travis's syntax rather than doing everything in a script that tests the $TRAVIS_BRANCH environment variable...
2019-01-05 11:59:16 +00:00
Jermolene
c97c3cea74 CI: Fix intentionally broken test 2019-01-04 20:11:02 +00:00
Jermolene
e9f2a24f30 CI: Exit when tests fail 2019-01-04 20:07:37 +00:00
Jermolene
0b7f72ce5c CI: Output the build TW version number for debugging 2019-01-04 18:02:59 +00:00
Jermolene
52d328ee1b CI: Temporarily make one of the tests fail to make sure that failed tests work 2019-01-04 17:58:16 +00:00
Jermolene
ddf22ec2a4 We have to force the installation of TiddlyWiki
(This is so that we have the latest released version of TW5 for building the non-prerelease version)
2019-01-04 17:53:59 +00:00
Jermolene
6b4294923f Test edition: exit with an error code if the tests fail 2019-01-04 17:46:11 +00:00
Jermolene
2dd76007d3 CI: Stipulate the latest version of node 2019-01-04 17:45:52 +00:00
Jermolene
31470f676c Minimal first pass at continuous integration
For now, we're just using Travis CI to run the main build script
2019-01-04 17:25:30 +00:00
Jermolene
d6bffad8ab Remove references to obsolete "2bld" edition 2019-01-04 16:48:07 +00:00
Jermolene
6195069c5e Fix URL of prerelease plugin library for v5.1.20 2018-12-21 09:31:36 +00:00
Jermolene
8e3f9d6aba Version update for v5.1.20-prerelease 2018-12-20 17:27:36 +00:00
Jermolene
1793dc5e34 Plugin library version for prerelease 2018-12-20 17:10:35 +00:00
Jermolene
21f4d05ca0 Version number update for 5.1.19 2018-12-20 16:38:56 +00:00
Jermolene
653604ae86 Automated readme update 2018-12-20 16:38:13 +00:00
Jermolene
1aea7b075d Prepare release note for v5.1.19 release 2018-12-20 16:37:19 +00:00
Jermolene
1dce674e51 Docs: Add quote from Joe Armstrong 2018-12-20 16:31:32 +00:00
Jermolene
5b6a468757 Docs: simplify community links in HelloThere 2018-12-20 16:31:04 +00:00
Jermolene
4f71c9072f Docs: fix typo 2018-12-20 16:30:20 +00:00
Jermolene
04ba91ce2f Release note update 2018-12-19 13:55:47 +00:00
BurningTreeC
9acff8f21c Add gitter svg + HelloThere link (#3655)
* add gitter svg $:/core/images/gitter

* add gitter link to HelloThere

* Update HelloThere.tid
2018-12-19 09:11:43 +00:00
Jermolene
ed714ab731 Adjust version for v5.1.19 prerelease 2018-12-19 09:08:14 +00:00
Jermolene
f3e17c365a New release banner for v5.1.19 2018-12-19 09:07:16 +00:00
Jermolene
98a395095b Fix prerelease display
Including the "released" field for an unrerelease prerelease prevents it from being displayed in the "TiddlyWiki Pre-release"  tiddler
2018-12-18 18:10:55 +00:00
Jermolene
5f1e8acbc0 Tweak "Creating journal tiddlers" to reflect changes in v5.1.18 2018-12-18 18:03:29 +00:00
Dr. Donald Lund
3827feee3f Update WebServer "port" variable docs (#3651)
The colon (:) separator needs to be replaced with an equals sign (=). This kept throwing me off while I was trying to set this up.
2018-12-17 19:36:31 +00:00
Jermolene
172751605e Update release note 2018-12-17 11:25:00 +00:00
Rob Hoelz
d8b291bc04 Fix search method for search tokens spread across fields (#3641)
* Fix search method for search tokens spread across fields

Addresses GH #3636, which reports that if you're searching for "test
body", and "test" only appears in the title field, and "body" only appears
in the text field, 5.1.18's search method won't yield that tiddler as a
result, which appears to be a regression from the 5.1.17 behavior

* Add test for searching for multiple tokens across fields

Verifies GH #3636:

> If I create a tiddler in the empty edition with the title "Test tiddler" and content "Body content", searching the wiki for "test body" yields no results under either "title matches" or "all matches". Searching for either word individually turns up "Test tiddler", and repeating this in an empty wiki I created from the 5.1.17 tag causes "Test tiddler" to show up under "all matches".
2018-12-17 11:19:48 +00:00
Jermolene
d5618ca60a Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2018-12-17 11:07:42 +00:00
Jermolene
500fd8c062 Add build target for empty.html
Part of https://github.com/Jermolene/build.jermolene.github.io/issues/5
2018-12-17 11:07:39 +00:00
BurningTreeC
d5ac2ee49e Bugfix button widget: popupTitle refresh (#3650) 2018-12-17 10:52:20 +00:00
BurningTreeC
a4937224b7 More tweaks for "how to create keyboard shortcuts" (#3646)
readability, better wording
2018-12-16 18:24:33 +00:00
Jermolene
42cf077639 Fix basic authentication forced login
Fixes #3647
2018-12-16 18:20:33 +00:00
Jermolene
f71a3b72d7 Update release note 2018-12-15 16:11:00 +00:00
Jermolene
eea036f803 Update plugin library location for 5.1.19 2018-12-15 16:07:49 +00:00
Jermolene
2cfdf59b77 Update release note 2018-12-15 16:01:04 +00:00
Jermolene
a8b8fb3b6f Restore default filename when saving changes, and make it configurable
Fixes #3630
2018-12-15 15:55:19 +00:00
BurningTreeC
aa1c6a9872 Fix KaTeX plugin fonts (#3640)
* Update KaTeX_AMS-Regular.woff

* correct all katex fonts
2018-12-14 21:51:23 +00:00
BurningTreeC
a7cdb94957 Reformatting "How to create keyboard shortcuts" (#3633) 2018-12-14 21:49:40 +00:00
Jermolene
f6b1e27281 Prepare for v5.1.19 2018-12-14 17:15:23 +00:00
Jermolene
de808ac66d Prepare for v5.1.19 2018-12-14 16:30:25 +00:00
bimlas
18ed2faf82 Implement in $:/core/upgraders instead of navigator.js
The core module tiddlers are not blocked, they are only marked.
2018-12-10 23:05:41 +01:00
bimlas
38b088eabf Warn when importing core tiddlers
See https://groups.google.com/d/msg/tiddlywiki/YZlPGP0qX1o/3tUpyoHXDgAJ
2018-12-10 09:20:58 +01:00
Jermolene
c4b39af052 Version number update for 5.1.18 2018-12-06 09:04:51 +00:00
Jermolene
1c73783ea4 Readme update for v5.1.18 2018-12-06 09:03:22 +00:00
Jermolene
c065dfa4bb Preparing for v5.1.18 release
Phew!
2018-12-06 09:02:05 +00:00
BurningTreeC
a36d8471a8 TOC macro - macrocall wasn't closed (#3622) 2018-12-05 14:30:24 +00:00
BurningTreeC
e3c0616326 Missing stateTitle attribute in unfold viewtemplate (#3617) 2018-12-04 09:13:49 +00:00
BurningTreeC
d00d46a772 Missing stateTitle attribute in subtitle viewtemplate (#3618) 2018-12-04 09:13:27 +00:00
BurningTreeC
40eeba20ef Missing stateTitle attribute in tags viewtemplate (#3619) 2018-12-04 09:13:02 +00:00
BurningTreeC
f163a1f12c Missing stateTitle attr in fold button (#3620) 2018-12-04 09:12:32 +00:00
BurningTreeC
018f7628f5 Remove the last of the new editor styles (reverting) (#3616) 2018-12-03 09:08:11 +00:00
BurningTreeC
bc124c0645 Remove the text-editor box-shadow (reverting) (#3615) 2018-12-03 09:05:52 +00:00
Jermolene
d4716a6f2b Tweak new release banner 2018-12-03 09:03:32 +00:00
BurningTreeC
ad799dbb61 Revert setting styles in framed.js (#3614)
this sets the framed-editor styles to 5.1.17 state
2018-12-03 08:55:16 +00:00
BurningTreeC
31e88dd2c6 Revert "remove unnecessary border-radius already set on the iframe" (#3613)
* Revert "v5.1.18 banner artwork"

This reverts commit 70500140b9.

* Revert "Revert #3607 and #3608"

This reverts commit 87b3e470c2.

* Revert "Fix default global keyboard shortcuts for Mac"

This reverts commit e466f62e7e.

* Revert "Comment plugin: Improve styles"

This reverts commit e17456e3bc.

* Revert "Style tweaks for framed editor + preview (#3608)"

This reverts commit c058378da0.

* Revert "Change to natural counting in range[N] operator (#3609)"

This reverts commit b9df224f99.

* Revert "Update release note contributors list"

This reverts commit 0f3912ba95.

* Revert "Make editor-preview not hide text-editor shadow (#3607)"

This reverts commit 11f02dc362.

* Revert "Editor needs to stand out a bit more (#3606)"

This reverts commit d711ef25ed.

* Revert "Tweak for keyboard-shortcuts how-to (#3605)"

This reverts commit 419ea9a243.

* Revert "Remove unnecessary border-radius already set on the iframe (#3604)"

This reverts commit 288d25e733.
2018-12-03 08:51:50 +00:00
BurningTreeC
e509291b18 Revert "editor needs to stand out a bit more" (#3612)
* Revert "v5.1.18 banner artwork"

This reverts commit 70500140b9.

* Revert "Revert #3607 and #3608"

This reverts commit 87b3e470c2.

* Revert "Fix default global keyboard shortcuts for Mac"

This reverts commit e466f62e7e.

* Revert "Comment plugin: Improve styles"

This reverts commit e17456e3bc.

* Revert "Style tweaks for framed editor + preview (#3608)"

This reverts commit c058378da0.

* Revert "Change to natural counting in range[N] operator (#3609)"

This reverts commit b9df224f99.

* Revert "Update release note contributors list"

This reverts commit 0f3912ba95.

* Revert "Make editor-preview not hide text-editor shadow (#3607)"

This reverts commit 11f02dc362.

* Revert "Editor needs to stand out a bit more (#3606)"

This reverts commit d711ef25ed.
2018-12-03 08:51:17 +00:00
Jeremy Ruston
70500140b9 v5.1.18 banner artwork 2018-12-02 21:13:50 +00:00
Jermolene
87b3e470c2 Revert #3607 and #3608
Hi @BurningTreeC apologies I merged these without properly looking at them, but I think we should move them to 5.1.19 because:

* On Chrome, the new version hides the resize handle on textarea, which can be quite useful
* It's visually quite different, and I think might benefit from more discussion
* It's inconsistent with the CodeMirror editor

Would you mind perhaps starting another PR for edit template enhancements?
2018-12-02 20:57:13 +00:00
Jermolene
e466f62e7e Fix default global keyboard shortcuts for Mac
Fixes #3610
2018-12-02 15:47:32 +00:00
Jermolene
e17456e3bc Comment plugin: Improve styles 2018-12-02 15:15:48 +00:00
BurningTreeC
c058378da0 Style tweaks for framed editor + preview (#3608)
* remove border: none for iframe from framed.js

... inherits the iframe border 1px solid editor-border in vanilla base

* last style tweaks for editor-preview

same border-radius as framed editor

same additional space at the right as at the left

* Update base.tid

* Update base.tid

* looks actually better with this border
2018-12-02 08:40:11 +00:00
Evan Balster
b9df224f99 Change to natural counting in range[N] operator (#3609)
* Add range operator and documentation

* Use 1-based counting in range[N], update docs
2018-12-02 08:39:28 +00:00
Jermolene
0f3912ba95 Update release note contributors list 2018-12-01 18:05:06 +00:00
BurningTreeC
11f02dc362 Make editor-preview not hide text-editor shadow (#3607) 2018-12-01 17:58:06 +00:00
BurningTreeC
d711ef25ed Editor needs to stand out a bit more (#3606) 2018-12-01 17:28:01 +00:00
BurningTreeC
419ea9a243 Tweak for keyboard-shortcuts how-to (#3605) 2018-12-01 17:27:21 +00:00
BurningTreeC
288d25e733 Remove unnecessary border-radius already set on the iframe (#3604) 2018-12-01 15:31:34 +00:00
Jermolene
0ecc7c6071 Update plugin library to 5.1.18 2018-12-01 15:21:31 +00:00
Jermolene
80f44e880c Release note update 2018-12-01 15:21:16 +00:00
Luca Dorigo
4a9e2696d6 Promote Gitter Chat in the Readme (#3322)
* Promote Gitter Chat in the Readme

I'm not sure if it's ok to use inline styles for a small addition like this... also, feel free to change the colors :-)

* Added link to Gitter in 'Forums' tiddler and transcluded it in the readme as per @Jermolene comments

* Fixed transclusion and built readme

* Modified Readme so the 'forums' section is transclued with lower heading levels
2018-12-01 14:25:33 +00:00
BurningTreeC
6e59d2597a Style the framed editor (#3596)
* style the framed editor

this makes the framed editor look a bit less ugly 😎

* Update framed.js

* Update base.tid

* Update base.tid
2018-12-01 14:21:43 +00:00
BurningTreeC
7502ef875e Remove bad outline style from remove-tag-button (#3602) 2018-12-01 13:59:39 +00:00
Jermolene
8c367cdb21 Fix typo in #3601 2018-12-01 13:59:08 +00:00
Jermolene
63031bb3fc Release note update 2018-12-01 13:48:38 +00:00
Andreas Hahn
2bf6203cf5 Improvements to the static single tiddler view as well as documentation. (#3386)
* Improvements to the static single tiddler view as well as documentation.

* Fixed tabs

* Fixed tabs

* Revert static view path

* Documentation updates
2018-12-01 13:30:00 +00:00
BurningTreeC
6e674fe9db KaTeX plugin: add mhchem extension for chemical syntax (#3601)
* add chemParse (mchem extension)

* add mchem.min.js

* Update tiddlywiki.files

* add chemical reference link

* Rename mchem.min.js to mhchem.min.js

* Update tiddlywiki.files

* renaming mchem to mhchem

* Update readme.tid

* add chemical examples

* Update usage.tid
2018-12-01 13:28:51 +00:00
BurningTreeC
a82800050d Update katex to 0.10.0 (#3600)
* update to 0.10.0

* update to 0.10.0

* get current fonts from katex repo

* Update README.md

* update to 0.10.0
2018-12-01 12:37:44 +00:00
Bram Chen
9cd58caafc Update chinese translations (#3594)
* Improve help texts for listen and server commands
2018-11-29 18:02:36 +00:00
Ingo Blechschmidt
ea91ab1632 Twitter follow button docs: suggest https instead of http (#3458) 2018-11-29 11:10:30 +00:00
BurningTreeC
17232cfe91 Fix missing space between edittemplate tags (#3582) (#3585)
* add tc-tag-list-item to edittemplate  tag

... and remove a space that doesn't do anything here

* we need an `&nbsp` here
2018-11-29 09:51:58 +00:00
Arlen22
603c564872 Add the "tiddlywiki" argument to the server start hook (#3592)
* Update Hook__th-server-command-post-start.tid

* Update server.js

* Update listen.js
2018-11-29 09:51:11 +00:00
BurningTreeC
b18c85b85c Add How-To documentation for keyboard shortcuts (#3588)
* add link to "How to"  keyboard shortcuts + styles

* add "How to create keyboard shortcuts"

* Update How to create keyboard shortcuts.tid

* Update How to create keyboard shortcuts.tid

* Update How to create keyboard shortcuts.tid
2018-11-29 09:49:48 +00:00
BurningTreeC
62cbbf1db4 fix textnodes between tags in viewtemplate (#3587)
this removes additional text-nodes in the dom after each `tc-tag-list-item` caused by the last empty line
we could also just remove that line but I don't know if that's a permanent solution or if some mechanism will re-add that line at some point, so I go with the `whitespace trim` pragma
2018-11-29 09:49:29 +00:00
BurningTreeC
0396af849a Undo #3490 - error in popup-cancelling logic (#3586) 2018-11-29 09:49:11 +00:00
BurningTreeC
907d498baf Use stateTitle in dynaview viewtemplate (#3584) 2018-11-29 09:48:35 +00:00
Xavier Cazin
ea76a868bf Update to fr-FR language translations (#3583)
* Update to fr-FR language translations

* Add missing space

* Fix a line feed mistake
2018-11-29 09:48:11 +00:00
BurningTreeC
addc7c0176 Add tv-show-missing-links doc (#3580) 2018-11-29 09:47:55 +00:00
Marxsal
9268a8c3ca Info about using 0.0.0.0, plus warning about using it. (#3519)
* Info about using 0.0.0.0, plus warning about using it.

* Moved information to WebServer. Incls listen.

* More warnings about n.n.n.n
2018-11-29 09:47:37 +00:00
Marxsal
fe52d5462f Document tweaks to TOC for newcomers (#3518) 2018-11-29 09:46:41 +00:00
HC
5b14a97e0f Documentation of Using Excise text (#2533)
* Documentation of Using Excise text 

Documentation on the Excise text function. 
I propose that the  Excise text drop down ( the tiddler: $:/language/Buttons/Excise/Caption/Tag) links to this doc. I don't have permission to (or don't know how to) edit that tiddler in github. 

I propose the following text for the drop-down tiddler:

Tag new tiddler with the title of this tiddler (If the title is changed you have to [[save and re-edit|Using Excise]] to use the new title as tag).


see the issue:
https://github.com/Jermolene/TiddlyWiki5/issues/2531

* Update Using Excise.tid

changed headings in response to discussion

* Doc for  editor toolbar buttons (wikitext)

Documentation for buttons special to the editor toolbar (wikitext)

* Update Using Excise.tid

placed it under the new [[Editor toolbar]]

* Update Using Stamp.tid

placed it under the new [[Editor toolbar]] tiddler

* Update WikiText.tid

added reference to [[Editor toolbar]]

* Update Formatting text in TiddlyWiki.tid

added reference to the [[Editor toolbar]]

* Update WikiText.tid

* Update Editor toolbar.tid

* Update Editor toolbar.tid

* Update Editor toolbar.tid

* Update Editor toolbar.tid

typo
2018-11-27 21:12:44 +00:00
BurningTreeC
545c508138 fix tags-dropdown link (missing-tiddlers ) (#3589) 2018-11-27 20:51:54 +00:00
Mario Pietsch
42f7c03824 tm-open-external-window plus documentation. (#2721)
* first try - tm-open-external-window plus documentation.

* render examples and make help link a global variable
2018-11-27 18:43:25 +00:00
twMat
9232279a79 Update EditBitmapWidget doc to reflect update in code (#2725) 2018-11-27 18:11:21 +00:00
Tobias Beer
ee8821a5b4 Improvde days Operator docs for parameter (#3041)
in response to @rubaboo's [comment](https://github.com/Jermolene/TiddlyWiki5/pull/2972#issuecomment-331284559)
2018-11-27 17:57:13 +00:00
Tobias Beer
e0126b2f77 Tweak layout of HelloThere calls to action (#3046)
should only be at most 4 images per row, centered

the visuals of seeing 6 in the first row and 2 in the second is rather displeasing
2018-11-27 17:56:19 +00:00
Jermolene
19c49ae18a Fix animations for tags in edittemplate
Fixes #3577
2018-11-25 11:13:42 +00:00
BurningTreeC
ad4107a94b Fix animations in "Open" Sidebar-Tab (#3578) 2018-11-25 11:12:06 +00:00
BurningTreeC
8542ebaecb Fix $tw.platform.isLinux on latest firefox (#3495) 2018-11-25 10:51:42 +00:00
BurningTreeC
cd0ce0cde5 Show tag-icons in tags edittemplate (#3447) 2018-11-25 10:43:13 +00:00
BurningTreeC
01407fa8f9 Make tag-icons use the tag-pill-styles (#3448)
this line inherits the `fill: $(foregroundColor)$` from `<<tag-pill-styles>>` in `$:/core/macros/tags`
deleting the line makes the tag-icons fill with the computed color
2018-11-25 10:42:47 +00:00
Rob Hoelz
09ea59240a Cancel non-ancestor popups when showing a new popup (#3490)
Addresses GH #3484

As far as I can tell, the popup level checks in this module are
meant to handle nested popups.  It seems to me that the goal is
for at most a single hierarchy of popups to exist at any given time
- bearing that in mind, this change checks any popups currently tracked
by the module, canceling any that don't share an element hierarchy with
the new popup.
2018-11-25 10:42:21 +00:00
Jermolene
2e7faf3439 Updated Dutch translation
Thanks @gernert
2018-11-25 10:41:41 +00:00
Jermolene
1700eb4ba7 Docs update 2018-11-25 10:37:33 +00:00
twMat
536ab10790 Update docs for $:/tags/SideBarSegment (#3579)
The possibility to rearrange stuff "inside" tag pills is not obvious so makes sense to mention.
2018-11-25 10:36:15 +00:00
Jermolene
f6334723f6 Release note update 2018-11-24 16:12:12 +00:00
Jermolene
a83cd3f984 Change logic of tv-hide-missing-links to tv-show-missing-links
See https://github.com/Jermolene/TiddlyWiki5/pull/3530#issuecomment-441368922
2018-11-24 15:53:39 +00:00
Jermolene
078df9c157 Remove "TiddlyFox Apocalypse" from HelloThere thumbnails 2018-11-24 15:52:49 +00:00
Mario Pietsch
dc972237a2 Prepare for 5.1.18 (#3576) 2018-11-24 14:32:05 +00:00
Jermolene
32c8ef1d62 Docs typo
Thanks @pmario
2018-11-24 14:18:59 +00:00
BurningTreeC
3f91d5b3a1 Add tv-override-missing-links to fix links to missing tiddlers (#3530)
* add tv-override-missing-links variable

this lets us set `tv-override-missing-links` true so that we can fix edge cases like the `Filter` dropdown in the `Advanced Search` when `enable missing links` is unchecked in the `Settings` tab of the Control Panel

* add tv-override-missing-links to filter dropdown

* add tv-override-missing-links to type dropdown

* add tv-override-missing-links to fieldname dropd

* add tv-override-missing-links to TagManager(icons)

* undo tv-override-missing-links TagManager

not needed here

* Update link.js

* Update dropdown.tid

* Update fields.tid

* Update type.tid

* Update dropdown.tid

* Update link.js

* simplify all together

* add tv-hide-missing-links to pagetemplate

* do we need to refresh here...

... if the variable gets set on top of the pagetemplate?
2018-11-24 13:36:48 +00:00
G0erman
f32cb52ba6 Squashed commit of the following: (#3571)
uthor: G0erman <goerman.rafi@gmail.com
Date:   Fri Nov 23 17:21:43 2018 -0500

    Add a line in the end

commit 3cdd78116965f38147f55897adfcef493befe5d0
Author: G0erman <goerman.rafi@gmail.com>
Date:   Fri Nov 23 17:15:47 2018 -0500

    Recover file accidentally deleted

commit c4536e9182cd90a5d4e6e694ac6fc930ea75ddb5
Author: G0erman <goerman.rafi@gmail.com>
Date:   Fri Nov 23 17:12:25 2018 -0500

    Translate instructions about install plugin in node server.

commit 0622d03beb
Author: Jeremy Ruston <jeremy@jermolene.com>
Date:   Wed Nov 21 12:10:35 2018 +0000

    Update release note contributors list

commit 9d0083d8dc
Merge: 8134f8de2 2541b9b09
Author: Jeremy Ruston <jeremy@jermolene.com>
Date:   Wed Nov 21 11:53:43 2018 +0000

    Merge branch 'master' of https://Jermolene@github.com/Jermolene/TiddlyWiki5.git

commit 8134f8de28
Author: Jeremy Ruston <jeremy@jermolene.com>
Date:   Wed Nov 21 11:53:26 2018 +0000

    Update release note

commit 2541b9b090
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Wed Nov 21 12:32:22 2018 +0100

    Pagescroller - get scroll pos in src window (#3561)

commit d55a498fca
Author: Bimba Laszlo <bimbalaszlo@gmail.com>
Date:   Wed Nov 21 12:26:00 2018 +0100

    Docs: Clarify TextWidget with example (#3564)

commit ce7becd64f
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Wed Nov 21 12:24:50 2018 +0100

    KeyboardShortcut docs (#3496)

    * add SystemTag $:/tags/KeyboardShortcut

    * add Keyboard Shortcut Descriptor

    * Update KeyboardShortcuts.tid

    * Update KeyboardShortcutDescriptor.tid

    * Update and rename SystemTag_$__tags_KeyboardShortcut.tid to SystemTag_ $__tags_KeyboardShortcut.tid

    * Create KeyboardShortcutTiddler.tid

    * Update KeyboardShortcutTiddler.tid

    * Update KeyboardShortcutTiddler.tid

    * Update KeyboardShortcuts.tid

    * Update KeyboardShortcuts.tid

commit 09330968cc
Author: Jeremy Ruston <jeremy@jermolene.com>
Date:   Tue Nov 20 13:29:44 2018 +0000

    New "else" prefix for filters (#3558)

    * Experimental "else" prefix for filters

    See #3557

    * Docs updates for "else" filter runs

commit 02f26d94a1
Author: Jermolene <jeremy@jermolene.com>
Date:   Tue Nov 20 13:29:01 2018 +0000

    Releaase note update

commit 7729649f0e
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Tue Nov 20 12:50:12 2018 +0100

    Fix bad function declaration in wiki.js (#3559)

    fix for #3555 - inner function declaration should be on top of its "host" function

    error originally appeared on firefox v38.0.5

commit 430be4ec30
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Tue Nov 20 12:43:15 2018 +0100

    Fix list-tagged-draggable for quotes !! and ## (#3442)

    * fix list-tagged-draggable for quotes !! and ##

    * Update list.tid

    * Update list.tid

    * Update list.tid

commit b009a60b69
Author: Jermolene <jeremy@jermolene.com>
Date:   Tue Nov 20 11:30:06 2018 +0000

    Update release note

    Not quite up to date, got as far as 31 Oct.

commit 8832409666
Author: Jermolene <jeremy@jermolene.com>
Date:   Tue Nov 20 11:29:36 2018 +0000

    Docs typo

commit 6d67dc8eb8
Author: Bimba Laszlo <bimbalaszlo@gmail.com>
Date:   Tue Nov 20 11:06:12 2018 +0100

    Clarify drag-n-drop behaviour again (#3434)

    * Clarify drag-n-drop behaviour again

    Just found the real reason of drag-n-drop issue mentioned in
    b89e8d1635.

    * Trying to formulate correctly

commit f4ca295086
Author: Bimba Laszlo <bimbalaszlo@gmail.com>
Date:   Mon Nov 19 22:01:56 2018 +0100

    Docs: Remove broken `is` operator example (#3556)

    In 737e9ae4cb the multiple suboperator
    functionality was banned, but an example is remained in the docs.

commit b629b1412d
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Mon Nov 19 21:56:59 2018 +0100

    Fix CodeMirror on fake dom (#3547)

    * fix for #3547

    see https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

    because of "strict mode" - the `parentNode` property may not be writable and causes an error in `fakedom.js` (appendChild)

    to reproduce: install CodeMirror, install "Tools for exploring internals of TW", open a heavy Tiddler like the Control-Panel in edit-mode, toggle preview on, switch to "parse tree" or "widget tree"

    * check for tw fakedom

commit eea034c32d
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Mon Nov 19 18:59:04 2018 +0100

    Docs: add state* documentation to button and reveal widgets (#3553)

    * docs: add state* attributes to reveal widget

    * docs: add state* attributes to button widget

commit f373d8f2bf
Author: Adrian Morosanu <morosanuae@yahoo.com>
Date:   Mon Nov 19 12:50:09 2018 +0200

    Tree macro - fix for double quotes (and other special characters) (#3552)

    * Added fixes for special characters (e.g. double quotes) (including @BurningTreeC and @Jermolene suggestions)
    * Removed a lot of redundant code
    * Set a default value for "tree" macro prefix parameter ($:/)

commit 4f78d3d81b
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Mon Nov 19 10:35:06 2018 +0100

    Fix untagged-pill popup position (#3550)

    this corrects the popup-position of the untagged-pill in the tag-manager, showing on top of the Tiddler, not below the pill

commit 72679d2041
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Sun Nov 18 21:58:03 2018 +0100

    Fix bad characters in the TagManager (#3549)

    now the tag manager needs some fixes for breaking titles, too

    - the `<<__variable__>>` syntax needs to be used
    - the `tag-pills` don't use the tag-pill macro, but `{{||$:/core/ui/TagTemplate}}` directly
    - some already sufficiently qualified states in the `iconEditor` macro are reduced to not use the `qualify` macro

commit 33ba69e852
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Sun Nov 18 21:57:04 2018 +0100

    Modals: Display in source-window (#3539)

    * Make modals display in source Window

    this makes modals display within the window where they got opened, with the parameter `rootwindow` that, if `yes` or `true`, shows the modal always in the root TW window (`<$action-sendmessage $message="tm-modal" $param="mymodal" rootwindow="yes|true"/>`)

    * pass the full event to $tw.modal.display

    we need the event there to find `srcDocument` and `srcWindow`

    * pass event in options object

    * update modal.js to use options.event

    * add docs for rootwindow tm-modal attribute

commit 3aae643e14
Author: Jermolene <jeremy@jermolene.com>
Date:   Sun Nov 18 19:31:53 2018 +0000

    Reveal widget with lazily loaded state tiddlers

    Fixes #3476

commit e983936c30
Author: Lioric <7177570+Lioric@users.noreply.github.com>
Date:   Sun Nov 18 14:19:10 2018 -0500

    Signing the CLA (#3477)

commit 849844be12
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Sun Nov 18 20:16:46 2018 +0100

    Add stateTitle stateField stateIndex attributes (#3529)

    * make triggerPopup optionally set state directly

    * update button widget for new state attributes

    * update reveal widget for new state attributes

    * fix errors in button widget

commit 2b6514ddc2
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Sun Nov 18 11:54:12 2018 +0100

    Use new state* attributes for  reveal and button widgets (#3531)

    * toc macros: use stateTitle and setTitle

    * tree macros: use stateTitle and setTitle

    * TagManager: use popupTitle, stateTitle setTitle

    * body viewtemplate: use stateTitle for folded-state

    * import-listings: use stateTitle and setTitle

commit ddc76622f2
Author: BurningTreeC <hypnotizedkangaroo@gmail.com>
Date:   Sun Nov 18 11:44:19 2018 +0100

    Remove sourceMappingUrl from hammer.js (#3535)

commit 882cad1a0d
Author: Bram Chen <bram.chen@gmail.com>
Date:   Sat Nov 17 21:48:31 2018 +0800

    Add chinese translations for Title/References (#3545)
2018-11-24 09:50:24 +00:00
Jeremy Ruston
0622d03beb Update release note contributors list 2018-11-21 12:10:35 +00:00
Jeremy Ruston
9d0083d8dc Merge branch 'master' of https://Jermolene@github.com/Jermolene/TiddlyWiki5.git 2018-11-21 11:53:43 +00:00
Jeremy Ruston
8134f8de28 Update release note 2018-11-21 11:53:26 +00:00
BurningTreeC
2541b9b090 Pagescroller - get scroll pos in src window (#3561) 2018-11-21 11:32:22 +00:00
Bimba Laszlo
d55a498fca Docs: Clarify TextWidget with example (#3564) 2018-11-21 11:26:00 +00:00
BurningTreeC
ce7becd64f KeyboardShortcut docs (#3496)
* add SystemTag $:/tags/KeyboardShortcut

* add Keyboard Shortcut Descriptor

* Update KeyboardShortcuts.tid

* Update KeyboardShortcutDescriptor.tid

* Update and rename SystemTag_$__tags_KeyboardShortcut.tid to SystemTag_ $__tags_KeyboardShortcut.tid

* Create KeyboardShortcutTiddler.tid

* Update KeyboardShortcutTiddler.tid

* Update KeyboardShortcutTiddler.tid

* Update KeyboardShortcuts.tid

* Update KeyboardShortcuts.tid
2018-11-21 11:24:50 +00:00
Jeremy Ruston
09330968cc New "else" prefix for filters (#3558)
* Experimental "else" prefix for filters

See #3557

* Docs updates for "else" filter runs
2018-11-20 13:29:44 +00:00
Jermolene
02f26d94a1 Releaase note update 2018-11-20 13:29:01 +00:00
BurningTreeC
7729649f0e Fix bad function declaration in wiki.js (#3559)
fix for #3555 - inner function declaration should be on top of its "host" function

error originally appeared on firefox v38.0.5
2018-11-20 11:50:12 +00:00
BurningTreeC
430be4ec30 Fix list-tagged-draggable for quotes !! and ## (#3442)
* fix list-tagged-draggable for quotes !! and ##

* Update list.tid

* Update list.tid

* Update list.tid
2018-11-20 11:43:15 +00:00
Jermolene
b009a60b69 Update release note
Not quite up to date, got as far as 31 Oct.
2018-11-20 11:30:06 +00:00
Jermolene
8832409666 Docs typo 2018-11-20 11:29:36 +00:00
Bimba Laszlo
6d67dc8eb8 Clarify drag-n-drop behaviour again (#3434)
* Clarify drag-n-drop behaviour again

Just found the real reason of drag-n-drop issue mentioned in
b89e8d1635.

* Trying to formulate correctly
2018-11-20 10:06:12 +00:00
Bimba Laszlo
f4ca295086 Docs: Remove broken is operator example (#3556)
In 737e9ae4cb the multiple suboperator
functionality was banned, but an example is remained in the docs.
2018-11-19 21:01:56 +00:00
BurningTreeC
b629b1412d Fix CodeMirror on fake dom (#3547)
* fix for #3547

see https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

because of "strict mode" - the `parentNode` property may not be writable and causes an error in `fakedom.js` (appendChild)

to reproduce: install CodeMirror, install "Tools for exploring internals of TW", open a heavy Tiddler like the Control-Panel in edit-mode, toggle preview on, switch to "parse tree" or "widget tree"

* check for tw fakedom
2018-11-19 20:56:59 +00:00
BurningTreeC
eea034c32d Docs: add state* documentation to button and reveal widgets (#3553)
* docs: add state* attributes to reveal widget

* docs: add state* attributes to button widget
2018-11-19 17:59:04 +00:00
Adrian Morosanu
f373d8f2bf Tree macro - fix for double quotes (and other special characters) (#3552)
* Added fixes for special characters (e.g. double quotes) (including @BurningTreeC and @Jermolene suggestions)
* Removed a lot of redundant code
* Set a default value for "tree" macro prefix parameter ($:/)
2018-11-19 10:50:09 +00:00
BurningTreeC
4f78d3d81b Fix untagged-pill popup position (#3550)
this corrects the popup-position of the untagged-pill in the tag-manager, showing on top of the Tiddler, not below the pill
2018-11-19 09:35:06 +00:00
BurningTreeC
72679d2041 Fix bad characters in the TagManager (#3549)
now the tag manager needs some fixes for breaking titles, too

- the `<<__variable__>>` syntax needs to be used
- the `tag-pills` don't use the tag-pill macro, but `{{||$:/core/ui/TagTemplate}}` directly
- some already sufficiently qualified states in the `iconEditor` macro are reduced to not use the `qualify` macro
2018-11-18 20:58:03 +00:00
BurningTreeC
33ba69e852 Modals: Display in source-window (#3539)
* Make modals display in source Window

this makes modals display within the window where they got opened, with the parameter `rootwindow` that, if `yes` or `true`, shows the modal always in the root TW window (`<$action-sendmessage $message="tm-modal" $param="mymodal" rootwindow="yes|true"/>`)

* pass the full event to $tw.modal.display

we need the event there to find `srcDocument` and `srcWindow`

* pass event in options object

* update modal.js to use options.event

* add docs for rootwindow tm-modal attribute
2018-11-18 20:57:04 +00:00
Jermolene
3aae643e14 Reveal widget with lazily loaded state tiddlers
Fixes #3476
2018-11-18 19:31:53 +00:00
Lioric
e983936c30 Signing the CLA (#3477) 2018-11-18 19:19:10 +00:00
BurningTreeC
849844be12 Add stateTitle stateField stateIndex attributes (#3529)
* make triggerPopup optionally set state directly

* update button widget for new state attributes

* update reveal widget for new state attributes

* fix errors in button widget
2018-11-18 19:16:46 +00:00
BurningTreeC
2b6514ddc2 Use new state* attributes for reveal and button widgets (#3531)
* toc macros: use stateTitle and setTitle

* tree macros: use stateTitle and setTitle

* TagManager: use popupTitle, stateTitle setTitle

* body viewtemplate: use stateTitle for folded-state

* import-listings: use stateTitle and setTitle
2018-11-18 10:54:12 +00:00
BurningTreeC
ddc76622f2 Remove sourceMappingUrl from hammer.js (#3535) 2018-11-18 10:44:19 +00:00
Bram Chen
882cad1a0d Add chinese translations for Title/References (#3545) 2018-11-17 13:48:31 +00:00
Jeremy Ruston
33dd367a65 Introduce new subfilter operator (#3508) 2018-11-16 11:27:19 +00:00
Jermolene
db3f41db29 Docs typo fix for #3540 2018-11-15 21:44:05 +00:00
G0erman
d317bdf3da Documentation language (#3540)
* Improve documentation install language on node.js

* Singing the CLA
2018-11-15 21:43:01 +00:00
BurningTreeC
9752531b61 FIX for keyboard widget keyInfoArray (#3544)
apologies
2018-11-15 21:40:27 +00:00
BurningTreeC
43c8a0f485 Keyboard Widget: refresh keyInfoArray (#3541)
this makes a keyboard widget update its keyInfoArray if its key has the `((descriptor))` format and one of the platform-specific configuration tiddlers with that descriptor-suffix changes
2018-11-15 16:50:23 +00:00
BurningTreeC
4f7297645d Fix action-navigate widget for undefined event (#3542)
we need to prevent the event from being undefined which happens when using `action-navigate` within a global keyboard shortcut
2018-11-15 16:49:41 +00:00
Xavier Codinas
c5d4990cc5 Fix some catalan translations (#3464) 2018-11-15 15:51:34 +00:00
Jermolene
1f296951d4 Minor tweaks for #3534
* Minor rewording of prompt text
* Moved the colon into the translation string, reasoning that it may need to be changed for languages that use punctuation differently
* Corrected expand/collapse arrows
* Moved prompt into expand/collapse button, making it easier to hit use
2018-11-15 15:43:16 +00:00
Bimba Laszlo
88664f0286 Show backlinks on rename (#3534)
* List backlinks when renaming tiddler

* List references inplace

* TiddlerInfo/References accepting specific tiddler

If `operandTitle` is set, it will show its references instead of current
tiddler's.

It's purpose is to prevent code duplication (the references are listed
when renaming tiddler).

* Don't use variable for References template, use <$tiddler>

Set the `current` to desired title with `<$tiddler>` widget.

* List references in a separate block

* Rename state tiddler

* Use qualified state
2018-11-15 15:18:38 +00:00
BurningTreeC
0ff96f9caf [pagescroller] add callback function option (#3473)
this allows using the pagescroller for scrolling elements into view where the rect gets calculated somewhere else

Example: CodeMirror has the `cm.cursorCoords()` function that returns the rect of the textselection (or cursor coordinates)

this scrolls the cursor or text selection into view using tiddlywikis pagescroller:

`$tw.pageScroller.scrollIntoView(undefined, function() { return self.cm.cursorCoords(true,"window"); });`
2018-11-15 14:58:32 +00:00
BurningTreeC
c82edbe6bc New window: add missing click listener for popups (#3538)
this adds a click listener to new windows which enables us to cancel popups by clicking
2018-11-13 18:08:54 +00:00
BurningTreeC
55b5b6dd56 PageScroller: scroll in new windows (#3537)
* make pageScroller work in new windows

* update getScrollPosition to work for new windows

* Update dom.js
2018-11-13 18:07:55 +00:00
Jermolene
8ae62c90df Improve links to demo editions
Now make them relative to the location of index.html
2018-11-13 08:55:13 +00:00
Jermolene
277bc92f92 Add a dynaview demo edition 2018-11-13 08:54:50 +00:00
Bimba Laszlo
196992167f Add link to "code style and auto format settings" repo (#3527)
https://github.com/Jermolene/TiddlyWiki5/pull/3511#issuecomment-436405293
2018-11-08 11:29:31 +00:00
BurningTreeC
cb74536b3c Update CodeMirror config tiddlers (#3524)
* use "text" config scheme

* use "text" config scheme

* use "text" config scheme

* use "text" config scheme

* use "text" config scheme

* use "text" config scheme

* use "text" config scheme

* use "text" config scheme

* use "text" config scheme + set type integer

* use "text" config scheme

* set type integer

* set type integer
2018-11-07 17:58:38 +00:00
BurningTreeC
22caef9e34 Fix NewImageType config (#3523)
* fix new-line in NewImageType config

sorry for this, too

* fix NewImageType config tiddler

* use "text" field for config
2018-11-07 16:51:55 +00:00
BurningTreeC
d64fc5d8cd Fix new-image button (#3521)z
sorry for the mistake
2018-11-07 16:05:56 +00:00
BurningTreeC
9f8a74c6d9 add new-tiddler new-journal new-image keyboard shortcuts (#3512)
* add new-tiddler action tiddler

* use new-tiddler action-tiddler

* use new-tiddler action-tiddler correctly

* use new-journal action-tiddler

* create new-journal action-tiddler

* use new-image action-tiddler

* add new-image action-tiddler

* create new-image type config

users may prefer png over jpeg for example

* add new-tiddler keyboard shortcut

* add keyboard shortcut configs

* add keyboard shortcuts ShortcutInfo

* add new-journal Keyboard shortcut

* add new-image keyboard shortcut

* Create Hidden Setting NewImageType.tid
2018-11-07 12:59:21 +00:00
BurningTreeC
6c9dfd7f62 Fix tag macros problem with double quotes (#3437)
* [Further TOC fixes] - FollowUp: fix tag macros

this fixes the tag macros when titles are used that contain quotes, especially triple quotes and more

* Update tag.tid
2018-11-06 21:35:36 +00:00
Jermolene
4f8e32a647 Change qualify widget parameter name to match qualify macro 2018-11-06 16:41:18 +00:00
BurningTreeC
4d1127ed5b Fix tc-adjust-top-of-scroll (#3475)
* correct scrolling with tc-adjust-top-of-scroll

not multiplying `offset` with t causes jumps at the first animation steps, where the offset value is bigger than `endY - scrollPosition.y`

* correct scroll offset
2018-11-06 16:23:46 +00:00
Marxsal
16eb5e1e32 Doc: Updated info re free WebDAV hosting (#3017) 2018-11-06 15:35:58 +00:00
Marxsal
abda6dd078 Docs: How to customize TiddlyDesktop (#3018)
Adapted from Jeremy's post https://groups.google.com/d/msg/tiddlywiki/KXdrZyr9MZ4/pFPcZtu5DAAJ
2018-11-06 15:35:31 +00:00
Marxsal
729c1e1030 Add lt, gt, lteq, and gteq to text attribute description. (#3470) 2018-11-06 15:34:21 +00:00
Marxsal
88c47d9df4 Documentation resource - Dave Gifford's Toolmap (#3478)
* Documentation resource - Dave Gifford's Toolmap

* Updated description line
2018-11-06 15:33:54 +00:00
Marxsal
899fe7608b Doc - url fix for Timimi documentation (#3479) 2018-11-06 15:33:28 +00:00
Marxsal
7cd1c48643 Doc - additional notes re list widget behavior (#3480) 2018-11-06 15:33:00 +00:00
Jermolene
d7914e3f3e Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2018-11-06 15:29:16 +00:00
Jermolene
698224556e Avoid wikify widget in TOC macro
Fixing the most egregious problem from #3517

@pmario can you kindly retest?
2018-11-06 15:29:13 +00:00
BurningTreeC
aeaf5ee5b6 FIX "Observe openLinkFromOutsideRiver ..." (#3516)
I assumed the attribute to be available but it's not
2018-11-06 14:33:41 +00:00
BurningTreeC
97b098b059 Observe openLinkFromOutsideRiver when creating new tiddlers (#3514) 2018-11-06 13:55:18 +00:00
BurningTreeC
457f03798c Fix error opening new windows with popup-blocker (#3515)
this prevents errors when a popup blocker blocks opening a new window from within a running TW
2018-11-06 13:54:00 +00:00
BurningTreeC
3592333cb8 Add support for global keyboard shortcuts (#3493)
* changes for global keyboardshortcuts

* add keyboard.js startup module

* remove not existing "th-opening-window" hook

* correct title

* use utils.addEventListeners

* define platform lookup-names on startup

* use the startup-lookup-names array

* use the platform-specific lookupNames only

* Update keyboard.js

* move initializations to the constructor

* move initializations to the constructor

* rename hasAnyTiddlerChanged

* don't explicitely create new RegExp

* use $tw.utils.hopArray

* match strings, no regex

* remove hopArray, move to boot.js

* add $tw.utils.hopArray to boot.js

* style update

* style updates

* move more to keyboardManager module

this could probably be moved to rootwidget.js

* move more to keyboardManager module

* add event listener for shortcuts in new windows

* prevent error when opening window is blocked

* add keydown listener on document in startup.js

* delete startup/keyboard.js

* add missing this.shortcutTiddlers

* Update keyboard.js

* Update boot.js

* add exports.hopArray to utils.js

* minor codingstyle tweak

* change how lookupnames get pushed to array

* Update windows.js

* re-add shortcuts-listener for new windows

I removed this before which I think was because I misunderstood what exactly should go to a separate PR
2018-11-06 13:34:51 +00:00
Jermolene
b584295831 Fix crash with search operator with blank field list 2018-11-01 12:56:56 +00:00
A.B. Samma
dff5315afe Signing the CLA as Abraham Samma (#3506) 2018-10-31 11:49:40 +00:00
Jeremy Ruston
6dcdc2049a Enhance search operator (#3502)
* Enhance search operator

* Add support for searching all fields

and also searching all fields except nominated fields.

* Docs tweaks

Thanks @pmario

* Error message improvements

* Improve error message formatting
2018-10-30 17:39:18 +00:00
Jermolene
d6a0b06f02 AWS plugin: Add support for a compressed payload
AWS imposes a limit of 16MB in my testing for the payload of a lambda. Compressing it enables us to pass x2-3 more data, thanks to the inefficiencies of JSON
2018-10-30 09:29:12 +00:00
Jermolene
a75434a347 Docs: fix date format example 2018-10-29 09:18:55 +00:00
Jermolene
78f5465a47 Fix hover colour for textual editor toolbar buttons 2018-10-24 10:33:16 +01:00
jed
baddd89abb Added flag to $tw.utils.parseStringArray to allow non-unique entries (#2027)
* Added flag to $tw.utils.parseStringArray to allow non-unique entries

With this change if you use $tw.utils.parseStringArray(list) you get identical behavior to before and enforces uniqueness in lists, but if you use $tw.utils.parseStringArray(list,true) it allows duplicate values in the list.

Because of how JavaScript handles overloaded functions this shouldn't have any affect on existing code that just passes one argument to the function.

* Update to hopefully remove merge conflicts
2018-10-21 16:58:41 +01:00
Yurii Rashkovskii
c0c1b557eb Problem: revealed dropdown menu on mobiles (#3491)
On mobile phones, tiddler's dropdown menu stays partially off-screen.

Solution: ensure that the revealed coordinates are never negative

Closes #3486
2018-10-21 16:53:45 +01:00
Yurii Rashkovskii
b95f6b523b Signing CLA for Yurii Rashkovskii (#3492) 2018-10-20 12:47:43 +01:00
Jermolene
6b03ba9876 Syncer: support configurable polling interval 2018-10-19 16:32:23 +01:00
Jermolene
d50e2df57b Syncer: fix problem with incoming tiddlers
The bug here is that incoming tiddlers (ie tiddlers that were updated on the server and synced back to the browser) will retain any fields that are currently present but deleted in the incoming tiddler
2018-10-14 15:35:26 +01:00
Jermolene
9c849eb10a WebServer - change /login-basic route to /login/basic
To avoid clashing with tiddlers called "login-basic" :)

We also need to revise the rout for /status for the same reason, but there are backward compatibility issues there
2018-10-13 17:22:21 +01:00
Cameron Fischer
d8007386cf Fix issues with ordering of tagged items (#3301)
* Added better handling for sortByList manual placements

If manual placement specifications show up in an inconvenient order,
sortByList, will go to the trouble of processing them in that order.

* Added tests to confirm solution to (#3296)

...That custom tag ordering will not choke when tiddlers get sorted after their dependencies have been placed around them

* Corrected list-after bug when referencing external titles

* Using more error-proof $tw.utils.hop in sortByList

* minor indentation correction in test-tags.js
2018-10-07 12:15:33 +01:00
BurningTreeC
5dcdff4b37 Fix scrolling with tc-adjust-top-of-scroll (#3467)
not multiplying `offset` with t causes jumps at the first animation steps, where the offset value is bigger than `endY - scrollPosition.y`
2018-10-07 10:23:41 +01:00
Jermolene
240bd7bec4 Docs typo 2018-10-03 21:42:34 +01:00
Jermolene
eeb453d471 Docs update 2018-10-02 14:54:46 +01:00
Jermolene
f0c6a09ea7 Docs update 2018-10-02 14:19:06 +01:00
Jermolene
c208c55a22 Finish web server API docs 2018-10-02 14:16:58 +01:00
Jermolene
83a245ed21 Refactor utility for converting tiddlers to JSON 2018-10-01 11:27:45 +01:00
Jermolene
107b0c17c0 Docs update 2018-09-28 18:30:31 +01:00
Jermolene
f162f4bc7b Typos missed from a9dd8c2 2018-09-28 18:18:07 +01:00
Jermolene
a9dd8c2f52 Use the new import pragma
Good for the core to show best practice
2018-09-28 16:25:54 +01:00
Jermolene
d5da7fd57c Docs updates 2018-09-28 16:02:04 +01:00
Jermolene
7022a98d5a Update splash screen example so that the macros work 2018-09-28 16:01:50 +01:00
Jermolene
fe85845c3c Add new "\import" pragma 2018-09-28 16:01:32 +01:00
Jermolene
f61a61c060 Improvements to splash screen documentation 2018-09-27 11:51:44 +01:00
Jermolene
86f2de0dda Fix typo in example splash screen
Missed off cfb2d7c
2018-09-27 10:11:54 +01:00
Jermolene
cfb2d7c9c8 Add support for splash screens during loading
Fixes #3417

Addresses some of the requirements discussed in #2254
2018-09-27 09:47:55 +01:00
Jermolene
806df86434 Move the system tag documentation into individual tiddlers 2018-09-26 18:24:08 +01:00
Jermolene
7282bf4721 Fix search result count
It's been broken since 097c87f
2018-09-26 16:20:13 +01:00
Jermolene
287a83c1cc Dynaview: Fix parameter name typo 2018-09-26 15:23:49 +01:00
Jermolene
b776f9fe90 Remove version history of TiddlyDesktop
It's hard to keep the listing up to date (see https://github.com/Jermolene/TiddlyDesktop/issues/161), and so it's better to just point users at GitHub
2018-09-24 09:26:40 +01:00
Jermolene
7368cc74e1 Remove inadvertant usage of Object.assign
In order to retain compatibiltiy with IE11

See this discussion: https://groups.google.com/d/topic/tiddlywiki/RjA7_mee5oc/discussion
2018-09-21 10:56:01 +01:00
Jermolene
f98b4d5956 Add more logging for drop operations 2018-09-13 20:42:35 +01:00
Jermolene
e4e7a0912d Revert "Fix tag macro problems with bad characters in title/tags (#3435)"
This reverts commit b76c5011cf.

Thanks @pmario @BurningTreeC, let's redo this.
2018-09-12 08:42:56 +01:00
Jermolene
d650784dd6 Fix typo in keyboard shortcuts UI 2018-09-11 16:06:29 +01:00
BurningTreeC
b76c5011cf Fix tag macro problems with bad characters in title/tags (#3435)
this fixes the tag macros when titles are used that contain quotes, especially triple quotes and more
2018-09-11 16:05:39 +01:00
Jermolene
e5550b91e6 Further TOC fixes
Continuing the work of 587fe9d10e

Fixes the test case in @BurningTreeC's comment: 587fe9d10e (commitcomment-30450611)
2018-09-11 13:02:28 +01:00
Jermolene
587fe9d10e Fix TOC macro with titles ending with double quotes
By almost entirely eliminating text subsitution, we can avoid the situations where special characters in tags or titles gets the macro confused.

These are quite intricate changes, and so I'd appreciate any help reviewing and testing, many thanks.

Fixes #3427
2018-09-10 12:56:38 +01:00
Jermolene
874318091e Fix crash with illegal arguments to decodeuri(component)
Fixes #3428
2018-09-09 20:48:53 +01:00
Jermolene
f9eed0dc87 Docs about using the web server with external JS 2018-09-05 09:10:42 +01:00
Jermolene
f2a38960fc Fix external JS template to work with the TW5 webserver
It's a bit gross that we have to change the filename used to reference the JS file. This is to make it work with the webserver.

At the moment, the webserver exposes system tiddlers as plain text renderings, and ordinary tiddlers as full HTML renderings through a view template. So we have to use a system tiddler title for the JS file.

The workaround I'm thinking of is to remove the blanket exposure of system tiddlers, and instead have a list of system tiddlers that are specifically exposed through a namespace like `127.0.0.1:8080\lib\tiddlywiki.js`. That can't clash with a tiddler title because tiddler titles are URI encoded and so can't contain slashes.
2018-09-05 08:57:29 +01:00
Jeremy Ruston
3d10a35fb7 Add support for externalising TW's JavaScript (#3423)
* Explore externalising TiddlyWiki's JS core into a separate file

* Fix missing newline after copyright notice

* Add an error alert if tiddlywiki.js can't be loaded
2018-09-05 08:44:27 +01:00
Jermolene
8321d2e6fc Docs: webserver and read-only mode 2018-09-05 08:38:47 +01:00
Jermolene
4f39e69e9d Add support for resize tracking 2018-09-01 13:19:28 +01:00
Marxsal
d7b8c1c298 Community doc for Timimi extension (#3415) 2018-08-31 09:59:11 +01:00
Jermolene
19f7287a53 Add $:/tags/TiddlerInfoSegment for adding segments to the tiddler info panel 2018-08-30 13:42:51 +01:00
Jermolene
65af4e7748 DynaView: Fix stylesheet title 2018-08-29 19:02:52 +01:00
Jermolene
25727df649 DynaView: Remove optisizer functionality
It was slow and clunky, and turned out to be easier to do in CSS.
2018-08-29 14:47:57 +01:00
BurningTreeC
4ec8881c2b CodeMirror: revert preventing dragging within textarea (#3414)
this reverts #3070 which prevents dragging text from one codemirror instance to another

there are other ways to solve the issue I tried to solve with this, so we should revert this to the standard behavior
2018-08-28 21:02:32 +01:00
Jermolene
4b630de4bd Release note update 2018-08-26 16:49:02 +01:00
Jermolene
e237d8fa97 Transliterate servername to safe ASCII
Fixes #3410
2018-08-24 14:33:31 +01:00
Jermolene
0f7ce7b67f Refactor navigator widget to use story utility to manipulate the storylist as well as the historylist 2018-08-23 18:31:48 +01:00
Jermolene
3bfa9c6f10 Experimental "persistent draft indicators"
Fixes #3409
2018-08-23 18:02:39 +01:00
Jermolene
63ad284784 Fix variable name in PageTemplate 2018-08-23 17:43:34 +01:00
Jermolene
7dbe117bc5 Add username (if set) to the title of draft tiddlers
Makes things a bit easier to follow when working in multiuser environments.

@inmysocks, @danielo515, @arlen22, @pmario, @drakor does this make sense for your use cases?
2018-08-23 17:43:06 +01:00
Jermolene
72e2238dc9 Release note updates 2018-08-23 13:14:11 +01:00
Jermolene
7a6213dcbf Update code comment for $tw.utils.http 2018-08-23 13:13:49 +01:00
Jermolene
03602215c4 Comment plugin: Autofocus new comment edit box
Fixes #3408
2018-08-22 09:57:31 +01:00
Jermolene
0151d8e564 Docs typo 2018-08-21 18:21:35 +01:00
Jermolene
b7558f98f4 Release note update 2018-08-21 14:01:24 +01:00
Jermolene
09112ed455 Add support for webp, heic, and heif image formats
https://en.wikipedia.org/wiki/WebP
https://en.wikipedia.org/wiki/High_Efficiency_Image_File_Format
2018-08-21 11:46:46 +01:00
TechLifeWeb
5756f30edd Docs: Update TW5 Tribal Knowledge.tid (#3327)
This link has been long dead because DropBox changed their policy on public folders. I've moved the file and started making updates to it again.
2018-08-20 18:11:46 +01:00
Jermolene
59b6cc134f Don't include qrcode and nodewebkitsaver plugins in prerelease 2018-08-20 17:56:17 +01:00
Jermolene
ee28f66b0a Docs: tweaks to 'Macro Definitions in WikiText' 2018-08-20 17:55:32 +01:00
twMat
9a2e2cd385 Docs: Update Macro Definitions in WikiText.tid (#3381)
* Update Macro Definitions in WikiText.tid

*The table is intended as an overview.
*The "Parameters as Variables" example is more clean cut than previously.

Please note that the text lacks an example of  direct `<<variable>>` invocation (because I'm not even sure I categorize or name this properly). Also my changes may contain factual errors or faulty lingo - please check!

* Update Macro Definitions in WikiText.tid
2018-08-20 17:50:23 +01:00
Jermolene
d96c844264 Use the sitetitle as the default filename for saving 2018-08-20 15:38:57 +01:00
Jermolene
11529ab399 Docs: clarify docs for "each" filter operator 2018-08-20 15:31:57 +01:00
Jermolene
fbaceaa8bd Don't steal "paste" events from contenteditable elements
Fixes pasting with a WYSIWYG editor
2018-08-20 15:26:41 +01:00
Jens
0c965175aa Docs: Add description of suffix: value (#3393) 2018-08-19 18:37:37 +01:00
Jens
e92eb6a945 Docs: fix regexp default field (#3394) 2018-08-19 18:37:14 +01:00
twMat
dce564c238 Update doc on HTML Block vs Inline mode (#3395) 2018-08-19 18:24:23 +01:00
Arlen22
68b063ab24 Rename TiddlyWiki in the Sky to TiddlyWiki Cloud (#3398) 2018-08-19 18:23:27 +01:00
Andreas Hahn
fe527b7eaf Fixed type mismatch (#3403) 2018-08-19 18:22:52 +01:00
Bram Chen
e72c72f04c Improve chinese translations for CopiedToClipboard/Succeeded (#3404) 2018-08-19 11:00:20 +01:00
Jermolene
f218c946f1 Fix usages of is[current] that can be changed to all[current]
Fixes #3402
2018-08-18 14:47:35 +01:00
Bram Chen
b1f9ff3f6c Add chinese translations for settings of Permalink/permaview Mode (#3401) 2018-08-17 17:21:34 +01:00
Jermolene
7d0b255a2a Improve "copy to clipboard" notification text 2018-08-17 09:29:23 +01:00
Jermolene
5a2e87eb09 Extend permalink/permaview to optionally copy URL to the clipboard
Fixes #3255
2018-08-16 19:39:18 +01:00
Jermolene
b55a3102be Fix typo from 8a38685 2018-08-16 16:08:33 +01:00
Jermolene
8a38685de9 Optionally adjust scroll targets to allow for a top menu bar
Fixes #3396
2018-08-16 12:07:50 +01:00
Jermolene
f210b75a30 Comments plugin: Switch to using the list field to attach comments
https://github.com/Jermolene/TiddlyWiki5/issues/3378#issuecomment-413137626
2018-08-15 13:50:29 +01:00
Jermolene
763f8afaf2 Add "contains" filter operator for searching list fields 2018-08-15 13:50:07 +01:00
Jermolene
3140ff9e49 Extent tm-full-screen message to support forcing the status
Now one can force "enter" or "exit", instead of just toggling the current status
2018-08-14 22:53:53 +01:00
Bimba Laszlo
b89e8d1635 Clarify the drag-n-drop behaviour (#3387)
* Clarify the drag-n-drop behaviour

In my case I misunderstood it: I thought that I need to select the text and
drag the selection, because drag-n-drop did not work by default.

* Fix grammar
2018-08-10 21:29:13 +01:00
Bimba Laszlo
c48aff2c87 Add Bimba Laszlo (@bimlas) to individual CLA (#3391) 2018-08-10 21:28:56 +01:00
Jermolene
7b9dc7557c Popup manager enhancements 2018-08-09 19:39:58 +01:00
Jermolene
c87c18be96 Fix tm-new-tiddler overwriting creation fields of existing tiddlers
Fixes #3371
2018-08-08 15:08:34 +01:00
Jermolene
bb9e2de861 Docs improvements 2018-08-08 10:47:10 +01:00
Jermolene
0a5633dd4a Missed off fcc5a6e
Related to #3378
2018-08-07 21:47:22 +01:00
Jermolene
fcc5a6e796 Missed off ec18a55
Related to #3378
2018-08-07 21:45:48 +01:00
Jermolene
ec18a55033 Comments plugin: several enhancements
As proposed in #3378

* Experimental support for comments on the entire wiki (enable in the plugin config panel). Implemented as comments on $:/SiteTitle, with the comments appearing at the top of the story river
* Refactor the "add comment" button actions so that they can be reused
* Refactor the comment toolbar to be extensible via a system tag
* Add an $:/AdvancedSearch canned filter for accessing all comments
2018-08-07 21:37:07 +01:00
Jermolene
097c87fa7b Modularize the sidebar
Fixes #2758
2018-08-02 13:22:21 +01:00
Jermolene
2d231a2e07 Fix typo in reveal widget
Introduced in a3a4c28143
2018-07-31 13:30:00 +01:00
Jermolene
0285eb600e Clarify date format docs
Fixes #3369
2018-07-30 21:19:59 +01:00
Jermolene
4b9bc1b766 Fix crash with malformed hexadecimal HTML entities
Fixes #3373
2018-07-28 16:22:38 +01:00
Jermolene
a3a4c28143 Fix bug with reveal widget not refreshing when state tiddler changes 2018-07-20 17:07:48 +01:00
Jermolene
6cfd973fbd Readme credits 2018-07-20 14:19:11 +01:00
Bram Chen
794be7ffd7 Update Chinese translations (#3366)
* Add chinese help texts for the new listen command

* Add chinese texts for color setting of `<select>` element
2018-07-20 14:10:30 +01:00
Jermolene
49e9789d9c Readme updates 2018-07-20 13:34:00 +01:00
Jermolene
8520c9d8fd Coding style tweaks for #3346 2018-07-19 21:48:40 +01:00
Evan Balster
be58de8409 Add range operator and documentation (#3346) 2018-07-19 21:42:09 +01:00
Jermolene
34e04b7ca6 Minor tweaks for #3362 2018-07-19 21:28:31 +01:00
Arlen22
aa8b2e11bb Allow all methods and add bodyFormat property to route definition (#3362)
* Allow all methods and add bodyFormat property to route definition

* Set string as the default bodyFormat

* Only set encoding on string routes
2018-07-19 21:24:57 +01:00
Jermolene
8b787cd806 Add new palette colours from #3360 to other core palettes 2018-07-19 21:19:21 +01:00
Jermolene
1317e13974 Fix issue with #3360
See https://github.com/Jermolene/TiddlyWiki5/pull/3360#issuecomment-406400700
2018-07-19 21:18:54 +01:00
twMat
e554561f95 [doc] Update CountWidget.tid (#3348)
* [doc] Update CountWidget.tid

* Update CountWidget.tid
2018-07-19 17:59:24 +01:00
twMat
57d6215fda [doc update] Custom_styles_by_data-tags.tid (#3355)
A few minor improvements that I propose are merged directly.

But, @pmario , we also need a clarifying example showing how to target a tiddler using *multiple* tags. So, under the examples there ought to be something like this:... BUT I fail to get this to work (syntax?):

```
[data-tags*="[[How to apply custom styles]] example-test"] {
  outline: 2px solid green;
}
```

Further, the text states that

`Important: Tiddler tags are not sorted, so the order in the rendered output may be different!`

...but I'm not sure what this means. Does it mean:

```
Important: A tiddlers tags are displayed alphabetically but rendered styles may come out in a different order. As per standard CSS behaviour, styles rendered later override styles rendered earlier.
```
2018-07-19 17:58:58 +01:00
twMat
fcccc85994 [doc] minor tweak to TranscludeWidget.tid (#3356) 2018-07-19 17:58:04 +01:00
Talha Mansoor
e0be9a3d09 Add <select> color setting to the palette (#3360)
* Add <select> color setting to the palette

* Signing the CLA
2018-07-19 17:25:35 +01:00
Bram Chen
d7001c6f6b Update chinese translations for built-in HTTP server (#3364)
* Add chinese help texts for the new listen command
* Add chinese descriptions of "authenticator" and "route" in Docs/ModuleTypes
* Revised chinese help texts for the server command
2018-07-19 17:24:16 +01:00
snlhnk
c05c0d3df6 Module-ize server routes, add static file support and other enhancements(#2679)
* Module-ize server routes and add static file support (#2510)

* Refactor server routes to modules

New module type: serverroute

Caveats: Loading order is not deterministic but this would only matter
if two route modules attempted to use the same path regexp (that would
be silly).

* Add static assets plugin

This plugin allows the node server to fetch static assets in the /assets
directory. I felt that this was a feature that goes above the core
functionality. That is why I added it as a plugin. with the modular
route extensions this was a breeze.

* Add serverroute description to ModuleTypes

* Coding standards tweaks

* Fix filename typo

* Move support for attachments from a plugin into the core

* Missing "else"

* Refactor server handling

* Introduce a new named parameter scheme for commands
* Move the SimpleServer class into it's own module
* Deprecate the --server command because of the unwieldy syntax
* Add a new --listen command using the new syntax

For example:

tiddlywiki mywiki --listen host:0.0.0.0 port:8090

* Add check for unknown parameters

* Add support for multiple basic authentication credentials in a CSV file

Beware: Passwords are stored in plain text. If that's a problem, use an authenticating proxy and the trusted header authentication approach.

* Refactor module locations

* Rename "serverroute" module type to "route"

* Remove support for verifying optional named command parameters

The idea was to be able to flag unknown parameter names, but requiring a command to pre-specify all the parameter names makes it harder for (say) the listen command to be extensible so that plugins can add new optional parameters that they handle. (This is particularly in the context of work in progress to encapsulate authenticators into their own modules).

* Refactor the two authenticators into separate modules and add support for authorization

* Correct mistaken path.join vs. path.resolve

See https://stackoverflow.com/a/39836259

* Docs for the named command parameters

I'd be grateful if anyone with sufficient Windows experience could confirm that the note about double quotes in "NamedCommandParameters" is correct.

* Be consistent about lower case parameter names

* Do the right thing when we have a username but no password

With a username parameter but no password parameter we'll attribute edits to that username, but not require authentication.

* Remove obsolete code

* Add support for requiring authentication without restricting the username

* Refactor authorization checks

* Return read_only status in /status response

* Fix two code typos

* Add basic support for detecting readonly status and avoiding write errors

We now have syncadaptors returning  readonly status and avoid attempting to write to the server if it's going to fail

* Add readonly-styles

We hide editing-related buttons in read only mode

I've made this part of the tiddlyweb plugin but I think a case could be made for putting it into the core.

* Add custom request header as CSRF mitigation

By default we require the header X-Requested-With to be set to TiddlyWiki. Can be overriden by setting csrfdisable to "yes"

See https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Protecting_REST_Services:_Use_of_Custom_Request_Headers

* Add support for HTTPS

* First pass at a route for serving rendered tiddlers

cc @Drakor

* Tweaks to the single tiddler static view

Adding a simple sidebar

* Switch to "dash" separated parameter names

* Typo

* Docs: Update ServerCommand and ListenCommand

* First pass at docs for the new web server stuff

Writing the docs is turning out to be quite an undertaking, much harder than writing the code!

* Get rid of extraneous paragraphs in static renderings

* Rejig anonymous user handling

Now we can support wikis that are read-only for anonymous access, but allow a user to login for read/write access.

* More docs

Slowly getting there...

* Static tiddler rendering: Fix HTML content in page title

* Docs updates

* Fix server command parameter names

Missed off 30ce7ea

* Docs: Missing quotes

* Avoid inadvertent dependency on Node.js > v9.6.0

The listenOptions parameter of the plain HTTP version of CreateServer was only introduced in v9.6.0

cc @Drakor @pmario

* Typo
2018-07-18 16:54:43 +01:00
Jermolene
9735e13dea Fix broken test 2018-07-03 12:09:59 +01:00
Jermolene
c72e4f01f1 Fix typo in excise button
It meant that the excise button didn't appear on tiddlers of type text/vnd.tiddlywiki
2018-07-03 11:12:12 +01:00
Jermolene
19b54fe905 Docs for the new tm-edit-text-operation save-selection action 2018-06-30 08:35:10 +01:00
Jermolene
2f425c303f Add docs macros to dev edition
Fixes #3345
2018-06-29 16:40:45 +01:00
Jermolene
bef3242075 New text editor operation: save selection to a tiddler 2018-06-29 15:09:51 +01:00
Jermolene
f54a0a11bc Add support for editor toolbar buttons to have action widgets 2018-06-29 15:09:34 +01:00
Jermolene
929b0c9833 Fix broken QR code wifi example 2018-06-23 10:18:39 +01:00
Jermolene
acaa07a964 First stab at a threaded commenting plugin 2018-06-21 08:36:15 +01:00
Bram Chen
23797b05a1 Add chinese help text of debuglevel for the server command (#3337) 2018-06-20 17:16:30 +01:00
Jermolene
1ce9973bed Add optional debug logging to the server command 2018-06-20 12:43:41 +01:00
Jermolene
c29f5a1b61 Server command: map missing path to "/"
Otherwise, the user gets a 404 if we use a path prefix and the user omits the trailing slash
2018-06-20 12:18:35 +01:00
BurningTreeC
2a3f1b4403 Make tm-full-screen work in all windows (#3334)
this makes tm-full-screen work in new windows, too
2018-06-16 10:03:38 +01:00
Jermolene
7557b8b5b7 Remove extraneous debugging code from 35cbb127a3 2018-06-15 11:34:06 +01:00
Jermolene
35cbb127a3 Restrict variable substitutions to macros defined with the define pragma
Fixes #3333
2018-06-15 08:31:02 +01:00
Jermolene
aba9c94f5a Fix coding standards for put.js
A few minor things, but the accidental use of "const" is serious: TW5 is intended to run on ES5.
2018-06-13 15:50:47 +01:00
Jermolene
bacf500d50 Avoid deprecated new Buffer() usage
See https://alexatnet.com/node-js-10-important-changes/#buffer-1

> Uses of new Buffer() and Buffer() outside of the node_modules directory will now emit a runtime deprecation warning.

More details: https://nodejs.org/api/buffer.html#buffer_buffer_from_buffer_alloc_and_buffer_allocunsafe
2018-06-13 11:22:17 +01:00
Jermolene
2e51f08bef Add support for rebasing headings at render time
Fixes #3330
2018-06-10 15:54:23 +01:00
Jermolene
29606c6d24 Refactor new journal actions
Using contained actions, as we were, meant that the actions (and in this case the wikify widget) were being rendered at render time, but might have been out of date by the time the actions were triggered. Using the action attribute ensures the actions are rendered when they are executed.

Fixes #3326
2018-06-06 19:41:02 +01:00
Jermolene
17e73befde Docs: Update IIS setup instructions
Reference to the wiki folder was incorrect
2018-06-01 10:30:46 +01:00
Jermolene
89f99151b3 Correction to the IIS installation instructions 2018-05-30 18:25:30 +01:00
Jermolene
d2682b71ff DynaView: Only apply minimum height to tiddlers that are not yet visible 2018-05-25 11:08:27 +01:00
Jermolene
121e868ca4 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2018-05-23 14:18:28 +01:00
Jermolene
4b42173962 DynaView: refactor checkVisibility for performance and readability 2018-05-23 14:17:49 +01:00
Jermolene
01bdaff005 Separate the two reveal-on-scroll examples
Making them easier to understand and copy
2018-05-23 14:17:23 +01:00
AnthonyMuscio
edcf1b1d41 Update cla-individual.md (#3305) 2018-05-21 10:40:16 +01:00
BurningTreeC
05af050cbf CodeMirror plugin: tweak for font-size (#3294) 2018-05-19 08:50:18 +01:00
Jermolene
6b14969cf6 Display a warning for binary tiddlers in view mode
The base64 data is currently parsed as wikitext, which is slow and unhelpful

We already display the same warning for binary tiddlers in edit mode.
2018-05-18 17:53:07 +01:00
Jermolene
f0b7c9a3d5 TextSlicer: Fix external links 2018-05-17 18:30:21 +01:00
Jermolene
33453039fc Fix broken import previews
All three were inadvertently showing the existing tiddler (if any), not the imported tiddler.
2018-05-16 17:40:15 +01:00
Jermolene
33e636cbe7 Docs: Add popupmechanism link to Button widget docs
Fixes #3284
2018-05-16 16:23:57 +01:00
Mario Pietsch
760c80c655 BibTex plugin: Fix a problem with MIME types under Ubuntu 18.04
Ubuntu 18.04 returns text/x-bibtex for .bib files instead of application/x-bibtex.
2018-05-16 14:20:51 +01:00
twMat
1436196758 Update search.tid (#3279)
minor correction
2018-05-15 15:44:03 +01:00
Jermolene
c252d7c945 BibTeX plugin: fix name of deserializer module 2018-05-15 14:02:27 +01:00
Jermolene
4fd980debe Docs: TiddlySpot and Ruby saver tweaks 2018-05-14 15:01:38 +01:00
Marxsal
38b24906c1 Docs: Saving via a minimal Ruby server (#3277)
* Saving via a minimal Ruby server

* Small grammatical mistake fix.
2018-05-14 14:56:00 +01:00
Jermolene
9e8a0653b0 Preparing for v5.1.18-prerelease 2018-05-12 12:31:10 +01:00
Jermolene
398b715bb8 Version number update for 5.1.17 2018-05-12 11:49:02 +01:00
Jermolene
d54f599269 Readme updates 2018-05-12 11:46:54 +01:00
Jermolene
f355f07ff9 Preparing for release of v5.1.17 2018-05-12 11:46:06 +01:00
Jermolene
6e2b4ebf3e Remove print-tiddler-window button for v5.1.17
We'll reconsider it for v5.1.18
2018-05-12 11:20:43 +01:00
Jermolene
c5511854ab Reinstate TiddlySpot docs
Fixes #3269
2018-05-11 21:11:51 +01:00
Jermolene
577a87a502 Update /dev build instructions 2018-05-10 15:55:36 +01:00
Jermolene
731759e20b Temporarily remove the 5.1.18 release note
So that it doesn't show up on the prerelease
2018-05-10 15:55:25 +01:00
Jermolene
85648590e5 Fix release date of v5.1.16 2018-05-10 15:54:59 +01:00
Jermolene
944010c3bf Release note update 2018-05-10 15:30:46 +01:00
Jermolene
78e734797b Remove extraneous test error
Left over from testing RSOE
2018-05-10 15:30:32 +01:00
Jermolene
98bafd0b69 Tweaks for RSOD adjustments 7468ad7
Better to centre the button
2018-05-10 15:29:31 +01:00
BurningTreeC
4e12c93b90 update german translations (#3267) 2018-05-10 15:03:11 +01:00
Bram Chen
280cc39434 Add chinese translations for new "print tiddler" button (#3266) 2018-05-10 15:02:38 +01:00
Mario Pietsch
7468ad7acf Make rsod less annoying (#2799)
* give js-error form its own CSS rules. error form should not exceed screen size

* fix whitespace
2018-05-10 14:45:50 +01:00
Jermolene
737e9ae4cb Revert multiple suboperator functionality from the "is" operator
See the discussion here: https://github.com/Jermolene/TiddlyWiki5/pull/3240#issuecomment-388035466
2018-05-10 13:15:49 +01:00
Jermolene
e11282cc08 Fix name of print tiddler button 2018-05-10 11:36:57 +01:00
Jermolene
2beae0db2e Tweaks for the new print tiddler toolbar button 2018-05-10 11:35:18 +01:00
Jermolene
523060e823 Add new "print tiddler" button for the view toolbar
It works by opening the tiddler in a new window and then triggering the browser print dialogue.
2018-05-10 11:33:23 +01:00
Jermolene
b95aa6ec6a Fix problem with repeated "new journal" with text set
Fixes problem whereby a repeated "new journal" would replace the text of the existing journal tiddler if the control panel new journal text was set.

Fixes #3028 and #3265
2018-05-10 11:28:07 +01:00
Jermolene
e6466b2c32 Fix problem with extraneous space in new journal titles 2018-05-10 08:52:02 +01:00
Matt Lauber
0ab9ec1ad3 Refactored the is operator for simplicity and efficiency. (#3240)
* Refactored the is operator for simplicity and efficiency.

* Improve `is` filter documentation.

* Update is.js

* extracted `subops.length` to `num_of_subops`
* renamed `subop` to `operator` for clarity/differentiation from `subops`
* refactored to avoid using a `Set` object.

* Update is.js
2018-05-09 18:07:08 +01:00
Daniel Rodríguez Rivero
715cb1d1bc Docs: Update RenderCommand.tid (#3263)
Adds a link that opens the advanced search with a filter to list all the template tiddlers.
2018-05-09 18:05:58 +01:00
Devin Weaver
230c13129a Fix undefined xhr bug (#3262)
Closes #3261

Bug introduced in commit f9be41720 ("Minor tweak for RetrieveETag
(#3257)", 2018-05-05)
2018-05-09 18:04:52 +01:00
Tobias Beer
a2606781b7 Docs: Add "Named vs unnamed parameters" section (#3022)
to clarify the risks of using unnamed parameters, esp. w/ states, see #1252
2018-05-09 18:01:03 +01:00
Daniel Rodríguez Rivero
4c89bbabbe Retain $:/status/UserName when logged out (#2893)
The user name tiddler should not be removed just because we are not logged in
2018-05-09 14:22:55 +01:00
Luca Dorigo
3816819705 Signed the CLA (#3258) 2018-05-08 18:51:55 +01:00
Bram Chen
f9be417204 Minor tweak for RetrieveETag (#3257)
Need to check if the server responses a null value for ETag.
(In the case testing with build-in webdav server of CarotDAV on Windows 10)
2018-05-05 11:40:41 +01:00
Jermolene
d4b4c3c936 New Release Banner for v5.1.17 2018-05-05 10:11:51 +01:00
Jermolene
c64fc164fc Fix mime type for 2c7f467 2018-05-04 17:49:21 +01:00
Jermolene
2c7f467514 Add support for /*\ style metadata comments at the top of CSS files
Just as we already support for JS files
2018-05-04 17:38:30 +01:00
Sebastian Silva
46e8e4343a Fix WebDAV by requesting new ETag. (#3230)
* Fix WebDAV by requesting new ETag conditionally

For me. this was saving only the first time and subsequently failing.
Having revised the requests, I noticed it didn't get a new ETag after saving.
Seems not all WebDAV implementations return a new ETag in PUT requests.

In my WebDAV service (WsgiDAV) - ETag is only served from a HEAD
request.

So if no ETag is found with PUT - we request one with HEAD.

This patch fixes error handling and should also work with servers that
provide ETag directly upon PUT.

* Add tweak from PMario
2018-05-04 11:48:38 +01:00
twMat
38baa70bc6 Update Sharing your tiddlers with others.tid (#3254)
Just a little polishing up.
Ideally the icons should be styled to not be so big.
2018-05-04 10:48:11 +01:00
Bram Chen
36d321746b Update chinese translations for hint of sticky titles option (#3253) 2018-05-04 08:59:50 +01:00
Jermolene
ab5e5795e8 Fix issue with lazy loading temporary tiddlers
Fixes #3235
2018-05-03 18:27:17 +01:00
twMat
8464101430 [doc] Update RangeWidget.tid (#3251)
very minor correction
2018-05-03 17:49:52 +01:00
Jermolene
c569df4bd4 Update hint for sticky titles option
Fixes #3249
2018-05-03 16:14:05 +01:00
Sebastian Silva
215c8bb9ea Update cla-individual.md (#3246) 2018-05-03 14:22:40 +01:00
Jermolene
55453d463a Update release note 2018-05-02 17:09:24 +01:00
Jermolene
b2173d11ea Restore default of preview pane hidden 2018-05-02 16:52:45 +01:00
Jermolene
c95a32abdf Prepare for 5.1.17-prerelease 2018-05-02 16:10:22 +01:00
Jermolene
ac26c8829d Update release note 2018-05-02 16:04:43 +01:00
Jermolene
8feb07e429 Add information about "class" field used by the ViewTemplate 2018-05-02 16:02:24 +01:00
twMat
3aaa7357f6 Update TiddlerFields.tid (#3236)
Add "icon", "list-before" and "list-after"
2018-05-02 16:00:16 +01:00
Sebastian Silva
895447c40c Add write condition for DAT protocol (#3244)
In order to write to a DAT with Beaker Browser, it needs to have access to the file via `dat:` protocol.
2018-05-02 15:57:47 +01:00
BurningTreeC
5626148202 Fix for sidebar not showing #3223 (#3226)
* fix for sidebar not showing

I believe this fixes #3223

* add explaining comment

* ... and fix indentation.
2018-05-02 15:31:26 +01:00
Jermolene
aab408109f Prepare for v5.1.17 2018-05-02 15:28:17 +01:00
Jermolene
34ce15638c Update readme 2018-04-25 18:35:23 +01:00
Jermolene
d84a03c2d7 Preparing for v5.1.16 2018-04-25 18:33:53 +01:00
Jermolene
9499af9a70 Release note update 2018-04-25 15:33:39 +01:00
Jermolene
d77a3795b7 Update new release banner 2018-04-25 15:33:13 +01:00
jed
75709d745f Fix a typo in @inmysocks name (#3224)
So it points to the correct GitHub user.
2018-04-25 15:12:19 +01:00
Jermolene
3e707f6a51 Docs: add RangeWidget examples 2018-04-25 14:29:26 +01:00
Bram Chen
c397004cfb Revised chinese translations for descriptions of list-before and list-after fields (#3222) 2018-04-25 09:56:33 +01:00
Jermolene
466566502c Release note update 2018-04-24 23:16:18 +01:00
Jermolene
7f2ad15464 Make links a little bolder
To make them more prominent, to compensate for the blue colour
2018-04-24 23:04:10 +01:00
Jermolene
df50d675f2 Prerelease: enable CodeMirror plugin 2018-04-24 23:03:31 +01:00
Mario Pietsch
19085a1277 Add data attributes to ViewTemplate (#3209)
* change 3 set-widgets to 1 var-widget call. Add data-tags and userClass.

* add new documentation and change the existing one accordingly.
2018-04-24 22:08:20 +01:00
BurningTreeC
200e854814 codemirror update v5.37.0 (#3220)
* Update codemirror.js

* Update xml-fold.js

* Update javascript.js

* Update markdown.js

* Update readme.tid

* add tiddlywiki theme to codemirror demo

* set tiddlywiki theme for codemirror demo

* correct naming of meta to tw-meta

* vim keymap updates were missing - now added
2018-04-24 22:06:59 +01:00
Tobias Beer
6bbf36f903 Update docs for delimiter in environment variables (#3049)
fixes #2954
2018-04-24 22:06:09 +01:00
Matt Lauber
c974858cf5 Add Range widget (#2988)
* Adds a range widget 

Adds a range widget that supports all the range attributes on a input[type=range] element.  These include min max and increment.

* Update range.js

* Fix spaces vs tabs.

* Added documentation.
2018-04-24 22:05:05 +01:00
Tobias Beer
f26bcb273b Fix new field value handling in edit template (#3048)
prevents variables in the value from being replaced when adding a new field
2018-04-24 22:03:59 +01:00
Tobias Beer
61f9adb710 allows to add link via ENTER in input (#2703)
simplified / refactored actions
2018-04-24 22:02:04 +01:00
Cameron Fischer
7e58866499 Added present-but-empty list-after functionality (#3219)
This places the list item at the end of the list when its 'list-item' field
is an empty string.
2018-04-24 16:58:09 +01:00
Jermolene
7f1541464a Release note update 2018-04-23 16:23:54 +01:00
Jermolene
141629c63b Update TiddlySpace info
Fixes #3218
2018-04-21 17:27:31 +01:00
Jermolene
07887c1226 Revert "Add swipe,tap and press widget to hammerjs (#3214)"
This reverts commit 8bf7dd7172.
2018-04-18 16:00:03 +01:00
BurningTreeC
8bf7dd7172 Add swipe,tap and press widget to hammerjs (#3214)
* Create swipe.js

* add swipe widget

* add popup handling

* velocity mini-tweak

* add press widget

* add tap widget

* remove popup from tap widget - not possible as it seems

* add pan widget + utility css

* correcting field name

* naming and formatting

* add usage

* add pinch widget

* add pinch widget

* various small fixes

* adding absolute coordinates to pan widget

* prevent default dragging for pan widget

* improve pan widget stability
2018-04-18 11:33:59 +01:00
Jermolene
df809bcb87 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2018-04-13 09:24:09 +01:00
Jermolene
848d9cc4cb Don't misreport KaTeX plugin version 2018-04-13 09:24:04 +01:00
BurningTreeC
462d0a9402 Dynaview: unset functionality when scrolling out (#3212)
* try adding data-dynaview-unset-tiddler

I obviously lied

* dynaview unset functionality when scrolling out of view

* additional undefined check

* Update docs.tid

* update true and false to "true" and "false"

* add example of unset functionality

* Update reveal-on-scroll.tid
2018-04-12 13:23:50 +01:00
Matt Lauber
5ea6c9a273 Modify the is operator to allow multiple types to be specified. (#2982)
* Modify the is operator to allow multiple types to be specified.

* Fixed indentation.

* Fixed indentation.

* Rewritten to maintain input order when multiple filters provided.

* Updated documentation.

* Update is.tid
2018-04-12 13:21:49 +01:00
Arlen22
2163302190 Invoke hook when server starts (#3024)
* Invoke hook when server starts

Invokes the `th-server-command-start` hook when the server is started, with the server object as the parameter. This allows adding a WebSocket listener to the server.

* Return the HTTP server from the listen function

Returns the node HTTP server created in the listen function to allow extension

* Add node HTTP server to server-command-start hook

* Change hook to post start in case we add a pre-start hook

* Create Hook__th-server-command-post-start.tid
2018-04-10 21:55:54 +01:00
jed
3af0487f29 Add hooks for canceling editing a tiddler, new tiddler and renaming a tiddler (#3206)
These hooks are used by the multi-user plugin and are required to make the live two-way updating between the file system and the browser
2018-04-10 19:52:00 +01:00
Jermolene
99d8da9fc4 Update TiddlyWiki in the Sky for Dropbox URL 2018-04-10 13:00:51 +01:00
Jermolene
06a10d7180 Update Dutch translation
Thanks @gernert

Co-Authored-By: gernert <gernert@users.noreply.github.com>
2018-04-10 10:27:55 +01:00
Jermolene
d4fc913012 Release note update 2018-04-08 10:35:37 +01:00
BurningTreeC
afe14b47b5 draggable widget: actions on drag-start and drag-end (#3203)
* pass drag-start end drag-end actions to draggable

* Update dragndrop.js

* Update dragndrop.js

* Update dragndrop.js

* Update dragndrop.js

* Update dragndrop.js

* renaming dragstart/dragend -> start/end

* renaming dragstart/dragend -> start/end

* adding docs
2018-04-08 10:29:17 +01:00
Mario Pietsch
b783d0f5af de-DE 5.1.16 adjustments (#3207)
* 5.1.16 adjustments

* minor styling fixes
2018-04-08 10:07:26 +01:00
Tobias Beer
f092d08358 sets checked class for radio widget wrapper / label (#2182)
* sets checked ckass for radio widget wrapper

* added tc-radio as standard class for radio widgets

* removed selectedClass again, as suggested

@pmario ;-)
2018-04-08 09:52:41 +01:00
Jermolene
ea763d0eab Add support for retaining tab content
Fixes #2031
2018-04-08 09:47:57 +01:00
Arlen22
f4496d8fd3 Allow specifying a custom boot path (#2990) 2018-04-08 09:38:28 +01:00
Jermolene
df1f7e9798 Put saver: fix missing "else"
Thanks @arlen22
2018-04-08 09:37:49 +01:00
Jermolene
ce7cb020fb Add link to prerelease CodeMirror demo
Fixes #3204
2018-04-08 09:35:15 +01:00
Jermolene
1d6edfbfcb Release note clean up 2018-04-08 09:33:19 +01:00
Xavier Cazin
4139690447 A few fr-FR translation updates before 5.1.16 (#3205)
* fr-FR translation for import listing preview

* fr-FR translations for new buttons

* fr-FR translations for new ControlPanel items

* fr-FR translation for 'Diffs/CountMessage'

* Update fr-FR help texts for Server command
2018-04-08 09:31:56 +01:00
Bram Chen
6cf508ef27 Add chinese translations for import listing preview (#3199) 2018-04-07 12:49:36 +01:00
Rizwan
3c92512a2d [Doc] New types info to attributes table of reveal widget (#3198) 2018-04-07 12:49:12 +01:00
Jermolene
a07fe6f016 Release note update 2018-04-07 12:23:02 +01:00
BurningTreeC
3d64d7d126 CodeMirror 5.36.0 modularized (#3184)
* v5.35.1

* codemirror 5.35.1

* v5.35.1

* v5.35.1

* v5.35.1

* v5.35.1

* v5.35.1

* adding search&replace and autocomplete

* update version number

* add jump-to-line.js required for search&replace

* adding show-hint.js required by autocomplete

* adding basic autocomplete for any word

* adding autocomplete css

* adding new files to tiddlywiki.files

* forgot adding search.js

* minify 'em all

* Delete vim.js

* Delete sublime.js

* Delete emacs.js

* Delete anyword-hint.js

* Delete show-hint.css

* Delete show-hint.js

* Update config.tid

* Update tiddlywiki.files

* Update tiddlywiki.files

* Update config.tid

* Update config.tid

* Update config.tid

* Delete dialog.js

* Delete dialog.css

* Delete jump-to-line.js

* Delete search.js

* Delete searchcursor.js

* Update tiddlywiki.files

* Update tiddlywiki.files

* Update tiddlywiki.files

* add search-and-replace cm-addon as plugin

* add autocomplete cm-addon as plugin

* add fullscreen-editing cm-addon as plugin

* add keymaps as plugins + cleanup

* add highlighting modes as plugins

* small update on usage.tid

* moved multiplex.js to htmlembedded mode - the only one using it

* config/CodeMirror update

* how to disable line numbers

* how to change CM theme

* add closebrackets and closetags addons

* packaging a base-addon

* move meta.js from codemirror to base addon

* inputStyle: textarea -> prevents contenteditable on mobile browsers, keeps focus when clicking toolbar buttons, prevents import on paste

* default config no line numbers

* temporary add panel plugin for demo

* put base-plugin back to codemirror editor

* searchcursor to searchnreplace plugin

* bad copypasta mistake

* another typo

* stripped down meta.js + moved matchbrackets to closebrackets plugin

* remove panel

* change module-type to codemirro and make init "require" dynamic.

* make config handling dynamic with sensible defaults

* make cm settings translateable

* delete multids. they will be replaced

* add auto-config tiddlers

* dynamically create config structure for CM

* fix filename

* change typo

* kitchensink config, plus change plugin description for better sorting.

* add matchBrackets config tiddler

* RIP codeblock

* removed install instructions from readme - codemirror usage tiddler still todo

* control panel settings for cm base

* add setting for auto-close tags

* adding fontfamily settings and theme settings

* change tags for settings from $:/tags/ControlPanel/Settings to $:/tags/ControlPanel/Settings/CodeMirror

* more usage info

* more usage info

* update to v5.36.0

* ugly hack enables highlighting and tag-closing for vnd.tiddlywiki and x-tiddlywiki

* disable auto-indent for vnd.tiddlywiki & x-tiddlywiki and add some hidden settings

* remove engine.js hack

* meta.js -> tw-meta.js

* codemirror settings tab

* rename tiddler to tw-meta.js

* make editor font monospace or sans-serif - dropdown select

* make editor font monospace or sans-serif - dropdown select

* now using correct tiddler for editor font setting

* better usage doc

* make markdown-mode require tw-meta

* add more themes info

* add active-line highlighting option

* mini usage change

* add integer type to engine.js config-getter

* blink rate config type string

* correct engine.js

* license for base-plugin, usage link in settings tab

* codemirrordemo hellothere update

* codemirrordemo hellothere update

* Update license.tid

* codemirror demo sidebarlayout, license

* license headers to addon files

* license formatting & forgot what year we have

* license formatting & forgot what year we have & codemirror demo sitetitle sitesubtitle

* more informations 'try-this-style' for codemirrordemo hellothere

* codemirror demo sitetitle & cm fontfamily

* hellothere

* font-family setting must be editor-font-family, not code-font-family

* add basic keyboard shortcuts table

* shortcuts change to not interfere with toolbar shortcuts - needs testing - vim and emacs todo

* formatting

* controlpanel change keymap - default keymap is default

* ctrl-T becomes Alt-T in default keymap

* adjustments for codemirror demo

* demo: hellothere - hint for sidebar keymap cheatsheet

* toolbar focus fix + remove console log

* engine.js cleanup

* formatting

* reverting focus fix

* indenting engine.js

* hoping that indenting gets better
2018-04-06 17:34:50 +01:00
Tobias Beer
02529a51d0 Improve styling and reusability of palette, language, and theme switchers (#1954)
allows to override styles more easily via new class tc-chosen

----

updated all of storyview, theme, palette, language

» both in ControlPanel as well as PageControls
» removed "current ..." form switchers as it's redundant
» streamlined toolbar buttons in ControlPanel, especially less spacing

----

fixed dropdown hover colour override

if I wouldn't then it would go blank owed to default drop-down styles

----

polished styles

» chosen items now more emphasized while curspor not indicating a link
» removed underline when hovering, used highlighted border colours instead

----

use snippets languageswitcher for pagecontrols button, after all

----

wrap all switchers in tc-chooser

----

apply big font only to buttons, not reveals in pagecontrols

----

moved language switcher wrapper class to snippet

improved language switcher image alignment

----

make tiddler and ControlPanel view behave the same. add generic tc-check-list setting. add generic input type checklist, vertical alignment.

now using css rem to address drop-downs for pagecontrols

thanks @pmario

removed css artefacts in vanilla/base from before merging @pmario's PR

with comments being baked-in I don't think we want these in the code

css simplification for .tc-chosen and tc-chooser-item
2018-04-06 17:26:54 +01:00
Jermolene
67bab83902 DynaView: Add "data-dynaview-has-triggered" attribute 2018-04-06 14:52:27 +01:00
Jermolene
bafe447e1c DynaView: force DIVs for transclude-when-visible macro 2018-04-06 08:19:03 +01:00
Jermolene
0c3e549235 Fix TOC recursion detection
We need to explicitly guard against tiddlers tagged with themselves.
2018-04-05 16:32:35 +01:00
Jermolene
038f19ca9d New release banner for v5.1.16 2018-04-05 16:31:50 +01:00
Jermolene
df0b8b5a1e Rescind preview pane default of "diff"
It was done temporarily to make the prerelease clearer
2018-04-03 19:02:42 +01:00
Jermolene
df9b8c5505 Release note update 2018-04-03 19:01:57 +01:00
Jermolene
9e03264ebe Add pluggable previews to the import listing 2018-04-03 17:50:57 +01:00
Jermolene
53f2cc9814 Add compareTiddlers macro 2018-04-03 17:50:36 +01:00
Jermolene
0080728d36 Improve diff count for diff-text widget 2018-04-03 17:50:17 +01:00
Jermolene
47cdf55133 Add new subtiddlerfields filter operator 2018-04-03 17:48:01 +01:00
Bram Chen
52319ee88a Update chinese help texts for Server command (#3197)
* support environment variables for specifying port number
2018-04-02 19:44:36 +01:00
twMat
43b4ded2cc Update forum icon (#3191)
This icon is a much better clue to what the forum is about. Especially it is superior when someone is actually looking for help which, presumably, is one of the most important use cases with the tw webpage.
2018-04-02 19:44:13 +01:00
Mario Pietsch
2e8eb15536 Tag completion min length (#3190)
* tested with tw5.com index.html

* Controls the length of the input before the tag list is filtered
2018-04-02 19:43:18 +01:00
Mario Pietsch
e4660a8cc1 Fix new journal here (#3189)
* fix new journal here if template contains a quote "

* typo
2018-04-02 19:42:26 +01:00
Skeeve
6401b5c886 Now fixing bug mentioned in groups (#3188)
* fixed the "0 is not a number bug" in listops and x-listops

* Fixed one comment

* "default" is not a good name for a variable

* Following code styles.
Moving getInt to utils.

* Removing unwanted spaces introduced by me
2018-04-02 19:40:47 +01:00
Rizwan
501ad2798f Add ability to trigger actions on unchecking checkbox widget (#3182)
* Add uncheck-actions to checkbox widget

* Update checkbox.js

* Docs for "uncheckactions" param of checkbox widget
2018-04-02 19:39:59 +01:00
Jermolene
a8bd22f363 IIS instructions: Add docs link 2018-03-30 10:08:53 +01:00
Jermolene
e19a9e6ff6 Release note update 2018-03-29 14:25:06 +01:00
Jermolene
274bea1258 Docs for running on MS Internet Information Server 2018-03-29 12:51:31 +01:00
Jermolene
1280984e78 Docs: cleanup file locations 2018-03-29 12:51:08 +01:00
Jermolene
633208958c Docs: Clarify example of using environment variables for port number 2018-03-29 12:34:50 +01:00
Jermolene
f4fd5e76f8 Server command: support environment variables for specifying port number 2018-03-28 11:58:46 +01:00
Jermolene
be375c40f2 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2018-03-23 11:48:52 +00:00
Jermolene
b7746b0c55 Docs update for startup actions 2018-03-23 11:48:48 +00:00
Mario Pietsch
019cb6a542 Fix #3078 (#3185) 2018-03-23 11:08:53 +00:00
BurningTreeC
44a7ca7e43 Fix duplicate shortcut (#3187) 2018-03-23 11:07:50 +00:00
Jermolene
1c6942402e Add support for startup actions 2018-03-23 09:35:39 +00:00
Jermolene
28e713caac Add screen width/height to platform information exposed at startup 2018-03-23 09:13:45 +00:00
Jermolene
1b31004941 Shift dropdown left for "more" tiddler toolbar button 2018-03-22 21:39:26 +00:00
Jermolene
8e9330e484 Minor tweaks for #3157 2018-03-22 20:37:06 +00:00
Rizwan
033feda02d Adding comparative operators to reveal widget (#3157)
* Adding comparative operators to reveal widget 

>, <, >=, <=

* Adding documentation and formatting changes

* Bring Alphanumericals to the scope of comparison operation
2018-03-22 16:51:02 +00:00
Jermolene
f1b38c42f9 Fix problem with rotate-left bitmap operation
Spotted by @BurningTreeC  - c0569849d2 (commitcomment-28211117)
2018-03-22 10:46:57 +00:00
Matt Lauber
1dc7647640 Add plugin-priority fields for core plugins (#3113)
* Bug in plugin Ordering

Comparing plugin A without a `plugin-priority` field to plugin B with a `plugin-priority= 1` results in the plugins being ordered B, A when it seems like they should be ordered A, B.

* Switch to setting a plugin-priority on the built in themes to allow overriding parts of them.
2018-03-20 21:05:07 +00:00
Rizwan
a62e7d218c Create TW5-SingleExecutable_by_Jed_Carty.tid (#3181) 2018-03-20 19:21:31 +00:00
Matt Lauber
6963a54c66 Better Editor Toolbar Conditions (#3180)
* The Excise tool only works with tiddlywiki5 format, so only display it on tiddlers that use the tiddlywiki5 parser.

* The Editor Height tool and stamp tool only make sense with text editors, so only display them when the content type starts with text
2018-03-19 18:01:24 +00:00
Jermolene
ac154e1452 Release note updates 2018-03-19 16:01:53 +00:00
Mete Balci
45bf58b920 fix for #3176 (#3177) 2018-03-19 15:56:28 +00:00
Mete Balci
c4f6ba3a3f Signing the CLA (#3175) 2018-03-19 15:56:07 +00:00
BurningTreeC
54f2c4c34f add transcludify & linkify shortcuts (#3174)
* add transcludify & linkify shortcuts

* correct shortcuts
2018-03-19 15:55:35 +00:00
BurningTreeC
e92e109162 Transclusion -> Transcludify (#3173)
my mistake, sorry to all!
2018-03-19 15:54:57 +00:00
Bram Chen
92c1a82492 Add chinese translations for "Diffs/CountMessage" (#3172) 2018-03-19 15:53:41 +00:00
Matt Lauber
bbccb60c0b Code Cleanup (#3178)
Noticed an unused variable in the image parser, from before a old refactor.
2018-03-19 15:46:07 +00:00
Jeremy Ruston
aa7b18427f Incorporate “diff” engine to show visual differences (#3112) 2018-03-16 20:38:35 +00:00
Jermolene
0d354fe57f SetWidget: Add "subtiddler" attribute 2018-03-16 20:35:41 +00:00
Jermolene
b43ff430b7 Update release note 2018-03-15 14:30:51 +00:00
Xavier Cazin
f78190ef61 Allow empty string as value parameter in SetWidget (#3164)
When occuring in a tiddler named "New Tiddler", the following construct should return ++ instead of +[[New Tiddler]]+

<$set name="myVariable" filter="[all[current]field:title[New Tiddler]]" value="">
+<<myVariable>>+
</$set>
2018-03-15 14:12:33 +00:00
Jermolene
47264c8cd5 Remove third party cookies from tiddlywiki.com
Fixes #3106
2018-03-15 12:54:25 +00:00
Bram Chen
11b21d3583 Add chinese translations for new buttons (#3168)
* "rotate-left" bitmap editor toolbar button
* "transclusion" and "wikilink" editor toolbar buttons
2018-03-15 09:21:45 +00:00
Jermolene
de984366b9 Update release note 2018-03-14 21:29:00 +00:00
Marxsal
eae573b9dd Doc: How to hide author's name (#3162)
* Doc: How to hide author's name

* Rename tiddler. Add additional fields to hide.

* Small tweaks

* Removed creator field leftover from testing.

* New instructions for hiding author

* New instructions for hiding author #2
2018-03-14 18:10:56 +00:00
BurningTreeC
c9b8319801 Droppable widget - passing modifiers as variables (#3167)
* pass the modifier keys as variables

* Update DroppableWidget.tid

* Create modifier Variable.tid

* closing bracket got lost
2018-03-14 17:52:13 +00:00
Jermolene
de6e0d1c1e Dynaview: Add support for updating the address bar when scrolling
We add an attribute to tiddler frames in the DOM giving the title of the corresponding tiddler
2018-03-13 14:07:29 +00:00
Jermolene
c0569849d2 Add rotate-left button to bitmap editor toolbar 2018-03-12 12:45:56 +00:00
twMat
22a15bed67 Update caption in jsontiddler Macro (#3166)
To not confuse with the actual jsontiddlerS macro
2018-03-12 09:01:55 +00:00
Rizwan
cb28065d8e Docs: Community- Adding Widdly by Opennota (#3160) 2018-03-10 14:52:52 +00:00
Marxsal
bc87c3e3ae Doc: Emergency Tiddler Export for Saving (#3161) 2018-03-10 14:51:56 +00:00
Marxsal
a5f3968304 Community Resource doc for Jed Carty's Dynamic Tables (#3159) 2018-03-10 14:51:22 +00:00
Marxsal
2e9f0b29d0 Doc: Saving with TiddlyFox - change wording re latest version (#3019)
* Doc: Saving with TiddlyFox - change wording re latest version
The instructions were recommending the exactly wrong direction.

* List alternate extensions for FF 57+
2018-03-10 14:50:45 +00:00
Marxsal
0a1152b83a Simple methods to write protect tiddlers (#3163) 2018-03-10 14:47:47 +00:00
Jermolene
dbfe28094c DynaView plugin: Add font "optisizer"
A mechanism to choose the optimum font size of a passage of text to yield a particular numbr of characters per line.

@BurningTreeC I've made some minor consistency tweaks and cleanups to the viewport stuff, too.
2018-03-10 10:33:34 +00:00
Jermolene
7cb54f32c6 Add draggable task management example 2018-03-07 15:52:58 +00:00
Jermolene
de6c9aff9d Update release note 2018-03-07 15:30:47 +00:00
Jermolene
33cdf1550a Docs: DefaultTiddlers tweaks 2018-03-06 16:14:50 +00:00
Jermolene
1a52fdd626 Minor tweaks to linkify and transcludify icons 2018-03-06 14:55:44 +00:00
Tobias Beer
6acf36e898 remove superfluous list item at the end of list-links-draggable (#3043)
fixes #2970

Also fixes the nesting. If a template is defined for the list item, it should define the link as is done for **list-tagged-draggable**, i.e. the template defines any link widget it contains.
2018-03-06 13:29:27 +00:00
Jermolene
3361d749bf Add missing tags to new editor toolbar buttons
Fixes #3156
2018-03-06 13:10:16 +00:00
BurningTreeC
540cd1a286 EditorToolbar: add "transclusion" and "wikilink" buttons (#3155)
* add transclusion "image" for editor button

* add wikilink "image" for editor button

* add wikilink editor toolbar button

* add transclusion editor toolbar button

* add transclusion/wikilink button styles

* add transclusion/wikilink button captions & hints

* add german captions/hints

* revert styles not needed anymore

* update transcludify icon

* update linkify icon

* update transcludify icon

* update german

* Update Buttons.multids

* Delete wikilink.tid

* Delete transclusion.tid
2018-03-06 12:44:42 +00:00
Jermolene
634eb222ca Add linkify and transcludify icons
fyi @BurningTreeC
2018-03-06 12:23:49 +00:00
Marxsal
25d667868d Explain undocumented features of startup tiddlers (#3153) 2018-03-06 11:27:21 +00:00
Bram Chen
5fe80ec122 Add new chinese translations for Control Panel items (#3154)
* Basics/NewTiddler/Title/Prompt
* Settings/DefaultMoreSidebarTab/Caption
* Settings/DefaultMoreSidebarTab/Hint
2018-03-06 09:12:32 +00:00
Jermolene
80e9c39b75 Update release note 2018-03-05 11:41:55 +00:00
AlexHough
25fc4aa3ae Docs: change link (#3152) 2018-03-05 11:36:16 +00:00
AlexHough
ee0ccd4cc4 Docs: change format of draggable in the intro (#3150)
The change brings it into line with the format in TransculdeWidget. I think it's OK to link to the tiddler defining the widget from the tiddler.

The ListWidget tiddler uses a different convention, "The list widget" : for consistancy I think all widgets should contain a WikiLink to themselves in the introduction
2018-03-05 11:26:39 +00:00
BurningTreeC
8030ea0fd6 Make new tiddler title editable in ControlPanel (#3149)
* add option to configure new tiddler title

there may be users that don't like to see the word tiddler everywhere
this makes changing titles easier to access

* controlpanel - basics - new tiddler title prompt

* controlpanel-basics- newtiddler title prompt

* controlpanel - basics - new tiddler prompt
2018-03-05 11:24:29 +00:00
AlexHough
22cd017c2f Docs: add Examples tag to ImageGallery (#3147)
* add Example to title

brings naming convention in line with ImageGallery Example

* Update LanguageGallery.tid
2018-03-05 11:23:39 +00:00
Jermolene
74c1fe16c8 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2018-03-05 11:22:21 +00:00
Jermolene
51ad1deaf2 Docs: Add "Lists" tag to "Lists in WikiText"
Thanks @alexhough

Fixes #3146
2018-03-05 11:22:18 +00:00
AlexHough
308c644fc1 Docs: Add tag "Lists" to GroupedLists docs (#3145) 2018-03-05 11:21:09 +00:00
AlexHough
521c1f6068 Docs: add Lists tag to ListWidget (#3144) 2018-03-05 11:20:27 +00:00
Jermolene
7f5a2f96ef Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2018-03-05 11:19:24 +00:00
Jermolene
8a5c357f23 Clarify DictionaryTiddlers definition
FIxes #3142
2018-03-05 11:19:21 +00:00
Mario Pietsch
8abe626957 Contributor License Agreement formatting fixes (#3140)
fixed renderer problems. Look as intended again
2018-03-05 11:17:07 +00:00
Mario Pietsch
64ca68e8e9 fix formatting problems (#3139)
Just updated the h2 headings. It seems github changed the md renderer
2018-03-05 11:16:06 +00:00
TheDiveO
29e4965d2b implements default setting for the More sidebar in the same way as the existing default setting which sidebar tab to open as default; adds control panel setting; adds en-GB and de-DE lingo (#3135) 2018-03-05 11:14:30 +00:00
Jermolene
fb3b7aa1cd Coding style tweaks for #3134 2018-03-05 11:11:49 +00:00
Rizwan
2b0204422d Sortan filter for alpha-numeric filter (#3134)
* Sortan filter for alpha-numeric filter

* Removing Case sensitive option, Removing default value for isAlphanumeric parameter, updating formatting

* Formatting changes

* Formatting changes
2018-03-05 11:09:25 +00:00
BurningTreeC
cc39a86430 KaTeX - EditorToolbar stamp button for wysiwyg katex snippet input (#3131)
* add KaTeX logo

* add katex stamp button

* add katex stamp dropdown

* add a snippet so that the dropdown isn't empty

* correct dropdown title

* change tag

* update snippets tag
2018-03-05 11:05:44 +00:00
Jermolene
da0ffce2d6 Fix Snow White default fonts according to GitHub's advice
Does indeed seem to look better, at least on my Mac. In particular, the title of "HelloThere" is now properly kerned.

http://markdotto.com/2018/02/07/github-system-fonts/
2018-02-28 11:42:08 +00:00
Jermolene
b252abd4d1 TOC: Don't dismiss popup when clicking disclosure triangles
This change makes it possible to put the TOC in a popup dropdown.
2018-02-21 14:44:10 +00:00
Jermolene
24c6eece1b Update to KaTeX v0.9.0 2018-02-20 21:24:11 +00:00
Jermolene
b1cd450889 Shadow GettingStarted: Get rid of double "important" 2018-02-20 16:00:06 +00:00
Jermolene
0b9a3923bf AWS Plugin: Less logging 2018-02-19 09:11:48 +00:00
Xavier Cazin
5341d2887f New and corrected fr-FR translations (#3129)
* Better fr-FR translation for "rendering"

* Better fr-FR translation for rendering commands

* fr-FR translations for Control Panel items

* fr-FR translations for the Theme Tweaks tab

* New and corrected fr-FR translations for command help
2018-02-18 20:29:03 +00:00
BurningTreeC
4435afc726 Dynaview: Update viewport state refreshing (#3128)
To prevent repeated updates
2018-02-18 15:39:10 +00:00
BurningTreeC
042e9185a9 DynaView plugin: make viewport dimensions available in state tiddlers (#3126)
* add export-viewport-dimensions functionality

* add config.tid

* add config to plugin.info list

* typo

* update docs.tid

* change default tiddler to $:/state/viewport

* change default to $:/state/viewport

* Update dynaview.js

* changes as discussed - lingo missing
2018-02-18 12:04:35 +00:00
Jermolene
cda43f2ef8 Update release note 2018-02-17 19:26:31 +00:00
Bram Chen
220f73fde6 Add chinese translations for "Info/Advanced/Stylesheets" tab in Control Panel (#3089) 2018-02-17 19:07:50 +00:00
Skeeve
5963adf92e Bugfix/3117 inconsistent each (#3124)
* Following Jeremy's proposal of using a new suffix

* typo fixed
2018-02-17 18:51:18 +00:00
BurningTreeC
477cb0c47e Add HammerJS library Plugin (#3125)
* hammerjs library plugin - add readme.tid

* hammerjs library - add plugin.info

* hammerjs library plugin - add tiddlywiki.files

* hammerjs library plugin - add hammer.min.js v2.0.8 latest master

* hammerjs library plugin - add LICENSE

* change to latest hammer.js from hammerjs.github.io

as I've tested, the version from master (dated 2016-09-30) doesn't work like the latest version available from the website (https://hammerjs.github.io), dated 2016-04-23
2018-02-17 18:48:53 +00:00
Jermolene
86266c506f Add Português (Brasil) translation
Thanks to Mauricio Lucas
2018-02-07 15:56:43 +00:00
Jermolene
5754216479 KaTeX: Fix problem running under TiddlyDesktop as a wikifolder
Fixes https://github.com/Jermolene/TiddlyDesktop/issues/124 (the problem over there is that TiddlyWiki running as a wiki folder in TiddlyDesktop reports itself as running both under Node and the browser, and the previous test was wrongly choosing the fakedom)
2018-02-07 14:51:34 +00:00
Jermolene
38cf4c7ccf Remove extraneous draft tiddler
Fixes #3109
2018-02-07 12:51:55 +00:00
Jermolene
1c8170463c Simplify page scrolling behaviour
Fixes #2180
2018-01-30 11:29:07 +00:00
Jermolene
7534a97518 Text-slicer: Add support for hyperlinks 2018-01-30 11:06:50 +00:00
Jermolene
ab2ac78620 Text-slicer: Tweaks to linear slice rules 2018-01-24 20:57:39 +00:00
Jermolene
55d7f43f0c Text-slicer: Add support for discarding the content of an element 2018-01-24 12:01:56 +00:00
Jermolene
3e81921eea Text-slicer: Fix typo
Thanks @Evolena
2018-01-24 12:01:24 +00:00
Xavier Cazin
028888edff Take default value in account when index attribute is used (#3099) 2018-01-23 16:50:03 +00:00
BurningTreeC
c194cec520 tc-body background transparent if background attachment (#3100)
* tc-body transparent if background attachment

if you go fullscreen with the fullscreen button, the tc-body background color hides the background attachments - so make it transparent if $:/themes/tiddlywiki/vanilla/settings/backgroundimage isn't empty

* if background attachment macro

macro to make tc-body background transparent
2018-01-23 16:49:24 +00:00
Jermolene
327fed30c8 Mitigate problem with microscropic editor in zoomin view
See #3098
2018-01-23 16:22:35 +00:00
BurningTreeC
42660b05a7 check if dataTransfer is undefined (#3093)
this prevents an error when dragging elements not by mouse where dataTransfer can be undefined
2018-01-20 17:28:10 +00:00
Jermolene
ff6aa0570f Check for dollar sign within HTML element name
Fixes #3091
2018-01-16 22:13:40 +00:00
Jermolene
6350f55e25 Updated Dutch translation
Thanks @gernert
2018-01-16 16:15:10 +00:00
Jermolene
eaf0869c94 Update to KaTeX v0.9.0-beta 2018-01-16 16:06:29 +00:00
Jermolene
df7f4fedb2 Docs: Improve system tiddlers docs 2018-01-13 15:39:44 +00:00
Jermolene
460a07ca03 Introduce "Info/Advanced/Stylesheets" tab to Control Panel
Makes it a bit easier to understand what the browser will see for each stylesheet tiddler
2018-01-12 21:44:38 +00:00
Jermolene
4e1f9bf5ed Don't use the toolbar editor when rendering to the fakedom
Otherwise the iframe editor will crash when trying to set itself up
2018-01-12 10:56:08 +00:00
Jermolene
a88e28cb5a KaTeX Plugin: Update to v0.9.0-alpha2 2018-01-11 21:42:56 +00:00
Jermolene
ad116be7f6 JSZip plugin: Update to v2.6.1
We can't update to v3.x.x because the API is not backwards compatible
2018-01-11 21:31:58 +00:00
Diego Mesa
949c178f45 Fixing incorrect link to Introduction to filter notation (#3088)
Signed-off-by: Diego Mesa <diego898@gmail.com>
2018-01-11 21:30:29 +00:00
Diego Mesa
a4623a8ebb signing CLA (#3087)
Signed-off-by: Diego Mesa <diego898@gmail.com>
2018-01-11 21:29:09 +00:00
Jermolene
293c2fce07 Text-Slicer: Fix issue with single quotes in the base tiddler title 2018-01-11 13:47:21 +00:00
Jermolene
92870c0b2d Text-slicer: Retain text outside paragraphs 2018-01-11 12:43:24 +00:00
Jermolene
4e433966f4 Readme and minor docs updates 2018-01-11 12:42:45 +00:00
Jermolene
43108926de Update for 2018 🎉🎊 2018-01-11 12:32:24 +00:00
Rizwan
302b6a93de Documentation change to "tiddlywiki.info Files" (#3068)
Correct syntax to include of read-only parameter in "includeWiki" - shown in example
2018-01-09 17:30:44 +00:00
Bram Chen
48a98bad02 Revise the last changes for "Linking in WikiText" (#3083)
`[[Open file|c://users/me/index.html]]` is a wrong syntax for linking in wikitext.

`c://users/me/index.html` is not even a valid URI, although `[ext[Open file|c://users/me/index.html]]` works with Google Chrome and Microsoft Edge on Windows 10.

`[ext[Open file|c:\users\me\index.html]]` works with Chrome, Edge and Firefox on Windows 10.
2018-01-09 17:26:54 +00:00
Jermolene
89e8f689bb Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2018-01-09 17:13:50 +00:00
Jermolene
b4c7c59d5d Add emptyMessage parameter to list-links and list-tagged-draggable macros 2018-01-09 17:13:45 +00:00
Furicle
a3dae612fe Update Linking in WikiText.tid (#3064)
For clarity, the absolute file syntax needs to be added in the first section before relative links are shown.

All the examples from the top section should be echoed in the extended section.
2018-01-08 16:51:15 +00:00
Furicle
6fa1602c2c Update cla-individual.md (#3082) 2018-01-08 16:50:14 +00:00
Jermolene
3b34f60b90 Rename "Firefox Apocalypse" to "TiddlyFox Apocalypse"
Fixes #3020
2018-01-08 12:26:47 +00:00
Mario Pietsch
25f76a5996 Fix new journal button (#3079)
* fix "new-journal" button if template elements contain a double-quote

* fix typo
2018-01-08 12:23:34 +00:00
Jermolene
5fee52beac Introduce new dynaview plugin 2018-01-05 09:18:19 +00:00
Jermolene
413894e3e7 Text-slicer: Add new slicer rules for linear chunking
In this configuration there is no weaving together by hierarchical heading; the document is just a linear list of paragraphs.
2018-01-04 16:06:08 +00:00
Jermolene
50950d8143 Text-slicer: Switch to loose mode
So that non-XML entities work.
2018-01-04 16:02:58 +00:00
Jermolene
a7a3748bca Text-slicer: Add primitive support for escaping wikitext 2018-01-04 16:02:18 +00:00
Jermolene
de4eb5ca89 Add new th-page-refreshed hook 2018-01-04 16:01:19 +00:00
Jermolene
3f5e8aed3d Fix file extension from 17bd6b76a8
Thanks @bramchen
2018-01-03 12:06:06 +00:00
Jermolene
17bd6b76a8 Use minimum search length of 1 character for Chinese language
@bramchen I read a (translated) Chinese article about TiddlyWiki over the holidays that mentioned that the first thing for Chinese users to do was to change the minimum search length. Do you think it's useful to bake the setting into the plugin(s)?
2018-01-02 15:53:09 +00:00
Jermolene
edeab188a9 "Ful" edition: Fix dependent plugins
text-slicer now requires sax.
2018-01-02 15:51:51 +00:00
BurningTreeC
4bc592c9e8 preventDefault drag behaviour inside textarea (#3070)
fixes errors when trying to drag inside textarea while an eventhandler is listening for drag events
2017-12-22 09:40:23 +00:00
BurningTreeC
6a96cd1284 signing CLA (#3071) 2017-12-22 09:40:06 +00:00
Jermolene
47d065b239 Text-slicer: Fix title of document tiddler
For compatibility with the previous version, we ensure that the document tiddler ends up with the base tiddler title.
2017-12-21 22:15:00 +00:00
Jermolene
642a6505a1 Text-slicer: Fix image URLs 2017-12-21 22:14:08 +00:00
Jermolene
57e1fc6cd8 Add file type for true type fonts 2017-12-21 22:02:04 +00:00
Jermolene
358d416526 Further optimisations to wiki store
These changes give us a minor performance improvement for adding and deleting tiddlers
2017-12-21 22:01:52 +00:00
Jermolene
e4b10d42f9 Optimise the tag filter
Spending a bit more time with Chrome dev tools, and further to 254e1ca, this optimisation reduces the rendering time for the sample TOC from 1.9s to about 0.9s...
2017-12-21 16:13:47 +00:00
Jermolene
7e71fcfab8 Stop content area of vertical tabs overflowing on the right 2017-12-21 15:46:34 +00:00
Jermolene
254e1ca7f7 Optimise some tiddler store operations
I noticed that the rendering of a TOC with around 200 entries seemed frustratingly slow.

First, I analysed the execution of the code using the Chrome developer tools "timeline" tab: prepare by switching to the "Tools" tab, then start profiling, switch to the "Contents" tab, and then stop profiling once it has displayed. I then used the "bottom-up" view to dectermine that the various Object.keys() calls in the main wiki store were taking around 500ms of the overall time.

Before making any code changes, I also used TW's built in instrumentation to get some baseline timings: I found that the main refresh cycle was taking around 3.0s when rendering the Contents tab.

I then performed the attached simple optimisations of caching the list of tiddler titles and the list of shadow tiddler titles.

The results bring the overall main refresh time down to about 1.9s, a nearly 50% improvement.

The moral of the story is that the first rule of optimisation is measurement...
2017-12-21 15:46:01 +00:00
Jermolene
e27497d43d tw.com: Add some links 2017-12-19 17:18:28 +00:00
Bram Chen
cbfbd0c2bc Fix doc typo (#3067)
Update copy-to-clipboard Macro.tid
2017-12-18 09:30:54 +00:00
Jermolene
ca43a28d0e Fix copy to clipboard for iOS 10/11 2017-12-17 21:37:29 +00:00
Bram Chen
34306983b2 Add chinese translations for CopyToClipboard button (#3066) 2017-12-17 20:52:04 +00:00
Jermolene
1b6a06a4d7 Add copy-to-clipboard macro
And use it in the tw5.com example documentation
2017-12-16 10:58:33 +00:00
Bram Chen
6c7f8e5381 Add chinese translations for CopiedToClipboard messages (#3065) 2017-12-16 09:11:04 +00:00
Jeremy Ruston
c83231871d Make macro parameters available as variables in wikified macros (#3063)
First commit
2017-12-16 09:10:10 +00:00
Jermolene
d2ff164c07 Add support for tm-copy-to-clipboard message 2017-12-15 15:08:18 +00:00
Jermolene
e344c38349 Major updates to text-slicer plugin
* In the interests of performance and expressiveness, switched to using a Sax parser instead of a DOM implementation.
* Use extensible declarative rules to control the slicing process
* Added new optional set of rules for slicing by heading, where the paragraphs underneath a heading are packed into the same tiddler as the heading
* Added a modal dialogue for specifying parameters when slicing in the browser
2017-12-14 14:16:54 +00:00
Bram Chen
f128650c6e Update chinese translations (#3056)
* Add hint for field list dropdown
* Improve wording
2017-12-13 22:58:21 +00:00
Mario Pietsch
d96b4f4d90 v5.1.15 german translations (#3015)
* v5.1.15 german translations

* fix typos and improve grammar

* fix Parameter typo

* fixing some more typos
2017-12-13 22:56:47 +00:00
Jermolene
f478fa97fc Fix test regression caused by #3052 2017-12-12 18:15:33 +00:00
Jermolene
49b3ed4770 Tweaks for #3051
* House style:
** Spaces after the "!" of titles
** Blank line after titles
** Sentence Case for Heading Text
* Make use of wikitext-example-without-html macro for the examples
* Make use of .tip macro for tip
* Some phrasing improvements and clarifications
2017-12-12 17:53:37 +00:00
Jermolene
cd32b627b3 Add .tid extension to "Introduction to Lists" 2017-12-12 17:51:25 +00:00
Jermolene
6928c411d6 Fix another typo from 38fbc4f35a 2017-12-12 17:51:08 +00:00
twMat
2b21b74c50 New docs: Introduction to Lists (#3051)
[ref](https://groups.google.com/forum/#!topic/tiddlywiki/oP3r1yx4C14)
2017-12-12 17:30:18 +00:00
Tobias Beer
7ba9cbc052 Add hint for field list dropdown (#3040)
fixes #2983

@twMat: I know you can do it yourself, right here, and so you might. ;-)
2017-12-12 17:27:39 +00:00
Jermolene
451150ebd6 Fix typo from 38fbc4f35a 2017-12-12 15:56:56 +00:00
Jermolene
56940e49c2 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2017-12-12 13:58:30 +00:00
Jermolene
920d225f37 Improve XLSX docs 2017-12-12 13:58:26 +00:00
Tobias Beer
a2c764d407 enable doc contributions for dev (#3047)
* enable doc contributions for dev

fixes #2921

* involves changes to boot.js to properly build OriginalTiddlerPaths on
Windows
* added ContributionBanner
* added Sources tab to info panel
* updated tiddlywiki.info for dev

* normalize path separator to posix for windows

* more generically transform to posix
2017-12-12 13:50:33 +00:00
Tobias Beer
feace8d26b added gotcha examples to Filter Expressions and rephrased a little for simplicity (#3055) 2017-12-12 13:46:12 +00:00
Jermolene
38fbc4f35a Minor tweaks to #3052 2017-12-12 12:30:34 +00:00
Tobias Beer
661bff4f5b extend LinkWidget to enforce classes (#3052)
* extend ListWidget to enforce classes

Previously, the undocumented *class* attribute only allowed to specify
additional classes to be set.

Especially for use within a LinkCatcher, you can now apply / enforce
only the custom classes and avoid any of the defaults being applied
depending on the link target.

This will allow to implement #1161 more gracefully.

* use setClass insted of exclamation mark syntax

update docs & fix typo in docs
2017-12-12 12:25:06 +00:00
Jermolene
4d2d202935 Add link to Uwe Stuehler's plugins 2017-12-12 10:50:15 +00:00
Aurelien Navarre
9b2d916946 Clarify current limitations on node.js and TiddlyWiki (#1227) 2017-12-03 21:47:37 +00:00
twMat
be4c108ed9 Remove ToC 3d level boldness (#3035)
Ref issue #1627
2017-12-03 18:47:15 +00:00
BurningTreeC
abec14af9b update TiddlerInfo.multitids (#3030)
some typos and small changes for better understanding
2017-12-02 13:05:39 +00:00
Jermolene
b02ee28968 Add Slovenian translation 2017-11-20 22:00:20 +00:00
Jermolene
c507d4e2dd Use https for YouTube 2017-11-18 19:53:52 +00:00
Mario Pietsch
525e07f259 added new "file-backups" AddOn resource, Added video HowTo's link to WebDav saver info. (#3014) 2017-11-16 16:29:31 +00:00
Jermolene
bd2ff7a4c9 Docs update: add link to Termux for Android docs 2017-11-15 17:41:47 +00:00
Marxsal
e64c42e661 Warn to use 'split' , not 'preg_split' (#3013)
Should have warned user to look for 'split' instead of 'preg_split'
I've retained the new tags, etc. that were put in earlier today
by Jeremy.
2017-11-15 17:24:28 +00:00
Jermolene
06fa483b7d Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2017-11-15 16:38:03 +00:00
Jermolene
ca2225b940 Doc: Explains how to fix preg_split error in store.php
Fixes #3011
2017-11-15 16:37:59 +00:00
Marxsal
c65ca8060c Doc: Include text field in Custom Journal Button (#3012) 2017-11-15 16:35:54 +00:00
Jermolene
5acfc012cb Docs: Add link to Riz's Tekan Kanban 2017-11-15 16:12:47 +00:00
Jermolene
0b3e637880 Update version for 5.1.16-prerelease 2017-11-15 16:12:30 +00:00
Jermolene
54b1e284fa Docs updates
Missing .tid extensions were causing those tiddlers to be mis-read.
2017-11-14 12:46:21 +00:00
Jermolene
8d00d6cb22 Version number update for 5.1.15 2017-11-14 12:33:09 +00:00
Jermolene
031fd8fb22 Readme updates 2017-11-14 12:32:33 +00:00
Jermolene
304eb99d41 Docs updates 2017-11-14 12:31:35 +00:00
Jermolene
021b5e072b Updated GettingStarted material about saving changes 2017-11-13 14:00:01 +00:00
Jermolene
2fd2ae993e Add buttonTemplate parameter to tabs macro 2017-11-13 13:56:13 +00:00
Marxsal
464ef889f9 Doc-Resource: Dropboard by Reid Gould (#3009)
* Doc-Resource: Dropboard by Reid Gould

* Minor date tweak
2017-11-13 13:41:10 +00:00
Jermolene
0224da34a9 Preparing for 5.1.15 2017-11-11 14:56:03 +00:00
Jermolene
29364cbd08 Change http://*.tiddlywiki.com/* to https:// 2017-11-11 11:56:20 +00:00
Bram Chen
6b575f5404 Update chinese translations (#2978)
* Update chinese translations for revises in #2803

* Revise chinese help texts for "save" and "render" command

* Update chinese help texts for "import" and "load" commands

* Revise chinese help texts for "load" command
2017-11-11 09:43:27 +00:00
Jermolene
9e90be47bf Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 2017-11-11 09:41:58 +00:00
Jermolene
7abfa9e2e7 Fix date of Firefox Apocalypse
Thanks CodaCoder
2017-11-11 09:41:53 +00:00
Sylvain Naudin
a097b259d7 Update Firefox Apocalypse.tid (#3007)
Type Exploer > Explorer
2017-11-10 21:03:00 +00:00
Jermolene
f366a74f68 Fix problem with SVG background images that include parenthesis
See discussion https://groups.google.com/d/topic/tiddlywiki/GEmh0rwAHcY/discussion
2017-11-10 17:29:28 +00:00
Jermolene
c5b478efe7 Docs updates
Including a new tiddler about the Firefox Apocalypse
2017-11-10 14:39:15 +00:00
Jermolene
b4ec32ca70 Export transliteration pairs
Just in case plugins want to use them
2017-11-10 14:37:31 +00:00
Jermolene
c4e2793b06 Docs updates 2017-11-09 16:07:01 +00:00
Jermolene
967b123b51 Fix problem with new tiddler fields cascade
Fixes #2821

The problem was that an empty configured text field for new journals was overriding any value provided in the existing tiddler.
2017-11-08 08:41:00 +00:00
Jermolene
ae8fb3e98b Add some resource links 2017-11-07 18:57:51 +00:00
Jermolene
95b84dd0ca Use filename as default title when loading tiddlers under Node
Fixing this regression gets the `classictools` plugin working again
2017-11-05 14:14:00 +00:00
Jermolene
6555fecbf3 Release note updates and other docs tweaks 2017-10-31 17:25:21 +00:00
Jermolene
d7a6816307 Add jsonstringify operator 2017-10-29 15:53:53 +00:00
Jermolene
e646d207c3 Add "external-attachments" plugin
This plugin provides support for importing tiddlers as external attachments -- it only works on platforms such as TiddlyDesktop that provide the required "path" property with imported files.

Using the plugin means that instead of importing binary files as self-contained tiddlers, they are imported as "skinny" tiddlers that reference the original file via the ''_canonical_uri'' field. This reduces the size of the wiki and thus improves performance. However, it does mean that the wiki is no longer fully self-contained
2017-10-11 17:54:03 +01:00
Jermolene
518f57f4bb Add new hook "th-importing-files" 2017-10-11 17:52:37 +01:00
Jermolene
7bdaabce78 Browse widget: add support for nwdirectory attribute 2017-10-03 21:52:51 +01:00
Jermolene
49fad6dae9 Docs tweaks 2017-10-03 21:00:36 +01:00
Jermolene
ce5865ba16 Updated readme 2017-10-03 20:44:05 +01:00
Jermolene
afea0ba9bf Further updates for Greek translation
Thanks Stratos Aravias
2017-10-03 20:43:40 +01:00
Jermolene
1c16c494eb Updated Greek translation from Stratos Aravias 2017-09-27 17:59:27 +01:00
Jermolene
05a3d9a302 Syncer: allow logging to be disabled
We don't want the syncer used by the savetrail plugin to be logging
2017-09-26 17:10:57 +01:00
Jermolene
1dcc8c99e5 Ensure we don't colour browser logs under nw.js
Under nw.js $tw.browser and $tw.node are both true...
2017-09-22 15:18:11 +01:00
Jermolene
e5f96d6415 Update Beaker Browser docs 2017-09-20 18:13:32 +01:00
Jermolene
73953080e3 SaveTrailPlugin: Fix syncer UI interactions
The syncer used by the savetrail plugin shouldn't perform any UI interactions
2017-09-20 16:28:11 +01:00
Jermolene
59505449d2 Docs update 2017-09-20 14:12:09 +01:00
Jermolene
9ada7a0bb1 Ensure fieldmangler widget always updates modifier/modified fields
Fixes #2969
2017-09-20 14:09:18 +01:00
Jermolene
06f70d0a03 Update release note 2017-09-20 11:48:13 +01:00
Jermolene
ce3832e275 Docs tweaks 2017-09-20 11:48:06 +01:00
Jermolene
148a4eea4d Persian translation: Add missing RTL flag 2017-09-17 19:27:32 +01:00
Jermolene
3c62ef0d71 Add Persian (Iran) translation
Thanks to @amirography
2017-09-16 17:01:58 +01:00
Xavier Cazin
db8fd9ea74 Amendments to warnings upon loading content via _canonical_uri (#2796) (#2803)
* fr-FR translation of additional error strings

* include SaveTrail

* Amendments to the warnings upon loading content via _canonical_uri

* Typo: add a missing THE

* Clarification on why the browser might refuse to load external content
2017-09-16 15:34:26 +01:00
Bram Chen
8ee66d617f Doc typo (#2818) 2017-09-16 15:33:26 +01:00
twMat
a8622cdd72 Add missing macro bracket (#2816)
Missing closing bracket caused confusing text.
2017-09-16 15:33:08 +01:00
Bram Chen
46453d23cb Add chinese help texts for "save" and "render" commands (#2975) 2017-09-16 15:30:37 +01:00
Arlen22
c069d48a2a Remove URI encoding from PUT saver (#2974)
Remove URI encoding from PUT saver and let the browser handle it as necessary. This seems to be the normal way of doing things. We have confirmed that several WebDAV servers do not expect the file names to be double-encoded.
2017-09-16 15:30:13 +01:00
Thomas Elmiger
489f9a0079 days filter – docs and examples optimisations (#2972)
* Replacement icon stopwatch on

As discussed in issue #2690

* Replacement icon stopwatch off

As discussed in issue #2690

* Added missing tag "Resources" (Community Resource)

* Tried to make a sentence clearer

CamelCase words are NOT joined with hyphens (copy-paste error?). 
Copied "directly" from the line below to make the meaning even clearer.

* Does deleting make the conflict go?

* Recreate deleted file with updated text

* days filter example should show highlights

- show a highlight using a longer timespan (180 days)
- added a second highlight to demo timespan with start AND end in the past
- better readability

* days Operator explanation optimisations

- typo
- readability (explain { positive | negative } first; remove duplication)

* Remove additional blank line

* Remove whitespace after save button

When the save button was not the last edit button (tested by moving to another place via control panel > Appearance > Toolbars > Edit Toolbar by drag-and-drop) then we got additional spacing due to whitespace in the resulting HTML after the button. This is a fix for that, I discovered while developing additional edit buttons.
2017-09-16 15:29:44 +01:00
Mateusz Piotrowski
4e278d0cd7 Add missing wiki directory to command example (#2950)
All the other commands seem to assume that the user is not in the wiki directory, but rather in the parent directory: `tiddlywiki mynewwiki --init server` and `tiddlywiki mynewwiki --server`. This is why `tiddlywiki --build index` fails. A solution to this problem is to add the wiki name to the command.
2017-09-16 15:04:27 +01:00
Jermolene
7a714da9cb AWS Plugin: Fix crash when attempting to save a missing tiddler 2017-09-15 14:15:56 +01:00
Jermolene
24c325611b AWS Plugin: More flexible specification of the output type 2017-09-12 16:04:35 +01:00
Jermolene
35a7a66b01 Add "save" and "render" commands
A first pass at fixing #2973 - comments are welcome. If everybody is
happy, the next step is to deprecate the existing
rendertiddler(s)/savetiddler(s) commands and replace them in all
examples and tiddlywiki.info files with the new equivalents.
2017-09-12 16:04:07 +01:00
Jermolene
378e00aee8 Give a warning message for missing plugin.info files 2017-09-12 15:53:52 +01:00
Jermolene
11da58355e Docs update for LinkWidget 2017-09-07 15:48:11 +01:00
Jermolene
aa417fe899 Add new "lookup" filter 2017-09-07 15:48:00 +01:00
Jermolene
1b7d9d65f4 Only use colour output if we're on a terminal
And not if we’re running on AWS Lambda, for instance
2017-09-07 15:47:36 +01:00
Jermolene
5a5d648127 AWS Plugin: improved error handling 2017-09-07 10:55:42 +01:00
Jermolene
51b1ead5c9 Add more colour to command line output 2017-09-04 14:55:12 +01:00
Jermolene
50b0004481 Docs fix: Remove erroneous "class" attribute from tiddler widget
The tiddler widget doesn’t generate any DOM nodes, and so wouldn’t have
anything useful to do with a “class” attribute in any case.
2017-09-01 11:13:39 +01:00
Jermolene
08ae7321c1 AWS Plugin: Lambda should return list of files written to S3 2017-08-29 21:41:50 +01:00
Jermolene
06ea4060cb LinkWidget: Add support for tv-filter-export-link
This change makes it possible to perform the conversion from target
tiddler title to `href` value as a filter expression (previously a
JavaScript macro was needed to use the tv-get-export-link variable)
2017-08-28 11:06:21 +01:00
Jermolene
2381fb5312 AWS Plugin: improve s3-savetiddlers and s3-rendertiddlers
Instead of the simple ‘prefix’ and ‘extension’ parameters, we now
accept a filename filter. As well as allowing prefixes and suffixes to
be added via filter operators, we can also transform the title
2017-08-28 10:31:27 +01:00
Jermolene
90c1c6242e Fix typo 2017-08-28 10:29:36 +01:00
Jermolene
5cdf86b307 Add more transliterate pairs
Should help avoid me accidentally committing files with accents in
their titles
2017-08-26 23:17:53 +01:00
Jermolene
d3a2cfb2bc Move $tw.utils.transliterate() into its own file 2017-08-26 23:11:22 +01:00
Jermolene
8293a77c6e Add "mode" attribute to View widget
Useful for controlling how the content is parsed
2017-08-24 20:58:08 +01:00
Jermolene
94f9929c80 AWS Plugin: Add savetype for s3-savetiddler(s) command 2017-08-23 10:31:28 +01:00
Jermolene
b6f948b61e Add another canonical_uri template
This one doesn’t include a subdirectory
2017-08-19 10:31:42 +01:00
Jermolene
2ebf4285e8 AWS Plugin: Add s3-savetiddlers command 2017-08-16 18:10:52 +01:00
Jermolene
7e88dd788c Improve read-only logic
We also need to hide buttons from the “more” dropdowns
2017-08-15 15:49:25 +01:00
Jermolene
3fb8d9b848 Fix tab border radius
The default button border radius was showing through
2017-08-15 15:48:54 +01:00
Jermolene
509a474f4a AWS Plugin: Add s3-load and s3-rendertiddlers commands
With these commands we can do static rendering straight to an S3 bucket
2017-08-15 15:48:12 +01:00
Jermolene
1088b01f96 Fix typo: MathCell is by Stephen Kimmel 2017-08-13 17:30:36 +01:00
Jermolene
523280362b Use UI button tiddler titles as CSS classes
Which enables us to do a cleaner readonly theme
2017-08-08 18:25:45 +01:00
Marxsal
68e17f92de Restore ability to use sub-filter with image-picker macro (#2940) 2017-07-24 12:41:50 +01:00
Adrian Morosanu
34404dcfc9 Fix for automatic CamelCase linking (#2947) 2017-07-24 12:41:26 +01:00
Bram Chen
687cb226f5 Update ImportCommand.tid (#2944)
Corrected caption
2017-07-20 16:39:46 +01:00
Bram Chen
9ca9c188c9 Update chinese help texts (#2945)
* update help texts of load command
* add help texts for new import command
2017-07-20 16:39:07 +01:00
Jermolene
8fc80cbf3c Add missing version banners to updated docs 2017-07-18 16:15:46 +01:00
Jermolene
3a73d2e4ee Update release note 2017-07-18 16:00:27 +01:00
Jermolene
9ac784a468 Update text-slicer icon and wording 2017-07-18 15:44:27 +01:00
Jermolene
e471bd54d4 Update Stanford JavaScript Library to 1.0.7 2017-07-18 15:42:35 +01:00
Jermolene
a4d919f45c Extend browse widget with deserializer attribute
Along the same lines as 596dfa1d50
2017-07-18 15:32:50 +01:00
Jermolene
0d0b841b5c Drop the mobile drag and drop plugin from the prerelease 2017-07-12 17:19:15 +01:00
Jermolene
e951047461 Add import command
Unlike load, allows manual control of the deserializer to be used
2017-07-12 17:14:27 +01:00
Jermolene
c6e4b7a123 Update load command docs 2017-07-12 17:13:59 +01:00
Jermolene
5dd3d97760 Extend the set widget with tiddler, field and index attributes 2017-07-12 16:59:56 +01:00
Jermolene
c25a1eef33 Remove obsolete code and update docs 2017-07-12 16:50:50 +01:00
Jermolene
f59809e9a4 Use "whitespace trim" to improve spacing and legibility of view toolbar buttons
Previously, the standard toolbar buttons exhibited uneven spacing due
to the vestigial whitespace.
2017-07-12 16:47:52 +01:00
Jermolene
d966583854 Add new "\whitespace" pragma
This will allow us to simplify some of the more unreadable core
wikitext tiddlers…
2017-07-12 16:46:13 +01:00
Jermolene
596dfa1d50 Allow manual selection of deserializer for dropping or importing files 2017-07-12 16:42:16 +01:00
Jermolene
41b6c5c088 Fix some toolbar margin issues
Some toolbar buttons are nested inside more than one span
2017-07-11 14:42:05 +01:00
Jermolene
95ef1c4580 Fix linkcatcher recursion problem
Using action-navigate within the “actions” attribute of the linkcatcher
widget would otherwise trigger the navigation handler recursively.
2017-07-10 14:43:43 +01:00
Bram Chen
7bca39842f Update chinese help texts for "fetch" command (#2930) 2017-07-09 21:09:50 +01:00
Jermolene
dc295b2536 LinkCatcherWidget: Add variable containing target tiddler 2017-07-07 12:16:14 +01:00
Jermolene
16d867d380 Release note update 2017-07-05 14:08:16 +01:00
Jermolene
69528093d9 Update fetch commands to respect 302 redirects
Astonishingly, node.js appears to require us to do this manually…
2017-07-05 10:58:35 +01:00
Bram Chen
17fbe49f2b Add chinese translations for Settings/EditorFontFamily (#2928) 2017-07-04 09:16:51 +01:00
Jermolene
a346888213 Add first release of AWS plugin
Tools for working with Amazon Web Services:

* Templates for saving a TiddlyWiki as a single JavaScript file in a
ZIP file that can be executed as an AWS Lambda function. In this form,
TiddlyWiki is a self contained single file containing both code and
data, just like the standalone HTML file configuration
* Commands that can be used to interact with AWS services, under both
the Node.js and Lambda configurations of TiddlyWiki
2017-07-03 20:34:58 +01:00
Jermolene
c179dc93cb Add "raw-file(s)" options to "fetch" command 2017-07-03 16:52:10 +01:00
Marxsal
4db950cc45 Add ability to now macro to return same UTC string used in date fields (#2884)
* Add ability to now macro to return same UTC string used in the modified and created fields.

* Revert "Add ability to now macro to return same UTC string used in the modified and created fields."

This reverts commit 7b6ad7db4a.

* Mods to formatDateString to adjust displayed date to UTC for [UTC]
format. Corresponding doc changes, and optimization for special
case.
2017-07-01 18:09:16 +01:00
Jermolene
1919f0e9b0 Update release note 2017-07-01 13:46:24 +01:00
Jermolene
ccac0258af Apply URL decoding in download saver
document.location gives us an URL encoded version of the original
filename, so we decode it to recover the original filename for saving.

Fixes #2828

Fixes #2819
2017-07-01 12:39:25 +01:00
Xavier Cazin
a7b57d7f97 allbefore:include should be the identity function when applied to 1st item (#2842)
* fr-FR translation of additional error strings

* allbefore:include should be the identity function when applied to the 1st item
2017-06-29 18:02:33 +01:00
Rob Hoelz
847727146e Fix issue 2850 (#2852)
* Trim tiddler titles imported via JSON

Otherwise, it's possible to create a tiddler with a trailing space (or a
leading one, I suppose) in its title.  TiddlyWiki, in general, trims
titles before operating on a tiddler, so having a tiddler with a
trailing space ends up making that tiddler, for all intents and
purposes, uneditable.

Fixes GH #2850

* Signing the CLA
2017-06-29 17:07:23 +01:00
twMat
b71583e9d7 TiddlyWikiClassic.tid - remove dead link (#2853) 2017-06-29 17:05:04 +01:00
twMat
d7315126e7 TabsMacro.tid - remove character that causes problem (#2856)
The example link at bottom was not visible in correct way
2017-06-29 17:04:38 +01:00
Thomas Herlea
6091b12eb0 Corrected "currentVariable" to "currentTiddler". (#2859) 2017-06-29 17:04:13 +01:00
Thomas Herlea
f9e1188b3a Properly closed macro call; fixed "any links it" -> "any links to it". (#2860) 2017-06-29 17:03:33 +01:00
Thomas Herlea
4759f73770 Added missing "tags" option to the railroad diagram and put the categories in alphabetical order. (#2861) 2017-06-29 17:03:10 +01:00
Mario Pietsch
e9173b7a71 added several missing tags, visual refactoring, improves readability. (#2865)
* added several missing tags, visual refactoring, improves readability.

* better wording
2017-06-29 17:02:00 +01:00
Mario Pietsch
cee7baa183 Make editor font configurable, so user can easily change it to eg monospace font (#2867) 2017-06-29 16:55:49 +01:00
Jermolene
37cbaa08f1 Docs for #2901 2017-06-29 09:05:11 +01:00
saqimtiaz
48e0186ba9 Added th-editing-tiddler hook in handleEditTiddlerEvent. A plugin can use the hook to return false and prevent editing or provide alternative editing options. (#2901) 2017-06-29 08:55:43 +01:00
Jermolene
2d0ac7245f Docs and tweaks for #2904
@saqimtiaz I added a dash to separate the words in the variable names
for consistency with other core variables.
2017-06-29 08:47:26 +01:00
saqimtiaz
5d74513a97 Navigator now sets variables for the story list and history list, that are available to child widgets. Needed in a mutiple-story tiddlywiki. (#2904) 2017-06-29 08:36:20 +01:00
cjhunt
5892c4d8bc Update Saving on iPad_iPhone.tid (#2917)
* Update Saving on iPad_iPhone.tid

Changing to reference Quine in place of TWEdit

* Update Saving on iPad_iPhone.tid

Fixing errors....! Thanks!!

* Update Saving on iPad_iPhone.tid

Removed whitespaces....
2017-06-28 18:05:33 +01:00
Daniel Rodríguez Rivero
6085b1171a Update dev docs for saver modules (#2919)
* Update Saver.tid

Stupid typo corrected

* Update Saver.tid

Fix callback documentation in case of successful save.
2017-06-28 18:04:52 +01:00
Jermolene
bf51acd8d6 Docs tweaks for #2922 2017-06-28 17:58:58 +01:00
Daniel Rodríguez Rivero
1905a3f343 Add dev docs for notification mechanism (#2922)
Documentation about the notifier module. I didn't say any, so I have created it.

Regards
2017-06-28 17:51:25 +01:00
Jermolene
96ff7ab86f Docs for #2925 2017-06-28 17:50:19 +01:00
Adrian Morosanu
f75e97f308 Create the new "tree" global macro (#2925)
* Create the "tree" global macro file (tree.tid)

* Added styles for the new "tree" global macro

* Update Explorer tab

* Cleaning the macro of unneeded code

I have chosen to keep the slash suffix in the branch node titles to go along with the rest (e.g. root node), so the "clean-chunk" macro isn't needed anymore.

* Minor fix
2017-06-28 17:44:15 +01:00
Jermolene
d5b50e0854 Update 5.1.15 release note 2017-06-28 16:06:19 +01:00
Jermolene
efd0c270d7 Docs: Update link to Beaker instructions 2017-06-28 16:06:07 +01:00
Jermolene
c40fd7f7f2 Move Beaker docs to GettingStarted 2017-06-27 15:00:43 +01:00
Jermolene
a5e565e198 Tweaks for #2918
A couple of fixes:

* Fixed problem with loading saver in a file URI within Beaker
* Fixed problem when saving to a directory-style URI with an implicit
“/index.html”
* Switched to double quotes for strings
2017-06-24 22:30:26 +01:00
Mario Pietsch
ef9efbc399 Fix for beaker 072 - new dat API (#2918)
* initial version that works again with beaker 0.7.2

* activate path again
2017-06-24 21:54:44 +01:00
Jermolene
cf9085b5ce Stop syncing the storylist
Reverting e3544ff3c2
2017-06-24 17:59:28 +01:00
Jermolene
534f5e7c13 Revert "Add text/vnd.tiddlywiki to system tiddlers within plugins that should be wikified (c.f. #2883)"
This reverts commit 7436fc7374.
2017-06-24 17:48:32 +01:00
Jermolene
a4989f5c4d Revoke #2814
The requirement to whitelist system tiddlers that need wikifying was
too burdensome
2017-06-24 17:48:18 +01:00
saqimtiaz
d89010752a Modified handleClickEvent to send original event data with tm-navigate event. Fixes 2889 (#2900) 2017-06-14 18:16:13 +01:00
saqimtiaz
de81984973 Signing the CLA (#2899)
Signing the CLA ahead of upcoming pull requests.
2017-06-14 18:15:26 +01:00
Bram Chen
58234b755d Add chinese translations for Explorer/Caption (#2890) 2017-06-10 18:48:37 +01:00
Marxsal
ab064e15a9 MathCell - community document ref (#2877) 2017-06-09 16:48:06 +01:00
Jermolene
c97458f0d4 Tweaks to 9ea178e327
Making it clearer that the private browsing problem is fixed in v2.0.2,
and that a prompt is coming.
2017-06-09 16:28:40 +01:00
Marxsal
9ea178e327 Saving with TiddlyFox -- Additional Doc.s for TF 2.0 (#2879) 2017-06-09 16:26:19 +01:00
Jermolene
a4035d3424 Coding style tweaks for #2885 2017-06-09 16:21:39 +01:00
Arlen22
0bc325025a Add a callback to $tw.boot.boot() (#2885)
* Add a callback to $tw.boot.boot()

* Move callback into the options object

* Update boot.js
2017-06-09 16:20:12 +01:00
Marxsal
18cd37c2de Doc: getindex filter example fix (#2888)
The 2nd filter example is broken and yields no results,
probably because it doesn't see shadow tiddlers.
Added 'all' filter to bring in actual palettes.
2017-06-09 16:01:06 +01:00
Jermolene
7436fc7374 Add text/vnd.tiddlywiki to system tiddlers within plugins that should be wikified (c.f. #2883) 2017-06-09 15:52:19 +01:00
Jermolene
b99a1b6496 Remove extraneous text/vnd.tiddlywiki from system tiddlers in light of #2883
There’s no special reason for these tiddlers to be viewed wikified
2017-06-09 15:42:32 +01:00
rubaboo
881e834f89 Wikify system tiddlers if type=text/vnd.tiddlywiki (#2883)
* Wikify system tiddlers if type=text/vnd.tiddlywiki

+ update CLA with my new handle

* Add filter missed in the previous commit
2017-06-09 15:34:42 +01:00
Marxsal
f2f5afa106 Doc: Adding comment to release notes re archived releases (#2882)
* Doc: Adding comment to release notes to indicate where archived releases can be found.

* Adding note about node.js to Release tiddler and Installing on Node.js tiddler
2017-06-09 15:33:24 +01:00
Jermolene
9c57ebb05d Minor tweaks to new tiddler Explorer 2017-06-09 15:31:55 +01:00
Adrian Morosanu
1e9d214f67 New System Explorer tab in sidebar (#2881)
* Create System-Explorer.tid

* Fixes problem with syslink parser
2017-06-09 15:22:09 +01:00
Jermolene
4b9fcdf958 Enable 'edit' button in body of missing tiddler template 2017-06-09 15:20:45 +01:00
Jermolene
432542bbcc Don't throw errors when hitting limits of the fakedom 2017-06-09 15:20:45 +01:00
Adrian Morosanu
1733a2c39c Signing the CLA (#2880) 2017-06-09 15:17:28 +01:00
Jermolene
e3544ff3c2 Don't sync $:/StoryList
Otherwise, multiple users logged into the same server overwrite one
anothers story list.

@danielo515 would this change have any impact on NoteSelf?
2017-05-04 17:29:41 +01:00
Jermolene
3edf3892e8 Fix has filter docs
See discussion
https://github.com/Jermolene/TiddlyWiki5/commit/6085936475851a8f93a05a52
f9e7ddcb066c6569#commitcomment-21966472

Thanks @telmiger
2017-05-03 18:33:42 +01:00
Jermolene
683285d449 Display "contents" tab for plugins that lack any information tabs
Fixes #2841
2017-04-30 09:59:41 +01:00
Jermolene
93771fdf27 Show raw text (instead of wikified) of system tiddlers
Fixes #2814
2017-04-28 09:41:27 +01:00
Jermolene
684e4feff5 Add link for TWEUM2017 2017-04-28 09:40:58 +01:00
Jermolene
cb0ccb22b1 Add thumbnail for TWEUM2017 microsite 2017-04-27 08:59:19 +01:00
Jermolene
982792a22a Prep for 5.1.14-prerelease 2017-04-26 18:25:21 +01:00
Jermolene
e631e59f00 Missing links in 5.1.14 release note 2017-04-26 18:24:32 +01:00
Jermolene
17110169a9 Update prerelease 2017-04-26 18:24:02 +01:00
Jermolene
384e5b7b63 Version number update for 5.1.14 2017-04-26 17:03:35 +01:00
Jermolene
5e317161f6 Update readmes 2017-04-26 17:03:01 +01:00
Jermolene
39e8a83c4c Prepare for release of 5.1.14 2017-04-26 17:02:06 +01:00
Jermolene
7890440569 Improve organization for the 5.1.14 release notes 2017-04-26 16:26:33 +01:00
Jermolene
02331365f0 Update plugin library location 2017-04-26 14:35:24 +01:00
Jermolene
48fe208f0c Update release note 2017-04-26 14:35:16 +01:00
Jermolene
a613ffb6a3 Update contributor list in 5.1.14 release note 2017-04-26 14:35:03 +01:00
Jermolene
c0f7f18f0a Update KaTeX to v0.7.1 2017-04-26 14:34:17 +01:00
Jermolene
e18b6bf5c4 Docs typo 2017-04-24 16:27:10 +01:00
Jermolene
31523a1e7b Add empty link to prerelease tiddler
Thanks @twMat
2017-04-24 16:26:56 +01:00
Jermolene
4b780899a5 Move SJCL license file into core plugin
It was added as a separate system tiddler, but that means updating a
lot of filters to add and exclude it as appropriate (as we do with
$:/library/sjcl.js itself)
2017-04-23 09:53:18 +01:00
Jermolene
04f402b974 Fix drag and drop issue on iOS 2017-04-21 16:27:44 +01:00
Jermolene
aa2f240936 Update to latest version of ios-drag-drop.js 2017-04-21 08:22:58 +01:00
twMat
d99e0c9f97 Edit getindex Operator.tid op-purpose (#2837)
Other `op-` fields should probably also be added.
2017-04-20 16:20:40 +01:00
Jermolene
2a1fb964d5 Reformatting "wikilabs" resource link title 2017-04-19 15:56:41 +01:00
Mario Pietsch
5050829e63 add wikilabs resource link tiddler (#2834) 2017-04-19 15:54:37 +01:00
Jermolene
6c4c1a984b Make help panel scrollbars be optional 2017-04-19 13:26:22 +01:00
Jermolene
53181d2ab8 Missed parenthesis
Thanks @twMat
2017-04-19 13:25:31 +01:00
Mario Pietsch
f22547fa3a german text updates (#2830) 2017-04-18 21:01:58 +01:00
Jermolene
3693b4786d Dutch translation update
Thanks @gernert
2017-04-18 20:58:34 +01:00
Jermolene
cd16573f20 Rephrase the Google Analytics plugin pages 2017-04-18 18:48:17 +01:00
Jermolene
0aaebe9757 Revert #2814
As per the discussion on the ticket, we’ll revisit this after 5.1.14
2017-04-18 08:15:25 +01:00
Jermolene
379e780e80 Release note update 2017-04-17 18:46:02 +01:00
Jermolene
0a2c3d0c3c Add quote to HelloThere 2017-04-17 17:54:17 +01:00
Jermolene
202ffd9c51 Add big block quote style 2017-04-17 17:53:19 +01:00
Jermolene
2e0c119d5b Add Tiddler.getFieldStrings() method 2017-04-17 17:04:15 +01:00
Jermolene
f03feb69a9 Add elementTag parameter to list-tagged-draggable macro 2017-04-17 16:51:12 +01:00
Jermolene
40a61ff2e7 The last batch of drag and drop docs 2017-04-06 10:15:22 +01:00
Bram Chen
b9a8c3c01d Update chinese translations (#2810)
* Add chinese translations of hint for drag and drop to Toolbars/*/Hint in control panel

* Add chinese translations for Basics/NewJournal/Text/Prompt
2017-04-05 11:23:07 +01:00
Jermolene
c25a44756b Add new journal text to control panel
Making #2821 a bit more accessible
2017-04-04 18:16:37 +01:00
Jermolene
83497c13d9 Fix whitespace and missing closing tag issues in #2821 2017-04-04 18:15:49 +01:00
Richard Decal
ec0fa2f932 Added ability to change text template of NewJournal (#2821)
* adding custom text field to new-journal

* fixed spacing

* signing the CLA
2017-04-04 18:06:49 +01:00
Jermolene
773ef6adfb Docs update 2017-04-02 17:51:45 +01:00
Jermolene
b1e0fa4a34 More drag and drop docs 2017-04-02 17:51:24 +01:00
Jermolene
aa1a8cf2eb Docs typo 2017-03-29 10:19:49 +01:00
Jermolene
8802015f1a Docs updates
Starting to document the new drag and drop stuff
2017-03-29 10:19:42 +01:00
Jermolene
50268d9231 Killer typo 2017-03-29 09:22:51 +01:00
Jermolene
b37178dda1 Fix download saver for Safari 10.1
Safari now finally supports the ‘download’ attribute for the anchor
tag, meaning that the download saver works properly.
2017-03-29 09:21:49 +01:00
Jermolene
1e106a8f3d Better handling of dropeffect 2017-03-28 15:09:36 +01:00
Jermolene
f3cab3753e Don't set draggable property for links 2017-03-28 13:05:00 +01:00
Jermolene
303f255fcd Avoid wikifying system tiddlers
Fixes #2814
2017-03-27 10:00:31 +01:00
Jermolene
af45d509eb Adjust capitalisation of X-UA-Compatible meta tag
The docs suggest that the capitalised form is correct
2017-03-27 10:00:05 +01:00
Jermolene
d3fe4f600a Partially fix drag and drop on IE11
These changes allow drag and drop to work with one issue: <a> links are
not draggable; draggable divs, spans, buttons etc. seem to work fine.
There’s some issue with IE11 that I don’t understand.

For testing, you can force links to become spans by changing line 64 of
$:/core/modules/widgets/link.js to:

	var domNode = this.document.createElement("span");
2017-03-27 09:59:40 +01:00
Jermolene
0276b69244 Remove double quotes from copyright message
Needed because we transclude the copyright message into a head meta
tag. IE11 was complaining; other browsers didn’t seem to mind.
2017-03-27 09:57:17 +01:00
Jermolene
4891732481 Adjust listops widget to only modify tiddler if tags have changed
We do this so that we don’t accidentally modify shadow tiddlers when we
drag them to reorder them within their tag parent. Otherwise, moving a
toolbar button like $:/core/ui/Buttons/permaview in the control panel
will override the shadow tiddler.
2017-03-24 09:57:22 +00:00
Jermolene
d9ed01b621 Fix: removing other tags during drag and drop 2017-03-24 09:55:42 +00:00
Jermolene
0493208a23 mobiledragdrop: attempt to fix scrolling issues on ios
See https://github.com/timruffles/ios-html5-drag-drop-shim/issues/77
2017-03-23 21:16:01 +00:00
Jermolene
0efed8335d mobiledragdrop: Enable "holdToDrag"
Hopefully, this will make links clickable again, and reduce accidental
dragging while scrolling.
2017-03-23 21:15:33 +00:00
Jermolene
1f860bd04e Fix problem with dragging links 2017-03-23 17:52:15 +00:00
Jermolene
8744d77f88 Add mobiledragdrop shim plugin
This seems to work quite well for me - cc @xcazin
2017-03-23 17:03:35 +00:00
Jermolene
24f29ac605 Add support for wikified raw markup tiddlers 2017-03-23 17:02:37 +00:00
Jermolene
b1ed77d6b8 Switch drag image to use draggable DOM node
We’ll still support dragging pills, but dragging the DOM node image
seems to look better in most situations.
2017-03-23 17:02:26 +00:00
Jermolene
8f1114960a Refactor draggable stuff for easier reuse
And in the process, make the button widget draggable.

Unfortunately, Firefox has a bug that prevents buttons from being
dragged (see https://bugzilla.mozilla.org/show_bug.cgi?id=568313 and
https://bugzilla.mozilla.org/show_bug.cgi?id=646823). So we have to use
the “tag” attribute to make it use a different element.
2017-03-23 14:23:33 +00:00
Jermolene
3a00d2eea3 Allow drag and drop in toolbar layout in control panel 2017-03-20 22:29:03 +00:00
Jermolene
5ed7ade44f Add some handy drag-and-drop macros
And refactor the tag template to use one of them
2017-03-20 22:11:06 +00:00
Jermolene
bea33efd63 Fix problem with dragging text snippets 2017-03-20 22:03:28 +00:00
Jermolene
f4656b0f25 Add support dragging to the bottom of a list 2017-03-20 22:02:55 +00:00
Jermolene
9bad99d14e Draggable: properly stringify tiddler titles
Thanks @twMat
2017-03-20 22:01:51 +00:00
Jermolene
3197f9a639 Add select all/none checkbox to $:/Import
Prompted by this discussion:
https://groups.google.com/d/topic/tiddlywiki/MYBWCxOc_gM/discussion
2017-03-20 22:00:14 +00:00
Jermolene
eba1c3c160 Improve support for drag and drop
Documentation TBD
2017-03-19 19:33:56 +00:00
Jermolene
c2391c5250 Action-deletefield should only update tiddler modified/created if it is changed 2017-03-19 19:30:52 +00:00
Jermolene
5b3bb1974c Move coding docs to the /dev wiki 2017-03-19 13:53:21 +00:00
Jermolene
39cdaeb34d Fix problem with tracking dragenter/leave events in Firefox
Fixes #686 (hopefully!)
2017-03-17 14:54:30 +00:00
Jermolene
d778bc9a21 Add link to Tinka 2017-03-17 14:20:44 +00:00
Jermolene
fe5670663d Add plugins to TOC 2017-03-17 14:20:36 +00:00
Jermolene
8804278e6e Add OpenOffice docx and pptx file types 2017-03-17 14:20:17 +00:00
Jermolene
b9fbe12118 More defensive deepFreeze()
IE11 chokes on Object.freeze(undefined)
2017-03-17 14:20:04 +00:00
Jermolene
779e62a30f Add support for JSON files containing a single tiddler
At the moment, we support JSON files containing an array of tiddlers.
With this change the core will import files containing a single
tiddler. Also adding templates for saving individual tiddlers in JSON
format
2017-03-17 14:19:43 +00:00
gernert
d65fd771e7 Update ColourPalettes.tid (#2806) 2017-03-17 13:54:32 +00:00
Jermolene
73e1724fdf Extend $tw.utils.httpRequest() to cope with binary data
The problem was that `this.responseText` crashes for non-text data. We
fix it by letting the client specify which property should be returned.

@ericshulman does this work for you?
2017-03-17 13:41:17 +00:00
Jermolene
595072b2bc Update browser support for importing via paste 2017-03-17 13:36:28 +00:00
Jermolene
66d5e2650e Fix problem with dragger image in Chrome
Fixes #2800
2017-03-12 18:07:59 +00:00
tejjyid
bb81f00161 Update cla-individual.md (#2792)
For documentation purposes only...
2017-03-06 08:58:23 +00:00
twMat
5dbc1b7163 Doc typo correction (#2791) 2017-03-05 20:25:24 +00:00
Jermolene
28b861451b Yet more tweaks to the highlight.js integration
Now we check that the selected language is supported before we invoke
highlight.js; left to its own devices, it crashes…
2017-03-02 09:17:48 +00:00
Jermolene
796e59e0dc Google Analytics plugin: Remove unneeded version number
By omitting the version number the core will apply the current core
version number to the plugin.
2017-02-28 10:23:02 +00:00
Jermolene
e30330d4be Introduce Twitter plugin for embedding tweets etc. 2017-02-28 10:23:02 +00:00
Jermolene
52a414959c wiki.extractTiddlerDataItem() should use caching 2017-02-28 10:23:02 +00:00
Jermolene
b9a835b879 Fix bug with wiki.getTiddlerDataCached()
We need to process the default data outside of the cache function to
ensure that we don’t cache the defaults
2017-02-28 10:23:02 +00:00
Tobias Beer
6343c39bd6 Docs: improve description of remove operator (#2735)
see https://github.com/Jermolene/TiddlyWiki5/issues/2731#issuecomment-275200159
2017-02-27 16:40:48 +00:00
twMat
35b327e336 Mat finally, and somewhat shameful, signing the CLA (#2723)
All previous contribs from me are included in the signing of the agreement.
2017-02-27 16:39:55 +00:00
jrgetsin
63b3d88604 Typo: Update TiddlyWiki.tid (#2566)
for "bought" put "brought"
looked like a typo to me
2017-02-27 16:38:57 +00:00
gernert
a71e27386f Update SystemTags.tid (#2508)
* Update SystemTags.tid

* Update SystemTags.tid

@Jermolene
Hope I did it correct now ;-)
2017-02-27 16:38:13 +00:00
gernert
9a67a90a30 Update Using Stylesheets.tid (#2786) 2017-02-27 15:54:15 +00:00
Roma
d53d6e7921 Added community tiddler for ViM syntax file. (#2544) 2017-02-26 16:48:07 +00:00
Jermolene
b90600580f Filesystemadaptor: Fix bug with JSON tiddlers
Fixes #2783
2017-02-24 15:36:22 +00:00
Jermolene
d0594e4a45 Rejiggle the license to try to make GitHub recognise it 2017-02-24 13:52:39 +00:00
twMat
b5360db375 Clarified intro statment for TiddlerWidget (#2770)
Ref [discussion](https://groups.google.com/d/msg/tiddlywiki/S-DliskYksE/55c6_CssCgAJ).
2017-02-23 17:02:49 +00:00
Sylvain Comte
da0c244a51 created a "resource" card for leaflet maps plugin (#2734) 2017-02-23 17:01:41 +00:00
Jermolene
ad1c2a6571 Fix problem with 'has' operator
Fixes problem introduced in 6085936475
2017-02-23 14:27:43 +00:00
Marxsal
617ec82a22 Update documentation to reflect actual way timeline macro currently works. (#2781) 2017-02-23 10:59:40 +00:00
Jermolene
7c2d519d4f Update release note 2017-02-23 08:20:43 +00:00
Bram Chen
f246b93a38 Add chinese translations for the "close plugin library" button (#2779) 2017-02-22 15:55:44 +00:00
Jermolene
31a803626f Add GettingStarted "online" tab
Fixes #2780
2017-02-22 15:34:50 +00:00
Tobias Beer
88a65f038e Add a "close plugin library" button (#2072)
* provides a "close plugin library" button

* starting from #1718 by @inmysocks
* possibly fixes all of #1718, #1597,  and #2067

* corrected code comment

* add back title

No idea why I overlooked this beforehand.

Next time I will not suggest such changes that have little to do with
the PR, but rather just comment the code.

* ah, sorry, "fixed" wrong spot

now

```
<$action-sendmessage $message="tm-load-plugin-from-library"
url={{!!url}} title={{$(assetInfo)$!!original-title}}/>
```

...should be back at the right spot.

* mhhh... still fixing the mess

load, unload, puh... let's see if I got it now

* added unloadIFrame and minor syntax fixes
2017-02-22 12:15:26 +00:00
Tobias Beer
6085936475 Introduce "field" suffix for "has" filter operator (#2066)
* has:field — tested & documented

allows to test whether a field exists

* fixed inverted condition

* added from version to docs
2017-02-22 12:13:59 +00:00
Jermolene
cd2bc88658 Add "enlist" operator
Fixes #2767
2017-02-21 15:17:47 +00:00
Jermolene
b1ecf81b0c Tentative improvements to highlight plugin problems
We now use highlight.js in raw HTML mode on the server, rather than
trying to use it with the fakedom. This causes problems with fakedoms
inability to get textContent for a node that has been created by
assigning innerHTML. So we extend the fakedom to allow the original
text content to be saved.

See #2778 for discussion.
2017-02-21 13:09:32 +00:00
Jermolene
eee18aab40 Docs: Fix typo 2017-02-21 08:47:00 +00:00
Jermolene
9fc2086b71 Optimise sameday filter
I used this test:

console.time();for(var t=0; t<200; t++)
{$tw.wiki.filterTiddlers("[all[tiddlers+shadows]sameday[20170210]]");};c
onsole.timeEnd()

Before this patch, I got speeds of approx 190ms, versus 140ms
afterwards.

Note that the ability to add a cache property like this is only
possible because tiddler objects are immutable.
2017-02-21 08:31:05 +00:00
Thomas Elmiger
8307f7c3ca Tiny optimisation for Naming of System Tiddlers.tid (#2773)
* Replacement icon stopwatch on

As discussed in issue #2690

* Replacement icon stopwatch off

As discussed in issue #2690

* Added missing tag "Resources" (Community Resource)

* Tried to make a sentence clearer

CamelCase words are NOT joined with hyphens (copy-paste error?). 
Copied "directly" from the line below to make the meaning even clearer.
2017-02-21 08:28:53 +00:00
Jermolene
b26e138503 Tweaks for #2774 2017-02-19 20:50:52 +00:00
twMat
16da00fe3e Clarify EditTextWidget behaviour and tag attribute (#2774) 2017-02-19 20:48:32 +00:00
Bram Chen
7086c41b6c Update chinese translations for help command (#2775)
* enhanced rendertiddler command
* the new fetch command
2017-02-19 20:46:25 +00:00
Xavier Cazin
6a172363da fr-FR for new fetch command and modified rendertiddler (#2777)
* fr-FR translation of additional error strings

* a slightly better fr-FR translation for the Site Subtitle

* fr-FR translation for the "print page" button

* fr-FR translation for Tiddler Info Panel-related strings

* fr-FR translation for Timestamp activation strings

* fr-FR translation for TiddlerManager related strings

* fr-FR translation for an additional string related to system tiddlers

* add group-sort fields to fr-FR Types

* fixes to the fr-FR Tiddler Manager translations

* fixes fr-FR translation for timestamp-related strings

* fr-FR translation of the tiddler renaming strings

* fr-FR translation of what is the StoryList filter

* fr-FR translations for new saver-related settings

* fr-FR translations around the new fetch command

* fr-FR translation for modified rendertiddler command
2017-02-19 18:27:22 +00:00
Jermolene
75b501f681 Optimise $tw.utils.parseStringArray()
On my machine, the following test performed on the prerelease improves
from 40ms to 8ms with this patch:

```
var a =
$tw.utils.stringifyList($tw.wiki.allTitles());console.time();$tw.utils.p
arseStringArray(a);console.timeEnd()
```
2017-02-19 18:08:15 +00:00
Jermolene
daf703b67f Add support for th-navigating event 2017-02-19 15:47:37 +00:00
Jermolene
0d0ece6377 Add new "fetch" command
Like the load command except retrieves the file over HTTP/HTTPS.

Allows experimentation with server-side twederation

This is a cleaned up version of code that I wrote last year at TWEUM
2016 @inmysocks @pmario @twMat @xcazin
2017-02-18 13:33:41 +00:00
Jermolene
74b0da065e Add logging functions to commander 2017-02-18 13:30:04 +00:00
Jermolene
6f93ce6ea7 Enhance rendertiddler command with support for additional variable
Passing an arbitrary variable allows us to e.g. reuse the export
filters as shown in the example
2017-02-18 13:17:44 +00:00
Jermolene
91b341e8e0 Better error trapping for WebDAV saver
Without these checks we get a startup crash when using TiddlyWiki in
client-server configuration.
2017-02-18 12:12:29 +00:00
Jermolene
f0ff1f993e Fix problem with textarea background colour
Fixes #2772
2017-02-17 17:39:01 +00:00
Bram Chen
d0c20435cd Add chinese translations for Error/EditConflict (#2771) 2017-02-17 17:11:30 +00:00
FND
6505e6f448 WebDAV file overwrite protection (#2614)
* putSaver: detect edit conflicts to prevent clobbering, if possible

if the server supplies an ETag, we send it back when saving, allowing
the server to detect edit conflicts and respond with 412 (cf.
https://www.w3.org/1999/04/Editing/)

caveats:
* this only kicks in after the first save, as we don't have access to
  the ETag when first loading the document
* there's no recovery mechanism (e.g. resetting `this.etag` in order to
  force clobbering), other than manually reloading the document

* putSaver: retrieve ETag upon initialization for clobbering protection

this addresses one of the caveats from the previous commit
(2d75cb83af) - while theoretically prone
to a race condition, it seems unlikely that saving will be triggered
before the server responds

* putSaver: simplify URI extraction

this simplifies the approach introduced in
f51f6bf774, with the purpose of removing
the fragment identifier

* putSaver: localize error message

* putSaver: switch to built-in HTTP helper

in the process, fixed ETag assignment in `#save` method (was
`this.etag`, now `self.etag`) as well as a syntax error due to a missing
closing brace

* putSaver: consolidate URI handling
2017-02-17 12:26:15 +00:00
twMat
a6b538b308 Clarify use of RawMarkup tag (#2768)
Anyone attempting to use this tag will need information about required reload of TW for activation.
2017-02-15 08:56:49 +00:00
Jermolene
467bf17dd8 GoogleAnalytics Plugin: Make sure we don't crash if the config tiddlers don't exist 2017-02-13 11:39:39 +00:00
Jermolene
95f565878e Savetrail: Fix conditionality of hook-based saving 2017-02-13 09:00:34 +00:00
Jermolene
d6f5b3cacd Filesystemadaptor: Fix problem with unknown file extensions 2017-02-12 15:35:04 +00:00
Jermolene
d5b04c2688 Fix problem with loading metafiles
This issue was introduced in 1b41b44684.

Fixes problem raised by @pmario in
https://github.com/Jermolene/TiddlyWiki5/commit/3708f6c8e4f4bf2ea1cb10b0
fa685888485f788a#commitcomment-20848240
2017-02-12 12:14:04 +00:00
Jermolene
7b251df989 Filesystemadaptor: Fix problem with creation of unneeded directories
@pmario this fixes the problem reported in
https://github.com/Jermolene/TiddlyWiki5/commit/3708f6c8e4f4bf2ea1cb10b0
fa685888485f788a#commitcomment-20847981
2017-02-12 11:15:23 +00:00
Jermolene
a51f62bc40 Docs: Move beaker browser file 2017-02-12 11:14:21 +00:00
Jermolene
6397ce8997 Docs: move a couple of files to the correct dir 2017-02-12 11:14:05 +00:00
Jermolene
de9bb2fa40 Feature TiddlyMap in the HelloThere thumbnails 2017-02-12 11:13:43 +00:00
Jermolene
b5482d8dba Remove extraneous console.log
I’ve leaving the one at line 91 because it might be useful for field
debugging…
2017-02-11 12:59:18 +00:00
Jermolene
3708f6c8e4 Major refactoring of filesystemadaptor
The code here had got a bit broken by some PRs that I should have
checked more carefully. I’ve done a major refactoring which will
hopefully make it easier to understand, and fixes a number of problems:

* Problem with eg .md tiddlers not being deleted correctly
* Problem with Windows path separators not being usable within
$:/config/FileSystemPaths on Windows
* Problem with filename clashes not being detected correctly when
saving to a different directory via $:/config/FileSystemPaths
* Enables slashes within tiddler titles to be mapped into folders
* Enables plain text files like .md and .css to be saved with .meta
files instead of as .tid files (see #2558)
* No longer replaces spaces with underscores

As this is such a major update, I’d be grateful if Node.js users could
give it a careful run through — in particular, you’ll need to try
creating new tiddlers of various types and ensure that the expected
files are created.
2017-02-11 12:56:42 +00:00
Jermolene
1961db6732 Register alternate mime type for Markdown files
macOS considers them to be `text/markdown`, which meant that dragging
an .md file ended up with the wrong content type
2017-02-11 12:48:41 +00:00
Jermolene
36c0af0fd4 Docs: Fix typo in example filter 2017-02-11 12:47:56 +00:00
Jermolene
9e08aed8ad Update release note 2017-02-10 12:45:26 +00:00
Jermolene
075d7d76df SaveTrail: Update readme 2017-02-10 07:33:38 +00:00
Jermolene
3d8249dc7a Savetrails: Download before and after files for destructive modifications 2017-02-09 15:45:39 +00:00
Jermolene
97e995e0c7 Add wiki.checkTiddlerText() convenience method 2017-02-09 15:43:28 +00:00
Jermolene
2397f0aa6f Add several new hooks for UI actions 2017-02-09 15:42:55 +00:00
Jermolene
6b2ab90721 Update hook mechanism so that multiple parameters can be passed 2017-02-09 15:42:21 +00:00
Jermolene
73ded6a82a Add new "count" filter operator
See discussion here:
https://groups.google.com/d/msgid/tiddlywiki/fe51b7f5-5369-493b-82e5-94c
18e863fe0%40googlegroups.com?utm_medium=email&utm_source=footer
2017-02-08 20:11:44 +00:00
Jermolene
9bc523fdef Fix bug in renameTiddler
This operation isn’t used by the core, but is used by the TextSlicer
plugin
2017-02-08 20:04:36 +00:00
Jermolene
f4a015f120 Upgrade to latest version of xmldom 2017-02-07 18:20:30 +00:00
Jermolene
d9fd722e50 Text-slicer: Improve image support
Previously we only worked with base64 data URI images; now we work with
relative URLs as well.
2017-02-07 11:05:08 +00:00
Jermolene
112a8d95c5 Docs: Switch "Mailing List" to "Forum"
Fixes #2761
2017-02-07 11:03:39 +00:00
Jermolene
ef1c47c3aa Fix accidental wikilinking 2017-02-05 19:58:58 +00:00
Jermolene
6282fe43af Docs capitalisation consistency
Thanks @twMat
2017-02-05 13:34:37 +00:00
Jermolene
db056a84a5 Remove obsolete code 2017-02-04 18:14:20 +00:00
Jermolene
a14b8a94df Fix JSON format for bc61f7eebf
Otherwise the JSON files cannot be imported back into TiddlyWiki
2017-02-04 18:08:47 +00:00
twMat
e20682dcfd Update title to "How to Add a New Tab to the Sidebar" (#2754)
Only title modified, from lowercase to uppercase letters.
2017-02-04 18:06:17 +00:00
Jermolene
bc61f7eebf Introduce savetrail plugin
See the readme:

“This plugin causes TiddlyWiki to continuously save the contents of
each tiddler that is changed as a JSON file. Configured correctly, the
browser will download the files silently in the background, and they
can be used as a backup in case of accidental data loss.”

Inspired by @telmiger’s comment (3) here:
https://github.com/Jermolene/TiddlyWiki5/issues/2741#issuecomment-276128
871
2017-02-04 17:37:31 +00:00
Jermolene
6c65aa2a6d Make the syncer more configurable, including names for sync adaptors
@danielo515 you may want to add a name to your sync adaptor 😄
2017-02-04 17:25:30 +00:00
Jermolene
ced9f315a1 Rename variable for clarity
It’s called an iterator in filter.js
2017-02-04 17:24:25 +00:00
Jermolene
1563f207b3 Tweaks to #2753
@twMat I felt that the “see below” part was a bit clumsy, as it jumps
quite a long way down, past three embedded videos.
2017-02-04 16:22:25 +00:00
twMat
9a01e9ab71 Update doc on how to submit PR's. (#2753)
Added note to clarify difference between submitting doc improvements and code improvements.
2017-02-04 16:18:48 +00:00
Bram Chen
3527379468 Update chinese translations for "saving" related settings (#2751) 2017-02-03 18:13:04 +00:00
Xavier Cazin
abb9f262c3 fr-FR for saver-related settings and the predefined StoryList filter (#2742)
* fr-FR translation of additional error strings

* a slightly better fr-FR translation for the Site Subtitle

* fr-FR translation for the "print page" button

* fr-FR translation for Tiddler Info Panel-related strings

* fr-FR translation for Timestamp activation strings

* fr-FR translation for TiddlerManager related strings

* fr-FR translation for an additional string related to system tiddlers

* add group-sort fields to fr-FR Types

* fixes to the fr-FR Tiddler Manager translations

* fixes fr-FR translation for timestamp-related strings

* fr-FR translation of the tiddler renaming strings

* fr-FR translation of what is the StoryList filter

* fr-FR translations for new saver-related settings
2017-01-30 21:37:45 +00:00
Jermolene
b5059c612a Adds support for autosave with the download saver
Also does some reorganisation of control panel to move “saving” related
settings together, and expose a UI for savers to plug into.

Fixes #2741
2017-01-30 18:19:28 +00:00
Jermolene
56b6781715 Fixes to license visibility
Credits to @cdent - is 2012 right, or did your work there carry on into
2013?

Addresses part of #2378
2017-01-29 21:11:30 +00:00
Jermolene
4bf626d741 As noted by @twMat over on the [mailing
list](https://groups.google.com/d/msgid/tiddlywikidev/8571ba0d-da8e-449a
-bad2-a21e3f2587aa%40googlegroups.com), GitHub has stopped recognising
TiddlyWiki’s license file — see
https://help.github.com/articles/adding-a-license-to-a-repository/.
This commit is intended to fix that
2017-01-27 22:10:18 +00:00
Duarte Ramos
8dc971a11e Pt pt translation improvements (#2719)
* Update "Open" Tab Sidebar Caption

Fix wrong translation for the "Open" tab in the page sidebar tabs

* Update SideBar.multids

* Wrong date format

Remove suffixes from dates, we don't really use any in Portuguese, and the way they were presented was currently wrong
2017-01-19 12:37:55 -07:00
dedioste
f914f0a6a2 Fix Date format for date display date in "recent" tabs (#2717)
Moved from GG MM AAAA to DD MM YYYY to ensure that the date is correctly displayed in the "Recent" tab
2017-01-19 09:00:58 -07:00
dedioste
0b14a0c24e CLA Signature for @dedioste (#2718) 2017-01-19 09:00:14 -07:00
twMat
3e40403d11 VarsWidget doc - erroneous example (#2714) 2017-01-17 08:20:06 -07:00
Tobias Beer
1b339e17bc Add "tag" attribute to keyboard widget (#2593)
* allows to define the tag for keyboard widget

* added from 5.1.14 to docs
2017-01-13 11:17:19 -07:00
Marxsal
2b90d0ab96 Doc: Community Resources: TiddlyServer (#2708) 2017-01-13 11:00:06 -07:00
Thomas Elmiger
d632e47ffe Added missing tag "Resources" (Community Resource) (#2707)
* Replacement icon stopwatch on

As discussed in issue #2690

* Replacement icon stopwatch off

As discussed in issue #2690

* Added missing tag "Resources" (Community Resource)
2017-01-13 10:59:38 -07:00
Jermolene
0e37e0cd78 Fix typo 2017-01-13 08:17:31 -07:00
Jeremy Ruston
190d4881bf Remove accented character from filename
@Marxsal just a fyi there are a lot of problems on some platform combinations with accented characters in filenames.
2017-01-13 08:17:03 -07:00
Saul D Beniquez
c3833d0232 Update cla-individual.md (#2704)
For [PR69](https://github.com/Jermolene/TiddlyWiki5/pull/2691)
2017-01-10 18:41:25 +00:00
Rizwan
ac3b67b819 Signing the CLA, Riz (#2705) 2017-01-10 18:18:16 +00:00
Jermolene
dbcda815fa Add tight-heavier theme that combines "tight" and "heavier" 2017-01-09 12:46:20 +00:00
Jermolene
74bdbb9be8 Readme updates 2017-01-09 12:46:20 +00:00
Marxsal
b152d0a727 Doc: How to concatenate text and variables (#2676)
* How to concatenate text and variables

* Adding warnings around anti-example code
2017-01-09 12:39:50 +00:00
Marxsal
00669e87da Docs: Community Resources: Noteself,Slides and Stories, TKN (#2685)
* Docs: Community Resources: Noteself,Slides and Stories, TKN

* Doc: Community Resource: Cardo

* Tweaks to community resources

* removing unnecessary new lines

* Removed spacing around question marks.

* Noteself. Removing one more space. Picked a bad day not to wear glasses.
2017-01-09 12:32:56 +00:00
Tobias Beer
d4db283d61 Refresh simple editor when empty text, e.g. hitting ENTER (#2702)
fixes #2592, missing bit of deleting the field for adding a new tag in
edit-mode

also fix for:
https://groups.google.com/forum/?fromgroups=#!topic/tiddlywiki/L6Z7gSvBWjw
2017-01-09 10:31:40 +00:00
Daniel Rodríguez Rivero
2f21cbc971 Updated tabs macro documentation (#2697)
Adding how to deal with transclusions inside the tabs itself. It is not weird that you want use tabs on a set of tiddlers that transclude other tiddlers using their own title. If you don't understand well the consequences of of what the sentence `currentTiddler variable is not affected...` this can be quite frustrating.
2017-01-04 21:40:11 +00:00
Marxsal
18280249f4 Doc: How to turn off camel case (#2687)
* Doc: How to turn off camel case

* Changed title. Added tag.
2017-01-03 18:07:48 +00:00
Jermolene
da6149cdde Include word "unique" in description of "each Operator"
Fixes #2689
2017-01-03 18:01:56 +00:00
Sylvain Comte
c16f96626e Update to latest version of google analytics code (#2671)
* trying to implement new googleanalytics tracker

* trying to put new google tracker. Not working...

* more dev options for testing

still don"t understand wants goes wrong

* New version. Seems to work

* achieved update for new tests
brought back tiddlywiki.com settings value
created a settings tab to make it easier

* adding settings to plugin

add a settings tab to plugin to make it easier to use and see which GA account is in use

* fixes bug with GA_ACCOUNT and GA_DOMAIN tiddlers containing newlines at their end, preventing plugins to work

* soft rebase on jermolene's master

* revert to oldest version of GA_account and GA_domain tiddlers - had been overwritten by ones with a new line at the end

* Integrates some @tobibeer comments

* googleanalytics.js : removed "rebranding", var declaration and console log. Did not manage to get a non-minified version of Google script. But as far as I can see, jermolene's original plugin did same way
* plugin.info : placed "readme" first
* readme : back to previous "legacy" version. No more mention to temporary fork. Added mention and link to google official code.

* signed CLA
2017-01-03 15:43:05 +00:00
Jermolene
56131e4563 It's 2017!
🥂🍾
c.f. 665d6657bb
2017-01-03 13:31:22 +00:00
Jermolene
f9b4f747a1 Updates to Danish and Dutch translations
Thanks @gernert
2017-01-02 17:45:58 +00:00
Thomas Elmiger
79ae3f8cb7 Replacement icon for timestamp on/off (#2692)
* Replacement icon stopwatch on

As discussed in issue #2690

* Replacement icon stopwatch off

As discussed in issue #2690
2017-01-02 17:38:32 +00:00
Bram Chen
c60fd4c0c6 Add chinese translations for exporting story list (#2683) 2016-12-31 13:22:12 +00:00
Marxsal
a37137d426 DOC: How to embed PDFs and other documents (#2678)
* How to embed PDFs and other documents

* Adding notes about external linking and other details
2016-12-31 13:21:32 +00:00
Jermolene
a2b465ee75 Docs: Tweaks for title conventions for resources 2016-12-31 13:20:54 +00:00
Marxsal
241f901d85 New references for Community resources. (#2677)
* New references for Community resources.

This batch includes Filter Examples by Tobias Beerand and
Gospel Bubbles by David Gifford

* Four more community resources added --
How Does Twederation Work
Ghostwriter Theme
Moments Theme
Lucky Sushi Online SHop

* Two more: Hacks by Thomas Elmiger. Forum on Reddit by Riz
2016-12-31 13:18:48 +00:00
Jermolene
7a6cbb1629 Tweaks to checkbox widget docs 2016-12-30 17:49:35 +00:00
Marxsal
94d460ef20 CheckboxWidget actions documentation (#2673)
* Add example of how to use action parameter in Checkbox Widget

* Doc: CheckboxWidget actions
2016-12-30 17:46:48 +00:00
Marxsal
5b5b25dd16 Docs: Add how-tos on putting list into table format (#2672)
* Document method(s) to format the output of a list in tabular format.

* Added  2nd CSS method for formatting as Table

* Three methods of putting lists into table form.

* Removed "probably" comment
2016-12-30 17:45:44 +00:00
Jermolene
0c2734f181 Tweak wording of exporting story list 2016-12-30 17:43:35 +00:00
Jermolene
60c6f039e4 Update link to tobibeer's tips 2016-12-30 17:42:34 +00:00
Jermolene
0e83fad837 Remove link to TW5Mall
The site has been retired by the author.
2016-12-30 17:42:34 +00:00
Marxsal
b1a5afbf15 Add an entry to the filter drop down for exporting the current story (minus advanced search) (#2670) 2016-12-30 17:42:23 +00:00
Xavier Cazin
28b7493c3c Updates to fr-FR translations (#2645)
* fr-FR translation of additional error strings

* a slightly better fr-FR translation for the Site Subtitle

* fr-FR translation for the "print page" button

* fr-FR translation for Tiddler Info Panel-related strings

* fr-FR translation for Timestamp activation strings

* fr-FR translation for TiddlerManager related strings

* fr-FR translation for an additional string related to system tiddlers

* add group-sort fields to fr-FR Types

* fixes to the fr-FR Tiddler Manager translations

* fixes fr-FR translation for timestamp-related strings

* fr-FR translation of the tiddler renaming strings
2016-12-30 17:41:05 +00:00
Jermolene
ab1b1f2cde Fix problem with beaker saver and default index pages
As discussed on the mailing list, we need to check for a URL that is
missing the default `/index.html`

https://groups.google.com/d/msg/tiddlywikidev/n6yUdu2zHWo/m32R2BuIDgAJ
2016-12-29 16:45:47 +00:00
Jermolene
eac449e8ff Release note updates 2016-12-29 12:44:42 +00:00
Jermolene
f495df6386 Tone down the colours of the "from-version" macro 2016-12-29 12:44:36 +00:00
Jermolene
2945c9abc1 Add information about Beaker Browser support 2016-12-29 12:44:12 +00:00
Jermolene
bbcc367e5a Add link to google groups search at mail-archive.com 2016-12-29 09:13:28 +00:00
Jermolene
0383b98555 Add support for other movie content types 2016-12-23 08:34:07 +00:00
Jermolene
f143164cbe Correct the name of the video parser 2016-12-22 22:07:28 +00:00
Jermolene
a1a4bf0f9d Refactoring the slicer engine for easier reuse 2016-12-22 17:46:42 +00:00
Jermolene
ba9d6187af Rename the dat saver to Beaker
It’s actually specific to the API provided by the Beaker browser, and
not a generic Dat saver
2016-12-22 08:15:16 +00:00
Jermolene
cec5522b72 Fix up the version number of the plugin library 2016-12-21 15:07:48 +00:00
Jermolene
a20da9f530 Add preliminary Dat file saver
See https://datproject.org/ and https://beakerbrowser.com/
2016-12-21 12:09:08 +00:00
Jermolene
daad0ec142 xlsx-utils: Automatically trim cell values 2016-12-21 12:09:08 +00:00
Marxsal
ed1a7e73cd Update instructions on using a PHP server, directing to a live website. (#2669)
Adding note about increasing maximum upload size.
2016-12-19 22:54:24 +00:00
Bram Chen
352d7d664c Chinese translation updates (#2666)
Typo
2016-12-19 12:22:39 +00:00
Jermolene
74107b9b8a New thumbnail for 5.1.14 2016-12-19 12:21:47 +00:00
Marxsal
7d1e3f4c35 Add docs for making a custom New Journal button (#2664)
Includes change to 'Creating journal tiddlers' to link up to new Instructional tiddler.
2016-12-19 11:27:50 +00:00
Tobias Beer
15c7d24eaa Allows adding a new tag name by typing enter (#2592)
* allows to add a new tagname hitting enter

see: https://groups.google.com/forum/#!topic/tiddlywiki/wqQ8jPYG-X4

* revert changes to vanilla/base

* added "Special Keys" to KeyboardShortcuts

* added info to Creating and editing tiddlers

did not add current version of <<.from-version "5.1.14">>  because it
would interrupt the flow. When changed from a noisy "New in 5.1.14" to
"(new in 5.1.14)" we might add the version info here

* revert setText & added inline styles to vanilla base

* remove fieldmangler

* commit initial edittemplate tags to merge master

* ok, now really revert to initial edittemplate tags

* move add tag via enter into tag-picker macro(s)
2016-12-18 20:43:26 +00:00
Mario Pietsch
e1053bf014 Toc recursion protection (#2650)
* add recursion protection first take

* fix problem with selectable expand

* ust path for toc-state variable instead of tag

* reactivate disabled macro call.
2016-12-17 15:29:03 +00:00
Arlen22
66a13cb915 TiddlyFox saver canSave() should always return true (#2626)
Whether saving is allowed should be determined by the parent side of the TiddlyFox, as this plugin can be used in many places.
2016-12-17 15:27:25 +00:00
Arlen22
1530b3e2d8 Put request handler on SimpleServer.prototype (#2627)
The request handler may be used by ExpressJS apps directly and can do most of the heavy lifting without any modification. Note that the self variable must be assignee using `[Function].bind(null,SimpleServer instance)`.
2016-12-17 15:06:10 +00:00
Jermolene
a2fe101848 Updated text reference docs 2016-12-17 12:25:43 +00:00
Nuno Mota
50d25e24f9 pt-PT translation update (#2654)
* pt-PT translation update

* Remove extra white-space

* Signing the CLA
2016-12-17 12:18:12 +00:00
Tobias Beer
e5b432a86b Allows checkbox widget to worth with indexes within data tiddlers (#2103) 2016-12-17 11:59:59 +00:00
Tobias Beer
d6d3aab36a Allow radio widget to work with indexes in a data tiddler (#2104)
* allow radio widget to set an index in a data tiddler

* updated RadioWidget docs, with same demo macro as for CheckboxWidget
in #2103
* removed docs in widget code (seems the wrong place)

* added from version to docs

* revert doc maros to master

* using wikitext-example-without-html and .tip macro now

* fix quotes
2016-12-17 11:51:24 +00:00
Jermolene
424b8a1f68 Move QR code view toolbar button 2016-12-17 11:44:24 +00:00
Matt Lauber
9c3a6976f0 #2312 Prevent move filter from wrapping (#2658)
given a list `A B C D` if I run `A B C D +[move:-1 [A]]` I get `B C A D`.  However, if I were to do `A B C D +[move:1[D]]` it doesn't wrap around, and I get `A B C D`.  This fixes that such that `A B C D +[move:-1 [A]]` gives 'A B C D`
2016-12-16 17:58:45 +00:00
Marxsal
52d32fe3fd Howto1 (#2659)
* Create One weird trick to change the sort order of sub-branches in a TOC macro

* Update and rename One weird trick to change the sort order of sub-branches in a TOC macro to How to change the sort order of sub-branches in a TOC macro

* Added .tid to file name

* Delete How to change the sort order of ...

The correct version is the one with the .tid file extension
2016-12-16 17:47:08 +00:00
Marxsal
2319c9269e Create How to widen tiddlers (aka story river) (#2651) 2016-12-16 17:40:05 +00:00
Marxsal
a393705cef Clarifying Tiddlywiki node.js launch instructions. (#2662) 2016-12-16 17:39:20 +00:00
Marxsal
4d3d7de3b5 Add example of using a text reference with a field in RevealWidget (#2660)
* Adding example of how to use a field's text references to control the RevealWidget.

* Attempting to add field "jeremy".
2016-12-16 17:38:29 +00:00
Jermolene
4a45e9d2dc Improve text reference documentation 2016-12-16 17:36:11 +00:00
Jermolene
28591965b1 Yet more refactoring of the tag macro vs template
This change re-instates the existing behaviour whereby omitting the
parameter to the “tag” macro will default to the current tiddler
2016-12-16 17:25:06 +00:00
Jeremy Ruston
7a71a87ed0 Merge pull request #2644 from BramChen/zh
Update chinese translations
2016-12-16 07:41:31 +00:00
Bram Chen
3c005a153f Add chinese translations for "Title/Exists/Prompt" and "Title/Relink/Prompt" 2016-12-16 10:24:09 +08:00
Bram Chen
24ccb215b2 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-12-16 09:52:47 +08:00
Jermolene
b4dc730575 Fix xlsx-utils startup module name
We were using the same name as one of the core startup modules.
2016-12-15 17:13:32 +00:00
Jermolene
e8bb897e26 Add support for relinking when renaming tiddlers
When renaming an existing tiddler, the edit template now shows a
checkbox that determines whether or not to relink references to the
tiddler in the list or tags fields of other tiddlers.
2016-12-15 17:13:32 +00:00
Jermolene
1bba9dc315 Reuse $tw.loadTiddlersFromPath() in --load command
Thus allowing things like tiddlywiki.files to be used with the —load
command
2016-12-15 17:13:32 +00:00
Jermolene
ad9769451d Add filename-uri-decoded support for tiddlywiki.files 2016-12-15 17:13:32 +00:00
Jermolene
74def9e080 Separate the PDF parser from the image parser
It was a bit of a hack, and made it harder to customise PDF presentation
2016-12-15 17:13:32 +00:00
Jermolene
25b2e846ce Update to Stanford JavaScript Library v1.0.6
And add their license file
2016-12-15 17:13:32 +00:00
Jeremy Ruston
fbd689368e Merge pull request #2643 from pmario/de-DE
add new tag manager texts
2016-12-01 10:51:19 +00:00
Mario Pietsch
db00c699f4 fix some typos, pointed out by Helmut. thx 2016-12-01 11:35:54 +01:00
Bram Chen
2fedd8dcd3 Add chinese translations for tiddler manager 2016-11-30 10:35:58 +08:00
Mario Pietsch
f32d05ae4b add new tag manager stuff 2016-11-29 18:42:58 +01:00
Jeremy Ruston
487dab57e6 Merge pull request #2201 from tobibeer/filter-operators-overview
updates to overall operators docs
2016-11-29 17:24:23 +00:00
Jeremy Ruston
ee486b2863 Merge pull request #2623 from BramChen/zh
Update chinese translations
2016-11-29 17:23:19 +00:00
Jeremy Ruston
b3a8780044 Merge pull request #2631 from pmario/de-DE
german language update
2016-11-29 17:23:07 +00:00
Jeremy Ruston
7736e6e4e4 Merge pull request #2641 from pmario/fix-2634
second-try / fix for 2634 week calculation
2016-11-29 17:22:23 +00:00
Mario Pietsch
b43b89f44a fix for 2634 problems with week calculation 2016-11-29 17:31:54 +01:00
Jermolene
0c6b2311ae Update release note 2016-11-29 10:29:39 +00:00
Jermolene
12ecb1fd08 Fix multids formatting 2016-11-29 10:29:32 +00:00
Bram Chen
b29c9cf829 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-11-29 17:44:22 +08:00
Jermolene
16bb65d17f Introduce tiddler manager 2016-11-29 08:36:07 +00:00
Jermolene
2f2ddf6c0e Update docs for tag macros 2016-11-28 21:31:09 +00:00
Jermolene
f07e0f981a Refactor tag template into an underlying macro
By refactoring the innards of the tag template into global macros, we
make it easier to re-use elements of the tag template
2016-11-28 19:17:25 +00:00
Jermolene
9a38642141 Add new "order" filter operator 2016-11-28 19:16:08 +00:00
Jermolene
a3dc3b4b98 Add new [all[tags]] filter operator 2016-11-28 19:04:04 +00:00
Jermolene
c02c3a06e0 Sort the edit content type dropdown groups more sensibly
Now we put the developer stuff at the bottom instead of the top…
2016-11-28 14:01:09 +00:00
Jermolene
cf28eeb2a1 Fix problem with checkbox widget and empty strings
If the value of `tiddler.fields[this.checkboxField]` was an empty
string then it would incorrectly fall back to the value of
`this.checkboxDefault`.
2016-11-28 13:45:41 +00:00
Jermolene
b759d82f4c @pmario's fix for #2635
This got reverted due to my git inabilities
2016-11-28 13:43:43 +00:00
Jermolene
c65d08240b Add strict mode to tag operator 2016-11-28 13:42:30 +00:00
Jermolene
c460cc03a4 Change "is" filter with blank operand to pass through arguments 2016-11-28 13:42:06 +00:00
Bram Chen
b2260c9d7e Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-11-28 21:11:20 +08:00
Jeremy Ruston
4e0aea288d Merge pull request #2638 from Jermolene/revert-2637-tagger
I accidentally performed a merge commit, which lost the individual commit comments, so we'll revert it and then merge it properly
2016-11-28 10:41:52 +00:00
Jeremy Ruston
a9b54d6fce Revert "Add provisional version of new tagger manager" 2016-11-28 10:40:55 +00:00
Jeremy Ruston
a85d034015 Merge pull request #2637: Introduce tiddler manager
Introduce tiddler manager
2016-11-28 10:28:12 +00:00
Jermolene
96708ecf65 Manager styling tweaks
* Make expand/collapse state be global across all tiddlers
* Remove “Show raw text” option, now that we’ve got the two expandable
areas for raw and wikified text
* Hide raw text by default
* Accentuate currently open tiddler
2016-11-28 10:01:30 +00:00
Bram Chen
940aafe2e0 Add chinese translations for timestamps on/off button 2016-11-28 13:37:11 +08:00
Bram Chen
ca179cc904 Add chinese translations of "sticky" mode for tiddler info panel 2016-11-28 13:19:10 +08:00
Bram Chen
58e12139de Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-11-28 11:53:24 +08:00
Jermolene
f67777161d Make manager sections be expandable 2016-11-27 23:04:54 +00:00
Jermolene
251619189e Add indentation to the manager 2016-11-27 22:35:04 +00:00
Jermolene
117bf0a0de Refactor the sidebar items into separate tiddlers
With some better styling too
2016-11-27 22:34:46 +00:00
Jermolene
e5af022bd3 Add image-picker-dropdown macro
Still need to add a way to select system images (like in the image
dropdown in tag manager)
2016-11-27 22:34:19 +00:00
Mario Pietsch
766bc7acee Fix for #2634 problem with week calculations (#2635) 2016-11-27 17:33:19 +00:00
Jermolene
b00c1c7290 Add select box for displaying tags vs. tiddlers 2016-11-27 14:52:39 +00:00
Jermolene
8e033eb0d4 Add new "all[tags]" filter operator 2016-11-27 14:52:04 +00:00
Jermolene
0b4669621a Return all tiddlers when "is" filter operand is missing 2016-11-27 14:51:51 +00:00
Jermolene
1a2ec12831 Fix problem with checkbox widget and empty strings
If the value of `tiddler.fields[this.checkboxField]` was an empty
string then it would incorrectly fall back to the value of
`this.checkboxDefault`.
2016-11-27 14:51:23 +00:00
Jermolene
9418538104 Separate the tag manager and tagger into separate tiddlers
As discussed in Hangout-101: https://www.youtube.com/watch?v=nXwCm794O6M
2016-11-27 13:53:42 +00:00
Bram Chen
14293d1b6b Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-11-27 09:19:10 +08:00
Jermolene
e98d324e66 Add provisional version of new tagger manager
For discussion
2016-11-26 12:48:47 +00:00
Jermolene
3bceb98119 Add support for actions attribute to CheckboxWidget 2016-11-26 08:21:58 +00:00
Jermolene
d1121787c0 Add new button to temporarily suspend timestamps
Useful when you want to make an edit but preserve the modification
date/time.
2016-11-23 18:20:31 +00:00
Jermolene
b3273bcbda Add "sticky" mode for tiddler info panel
A new option in control panel to cause the info panel to stay open
until it is explicitly closed
2016-11-23 18:17:54 +00:00
Jermolene
b86d142408 Revert accidental default to the "Heavier" theme 2016-11-23 18:15:17 +00:00
Jermolene
5bf238fc86 Use slightly bolder text for tag pills 2016-11-23 18:14:49 +00:00
Jermolene
0e57ce4090 Vanilla theme: ensure cursor is a pointer for invisible buttons 2016-11-23 18:14:25 +00:00
Jermolene
3c715c5e0d Extend require() to try appending index.js as well as .js
Better Common/JS compatibility
2016-11-23 18:13:26 +00:00
Jermolene
c8f7573a23 Make fakedom more resilient to non-string data 2016-11-22 20:24:59 +00:00
Jermolene
0f85ca3478 Add icon to "New in version" docs macro 2016-11-21 12:50:16 +00:00
Mario Pietsch
997029a78f fix typo 2016-11-16 01:24:39 +01:00
Bram Chen
3a70ddb235 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-11-15 08:10:23 +08:00
Jermolene
903cdc09cc Improve checking for missing titles 2016-11-14 15:37:55 +00:00
Jermolene
a485eb8588 Two improvements to xlsx-utils plugin
Add support for skipping an entire tiddler if a particular column is
blank

Add support for reading a row by column, making each of the columns
into a fieldname.

Also significantly refactored the code to break up the main, monolithic
function.
2016-11-14 15:23:15 +00:00
Jermolene
f7d81a00c2 Make "Heavier" theme heavier 2016-11-14 15:14:47 +00:00
Jermolene
632e062749 Add epub file type 2016-11-14 15:14:33 +00:00
Jermolene
b8cbc07c54 Add support for uri decoded components in tiddlywiki.files files 2016-11-14 15:14:25 +00:00
Bram Chen
8ed91f2f90 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-11-06 09:41:40 +08:00
Jermolene
fc483abfc8 xlsx-utils control panel: put new entities at the top of their respective lists 2016-11-05 08:35:56 +00:00
Bram Chen
62adfba68c Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-11-04 10:04:08 +08:00
Jermolene
0d0764b6ce Tweaks to "Heavier" theme 2016-11-03 22:27:14 +00:00
Jermolene
975d5346fb Introduce "Heavier" theme, with thicker fonts
Partly prompted by this piece:

https://backchannel.com/how-the-web-became-unreadable-a781ddc711b6
2016-11-03 19:11:24 +00:00
Xavier Cazin
87fbd07728 Updated fr-FR localised strings (#2632)
* fr-FR translation of additional error strings

* Better consistancy in fr-FR translations for Buttons.multids

* Fixes to fr-FR translation of Control Panel strings

* Updates to fr-FR strings in EditTemplate.multids

* fixes to fr-FR strings in Fields.multids

* added fr-FR translation of TypedTiddlers in Filters.multids

* fix fr-FR string in GettingStarted.tid

* fix fr-FR string in Import.multids

* fixes to fr-FR strings in Misc.multids

* add fr-FR translated strings in Search.multids

* fixes to fr-FR strings in Sidebars.multids

* fixes in fr-FR translated strings of the Theme Tweaks settings

* fixes fr-FR translated strings of TiddlerInfo

* fixes and additions to fr-FR translations of ModuleTypes.multids strings

* add missing fr-FR translation in PaletteColours.multids

* fixes and additions to the fr-FR-translated Help for commands

* fixes to the fr-FR-translated strings in the Download Modal

* add an fr-FR translation to the Macro Definition snippet
2016-11-01 17:55:05 +00:00
Mario Pietsch
d204688f35 de-DE text update 2016-10-27 18:03:14 +02:00
Mario Pietsch
dd8f660c4e new german text elements 2016-10-27 17:30:00 +02:00
Bram Chen
5c8844a51a Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-10-27 19:37:41 +08:00
Jermolene
8d35178bc4 Undo 664225f6fd and 56640b90bb
See the discussion at #2628
2016-10-26 21:41:41 +01:00
Bram Chen
52f02717a8 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-10-26 08:47:45 +08:00
Jermolene
56640b90bb Fix issue with tabs macro introduced by fix for #2628
I’m fixing this now to show how the tabs macro can be changed to
accommodate the change, but we may yet decide to reverse out the change
in order to maintain backwards compatibility.

One problem with changes like this is that there’s no easy way to find
out where it impacts the core UI. The tabs macro is now fixed, but
perhaps there’s more obscure things that are still broken in the core.

If we do opt to reverse the change to preserve backwards compatibility,
we could add a way to explicitly trigger the new behaviour. For
example, a new attribute `updateState=“yes”`.

Yet another alternative is to make completely new alternative to the
list widget with revised semantics, that authors can opt-in to. For
example `<$loop>`. (There was another issue we discussed a year or two
ago about adding support for an index variable which may be a candidate
for fixing at the same time).
2016-10-25 22:30:02 +01:00
Jermolene
664225f6fd Ensure list widget item title is used in getStateQualifier
Resolves a longstanding problem where the same state qualifier is
generated for every member of a list.

Fixes #2628
2016-10-25 15:34:20 +01:00
Bram Chen
5685724774 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-10-24 08:44:20 +08:00
Jermolene
cedb953f83 Missed off previous commit (54d0cb2021) 2016-10-23 23:27:35 +01:00
Jermolene
54d0cb2021 Fix background colour of import specification selector 2016-10-23 22:59:58 +01:00
Jermolene
5a361bdadc Fix content type for JSZip plugin license file 2016-10-23 22:50:14 +01:00
Jermolene
8de4583d6c Add first pass at XLSX Utilities plugin
Thanks to @stevesunypoly for help with preparing the demo spreadsheet
2016-10-23 22:49:59 +01:00
Jermolene
e9470169d8 Update full edition with recent plugins 2016-10-23 21:22:16 +01:00
Tobias Beer
9c50a223b8 Merge remote-tracking branch 'Jermolene/master' into filter-operators-overview 2016-10-22 10:17:44 +02:00
Bram Chen
fb07992fa8 Merge branch 'master' of https://github.com/Jermolene/TiddlyWiki5 into zh 2016-10-22 10:14:14 +08:00
Jermolene
7108e0d861 Add support for filtered attributes to HTML elements and widgets
Fixes #2624
2016-10-21 11:27:07 +01:00
Jermolene
c72a0b7a67 Add action-createtiddler widget
Basically the same as sending a tm-new-tiddler message except that the
newly created tiddler is not added to the story.
2016-10-21 11:26:26 +01:00
Bram Chen
3259b80114 Add chinese translations for print page button 2016-10-20 20:27:27 +08:00
Jermolene
cd5366087c Improve QR code plugin docs 2016-10-20 09:45:04 +01:00
Jermolene
0b76c327c2 Add page print button
cc @silvyn
2016-10-20 09:44:52 +01:00
Jermolene
6dc90718f0 Update tw5.com Tiddler Info/Sources to use links
Prompted by @sukima
2016-10-19 22:06:15 +01:00
Jermolene
a292a2be44 Add copy to clipboard icon 2016-10-19 14:57:19 +01:00
Jermolene
c415af13f1 bibtex plugin updates 2016-10-19 10:21:50 +01:00
Bram Chen
030c51b1f8 Update Chinese translations (#2619)
* Add chinese transaltions of descriptions for missing module types

* Update chinese transaltions of Parsing/Hint

* Add chinese transaltions for Search/TooShort
2016-10-19 10:03:28 +01:00
Jermolene
7f11c151f0 First pass at bibtex importer 2016-10-18 18:00:01 +01:00
Jermolene
5ec7250621 QR code plugin clean ups 2016-10-18 17:59:52 +01:00
Jermolene
28a25be5f7 Marginally improved qrcode icon 2016-10-18 16:39:27 +01:00
Jermolene
8e02bde938 Refinements to 87fa7f972c 2016-10-18 16:39:18 +01:00
Jermolene
5aba7292e7 Fix typo 2016-10-18 16:02:17 +01:00
Jermolene
52cef1394c Fix typo in 1b41b44684 2016-10-18 13:33:54 +01:00
Jermolene
7b535b8f31 Release note update for 5.1.14 2016-10-18 13:26:24 +01:00
Jermolene
22c1b04ee7 Added first version of QR code generator plugin 2016-10-18 09:23:47 +01:00
Jermolene
7a6d7e2a15 Refactor user interface for plugin tiddlers
* Refactored control panel “Plugins” tab to make the elements more
reusable
* Refactored the display of plugin tiddlers to use the same format as
the control panel (as suggested, I think by @danielo515), adding the
shadow tiddler listing as an overridable extension tab
* Added a new tab in the “More” sidebar providing quick access to all
installed plugins
2016-10-18 09:23:19 +01:00
Jermolene
87fa7f972c Ensure global macros are available in modals and notifications 2016-10-18 09:18:56 +01:00
Jermolene
b4b77d1681 Add new filter operators for various string encoding/decodings 2016-10-18 09:18:32 +01:00
Jermolene
b35544bf49 Extend set widget to support returning a single result from a filter
This solves the problem with extraneous double square brackets when
using the filtered set widget.
2016-10-18 09:16:47 +01:00
Jermolene
d9f301f755 Add 'formattedtext' output type to Wikify widget 2016-10-18 09:13:52 +01:00
Jermolene
2f590a365e Expose document location via $:/info/url/* info tiddlers 2016-10-18 09:12:55 +01:00
Jermolene
8fbcfaa79b Make the editor preview scrollable in fixed height mode
Fixes #2616
2016-10-18 08:46:48 +01:00
Jermolene
accd4a1b65 Fix regexp performance problem introduced in c7b31b0242
This fixes a problem introduced in
c7b31b0242.

The changes by @tobibeer inadvertently made the regular expression
evaluation significantly more expensive because of lookahead. The is
less elegant but reverts the performance problem.
2016-10-17 19:08:01 +01:00
Jermolene
537cfcbf79 Addendum to #2610
* Ensure we don’t try to read tiddlers from `.meta` files
* Improve docs
2016-10-15 18:06:17 +01:00
Jermolene
1b41b44684 Improve support for bulk loading tiddlers under Node.js
Fixes #2610
2016-10-15 16:23:17 +01:00
FND
d7b6917638 Clarify WebDAV documentation (#2613) 2016-10-15 14:19:19 +01:00
Jermolene
892a1f560e Trap JSON syntax errors during import
Fixes #2609
2016-10-13 14:16:55 +01:00
Jermolene
da298f037d Remove extraneous console.log()
Fixing f97c1226aa
2016-10-12 15:50:43 +01:00
Jermolene
f97c1226aa Prevent HTML parser from mis-recognising email addresses
Email addresses such as `<jeremy@example.com>` were being erroneously
parsed as HTML tags.

Fixes #2604
2016-10-12 13:17:53 +01:00
Jermolene
989cee5059 Suppress search results if search string is too short
Fixes #2603
2016-10-11 09:27:26 +01:00
Jermolene
e724bc6120 Extend docs template for operators to allow for "from-version" field 2016-10-11 09:26:50 +01:00
Jermolene
ffcbcbfa82 Add new 'minlength' operator
Fixes #1493
2016-10-11 09:26:20 +01:00
Devin Weaver
f1090d749e Fix str.length strEndsWith bug (#2572)
This was some how missed in dev testing I guess. @buggyj suggested this.

Should fix #2571
2016-10-08 14:06:30 +01:00
Tobias Beer
b9299309cc Fixes #2076 single line macros shouldn't need terminating line break 2016-10-08 13:44:30 +01:00
Tobias Beer
bf253a603b Removed unused vars + some whitespace (#2106) 2016-10-08 13:32:14 +01:00
Tobias Beer
f575389d89 Update wikiparserrules operator for no operand (#2193)
* return all wikiparserrules w/o operand

* simpler layout & code / updated instruction details

Also wanted to link each rule to the official docs using a dictionary at
`$:/language/Docs/ParserRules/`. However, without #2194 this is not
doable.
2016-10-08 13:04:11 +01:00
Jermolene
994432e28e Merge branch 'Serj-Aleks-patch-1' 2016-10-08 12:27:35 +01:00
Jermolene
6079563ff8 Merge branch 'patch-1' of https://github.com/Serj-Aleks/TiddlyWiki5 into Serj-Aleks-patch-1 2016-10-08 12:27:09 +01:00
Jermolene
ff6b0bd5dc Merge branch 'zakrec-patch-9' 2016-10-08 12:24:44 +01:00
Jermolene
23060f92f0 Merge branch 'patch-9' of https://github.com/zakrec/TiddlyWiki5 into zakrec-patch-9 2016-10-08 12:24:17 +01:00
Tobias Beer
d038e0bc1b Filter titles in new fieldname popup by entered string (#2585) 2016-10-08 12:18:19 +01:00
Tobias Beer
3486acaec6 Remove old titles from story on save (#2587)
fix for #2381
2016-10-08 12:17:27 +01:00
Jermolene
be574b713e Fixes #2588 2016-10-08 12:10:07 +01:00
Tobias Beer
808587f1c1 Fixes #2311 allows ctrl-enter to add tag and field (#2590)
fixes #2311

demo: http://2311.tiddlyspot.com
2016-10-08 11:53:20 +01:00
Tobias Beer
c7b31b0242 allows textPrimitives.anyLetter in syslink (#2596)
* allows textPrimitives.anyLetter in syslink

now only supports anyletter as per request by @jermolene
2016-10-08 11:51:07 +01:00
Jermolene
641eeaf611 Refresh action widgets before invoking them
Fixes #2599, at least partially.
2016-10-08 10:19:09 +01:00
Jermolene
c4e13bc94a Add icon and message handler for print button
I’m inclined to think it’s not worth adding a corresponding page
control button because it’ll require a lot of tiddlers for the
translation etc.
2016-10-08 10:10:54 +01:00
Jermolene
ee66d1a1af Add a documentation macro for marking version numbers
By signalling features that are new in 5.1.14 we can include
documentation updates for the new version when we build updates to
5.1.13
2016-10-08 10:05:34 +01:00
Jermolene
e4f3d56bdc Correct reference to missing variable 2016-10-06 14:50:54 +01:00
Jermolene
20daaae7e8 Make $tw.utils.stringifyList() resilient to null values in the array 2016-09-30 18:28:12 +01:00
Jermolene
b867b7487e Fix tw2-plugin-check warning so that more than one plugin is displayed 2016-09-30 18:27:45 +01:00
Jermolene
4be5f0abe8 Switch highlight plugin under Node.js to use DOM rather than raw HTML
Hi @welford I wondered if you could kindly review this commit, since
you authored the original code? Before this commit, I was running into
a crash when running `prerelease-bld.sh` from
`build.jermolene.github.io`, caused by using raw HTML for the
highlighted block. Switching to the fake dom seems to fix things, but
I’d like a second pair of eyes.
2016-09-28 11:34:15 +01:00
Jermolene
292d653880 Fix typo affecting created/creator fields when deleting field
Fixes #2579
2016-09-28 11:18:58 +01:00
Jermolene
d86e4043c2 Some sample .ENEX files for testing 2016-09-26 12:32:57 +01:00
Daniel Rodríguez Rivero
0409151801 Update How to customise the password prompt.tid (#2580)
A minor typo corrected. Minor but a link broker!
2016-09-22 13:14:58 +02:00
nameanyone
e1cc285151 Align the right edge of the preview (#2583)
Currently it's 3px off to the left compared to the above element.
2016-09-22 12:37:22 +02:00
Jermolene
ffc0899f52 Move the copyright.md file to the root of the repo
Hopefully GitHub might start to recognise TiddlyWiki’s license
2016-09-14 08:30:23 +01:00
Jermolene
2d9aa12aa8 Increase size of icons in Advanced Search/Filter
An easy one.

Fixes #2464
2016-09-13 19:26:37 +01:00
Jermolene
fc898ae64a Fix broken macro in "Release 5.1.9"
This local `<<colour-picker>>` macro was overwritten by the new core
macro of the same name

Fixes #2573
2016-09-07 11:12:30 +01:00
Daniel Rodríguez Rivero
975bc30079 Update PluginMechanism.tid (#2574)
Added link to sematic versioning
2016-09-06 14:53:38 +01:00
Jermolene
06b7de415c Ensure cancel button in login prompt doesn't also submit form
Fixes #2561
2016-08-29 19:13:25 +01:00
Jermolene
3ad8cf59bd Add column count CSS macro
Still needs prefixing for Firefox
2016-08-27 14:24:07 +01:00
Jermolene
5f0a1dd967 Revision of 03db25cf38
We should only fallback to the classic storyview if a storyview was
specified; if none was specified then we shouldn’t use a storyview.
2016-08-27 14:24:07 +01:00
Steve Schneider
0788145cb5 CLA signature for @stevesunypoly (#2557) 2016-08-26 18:13:26 +01:00
Jermolene
03db25cf38 Fallback to "classic" if specified storyview not found
Fixes #2555
2016-08-26 11:34:43 +01:00
Jermolene
4d74f52202 Remove extraneous text
Copy/paste whoops.
2016-08-20 17:11:54 +01:00
Jermolene
05b32728bc Allow browser-based file reading to use deserializers for binary files 2016-08-20 17:09:22 +01:00
Jermolene
3a2ea9b98b Register .xlsx filetype 2016-08-20 17:08:44 +01:00
Jermolene
da1905b789 Revise default for Buffer in the browser
Back in 7d12d89a0a we added support for
Node.js global `Buffer` object, explicitly exposing it to the module
loader sandbox. The value `{}` was used in the browser, but is now
causing problems with libraries that perform feature detection.
2016-08-20 17:08:24 +01:00
Daniel Rodríguez Rivero
845e8294cd Update How to customise the password prompt.tid (#2543)
Fixed small typo on the use of a template.
2016-08-20 15:46:50 +01:00
Jermolene
f079b31334 Fix further issue with highlight.js brush handling 2016-08-18 10:32:21 +01:00
Jermolene
ee9d19d299 Fix problem with highlight plugin language brushes
TiddlyWiki passes the MIME type of the tiddler to highlight.js as the
"language brush", but it turns out that highlight.js doesn't actually
understand MIME types. This commit introduces a configuration mapping
between common MIME types and highlight.js language brushes

Fixes #2535
2016-08-18 09:07:06 +01:00
Jermolene
ffae85140f Fix state cleanup for excise toolbar button
We were deleting the wrong tiddler
2016-08-18 08:59:09 +01:00
Jermolene
ba2f831d8c Fix parsing of multids files
The old code required a space after the colon separating the title
fragment from the text, and didn’t trim the strings. The new code is
more tolerant, by not requiring the space, and trimming the strings.
2016-08-18 08:58:54 +01:00
Jermolene
7bc7f643b6 Remove extraneous console.log 2016-08-16 15:48:25 +01:00
Jermolene
18dd8d4433 Fix problem with lazy loading under Node.js
Fixes #2514
2016-08-16 15:48:14 +01:00
Jermolene
118b2ffe2f Fix lazy.sh to serve the edition *tw5.com-server*
As per the existing documentation:
http://tiddlywiki.com/#Scripts%20for%20TiddlyWiki%20on%20Node.js
2016-08-16 15:46:53 +01:00
Jermolene
4be6efdb4e Fix JSON typo 2016-08-16 15:45:17 +01:00
Jermolene
e20bce5450 Add experimental support for RTL languages
This commit permits language plugins to carry the field
“text-direction” with the value “rtl” to trigger right-to-left layout
of the entire page. We also adjust the sidebar layout to work in RTL
mode.

There are still a number of problems to be addressed:

* Brackets and other punctuation incorrectly placed within en-GB UI text
* System tiddler titles are rendered semi-back-to-front (eg
`languages/ca-ES/:$`)

Starting to address #1845 and the discussion in #2523.
2016-08-15 19:47:26 +01:00
nameanyone
12e3e8b489 Fix a link to GroupedTiddlers (#2537) 2016-08-15 18:42:26 +01:00
HC
b7c416d340 @hchaase CLA signature.md (#2534)
sry for the delay.. forgot to sign
2016-08-11 14:59:03 +01:00
Jermolene
8b60dbb81d Ensure page background colour takes shows through transparent background images
Fixes #2529
2016-08-09 09:36:17 +01:00
Przemek Wesołek
9bd002e41d Change the order of static content generation. (#2528)
Prevents the `--rendertiddlers` removing the `static.css` file rendered earlier,
similar to https://github.com/Jermolene/TiddlyWiki5/pull/1207
and https://github.com/Jermolene/TiddlyWiki5/issues/703.
2016-08-08 11:16:48 +01:00
DoronTzur
10d5aecf3f @DoronTzur CLA signature (#2526) 2016-08-08 09:43:25 +01:00
Jermolene
4eed18496f Extend editor link button to create external links and missing links
Fixes #2521
2016-08-07 10:18:53 +01:00
Jermolene
959a7ac485 Add icon for foldbar visibility control
Fixes #2525
2016-08-07 10:16:44 +01:00
Jermolene
8f6abf534f Add descriptions for missing module types 2016-08-06 21:38:17 +01:00
Jermolene
b96377099a Add Hebrew translation
Many thanks to @DoronTzur
2016-08-06 15:56:25 +01:00
Jermolene
486b326ea9 Update for building 5.1.14-prerelease 2016-08-06 15:03:13 +01:00
Jermolene
7326a3a4cc Only call isReady() for sync adaptors that support it
Fixes #2522
2016-08-06 14:45:33 +01:00
Jermolene
08cfa88249 Fix problem with unsafe use of String.prototype.replace()
We were using `String.prototype.replace()` without addressing the
wrinkle that dollar signs in the replacement string have special
handling. This caused problems in situations where the replacement
string is derived from user input and contains dollar signs.

Fixes #2517
2016-08-06 14:45:33 +01:00
Przemek Wesołek
82694e1426 @jest CLA signature (#2524) 2016-08-06 14:38:01 +01:00
Sergey A. Shishkin
570c1b20f0 Update cla-individual.md 2016-07-28 18:08:59 +02:00
Jermolene
1da8a32837 Retrospectively update release node for 5.1.13 2016-07-25 11:11:28 +01:00
Jermolene
360915d3cd Version number update for 5.1.13 2016-07-25 09:51:02 +01:00
Jermolene
77eb05e7fe Update readmes 2016-07-25 09:50:24 +01:00
Jermolene
b201141753 Set dates for 5.1.13 2016-07-25 09:49:09 +01:00
Jermolene
65a5135245 Updated Portuguese Translation 2016-07-25 09:31:52 +01:00
Jermolene
851ea44b3b Content updates for 5.1.13 release 2016-07-25 09:10:45 +01:00
Jermolene
e282ff1d92 Fix problem with tiddler titled "undefined"
Fixes #2507

The problem stems from a JavaScript quirk: the fact that
`({“undefined":"Me"})[undefined]` returns “Me”. The quirk is that the
value `undefined` is coerced into the string “undefined” when used as
an index.

In this particular case, the code for `wiki.getTiddler()` was returning
the tiddler with the title `”undefined”` when called with the title set
to the value `undefined`. It happens that the pluginswitcher called
`wiki.getTiddler(undefined)`.
2016-07-22 11:31:02 +01:00
Jermolene
487d6642e3 Fix KaTeX rendering bug on Chrome
Fixes #2500
2016-07-21 08:48:13 +01:00
Jermolene
8f6178acfc Remove tiddler frame padding in print view
It was wasting a border around each page.
2016-07-20 22:09:41 +01:00
Jermolene
5cc09d9cd5 Fix some typos from #2504 2016-07-20 16:16:21 +01:00
Devin Weaver
64b7e66675 Prevent adding extra file extensions (#2504)
Fixes #2503

This bug was introduced in commit c4c7b18 where it would append
additional .tid extensions to a file every time the node server was
restarted.

Here we check the filepath does not have the extension already before
appending it.
2016-07-20 16:07:28 +01:00
Jermolene
6499fe5d3d Update docs for installing/uninstalling plugins 2016-07-20 16:02:04 +01:00
Jermolene
e49d310ea9 Relax external link matching to ignore illegal characters
Fixes #2501, and rolls back some of #2324
2016-07-20 11:37:44 +01:00
Jermolene
c4c7b1868c Ensure .tid extension when saving .tid files
Missed off of a4506231a7
2016-07-15 16:55:57 +01:00
Jermolene
a4506231a7 Fix writing non-wikitext text tiddlers
The plan had been to switch template depending on the content type, but
we’d only implemented support for saving wikitext tiddlers. That meant
that creating a tiddler with any non-wikitext content type failed to
write the file correctly under Node.js.

Now we just always save in .tid file format.
2016-07-14 17:42:57 +01:00
Jermolene
b357e8bb26 Correct thumbnail size 2016-07-14 16:19:25 +01:00
Jermolene
a0bdefbd8b Add HelloThere thumbnail for TWEUM2016 2016-07-14 15:46:41 +01:00
Jermolene
782553eb62 Remove tilde from characters not allowed in external URLs 2016-07-13 14:06:47 +01:00
Jermolene
b24488174c Prepare for 5.1.13-prerelease 2016-07-13 12:14:24 +01:00
zakrec
8ec8c5103e Update cla-individual.md
Signing the CLA
2016-02-21 07:56:08 +01:00
Tobias Beer
a5d380006e updates to overall operators docs
* info on default input being `all[tiddlers]`
* clearer column layout
* removed fiddly done button
2016-01-10 10:13:23 +01:00
2484 changed files with 92430 additions and 26821 deletions

34
.travis.yml Normal file
View File

@@ -0,0 +1,34 @@
language: node_js
- "node"
stages:
- name: test
- name: build-prerelease
if: branch = "master"
- name: build-tiddlywiki-com
if: branch = "tiddlywiki-com"
jobs:
include:
- stage: test
script: ./bin/test.sh
- stage: build-prerelease
script:
- ./bin/travis-pre-build.sh
- export TW5_BUILD_TIDDLYWIKI='./tiddlywiki.js'
- export TW5_BUILD_VERSION=$(./bin/get-plugin-library-version-number)
- export TW5_BUILD_DETAILS="Prerelease built from branch '$TRAVIS_BRANCH' at commit $(git rev-parse HEAD) of $(git remote get-url origin) at $(date +'%F %T %Z')"
- export TW5_BUILD_MAIN_EDITION='./editions/prerelease'
- export TW5_BUILD_OUTPUT='./output/prerelease'
- ./bin/build-site.sh
- ./bin/travis-push.sh
- stage: build-tiddlywiki-com
script:
- ./bin/travis-pre-build.sh
- export TW5_BUILD_TIDDLYWIKI='./node_modules/tiddlywiki/tiddlywiki.js'
- export TW5_BUILD_VERSION=$(./bin/get-plugin-library-version-number)
- export TW5_BUILD_DETAILS="Built from branch '$TRAVIS_BRANCH' at commit $(git rev-parse HEAD) of $(git remote get-url origin) at $(date +'%F %T %Z')"
- export TW5_BUILD_MAIN_EDITION='./editions/tw5.com'
- export TW5_BUILD_OUTPUT='./output'
- ./bin/build-site.sh
- ./bin/travis-push.sh

View File

@@ -1,15 +0,0 @@
@echo off
rem build TiddlyWiki 2.x
rem cook the TiddlyWiki 2.x.x index file
node .\tiddlywiki.js ^
editions\tw2 ^
--verbose ^
--output tmp\tw2 ^
--load editions\tw2\source\tiddlywiki.com\index.html.recipe ^
--rendertiddler $:/core/templates/tiddlywiki2.template.html index.html text/plain ^
|| exit 1
fc tmp\tw2\index.html editions\tw2\target\prebuilt.html

View File

@@ -1,15 +0,0 @@
#!/bin/bash
# build TiddlyWiki 2.x
# cook the TiddlyWiki 2.x.x index file
node ./tiddlywiki.js \
editions/tw2 \
--verbose \
--output tmp/tw2 \
--load editions/tw2/source/tiddlywiki.com/index.html.recipe \
--rendertiddler $:/core/templates/tiddlywiki2.template.html index.html text/plain \
|| exit 1
diff -q tmp/tw2/index.html editions/tw2/target/prebuilt.html

449
bin/build-site.sh Executable file
View File

@@ -0,0 +1,449 @@
#!/bin/bash
# Build all tiddlywiki.com assets.
# Default to the current version number for building the plugin library
if [ -z "$TW5_BUILD_VERSION" ]; then
TW5_BUILD_VERSION=v5.1.19
fi
echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]"
# Default to using tw5.com as the main edition for /index.html
if [ -z "$TW5_BUILD_MAIN_EDITION" ]; then
TW5_BUILD_MAIN_EDITION=./editions/tw5.com
fi
echo "Using TW5_BUILD_MAIN_EDITION as [$TW5_BUILD_MAIN_EDITION]"
# Default to the version of TiddlyWiki installed in this repo
if [ -z "$TW5_BUILD_TIDDLYWIKI" ]; then
TW5_BUILD_TIDDLYWIKI=./tiddlywiki.js
fi
echo "Using TW5_BUILD_TIDDLYWIKI as [$TW5_BUILD_TIDDLYWIKI]"
# Set up the build details
if [ -z "$TW5_BUILD_DETAILS" ]; then
TW5_BUILD_DETAILS="$(git symbolic-ref --short HEAD)-$(git rev-parse HEAD) from $(git remote get-url origin)"
fi
echo "Using TW5_BUILD_DETAILS as [$TW5_BUILD_DETAILS]"
if [ -z "$TW5_BUILD_COMMIT" ]; then
TW5_BUILD_COMMIT="$(git rev-parse HEAD)"
fi
echo "Using TW5_BUILD_COMMIT as [$TW5_BUILD_COMMIT]"
# Set up the build output directory
if [ -z "$TW5_BUILD_OUTPUT" ]; then
TW5_BUILD_OUTPUT=./output
fi
mkdir -p $TW5_BUILD_OUTPUT
if [ ! -d "$TW5_BUILD_OUTPUT" ]; then
echo 'A valid TW5_BUILD_OUTPUT environment variable must be set'
exit 1
fi
echo "Using TW5_BUILD_OUTPUT as [$TW5_BUILD_OUTPUT]"
echo "Build details: $TW5_BUILD_DETAILS"
# Make the CNAME file that GitHub Pages requires
echo "tiddlywiki.com" > $TW5_BUILD_OUTPUT/CNAME
# Delete any existing static content
mkdir -p $TW5_BUILD_OUTPUT/static
mkdir -p $TW5_BUILD_OUTPUT/dev
mkdir -p $TW5_BUILD_OUTPUT/dev/static
rm $TW5_BUILD_OUTPUT/static/*
rm $TW5_BUILD_OUTPUT/dev/static/*
# Redirects
echo "<a href='./plugins/tiddlywiki/tw2parser/index.html'>Moved to http://tiddlywiki.com/plugins/tiddlywiki/tw2parser/index.html</a>" > $TW5_BUILD_OUTPUT/classicparserdemo.html
echo "<a href='./plugins/tiddlywiki/codemirror/index.html'>Moved to http://tiddlywiki.com/plugins/tiddlywiki/codemirror/index.html</a>" > $TW5_BUILD_OUTPUT/codemirrordemo.html
echo "<a href='./plugins/tiddlywiki/d3/index.html'>Moved to http://tiddlywiki.com/plugins/tiddlywiki/d3/index.html</a>" > $TW5_BUILD_OUTPUT/d3demo.html
echo "<a href='./plugins/tiddlywiki/highlight/index.html'>Moved to http://tiddlywiki.com/plugins/tiddlywiki/highlight/index.html</a>" > $TW5_BUILD_OUTPUT/highlightdemo.html
echo "<a href='./plugins/tiddlywiki/markdown/index.html'>Moved to http://tiddlywiki.com/plugins/tiddlywiki/markdown/index.html</a>" > $TW5_BUILD_OUTPUT/markdowndemo.html
echo "<a href='./plugins/tiddlywiki/tahoelafs/index.html'>Moved to http://tiddlywiki.com/plugins/tiddlywiki/tahoelafs/index.html</a>" > $TW5_BUILD_OUTPUT/tahoelafs.html
# Put the build details into a .tid file so that it can be included in each build (deleted at the end of this script)
echo -e -n "title: $:/build\ncommit: $TW5_BUILD_COMMIT\n\n$TW5_BUILD_DETAILS\n" > $TW5_BUILD_OUTPUT/build.tid
######################################################
#
# Core distribution
#
######################################################
# /index.html Main site
# /favicon.ico Favicon for main site
# /static.html Static rendering of default tiddlers
# /alltiddlers.html Static rendering of all tiddlers
# /static/* Static single tiddlers
# /static/static.css Static stylesheet
# /static/favicon.ico Favicon for static pages
node $TW5_BUILD_TIDDLYWIKI \
$TW5_BUILD_MAIN_EDITION \
--verbose \
--version \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--build favicon static index \
|| exit 1
# /empty.html Empty
# /empty.hta For Internet Explorer
node $TW5_BUILD_TIDDLYWIKI \
./editions/empty \
--verbose \
--output $TW5_BUILD_OUTPUT \
--build empty \
|| exit 1
# /test.html Test edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/test \
--verbose \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all test.html text/plain \
|| exit 1
# /dev/index.html Developer docs
# /dev/favicon.ico Favicon for dev site
# /dev/static.html Static rendering of default tiddlers
# /dev/alltiddlers.html Static rendering of all tiddlers
# /dev/static/* Static single tiddlers
# /dev/static/static.css Static stylesheet
node $TW5_BUILD_TIDDLYWIKI \
./editions/dev \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/dev \
--build index favicon static \
|| exit 1
# /upgrade.html Custom edition for performing upgrades
node $TW5_BUILD_TIDDLYWIKI \
./editions/upgrade \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--build upgrade \
|| exit 1
# /encrypted.html Copy of the main file encrypted with the password "password"
node $TW5_BUILD_TIDDLYWIKI \
$TW5_BUILD_MAIN_EDITION \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--build encrypted \
|| exit 1
######################################################
#
# Editions
#
######################################################
# /editions/xlsx-utils/index.html xlsx-utils edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/xlsx-utils \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/xlsx-utils/ \
--build index \
|| exit 1
# /editions/resumebuilder/index.html Resume builder edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/resumebuilder \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/resumebuilder/ \
--build index \
|| exit 1
# /editions/text-slicer/index.html Text slicer edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/text-slicer \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/text-slicer/ \
--build index \
|| exit 1
# /editions/translators/index.html Translators edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/translators \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/translators/ \
--build index \
|| exit 1
# /editions/introduction/index.html Introduction edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/introduction \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/introduction/ \
--build index \
|| exit 1
# /editions/full/index.html Full edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/full \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/full/ \
--build index \
|| exit 1
# /editions/tw5.com-docs/index.html tiddlywiki.com docs edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/tw5.com-docs \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/editions/tw5.com-docs/ \
--build index \
|| exit 1
######################################################
#
# Plugin demos
#
######################################################
# /plugins/tiddlywiki/innerwiki/index.html Demo wiki with Innerwiki plugin
node $TW5_BUILD_TIDDLYWIKI \
./editions/innerwikidemo \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all plugins/tiddlywiki/innerwiki/index.html text/plain \
|| exit 1
# /plugins/tiddlywiki/dynaview/index.html Demo wiki with DynaView plugin
# /plugins/tiddlywiki/dynaview/empty.html Empty wiki with DynaView plugin
node $TW5_BUILD_TIDDLYWIKI \
./editions/dynaviewdemo \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all plugins/tiddlywiki/dynaview/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/dynaview/empty.html text/plain \
|| exit 1
# /plugins/tiddlywiki/katex/index.html Demo wiki with KaTeX plugin
# /plugins/tiddlywiki/katex/empty.html Empty wiki with KaTeX plugin
# TODO: Build the static file with the release of 5.1.3
# --rendertiddler $:/core/templates/static.template.html plugins/tiddlywiki/katex/static.html text/plain \
node $TW5_BUILD_TIDDLYWIKI \
./editions/katexdemo \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all plugins/tiddlywiki/katex/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/katex/empty.html text/plain \
|| exit 1
# /plugins/tiddlywiki/tahoelafs/index.html Demo wiki with Tahoe-LAFS plugin
# /plugins/tiddlywiki/tahoelafs/empty.html Empty wiki with Tahoe-LAFS plugin
node $TW5_BUILD_TIDDLYWIKI \
./editions/tahoelafs \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all plugins/tiddlywiki/tahoelafs/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/tahoelafs/empty.html text/plain \
|| exit 1
# /plugins/tiddlywiki/d3/index.html Demo wiki with D3 plugin
# /plugins/tiddlywiki/d3/empty.html Empty wiki with D3 plugin
node $TW5_BUILD_TIDDLYWIKI \
./editions/d3demo \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all plugins/tiddlywiki/d3/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/d3/empty.html text/plain \
|| exit 1
# /plugins/tiddlywiki/codemirror/index.html Demo wiki with codemirror plugin
# /plugins/tiddlywiki/codemirror/empty.html Empty wiki with codemirror plugin
node $TW5_BUILD_TIDDLYWIKI \
./editions/codemirrordemo \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all plugins/tiddlywiki/codemirror/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/codemirror/empty.html text/plain \
|| exit 1
# /plugins/tiddlywiki/markdown/index.html Demo wiki with Markdown plugin
# /plugins/tiddlywiki/markdown/empty.html Empty wiki with Markdown plugin
node $TW5_BUILD_TIDDLYWIKI \
./editions/markdowndemo \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all plugins/tiddlywiki/markdown/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/markdown/empty.html text/plain \
|| exit 1
# /plugins/tiddlywiki/tw2parser/index.html Demo wiki with tw2parser plugin
# /plugins/tiddlywiki/tw2parser/empty.html Empty wiki with tw2parser plugin
node $TW5_BUILD_TIDDLYWIKI \
./editions/classicparserdemo \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all plugins/tiddlywiki/tw2parser/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/tw2parser/empty.html text/plain \
|| exit 1
# /plugins/tiddlywiki/highlight/index.html Demo wiki with highlight plugin
# /plugins/tiddlywiki/highlight/empty.html Empty wiki with highlight plugin
node $TW5_BUILD_TIDDLYWIKI \
./editions/highlightdemo \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT \
--rendertiddler $:/core/save/all plugins/tiddlywiki/highlight/index.html text/plain \
--rendertiddler $:/core/save/empty plugins/tiddlywiki/highlight/empty.html text/plain \
|| exit 1
######################################################
#
# Language editions
#
######################################################
# Delete any existing static content
rm $TW5_BUILD_OUTPUT/languages/de-AT/static/*
rm $TW5_BUILD_OUTPUT/languages/de-DE/static/*
rm $TW5_BUILD_OUTPUT/languages/es-ES/static/*
rm $TW5_BUILD_OUTPUT/languages/fr-FR/static/*
rm $TW5_BUILD_OUTPUT/languages/ja-JP/static/*
rm $TW5_BUILD_OUTPUT/languages/ko-KR/static/*
rm $TW5_BUILD_OUTPUT/languages/zh-Hans/static/*
rm $TW5_BUILD_OUTPUT/languages/zh-Hant/static/*
# /languages/de-AT/index.html Demo wiki with de-AT language
# /languages/de-AT/empty.html Empty wiki with de-AT language
node $TW5_BUILD_TIDDLYWIKI \
./editions/de-AT \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/languages/de-AT \
--build favicon empty static index \
|| exit 1
# /languages/de-DE/index.html Demo wiki with de-DE language
# /languages/de-DE/empty.html Empty wiki with de-DE language
node $TW5_BUILD_TIDDLYWIKI \
./editions/de-DE \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/languages/de-DE \
--build favicon empty static index \
|| exit 1
# /languages/es-ES/index.html Demo wiki with es-ES language
# /languages/es-ES/empty.html Empty wiki with es-ES language
node $TW5_BUILD_TIDDLYWIKI \
./editions/es-ES \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/languages/es-ES \
--build favicon empty static index \
|| exit 1
# /languages/fr-FR/index.html Demo wiki with fr-FR language
# /languages/fr-FR/empty.html Empty wiki with fr-FR language
node $TW5_BUILD_TIDDLYWIKI \
./editions/fr-FR \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/languages/fr-FR \
--build favicon empty static index \
|| exit 1
# /languages/ja-JP/index.html Demo wiki with ja-JP language
# /languages/ja-JP/empty.html Empty wiki with ja-JP language
node $TW5_BUILD_TIDDLYWIKI \
./editions/ja-JP \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/languages/ja-JP \
--build empty index \
|| exit 1
# /languages/ko-KR/index.html Demo wiki with ko-KR language
# /languages/ko-KR/empty.html Empty wiki with ko-KR language
node $TW5_BUILD_TIDDLYWIKI \
./editions/ko-KR \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/languages/ko-KR \
--build favicon empty static index \
|| exit 1
# /languages/zh-Hans/index.html Demo wiki with zh-Hans language
# /languages/zh-Hans/empty.html Empty wiki with zh-Hans language
node $TW5_BUILD_TIDDLYWIKI \
./editions/zh-Hans \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/languages/zh-Hans \
--build empty index \
|| exit 1
# /languages/zh-Hant/index.html Demo wiki with zh-Hant language
# /languages/zh-Hant/empty.html Empty wiki with zh-Hant language
node $TW5_BUILD_TIDDLYWIKI \
./editions/zh-Hant \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/languages/zh-Hant \
--build empty index \
|| exit 1
######################################################
#
# Plugin library
#
######################################################
node $TW5_BUILD_TIDDLYWIKI \
./editions/pluginlibrary \
--verbose \
--load $TW5_BUILD_OUTPUT/build.tid \
--output $TW5_BUILD_OUTPUT/library/$TW5_BUILD_VERSION \
--build \
|| exit 1
# Delete the temporary build tiddler
rm $TW5_BUILD_OUTPUT/build.tid || exit 1

View File

@@ -0,0 +1,19 @@
#!/usr/bin/env node
// Extract raw version number from package.json (without the optional "-prerelease" suffix)
if(!process.env["TW5_BUILD_TIDDLYWIKI"]) {
throw "TW5_BUILD_TIDDLYWIKI environment variable not set";
}
var fs = require("fs"),
path = require("path");
var filename = path.resolve(path.dirname(process.env["TW5_BUILD_TIDDLYWIKI"]),"./package.json"),
json = JSON.parse(fs.readFileSync(filename,"utf8"));
if(!json.version) {
throw "Missing version number in package.json";
}
process.stdout.write("v" + json.version.split("-")[0]);

View File

@@ -5,7 +5,7 @@
# Optional parameter is the username for signing edits
node ./tiddlywiki.js \
editions/server \
editions/tw5.com-server \
--verbose \
--server 8080 $:/core/save/lazy-images text/plain text/html $1 $2\
|| exit 1

7
bin/npm-publish.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
# publish to npm
./bin/clean.sh
npm publish || exit 1

8
bin/quick-bld.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
# Abbreviated build script for building prerelease
tiddlywiki editions/prerelease \
--verbose \
--build favicon index \
|| exit 1

17
bin/readme-bld.sh Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
# Build readmes from corresponding tiddlers
# Default to the version of TiddlyWiki installed in this repo
if [ -z "$TW5_BUILD_TIDDLYWIKI" ]; then
TW5_BUILD_TIDDLYWIKI=./tiddlywiki.js
fi
# tw5.com readmes
node $TW5_BUILD_TIDDLYWIKI \
editions/tw5.com \
--verbose \
--output . \
--build readmes \
|| exit 1

View File

@@ -1,3 +1,4 @@
<h1 class="">Script Files</h1><p>The <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> repository contains several scripts in the <code>bin</code> folder that you can use to automate common tasks, or as a useful starting point for your own scripts. See <a class="tc-tiddlylink tc-tiddlylink-missing" href="http://tiddlywiki.com/static/Scripts%2520for%2520building%2520tiddlywiki.com.html">Scripts for building tiddlywiki.com</a> for details of the scripts used to build and release <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/" target="_blank">http://tiddlywiki.com/</a>.</p><p>All the scripts expect to be run from the root folder of the repository.</p><h2 class=""><code>serve</code>: serves tw5.com</h2><pre><code>./bin/serve.sh -h
<h1 class="">Script Files</h1><p>The <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> repository contains several scripts in the <code>bin</code> folder that you can use to automate common tasks, or as a useful starting point for your own scripts. See <a class="tc-tiddlylink tc-tiddlylink-missing" href="https://tiddlywiki.com/static/Scripts%2520for%2520building%2520tiddlywiki.com.html">Scripts for building tiddlywiki.com</a> for details of the scripts used to build and release <a class="tc-tiddlylink-external" href="https://tiddlywiki.com/" rel="noopener noreferrer" target="_blank">https://tiddlywiki.com/</a>.</p><p>All the scripts expect to be run from the root folder of the repository.</p><h2 class=""><code>serve</code>: serves tw5.com</h2><pre><code>./bin/serve.sh -h
./bin/serve.sh [edition dir] [username] [password] [host] [port]</code></pre><p>Or:</p><pre><code>./bin/serve.cmd -h
./bin/serve.cmd [edition dir] [username] [password] [host] [port]</code></pre><p>This script starts <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> running as an HTTP server, defaulting to the content from the <code>tw5.com-server</code> edition. By default, the Node.js serves on port 8080. If the optional <code>username</code> parameter is provided, it is used for signing edits. If the <code>password</code> is provided then HTTP basic authentication is used. Run the script with the <code>-h</code> parameter to see online help.</p><p>To experiment with this configuration, run the script and then visit <code>http://127.0.0.1:8080</code> in a browser.</p><p>Changes made in the browser propagate to the server over HTTP (use the browser developer console to see these requests). The server then syncs changes to the file system (and logs each change to the screen).</p><h2 class=""><code>test</code>: build and run tests</h2><p>This script runs the <code>test</code> edition of <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on the server to perform the server-side tests and to build <code>test.html</code> for running the tests in the browser.</p><h2 class=""><code>lazy</code>: serves tw5.com with lazily loaded images</h2><pre><code>./bin/lazy.sh &lt;username&gt; [&lt;password&gt;]</code></pre><p>Or:</p><pre><code>./bin/lazy.cmd &lt;username&gt; [&lt;password&gt;]</code></pre><p>This script serves the <code>tw5.com-server</code> edition content with <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/LazyLoading.html">LazyLoading</a> applied to images.</p><h2 class=""><code>2bld</code>: builds <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> 2.6.5</h2><p>This script builds <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> 2.6.5 from the original source and then displays the differences between them (<code>diff</code> is used for *nix, <code>fc</code> for Windows).</p>
./bin/serve.cmd [edition dir] [username] [password] [host] [port]</code></pre><p>This script starts <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> running as an HTTP server, defaulting to the content from the <code>tw5.com-server</code> edition. By default, the Node.js serves on port 8080. If the optional <code>username</code> parameter is provided, it is used for signing edits. If the <code>password</code> is provided then HTTP basic authentication is used. Run the script with the <code>-h</code> parameter to see online help.</p><p>To experiment with this configuration, run the script and then visit <code>http://127.0.0.1:8080</code> in a browser.</p><p>Changes made in the browser propagate to the server over HTTP (use the browser developer console to see these requests). The server then syncs changes to the file system (and logs each change to the screen).</p><h2 class=""><code>test</code>: build and run tests</h2><p>This script runs the <code>test</code> edition of <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on the server to perform the server-side tests and to build <code>test.html</code> for running the tests in the browser.</p><h2 class=""><code>lazy</code>: serves tw5.com with lazily loaded images</h2><pre><code>./bin/lazy.sh &lt;username&gt; [&lt;password&gt;]</code></pre><p>Or:</p><pre><code>./bin/lazy.cmd &lt;username&gt; [&lt;password&gt;]</code></pre><p>This script serves the <code>tw5.com-server</code> edition content with <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/LazyLoading.html">LazyLoading</a> applied to images.
</p>

View File

@@ -7,6 +7,7 @@
node ./tiddlywiki.js \
./editions/test \
--verbose \
--version \
--rendertiddler $:/core/save/all test.html text/plain \
|| exit 1

10
bin/travis-pre-build.sh Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/bash
# Install latest current release from npm
# (we need to force because otherwise npm will refuse to install a module of the same name)
npm --force install tiddlywiki || exit 1
# Pull existing GitHub pages content
git clone --depth=1 --branch=master "https://github.com/Jermolene/jermolene.github.io.git" output

20
bin/travis-push.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/bash
# Push output back to GitHub
cd output || exit 1
git config --global user.email "travis@travis-ci.org" || exit 1
git config --global user.name "Travis CI" || exit 1
git add -A . || exit 1
git commit --message "Travis build: $TRAVIS_BUILD_NUMBER of $TRAVIS_BRANCH ($(date +'%F %T %Z'))" || exit 1
git remote add deploy "https://$GH_TOKEN@github.com/Jermolene/jermolene.github.io.git" &>/dev/null || exit 1
git push deploy master &>/dev/null || exit 1
cd .. || exit 1

17
bin/verbump.sh Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
# Bump to a new version number
if [ -z "$1" ]
then
echo "Missing version (eg '5.1.38-prerelease')"
exit 1
fi
# Set the new version number (will also commit and tag the release)
npm version $1 -m "Version number update for $1" || exit 1
# Make sure our tags are pushed to the origin server
git push origin --tags || exit 1

View File

@@ -9,37 +9,50 @@ Basic styles used before we boot up the parsing engine
Error message and password prompt
*/
.tc-password-wrapper, .tc-error-form {
.tc-error-form {
font-family: sans-serif;
color: #fff;
z-index: 20000;
position: fixed;
background-color: rgb(255, 75, 75);
border: 8px solid rgb(255, 0, 0);
border-radius: 8px;
width: 50%;
margin-left: 25%;
margin-top: 4em;
padding: 0 2em 1em 2em;
}
.tc-error-form h1 {
text-align: center;
}
.tc-error-prompt {
text-align: center;
color: #000;
}
.tc-error-message {
overflow: auto;
max-height: 40em;
padding-right: 1em;
margin: 1em 0;
white-space: pre-line;
}
.tc-password-wrapper {
font-family: sans-serif;
z-index: 20000;
position: fixed;
text-align: center;
width: 200px;
top: 4em;
left: 50%;
margin-left: -144px; /* - width/2 - paddingHorz/2 - border */
left: 50%;
margin-left: -144px; /* - width/2 - paddingHorz/2 - border */
padding: 16px 16px 16px 16px;
border-radius: 8px;
}
.tc-error-form {
color: #fff;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
background-color: rgb(255, 75, 75);
border: 8px solid rgb(255, 0, 0);
width: 480px;
margin-left: -244px; /* - width/2 - paddingHorz/2 - border */
}
.tc-error-form div {
padding-bottom: 1em;
}
.tc-error-prompt {
color: #000;
text-shadow: none;
}
.tc-password-wrapper {
color: #000;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);

View File

@@ -51,6 +51,63 @@ $tw.utils.isArray = function(value) {
return Object.prototype.toString.call(value) == "[object Array]";
};
/*
Check if an array is equal by value and by reference.
*/
$tw.utils.isArrayEqual = function(array1,array2) {
if(array1 === array2) {
return true;
}
array1 = array1 || [];
array2 = array2 || [];
if(array1.length !== array2.length) {
return false;
}
return array1.every(function(value,index) {
return value === array2[index];
});
};
/*
Push entries onto an array, removing them first if they already exist in the array
array: array to modify (assumed to be free of duplicates)
value: a single value to push or an array of values to push
*/
$tw.utils.pushTop = function(array,value) {
var t,p;
if($tw.utils.isArray(value)) {
// Remove any array entries that are duplicated in the new values
if(value.length !== 0) {
if(array.length !== 0) {
if(value.length < array.length) {
for(t=0; t<value.length; t++) {
p = array.indexOf(value[t]);
if(p !== -1) {
array.splice(p,1);
}
}
} else {
for(t=array.length-1; t>=0; t--) {
p = value.indexOf(array[t]);
if(p !== -1) {
array.splice(t,1);
}
}
}
}
// Push the values on top of the main array
array.push.apply(array,value);
}
} else {
p = array.indexOf(value);
if(p !== -1) {
array.splice(p,1);
}
array.push(value);
}
return array;
};
/*
Determine if a value is a date
*/
@@ -89,7 +146,9 @@ Helper for making DOM elements
tag: tag name
options: see below
Options include:
namespace: defaults to http://www.w3.org/1999/xhtml
attributes: hashmap of attribute values
style: hashmap of styles
text: text to add as a child node
children: array of further child nodes
innerHTML: optional HTML for element
@@ -99,7 +158,7 @@ eventListeners: array of event listeners (this option won't work until $tw.utils
*/
$tw.utils.domMaker = function(tag,options) {
var doc = options.document || document;
var element = doc.createElement(tag);
var element = doc.createElementNS(options.namespace || "http://www.w3.org/1999/xhtml",tag);
if(options["class"]) {
element.className = options["class"];
}
@@ -115,6 +174,9 @@ $tw.utils.domMaker = function(tag,options) {
$tw.utils.each(options.attributes,function(attribute,name) {
element.setAttribute(name,attribute);
});
$tw.utils.each(options.style,function(value,name) {
element.style[name] = value;
});
if(options.eventListeners) {
$tw.utils.addEventListeners(element,options.eventListeners);
}
@@ -135,8 +197,8 @@ $tw.utils.error = function(err) {
var dm = $tw.utils.domMaker,
heading = dm("h1",{text: errHeading}),
prompt = dm("div",{text: promptMsg, "class": "tc-error-prompt"}),
message = dm("div",{text: err}),
button = dm("button",{text: ( $tw.language == undefined ? "close" : $tw.language.getString("Buttons/Close/Caption") )}),
message = dm("div",{text: err, "class":"tc-error-message"}),
button = dm("div",{children: [dm("button",{text: ( $tw.language == undefined ? "close" : $tw.language.getString("Buttons/Close/Caption") )})], "class": "tc-error-prompt"}),
form = dm("form",{children: [heading,prompt,message,button], "class": "tc-error-form"});
document.body.insertBefore(form,document.body.firstChild);
form.addEventListener("submit",function(event) {
@@ -251,29 +313,35 @@ $tw.utils.parseDate = function(value) {
// Stringify an array of tiddler titles into a list string
$tw.utils.stringifyList = function(value) {
var result = [];
for(var t=0; t<value.length; t++) {
if(value[t].indexOf(" ") !== -1) {
result.push("[[" + value[t] + "]]");
} else {
result.push(value[t]);
if($tw.utils.isArray(value)) {
var result = [];
for(var t=0; t<value.length; t++) {
var entry = value[t] || "";
if(entry.indexOf(" ") !== -1) {
result.push("[[" + entry + "]]");
} else {
result.push(entry);
}
}
return result.join(" ");
} else {
return value || "";
}
return result.join(" ");
};
// Parse a string array from a bracketted list. For example "OneTiddler [[Another Tiddler]] LastOne"
$tw.utils.parseStringArray = function(value) {
$tw.utils.parseStringArray = function(value, allowDuplicate) {
if(typeof value === "string") {
var memberRegExp = /(?:^|[^\S\xA0])(?:\[\[(.*?)\]\])(?=[^\S\xA0]|$)|([\S\xA0]+)/mg,
results = [],
results = [], names = {},
match;
do {
match = memberRegExp.exec(value);
if(match) {
var item = match[1] || match[2];
if(item !== undefined && results.indexOf(item) === -1) {
if(item !== undefined && (!$tw.utils.hop(names,item) || allowDuplicate)) {
results.push(item);
names[item] = true;
}
}
} while(match);
@@ -514,6 +582,9 @@ $tw.utils.PasswordPrompt.prototype.createPrompt = function(options) {
if(options.canCancel) {
children.push(dm("button",{
text: $tw.language.getString("Encryption/Cancel"),
attributes: {
type: "button"
},
eventListeners: [{
name: "click",
handlerFunction: function(event) {
@@ -635,9 +706,25 @@ $tw.utils.Crypto = function() {
Execute the module named 'moduleName'. The name can optionally be relative to the module named 'moduleRoot'
*/
$tw.modules.execute = function(moduleName,moduleRoot) {
var name = moduleName[0] === "." ? $tw.utils.resolvePath(moduleName,moduleRoot) : moduleName,
moduleInfo = $tw.modules.titles[name] || $tw.modules.titles[name + ".js"] || $tw.modules.titles[moduleName] || $tw.modules.titles[moduleName + ".js"] ,
tiddler = $tw.wiki.getTiddler(name) || $tw.wiki.getTiddler(name + ".js") || $tw.wiki.getTiddler(moduleName) || $tw.wiki.getTiddler(moduleName + ".js") ,
var name = moduleName;
if(moduleName.charAt(0) === ".") {
name = $tw.utils.resolvePath(moduleName,moduleRoot)
}
if(!$tw.modules.titles[name]) {
if($tw.modules.titles[name + ".js"]) {
name = name + ".js";
} else if($tw.modules.titles[name + "/index.js"]) {
name = name + "/index.js";
} else if($tw.modules.titles[moduleName]) {
name = moduleName;
} else if($tw.modules.titles[moduleName + ".js"]) {
name = moduleName + ".js";
} else if($tw.modules.titles[moduleName + "/index.js"]) {
name = moduleName + "/index.js";
}
}
var moduleInfo = $tw.modules.titles[name],
tiddler = $tw.wiki.getTiddler(name),
_exports = {},
sandbox = {
module: {exports: _exports},
@@ -648,7 +735,7 @@ $tw.modules.execute = function(moduleName,moduleRoot) {
clearInterval: clearInterval,
setTimeout: setTimeout,
clearTimeout: clearTimeout,
Buffer: $tw.browser ? {} : Buffer,
Buffer: $tw.browser ? undefined : Buffer,
$tw: $tw,
require: function(title) {
return $tw.modules.execute(title, name);
@@ -802,6 +889,7 @@ taking precedence to the right
*/
$tw.Tiddler = function(/* [fields,] fields */) {
this.fields = Object.create(null);
this.cache = Object.create(null);
for(var c=0; c<arguments.length; c++) {
var arg = arguments[c],
src = (arg instanceof $tw.Tiddler) ? arg.fields : arg;
@@ -836,6 +924,61 @@ $tw.Tiddler.prototype.hasField = function(field) {
return $tw.utils.hop(this.fields,field);
};
/*
Compare two tiddlers for equality
tiddler: the tiddler to compare
excludeFields: array of field names to exclude from the comparison
*/
$tw.Tiddler.prototype.isEqual = function(tiddler,excludeFields) {
if(!(tiddler instanceof $tw.Tiddler)) {
return false;
}
excludeFields = excludeFields || [];
var self = this,
differences = []; // Fields that have differences
// Add to the differences array
function addDifference(fieldName) {
// Check for this field being excluded
if(excludeFields.indexOf(fieldName) === -1) {
// Save the field as a difference
$tw.utils.pushTop(differences,fieldName);
}
}
// Returns true if the two values of this field are equal
function isFieldValueEqual(fieldName) {
var valueA = self.fields[fieldName],
valueB = tiddler.fields[fieldName];
// Check for identical string values
if(typeof(valueA) === "string" && typeof(valueB) === "string" && valueA === valueB) {
return true;
}
// Check for identical array values
if($tw.utils.isArray(valueA) && $tw.utils.isArray(valueB) && $tw.utils.isArrayEqual(valueA,valueB)) {
return true;
}
// Check for identical date values
if($tw.utils.isDate(valueA) && $tw.utils.isDate(valueB) && valueA.getTime() === valueB.getTime()) {
return true;
}
// Otherwise the fields must be different
return false;
}
// Compare our fields
for(var fieldName in this.fields) {
if(!isFieldValueEqual(fieldName)) {
addDifference(fieldName);
}
}
// There's a difference for every field in the other tiddler that we don't have
for(fieldName in tiddler.fields) {
if(!(fieldName in this.fields)) {
addDifference(fieldName);
}
}
// Return whether there were any differences
return differences.length === 0;
};
/*
Register and install the built in tiddler field modules
*/
@@ -870,15 +1013,46 @@ $tw.modules.define("$:/boot/tiddlerfields/list","tiddlerfield",{
/*
Wiki constructor. State is stored in private members that only a small number of privileged accessor methods have direct access. Methods added via the prototype have to use these accessors and cannot access the state data directly.
options include:
shadowTiddlers: Array of shadow tiddlers to be added
enableIndexers - Array of indexer names to enable, or null to use all available indexers
*/
$tw.Wiki = function(options) {
options = options || {};
var self = this,
tiddlers = Object.create(null), // Hashmap of tiddlers
tiddlerTitles = null, // Array of tiddler titles
getTiddlerTitles = function() {
if(!tiddlerTitles) {
tiddlerTitles = Object.keys(tiddlers);
}
return tiddlerTitles;
},
pluginTiddlers = [], // Array of tiddlers containing registered plugins, ordered by priority
pluginInfo = Object.create(null), // Hashmap of parsed plugin content
shadowTiddlers = options.shadowTiddlers || Object.create(null); // Hashmap by title of {source:, tiddler:}
shadowTiddlers = Object.create(null), // Hashmap by title of {source:, tiddler:}
shadowTiddlerTitles = null,
getShadowTiddlerTitles = function() {
if(!shadowTiddlerTitles) {
shadowTiddlerTitles = Object.keys(shadowTiddlers);
}
return shadowTiddlerTitles;
},
enableIndexers = options.enableIndexers || null,
indexers = [],
indexersByName = Object.create(null);
this.addIndexer = function(indexer,name) {
// Bail if this indexer is not enabled
if(enableIndexers && enableIndexers.indexOf(name) === -1) {
return;
}
indexers.push(indexer);
indexersByName[name] = indexer;
indexer.init();
};
this.getIndexer = function(name) {
return indexersByName[name] || null;
};
// Add a tiddler to the store
this.addTiddler = function(tiddler) {
@@ -891,9 +1065,33 @@ $tw.Wiki = function(options) {
if(title) {
// Uncomment the following line for detailed logs of all tiddler writes
// console.log("Adding",title,tiddler)
// Record the old tiddler state
var updateDescriptor = {
old: {
tiddler: this.getTiddler(title),
shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title)
}
}
// Save the new tiddler
tiddlers[title] = tiddler;
// Check we've got it's title
if(tiddlerTitles && tiddlerTitles.indexOf(title) === -1) {
tiddlerTitles.push(title);
}
// Record the new tiddler state
updateDescriptor["new"] = {
tiddler: tiddler,
shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title)
}
// Update indexes
this.clearCache(title);
this.clearGlobalCache();
$tw.utils.each(indexers,function(indexer) {
indexer.update(updateDescriptor);
});
// Queue a change event
this.enqueueTiddlerEvent(title);
}
}
@@ -902,35 +1100,63 @@ $tw.Wiki = function(options) {
// Delete a tiddler
this.deleteTiddler = function(title) {
// Uncomment the following line for detailed logs of all tiddler deletions
// console.log("Deleting",title,tiddler)
// console.log("Deleting",title)
if($tw.utils.hop(tiddlers,title)) {
// Record the old tiddler state
var updateDescriptor = {
old: {
tiddler: this.getTiddler(title),
shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title)
}
}
// Delete the tiddler
delete tiddlers[title];
// Delete it from the list of titles
if(tiddlerTitles) {
var index = tiddlerTitles.indexOf(title);
if(index !== -1) {
tiddlerTitles.splice(index,1);
}
}
// Record the new tiddler state
updateDescriptor["new"] = {
tiddler: this.getTiddler(title),
shadow: this.isShadowTiddler(title),
exists: this.tiddlerExists(title)
}
// Update indexes
this.clearCache(title);
this.clearGlobalCache();
$tw.utils.each(indexers,function(indexer) {
indexer.update(updateDescriptor);
});
// Queue a change event
this.enqueueTiddlerEvent(title,true);
}
};
// Get a tiddler from the store
this.getTiddler = function(title) {
var t = tiddlers[title];
if(t instanceof $tw.Tiddler) {
return t;
} else if(title !== undefined && Object.prototype.hasOwnProperty.call(shadowTiddlers,title)) {
return shadowTiddlers[title].tiddler;
} else {
if(title) {
var t = tiddlers[title];
if(t instanceof $tw.Tiddler) {
return t;
} else if(title !== undefined && shadowTiddlers[title]) {
return shadowTiddlers[title].tiddler;
}
return undefined;
}
};
// Get an array of all tiddler titles
this.allTitles = function() {
return Object.keys(tiddlers);
return getTiddlerTitles().slice(0);
};
// Iterate through all tiddler titles
this.each = function(callback) {
var titles = Object.keys(tiddlers),
var titles = getTiddlerTitles(),
index,titlesLength,title;
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
@@ -940,12 +1166,12 @@ $tw.Wiki = function(options) {
// Get an array of all shadow tiddler titles
this.allShadowTitles = function() {
return Object.keys(shadowTiddlers);
return getShadowTiddlerTitles().slice(0);
};
// Iterate through all shadow tiddler titles
this.eachShadow = function(callback) {
var titles = Object.keys(shadowTiddlers),
var titles = getShadowTiddlerTitles(),
index,titlesLength,title;
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
@@ -956,16 +1182,16 @@ $tw.Wiki = function(options) {
// Iterate through all tiddlers and then the shadows
this.eachTiddlerPlusShadows = function(callback) {
var titles = Object.keys(tiddlers),
index,titlesLength,title;
var index,titlesLength,title,
titles = getTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
callback(tiddlers[title],title);
}
titles = Object.keys(shadowTiddlers);
titles = getShadowTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
if(!Object.prototype.hasOwnProperty.call(tiddlers,title)) {
if(!tiddlers[title]) {
var shadowInfo = shadowTiddlers[title];
callback(shadowInfo.tiddler,title);
}
@@ -974,25 +1200,24 @@ $tw.Wiki = function(options) {
// Iterate through all the shadows and then the tiddlers
this.eachShadowPlusTiddlers = function(callback) {
var titles = Object.keys(shadowTiddlers),
index,titlesLength,title;
var index,titlesLength,title,
titles = getShadowTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
if(Object.prototype.hasOwnProperty.call(tiddlers,title)) {
if(tiddlers[title]) {
callback(tiddlers[title],title);
} else {
var shadowInfo = shadowTiddlers[title];
callback(shadowInfo.tiddler,title);
}
}
titles = Object.keys(tiddlers);
titles = getTiddlerTitles();
for(index = 0, titlesLength = titles.length; index < titlesLength; index++) {
title = titles[index];
if(!Object.prototype.hasOwnProperty.call(shadowTiddlers,title)) {
if(!shadowTiddlers[title]) {
callback(tiddlers[title],title);
}
}
};
// Test for the existence of a tiddler (excludes shadow tiddlers)
@@ -1103,10 +1328,17 @@ $tw.Wiki = function(options) {
});
}
});
shadowTiddlerTitles = null;
this.clearCache(null);
this.clearGlobalCache();
$tw.utils.each(indexers,function(indexer) {
indexer.rebuild();
});
};
if(this.addIndexersToWiki) {
this.addIndexersToWiki();
}
};
// Dummy methods that will be filled in after boot
@@ -1175,7 +1407,7 @@ $tw.Wiki.prototype.processSafeMode = function() {
// Assemble a report tiddler
var titleReportTiddler = "TiddlyWiki Safe Mode",
report = [];
report.push("TiddlyWiki has been started in [[safe mode|http://tiddlywiki.com/static/SafeMode.html]]. All plugins are temporarily disabled. Most customisations have been disabled by renaming the following tiddlers:")
report.push("TiddlyWiki has been started in [[safe mode|https://tiddlywiki.com/static/SafeMode.html]]. All plugins are temporarily disabled. Most customisations have been disabled by renaming the following tiddlers:")
// Delete the overrides
overrides.forEach(function(title) {
var tiddler = self.getTiddler(title),
@@ -1193,10 +1425,14 @@ $tw.Wiki.prototype.processSafeMode = function() {
/*
Extracts tiddlers from a typed block of text, specifying default field values
*/
$tw.Wiki.prototype.deserializeTiddlers = function(type,text,srcFields) {
$tw.Wiki.prototype.deserializeTiddlers = function(type,text,srcFields,options) {
srcFields = srcFields || Object.create(null);
var deserializer = $tw.Wiki.tiddlerDeserializerModules[type],
options = options || {};
var deserializer = $tw.Wiki.tiddlerDeserializerModules[options.deserializer],
fields = Object.create(null);
if(!deserializer) {
deserializer = $tw.Wiki.tiddlerDeserializerModules[type];
}
if(!deserializer && $tw.utils.getFileExtensionInfo(type)) {
// If we didn't find the serializer, try converting it from an extension to a content type
type = $tw.utils.getFileExtensionInfo(type).type;
@@ -1226,8 +1462,7 @@ $tw.Wiki.prototype.deserializeTiddlers = function(type,text,srcFields) {
/*
Register the built in tiddler deserializer modules
*/
$tw.modules.define("$:/boot/tiddlerdeserializer/js","tiddlerdeserializer",{
"application/javascript": function(text,fields) {
var deserializeHeaderComment = function(text,fields) {
var headerCommentRegExp = new RegExp($tw.config.jsModuleHeaderRegExpString,"mg"),
match = headerCommentRegExp.exec(text);
fields.text = text;
@@ -1235,7 +1470,12 @@ $tw.modules.define("$:/boot/tiddlerdeserializer/js","tiddlerdeserializer",{
fields = $tw.utils.parseFields(match[1].split(/\r?\n\r?\n/mg)[0],fields);
}
return [fields];
}
};
$tw.modules.define("$:/boot/tiddlerdeserializer/js","tiddlerdeserializer",{
"application/javascript": deserializeHeaderComment
});
$tw.modules.define("$:/boot/tiddlerdeserializer/css","tiddlerdeserializer",{
"text/css": deserializeHeaderComment
});
$tw.modules.define("$:/boot/tiddlerdeserializer/tid","tiddlerdeserializer",{
"application/x-tiddler": function(text,fields) {
@@ -1260,15 +1500,15 @@ $tw.modules.define("$:/boot/tiddlerdeserializer/tids","tiddlerdeserializer",{
for(var t=0; t<lines.length; t++) {
var line = lines[t];
if(line.charAt(0) !== "#") {
var colonPos= line.indexOf(": ");
var colonPos= line.indexOf(":");
if(colonPos !== -1) {
var tiddler = $tw.utils.extend(Object.create(null),fields);
tiddler.title = (tiddler.title || "") + line.substr(0,colonPos);
tiddler.title = (tiddler.title || "") + line.substr(0,colonPos).trim();
if(titles.indexOf(tiddler.title) !== -1) {
console.log("Warning: .multids file contains multiple definitions for " + tiddler.title);
}
titles.push(tiddler.title);
tiddler.text = line.substr(colonPos + 2);
tiddler.text = line.substr(colonPos + 2).trim();
tiddlers.push(tiddler);
}
}
@@ -1293,8 +1533,40 @@ $tw.modules.define("$:/boot/tiddlerdeserializer/html","tiddlerdeserializer",{
});
$tw.modules.define("$:/boot/tiddlerdeserializer/json","tiddlerdeserializer",{
"application/json": function(text,fields) {
var tiddlers = JSON.parse(text);
return tiddlers;
var isTiddlerValid = function(data) {
// Not valid if it's not an object with a title property
if(typeof(data) !== "object" || !$tw.utils.hop(data,"title")) {
return false;
}
for(var f in data) {
if($tw.utils.hop(data,f)) {
// Check field name doesn't contain whitespace or control characters
if(typeof(data[f]) !== "string" || /[\x00-\x1F\s]/.test(f)) {
return false;
}
}
}
return true;
},
isTiddlerArrayValid = function(data) {
for(var t=0; t<data.length; t++) {
if(!isTiddlerValid(data[t])) {
return false;
}
}
return true;
},
data = JSON.parse(text);
if($tw.utils.isArray(data) && isTiddlerArrayValid(data)) {
return data;
} else if(isTiddlerValid(data)) {
return [data];
} else {
// Plain JSON file
fields.text = text;
fields.type = "application/json";
return [fields];
}
}
});
@@ -1447,17 +1719,28 @@ $tw.loadTiddlersFromFile = function(filepath,fields) {
typeInfo = type ? $tw.config.contentTypeInfo[type] : null,
data = fs.readFileSync(filepath,typeInfo ? typeInfo.encoding : "utf8"),
tiddlers = $tw.wiki.deserializeTiddlers(ext,data,fields),
metafile = filepath + ".meta",
metadata;
if(ext !== ".json" && tiddlers.length === 1 && fs.existsSync(metafile)) {
metadata = fs.readFileSync(metafile,"utf8");
if(metadata) {
tiddlers = [$tw.utils.parseFields(metadata,tiddlers[0])];
metadata = $tw.loadMetadataForFile(filepath);
if(metadata) {
if(type === "application/json") {
tiddlers = [{text: data, type: "application/json"}];
}
tiddlers = [$tw.utils.extend({},tiddlers[0],metadata)];
}
return {filepath: filepath, type: type, tiddlers: tiddlers, hasMetaFile: !!metadata};
};
/*
Load the metadata fields in the .meta file corresponding to a particular file
*/
$tw.loadMetadataForFile = function(filepath) {
var metafilename = filepath + ".meta";
if(fs.existsSync(metafilename)) {
return $tw.utils.parseFields(fs.readFileSync(metafilename,"utf8") || "");
} else {
return null;
}
};
/*
A default set of files for TiddlyWiki to ignore during load.
This matches what NPM ignores, and adds "*.meta" to ignore tiddler
@@ -1477,44 +1760,7 @@ $tw.loadTiddlersFromPath = function(filepath,excludeRegExp) {
var files = fs.readdirSync(filepath);
// Look for a tiddlywiki.files file
if(files.indexOf("tiddlywiki.files") !== -1) {
// If so, process the files it describes
var filesInfo = JSON.parse(fs.readFileSync(filepath + path.sep + "tiddlywiki.files","utf8"));
// First the tiddlers
$tw.utils.each(filesInfo.tiddlers,function(tidInfo) {
var type = tidInfo.fields.type || "text/plain",
typeInfo = $tw.config.contentTypeInfo[type],
pathname = path.resolve(filepath,tidInfo.file),
text = fs.readFileSync(pathname,typeInfo ? typeInfo.encoding : "utf8");
if(tidInfo.isTiddlerFile) {
var fileTiddlers = $tw.wiki.deserializeTiddlers(path.extname(pathname),text) || [];
$tw.utils.each(fileTiddlers,function(tiddler) {
$tw.utils.extend(tiddler,tidInfo.fields);
if(tidInfo.prefix) {
tiddler.text = tidInfo.prefix + tiddler.text;
}
if(tidInfo.suffix) {
tiddler.text = tiddler.text + tidInfo.suffix;
}
});
tiddlers.push({tiddlers: fileTiddlers});
} else {
if(tidInfo.prefix) {
text = tidInfo.prefix + text;
}
if(tidInfo.suffix) {
text = text + tidInfo.suffix;
}
tidInfo.fields.text = text;
tiddlers.push({tiddlers: [tidInfo.fields]});
}
});
// Then any recursive directories
$tw.utils.each(filesInfo.directories,function(dirPath) {
var pathname = path.resolve(filepath,dirPath);
if(fs.existsSync(pathname) && fs.statSync(pathname).isDirectory()) {
tiddlers.push.apply(tiddlers,$tw.loadTiddlersFromPath(pathname,excludeRegExp));
}
});
Array.prototype.push.apply(tiddlers,$tw.loadTiddlersFromSpecification(filepath,excludeRegExp));
} else {
// If not, read all the files in the directory
$tw.utils.each(files,function(file) {
@@ -1524,20 +1770,125 @@ $tw.loadTiddlersFromPath = function(filepath,excludeRegExp) {
});
}
} else if(stat.isFile()) {
tiddlers.push($tw.loadTiddlersFromFile(filepath));
tiddlers.push($tw.loadTiddlersFromFile(filepath,{title: filepath}));
}
}
return tiddlers;
};
/*
Load all the tiddlers defined by a `tiddlywiki.files` specification file
filepath: pathname of the directory containing the specification file
*/
$tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
var tiddlers = [];
// Read the specification
var filesInfo = JSON.parse(fs.readFileSync(filepath + path.sep + "tiddlywiki.files","utf8"));
// Helper to process a file
var processFile = function(filename,isTiddlerFile,fields) {
var extInfo = $tw.config.fileExtensionInfo[path.extname(filename)],
type = (extInfo || {}).type || fields.type || "text/plain",
typeInfo = $tw.config.contentTypeInfo[type] || {},
pathname = path.resolve(filepath,filename),
text = fs.readFileSync(pathname,typeInfo.encoding || "utf8"),
metadata = $tw.loadMetadataForFile(pathname) || {},
fileTiddlers;
if(isTiddlerFile) {
fileTiddlers = $tw.wiki.deserializeTiddlers(path.extname(pathname),text,metadata) || [];
} else {
fileTiddlers = [$tw.utils.extend({text: text},metadata)];
}
var combinedFields = $tw.utils.extend({},fields,metadata);
$tw.utils.each(fileTiddlers,function(tiddler) {
$tw.utils.each(combinedFields,function(fieldInfo,name) {
if(typeof fieldInfo === "string" || $tw.utils.isArray(fieldInfo)) {
tiddler[name] = fieldInfo;
} else {
var value = tiddler[name];
switch(fieldInfo.source) {
case "filename":
value = path.basename(filename);
break;
case "filename-uri-decoded":
value = decodeURIComponent(path.basename(filename));
break;
case "basename":
value = path.basename(filename,path.extname(filename));
break;
case "basename-uri-decoded":
value = decodeURIComponent(path.basename(filename,path.extname(filename)));
break;
case "extname":
value = path.extname(filename);
break;
case "created":
value = new Date(fs.statSync(pathname).birthtime);
break;
case "modified":
value = new Date(fs.statSync(pathname).mtime);
break;
}
if(fieldInfo.prefix) {
value = fieldInfo.prefix + value;
}
if(fieldInfo.suffix) {
value = value + fieldInfo.suffix;
}
tiddler[name] = value;
}
});
});
tiddlers.push({tiddlers: fileTiddlers});
};
// Process the listed tiddlers
$tw.utils.each(filesInfo.tiddlers,function(tidInfo) {
if(tidInfo.prefix && tidInfo.suffix) {
tidInfo.fields.text = {prefix: tidInfo.prefix,suffix: tidInfo.suffix};
} else if(tidInfo.prefix) {
tidInfo.fields.text = {prefix: tidInfo.prefix};
} else if(tidInfo.suffix) {
tidInfo.fields.text = {suffix: tidInfo.suffix};
}
processFile(tidInfo.file,tidInfo.isTiddlerFile,tidInfo.fields);
});
// Process any listed directories
$tw.utils.each(filesInfo.directories,function(dirSpec) {
// Read literal directories directly
if(typeof dirSpec === "string") {
var pathname = path.resolve(filepath,dirSpec);
if(fs.existsSync(pathname) && fs.statSync(pathname).isDirectory()) {
tiddlers.push.apply(tiddlers,$tw.loadTiddlersFromPath(pathname,excludeRegExp));
}
} else {
// Process directory specifier
var dirPath = path.resolve(filepath,dirSpec.path),
files = fs.readdirSync(dirPath),
fileRegExp = new RegExp(dirSpec.filesRegExp || "^.*$"),
metaRegExp = /^.*\.meta$/;
for(var t=0; t<files.length; t++) {
var filename = files[t];
if(filename !== "tiddlywiki.files" && !metaRegExp.test(filename) && fileRegExp.test(filename)) {
processFile(dirPath + path.sep + filename,dirSpec.isTiddlerFile,dirSpec.fields);
}
}
}
});
return tiddlers;
};
/*
Load the tiddlers from a plugin folder, and package them up into a proper JSON plugin tiddler
*/
$tw.loadPluginFolder = function(filepath,excludeRegExp) {
excludeRegExp = excludeRegExp || $tw.boot.excludeRegExp;
var infoPath = filepath + path.sep + "plugin.info";
if(fs.existsSync(filepath) && fs.statSync(filepath).isDirectory()) {
// Read the plugin information
var pluginInfo = JSON.parse(fs.readFileSync(filepath + path.sep + "plugin.info","utf8"));
if(!fs.existsSync(infoPath) || !fs.statSync(infoPath).isFile()) {
console.log("Warning: missing plugin.info file in " + filepath);
return null;
}
var pluginInfo = JSON.parse(fs.readFileSync(infoPath,"utf8"));
// Read the plugin files
var pluginFiles = $tw.loadTiddlersFromPath(filepath,excludeRegExp);
// Save the plugin tiddlers into the plugin info
@@ -1602,8 +1953,10 @@ $tw.loadPlugin = function(name,paths) {
var pluginFields = $tw.loadPluginFolder(pluginPath);
if(pluginFields) {
$tw.wiki.addTiddler(pluginFields);
return;
}
}
console.log("Warning: Cannot find plugin '" + name + "'");
};
/*
@@ -1617,7 +1970,7 @@ $tw.getLibraryItemSearchPaths = function(libraryPath,envVar) {
if(env) {
env.split(path.delimiter).map(function(item) {
if(item) {
pluginPaths.push(item)
pluginPaths.push(item);
}
});
}
@@ -1698,9 +2051,13 @@ $tw.loadWikiTiddlers = function(wikiPath,options) {
// Save the original tiddler file locations if requested
var config = wikiInfo.config || {};
if(config["retain-original-tiddler-path"]) {
var output = {};
var output = {}, relativePath;
for(var title in $tw.boot.files) {
output[title] = path.relative(resolvedWikiPath,$tw.boot.files[title].filepath);
relativePath = path.relative(resolvedWikiPath,$tw.boot.files[title].filepath);
output[title] =
path.sep === path.posix.sep ?
relativePath :
relativePath.split(path.sep).join(path.posix.sep);
}
$tw.wiki.addTiddler({title: "$:/config/OriginalTiddlerPaths", type: "application/json", text: JSON.stringify(output)});
}
@@ -1749,6 +2106,21 @@ $tw.loadTiddlersNode = function() {
});
// Load the core tiddlers
$tw.wiki.addTiddler($tw.loadPluginFolder($tw.boot.corePath));
// Load any extra plugins
$tw.utils.each($tw.boot.extraPlugins,function(name) {
if(name.charAt(0) === "+") { // Relative path to plugin
var pluginFields = $tw.loadPluginFolder(name.substring(1));;
if(pluginFields) {
$tw.wiki.addTiddler(pluginFields);
}
} else {
var parts = name.split("/"),
type = parts[0];
if(parts.length === 3 && ["plugins","themes","languages"].indexOf(type) !== -1) {
$tw.loadPlugins([parts[1] + "/" + parts[2]],$tw.config[type + "Path"],$tw.config[type + "EnvVar"]);
}
}
});
// Load the tiddlers from the wiki directory
if($tw.boot.wikiPath) {
$tw.boot.wikiInfo = $tw.loadWikiTiddlers($tw.boot.wikiPath);
@@ -1806,12 +2178,18 @@ $tw.boot.startup = function(options) {
// For writable tiddler files, a hashmap of title to {filepath:,type:,hasMetaFile:}
$tw.boot.files = Object.create(null);
// System paths and filenames
$tw.boot.bootPath = path.dirname(module.filename);
$tw.boot.bootPath = options.bootPath || path.dirname(module.filename);
$tw.boot.corePath = path.resolve($tw.boot.bootPath,"../core");
// If there's no arguments then default to `--help`
if($tw.boot.argv.length === 0) {
$tw.boot.argv = ["--help"];
}
// Parse any extra plugin references
$tw.boot.extraPlugins = $tw.boot.extraPlugins || [];
while($tw.boot.argv[0] && $tw.boot.argv[0].indexOf("+") === 0) {
$tw.boot.extraPlugins.push($tw.boot.argv[0].substring(1));
$tw.boot.argv.splice(0,1);
}
// If the first command line argument doesn't start with `--` then we
// interpret it as the path to the wiki folder, which will otherwise default
// to the current folder
@@ -1845,15 +2223,27 @@ $tw.boot.startup = function(options) {
$tw.utils.registerFileType("image/jpeg","base64",[".jpg",".jpeg"],{flags:["image"]});
$tw.utils.registerFileType("image/png","base64",".png",{flags:["image"]});
$tw.utils.registerFileType("image/gif","base64",".gif",{flags:["image"]});
$tw.utils.registerFileType("image/webp","base64",".webp",{flags:["image"]});
$tw.utils.registerFileType("image/heic","base64",".heic",{flags:["image"]});
$tw.utils.registerFileType("image/heif","base64",".heif",{flags:["image"]});
$tw.utils.registerFileType("image/svg+xml","utf8",".svg",{flags:["image"]});
$tw.utils.registerFileType("image/x-icon","base64",".ico",{flags:["image"]});
$tw.utils.registerFileType("application/font-woff","base64",".woff");
$tw.utils.registerFileType("application/x-font-ttf","base64",".woff");
$tw.utils.registerFileType("audio/ogg","base64",".ogg");
$tw.utils.registerFileType("video/mp4","base64",".mp4");
$tw.utils.registerFileType("audio/mp3","base64",".mp3");
$tw.utils.registerFileType("audio/mp4","base64",[".mp4",".m4a"]);
$tw.utils.registerFileType("text/markdown","utf8",[".md",".markdown"],{deserializerType:"text/x-markdown"});
$tw.utils.registerFileType("text/x-markdown","utf8",[".md",".markdown"]);
$tw.utils.registerFileType("application/enex+xml","utf8",".enex");
$tw.utils.registerFileType("application/enex+xml","utf8",".enex");
$tw.utils.registerFileType("application/vnd.openxmlformats-officedocument.wordprocessingml.document","base64",".docx");
$tw.utils.registerFileType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","base64",".xlsx");
$tw.utils.registerFileType("application/vnd.openxmlformats-officedocument.presentationml.presentation","base64",".pptx");
$tw.utils.registerFileType("text/x-bibtex","utf8",".bib",{deserializerType:"application/x-bibtex"});
$tw.utils.registerFileType("application/x-bibtex","utf8",".bib");
$tw.utils.registerFileType("application/epub+zip","base64",".epub");
$tw.utils.registerFileType("application/octet-stream","base64",".octet-stream");
// Create the wiki store for the app
$tw.wiki = new $tw.Wiki();
// Install built in tiddler fields modules
@@ -1885,6 +2275,8 @@ $tw.boot.startup = function(options) {
if($tw.preloadTiddlers) {
$tw.wiki.addTiddlers($tw.preloadTiddlers);
}
// Give hooks a chance to modify the store
$tw.hooks.invokeHook("th-boot-tiddlers-loaded");
// Unpack plugin tiddlers
$tw.wiki.readPluginInfo();
$tw.wiki.registerPluginTiddlers("plugin",$tw.safeMode ? ["$:/core"] : undefined);
@@ -1912,7 +2304,7 @@ $tw.boot.startup = function(options) {
$tw.boot.executedStartupModules = Object.create(null);
$tw.boot.disabledStartupModules = $tw.boot.disabledStartupModules || [];
// Repeatedly execute the next eligible task
$tw.boot.executeNextStartupTask();
$tw.boot.executeNextStartupTask(options.callback);
};
/*
@@ -1927,14 +2319,14 @@ $tw.addUnloadTask = function(task) {
/*
Execute the remaining eligible startup tasks
*/
$tw.boot.executeNextStartupTask = function() {
$tw.boot.executeNextStartupTask = function(callback) {
// Find the next eligible task
var taskIndex = 0, task,
asyncTaskCallback = function() {
if(task.name) {
$tw.boot.executedStartupModules[task.name] = true;
}
return $tw.boot.executeNextStartupTask();
return $tw.boot.executeNextStartupTask(callback);
};
while(taskIndex < $tw.boot.remainingStartupModules.length) {
task = $tw.boot.remainingStartupModules[taskIndex];
@@ -1959,7 +2351,7 @@ $tw.boot.executeNextStartupTask = function() {
if(task.name) {
$tw.boot.executedStartupModules[task.name] = true;
}
return $tw.boot.executeNextStartupTask();
return $tw.boot.executeNextStartupTask(callback);
} else {
task.startup(asyncTaskCallback);
return true;
@@ -1967,6 +2359,9 @@ $tw.boot.executeNextStartupTask = function() {
}
taskIndex++;
}
if(typeof callback === 'function') {
callback();
}
return false;
};
@@ -2040,18 +2435,19 @@ $tw.hooks.addHook = function(hookName,definition) {
/*
Invoke the hook by key
*/
$tw.hooks.invokeHook = function(hookName, value) {
$tw.hooks.invokeHook = function(hookName /*, value,... */) {
var args = Array.prototype.slice.call(arguments,1);
if($tw.utils.hop($tw.hooks.names,hookName)) {
for (var i = 0; i < $tw.hooks.names[hookName].length; i++) {
value = $tw.hooks.names[hookName][i](value);
args[0] = $tw.hooks.names[hookName][i].apply(null,args);
}
}
return value;
return args[0];
};
/////////////////////////// Main boot function to decrypt tiddlers and then startup
$tw.boot.boot = function() {
$tw.boot.boot = function(callback) {
// Initialise crypto object
$tw.crypto = new $tw.utils.Crypto();
// Initialise password prompter
@@ -2061,7 +2457,7 @@ $tw.boot.boot = function() {
// Preload any encrypted tiddlers
$tw.boot.decryptEncryptedTiddlers(function() {
// Startup
$tw.boot.startup();
$tw.boot.startup({callback: callback});
});
};

View File

@@ -1,42 +1,60 @@
"use strict";var sjcl={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return"CORRUPT: "+this.message};this.message=a},invalid:function(a){this.toString=function(){return"INVALID: "+this.message};this.message=a},bug:function(a){this.toString=function(){return"BUG: "+this.message};this.message=a},notReady:function(a){this.toString=function(){return"NOT READY: "+this.message};this.message=a}}};
if(typeof module!="undefined"&&module.exports)module.exports=sjcl;
sjcl.cipher.aes=function(a){this.h[0][0][0]||this.z();var b,c,d,e,f=this.h[0][4],g=this.h[1];b=a.length;var h=1;if(b!==4&&b!==6&&b!==8)throw new sjcl.exception.invalid("invalid aes key size");this.a=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(a%b===0||b===8&&a%b===4){c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255];if(a%b===0){c=c<<8^c>>>24^h<<24;h=h<<1^(h>>7)*283}}d[a]=d[a-b]^c}for(b=0;a;b++,a--){c=d[b&3?a:a-4];e[b]=a<=4||b<4?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^
g[3][f[c&255]]}};
sjcl.cipher.aes.prototype={encrypt:function(a){return this.I(a,0)},decrypt:function(a){return this.I(a,1)},h:[[[],[],[],[],[]],[[],[],[],[],[]]],z:function(){var a=this.h[0],b=this.h[1],c=a[4],d=b[4],e,f,g,h=[],i=[],k,j,l,m;for(e=0;e<0x100;e++)i[(h[e]=e<<1^(e>>7)*283)^e]=e;for(f=g=0;!c[f];f^=k||1,g=i[g]||1){l=g^g<<1^g<<2^g<<3^g<<4;l=l>>8^l&255^99;c[f]=l;d[l]=f;j=h[e=h[k=h[f]]];m=j*0x1010101^e*0x10001^k*0x101^f*0x1010100;j=h[l]*0x101^l*0x1010100;for(e=0;e<4;e++){a[e][f]=j=j<<24^j>>>8;b[e][l]=m=m<<24^m>>>8}}for(e=
0;e<5;e++){a[e]=a[e].slice(0);b[e]=b[e].slice(0)}},I:function(a,b){if(a.length!==4)throw new sjcl.exception.invalid("invalid aes block size");var c=this.a[b],d=a[0]^c[0],e=a[b?3:1]^c[1],f=a[2]^c[2];a=a[b?1:3]^c[3];var g,h,i,k=c.length/4-2,j,l=4,m=[0,0,0,0];g=this.h[b];var n=g[0],o=g[1],p=g[2],q=g[3],r=g[4];for(j=0;j<k;j++){g=n[d>>>24]^o[e>>16&255]^p[f>>8&255]^q[a&255]^c[l];h=n[e>>>24]^o[f>>16&255]^p[a>>8&255]^q[d&255]^c[l+1];i=n[f>>>24]^o[a>>16&255]^p[d>>8&255]^q[e&255]^c[l+2];a=n[a>>>24]^o[d>>16&
255]^p[e>>8&255]^q[f&255]^c[l+3];l+=4;d=g;e=h;f=i}for(j=0;j<4;j++){m[b?3&-j:j]=r[d>>>24]<<24^r[e>>16&255]<<16^r[f>>8&255]<<8^r[a&255]^c[l++];g=d;d=e;e=f;f=a;a=g}return m}};
sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.P(a.slice(b/32),32-(b&31)).slice(1);return c===undefined?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<<c)-1},concat:function(a,b){if(a.length===0||b.length===0)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return d===32?a.concat(b):sjcl.bitArray.P(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;
if(b===0)return 0;return(b-1)*32+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(a.length*32<b)return a;a=a.slice(0,Math.ceil(b/32));var c=a.length;b&=31;if(c>0&&b)a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1);return a},partial:function(a,b,c){if(a===32)return b;return(c?b|0:b<<32-a)+a*0x10000000000},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return false;var c=0,d;for(d=0;d<a.length;d++)c|=
a[d]^b[d];return c===0},P:function(a,b,c,d){var e;e=0;if(d===undefined)d=[];for(;b>=32;b-=32){d.push(c);c=0}if(b===0)return d.concat(a);for(e=0;e<a.length;e++){d.push(c|a[e]>>>b);c=a[e]<<32-b}e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,b+a>32?c:d.pop(),1));return d},k:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]}};
sjcl.codec.utf8String={fromBits:function(a){var b="",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++){if((d&3)===0)e=a[d/4];b+=String.fromCharCode(e>>>24);e<<=8}return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++){d=d<<8|a.charCodeAt(c);if((c&3)===3){b.push(d);d=0}}c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};
sjcl.codec.hex={fromBits:function(a){var b="",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\s|0x/g,"");d=a.length;a+="00000000";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,d*4)}};
sjcl.codec.base64={F:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",fromBits:function(a,b,c){var d="",e=0,f=sjcl.codec.base64.F,g=0,h=sjcl.bitArray.bitLength(a);if(c)f=f.substr(0,62)+"-_";for(c=0;d.length*6<h;){d+=f.charAt((g^a[c]>>>e)>>>26);if(e<6){g=a[c]<<6-e;e+=26;c++}else{g<<=6;e-=6}}for(;d.length&3&&!b;)d+="=";return d},toBits:function(a,b){a=a.replace(/\s|=/g,"");var c=[],d=0,e=sjcl.codec.base64.F,f=0,g;if(b)e=e.substr(0,62)+"-_";for(b=0;b<a.length;b++){g=e.indexOf(a.charAt(b));
if(g<0)throw new sjcl.exception.invalid("this isn't base64!");if(d>26){d-=26;c.push(f^g>>>d);f=g<<32-d}else{d+=6;f^=g<<32-d}}d&56&&c.push(sjcl.bitArray.partial(d&56,f,1));return c}};sjcl.codec.base64url={fromBits:function(a){return sjcl.codec.base64.fromBits(a,1,1)},toBits:function(a){return sjcl.codec.base64.toBits(a,1)}};sjcl.hash.sha256=function(a){this.a[0]||this.z();if(a){this.n=a.n.slice(0);this.i=a.i.slice(0);this.e=a.e}else this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};
sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.n=this.N.slice(0);this.i=[];this.e=0;return this},update:function(a){if(typeof a==="string")a=sjcl.codec.utf8String.toBits(a);var b,c=this.i=sjcl.bitArray.concat(this.i,a);b=this.e;a=this.e=b+sjcl.bitArray.bitLength(a);for(b=512+b&-512;b<=a;b+=512)this.D(c.splice(0,16));return this},finalize:function(){var a,b=this.i,c=this.n;b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.e/
4294967296));for(b.push(this.e|0);b.length;)this.D(b.splice(0,16));this.reset();return c},N:[],a:[],z:function(){function a(e){return(e-Math.floor(e))*0x100000000|0}var b=0,c=2,d;a:for(;b<64;c++){for(d=2;d*d<=c;d++)if(c%d===0)continue a;if(b<8)this.N[b]=a(Math.pow(c,0.5));this.a[b]=a(Math.pow(c,1/3));b++}},D:function(a){var b,c,d=a.slice(0),e=this.n,f=this.a,g=e[0],h=e[1],i=e[2],k=e[3],j=e[4],l=e[5],m=e[6],n=e[7];for(a=0;a<64;a++){if(a<16)b=d[a];else{b=d[a+1&15];c=d[a+14&15];b=d[a&15]=(b>>>7^b>>>18^
b>>>3^b<<25^b<<14)+(c>>>17^c>>>19^c>>>10^c<<15^c<<13)+d[a&15]+d[a+9&15]|0}b=b+n+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(m^j&(l^m))+f[a];n=m;m=l;l=j;j=k+b|0;k=i;i=h;h=g;g=b+(h&i^k&(h^i))+(h>>>2^h>>>13^h>>>22^h<<30^h<<19^h<<10)|0}e[0]=e[0]+g|0;e[1]=e[1]+h|0;e[2]=e[2]+i|0;e[3]=e[3]+k|0;e[4]=e[4]+j|0;e[5]=e[5]+l|0;e[6]=e[6]+m|0;e[7]=e[7]+n|0}};
sjcl.mode.ccm={name:"ccm",encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,i=h.bitLength(c)/8,k=h.bitLength(g)/8;e=e||64;d=d||[];if(i<7)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(f=2;f<4&&k>>>8*f;f++);if(f<15-i)f=15-i;c=h.clamp(c,8*(15-f));b=sjcl.mode.ccm.H(a,b,c,d,e,f);g=sjcl.mode.ccm.J(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),i=f.clamp(b,h-e),k=f.bitSlice(b,
h-e);h=(h-e)/8;if(g<7)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(b=2;b<4&&h>>>8*b;b++);if(b<15-g)b=15-g;c=f.clamp(c,8*(15-b));i=sjcl.mode.ccm.J(a,i,c,k,e,b);a=sjcl.mode.ccm.H(a,i.data,c,d,e,b);if(!f.equal(i.tag,a))throw new sjcl.exception.corrupt("ccm: tag doesn't match");return i.data},H:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,i=h.k;e/=8;if(e%2||e<4||e>16)throw new sjcl.exception.invalid("ccm: invalid tag length");if(d.length>0xffffffff||b.length>0xffffffff)throw new sjcl.exception.bug("ccm: can't deal with 4GiB or more data");
f=[h.partial(8,(d.length?64:0)|e-2<<2|f-1)];f=h.concat(f,c);f[3]|=h.bitLength(b)/8;f=a.encrypt(f);if(d.length){c=h.bitLength(d)/8;if(c<=65279)g=[h.partial(16,c)];else if(c<=0xffffffff)g=h.concat([h.partial(16,65534)],[c]);g=h.concat(g,d);for(d=0;d<g.length;d+=4)f=a.encrypt(i(f,g.slice(d,d+4).concat([0,0,0])))}for(d=0;d<b.length;d+=4)f=a.encrypt(i(f,b.slice(d,d+4).concat([0,0,0])));return h.clamp(f,e*8)},J:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.k;var i=b.length,k=h.bitLength(b);c=h.concat([h.partial(8,
f-1)],c).concat([0,0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!i)return{tag:d,data:[]};for(g=0;g<i;g+=4){c[3]++;e=a.encrypt(c);b[g]^=e[0];b[g+1]^=e[1];b[g+2]^=e[2];b[g+3]^=e[3]}return{tag:d,data:h.clamp(b,k)}}};
sjcl.mode.ocb2={name:"ocb2",encrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid("ocb iv must be 128 bits");var g,h=sjcl.mode.ocb2.B,i=sjcl.bitArray,k=i.k,j=[0,0,0,0];c=h(a.encrypt(c));var l,m=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4){l=b.slice(g,g+4);j=k(j,l);m=m.concat(k(c,a.encrypt(k(c,l))));c=h(c)}l=b.slice(g);b=i.bitLength(l);g=a.encrypt(k(c,[0,0,0,b]));l=i.clamp(k(l.concat([0,0,0]),g),b);j=k(j,k(l.concat([0,0,0]),g));j=a.encrypt(k(j,k(c,h(c))));
if(d.length)j=k(j,f?d:sjcl.mode.ocb2.pmac(a,d));return m.concat(i.concat(l,i.clamp(j,e)))},decrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid("ocb iv must be 128 bits");e=e||64;var g=sjcl.mode.ocb2.B,h=sjcl.bitArray,i=h.k,k=[0,0,0,0],j=g(a.encrypt(c)),l,m,n=sjcl.bitArray.bitLength(b)-e,o=[];d=d||[];for(c=0;c+4<n/32;c+=4){l=i(j,a.decrypt(i(j,b.slice(c,c+4))));k=i(k,l);o=o.concat(l);j=g(j)}m=n-c*32;l=a.encrypt(i(j,[0,0,0,m]));l=i(l,h.clamp(b.slice(c),
m).concat([0,0,0]));k=i(k,l);k=a.encrypt(i(k,i(j,g(j))));if(d.length)k=i(k,f?d:sjcl.mode.ocb2.pmac(a,d));if(!h.equal(h.clamp(k,e),h.bitSlice(b,n)))throw new sjcl.exception.corrupt("ocb: tag doesn't match");return o.concat(h.clamp(l,m))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.B,e=sjcl.bitArray,f=e.k,g=[0,0,0,0],h=a.encrypt([0,0,0,0]);h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4){h=d(h);g=f(g,a.encrypt(f(h,b.slice(c,c+4))))}b=b.slice(c);if(e.bitLength(b)<128){h=f(h,d(h));b=e.concat(b,[2147483648|0,0,
0,0])}g=f(g,b);return a.encrypt(f(d(f(h,d(h))),g))},B:function(a){return[a[0]<<1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^(a[0]>>>31)*135]}};sjcl.misc.hmac=function(a,b){this.M=b=b||sjcl.hash.sha256;var c=[[],[]],d=b.prototype.blockSize/32;this.l=[new b,new b];if(a.length>d)a=b.hash(a);for(b=0;b<d;b++){c[0][b]=a[b]^909522486;c[1][b]=a[b]^1549556828}this.l[0].update(c[0]);this.l[1].update(c[1])};
sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a,b){a=(new this.M(this.l[0])).update(a,b).finalize();return(new this.M(this.l[1])).update(a).finalize()};
sjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E3;if(d<0||c<0)throw sjcl.exception.invalid("invalid params to pbkdf2");if(typeof a==="string")a=sjcl.codec.utf8String.toBits(a);e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,i,k=[],j=sjcl.bitArray;for(i=1;32*k.length<(d||1);i++){e=f=a.encrypt(j.concat(b,[i]));for(g=1;g<c;g++){f=a.encrypt(f);for(h=0;h<f.length;h++)e[h]^=f[h]}k=k.concat(e)}if(d)k=j.clamp(k,d);return k};
sjcl.random={randomWords:function(a,b){var c=[];b=this.isReady(b);var d;if(b===0)throw new sjcl.exception.notReady("generator isn't seeded");else b&2&&this.U(!(b&1));for(b=0;b<a;b+=4){(b+1)%0x10000===0&&this.L();d=this.w();c.push(d[0],d[1],d[2],d[3])}this.L();return c.slice(0,a)},setDefaultParanoia:function(a){this.t=a},addEntropy:function(a,b,c){c=c||"user";var d,e,f=(new Date).valueOf(),g=this.q[c],h=this.isReady(),i=0;d=this.G[c];if(d===undefined)d=this.G[c]=this.R++;if(g===undefined)g=this.q[c]=
0;this.q[c]=(this.q[c]+1)%this.b.length;switch(typeof a){case "number":if(b===undefined)b=1;this.b[g].update([d,this.u++,1,b,f,1,a|0]);break;case "object":c=Object.prototype.toString.call(a);if(c==="[object Uint32Array]"){e=[];for(c=0;c<a.length;c++)e.push(a[c]);a=e}else{if(c!=="[object Array]")i=1;for(c=0;c<a.length&&!i;c++)if(typeof a[c]!="number")i=1}if(!i){if(b===undefined)for(c=b=0;c<a.length;c++)for(e=a[c];e>0;){b++;e>>>=1}this.b[g].update([d,this.u++,2,b,f,a.length].concat(a))}break;case "string":if(b===
undefined)b=a.length;this.b[g].update([d,this.u++,3,b,f,a.length]);this.b[g].update(a);break;default:i=1}if(i)throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string");this.j[g]+=b;this.f+=b;if(h===0){this.isReady()!==0&&this.K("seeded",Math.max(this.g,this.f));this.K("progress",this.getProgress())}},isReady:function(a){a=this.C[a!==undefined?a:this.t];return this.g&&this.g>=a?this.j[0]>80&&(new Date).valueOf()>this.O?3:1:this.f>=a?2:0},getProgress:function(a){a=
this.C[a?a:this.t];return this.g>=a?1:this.f>a?1:this.f/a},startCollectors:function(){if(!this.m){if(window.addEventListener){window.addEventListener("load",this.o,false);window.addEventListener("mousemove",this.p,false)}else if(document.attachEvent){document.attachEvent("onload",this.o);document.attachEvent("onmousemove",this.p)}else throw new sjcl.exception.bug("can't attach event");this.m=true}},stopCollectors:function(){if(this.m){if(window.removeEventListener){window.removeEventListener("load",
this.o,false);window.removeEventListener("mousemove",this.p,false)}else if(window.detachEvent){window.detachEvent("onload",this.o);window.detachEvent("onmousemove",this.p)}this.m=false}},addEventListener:function(a,b){this.r[a][this.Q++]=b},removeEventListener:function(a,b){var c;a=this.r[a];var d=[];for(c in a)a.hasOwnProperty(c)&&a[c]===b&&d.push(c);for(b=0;b<d.length;b++){c=d[b];delete a[c]}},b:[new sjcl.hash.sha256],j:[0],A:0,q:{},u:0,G:{},R:0,g:0,f:0,O:0,a:[0,0,0,0,0,0,0,0],d:[0,0,0,0],s:undefined,
t:6,m:false,r:{progress:{},seeded:{}},Q:0,C:[0,48,64,96,128,192,0x100,384,512,768,1024],w:function(){for(var a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}return this.s.encrypt(this.d)},L:function(){this.a=this.w().concat(this.w());this.s=new sjcl.cipher.aes(this.a)},T:function(a){this.a=sjcl.hash.sha256.hash(this.a.concat(a));this.s=new sjcl.cipher.aes(this.a);for(a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}},U:function(a){var b=[],c=0,d;this.O=b[0]=(new Date).valueOf()+3E4;for(d=
0;d<16;d++)b.push(Math.random()*0x100000000|0);for(d=0;d<this.b.length;d++){b=b.concat(this.b[d].finalize());c+=this.j[d];this.j[d]=0;if(!a&&this.A&1<<d)break}if(this.A>=1<<this.b.length){this.b.push(new sjcl.hash.sha256);this.j.push(0)}this.f-=c;if(c>this.g)this.g=c;this.A++;this.T(b)},p:function(a){sjcl.random.addEntropy([a.x||a.clientX||a.offsetX||0,a.y||a.clientY||a.offsetY||0],2,"mouse")},o:function(){sjcl.random.addEntropy((new Date).valueOf(),2,"loadtime")},K:function(a,b){var c;a=sjcl.random.r[a];
var d=[];for(c in a)a.hasOwnProperty(c)&&d.push(a[c]);for(c=0;c<d.length;c++)d[c](b)}};try{var s=new Uint32Array(32);crypto.getRandomValues(s);sjcl.random.addEntropy(s,1024,"crypto['getRandomValues']")}catch(t){}
sjcl.json={defaults:{v:1,iter:1E3,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},encrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.c({iv:sjcl.random.randomWords(4,0)},e.defaults),g;e.c(f,c);c=f.adata;if(typeof f.salt==="string")f.salt=sjcl.codec.base64.toBits(f.salt);if(typeof f.iv==="string")f.iv=sjcl.codec.base64.toBits(f.iv);if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||typeof a==="string"&&f.iter<=100||f.ts!==64&&f.ts!==96&&f.ts!==128||f.ks!==128&&f.ks!==192&&f.ks!==0x100||f.iv.length<
2||f.iv.length>4)throw new sjcl.exception.invalid("json encrypt: invalid parameters");if(typeof a==="string"){g=sjcl.misc.cachedPbkdf2(a,f);a=g.key.slice(0,f.ks/32);f.salt=g.salt}if(typeof b==="string")b=sjcl.codec.utf8String.toBits(b);if(typeof c==="string")c=sjcl.codec.utf8String.toBits(c);g=new sjcl.cipher[f.cipher](a);e.c(d,f);d.key=a;f.ct=sjcl.mode[f.mode].encrypt(g,b,f.iv,c,f.ts);return e.encode(f)},decrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.c(e.c(e.c({},e.defaults),e.decode(b)),
c,true);var f;c=b.adata;if(typeof b.salt==="string")b.salt=sjcl.codec.base64.toBits(b.salt);if(typeof b.iv==="string")b.iv=sjcl.codec.base64.toBits(b.iv);if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||typeof a==="string"&&b.iter<=100||b.ts!==64&&b.ts!==96&&b.ts!==128||b.ks!==128&&b.ks!==192&&b.ks!==0x100||!b.iv||b.iv.length<2||b.iv.length>4)throw new sjcl.exception.invalid("json decrypt: invalid parameters");if(typeof a==="string"){f=sjcl.misc.cachedPbkdf2(a,b);a=f.key.slice(0,b.ks/32);b.salt=f.salt}if(typeof c===
"string")c=sjcl.codec.utf8String.toBits(c);f=new sjcl.cipher[b.cipher](a);c=sjcl.mode[b.mode].decrypt(f,b.ct,b.iv,c,b.ts);e.c(d,b);d.key=a;return sjcl.codec.utf8String.fromBits(c)},encode:function(a){var b,c="{",d="";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid("json encode: invalid property name");c+=d+'"'+b+'":';d=",";switch(typeof a[b]){case "number":case "boolean":c+=a[b];break;case "string":c+='"'+escape(a[b])+'"';break;case "object":c+='"'+
sjcl.codec.base64.fromBits(a[b],1)+'"';break;default:throw new sjcl.exception.bug("json encode: unsupported type");}}return c+"}"},decode:function(a){a=a.replace(/\s/g,"");if(!a.match(/^\{.*\}$/))throw new sjcl.exception.invalid("json decode: this isn't json!");a=a.replace(/^\{|\}$/g,"").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^(?:(["']?)([a-z][a-z0-9]*)\1):(?:(\d+)|"([a-z0-9+\/%*_.@=\-]*)")$/i)))throw new sjcl.exception.invalid("json decode: this isn't json!");b[d[2]]=
d[3]?parseInt(d[3],10):d[2].match(/^(ct|salt|iv)$/)?sjcl.codec.base64.toBits(d[4]):unescape(d[4])}return b},c:function(a,b,c){if(a===undefined)a={};if(b===undefined)return a;var d;for(d in b)if(b.hasOwnProperty(d)){if(c&&a[d]!==undefined&&a[d]!==b[d])throw new sjcl.exception.invalid("required parameter overridden");a[d]=b[d]}return a},W:function(a,b){var c={},d;for(d in a)if(a.hasOwnProperty(d)&&a[d]!==b[d])c[d]=a[d];return c},V:function(a,b){var c={},d;for(d=0;d<b.length;d++)if(a[b[d]]!==undefined)c[b[d]]=
a[b[d]];return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.S={};sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.S,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=b.salt===undefined?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};
sjcl.cipher.aes=function(a){this.s[0][0][0]||this.O();var b,c,d,e,f=this.s[0][4],g=this.s[1];b=a.length;var h=1;if(4!==b&&6!==b&&8!==b)throw new sjcl.exception.invalid("invalid aes key size");this.b=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(0===a%b||8===b&&4===a%b)c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255],0===a%b&&(c=c<<8^c>>>24^h<<24,h=h<<1^283*(h>>7));d[a]=d[a-b]^c}for(b=0;a;b++,a--)c=d[b&3?a:a-4],e[b]=4>=a||4>b?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^g[3][f[c&
255]]};
sjcl.cipher.aes.prototype={encrypt:function(a){return t(this,a,0)},decrypt:function(a){return t(this,a,1)},s:[[[],[],[],[],[]],[[],[],[],[],[]]],O:function(){var a=this.s[0],b=this.s[1],c=a[4],d=b[4],e,f,g,h=[],k=[],l,n,m,p;for(e=0;0x100>e;e++)k[(h[e]=e<<1^283*(e>>7))^e]=e;for(f=g=0;!c[f];f^=l||1,g=k[g]||1)for(m=g^g<<1^g<<2^g<<3^g<<4,m=m>>8^m&255^99,c[f]=m,d[m]=f,n=h[e=h[l=h[f]]],p=0x1010101*n^0x10001*e^0x101*l^0x1010100*f,n=0x101*h[m]^0x1010100*m,e=0;4>e;e++)a[e][f]=n=n<<24^n>>>8,b[e][m]=p=p<<24^p>>>8;for(e=
0;5>e;e++)a[e]=a[e].slice(0),b[e]=b[e].slice(0)}};
function t(a,b,c){if(4!==b.length)throw new sjcl.exception.invalid("invalid aes block size");var d=a.b[c],e=b[0]^d[0],f=b[c?3:1]^d[1],g=b[2]^d[2];b=b[c?1:3]^d[3];var h,k,l,n=d.length/4-2,m,p=4,r=[0,0,0,0];h=a.s[c];a=h[0];var q=h[1],v=h[2],w=h[3],x=h[4];for(m=0;m<n;m++)h=a[e>>>24]^q[f>>16&255]^v[g>>8&255]^w[b&255]^d[p],k=a[f>>>24]^q[g>>16&255]^v[b>>8&255]^w[e&255]^d[p+1],l=a[g>>>24]^q[b>>16&255]^v[e>>8&255]^w[f&255]^d[p+2],b=a[b>>>24]^q[e>>16&255]^v[f>>8&255]^w[g&255]^d[p+3],p+=4,e=h,f=k,g=l;for(m=
0;4>m;m++)r[c?3&-m:m]=x[e>>>24]<<24^x[f>>16&255]<<16^x[g>>8&255]<<8^x[b&255]^d[p++],h=e,e=f,f=g,g=b,b=h;return r}
sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.$(a.slice(b/32),32-(b&31)).slice(1);return void 0===c?a:sjcl.bitArray.clamp(a,c-b)},extract:function(a,b,c){var d=Math.floor(-b-c&31);return((b+c-1^b)&-32?a[b/32|0]<<32-d^a[b/32+1|0]>>>d:a[b/32|0]>>>d)&(1<<c)-1},concat:function(a,b){if(0===a.length||0===b.length)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return 32===d?a.concat(b):sjcl.bitArray.$(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;return 0===
b?0:32*(b-1)+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(32*a.length<b)return a;a=a.slice(0,Math.ceil(b/32));var c=a.length;b=b&31;0<c&&b&&(a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1));return a},partial:function(a,b,c){return 32===a?b:(c?b|0:b<<32-a)+0x10000000000*a},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return!1;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return 0===
c},$:function(a,b,c,d){var e;e=0;for(void 0===d&&(d=[]);32<=b;b-=32)d.push(c),c=0;if(0===b)return d.concat(a);for(e=0;e<a.length;e++)d.push(c|a[e]>>>b),c=a[e]<<32-b;e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,32<b+a?c:d.pop(),1));return d},i:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]},byteswapM:function(a){var b,c;for(b=0;b<a.length;++b)c=a[b],a[b]=c>>>24|c>>>8&0xff00|(c&0xff00)<<8|c<<24;return a}};
sjcl.codec.utf8String={fromBits:function(a){var b="",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++)0===(d&3)&&(e=a[d/4]),b+=String.fromCharCode(e>>>8>>>8>>>8),e<<=8;return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++)d=d<<8|a.charCodeAt(c),3===(c&3)&&(b.push(d),d=0);c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};
sjcl.codec.hex={fromBits:function(a){var b="",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\s|0x/g,"");d=a.length;a=a+"00000000";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,4*d)}};
sjcl.codec.base32={B:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",X:"0123456789ABCDEFGHIJKLMNOPQRSTUV",BITS:32,BASE:5,REMAINING:27,fromBits:function(a,b,c){var d=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f="",g=0,h=sjcl.codec.base32.B,k=0,l=sjcl.bitArray.bitLength(a);c&&(h=sjcl.codec.base32.X);for(c=0;f.length*d<l;)f+=h.charAt((k^a[c]>>>g)>>>e),g<d?(k=a[c]<<d-g,g+=e,c++):(k<<=d,g-=d);for(;f.length&7&&!b;)f+="=";return f},toBits:function(a,b){a=a.replace(/\s|=/g,"").toUpperCase();var c=sjcl.codec.base32.BITS,
d=sjcl.codec.base32.BASE,e=sjcl.codec.base32.REMAINING,f=[],g,h=0,k=sjcl.codec.base32.B,l=0,n,m="base32";b&&(k=sjcl.codec.base32.X,m="base32hex");for(g=0;g<a.length;g++){n=k.indexOf(a.charAt(g));if(0>n){if(!b)try{return sjcl.codec.base32hex.toBits(a)}catch(p){}throw new sjcl.exception.invalid("this isn't "+m+"!");}h>e?(h-=e,f.push(l^n>>>h),l=n<<c-h):(h+=d,l^=n<<c-h)}h&56&&f.push(sjcl.bitArray.partial(h&56,l,1));return f}};
sjcl.codec.base32hex={fromBits:function(a,b){return sjcl.codec.base32.fromBits(a,b,1)},toBits:function(a){return sjcl.codec.base32.toBits(a,1)}};
sjcl.codec.base64={B:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",fromBits:function(a,b,c){var d="",e=0,f=sjcl.codec.base64.B,g=0,h=sjcl.bitArray.bitLength(a);c&&(f=f.substr(0,62)+"-_");for(c=0;6*d.length<h;)d+=f.charAt((g^a[c]>>>e)>>>26),6>e?(g=a[c]<<6-e,e+=26,c++):(g<<=6,e-=6);for(;d.length&3&&!b;)d+="=";return d},toBits:function(a,b){a=a.replace(/\s|=/g,"");var c=[],d,e=0,f=sjcl.codec.base64.B,g=0,h;b&&(f=f.substr(0,62)+"-_");for(d=0;d<a.length;d++){h=f.indexOf(a.charAt(d));
if(0>h)throw new sjcl.exception.invalid("this isn't base64!");26<e?(e-=26,c.push(g^h>>>e),g=h<<32-e):(e+=6,g^=h<<32-e)}e&56&&c.push(sjcl.bitArray.partial(e&56,g,1));return c}};sjcl.codec.base64url={fromBits:function(a){return sjcl.codec.base64.fromBits(a,1,1)},toBits:function(a){return sjcl.codec.base64.toBits(a,1)}};sjcl.hash.sha256=function(a){this.b[0]||this.O();a?(this.F=a.F.slice(0),this.A=a.A.slice(0),this.l=a.l):this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};
sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.F=this.Y.slice(0);this.A=[];this.l=0;return this},update:function(a){"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));var b,c=this.A=sjcl.bitArray.concat(this.A,a);b=this.l;a=this.l=b+sjcl.bitArray.bitLength(a);if(0x1fffffffffffff<a)throw new sjcl.exception.invalid("Cannot hash more than 2^53 - 1 bits");if("undefined"!==typeof Uint32Array){var d=new Uint32Array(c),e=0;for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,d.subarray(16*e,
16*(e+1))),e+=1;c.splice(0,16*e)}else for(b=512+b-(512+b&0x1ff);b<=a;b+=512)u(this,c.splice(0,16));return this},finalize:function(){var a,b=this.A,c=this.F,b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.l/0x100000000));for(b.push(this.l|0);b.length;)u(this,b.splice(0,16));this.reset();return c},Y:[],b:[],O:function(){function a(a){return 0x100000000*(a-Math.floor(a))|0}for(var b=0,c=2,d,e;64>b;c++){e=!0;for(d=2;d*d<=c;d++)if(0===c%d){e=
!1;break}e&&(8>b&&(this.Y[b]=a(Math.pow(c,.5))),this.b[b]=a(Math.pow(c,1/3)),b++)}}};
function u(a,b){var c,d,e,f=a.F,g=a.b,h=f[0],k=f[1],l=f[2],n=f[3],m=f[4],p=f[5],r=f[6],q=f[7];for(c=0;64>c;c++)16>c?d=b[c]:(d=b[c+1&15],e=b[c+14&15],d=b[c&15]=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+b[c&15]+b[c+9&15]|0),d=d+q+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(r^m&(p^r))+g[c],q=r,r=p,p=m,m=n+d|0,n=l,l=k,k=h,h=d+(k&l^n&(k^l))+(k>>>2^k>>>13^k>>>22^k<<30^k<<19^k<<10)|0;f[0]=f[0]+h|0;f[1]=f[1]+k|0;f[2]=f[2]+l|0;f[3]=f[3]+n|0;f[4]=f[4]+m|0;f[5]=f[5]+p|0;f[6]=f[6]+r|0;f[7]=
f[7]+q|0}
sjcl.mode.ccm={name:"ccm",G:[],listenProgress:function(a){sjcl.mode.ccm.G.push(a)},unListenProgress:function(a){a=sjcl.mode.ccm.G.indexOf(a);-1<a&&sjcl.mode.ccm.G.splice(a,1)},fa:function(a){var b=sjcl.mode.ccm.G.slice(),c;for(c=0;c<b.length;c+=1)b[c](a)},encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,k=h.bitLength(c)/8,l=h.bitLength(g)/8;e=e||64;d=d||[];if(7>k)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(f=2;4>f&&l>>>8*f;f++);f<15-k&&(f=15-k);c=h.clamp(c,
8*(15-f));b=sjcl.mode.ccm.V(a,b,c,d,e,f);g=sjcl.mode.ccm.C(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),k=f.clamp(b,h-e),l=f.bitSlice(b,h-e),h=(h-e)/8;if(7>g)throw new sjcl.exception.invalid("ccm: iv must be at least 7 bytes");for(b=2;4>b&&h>>>8*b;b++);b<15-g&&(b=15-g);c=f.clamp(c,8*(15-b));k=sjcl.mode.ccm.C(a,k,c,l,e,b);a=sjcl.mode.ccm.V(a,k.data,c,d,e,b);if(!f.equal(k.tag,a))throw new sjcl.exception.corrupt("ccm: tag doesn't match");
return k.data},na:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,k=h.i;d=[h.partial(8,(b.length?64:0)|d-2<<2|f-1)];d=h.concat(d,c);d[3]|=e;d=a.encrypt(d);if(b.length)for(c=h.bitLength(b)/8,65279>=c?g=[h.partial(16,c)]:0xffffffff>=c&&(g=h.concat([h.partial(16,65534)],[c])),g=h.concat(g,b),b=0;b<g.length;b+=4)d=a.encrypt(k(d,g.slice(b,b+4).concat([0,0,0])));return d},V:function(a,b,c,d,e,f){var g=sjcl.bitArray,h=g.i;e/=8;if(e%2||4>e||16<e)throw new sjcl.exception.invalid("ccm: invalid tag length");
if(0xffffffff<d.length||0xffffffff<b.length)throw new sjcl.exception.bug("ccm: can't deal with 4GiB or more data");c=sjcl.mode.ccm.na(a,d,c,e,g.bitLength(b)/8,f);for(d=0;d<b.length;d+=4)c=a.encrypt(h(c,b.slice(d,d+4).concat([0,0,0])));return g.clamp(c,8*e)},C:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.i;var k=b.length,l=h.bitLength(b),n=k/50,m=n;c=h.concat([h.partial(8,f-1)],c).concat([0,0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!k)return{tag:d,data:[]};for(g=0;g<k;g+=4)g>n&&(sjcl.mode.ccm.fa(g/
k),n+=m),c[3]++,e=a.encrypt(c),b[g]^=e[0],b[g+1]^=e[1],b[g+2]^=e[2],b[g+3]^=e[3];return{tag:d,data:h.clamp(b,l)}}};
sjcl.mode.ocb2={name:"ocb2",encrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid("ocb iv must be 128 bits");var g,h=sjcl.mode.ocb2.S,k=sjcl.bitArray,l=k.i,n=[0,0,0,0];c=h(a.encrypt(c));var m,p=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4)m=b.slice(g,g+4),n=l(n,m),p=p.concat(l(c,a.encrypt(l(c,m)))),c=h(c);m=b.slice(g);b=k.bitLength(m);g=a.encrypt(l(c,[0,0,0,b]));m=k.clamp(l(m.concat([0,0,0]),g),b);n=l(n,l(m.concat([0,0,0]),g));n=a.encrypt(l(n,l(c,h(c))));
d.length&&(n=l(n,f?d:sjcl.mode.ocb2.pmac(a,d)));return p.concat(k.concat(m,k.clamp(n,e)))},decrypt:function(a,b,c,d,e,f){if(128!==sjcl.bitArray.bitLength(c))throw new sjcl.exception.invalid("ocb iv must be 128 bits");e=e||64;var g=sjcl.mode.ocb2.S,h=sjcl.bitArray,k=h.i,l=[0,0,0,0],n=g(a.encrypt(c)),m,p,r=sjcl.bitArray.bitLength(b)-e,q=[];d=d||[];for(c=0;c+4<r/32;c+=4)m=k(n,a.decrypt(k(n,b.slice(c,c+4)))),l=k(l,m),q=q.concat(m),n=g(n);p=r-32*c;m=a.encrypt(k(n,[0,0,0,p]));m=k(m,h.clamp(b.slice(c),p).concat([0,
0,0]));l=k(l,m);l=a.encrypt(k(l,k(n,g(n))));d.length&&(l=k(l,f?d:sjcl.mode.ocb2.pmac(a,d)));if(!h.equal(h.clamp(l,e),h.bitSlice(b,r)))throw new sjcl.exception.corrupt("ocb: tag doesn't match");return q.concat(h.clamp(m,p))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.S,e=sjcl.bitArray,f=e.i,g=[0,0,0,0],h=a.encrypt([0,0,0,0]),h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4)h=d(h),g=f(g,a.encrypt(f(h,b.slice(c,c+4))));c=b.slice(c);128>e.bitLength(c)&&(h=f(h,d(h)),c=e.concat(c,[-2147483648,0,0,0]));g=f(g,c);
return a.encrypt(f(d(f(h,d(h))),g))},S:function(a){return[a[0]<<1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^135*(a[0]>>>31)]}};
sjcl.mode.gcm={name:"gcm",encrypt:function(a,b,c,d,e){var f=b.slice(0);b=sjcl.bitArray;d=d||[];a=sjcl.mode.gcm.C(!0,a,f,d,c,e||128);return b.concat(a.data,a.tag)},decrypt:function(a,b,c,d,e){var f=b.slice(0),g=sjcl.bitArray,h=g.bitLength(f);e=e||128;d=d||[];e<=h?(b=g.bitSlice(f,h-e),f=g.bitSlice(f,0,h-e)):(b=f,f=[]);a=sjcl.mode.gcm.C(!1,a,f,d,c,e);if(!g.equal(a.tag,b))throw new sjcl.exception.corrupt("gcm: tag doesn't match");return a.data},ka:function(a,b){var c,d,e,f,g,h=sjcl.bitArray.i;e=[0,0,
0,0];f=b.slice(0);for(c=0;128>c;c++){(d=0!==(a[Math.floor(c/32)]&1<<31-c%32))&&(e=h(e,f));g=0!==(f[3]&1);for(d=3;0<d;d--)f[d]=f[d]>>>1|(f[d-1]&1)<<31;f[0]>>>=1;g&&(f[0]^=-0x1f000000)}return e},j:function(a,b,c){var d,e=c.length;b=b.slice(0);for(d=0;d<e;d+=4)b[0]^=0xffffffff&c[d],b[1]^=0xffffffff&c[d+1],b[2]^=0xffffffff&c[d+2],b[3]^=0xffffffff&c[d+3],b=sjcl.mode.gcm.ka(b,a);return b},C:function(a,b,c,d,e,f){var g,h,k,l,n,m,p,r,q=sjcl.bitArray;m=c.length;p=q.bitLength(c);r=q.bitLength(d);h=q.bitLength(e);
g=b.encrypt([0,0,0,0]);96===h?(e=e.slice(0),e=q.concat(e,[1])):(e=sjcl.mode.gcm.j(g,[0,0,0,0],e),e=sjcl.mode.gcm.j(g,e,[0,0,Math.floor(h/0x100000000),h&0xffffffff]));h=sjcl.mode.gcm.j(g,[0,0,0,0],d);n=e.slice(0);d=h.slice(0);a||(d=sjcl.mode.gcm.j(g,h,c));for(l=0;l<m;l+=4)n[3]++,k=b.encrypt(n),c[l]^=k[0],c[l+1]^=k[1],c[l+2]^=k[2],c[l+3]^=k[3];c=q.clamp(c,p);a&&(d=sjcl.mode.gcm.j(g,h,c));a=[Math.floor(r/0x100000000),r&0xffffffff,Math.floor(p/0x100000000),p&0xffffffff];d=sjcl.mode.gcm.j(g,d,a);k=b.encrypt(e);
d[0]^=k[0];d[1]^=k[1];d[2]^=k[2];d[3]^=k[3];return{tag:q.bitSlice(d,0,f),data:c}}};sjcl.misc.hmac=function(a,b){this.W=b=b||sjcl.hash.sha256;var c=[[],[]],d,e=b.prototype.blockSize/32;this.w=[new b,new b];a.length>e&&(a=b.hash(a));for(d=0;d<e;d++)c[0][d]=a[d]^909522486,c[1][d]=a[d]^1549556828;this.w[0].update(c[0]);this.w[1].update(c[1]);this.R=new b(this.w[0])};
sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a){if(this.aa)throw new sjcl.exception.invalid("encrypt on already updated hmac called!");this.update(a);return this.digest(a)};sjcl.misc.hmac.prototype.reset=function(){this.R=new this.W(this.w[0]);this.aa=!1};sjcl.misc.hmac.prototype.update=function(a){this.aa=!0;this.R.update(a)};sjcl.misc.hmac.prototype.digest=function(){var a=this.R.finalize(),a=(new this.W(this.w[1])).update(a).finalize();this.reset();return a};
sjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E4;if(0>d||0>c)throw new sjcl.exception.invalid("invalid params to pbkdf2");"string"===typeof a&&(a=sjcl.codec.utf8String.toBits(a));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,k,l=[],n=sjcl.bitArray;for(k=1;32*l.length<(d||1);k++){e=f=a.encrypt(n.concat(b,[k]));for(g=1;g<c;g++)for(f=a.encrypt(f),h=0;h<f.length;h++)e[h]^=f[h];l=l.concat(e)}d&&(l=n.clamp(l,d));return l};
sjcl.prng=function(a){this.c=[new sjcl.hash.sha256];this.m=[0];this.P=0;this.H={};this.N=0;this.U={};this.Z=this.f=this.o=this.ha=0;this.b=[0,0,0,0,0,0,0,0];this.h=[0,0,0,0];this.L=void 0;this.M=a;this.D=!1;this.K={progress:{},seeded:{}};this.u=this.ga=0;this.I=1;this.J=2;this.ca=0x10000;this.T=[0,48,64,96,128,192,0x100,384,512,768,1024];this.da=3E4;this.ba=80};
sjcl.prng.prototype={randomWords:function(a,b){var c=[],d;d=this.isReady(b);var e;if(d===this.u)throw new sjcl.exception.notReady("generator isn't seeded");if(d&this.J){d=!(d&this.I);e=[];var f=0,g;this.Z=e[0]=(new Date).valueOf()+this.da;for(g=0;16>g;g++)e.push(0x100000000*Math.random()|0);for(g=0;g<this.c.length&&(e=e.concat(this.c[g].finalize()),f+=this.m[g],this.m[g]=0,d||!(this.P&1<<g));g++);this.P>=1<<this.c.length&&(this.c.push(new sjcl.hash.sha256),this.m.push(0));this.f-=f;f>this.o&&(this.o=
f);this.P++;this.b=sjcl.hash.sha256.hash(this.b.concat(e));this.L=new sjcl.cipher.aes(this.b);for(d=0;4>d&&(this.h[d]=this.h[d]+1|0,!this.h[d]);d++);}for(d=0;d<a;d+=4)0===(d+1)%this.ca&&y(this),e=z(this),c.push(e[0],e[1],e[2],e[3]);y(this);return c.slice(0,a)},setDefaultParanoia:function(a,b){if(0===a&&"Setting paranoia=0 will ruin your security; use it only for testing"!==b)throw new sjcl.exception.invalid("Setting paranoia=0 will ruin your security; use it only for testing");this.M=a},addEntropy:function(a,
b,c){c=c||"user";var d,e,f=(new Date).valueOf(),g=this.H[c],h=this.isReady(),k=0;d=this.U[c];void 0===d&&(d=this.U[c]=this.ha++);void 0===g&&(g=this.H[c]=0);this.H[c]=(this.H[c]+1)%this.c.length;switch(typeof a){case "number":void 0===b&&(b=1);this.c[g].update([d,this.N++,1,b,f,1,a|0]);break;case "object":c=Object.prototype.toString.call(a);if("[object Uint32Array]"===c){e=[];for(c=0;c<a.length;c++)e.push(a[c]);a=e}else for("[object Array]"!==c&&(k=1),c=0;c<a.length&&!k;c++)"number"!==typeof a[c]&&
(k=1);if(!k){if(void 0===b)for(c=b=0;c<a.length;c++)for(e=a[c];0<e;)b++,e=e>>>1;this.c[g].update([d,this.N++,2,b,f,a.length].concat(a))}break;case "string":void 0===b&&(b=a.length);this.c[g].update([d,this.N++,3,b,f,a.length]);this.c[g].update(a);break;default:k=1}if(k)throw new sjcl.exception.bug("random: addEntropy only supports number, array of numbers or string");this.m[g]+=b;this.f+=b;h===this.u&&(this.isReady()!==this.u&&A("seeded",Math.max(this.o,this.f)),A("progress",this.getProgress()))},
isReady:function(a){a=this.T[void 0!==a?a:this.M];return this.o&&this.o>=a?this.m[0]>this.ba&&(new Date).valueOf()>this.Z?this.J|this.I:this.I:this.f>=a?this.J|this.u:this.u},getProgress:function(a){a=this.T[a?a:this.M];return this.o>=a?1:this.f>a?1:this.f/a},startCollectors:function(){if(!this.D){this.a={loadTimeCollector:B(this,this.ma),mouseCollector:B(this,this.oa),keyboardCollector:B(this,this.la),accelerometerCollector:B(this,this.ea),touchCollector:B(this,this.qa)};if(window.addEventListener)window.addEventListener("load",
this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new sjcl.exception.bug("can't attach event");
this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",
this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(a,b){this.K[a][this.ga++]=b},removeEventListener:function(a,b){var c,d,e=this.K[a],f=[];for(d in e)e.hasOwnProperty(d)&&e[d]===b&&f.push(d);for(c=0;c<f.length;c++)d=f[c],delete e[d]},la:function(){C(this,1)},oa:function(a){var b,c;try{b=a.x||a.clientX||a.offsetX||0,c=a.y||a.clientY||a.offsetY||0}catch(d){c=b=0}0!=b&&0!=c&&this.addEntropy([b,c],2,"mouse");C(this,0)},qa:function(a){a=
a.touches[0]||a.changedTouches[0];this.addEntropy([a.pageX||a.clientX,a.pageY||a.clientY],1,"touch");C(this,0)},ma:function(){C(this,2)},ea:function(a){a=a.accelerationIncludingGravity.x||a.accelerationIncludingGravity.y||a.accelerationIncludingGravity.z;if(window.orientation){var b=window.orientation;"number"===typeof b&&this.addEntropy(b,1,"accelerometer")}a&&this.addEntropy(a,2,"accelerometer");C(this,0)}};
function A(a,b){var c,d=sjcl.random.K[a],e=[];for(c in d)d.hasOwnProperty(c)&&e.push(d[c]);for(c=0;c<e.length;c++)e[c](b)}function C(a,b){"undefined"!==typeof window&&window.performance&&"function"===typeof window.performance.now?a.addEntropy(window.performance.now(),b,"loadtime"):a.addEntropy((new Date).valueOf(),b,"loadtime")}function y(a){a.b=z(a).concat(z(a));a.L=new sjcl.cipher.aes(a.b)}function z(a){for(var b=0;4>b&&(a.h[b]=a.h[b]+1|0,!a.h[b]);b++);return a.L.encrypt(a.h)}
function B(a,b){return function(){b.apply(a,arguments)}}sjcl.random=new sjcl.prng(6);
a:try{var D,E,F,G;if(G="undefined"!==typeof module&&module.exports){var H;try{H=require("crypto")}catch(a){H=null}G=E=H}if(G&&E.randomBytes)D=E.randomBytes(128),D=new Uint32Array((new Uint8Array(D)).buffer),sjcl.random.addEntropy(D,1024,"crypto['randomBytes']");else if("undefined"!==typeof window&&"undefined"!==typeof Uint32Array){F=new Uint32Array(32);if(window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(F);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(F);
else break a;sjcl.random.addEntropy(F,1024,"crypto['getRandomValues']")}}catch(a){"undefined"!==typeof window&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(a))}
sjcl.json={defaults:{v:1,iter:1E4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ja:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.g({iv:sjcl.random.randomWords(4,0)},e.defaults),g;e.g(f,c);c=f.adata;"string"===typeof f.salt&&(f.salt=sjcl.codec.base64.toBits(f.salt));"string"===typeof f.iv&&(f.iv=sjcl.codec.base64.toBits(f.iv));if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||"string"===typeof a&&100>=f.iter||64!==f.ts&&96!==f.ts&&128!==f.ts||128!==f.ks&&192!==f.ks&&0x100!==f.ks||2>f.iv.length||
4<f.iv.length)throw new sjcl.exception.invalid("json encrypt: invalid parameters");"string"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,f),a=g.key.slice(0,f.ks/32),f.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.publicKey&&(g=a.kem(),f.kemtag=g.tag,a=g.key.slice(0,f.ks/32));"string"===typeof b&&(b=sjcl.codec.utf8String.toBits(b));"string"===typeof c&&(f.adata=c=sjcl.codec.utf8String.toBits(c));g=new sjcl.cipher[f.cipher](a);e.g(d,f);d.key=a;f.ct="ccm"===f.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&
b instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.encrypt(g,b,f.iv,c,f.ts):sjcl.mode[f.mode].encrypt(g,b,f.iv,c,f.ts);return f},encrypt:function(a,b,c,d){var e=sjcl.json,f=e.ja.apply(e,arguments);return e.encode(f)},ia:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.g(e.g(e.g({},e.defaults),b),c,!0);var f,g;f=b.adata;"string"===typeof b.salt&&(b.salt=sjcl.codec.base64.toBits(b.salt));"string"===typeof b.iv&&(b.iv=sjcl.codec.base64.toBits(b.iv));if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||"string"===
typeof a&&100>=b.iter||64!==b.ts&&96!==b.ts&&128!==b.ts||128!==b.ks&&192!==b.ks&&0x100!==b.ks||!b.iv||2>b.iv.length||4<b.iv.length)throw new sjcl.exception.invalid("json decrypt: invalid parameters");"string"===typeof a?(g=sjcl.misc.cachedPbkdf2(a,b),a=g.key.slice(0,b.ks/32),b.salt=g.salt):sjcl.ecc&&a instanceof sjcl.ecc.elGamal.secretKey&&(a=a.unkem(sjcl.codec.base64.toBits(b.kemtag)).slice(0,b.ks/32));"string"===typeof f&&(f=sjcl.codec.utf8String.toBits(f));g=new sjcl.cipher[b.cipher](a);f="ccm"===
b.mode&&sjcl.arrayBuffer&&sjcl.arrayBuffer.ccm&&b.ct instanceof ArrayBuffer?sjcl.arrayBuffer.ccm.decrypt(g,b.ct,b.iv,b.tag,f,b.ts):sjcl.mode[b.mode].decrypt(g,b.ct,b.iv,f,b.ts);e.g(d,b);d.key=a;return 1===c.raw?f:sjcl.codec.utf8String.fromBits(f)},decrypt:function(a,b,c,d){var e=sjcl.json;return e.ia(a,e.decode(b),c,d)},encode:function(a){var b,c="{",d="";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid("json encode: invalid property name");c+=d+'"'+
b+'":';d=",";switch(typeof a[b]){case "number":case "boolean":c+=a[b];break;case "string":c+='"'+escape(a[b])+'"';break;case "object":c+='"'+sjcl.codec.base64.fromBits(a[b],0)+'"';break;default:throw new sjcl.exception.bug("json encode: unsupported type");}}return c+"}"},decode:function(a){a=a.replace(/\s/g,"");if(!a.match(/^\{.*\}$/))throw new sjcl.exception.invalid("json decode: this isn't json!");a=a.replace(/^\{|\}$/g,"").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^\s*(?:(["']?)([a-z][a-z0-9]*)\1)\s*:\s*(?:(-?\d+)|"([a-z0-9+\/%*_.@=\-]*)"|(true|false))$/i)))throw new sjcl.exception.invalid("json decode: this isn't json!");
null!=d[3]?b[d[2]]=parseInt(d[3],10):null!=d[4]?b[d[2]]=d[2].match(/^(ct|adata|salt|iv)$/)?sjcl.codec.base64.toBits(d[4]):unescape(d[4]):null!=d[5]&&(b[d[2]]="true"===d[5])}return b},g:function(a,b,c){void 0===a&&(a={});if(void 0===b)return a;for(var d in b)if(b.hasOwnProperty(d)){if(c&&void 0!==a[d]&&a[d]!==b[d])throw new sjcl.exception.invalid("required parameter overridden");a[d]=b[d]}return a},sa:function(a,b){var c={},d;for(d in a)a.hasOwnProperty(d)&&a[d]!==b[d]&&(c[d]=a[d]);return c},ra:function(a,
b){var c={},d;for(d=0;d<b.length;d++)void 0!==a[b[d]]&&(c[b[d]]=a[b[d]]);return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.pa={};sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.pa,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=void 0===b.salt?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};
"undefined"!==typeof module&&module.exports&&(module.exports=sjcl);"function"===typeof define&&define([],function(){return sjcl});

View File

@@ -1,4 +1,3 @@
<h1 class="">Contributing to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a></h1><p>We welcome contributions to the code and documentation of <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> in several ways:</p><ul><li><a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/ReportingBugs.html">ReportingBugs</a></li><li>Helping to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/Improving%2520TiddlyWiki%2520Documentation.html">improve our documentation</a></li><li>Contributing to the code via <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5" target="_blank">GitHub</a><ul><li>See <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/dev" target="_blank">http://tiddlywiki.com/dev</a> for more details</li></ul></li></ul><p>There are other ways to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/HelpingTiddlyWiki.html">help TiddlyWiki</a> too.</p><h1 class="">Contributor License Agreement</h1><p>Like other <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/OpenSource.html">OpenSource</a> projects, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> needs a signed contributor license agreement from individual contributors. This is a legal agreement that allows contributors to assert that they own the copyright of their contribution, and that they agree to license it to the <a class="tc-tiddlylink tc-tiddlylink-missing" href="http://tiddlywiki.com/static/UnaMesa.html">UnaMesa</a> Association (the legal entity that owns <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on behalf of the community).</p><ul><li>For individuals use: <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md" target="_blank">licenses/CLA-individual</a></li><li>For entities use: <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md" target="_blank">licenses/CLA-entity</a></li></ul><h1 class="">How to sign the CLA</h1><p>Create a <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/GitHub.html">GitHub</a> pull request to add your name to <code>cla-individual.md</code> or <code>cla-entity.md</code>, with the date in the format (YYYY/MM/DD).</p><p><strong>step by step</strong></p><ol><li>Navigate to <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md" target="_blank">licenses/CLA-individual</a> or <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md" target="_blank">licenses/CLA-entity</a> according to whether you are signing as an individual or representative of an organisation</li><li>Click the &quot;edit&quot; button at the top-right corner (clicking this button will fork the project so you can edit the file)</li><li>Add your name at the bottom<ul><li>eg: <code>Jeremy Ruston, @Jermolene, 2011/11/22</code></li></ul></li><li>Below the edit box for the CLA text you should see a box labelled <strong>Propose file change</strong></li><li>Enter a brief title to explain the change (eg, &quot;Signing the CLA&quot;)</li><li>Click the green button labelled <strong>Propose file change</strong></li><li>On the following screen, click the green button labelled <strong>Create pull request</strong></li></ol><hr><p><em>The CLA documents used for this project were created using <a class="tc-tiddlylink-external" href="http://www.harmonyagreements.org" target="_blank">Harmony Project Templates</a>. &quot;HA-CLA-I-LIST Version 1.0&quot; for &quot;CLA-individual&quot; and &quot;HA-CLA-E-LIST Version 1.0&quot; for &quot;CLA-entity&quot;.</em></p><p>Remarks
----—</p><ul><li><ul><li>When not owning the copyright in the entire work of authorship**</li></ul></li></ul><p>In this case, please clearly state so, since otherwise we assume that you are the legal copyright holder of the contributed work! Please provide links and additional information that clarify under which license the rest of the code is distributed.
</p><p><em>This file was automatically generated by <a class="tc-tiddlylink tc-tiddlylink-resolves" href="http://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a></em>
<h1 class="">Contributing to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a></h1><p>We welcome contributions to the code and documentation of <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> in several ways:</p><ul><li><a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/ReportingBugs.html">ReportingBugs</a></li><li>Helping to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/Improving%2520TiddlyWiki%2520Documentation.html">improve our documentation</a></li><li>Contributing to the code via <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5" rel="noopener noreferrer" target="_blank">GitHub</a><ul><li>See <a class="tc-tiddlylink-external" href="https://tiddlywiki.com/dev" rel="noopener noreferrer" target="_blank">https://tiddlywiki.com/dev</a> for more details</li></ul></li></ul><p>There are other ways to <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/HelpingTiddlyWiki.html">help TiddlyWiki</a> too.</p><h1 class="">Contributor License Agreement</h1><p>Like other <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/OpenSource.html">OpenSource</a> projects, <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a> needs a signed contributor license agreement from individual contributors. This is a legal agreement that allows contributors to assert that they own the copyright of their contribution, and that they agree to license it to the <a class="tc-tiddlylink tc-tiddlylink-missing" href="https://tiddlywiki.com/static/UnaMesa.html">UnaMesa</a> Association (the legal entity that owns <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> on behalf of the community).</p><ul><li>For individuals use: <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md" rel="noopener noreferrer" target="_blank">licenses/CLA-individual</a></li><li>For entities use: <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md" rel="noopener noreferrer" target="_blank">licenses/CLA-entity</a></li></ul><h1 class="">How to sign the CLA</h1><p>Create a <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/GitHub.html">GitHub</a> pull request to add your name to <code>cla-individual.md</code> or <code>cla-entity.md</code>, with the date in the format (YYYY/MM/DD).</p><p><strong>step by step</strong></p><ol><li>Navigate to <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-individual.md" rel="noopener noreferrer" target="_blank">licenses/CLA-individual</a> or <a class="tc-tiddlylink-external" href="https://github.com/Jermolene/TiddlyWiki5/tree/master/licenses/cla-entity.md" rel="noopener noreferrer" target="_blank">licenses/CLA-entity</a> according to whether you are signing as an individual or representative of an organisation</li><li>Ensure that the &quot;branch&quot; dropdown at the top left is set to <code>tiddlywiki-com</code></li><li>Click the &quot;edit&quot; button at the top-right corner (clicking this button will fork the project so you can edit the file)</li><li>Add your name at the bottom<ul><li>eg: <code>Jeremy Ruston, @Jermolene, 2011/11/22</code></li></ul></li><li>Below the edit box for the CLA text you should see a box labelled <strong>Propose file change</strong></li><li>Enter a brief title to explain the change (eg, &quot;Signing the CLA&quot;)</li><li>Click the green button labelled <strong>Propose file change</strong></li><li>On the following screen, click the green button labelled <strong>Create pull request</strong></li></ol><hr><p><em>The CLA documents used for this project were created using <a class="tc-tiddlylink-external" href="http://www.harmonyagreements.org" rel="noopener noreferrer" target="_blank">Harmony Project Templates</a>. &quot;HA-CLA-I-LIST Version 1.0&quot; for &quot;CLA-individual&quot; and &quot;HA-CLA-E-LIST Version 1.0&quot; for &quot;CLA-entity&quot;.</em></p><h2 class="">Remarks</h2><p><strong>If you do not own the copyright in the entire work of authorship</strong>:</p><p>In this case, please clearly state so and provide links and any additional information that clarify under which license the rest of the code is distributed.
</p><p><em>This file was automatically generated by <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki5.html">TiddlyWiki5</a></em>
</p>

View File

@@ -1,5 +1,4 @@
title: $:/Acknowledgements
type: text/vnd.tiddlywiki
TiddlyWiki incorporates code from these fine OpenSource projects:

View File

@@ -3,30 +3,31 @@ type: text/plain
TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)
Copyright © Jeremy Ruston 2004-2007
Copyright © UnaMesa Association 2007-2016
Copyright (c) 2004-2007, Jeremy Ruston
Copyright (c) 2007-2018, UnaMesa Association
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
Neither the name of the UnaMesa Association nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@@ -0,0 +1,4 @@
title: $:/core/images/add-comment
tags: $:/tags/Image
<svg class="tc-image-add-comment tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128"><path d="M56 56H36a8 8 0 1 0 0 16h20v20a8 8 0 1 0 16 0V72h20a8 8 0 1 0 0-16H72V36a8 8 0 1 0-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z" fill-rule="evenodd"/></svg>

View File

@@ -0,0 +1,15 @@
title: $:/core/images/copy-clipboard
tags: $:/tags/Image
<svg class="tc-image-copy-clipboard tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
<g fill-rule="evenodd">
<rect x="40" y="40" width="33" height="8" rx="4"></rect>
<rect x="40" y="82" width="17" height="8" rx="4"></rect>
<rect x="40" y="54" width="17" height="8" rx="4"></rect>
<rect x="40" y="96" width="33" height="8" rx="4"></rect>
<rect x="40" y="68" width="12" height="8" rx="4"></rect>
<path d="M40,16 L23.9992458,16 C19.5813843,16 16,19.5907123 16,24 C16,24.0016363 16.0000005,24.0032725 16.0000015,24.0049086 C16.0000005,24.0065441 16,24.0081803 16,24.0098166 L16,119.990183 C16,119.99182 16.0000005,119.993456 16.0000015,119.995092 C16.0000005,119.996727 16,119.998364 16,120 C16,124.409288 19.5813843,128 23.9992458,128 L104.000754,128 C106.205061,128 108.203844,127.105595 109.652065,125.659342 C111.102424,124.21251 112,122.214511 112,120.007595 L112,103.992405 C112,99.5776607 108.418278,96 104,96 C99.5907123,96 96,99.5783218 96,103.992405 L96,112 L32,112 L32,32 L96,32 L96,40.0075946 C96,44.4223393 99.581722,48 104,48 C108.409288,48 112,44.4216782 112,40.0075946 L112,23.9924054 C112,21.7851587 111.104671,19.7871591 109.657101,18.3409203 C108.203844,16.8944047 106.205061,16 104.000754,16 L88,16 C88,11.5907123 84.4151006,8 79.9929031,8 L48.0070969,8 C43.5881712,8 40,11.581722 40,16 Z M44,14.9958262 C44,12.7889923 45.7964248,11 48.0000255,11 L79.9999745,11 C82.2091276,11 84,12.7965212 84,14.9958262 L84,19.0041738 C84,21.2110077 82.2035752,23 79.9999745,23 L48.0000255,23 C45.7908724,23 44,21.2034788 44,19.0041738 L44,14.9958262 Z"></path>
<rect x="62" y="64" width="66" height="16" rx="8"></rect>
<path d="M60.6568542,85.6568542 L76.6568542,69.6568543 L65.3431458,69.6568542 L81.3431458,85.6568542 C84.4673401,88.7810486 89.5326599,88.7810486 92.6568542,85.6568542 C95.7810486,82.5326599 95.7810486,77.4673401 92.6568542,74.3431458 L76.6568542,58.3431458 C73.5326599,55.2189514 68.4673401,55.2189514 65.3431458,58.3431457 L49.3431458,74.3431457 C46.2189514,77.4673401 46.2189514,82.5326599 49.3431457,85.6568542 C52.4673401,88.7810486 57.5326599,88.7810486 60.6568542,85.6568542 L60.6568542,85.6568542 Z" transform="translate(71.000000, 72.000000) rotate(-90.000000) translate(-71.000000, -72.000000) "></path>
</g>
</svg>

9
core/images/gitter.tid Normal file
View File

@@ -0,0 +1,9 @@
title: $:/core/images/gitter
tags: $:/tags/Image
<svg class="tc-image-gitter tc-image-button" width="22pt" height="22pt" viewBox="0 0 18 25">
<rect x="15" y="5" width="2" height="10"></rect>
<rect x="10" y="5" width="2" height="20"></rect>
<rect x="5" y="5" width="2" height="20"></rect>
<rect width="2" height="15"></rect>
</svg>

4
core/images/linkify.tid Normal file
View File

@@ -0,0 +1,4 @@
title: $:/core/images/linkify
tags: $:/tags/Image
<svg class="tc-linkify-button tc-image-button" viewBox="0 0 128 128" width="22pt" height="22pt"><path d="M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z" fill-rule="evenodd"/></svg>

9
core/images/list.tid Normal file
View File

@@ -0,0 +1,9 @@
title: $:/core/images/list
tags: $:/tags/Image
<svg class="tc-image-list tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
<g fill-rule="evenodd">
<path d="M0.719999312,185.568543 C2.21955287,181.862817 3.0452019,177.812144 3.0452019,173.568542 C3.0452019,155.891545 -11.2816707,141.568542 -28.9547636,141.568542 L-60.9548326,141.568542 C-78.6344937,141.568542 -92.9547981,155.895431 -92.9547981,173.568542 C-92.9547981,191.24554 -78.6279255,205.568542 -60.9548326,205.568542 L-28.9547636,205.568542 C-27.593228,205.568542 -26.2516158,205.483573 -24.9349335,205.31865 C-31.5207556,201.78951 -36.8809788,196.272192 -40.2126959,189.568542 L-60.9493786,189.568542 C-69.7889277,189.568542 -76.9547981,182.407041 -76.9547981,173.568542 C-76.9547981,164.731986 -69.7994766,157.568542 -60.9493786,157.568542 L-28.9602176,157.568542 C-20.1206685,157.568542 -12.9547981,164.730044 -12.9547981,173.568542 C-12.9547981,176.946528 -14.0004297,180.080016 -15.7866505,182.6623 C-13.6856165,184.473592 -10.949961,185.568542 -7.9585771,185.568542 L0.720002586,185.568542 Z" transform="translate(-44.954798, 173.568542) rotate(-225.000000) translate(44.954798, -173.568542) "></path>
<path d="M87.7480315,128 L23.9992458,128 C19.5813843,128 16,124.409247 16,119.993027 L16,8.00697327 C16,3.58484404 19.5881049,0 23.9992458,0 L104.000754,0 C108.418616,0 112,3.59075293 112,8.00697327 L112,104 L91.2492027,104 C90.2848199,104 89.410573,104.391703 88.7768998,105.025201 C88.1373658,105.661376 87.7480315,106.53563 87.7480315,107.501171 L87.7480315,128 Z M95.7480315,127.879386 L111.627417,112 L95.7480315,112 L95.7480315,127.879386 Z M40,15.5089165 C40,13.5709954 41.5636015,12 43.4998101,12 L98.5001899,12 C100.433082,12 102,13.5614718 102,15.5089165 L102,16.4910835 C102,18.4290046 100.436399,20 98.5001899,20 L43.4998101,20 C41.5669183,20 40,18.4385282 40,16.4910835 L40,15.5089165 Z M32,22 C35.3137085,22 38,19.3137085 38,16 C38,12.6862915 35.3137085,10 32,10 C28.6862915,10 26,12.6862915 26,16 C26,19.3137085 28.6862915,22 32,22 Z M40,31.5089165 C40,29.5709954 41.5636015,28 43.4998101,28 L98.5001899,28 C100.433082,28 102,29.5614718 102,31.5089165 L102,32.4910835 C102,34.4290046 100.436399,36 98.5001899,36 L43.4998101,36 C41.5669183,36 40,34.4385282 40,32.4910835 L40,31.5089165 Z M40,47.5089165 C40,45.5709954 41.5636015,44 43.4998101,44 L98.5001899,44 C100.433082,44 102,45.5614718 102,47.5089165 L102,48.4910835 C102,50.4290046 100.436399,52 98.5001899,52 L43.4998101,52 C41.5669183,52 40,50.4385282 40,48.4910835 L40,47.5089165 Z M40,63.5089165 C40,61.5709954 41.5636015,60 43.4998101,60 L98.5001899,60 C100.433082,60 102,61.5614718 102,63.5089165 L102,64.4910835 C102,66.4290046 100.436399,68 98.5001899,68 L43.4998101,68 C41.5669183,68 40,66.4385282 40,64.4910835 L40,63.5089165 Z M40,79.5089165 C40,77.5709954 41.5636015,76 43.4998101,76 L98.5001899,76 C100.433082,76 102,77.5614718 102,79.5089165 L102,80.4910835 C102,82.4290046 100.436399,84 98.5001899,84 L43.4998101,84 C41.5669183,84 40,82.4385282 40,80.4910835 L40,79.5089165 Z M40,95.5089165 C40,93.5709954 41.5636015,92 43.4998101,92 L98.5001899,92 C100.433082,92 102,93.5614718 102,95.5089165 L102,96.4910835 C102,98.4290046 100.436399,100 98.5001899,100 L43.4998101,100 C41.5669183,100 40,98.4385282 40,96.4910835 L40,95.5089165 Z M40,111.508916 C40,109.570995 41.5680474,108 43.4972017,108 L76.5027983,108 C78.4342495,108 80,109.561472 80,111.508916 L80,112.491084 C80,114.429005 78.4319526,116 76.5027983,116 L43.4972017,116 C41.5657505,116 40,114.438528 40,112.491084 L40,111.508916 Z M32,38 C35.3137085,38 38,35.3137085 38,32 C38,28.6862915 35.3137085,26 32,26 C28.6862915,26 26,28.6862915 26,32 C26,35.3137085 28.6862915,38 32,38 Z M32,54 C35.3137085,54 38,51.3137085 38,48 C38,44.6862915 35.3137085,42 32,42 C28.6862915,42 26,44.6862915 26,48 C26,51.3137085 28.6862915,54 32,54 Z M32,70 C35.3137085,70 38,67.3137085 38,64 C38,60.6862915 35.3137085,58 32,58 C28.6862915,58 26,60.6862915 26,64 C26,67.3137085 28.6862915,70 32,70 Z M32,86 C35.3137085,86 38,83.3137085 38,80 C38,76.6862915 35.3137085,74 32,74 C28.6862915,74 26,76.6862915 26,80 C26,83.3137085 28.6862915,86 32,86 Z M32,102 C35.3137085,102 38,99.3137085 38,96 C38,92.6862915 35.3137085,90 32,90 C28.6862915,90 26,92.6862915 26,96 C26,99.3137085 28.6862915,102 32,102 Z M32,118 C35.3137085,118 38,115.313708 38,112 C38,108.686292 35.3137085,106 32,106 C28.6862915,106 26,108.686292 26,112 C26,115.313708 28.6862915,118 32,118 Z"></path>
</g>
</svg>

View File

@@ -0,0 +1,12 @@
title: $:/core/images/print-button
tags: $:/tags/Image
<svg class="tc-image-print-button tc-image-button" viewBox="0 0 128 128" width="22pt" height="22pt">
<g fill-rule="evenodd">
<path d="M112,71 L112,30.5 L111.96811,30.5 L111.96811,30.5 C111.932942,28.4998414 111.151676,26.510538 109.625176,24.9840387 L86.9982489,2.35711116 C85.3482153,0.707077645 83.1589869,-0.071534047 81,0.0201838424 L81,0 L23.9992458,0 C19.5808867,0 16,3.58213437 16,8.00092105 L16,71 L24,71 L24,8 L81,8 L81,22.4996539 C81,26.9216269 84.5818769,30.5 89.0003461,30.5 L104,30.5 L104,71 L112,71 Z"></path>
<rect x="32" y="36" width="64" height="8" rx="4"></rect>
<rect x="32" y="52" width="64" height="8" rx="4"></rect>
<rect x="32" y="20" width="40" height="8" rx="4"></rect>
<path d="M0,80.0054195 C0,71.1658704 7.15611005,64 16.0008841,64 L111.999116,64 C120.83616,64 128,71.1553215 128,80.0054195 L128,111.99458 C128,120.83413 120.84389,128 111.999116,128 L16.0008841,128 C7.16383982,128 0,120.844679 0,111.99458 L0,80.0054195 Z M104,96 C108.418278,96 112,92.418278 112,88 C112,83.581722 108.418278,80 104,80 C99.581722,80 96,83.581722 96,88 C96,92.418278 99.581722,96 104,96 Z"></path>
</g>
</svg>

View File

@@ -0,0 +1,4 @@
title: $:/core/images/rotate-left
tags: $:/tags/Image
<svg class="tc-image-rotate-left tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128"><g fill-rule="evenodd"><rect width="32" height="80" rx="8"/><rect x="48" y="96" width="80" height="32" rx="8"/><path d="M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 0 1-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 1 1-5.657 5.657L49.172 43.142a4 4 0 0 1 0-5.657l11.313-11.313a4 4 0 1 1 5.657 5.656l-4.821 4.822z"/></g></svg>

View File

@@ -0,0 +1,8 @@
title: $:/core/images/timestamp-off
tags: $:/tags/Image
<svg class="tc-image-timestamp-off tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
<g fill-rule="evenodd">
<path d="M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10c-2.762 0-5-2.24-5-5-.004-2.756 2.238-5 5-5H66.69c2.762 0 5.002 2.24 5 5 .006 2.757-2.238 5-5 5H49.705z"/><path d="M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z"/>
</g>
</svg>

View File

@@ -0,0 +1,8 @@
title: $:/core/images/timestamp-on
tags: $:/tags/Image
<svg class="tc-image-timestamp-on tc-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
<g fill-rule="evenodd">
<path d="M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10c-2.762 0-5-2.24-5-5-.004-2.756 2.238-5 5-5H66.69c2.762 0 5.002 2.24 5 5 .006 2.757-2.238 5-5 5H49.705z"/><path d="M13.41 27.178c-2.116 1.775-5.27 1.498-7.045-.613-1.772-2.11-1.498-5.27.616-7.047l9.95-8.348c2.115-1.774 5.27-1.5 7.045.618 1.775 2.108 1.498 5.27-.616 7.043l-9.95 8.348zM102.983 27.178c2.116 1.775 5.27 1.498 7.045-.613 1.772-2.11 1.498-5.27-.616-7.047l-9.95-8.348c-2.114-1.774-5.27-1.5-7.044.618-1.775 2.108-1.498 5.27.616 7.043l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z"/>
</g>
</svg>

View File

@@ -0,0 +1,4 @@
title: $:/core/images/transcludify
tags: $:/tags/Image
<svg class="tc-transcludify-button tc-image-button" viewBox="0 0 128 128" width="22pt" height="22pt"><path d="M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 0 0 2.75-.932 6.762 6.762 0 0 0 2.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 0 0-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 0 0-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 0 0 2.75-.932 6.762 6.762 0 0 0 2.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 0 0-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 0 0-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 0 0-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 0 0 .71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 0 0-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 0 0 2.262 2.084 8.868 8.868 0 0 0 2.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 0 0-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 0 0 .71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 0 0-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 0 0 2.262 2.084 8.868 8.868 0 0 0 2.75 1.02c.946.177 1.745.266 2.395.266v7.806z" fill-rule="evenodd"/></svg>

View File

@@ -14,6 +14,8 @@ CloseOthers/Caption: close others
CloseOthers/Hint: Close other tiddlers
ControlPanel/Caption: control panel
ControlPanel/Hint: Open control panel
CopyToClipboard/Caption: copy to clipboard
CopyToClipboard/Hint: Copy this text to the clipboard
Delete/Caption: delete
Delete/Hint: Delete this tiddler
Edit/Caption: edit
@@ -30,6 +32,7 @@ ExportTiddler/Caption: export tiddler
ExportTiddler/Hint: Export tiddler
ExportTiddlers/Caption: export tiddlers
ExportTiddlers/Hint: Export tiddlers
SidebarSearch/Hint: Select the sidebar search field
Fold/Caption: fold tiddler
Fold/Hint: Fold the body of this tiddler
Fold/FoldBar/Caption: fold-bar
@@ -54,6 +57,8 @@ Home/Caption: home
Home/Hint: Open the default tiddlers
Language/Caption: language
Language/Hint: Choose the user interface language
Manager/Caption: tiddler manager
Manager/Hint: Open tiddler manager
More/Caption: more
More/Hint: More actions
NewHere/Caption: new here
@@ -76,6 +81,8 @@ Permalink/Caption: permalink
Permalink/Hint: Set browser address bar to a direct link to this tiddler
Permaview/Caption: permaview
Permaview/Hint: Set browser address bar to a direct link to all the tiddlers in this story
Print/Caption: print page
Print/Hint: Print the current page
Refresh/Caption: refresh
Refresh/Hint: Perform a full refresh of the wiki
Save/Caption: ok
@@ -90,6 +97,12 @@ ShowSideBar/Caption: show sidebar
ShowSideBar/Hint: Show sidebar
TagManager/Caption: tag manager
TagManager/Hint: Open tag manager
Timestamp/Caption: timestamps
Timestamp/Hint: Choose whether modifications update timestamps
Timestamp/On/Caption: timestamps are on
Timestamp/On/Hint: Update timestamps when tiddlers are modified
Timestamp/Off/Caption: timestamps are off
Timestamp/Off/Hint: Don't update timestamps when tiddlers are modified
Theme/Caption: theme
Theme/Hint: Choose the display theme
Bold/Caption: bold
@@ -129,6 +142,8 @@ LineWidth/Caption: line width
LineWidth/Hint: Set line width for painting
Link/Caption: link
Link/Hint: Create wikitext link
Linkify/Caption: wikilink
Linkify/Hint: Wrap selection in square brackets
ListBullet/Caption: bulleted list
ListBullet/Hint: Apply bulleted list formatting to lines containing selection
ListNumber/Caption: numbered list
@@ -149,6 +164,8 @@ PreviewType/Caption: preview type
PreviewType/Hint: Choose preview type
Quote/Caption: quote
Quote/Hint: Apply quoted text formatting to lines containing selection
RotateLeft/Caption: rotate left
RotateLeft/Hint: Rotate image left by 90 degrees
Size/Caption: image size
Size/Caption/Height: Height:
Size/Caption/Resize: Resize image
@@ -165,5 +182,8 @@ Subscript/Caption: subscript
Subscript/Hint: Apply subscript formatting to selection
Superscript/Caption: superscript
Superscript/Hint: Apply superscript formatting to selection
ToggleSidebar/Hint: Toggle the sidebar visibility
Transcludify/Caption: transclusion
Transcludify/Hint: Wrap selection in curly brackets
Underline/Caption: underline
Underline/Hint: Apply underline formatting to selection

View File

@@ -11,7 +11,9 @@ Basics/DefaultTiddlers/Prompt: Default tiddlers:
Basics/DefaultTiddlers/TopHint: Choose which tiddlers are displayed at startup:
Basics/Language/Prompt: Hello! Current language:
Basics/NewJournal/Title/Prompt: Title of new journal tiddlers
Basics/NewJournal/Text/Prompt: Text for new journal tiddlers
Basics/NewJournal/Tags/Prompt: Tags for new journal tiddlers
Basics/NewTiddler/Title/Prompt: Title of new tiddlers
Basics/OverriddenShadowTiddlers/Prompt: Number of overridden shadow tiddlers:
Basics/ShadowTiddlers/Prompt: Number of shadow tiddlers:
Basics/Subtitle/Prompt: Subtitle:
@@ -45,6 +47,8 @@ LoadedModules/Hint: These are the currently loaded tiddler modules linked to the
Palette/Caption: Palette
Palette/Editor/Clone/Caption: clone
Palette/Editor/Clone/Prompt: It is recommended that you clone this shadow palette before editing it
Palette/Editor/Delete/Hint: delete this entry from the current palette
Palette/Editor/Names/External/Show: Show color names that are not part of the current palette
Palette/Editor/Prompt/Modified: This shadow palette has been modified
Palette/Editor/Prompt: Editing
Palette/Editor/Reset/Caption: reset
@@ -52,7 +56,7 @@ Palette/HideEditor/Caption: hide editor
Palette/Prompt: Current palette:
Palette/ShowEditor/Caption: show editor
Parsing/Caption: Parsing
Parsing/Hint: Here you can globally disable individual wiki parser rules. Take care as disabling some parser rules can prevent ~TiddlyWiki functioning correctly (you can restore normal operation with [[safe mode|http://tiddlywiki.com/#SafeMode]] )
Parsing/Hint: Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text="TiddlyWiki"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation.
Parsing/Block/Caption: Block Parse Rules
Parsing/Inline/Caption: Inline Parse Rules
Parsing/Pragma/Caption: Pragma Parse Rules
@@ -71,19 +75,38 @@ Plugins/Installed/Hint: Currently installed plugins:
Plugins/Languages/Caption: Languages
Plugins/Languages/Hint: Language pack plugins
Plugins/NoInfoFound/Hint: No ''"<$text text=<<currentTab>>/>"'' found
Plugins/NoInformation/Hint: No information provided
Plugins/NotInstalled/Hint: This plugin is not currently installed
Plugins/OpenPluginLibrary: open plugin library
Plugins/ClosePluginLibrary: close plugin library
Plugins/Plugins/Caption: Plugins
Plugins/Plugins/Hint: Plugins
Plugins/Reinstall/Caption: reinstall
Plugins/Themes/Caption: Themes
Plugins/Themes/Hint: Theme plugins
Saving/Caption: Saving
Saving/Heading: Saving
Saving/DownloadSaver/AutoSave/Description: Permit automatic saving for the download saver
Saving/DownloadSaver/AutoSave/Hint: Enable Autosave for Download Saver
Saving/DownloadSaver/Caption: Download Saver
Saving/DownloadSaver/Hint: These settings apply to the HTML5-compatible download saver
Saving/General/Caption: General
Saving/General/Hint: These settings apply to all the loaded savers
Saving/Hint: Settings used for saving the entire TiddlyWiki as a single file via a saver module
Saving/GitService/Branch: Target branch for saving
Saving/GitService/CommitMessage: Saved by TiddlyWiki
Saving/GitService/Description: These settings are only used when saving to <<service-name>>
Saving/GitService/Filename: Filename of target file (e.g. `index.html`)
Saving/GitService/Path: Path to target file (e.g. `/wiki/`)
Saving/GitService/Repo: Target repository (e.g. `Jermolene/TiddlyWiki5`)
Saving/GitService/ServerURL: Server API URL
Saving/GitService/UserName: Username
Saving/GitService/GitHub/Caption: ~GitHub Saver
Saving/GitService/GitHub/Password: Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)
Saving/GitService/GitLab/Caption: ~GitLab Saver
Saving/GitService/GitLab/Password: Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)
Saving/TiddlySpot/Advanced/Heading: Advanced Settings
Saving/TiddlySpot/BackupDir: Backup Directory
Saving/TiddlySpot/Backups: Backups
Saving/TiddlySpot/Caption: ~TiddlySpot Saver
Saving/TiddlySpot/Description: These settings are only used when saving to http://tiddlyspot.com or a compatible remote server
Saving/TiddlySpot/Filename: Upload Filename
Saving/TiddlySpot/Heading: ~TiddlySpot
@@ -95,7 +118,7 @@ Saving/TiddlySpot/UserName: Wiki Name
Settings/AutoSave/Caption: Autosave
Settings/AutoSave/Disabled/Description: Do not save changes automatically
Settings/AutoSave/Enabled/Description: Save changes automatically
Settings/AutoSave/Hint: Automatically save changes during editing
Settings/AutoSave/Hint: Attempt to automatically save changes during editing when using a supporting saver
Settings/CamelCase/Caption: Camel Case Wiki Links
Settings/CamelCase/Hint: You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect
Settings/CamelCase/Description: Enable automatic ~CamelCase linking
@@ -103,6 +126,10 @@ Settings/Caption: Settings
Settings/EditorToolbar/Caption: Editor Toolbar
Settings/EditorToolbar/Hint: Enable or disable the editor toolbar:
Settings/EditorToolbar/Description: Show editor toolbar
Settings/InfoPanelMode/Caption: Tiddler Info Panel Mode
Settings/InfoPanelMode/Hint: Control when the tiddler info panel closes:
Settings/InfoPanelMode/Popup/Description: Tiddler info panel closes automatically
Settings/InfoPanelMode/Sticky/Description: Tiddler info panel stays open until explicitly closed
Settings/Hint: These settings let you customise the behaviour of TiddlyWiki.
Settings/NavigationAddressBar/Caption: Navigation Address Bar
Settings/NavigationAddressBar/Hint: Behaviour of the browser address bar when navigating to a tiddler:
@@ -113,6 +140,10 @@ Settings/NavigationHistory/Caption: Navigation History
Settings/NavigationHistory/Hint: Update browser history when navigating to a tiddler:
Settings/NavigationHistory/No/Description: Do not update history
Settings/NavigationHistory/Yes/Description: Update history
Settings/NavigationPermalinkviewMode/Caption: Permalink/permaview Mode
Settings/NavigationPermalinkviewMode/Hint: Choose how permalink/permaview is handled:
Settings/NavigationPermalinkviewMode/CopyToClipboard/Description: Copy permalink/permaview URL to clipboard
Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description: Update address bar with permalink/permaview URL
Settings/PerformanceInstrumentation/Caption: Performance Instrumentation
Settings/PerformanceInstrumentation/Hint: Displays performance statistics in the browser developer console. Requires reload to take effect
Settings/PerformanceInstrumentation/Description: Enable performance instrumentation
@@ -127,6 +158,8 @@ Settings/ToolbarButtons/Icons/Description: Include icon
Settings/ToolbarButtons/Text/Description: Include text
Settings/DefaultSidebarTab/Caption: Default Sidebar Tab
Settings/DefaultSidebarTab/Hint: Specify which sidebar tab is displayed by default
Settings/DefaultMoreSidebarTab/Caption: Default More Sidebar Tab
Settings/DefaultMoreSidebarTab/Hint: Specify which More sidebar tab is displayed by default
Settings/LinkToBehaviour/Caption: Tiddler Opening Behaviour
Settings/LinkToBehaviour/InsideRiver/Hint: Navigation from //within// the story river
Settings/LinkToBehaviour/OutsideRiver/Hint: Navigation from //outside// the story river
@@ -143,18 +176,22 @@ Settings/MissingLinks/Hint: Choose whether to link to tiddlers that do not exist
Settings/MissingLinks/Description: Enable links to missing tiddlers
StoryView/Caption: Story View
StoryView/Prompt: Current view:
Stylesheets/Caption: Stylesheets
Stylesheets/Expand/Caption: Expand All
Stylesheets/Hint: This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag "$:/tags/Stylesheet">>
Stylesheets/Restore/Caption: Restore
Theme/Caption: Theme
Theme/Prompt: Current theme:
TiddlerFields/Caption: Tiddler Fields
TiddlerFields/Hint: This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers).
Toolbars/Caption: Toolbars
Toolbars/EditToolbar/Caption: Edit Toolbar
Toolbars/EditToolbar/Hint: Choose which buttons are displayed for tiddlers in edit mode
Toolbars/EditToolbar/Hint: Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering
Toolbars/Hint: Select which toolbar buttons are displayed
Toolbars/PageControls/Caption: Page Toolbar
Toolbars/PageControls/Hint: Choose which buttons are displayed on the main page toolbar
Toolbars/PageControls/Hint: Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering
Toolbars/EditorToolbar/Caption: Editor Toolbar
Toolbars/EditorToolbar/Hint: Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type
Toolbars/EditorToolbar/Hint: Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering
Toolbars/ViewToolbar/Caption: View Toolbar
Toolbars/ViewToolbar/Hint: Choose which buttons are displayed for tiddlers in view mode
Toolbars/ViewToolbar/Hint: Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering
Tools/Download/Full/Caption: Download full wiki

View File

@@ -1,16 +1,23 @@
title: $:/language/Docs/ModuleTypes/
allfilteroperator: A sub-operator for the ''all'' filter operator.
animation: Animations that may be used with the RevealWidget.
authenticator: Defines how requests are authenticated by the built-in HTTP server.
bitmapeditoroperation: A bitmap editor toolbar operation.
command: Commands that can be executed under Node.js.
config: Data to be inserted into `$tw.config`.
filteroperator: Individual filter operator methods.
global: Global data to be inserted into `$tw`.
info: Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin.
isfilteroperator: Operands for the ''is'' filter operator.
library: Generic module type for general purpose JavaScript modules.
macro: JavaScript macro definitions.
parser: Parsers for different content types.
route: Defines how individual URL patterns are handled by the built-in HTTP server.
saver: Savers handle different methods for saving files from the browser.
startup: Startup functions.
storyview: Story views customise the animation and behaviour of list widgets.
texteditoroperation: A text editor toolbar operation.
tiddlerdeserializer: Converts different content types into tiddlers.
tiddlerfield: Defines the behaviour of an individual tiddler field.
tiddlermethod: Adds methods to the `$tw.Tiddler` prototype.

View File

@@ -45,6 +45,8 @@ page-background: Page background
pre-background: Preformatted code background
pre-border: Preformatted code border
primary: General primary
select-tag-background: `<select>` element background
select-tag-foreground: `<select>` element text
sidebar-button-foreground: Sidebar button foreground
sidebar-controls-foreground-hover: Sidebar controls foreground hover
sidebar-controls-foreground: Sidebar controls foreground

View File

@@ -1,10 +1,12 @@
title: $:/language/EditTemplate/
Body/External/Hint: This is an external tiddler stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself
Body/External/Hint: This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself
Body/Placeholder: Type the text for this tiddler
Body/Preview/Type/Output: output
Field/Remove/Caption: remove field
Field/Remove/Hint: Remove field
Field/Dropdown/Caption: field list
Field/Dropdown/Hint: Show field list
Fields/Add/Button: add
Fields/Add/Name/Placeholder: field name
Fields/Add/Prompt: Add a new field:
@@ -18,6 +20,9 @@ Tags/Add/Placeholder: tag name
Tags/Dropdown/Caption: tag list
Tags/Dropdown/Hint: Show tag list
Title/BadCharacterWarning: Warning: avoid using any of the characters <<bad-chars>> in tiddler titles
Title/Exists/Prompt: Target tiddler already exists
Title/Relink/Prompt: Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers
Title/References/Prompt: The following references to this tiddler will not be automatically updated:
Type/Dropdown/Caption: content type list
Type/Dropdown/Hint: Show content type list
Type/Delete/Caption: delete content type

View File

@@ -14,11 +14,12 @@ draft.of: For draft tiddlers, contains the title of the tiddler of which this is
draft.title: For draft tiddlers, contains the proposed new title of the tiddler
footer: The footer text for a wizard
hack-to-give-us-something-to-compare-against: A temporary storage field used in [[$:/core/templates/static.content]]
hide-body: The view template will hide bodies of tiddlers if set to: ''yes''
icon: The title of the tiddler containing the icon associated with a tiddler
library: If set to "yes" indicates that a tiddler should be saved as a JavaScript library
library: Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''
list: An ordered list of tiddler titles associated with a tiddler
list-before: If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty
list-after: If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles
list-after: If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty
modified: The date and time at which a tiddler was last modified
modifier: The tiddler title associated with the person who last modified a tiddler
name: The human readable name associated with a plugin tiddler
@@ -31,5 +32,6 @@ subtitle: The subtitle text for a wizard
tags: A list of tags associated with a tiddler
text: The body text of a tiddler
title: The unique name of a tiddler
toc-link: Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''
type: The content type of a tiddler
version: Version information for a plugin

View File

@@ -10,5 +10,7 @@ Orphans: Orphan tiddlers
SystemTiddlers: System tiddlers
ShadowTiddlers: Shadow tiddlers
OverriddenShadowTiddlers: Overridden shadow tiddlers
SessionTiddlers: Tiddlers modified since the wiki was loaded
SystemTags: System tags
StoryList: Tiddlers in the story river, excluding <$text text="$:/AdvancedSearch"/>
TypedTiddlers: Non wiki-text tiddlers

View File

@@ -3,7 +3,7 @@ title: GettingStarted
\define lingo-base() $:/language/ControlPanel/Basics/
Welcome to ~TiddlyWiki and the ~TiddlyWiki community
Before you start storing important information in ~TiddlyWiki it is important to make sure that you can reliably save changes. See http://tiddlywiki.com/#GettingStarted for details
Before you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details
!! Set up this ~TiddlyWiki

View File

@@ -0,0 +1,8 @@
title: $:/language/Help/deletetiddlers
description: Deletes a group of tiddlers
<<.from-version "5.1.20">> Deletes a group of tiddlers identified by a filter.
```
--deletetiddlers <filter>
```

View File

@@ -0,0 +1,38 @@
title: $:/language/Help/fetch
description: Fetch tiddlers from wiki by URL
Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.
```
--fetch file <url> <import-filter> <transform-filter>
--fetch files <url-filter> <import-filter> <transform-filter>
--fetch raw-file <url> <transform-filter>
--fetch raw-files <url-filter> <transform-filter>
```
The "file" and "files" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The "raw-file" and "raw-files" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.
With the "file" and "raw-file" variants only a single file is fetched and the first parameter is the URL of the file to read.
With the "files" and "raw-files" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged "remote-server" that have a field "url" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.
For the "file" and "files" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.
For all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.
Preceding the `--fetch` command with `--verbose` will output progress information during the import.
Note that TiddlyWiki will not fetch an older version of an already loaded plugin.
The following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:
```
tiddlywiki --verbose --fetch file "https://tiddlywiki.com/" "[!is[system]]" "" --rendertiddler "$:/core/templates/exporters/JsonFile" output.json text/plain "" exportFilter "[!is[system]]"
```
The following example retrieves the "favicon" file from tiddlywiki.com and saves it in a file called "output.ico". Note that the intermediate tiddler "Icon Tiddler" is quoted in the "--fetch" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the "--savetiddler" command because it is being used directly as a title.
```
tiddlywiki --verbose --fetch raw-file "https://tiddlywiki.com/favicon.ico" "[[Icon Tiddler]]" --savetiddler "Icon Tiddler" output.ico
```

View File

@@ -0,0 +1,24 @@
title: $:/language/Help/import
description: Import tiddlers from a file
Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.
```
--import <filepath> <deserializer> [<title>] [<encoding>]
```
The deserializers in the core include:
* application/javascript
* application/json
* application/x-tiddler
* application/x-tiddler-html-div
* application/x-tiddlers
* text/html
* text/plain
The title of the imported tiddler defaults to the filename.
The encoding defaults to "utf8", but can be "base64" for importing binary files.
Note that TiddlyWiki will not import an older version of an already loaded plugin.

View File

@@ -0,0 +1,34 @@
title: $:/language/Help/listen
description: Provides an HTTP server interface to TiddlyWiki
Serves a wiki over HTTP.
The listen command uses NamedCommandParameters:
```
--listen [<name>=<value>]...
```
All parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:
* ''host'' - optional hostname to serve from (defaults to "127.0.0.1" aka "localhost")
* ''path-prefix'' - optional prefix for paths
* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to "8080")
* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)
* ''anon-username'' - the username for signing edits for anonymous users
* ''username'' - optional username for basic authentication
* ''password'' - optional password for basic authentication
* ''authenticated-user-header'' - optional name of header to be used for trusted authentication
* ''readers'' - comma separated list of principals allowed to read from this wiki
* ''writers'' - comma separated list of principals allowed to write to this wiki
* ''csrf-disable'' - set to "yes" to disable CSRF checks (defaults to "no")
* ''root-tiddler'' - the tiddler to serve at the root (defaults to "$:/core/save/all")
* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to "text/plain")
* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to "text/html")
* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)
* ''tls-key'' - pathname of TLS key file (relative to wiki folder)
* ''debug-level'' - optional debug level; set to "debug" to view request details (defaults to "none")
* ''gzip'' - set to "yes" to enable gzip compression for some http endpoints (defaults to "no")
For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.

View File

@@ -1,12 +1,15 @@
title: $:/language/Help/load
description: Load tiddlers from a file
Load tiddlers from 2.x.x TiddlyWiki files (`.html`), `.tiddler`, `.tid`, `.json` or other files
Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.
```
--load <filepath>
--load <filepath> [noerror]
--load <dirpath> [noerror]
```
By default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional "noerror" parameter.
To load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:
```

View File

@@ -0,0 +1,34 @@
title: $:/language/Help/render
description: Renders individual tiddlers to files
Render individual tiddlers identified by a filter and save the results to the specified files.
Optionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the "currentTiddler" variable set to the title of the tiddler that is being rendered.
A name and value for an additional variable may optionally also be specified.
```
--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]
```
* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered
* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename
* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)
* ''template'': Optional template through which each tiddler is rendered
* ''name'': Name of optional variable
* ''value'': Value of optional variable
By default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.
Notes:
* The output directory is not cleared of any existing files
* Any missing directories in the path to the filename are automatically created.
* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render "[[Motovun Jack.jpg]]"`
* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`
* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated
Examples:
* `--render "[!is[system]]" "[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]"` -- renders all non-system tiddlers as files in the subdirectory "tiddlers" with URL-encoded titles and the extension HTML

View File

@@ -1,12 +1,24 @@
title: $:/language/Help/rendertiddler
description: Render an individual tiddler as a specified ContentType
Render an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename. Optionally a template can be specified, in which case the template tiddler is rendered with the "currentTiddler" variable set to the tiddler that is being rendered (the first parameter value).
(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)
Render an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.
Optionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the "currentTiddler" variable set to the tiddler that is being rendered (the first parameter value).
A name and value for an additional variable may optionally also be specified.
```
--rendertiddler <title> <filename> [<type>] [<template>]
--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]
```
By default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.
Any missing directories in the path to the filename are automatically created.
For example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.
```
--rendertiddler "$:/core/templates/exporters/JsonFile" output.json text/plain "" exportFilter "[tag[done]]"
```

View File

@@ -1,6 +1,8 @@
title: $:/language/Help/rendertiddlers
description: Render tiddlers matching a filter to a specified ContentType
(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)
Render a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).
```

View File

@@ -0,0 +1,25 @@
title: $:/language/Help/save
description: Saves individual raw tiddlers to files
Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.
```
--save <tiddler-filter> <filename-filter>
```
* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved
* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename
By default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.
Notes:
* The output directory is not cleared of any existing files
* Any missing directories in the path to the filename are automatically created.
* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save "[[Motovun Jack.jpg]]"`
* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`
* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated
Examples:
* `--save "[!is[system]is[image]]" "[encodeuricomponent[]addprefix[tiddlers/]]"` -- saves all non-system image tiddlers as files in the subdirectory "tiddlers" with URL-encoded titles

View File

@@ -1,6 +1,8 @@
title: $:/language/Help/savetiddler
description: Saves a raw tiddler to a file
(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)
Saves an individual tiddler in its raw text or binary format to the specified filename.
```

View File

@@ -1,6 +1,8 @@
title: $:/language/Help/savetiddlers
description: Saves a group of raw tiddlers to a directory
(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)
Saves a group of tiddlers in their raw text or binary format to the specified directory.
```

View File

@@ -0,0 +1,19 @@
title: $:/language/Help/savewikifolder
description: Saves a wiki to a new wiki folder
<<.from-version "5.1.20">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:
```
--savewikifolder <wikifolderpath> [<filter>]
```
* The target wiki folder must be empty or non-existent
* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`
* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file
* Custom plugins are unpacked into their own folder
A common usage is to convert a TiddlyWiki HTML file into a wiki folder:
```
tiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder
```

View File

@@ -1,26 +1,25 @@
title: $:/language/Help/server
description: Provides an HTTP server interface to TiddlyWiki
description: Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)
The server built in to TiddlyWiki5 is very simple. Although compatible with TiddlyWeb it doesn't support many of the features needed for robust Internet-facing usage.
At the root, it serves a rendering of a specified tiddler. Away from the root, it serves individual tiddlers encoded in JSON, and supports the basic HTTP operations for `GET`, `PUT` and `DELETE`.
Legacy command to serve a wiki over HTTP.
```
--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host> <pathprefix>
--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>
```
The parameters are:
* ''port'' - port number to serve from (defaults to "8080")
* ''roottiddler'' - the tiddler to serve at the root (defaults to "$:/core/save/all")
* ''rendertype'' - the content type to which the root tiddler should be rendered (defaults to "text/plain")
* ''servetype'' - the content type with which the root tiddler should be served (defaults to "text/html")
* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to "8080")
* ''root-tiddler'' - the tiddler to serve at the root (defaults to "$:/core/save/all")
* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to "text/plain")
* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to "text/html")
* ''username'' - the default username for signing edits
* ''password'' - optional password for basic authentication
* ''host'' - optional hostname to serve from (defaults to "127.0.0.1" aka "localhost")
* ''pathprefix'' - optional prefix for paths
* ''path-prefix'' - optional prefix for paths
* ''debug-level'' - optional debug level; set to "debug" to view request details (defaults to "none")
If the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation isn't suitable for general use.
If the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.
For example:
@@ -28,10 +27,17 @@ For example:
--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd
```
The username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password:
The username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.
```
--server 8080 $:/core/save/all text/plain text/html "" "" 192.168.0.245
```
To run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port.
Using an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.
To run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called "MY_PORT_NUMBER":
```
--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd
```

View File

@@ -7,9 +7,17 @@ Listing/Import/Caption: Import
Listing/Select/Caption: Select
Listing/Status/Caption: Status
Listing/Title/Caption: Title
Listing/Preview: Preview:
Listing/Preview/Text: Text
Listing/Preview/TextRaw: Text (Raw)
Listing/Preview/Fields: Fields
Listing/Preview/Diff: Diff
Listing/Preview/DiffFields: Diff (Fields)
Upgrader/Plugins/Suppressed/Incompatible: Blocked incompatible or obsolete plugin
Upgrader/Plugins/Suppressed/Version: Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)
Upgrader/Plugins/Upgraded: Upgraded plugin from <<incoming>> to <<upgraded>>
Upgrader/State/Suppressed: Blocked temporary state tiddler
Upgrader/System/Suppressed: Blocked system tiddler
Upgrader/System/Warning: Core module tiddler
Upgrader/System/Alert: You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable
Upgrader/ThemeTweaks/Created: Migrated theme tweak from <$text text=<<from>>/>

View File

@@ -1,8 +1,8 @@
title: $:/language/
AboveStory/ClassicPlugin/Warning: It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|http://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:
AboveStory/ClassicPlugin/Warning: It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:
BinaryWarning/Prompt: This tiddler contains binary data
ClassicWarning/Hint: This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See http://tiddlywiki.com/static/Upgrading.html for more details.
ClassicWarning/Hint: This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details.
ClassicWarning/Upgrade/Caption: upgrade
CloseAll/Button: close all
ColourPicker/Recent: Recent:
@@ -12,6 +12,7 @@ ConfirmOverwriteTiddler: Do you wish to overwrite the tiddler "<$text text=<<tit
ConfirmEditShadowTiddler: You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit "<$text text=<<title>>/>"?
Count: count
DefaultNewTiddlerTitle: New Tiddler
Diffs/CountMessage: <<diff-count>> differences
DropMessage: Drop here (or use the 'Escape' key to cancel)
Encryption/Cancel: Cancel
Encryption/ConfirmClearPassword: Do you wish to clear the password? This will remove the encryption applied when saving this wiki
@@ -22,6 +23,7 @@ Encryption/RepeatPassword: Repeat password
Encryption/PasswordNoMatch: Passwords do not match
Encryption/SetPassword: Set password
Error/Caption: Error
Error/EditConflict: File changed on server
Error/Filter: Filter error
Error/FilterSyntax: Syntax error in filter expression
Error/IsFilterOperator: Filter Error: Unknown operand for the 'is' filter operator
@@ -34,15 +36,33 @@ Error/XMLHttpRequest: XMLHttpRequest error code
InternalJavaScriptError/Title: Internal JavaScript Error
InternalJavaScriptError/Hint: Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser
InvalidFieldName: Illegal characters in field name "<$text text=<<fieldName>>/>". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)
LazyLoadingWarning: <p>Loading external text from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear you may be using a browser that doesn't support external text in this configuration. See http://tiddlywiki.com/#ExternalText</p>
LazyLoadingWarning: <p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>
LoginToTiddlySpace: Login to TiddlySpace
MissingTiddler/Hint: Missing tiddler "<$text text=<<currentTiddler>>/>" - click {{$:/core/images/edit-button}} to create
Manager/Controls/FilterByTag/None: (none)
Manager/Controls/FilterByTag/Prompt: Filter by tag:
Manager/Controls/Order/Prompt: Reverse order
Manager/Controls/Search/Placeholder: Search
Manager/Controls/Search/Prompt: Search:
Manager/Controls/Show/Option/Tags: tags
Manager/Controls/Show/Option/Tiddlers: tiddlers
Manager/Controls/Show/Prompt: Show:
Manager/Controls/Sort/Prompt: Sort by:
Manager/Item/Colour: Colour
Manager/Item/Fields: Fields
Manager/Item/Icon/None: (none)
Manager/Item/Icon: Icon
Manager/Item/RawText: Raw text
Manager/Item/Tags: Tags
Manager/Item/Tools: Tools
Manager/Item/WikifiedText: Wikified text
MissingTiddler/Hint: Missing tiddler "<$text text=<<currentTiddler>>/>" -- click {{||$:/core/ui/Buttons/edit}} to create
No: No
OfficialPluginLibrary: Official ~TiddlyWiki Plugin Library
OfficialPluginLibrary/Hint: The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team.
PluginReloadWarning: Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to plugins to take effect
RecentChanges/DateFormat: DDth MMM YYYY
SystemTiddler/Tooltip: This is a system tiddler
SystemTiddlers/Include/Prompt: Include system tiddlers
TagManager/Colour/Heading: Colour
TagManager/Count/Heading: Count
TagManager/Icon/Heading: Icon

View File

@@ -1,8 +1,7 @@
title: $:/language/Modals/Download
type: text/vnd.tiddlywiki
subtitle: Download changes
footer: <$button message="tm-close-tiddler">Close</$button>
help: http://tiddlywiki.com/static/DownloadingChanges.html
help: https://tiddlywiki.com/static/DownloadingChanges.html
Your browser only supports manual saving.

View File

@@ -1,8 +1,7 @@
title: $:/language/Modals/SaveInstructions
type: text/vnd.tiddlywiki
subtitle: Save your work
footer: <$button message="tm-close-tiddler">Close</$button>
help: http://tiddlywiki.com/static/SavingChanges.html
help: https://tiddlywiki.com/static/SavingChanges.html
Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.

View File

@@ -1,4 +1,5 @@
title: $:/config/NewJournal/
Title: DDth MMM YYYY
Text:
Tags: Journal

View File

@@ -2,3 +2,5 @@ title: $:/language/Notifications/
Save/Done: Saved wiki
Save/Starting: Starting to save wiki
CopiedToClipboard/Succeeded: Copied to clipboard!
CopiedToClipboard/Failed: Failed to copy to clipboard!

View File

@@ -2,12 +2,13 @@ title: $:/language/Search/
DefaultResults/Caption: List
Filter/Caption: Filter
Filter/Hint: Search via a [[filter expression|http://tiddlywiki.com/static/Filters.html]]
Filter/Hint: Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]
Filter/Matches: //<small><<resultCount>> matches</small>//
Matches: //<small><<resultCount>> matches</small>//
Matches/All: All matches:
Matches/Title: Title matches:
Search: Search
Search/TooShort: Search text too short
Shadows/Caption: Shadows
Shadows/Hint: Search for shadow tiddlers
Shadows/Matches: //<small><<resultCount>> matches</small>//

View File

@@ -3,6 +3,7 @@ title: $:/language/SideBar/
All/Caption: All
Contents/Caption: Contents
Drafts/Caption: Drafts
Explorer/Caption: Explorer
Missing/Caption: Missing
More/Caption: More
Open/Caption: Open

View File

@@ -7,11 +7,12 @@ Options/SidebarLayout: Sidebar layout
Options/SidebarLayout/Fixed-Fluid: Fixed story, fluid sidebar
Options/SidebarLayout/Fluid-Fixed: Fluid story, fixed sidebar
Options/StickyTitles: Sticky titles
Options/StickyTitles/Hint: Causes tiddler titles to "stick" to the top of the browser window. Caution: Does not work at all with Chrome, and causes some layout issues in Firefox
Options/StickyTitles/Hint: Causes tiddler titles to "stick" to the top of the browser window
Options/CodeWrapping: Wrap long lines in code blocks
Settings: Settings
Settings/FontFamily: Font family
Settings/CodeFontFamily: Code font family
Settings/EditorFontFamily: Editor font family
Settings/BackgroundImage: Page background image
Settings/BackgroundImageAttachment: Page background image attachment
Settings/BackgroundImageAttachment/Scroll: Scroll with tiddlers

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/application/javascript
description: JavaScript code
name: application/javascript
group: Developer
group-sort: 2

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/application/json
description: JSON data
name: application/json
group: Developer
group-sort: 2

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/application/x-tiddler-dictionary
description: Data dictionary
name: application/x-tiddler-dictionary
group: Developer
group-sort: 2

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/image/gif
description: GIF image
name: image/gif
group: Image
group-sort: 1

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/image/jpeg
description: JPEG image
name: image/jpeg
group: Image
group-sort: 1

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/image/png
description: PNG image
name: image/png
group: Image
group-sort: 1

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/image/svg+xml
description: Structured Vector Graphics image
name: image/svg+xml
group: Image
group-sort: 1

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/image/x-icon
description: ICO format icon file
name: image/x-icon
group: Image
group-sort: 1

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/text/css
description: Static stylesheet
name: text/css
group: Developer
group-sort: 2

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/text/html
description: HTML markup
name: text/html
group: Text
group-sort: 0

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/text/plain
description: Plain text
name: text/plain
group: Text
group-sort: 0

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/text/vnd.tiddlywiki
description: TiddlyWiki 5
name: text/vnd.tiddlywiki
group: Text
group-sort: 0

View File

@@ -2,3 +2,4 @@ title: $:/language/Docs/Types/text/x-tiddlywiki
description: TiddlyWiki Classic
name: text/x-tiddlywiki
group: Text
group-sort: 0

View File

@@ -29,6 +29,24 @@ var Commander = function(commandTokens,callback,wiki,streams) {
this.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);
};
/*
Log a string if verbose flag is set
*/
Commander.prototype.log = function(str) {
if(this.verbose) {
this.streams.output.write(str + "\n");
}
};
/*
Write a string if verbose flag is set
*/
Commander.prototype.write = function(str) {
if(this.verbose) {
this.streams.output.write(str);
}
};
/*
Add a string of tokens to the command queue
*/
@@ -76,6 +94,13 @@ Commander.prototype.executeNextCommand = function() {
if(this.verbose) {
this.streams.output.write("Executing command: " + commandName + " " + params.join(" ") + "\n");
}
// Parse named parameters if required
if(command.info.namedParameterMode) {
params = this.extractNamedParameters(params,command.info.mandatoryParameters);
if(typeof params === "string") {
return this.callback(params);
}
}
if(command.info.synchronous) {
// Synchronous command
c = new command.Command(params,this);
@@ -104,6 +129,35 @@ Commander.prototype.executeNextCommand = function() {
}
};
/*
Given an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error
*/
Commander.prototype.extractNamedParameters = function(params,mandatoryParameters) {
mandatoryParameters = mandatoryParameters || [];
var errors = [],
paramsByName = Object.create(null);
// Extract the parameters
$tw.utils.each(params,function(param) {
var index = param.indexOf("=");
if(index < 1) {
errors.push("malformed named parameter: '" + param + "'");
}
paramsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));
});
// Check the mandatory parameters are present
$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {
if(!$tw.utils.hop(paramsByName,mandatoryParameter)) {
errors.push("missing mandatory parameter: '" + mandatoryParameter + "'");
}
});
// Return any errors
if(errors.length > 0) {
return errors.join(" and\n");
} else {
return paramsByName;
}
};
Commander.initCommands = function(moduleType) {
moduleType = moduleType || "command";
$tw.commands = {};

View File

@@ -0,0 +1,42 @@
/*\
title: $:/core/modules/commands/deletetiddlers.js
type: application/javascript
module-type: command
Command to delete tiddlers
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.info = {
name: "deletetiddlers",
synchronous: true
};
var Command = function(params,commander,callback) {
this.params = params;
this.commander = commander;
this.callback = callback;
};
Command.prototype.execute = function() {
if(this.params.length < 1) {
return "Missing filter";
}
var self = this,
wiki = this.commander.wiki,
filter = this.params[0],
tiddlers = wiki.filterTiddlers(filter);
$tw.utils.each(tiddlers,function(title) {
wiki.deleteTiddler(title);
});
return null;
};
exports.Command = Command;
})();

View File

@@ -0,0 +1,175 @@
/*\
title: $:/core/modules/commands/fetch.js
type: application/javascript
module-type: command
Commands to fetch external tiddlers
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.info = {
name: "fetch",
synchronous: false
};
var Command = function(params,commander,callback) {
this.params = params;
this.commander = commander;
this.callback = callback;
};
Command.prototype.execute = function() {
if(this.params.length < 2) {
return "Missing subcommand and url";
}
switch(this.params[0]) {
case "raw-file":
return this.fetchFiles({
raw: true,
url: this.params[1],
transformFilter: this.params[2] || "",
callback: this.callback
});
break;
case "file":
return this.fetchFiles({
url: this.params[1],
importFilter: this.params[2],
transformFilter: this.params[3] || "",
callback: this.callback
});
break;
case "raw-files":
return this.fetchFiles({
raw: true,
urlFilter: this.params[1],
transformFilter: this.params[2] || "",
callback: this.callback
});
break;
case "files":
return this.fetchFiles({
urlFilter: this.params[1],
importFilter: this.params[2],
transformFilter: this.params[3] || "",
callback: this.callback
});
break;
}
return null;
};
Command.prototype.fetchFiles = function(options) {
var self = this;
// Get the list of URLs
var urls;
if(options.url) {
urls = [options.url]
} else if(options.urlFilter) {
urls = $tw.wiki.filterTiddlers(options.urlFilter);
} else {
return "Missing URL";
}
// Process each URL in turn
var next = 0;
var getNextFile = function(err) {
if(err) {
return options.callback(err);
}
if(next < urls.length) {
self.fetchFile(urls[next++],options,getNextFile);
} else {
options.callback(null);
}
};
getNextFile(null);
// Success
return null;
};
Command.prototype.fetchFile = function(url,options,callback,redirectCount) {
if(redirectCount > 10) {
return callback("Error too many redirects retrieving " + url);
}
var self = this,
lib = url.substr(0,8) === "https://" ? require("https") : require("http");
lib.get(url).on("response",function(response) {
var type = (response.headers["content-type"] || "").split(";")[0],
data = [];
self.commander.write("Reading " + url + ": ");
response.on("data",function(chunk) {
data.push(chunk);
self.commander.write(".");
});
response.on("end",function() {
self.commander.write("\n");
if(response.statusCode === 200) {
self.processBody(Buffer.concat(data),type,options,url);
callback(null);
} else {
if(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {
return self.fetchFile(response.headers.location,options,callback,redirectCount + 1);
} else {
return callback("Error " + response.statusCode + " retrieving " + url)
}
}
});
response.on("error",function(e) {
console.log("Error on GET request: " + e);
callback(e);
});
});
return null;
};
Command.prototype.processBody = function(body,type,options,url) {
var self = this;
// Collect the tiddlers in a wiki
var incomingWiki = new $tw.Wiki();
if(options.raw) {
var typeInfo = type ? $tw.config.contentTypeInfo[type] : null,
encoding = typeInfo ? typeInfo.encoding : "utf8";
incomingWiki.addTiddler(new $tw.Tiddler({
title: url,
type: type,
text: body.toString(encoding)
}));
} else {
// Deserialise the file to extract the tiddlers
var tiddlers = this.commander.wiki.deserializeTiddlers(type || "text/html",body.toString("utf8"),{});
$tw.utils.each(tiddlers,function(tiddler) {
incomingWiki.addTiddler(new $tw.Tiddler(tiddler));
});
}
// Filter the tiddlers to select the ones we want
var filteredTitles = incomingWiki.filterTiddlers(options.importFilter || "[all[tiddlers]]");
// Import the selected tiddlers
var count = 0;
incomingWiki.each(function(tiddler,title) {
if(filteredTitles.indexOf(title) !== -1) {
var newTiddler;
if(options.transformFilter) {
var transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [""])[0];
if(transformedTitle) {
self.commander.log("Importing " + title + " as " + transformedTitle)
newTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});
}
} else {
self.commander.log("Importing " + title)
newTiddler = tiddler;
}
self.commander.wiki.importTiddler(newTiddler);
count++;
}
});
self.commander.log("Imported " + count + " tiddlers")
};
exports.Command = Command;
})();

View File

@@ -0,0 +1,48 @@
/*\
title: $:/core/modules/commands/import.js
type: application/javascript
module-type: command
Command to import tiddlers from a file
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.info = {
name: "import",
synchronous: true
};
var Command = function(params,commander,callback) {
this.params = params;
this.commander = commander;
this.callback = callback;
};
Command.prototype.execute = function() {
var self = this,
fs = require("fs"),
path = require("path");
if(this.params.length < 2) {
return "Missing parameters";
}
var filename = self.params[0],
deserializer = self.params[1],
title = self.params[2] || filename,
encoding = self.params[3] || "utf8",
text = fs.readFileSync(filename,encoding),
tiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});
$tw.utils.each(tiddlers,function(tiddler) {
self.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));
});
this.commander.log(tiddlers.length + " tiddler(s) imported");
return null;
};
exports.Command = Command;
})();

View File

@@ -0,0 +1,48 @@
/*\
title: $:/core/modules/commands/listen.js
type: application/javascript
module-type: command
Listen for HTTP requests and serve tiddlers
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
var Server = require("$:/core/modules/server/server.js").Server;
exports.info = {
name: "listen",
synchronous: true,
namedParameterMode: true,
mandatoryParameters: [],
};
var Command = function(params,commander,callback) {
var self = this;
this.params = params;
this.commander = commander;
this.callback = callback;
};
Command.prototype.execute = function() {
var self = this;
if(!$tw.boot.wikiTiddlersPath) {
$tw.utils.warning("Warning: Wiki folder '" + $tw.boot.wikiPath + "' does not exist or is missing a tiddlywiki.info file");
}
// Set up server
this.server = new Server({
wiki: this.commander.wiki,
variables: self.params
});
var nodeServer = this.server.listen();
$tw.hooks.invokeHook("th-server-command-post-start",this.server,nodeServer,"tiddlywiki");
return null;
};
exports.Command = Command;
})();

View File

@@ -3,7 +3,7 @@ title: $:/core/modules/commands/load.js
type: application/javascript
module-type: command
Command to load tiddlers from a file
Command to load tiddlers from a file or directory
\*/
(function(){
@@ -30,24 +30,19 @@ Command.prototype.execute = function() {
if(this.params.length < 1) {
return "Missing filename";
}
var ext = path.extname(self.params[0]);
fs.readFile(this.params[0],$tw.utils.getTypeEncoding(ext),function(err,data) {
if (err) {
self.callback(err);
} else {
var fields = {title: self.params[0]},
type = path.extname(self.params[0]);
var tiddlers = self.commander.wiki.deserializeTiddlers(type,data,fields);
if(!tiddlers) {
self.callback("No tiddlers found in file \"" + self.params[0] + "\"");
} else {
for(var t=0; t<tiddlers.length; t++) {
self.commander.wiki.importTiddler(new $tw.Tiddler(tiddlers[t]));
}
self.callback(null);
}
}
var tiddlers = $tw.loadTiddlersFromPath(self.params[0]),
count = 0;
$tw.utils.each(tiddlers,function(tiddlerInfo) {
$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {
self.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));
count++;
});
});
if(!count && self.params[1] !== "noerror") {
self.callback("No tiddlers found in file \"" + self.params[0] + "\"");
} else {
self.callback(null);
}
return null;
};

View File

@@ -0,0 +1,65 @@
/*\
title: $:/core/modules/commands/render.js
type: application/javascript
module-type: command
Render individual tiddlers and save the results to the specified files
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
var widget = require("$:/core/modules/widgets/widget.js");
exports.info = {
name: "render",
synchronous: true
};
var Command = function(params,commander,callback) {
this.params = params;
this.commander = commander;
this.callback = callback;
};
Command.prototype.execute = function() {
if(this.params.length < 1) {
return "Missing tiddler filter";
}
var self = this,
fs = require("fs"),
path = require("path"),
wiki = this.commander.wiki,
tiddlerFilter = this.params[0],
filenameFilter = this.params[1] || "[is[tiddler]addsuffix[.html]]",
type = this.params[2] || "text/html",
template = this.params[3],
varName = this.params[4],
varValue = this.params[5],
tiddlers = wiki.filterTiddlers(tiddlerFilter);
$tw.utils.each(tiddlers,function(title) {
var parser = wiki.parseTiddler(template || title),
variables = {currentTiddler: title};
if(varName) {
variables[varName] = varValue || "";
}
var widgetNode = wiki.makeWidget(parser,{variables: variables}),
container = $tw.fakeDocument.createElement("div");
widgetNode.render(container,null);
var text = type === "text/html" ? container.innerHTML : container.textContent,
filepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);
if(self.commander.verbose) {
console.log("Rendering \"" + title + "\" to \"" + filepath + "\"");
}
$tw.utils.createFileDirectories(filepath);
fs.writeFileSync(filepath,text,"utf8");
});
return null;
};
exports.Command = Command;
})();

View File

@@ -34,12 +34,17 @@ Command.prototype.execute = function() {
filename = path.resolve(this.commander.outputPath,this.params[1]),
type = this.params[2] || "text/html",
template = this.params[3],
name = this.params[4],
value = this.params[5],
variables = {};
$tw.utils.createFileDirectories(filename);
if(template) {
variables.currentTiddler = title;
title = template;
}
if(name && value) {
variables[name] = value;
}
fs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),"utf8",function(err) {
self.callback(err);
});

View File

@@ -0,0 +1,53 @@
/*\
title: $:/core/modules/commands/save.js
type: application/javascript
module-type: command
Saves individual tiddlers in their raw text or binary format to the specified files
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.info = {
name: "save",
synchronous: true
};
var Command = function(params,commander,callback) {
this.params = params;
this.commander = commander;
this.callback = callback;
};
Command.prototype.execute = function() {
if(this.params.length < 1) {
return "Missing filename filter";
}
var self = this,
fs = require("fs"),
path = require("path"),
wiki = this.commander.wiki,
tiddlerFilter = this.params[0],
filenameFilter = this.params[1] || "[is[tiddler]]",
tiddlers = wiki.filterTiddlers(tiddlerFilter);
$tw.utils.each(tiddlers,function(title) {
var tiddler = self.commander.wiki.getTiddler(title),
type = tiddler.fields.type || "text/vnd.tiddlywiki",
contentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: "utf8"},
filepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);
if(self.commander.verbose) {
console.log("Saving \"" + title + "\" to \"" + filepath + "\"");
}
$tw.utils.createFileDirectories(filepath);
fs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);
});
return null;
};
exports.Command = Command;
})();

View File

@@ -0,0 +1,184 @@
/*\
title: $:/core/modules/commands/savewikifolder.js
type: application/javascript
module-type: command
Command to save the current wiki as a wiki folder
--savewikifolder <wikifolderpath> [<filter>]
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.info = {
name: "savewikifolder",
synchronous: true
};
var fs,path;
if($tw.node) {
fs = require("fs");
path = require("path");
}
var Command = function(params,commander,callback) {
this.params = params;
this.commander = commander;
this.callback = callback;
};
Command.prototype.execute = function() {
if(this.params.length < 1) {
return "Missing wiki folder path";
}
var wikifoldermaker = new WikiFolderMaker(this.params[0],this.params[1],this.commander);
return wikifoldermaker.save();
};
function WikiFolderMaker(wikiFolderPath,wikiFilter,commander) {
this.wikiFolderPath = wikiFolderPath;
this.wikiFilter = wikiFilter || "[all[tiddlers]]";
this.commander = commander;
this.wiki = commander.wiki;
this.savedPaths = []; // So that we can detect filename clashes
}
WikiFolderMaker.prototype.log = function(str) {
if(this.commander.verbose) {
console.log(str);
}
};
WikiFolderMaker.prototype.tiddlersToIgnore = [
"$:/boot/boot.css",
"$:/boot/boot.js",
"$:/boot/bootprefix.js",
"$:/core",
"$:/library/sjcl.js",
"$:/temp/info-plugin"
];
/*
Returns null if successful, or an error string if there was an error
*/
WikiFolderMaker.prototype.save = function() {
var self = this;
// Check that the output directory doesn't exist
if(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {
return "The unpackwiki command requires that the output wiki folder be empty";
}
// Get the tiddlers from the source wiki
var tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);
// Initialise a new tiddlwiki.info file
var newWikiInfo = {};
// Process each incoming tiddler in turn
$tw.utils.each(tiddlerTitles,function(title) {
var tiddler = self.wiki.getTiddler(title);
if(tiddler) {
if(self.tiddlersToIgnore.indexOf(title) !== -1) {
// Ignore the core plugin and the ephemeral info plugin
self.log("Ignoring tiddler: " + title);
} else {
var type = tiddler.fields.type,
pluginType = tiddler.fields["plugin-type"];
if(type === "application/json" && pluginType) {
// Plugin tiddler
var libraryDetails = self.findPluginInLibrary(title);
if(libraryDetails) {
// A plugin from the core library
self.log("Adding built-in plugin: " + libraryDetails.name);
newWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type] || [];
$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);
} else {
// A custom plugin
self.log("Processing custom plugin: " + title);
self.saveCustomPlugin(tiddler);
}
} else {
// Ordinary tiddler
self.saveTiddler("tiddlers",tiddler);
}
}
}
});
// Save the tiddlywiki.info file
this.saveJSONFile("tiddlywiki.info",newWikiInfo);
self.log("Writing tiddlywiki.info: " + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));
return null;
};
/*
Test whether the specified tiddler is a plugin in the plugin library
*/
WikiFolderMaker.prototype.findPluginInLibrary = function(title) {
var parts = title.split("/"),
pluginPath, type, name;
if(parts[0] === "$:") {
if(parts[1] === "languages" && parts.length === 3) {
pluginPath = "languages" + path.sep + parts[2];
type = parts[1];
name = parts[2];
} else if(parts[1] === "plugins" || parts[1] === "themes" && parts.length === 4) {
pluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];
type = parts[1];
name = parts[2] + "/" + parts[3];
}
}
if(pluginPath && type && name) {
pluginPath = path.resolve($tw.boot.bootPath,"..",pluginPath);
if(fs.existsSync(pluginPath)) {
return {
pluginPath: pluginPath,
type: type,
name: name
};
}
}
return false;
};
WikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {
var self = this,
pluginTitle = pluginTiddler.fields.title,
titleParts = pluginTitle.split("/"),
directory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{
directory: path.resolve(this.wikiFolderPath,pluginTiddler.fields["plugin-type"] + "s")
}),
pluginInfo = pluginTiddler.getFieldStrings({exclude: ["text","type"]});
this.saveJSONFile(directory + path.sep + "plugin.info",pluginInfo);
self.log("Writing " + directory + path.sep + "plugin.info: " + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));
var pluginTiddlers = JSON.parse(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin
$tw.utils.each(pluginTiddlers,function(tiddler) {
self.saveTiddler(directory,new $tw.Tiddler(tiddler));
});
};
WikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {
var fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{
directory: path.resolve(this.wikiFolderPath,directory),
wiki: this.wiki
});
$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);
};
WikiFolderMaker.prototype.saveJSONFile = function(filename,json) {
this.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));
};
WikiFolderMaker.prototype.saveTextFile = function(filename,data) {
this.saveFile(filename,"utf8",data);
};
WikiFolderMaker.prototype.saveFile = function(filename,encoding,data) {
var filepath = path.resolve(this.wikiFolderPath,filename);
$tw.utils.createFileDirectories(filepath);
fs.writeFileSync(filepath,data,encoding);
};
exports.Command = Command;
})();

View File

@@ -3,7 +3,7 @@ title: $:/core/modules/commands/server.js
type: application/javascript
module-type: command
Serve tiddlers over http
Deprecated legacy command for serving tiddlers
\*/
(function(){
@@ -12,298 +12,41 @@ Serve tiddlers over http
/*global $tw: false */
"use strict";
if($tw.node) {
var util = require("util"),
fs = require("fs"),
url = require("url"),
path = require("path"),
http = require("http");
}
var Server = require("$:/core/modules/server/server.js").Server;
exports.info = {
name: "server",
synchronous: true
};
/*
A simple HTTP server with regexp-based routes
*/
function SimpleServer(options) {
this.routes = options.routes || [];
this.wiki = options.wiki;
this.variables = options.variables || {};
}
SimpleServer.prototype.set = function(obj) {
var self = this;
$tw.utils.each(obj,function(value,name) {
self.variables[name] = value;
});
};
SimpleServer.prototype.get = function(name) {
return this.variables[name];
};
SimpleServer.prototype.addRoute = function(route) {
this.routes.push(route);
};
SimpleServer.prototype.findMatchingRoute = function(request,state) {
var pathprefix = this.get("pathprefix") || "";
for(var t=0; t<this.routes.length; t++) {
var potentialRoute = this.routes[t],
pathRegExp = potentialRoute.path,
pathname = state.urlInfo.pathname,
match;
if(pathprefix) {
if(pathname.substr(0,pathprefix.length) === pathprefix) {
pathname = pathname.substr(pathprefix.length);
match = potentialRoute.path.exec(pathname);
} else {
match = false;
}
} else {
match = potentialRoute.path.exec(pathname);
}
if(match && request.method === potentialRoute.method) {
state.params = [];
for(var p=1; p<match.length; p++) {
state.params.push(match[p]);
}
return potentialRoute;
}
}
return null;
};
SimpleServer.prototype.checkCredentials = function(request,incomingUsername,incomingPassword) {
var header = request.headers.authorization || "",
token = header.split(/\s+/).pop() || "",
auth = $tw.utils.base64Decode(token),
parts = auth.split(/:/),
username = parts[0],
password = parts[1];
if(incomingUsername === username && incomingPassword === password) {
return "ALLOWED";
} else {
return "DENIED";
}
};
SimpleServer.prototype.listen = function(port,host) {
var self = this;
http.createServer(function(request,response) {
// Compose the state object
var state = {};
state.wiki = self.wiki;
state.server = self;
state.urlInfo = url.parse(request.url);
// Find the route that matches this path
var route = self.findMatchingRoute(request,state);
// Check for the username and password if we've got one
var username = self.get("username"),
password = self.get("password");
if(username && password) {
// Check they match
if(self.checkCredentials(request,username,password) !== "ALLOWED") {
var servername = state.wiki.getTiddlerText("$:/SiteTitle") || "TiddlyWiki5";
response.writeHead(401,"Authentication required",{
"WWW-Authenticate": 'Basic realm="Please provide your username and password to login to ' + servername + '"'
});
response.end();
return;
}
}
// Return a 404 if we didn't find a route
if(!route) {
response.writeHead(404);
response.end();
return;
}
// Set the encoding for the incoming request
// TODO: Presumably this would need tweaking if we supported PUTting binary tiddlers
request.setEncoding("utf8");
// Dispatch the appropriate method
switch(request.method) {
case "GET": // Intentional fall-through
case "DELETE":
route.handler(request,response,state);
break;
case "PUT":
var data = "";
request.on("data",function(chunk) {
data += chunk.toString();
});
request.on("end",function() {
state.data = data;
route.handler(request,response,state);
});
break;
}
}).listen(port,host);
};
var Command = function(params,commander,callback) {
var self = this;
this.params = params;
this.commander = commander;
this.callback = callback;
// Set up server
this.server = new SimpleServer({
wiki: this.commander.wiki
});
// Add route handlers
this.server.addRoute({
method: "PUT",
path: /^\/recipes\/default\/tiddlers\/(.+)$/,
handler: function(request,response,state) {
var title = decodeURIComponent(state.params[0]),
fields = JSON.parse(state.data);
// Pull up any subfields in the `fields` object
if(fields.fields) {
$tw.utils.each(fields.fields,function(field,name) {
fields[name] = field;
});
delete fields.fields;
}
// Remove any revision field
if(fields.revision) {
delete fields.revision;
}
state.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));
var changeCount = state.wiki.getChangeCount(title).toString();
response.writeHead(204, "OK",{
Etag: "\"default/" + encodeURIComponent(title) + "/" + changeCount + ":\"",
"Content-Type": "text/plain"
});
response.end();
}
});
this.server.addRoute({
method: "DELETE",
path: /^\/bags\/default\/tiddlers\/(.+)$/,
handler: function(request,response,state) {
var title = decodeURIComponent(state.params[0]);
state.wiki.deleteTiddler(title);
response.writeHead(204, "OK", {
"Content-Type": "text/plain"
});
response.end();
}
});
this.server.addRoute({
method: "GET",
path: /^\/$/,
handler: function(request,response,state) {
response.writeHead(200, {"Content-Type": state.server.get("serveType")});
var text = state.wiki.renderTiddler(state.server.get("renderType"),state.server.get("rootTiddler"));
response.end(text,"utf8");
}
});
this.server.addRoute({
method: "GET",
path: /^\/status$/,
handler: function(request,response,state) {
response.writeHead(200, {"Content-Type": "application/json"});
var text = JSON.stringify({
username: state.server.get("username"),
space: {
recipe: "default"
},
tiddlywiki_version: $tw.version
});
response.end(text,"utf8");
}
});
this.server.addRoute({
method: "GET",
path: /^\/favicon.ico$/,
handler: function(request,response,state) {
response.writeHead(200, {"Content-Type": "image/x-icon"});
var buffer = state.wiki.getTiddlerText("$:/favicon.ico","");
response.end(buffer,"base64");
}
});
this.server.addRoute({
method: "GET",
path: /^\/recipes\/default\/tiddlers.json$/,
handler: function(request,response,state) {
response.writeHead(200, {"Content-Type": "application/json"});
var tiddlers = [];
state.wiki.forEachTiddler({sortField: "title"},function(title,tiddler) {
var tiddlerFields = {};
$tw.utils.each(tiddler.fields,function(field,name) {
if(name !== "text") {
tiddlerFields[name] = tiddler.getFieldString(name);
}
});
tiddlerFields.revision = state.wiki.getChangeCount(title);
tiddlerFields.type = tiddlerFields.type || "text/vnd.tiddlywiki";
tiddlers.push(tiddlerFields);
});
var text = JSON.stringify(tiddlers);
response.end(text,"utf8");
}
});
this.server.addRoute({
method: "GET",
path: /^\/recipes\/default\/tiddlers\/(.+)$/,
handler: function(request,response,state) {
var title = decodeURIComponent(state.params[0]),
tiddler = state.wiki.getTiddler(title),
tiddlerFields = {},
knownFields = [
"bag", "created", "creator", "modified", "modifier", "permissions", "recipe", "revision", "tags", "text", "title", "type", "uri"
];
if(tiddler) {
$tw.utils.each(tiddler.fields,function(field,name) {
var value = tiddler.getFieldString(name);
if(knownFields.indexOf(name) !== -1) {
tiddlerFields[name] = value;
} else {
tiddlerFields.fields = tiddlerFields.fields || {};
tiddlerFields.fields[name] = value;
}
});
tiddlerFields.revision = state.wiki.getChangeCount(title);
tiddlerFields.type = tiddlerFields.type || "text/vnd.tiddlywiki";
response.writeHead(200, {"Content-Type": "application/json"});
response.end(JSON.stringify(tiddlerFields),"utf8");
} else {
response.writeHead(404);
response.end();
}
}
});
};
Command.prototype.execute = function() {
if(!$tw.boot.wikiTiddlersPath) {
$tw.utils.warning("Warning: Wiki folder '" + $tw.boot.wikiPath + "' does not exist or is missing a tiddlywiki.info file");
}
var port = this.params[0] || "8080",
rootTiddler = this.params[1] || "$:/core/save/all",
renderType = this.params[2] || "text/plain",
serveType = this.params[3] || "text/html",
username = this.params[4],
password = this.params[5],
host = this.params[6] || "127.0.0.1",
pathprefix = this.params[7];
this.server.set({
rootTiddler: rootTiddler,
renderType: renderType,
serveType: serveType,
username: username,
password: password,
pathprefix: pathprefix
// Set up server
this.server = new Server({
wiki: this.commander.wiki,
variables: {
port: this.params[0],
host: this.params[6],
"root-tiddler": this.params[1],
"root-render-type": this.params[2],
"root-serve-type": this.params[3],
username: this.params[4],
password: this.params[5],
"path-prefix": this.params[7],
"debug-level": this.params[8]
}
});
this.server.listen(port,host);
console.log("Serving on " + host + ":" + port);
console.log("(press ctrl-C to exit)");
// Warn if required plugins are missing
if(!$tw.wiki.getTiddler("$:/plugins/tiddlywiki/tiddlyweb") || !$tw.wiki.getTiddler("$:/plugins/tiddlywiki/filesystem")) {
$tw.utils.warning("Warning: Plugins required for client-server operation (\"tiddlywiki/filesystem\" and \"tiddlywiki/tiddlyweb\") are missing from tiddlywiki.info file");
}
var nodeServer = this.server.listen();
$tw.hooks.invokeHook("th-server-command-post-start",this.server,nodeServer,"tiddlywiki");
return null;
};

View File

@@ -72,19 +72,28 @@ exports["application/x-tiddler-html-div"] = function(text,fields) {
};
exports["application/json"] = function(text,fields) {
var incoming = JSON.parse(text),
var incoming,
results = [];
if($tw.utils.isArray(incoming)) {
for(var t=0; t<incoming.length; t++) {
var incomingFields = incoming[t],
fields = {};
for(var f in incomingFields) {
if(typeof incomingFields[f] === "string") {
fields[f] = incomingFields[f];
}
try {
incoming = JSON.parse(text);
} catch(e) {
incoming = [{
title: "JSON error: " + e,
text: ""
}]
}
if(!$tw.utils.isArray(incoming)) {
incoming = [incoming];
}
for(var t=0; t<incoming.length; t++) {
var incomingFields = incoming[t],
fields = {};
for(var f in incomingFields) {
if(typeof incomingFields[f] === "string") {
fields[f] = incomingFields[f];
}
results.push(fields);
}
results.push(fields);
}
return results;
};

View File

@@ -42,6 +42,7 @@ function FramedEngine(options) {
this.iframeNode.style.border = "none";
this.iframeNode.style.padding = "0";
this.iframeNode.style.resize = "none";
this.iframeNode.style["background-color"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText("$:/palette"),"tiddler-editor-background");
this.iframeDoc.body.style.margin = "0";
this.iframeDoc.body.style.padding = "0";
this.widget.domNodes.push(this.iframeNode);
@@ -70,10 +71,15 @@ function FramedEngine(options) {
if(this.widget.editRows) {
this.domNode.setAttribute("rows",this.widget.editRows);
}
if(this.widget.editTabIndex) {
this.iframeNode.setAttribute("tabindex",this.widget.editTabIndex);
}
// Copy the styles from the dummy textarea
this.copyStyles();
// Add event listeners
$tw.utils.addEventListeners(this.domNode,[
{name: "click",handlerObject: this,handlerMethod: "handleClickEvent"},
{name: "focus",handlerObject: this,handlerMethod: "handleFocusEvent"},
{name: "input",handlerObject: this,handlerMethod: "handleInputEvent"},
{name: "keydown",handlerObject: this.widget,handlerMethod: "handleKeydownEvent"}
]);
@@ -91,6 +97,7 @@ FramedEngine.prototype.copyStyles = function() {
this.domNode.style.display = "block";
this.domNode.style.width = "100%";
this.domNode.style.margin = "0";
this.domNode.style["background-color"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText("$:/palette"),"tiddler-editor-background");
// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour
this.domNode.style["-webkit-text-fill-color"] = "currentcolor";
};
@@ -146,6 +153,22 @@ FramedEngine.prototype.focus = function() {
this.domNode.select();
}
};
/*
Handle the focus event
*/
FramedEngine.prototype.handleFocusEvent = function(event) {
this.widget.cancelPopups();
return true;
};
/*
Handle a click
*/
FramedEngine.prototype.handleClickEvent = function(event) {
this.fixHeight();
return true;
};
/*
Handle a dom "input" event which occurs when the text has changed

View File

@@ -49,6 +49,9 @@ function SimpleEngine(options) {
if(this.widget.editClass) {
this.domNode.className = this.widget.editClass;
}
if(this.widget.editTabIndex) {
this.domNode.setAttribute("tabindex",this.widget.editTabIndex);
}
// Add an input event handler
$tw.utils.addEventListeners(this.domNode,[
{name: "focus", handlerObject: this, handlerMethod: "handleFocusEvent"},
@@ -64,7 +67,7 @@ Set the text of the engine if it doesn't currently have focus
*/
SimpleEngine.prototype.setText = function(text,type) {
if(!this.domNode.isTiddlyWikiFakeDom) {
if(this.domNode.ownerDocument.activeElement !== this.domNode) {
if(this.domNode.ownerDocument.activeElement !== this.domNode || text === "") {
this.domNode.value = text;
}
// Fix the height if needed
@@ -119,6 +122,7 @@ SimpleEngine.prototype.handleInputEvent = function(event) {
Handle a dom "focus" event
*/
SimpleEngine.prototype.handleFocusEvent = function(event) {
this.widget.cancelPopups();
if(this.widget.editFocusPopup) {
$tw.popup.triggerPopup({
domNode: this.domNode,

View File

@@ -176,6 +176,7 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {
this.editMinHeight = this.getAttribute("minHeight",DEFAULT_MIN_TEXT_AREA_HEIGHT);
this.editFocusPopup = this.getAttribute("focusPopup");
this.editFocus = this.getAttribute("focus");
this.editTabIndex = this.getAttribute("tabindex");
// Get the default editor element tag and type
var tag,type;
if(this.editField === "text") {
@@ -192,13 +193,13 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {
type = type || "text";
}
// Get the rest of our parameters
this.editTag = this.getAttribute("tag",tag);
this.editTag = this.getAttribute("tag",tag) || "input";
this.editType = this.getAttribute("type",type);
// Make the child widgets
this.makeChildWidgets();
// Determine whether to show the toolbar
this.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,"yes");
this.editShowToolbar = (this.editShowToolbar === "yes") && !!(this.children && this.children.length > 0);
this.editShowToolbar = (this.editShowToolbar === "yes") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);
};
/*
@@ -207,7 +208,7 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {
EditTextWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
// Completely rerender if any of our attributes have changed
if(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes["default"] || changedAttributes["class"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {
if(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes["default"] || changedAttributes["class"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedAttributes.tabindex || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {
this.refreshSelf();
return true;
} else if(changedTiddlers[this.editTitle]) {
@@ -216,7 +217,7 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {
}
this.engine.fixHeight();
if(this.editShowToolbar) {
return this.refreshChildren(changedTiddlers);
return this.refreshChildren(changedTiddlers);
} else {
return false;
}
@@ -247,6 +248,13 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {
}
};
/*
Cancel Popups
*/
EditTextWidget.prototype.cancelPopups = function() {
$tw.popup.cancel(0,this.engine.domNode);
};
/*
Handle a dom "keydown" event, which we'll bubble up to our container for the keyboard widgets benefit
*/
@@ -266,7 +274,7 @@ function editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {
el.dispatchEvent(clickEvent);
event.preventDefault();
event.stopPropagation();
return true;
return true;
}
}
}

View File

@@ -0,0 +1,24 @@
/*\
title: $:/core/modules/editor/operations/bitmap/rotate-left.js
type: application/javascript
module-type: bitmapeditoroperation
Bitmap editor operation to rotate the image left by 90 degrees
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports["rotate-left"] = function(event) {
// Rotate the canvas left by 90 degrees
this.rotateCanvasLeft();
// Update the input controls
this.refreshToolbar();
// Save the image into the tiddler
this.saveChanges();
};
})();

View File

@@ -0,0 +1,23 @@
/*\
title: $:/core/modules/editor/operations/text/save-selection.js
type: application/javascript
module-type: texteditoroperation
Text editor operation to save the current selection in a specified tiddler
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports["save-selection"] = function(event,operation) {
var tiddler = event.paramObject.tiddler,
field = event.paramObject.field || "text";
if(tiddler && field) {
this.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));
}
};
})();

View File

@@ -16,14 +16,12 @@ exports["wrap-selection"] = function(event,operation) {
if(operation.selStart === operation.selEnd) {
// No selection; check if we're within the prefix/suffix
if(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {
// Remove the prefix and suffix unless they comprise the entire text
if(operation.selStart > event.paramObject.prefix.length || (operation.selEnd + event.paramObject.suffix.length) < operation.text.length ) {
operation.cutStart = operation.selStart - event.paramObject.prefix.length;
operation.cutEnd = operation.selEnd + event.paramObject.suffix.length;
operation.replacement = "";
operation.newSelStart = operation.cutStart;
operation.newSelEnd = operation.newSelStart;
}
// Remove the prefix and suffix
operation.cutStart = operation.selStart - event.paramObject.prefix.length;
operation.cutEnd = operation.selEnd + event.paramObject.suffix.length;
operation.replacement = "";
operation.newSelStart = operation.cutStart;
operation.newSelEnd = operation.newSelStart;
} else {
// Wrap the cursor instead
operation.cutStart = operation.selStart;

View File

@@ -20,7 +20,7 @@ Parses an operation (i.e. a run) within a filter string
Returns the new start position, after the parsed operation
*/
function parseFilterOperation(operators,filterString,p) {
var operator, operand, bracketPos, curlyBracketPos;
var nextBracketPos, operator;
// Skip the starting square bracket
if(filterString.charAt(p++) !== "[") {
throw "Missing [ in filter expression";
@@ -33,19 +33,30 @@ function parseFilterOperation(operators,filterString,p) {
operator.prefix = filterString.charAt(p++);
}
// Get the operator name
var nextBracketPos = filterString.substring(p).search(/[\[\{<\/]/);
nextBracketPos = filterString.substring(p).search(/[\[\{<\/]/);
if(nextBracketPos === -1) {
throw "Missing [ in filter expression";
}
nextBracketPos += p;
var bracket = filterString.charAt(nextBracketPos);
operator.operator = filterString.substring(p,nextBracketPos);
// Any suffix?
var colon = operator.operator.indexOf(':');
if(colon > -1) {
// The raw suffix for older filters
operator.suffix = operator.operator.substring(colon + 1);
operator.operator = operator.operator.substring(0,colon) || "field";
// The processed suffix for newer filters
operator.suffixes = [];
$tw.utils.each(operator.suffix.split(":"),function(subsuffix) {
operator.suffixes.push([]);
$tw.utils.each(subsuffix.split(","),function(entry) {
entry = $tw.utils.trim(entry);
if(entry) {
operator.suffixes[operator.suffixes.length - 1].push(entry);
}
});
});
}
// Empty operator means: title
else if(operator.operator === "") {
@@ -79,7 +90,7 @@ console.log("WARNING: Filter",operator.operator,"has a deprecated regexp operand
}
break;
}
if(nextBracketPos === -1) {
throw "Missing closing bracket in filter expression";
}
@@ -87,7 +98,7 @@ console.log("WARNING: Filter",operator.operator,"has a deprecated regexp operand
operator.operand = filterString.substring(p,nextBracketPos);
}
p = nextBracketPos + 1;
// Push this operator
operators.push(operator);
} while(filterString.charAt(p) !== "]");
@@ -108,7 +119,7 @@ exports.parseFilter = function(filterString) {
p = 0, // Current position in the filter string
match;
var whitespaceRegExp = /(\s+)/mg,
operandRegExp = /((?:\+|\-)?)(?:(\[)|(?:"([^"]*)")|(?:'([^']*)')|([^\s\[\]]+))/mg;
operandRegExp = /((?:\+|\-|~|=)?)(?:(\[)|(?:"([^"]*)")|(?:'([^']*)')|([^\s\[\]]+))/mg;
while(p < filterString.length) {
// Skip any whitespace
whitespaceRegExp.lastIndex = p;
@@ -208,6 +219,7 @@ exports.compileFilter = function(filterString) {
operand: operand,
prefix: operator.prefix,
suffix: operator.suffix,
suffixes: operator.suffixes,
regexp: operator.regexp
},{
wiki: self,
@@ -236,6 +248,10 @@ exports.compileFilter = function(filterString) {
return function(results,source,widget) {
$tw.utils.pushTop(results,operationSubFunction(source,widget));
};
case "=": // The results of the operation are pushed into the result without deduplication
return function(results,source,widget) {
Array.prototype.push.apply(results,operationSubFunction(source,widget));
};
case "-": // The results of this operation are removed from the main result
return function(results,source,widget) {
$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));
@@ -247,11 +263,18 @@ exports.compileFilter = function(filterString) {
results.splice(0,results.length);
$tw.utils.pushTop(results,operationSubFunction(source,widget));
};
case "~": // This operation is unioned into the result only if the main result so far is empty
return function(results,source,widget) {
if(results.length === 0) {
// Main result so far is empty
$tw.utils.pushTop(results,operationSubFunction(source,widget));
}
};
}
})());
});
// Return a function that applies the operations to a source iterator of tiddler titles
return $tw.perf.measure("filter",function filterFunction(source,widget) {
return $tw.perf.measure("filter: " + filterString,function filterFunction(source,widget) {
if(!source) {
source = self.each;
} else if(typeof source === "object") { // Array or hashmap

View File

@@ -0,0 +1,22 @@
/*\
title: $:/core/modules/filters/all/tags.js
type: application/javascript
module-type: allfilteroperator
Filter function for [all[tags]]
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.tags = function(source,prefix,options) {
return Object.keys(options.wiki.getTagMap());
};
})();

View File

@@ -0,0 +1,45 @@
/*\
title: $:/core/modules/filters/contains.js
type: application/javascript
module-type: filteroperator
Filter operator for finding values in array fields
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.contains = function(source,operator,options) {
var results = [],
fieldname = (operator.suffix || "list").toLowerCase();
if(operator.prefix === "!") {
source(function(tiddler,title) {
if(tiddler) {
var list = tiddler.getFieldList(fieldname);
if(list.indexOf(operator.operand) === -1) {
results.push(title);
}
} else {
results.push(title);
}
});
} else {
source(function(tiddler,title) {
if(tiddler) {
var list = tiddler.getFieldList(fieldname);
if(list.indexOf(operator.operand) !== -1) {
results.push(title);
}
}
});
}
return results;
};
})();

View File

@@ -0,0 +1,26 @@
/*\
title: $:/core/modules/filters/count.js
type: application/javascript
module-type: filteroperator
Filter operator returning the number of entries in the current list.
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.count = function(source,operator,options) {
var count = 0;
source(function(tiddler,title) {
count++;
});
return [count + ""];
};
})();

View File

@@ -18,18 +18,34 @@ Export our filter function
*/
exports.each = function(source,operator,options) {
var results =[] ,
value,values = {},
field = operator.operand || "title";
if(operator.suffix !== "list-item") {
value,values = {},
field = operator.operand || "title";
if(operator.suffix === "value" && field === "title") {
source(function(tiddler,title) {
if(tiddler) {
value = (field === "title") ? title : tiddler.getFieldString(field);
if(!$tw.utils.hop(values,value)) {
values[value] = true;
results.push(title);
}
if(!$tw.utils.hop(values,title)) {
values[title] = true;
results.push(title);
}
});
} else if(operator.suffix !== "list-item") {
if(field === "title") {
source(function(tiddler,title) {
if(tiddler && !$tw.utils.hop(values,title)) {
values[title] = true;
results.push(title);
}
});
} else {
source(function(tiddler,title) {
if(tiddler) {
value = tiddler.getFieldString(field);
if(!$tw.utils.hop(values,value)) {
values[value] = true;
results.push(title);
}
}
});
}
} else {
source(function(tiddler,title) {
if(tiddler) {

View File

@@ -0,0 +1,30 @@
/*\
title: $:/core/modules/filters/else.js
type: application/javascript
module-type: filteroperator
Filter operator for replacing an empty input list with a constant, passing a non-empty input list straight through
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.else = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push(title);
});
if(results.length === 0) {
return [operator.operand];
} else {
return results;
}
};
})();

View File

@@ -0,0 +1,110 @@
/*\
title: $:/core/modules/filters/decodeuricomponent.js
type: application/javascript
module-type: filteroperator
Filter operator for applying decodeURIComponent() to each item.
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter functions
*/
exports.decodeuricomponent = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
var value = title;
try {
value = decodeURIComponent(title);
} catch(e) {
}
results.push(value);
});
return results;
};
exports.encodeuricomponent = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push(encodeURIComponent(title));
});
return results;
};
exports.decodeuri = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
var value = title;
try {
value = decodeURI(title);
} catch(e) {
}
results.push(value);
});
return results;
};
exports.encodeuri = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push(encodeURI(title));
});
return results;
};
exports.decodehtml = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push($tw.utils.htmlDecode(title));
});
return results;
};
exports.encodehtml = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push($tw.utils.htmlEncode(title));
});
return results;
};
exports.stringify = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push($tw.utils.stringify(title));
});
return results;
};
exports.jsonstringify = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push($tw.utils.jsonStringify(title));
});
return results;
};
exports.escaperegexp = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push($tw.utils.escapeRegExp(title));
});
return results;
};
exports.escapecss = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
// escape any character with a special meaning in CSS using CSS.escape()
results.push(CSS.escape(title));
});
return results;
};
})();

View File

@@ -0,0 +1,42 @@
/*\
title: $:/core/modules/filters/enlist.js
type: application/javascript
module-type: filteroperator
Filter operator returning its operand parsed as a list
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.enlist = function(source,operator,options) {
var allowDuplicates = false;
switch(operator.suffix) {
case "raw":
allowDuplicates = true;
break;
case "dedupe":
allowDuplicates = false;
break;
}
var list = $tw.utils.parseStringArray(operator.operand,allowDuplicates);
if(operator.prefix === "!") {
var results = [];
source(function(tiddler,title) {
if(list.indexOf(title) === -1) {
results.push(title);
}
});
return results;
} else {
return list;
}
};
})();

View File

@@ -16,7 +16,7 @@ Filter operator for comparing fields for equality
Export our filter function
*/
exports.field = function(source,operator,options) {
var results = [],
var results = [],indexedResults,
fieldname = (operator.suffix || operator.operator || "title").toLowerCase();
if(operator.prefix === "!") {
if(operator.regexp) {
@@ -53,6 +53,12 @@ exports.field = function(source,operator,options) {
}
});
} else {
if(source.byField) {
indexedResults = source.byField(fieldname,operator.operand);
if(indexedResults) {
return indexedResults
}
}
source(function(tiddler,title) {
if(tiddler) {
var text = tiddler.getFieldString(fieldname);

Some files were not shown because too many files have changed in this diff Show More