1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-01-24 20:04:40 +00:00

Compare commits

...

154 Commits

Author SHA1 Message Date
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
665 changed files with 6110 additions and 1631 deletions

View File

@@ -1,3 +1,3 @@
<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/" rel="noopener noreferrer" 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><h2 class=""><code>2bld</code>: builds <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://tiddlywiki.com/static/TiddlyWiki.html">TiddlyWiki</a> 2.6.5</h2><p>This script builds <a class="tc-tiddlylink tc-tiddlylink-resolves" href="https://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>

View File

@@ -1202,7 +1202,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),
@@ -1220,10 +1220,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;
@@ -1523,7 +1527,7 @@ $tw.loadTiddlersFromPath = function(filepath,excludeRegExp) {
});
}
} else if(stat.isFile()) {
tiddlers.push($tw.loadTiddlersFromFile(filepath));
tiddlers.push($tw.loadTiddlersFromFile(filepath,{title: filepath}));
}
}
return tiddlers;
@@ -1634,9 +1638,14 @@ Load the tiddlers from a plugin folder, and package them up into a proper JSON p
*/
$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
@@ -2017,7 +2026,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);
};
/*
@@ -2032,14 +2041,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];
@@ -2064,7 +2073,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;
@@ -2072,6 +2081,9 @@ $tw.boot.executeNextStartupTask = function() {
}
taskIndex++;
}
if(typeof callback === 'function') {
callback();
}
return false;
};
@@ -2157,7 +2169,7 @@ $tw.hooks.invokeHook = function(hookName /*, value,... */) {
/////////////////////////// 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
@@ -2167,7 +2179,7 @@ $tw.boot.boot = function() {
// Preload any encrypted tiddlers
$tw.boot.decryptEncryptedTiddlers(function() {
// Startup
$tw.boot.startup();
$tw.boot.startup({callback: callback});
});
};

View File

@@ -8,7 +8,7 @@ function t(a,b,c){if(4!==b.length)throw new sjcl.exception.invalid("invalid aes
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>>>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),3===(c&3)&&(b.push(d),d=0);c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};
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}};

View File

@@ -1,4 +1,4 @@
<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" rel="noopener noreferrer" target="_blank">GitHub</a><ul><li>See <a class="tc-tiddlylink-external" href="http://tiddlywiki.com/dev" rel="noopener noreferrer" 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" 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="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" 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>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><p>Remarks
<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>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><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>
</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

@@ -53,7 +53,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/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|http://tiddlywiki.com/#SafeMode]] to restore normal operation.
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
@@ -72,7 +72,6 @@ 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

View File

@@ -1,6 +1,6 @@
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

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 important to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details
!! Set up this ~TiddlyWiki

View File

@@ -6,23 +6,33 @@ Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filt
```
--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>
```
With the "file" variant only a single file is fetched and the first parameter is the URL of the file to read.
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 "files" variant, 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.
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.
The `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.
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.
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.
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 http://tiddlywiki.com and saves them to a JSON file:
The following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:
```
tiddlywiki --verbose --fetch file "http://tiddlywiki.com/" "[!is[system]]" "" --rendertiddler "$:/core/templates/exporters/JsonFile" output.json text/plain "" exportFilter "[!is[system]]"
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

@@ -1,10 +1,11 @@
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 <dirpath>
```
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
* ''template'': Optional template through which each tiddler is rendered
* ''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)
* ''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,6 +1,8 @@
title: $:/language/Help/rendertiddler
description: Render an individual tiddler as a specified ContentType
(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).

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

@@ -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:
@@ -35,7 +35,7 @@ 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
Manager/Controls/FilterByTag/None: (none)
Manager/Controls/FilterByTag/Prompt: Filter by tag:
@@ -54,7 +54,7 @@ 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/images/edit-button}} to create
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.

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

@@ -2,7 +2,7 @@ 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:

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

@@ -12,6 +12,7 @@ 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

@@ -27,24 +27,36 @@ Command.prototype.execute = function() {
if(this.params.length < 2) {
return "Missing subcommand and url";
}
var subcommand = this.params[0],
url = this.params[1],
importFilter = this.params[2] || "[all[tiddlers]]",
transformFilter = this.params[3] || "";
switch(subcommand) {
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: url,
importFilter: importFilter,
transformFilter: transformFilter,
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: url,
importFilter: importFilter,
transformFilter: transformFilter,
urlFilter: this.params[1],
importFilter: this.params[2],
transformFilter: this.params[3] || "",
callback: this.callback
});
break;
@@ -80,24 +92,31 @@ Command.prototype.fetchFiles = function(options) {
return null;
};
Command.prototype.fetchFile = function(url,options,callback) {
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],
body = "";
data = [];
self.commander.write("Reading " + url + ": ");
response.on("data",function(chunk) {
body += chunk;
data.push(chunk);
self.commander.write(".");
});
response.on("end",function() {
self.commander.write("\n");
if(response.statusCode === 200) {
self.processBody(body,type,options);
self.processBody(Buffer.concat(data),type,options,url);
callback(null);
} else {
callback("Error " + response.statusCode + " retrieving " + url)
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) {
@@ -108,16 +127,27 @@ Command.prototype.fetchFile = function(url,options,callback) {
return null;
};
Command.prototype.processBody = function(body,type,options) {
// Deserialise the HTML file and put the tiddlers in their own wiki
var self = this,
incomingWiki = new $tw.Wiki(),
tiddlers = this.commander.wiki.deserializeTiddlers(type || "text/html",body,{});
$tw.utils.each(tiddlers,function(tiddler) {
incomingWiki.addTiddler(new $tw.Tiddler(tiddler));
});
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);
var filteredTitles = incomingWiki.filterTiddlers(options.importFilter || "[all[tiddlers]]");
// Import the selected tiddlers
var count = 0;
incomingWiki.each(function(tiddler,title) {

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

@@ -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,9 +30,7 @@ Command.prototype.execute = function() {
if(this.params.length < 1) {
return "Missing filename";
}
var ext = path.extname(self.params[0]),
stat = fs.statSync(self.params[0]),
tiddlers = $tw.loadTiddlersFromPath(self.params[0]),
var tiddlers = $tw.loadTiddlersFromPath(self.params[0]),
count = 0;
$tw.utils.each(tiddlers,function(tiddlerInfo) {
$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {

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

@@ -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

@@ -300,8 +300,8 @@ Command.prototype.execute = function() {
pathprefix: pathprefix
});
this.server.listen(port,host);
console.log("Serving on " + host + ":" + port);
console.log("(press ctrl-C to exit)");
$tw.utils.log("Serving on " + host + ":" + port,"brown/orange");
$tw.utils.log("(press ctrl-C to exit)","red");
// 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");

View File

@@ -72,6 +72,14 @@ exports.stringify = function(source,operator,options) {
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) {

View File

@@ -0,0 +1,30 @@
/*\
title: $:/core/modules/filters/lookup.js
type: application/javascript
module-type: filteroperator
Filter operator that looks up values via a title prefix
[lookup:<field>[<prefix>]]
Prepends the prefix to the selected items and returns the specified field value
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Export our filter function
*/
exports.lookup = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
results.push(options.wiki.getTiddlerText(operator.operand + title) || options.wiki.getTiddlerText(operator.operand + operator.suffix));
});
return results;
};
})();

View File

@@ -106,7 +106,7 @@ Extended filter operators to manipulate the current list.
exports.allbefore = function (source, operator) {
var results = prepare_results(source),
index = results.indexOf(operator.operand);
return (index <= 0) ? [] :
return (index < 0) ? [] :
(operator.suffix) ? results.slice(0, index + 1) :
results.slice(0, index);
};

View File

@@ -6,7 +6,7 @@ module-type: wikirule
Wiki text inline rule for external links. For example:
```
An external link: http://www.tiddlywiki.com/
An external link: https://www.tiddlywiki.com/
A suppressed external link: ~http://www.tiddlyspace.com/
```

View File

@@ -6,10 +6,10 @@ module-type: wikirule
Wiki text inline rule for embedding images. For example:
```
[img[http://tiddlywiki.com/fractalveg.jpg]]
[img width=23 height=24 [http://tiddlywiki.com/fractalveg.jpg]]
[img width={{!!width}} height={{!!height}} [http://tiddlywiki.com/fractalveg.jpg]]
[img[Description of image|http://tiddlywiki.com/fractalveg.jpg]]
[img[https://tiddlywiki.com/fractalveg.jpg]]
[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]
[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]
[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]
[img[TiddlerTitle]]
[img[Description of image|TiddlerTitle]]
```

View File

@@ -6,8 +6,8 @@ module-type: wikirule
Wiki text inline rule for external links. For example:
```
[ext[http://tiddlywiki.com/fractalveg.jpg]]
[ext[Tooltip|http://tiddlywiki.com/fractalveg.jpg]]
[ext[https://tiddlywiki.com/fractalveg.jpg]]
[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]
```
\*/

View File

@@ -0,0 +1,72 @@
/*\
title: $:/core/modules/parsers/wikiparser/rules/whitespace.js
type: application/javascript
module-type: wikirule
Wiki pragma rule for whitespace specifications
```
\whitespace trim
\whitespace notrim
```
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
exports.name = "whitespace";
exports.types = {pragma: true};
/*
Instantiate parse rule
*/
exports.init = function(parser) {
this.parser = parser;
// Regexp to match
this.matchRegExp = /^\\whitespace[^\S\n]/mg;
};
/*
Parse the most recent match
*/
exports.parse = function() {
var self = this;
// Move past the pragma invocation
this.parser.pos = this.matchRegExp.lastIndex;
// Parse whitespace delimited tokens terminated by a line break
var reMatch = /[^\S\n]*(\S+)|(\r?\n)/mg,
tokens = [];
reMatch.lastIndex = this.parser.pos;
var match = reMatch.exec(this.parser.source);
while(match && match.index === this.parser.pos) {
this.parser.pos = reMatch.lastIndex;
// Exit if we've got the line break
if(match[2]) {
break;
}
// Process the token
if(match[1]) {
tokens.push(match[1]);
}
// Match the next token
match = reMatch.exec(this.parser.source);
}
// Process the tokens
$tw.utils.each(tokens,function(token) {
switch(token) {
case "trim":
self.parser.configTrimWhiteSpace = true;
break;
case "notrim":
self.parser.configTrimWhiteSpace = false;
break;
}
});
// No parse tree nodes to return
return [];
};
})();

View File

@@ -50,6 +50,8 @@ var WikiParser = function(type,text,options) {
this.type = type || "text/vnd.tiddlywiki";
this.source = text || "";
this.sourceLength = this.source.length;
// Flag for ignoring whitespace
this.configTrimWhiteSpace = false;
// Set current parse position
this.pos = 0;
// Instantiate the pragma parse rules
@@ -285,7 +287,7 @@ WikiParser.prototype.parseInlineRunUnterminated = function(options) {
while(this.pos < this.sourceLength && nextMatch) {
// Process the text preceding the run rule
if(nextMatch.matchIndex > this.pos) {
tree.push({type: "text", text: this.source.substring(this.pos,nextMatch.matchIndex)});
this.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));
this.pos = nextMatch.matchIndex;
}
// Process the run rule
@@ -295,7 +297,7 @@ WikiParser.prototype.parseInlineRunUnterminated = function(options) {
}
// Process the remaining text
if(this.pos < this.sourceLength) {
tree.push({type: "text", text: this.source.substr(this.pos)});
this.pushTextWidget(tree,this.source.substr(this.pos));
}
this.pos = this.sourceLength;
return tree;
@@ -315,7 +317,7 @@ WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,option
if(terminatorMatch) {
if(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {
if(terminatorMatch.index > this.pos) {
tree.push({type: "text", text: this.source.substring(this.pos,terminatorMatch.index)});
this.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));
}
this.pos = terminatorMatch.index;
if(options.eatTerminator) {
@@ -328,7 +330,7 @@ WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,option
if(inlineRuleMatch) {
// Preceding text
if(inlineRuleMatch.matchIndex > this.pos) {
tree.push({type: "text", text: this.source.substring(this.pos,inlineRuleMatch.matchIndex)});
this.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));
this.pos = inlineRuleMatch.matchIndex;
}
// Process the inline rule
@@ -342,12 +344,24 @@ WikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,option
}
// Process the remaining text
if(this.pos < this.sourceLength) {
tree.push({type: "text", text: this.source.substr(this.pos)});
this.pushTextWidget(tree,this.source.substr(this.pos));
}
this.pos = this.sourceLength;
return tree;
};
/*
Push a text widget onto an array, respecting the configTrimWhiteSpace setting
*/
WikiParser.prototype.pushTextWidget = function(array,text) {
if(this.configTrimWhiteSpace) {
text = $tw.utils.trim(text);
}
if(text) {
array.push({type: "text", text: text});
}
};
/*
Parse zero or more class specifiers `.classname`
*/

View File

@@ -4,6 +4,7 @@ type: application/javascript
module-type: saver
Saves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)
Compatible with beaker >= V0.7.2
\*/
(function(){
@@ -20,16 +21,17 @@ var BeakerSaver = function(wiki) {
};
BeakerSaver.prototype.save = function(text,method,callback) {
var url = (location.toString()).split("#")[0];
dat.stat(url).then(function(value) {
if(value.type === "directory") {
url = url + "/index.html";
var dat = new DatArchive("" + window.location),
pathname = ("" + window.location.pathname).split("#")[0];
dat.stat(pathname).then(function(value) {
if(value.isDirectory()) {
pathname = pathname + "/index.html";
}
dat.writeFile(url,text,"utf8").then(function(value) {
dat.writeFile(pathname,text,"utf8").then(function(value) {
callback(null);
},function(reason) {
callback("Beaker Saver Write Error: " + reason);
});
});
},function(reason) {
callback("Beaker Saver Stat Error: " + reason);
});
@@ -49,7 +51,7 @@ BeakerSaver.prototype.info = {
Static method that returns true if this saver is capable of working
*/
exports.canSave = function(wiki) {
return !!window.dat;
return !!window.DatArchive;
};
/*

View File

@@ -25,7 +25,8 @@ DownloadSaver.prototype.save = function(text,method,callback,options) {
if(!filename) {
var p = document.location.pathname.lastIndexOf("/");
if(p !== -1) {
filename = document.location.pathname.substr(p+1);
// We decode the pathname because document.location is URL encoded by the browser
filename = decodeURIComponent(document.location.pathname.substr(p+1));
}
}
if(!filename) {

View File

@@ -47,7 +47,7 @@ var PutSaver = function(wiki) {
};
PutSaver.prototype.uri = function() {
return encodeURI(document.location.toString().split("#")[0]);
return document.location.toString().split("#")[0];
};
// TODO: in case of edit conflict

View File

@@ -33,6 +33,7 @@ function Syncer(options) {
var self = this;
this.wiki = options.wiki;
this.syncadaptor = options.syncadaptor;
this.disableUI = !!options.disableUI;
this.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;
this.titleUserName = options.titleUserName || this.titleUserName;
this.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;
@@ -41,8 +42,12 @@ function Syncer(options) {
this.throttleInterval = options.throttleInterval || this.throttleInterval;
this.fallbackInterval = options.fallbackInterval || this.fallbackInterval;
this.pollTimerInterval = options.pollTimerInterval || this.pollTimerInterval;
this.logging = "logging" in options ? options.logging : true;
// Make a logger
this.logger = new $tw.utils.Logger("syncer" + ($tw.browser ? "-browser" : "") + ($tw.node ? "-server" : "") + (this.syncadaptor.name ? ("-" + this.syncadaptor.name) : ""));
this.logger = new $tw.utils.Logger("syncer" + ($tw.browser ? "-browser" : "") + ($tw.node ? "-server" : "") + (this.syncadaptor.name ? ("-" + this.syncadaptor.name) : ""),{
colour: "cyan",
enable: this.logging
});
// Compile the dirty tiddler filter
this.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));
// Record information for known tiddlers
@@ -57,7 +62,7 @@ function Syncer(options) {
self.syncToServer(changes);
});
// Browser event handlers
if($tw.browser) {
if($tw.browser && !this.disableUI) {
// Set up our beforeunload handler
$tw.addUnloadTask(function(event) {
var confirmationMessage;
@@ -79,9 +84,11 @@ function Syncer(options) {
});
}
// Listen out for lazyLoad events
this.wiki.addEventListener("lazyLoad",function(title) {
self.handleLazyLoadEvent(title);
});
if(!this.disableUI) {
this.wiki.addEventListener("lazyLoad",function(title) {
self.handleLazyLoadEvent(title);
});
}
// Get the login status
this.getStatus(function(err,isLoggedIn) {
// Do a sync from the server
@@ -134,7 +141,7 @@ Syncer.prototype.isDirty = function() {
Update the document body with the class "tc-dirty" if the wiki has unsaved/unsynced changes
*/
Syncer.prototype.updateDirtyStatus = function() {
if($tw.browser) {
if($tw.browser && !this.disableUI) {
$tw.utils.toggleClass(document.body,"tc-dirty",this.isDirty());
}
};

View File

@@ -224,8 +224,7 @@ Object.defineProperty(TW_Element.prototype, "textContent", {
get: function() {
if(this.isRaw) {
if(this.rawTextContent === null) {
console.log(booboo)
throw "Cannot get textContent on a raw TW_Element";
return "";
} else {
return this.rawTextContent;
}
@@ -245,7 +244,7 @@ Object.defineProperty(TW_Element.prototype, "textContent", {
Object.defineProperty(TW_Element.prototype, "formattedTextContent", {
get: function() {
if(this.isRaw) {
throw "Cannot get formattedTextContent on a raw TW_Element";
return "";
} else {
var b = [],
isBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;

View File

@@ -17,16 +17,19 @@ var ALERT_TAG = "$:/tags/Alert";
/*
Make a new logger
*/
function Logger(componentName) {
function Logger(componentName,options) {
options = options || {};
this.componentName = componentName || "";
this.colour = options.colour || "white";
this.enable = "enable" in options ? options.enable : true;
}
/*
Log a message
*/
Logger.prototype.log = function(/* args */) {
if(console !== undefined && console.log !== undefined) {
return Function.apply.call(console.log, console, [this.componentName + ":"].concat(Array.prototype.slice.call(arguments,0)));
if(this.enable && console !== undefined && console.log !== undefined) {
return Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + ":"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));
}
};
@@ -34,44 +37,46 @@ Logger.prototype.log = function(/* args */) {
Alert a message
*/
Logger.prototype.alert = function(/* args */) {
// Prepare the text of the alert
var text = Array.prototype.join.call(arguments," ");
// Create alert tiddlers in the browser
if($tw.browser) {
// Check if there is an existing alert with the same text and the same component
var existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),
alertFields,
existingCount,
self = this;
$tw.utils.each(existingAlerts,function(title) {
var tiddler = $tw.wiki.getTiddler(title);
if(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {
alertFields = $tw.utils.extend({},tiddler.fields);
if(this.enable) {
// Prepare the text of the alert
var text = Array.prototype.join.call(arguments," ");
// Create alert tiddlers in the browser
if($tw.browser) {
// Check if there is an existing alert with the same text and the same component
var existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),
alertFields,
existingCount,
self = this;
$tw.utils.each(existingAlerts,function(title) {
var tiddler = $tw.wiki.getTiddler(title);
if(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {
alertFields = $tw.utils.extend({},tiddler.fields);
}
});
if(alertFields) {
existingCount = alertFields.count || 1;
} else {
alertFields = {
title: $tw.wiki.generateNewTitle("$:/temp/alerts/alert",{prefix: ""}),
text: text,
tags: [ALERT_TAG],
component: this.componentName
};
existingCount = 0;
}
});
if(alertFields) {
existingCount = alertFields.count || 1;
alertFields.modified = new Date();
if(++existingCount > 1) {
alertFields.count = existingCount;
} else {
alertFields.count = undefined;
}
$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));
// Log the alert as well
this.log.apply(this,Array.prototype.slice.call(arguments,0));
} else {
alertFields = {
title: $tw.wiki.generateNewTitle("$:/temp/alerts/alert",{prefix: ""}),
text: text,
tags: [ALERT_TAG],
component: this.componentName
};
existingCount = 0;
}
alertFields.modified = new Date();
if(++existingCount > 1) {
alertFields.count = existingCount;
} else {
alertFields.count = undefined;
}
$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));
// Log the alert as well
this.log.apply(this,Array.prototype.slice.call(arguments,0));
} else {
// Print an orange message to the console if not in the browser
console.error("\x1b[1;33m" + text + "\x1b[0m");
// Print an orange message to the console if not in the browser
console.error("\x1b[1;33m" + text + "\x1b[0m");
}
}
};

View File

@@ -0,0 +1,919 @@
/*\
title: $:/core/modules/utils/transliterate.js
type: application/javascript
module-type: utils
Transliteration static utility functions.
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Transliterate string to ASCII
(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)
*/
exports.transliterationPairs = {
"Á":"A",
"Ă":"A",
"Ắ":"A",
"Ặ":"A",
"Ằ":"A",
"Ẳ":"A",
"Ẵ":"A",
"Ǎ":"A",
"Â":"A",
"Ấ":"A",
"Ậ":"A",
"Ầ":"A",
"Ẩ":"A",
"Ẫ":"A",
"Ä":"A",
"Ǟ":"A",
"Ȧ":"A",
"Ǡ":"A",
"Ạ":"A",
"Ȁ":"A",
"À":"A",
"Ả":"A",
"Ȃ":"A",
"Ā":"A",
"Ą":"A",
"Å":"A",
"Ǻ":"A",
"Ḁ":"A",
"Ⱥ":"A",
"Ã":"A",
"Ꜳ":"AA",
"Æ":"AE",
"Ǽ":"AE",
"Ǣ":"AE",
"Ꜵ":"AO",
"Ꜷ":"AU",
"Ꜹ":"AV",
"Ꜻ":"AV",
"Ꜽ":"AY",
"Ḃ":"B",
"Ḅ":"B",
"Ɓ":"B",
"Ḇ":"B",
"Ƀ":"B",
"Ƃ":"B",
"Ć":"C",
"Č":"C",
"Ç":"C",
"Ḉ":"C",
"Ĉ":"C",
"Ċ":"C",
"Ƈ":"C",
"Ȼ":"C",
"Ď":"D",
"Ḑ":"D",
"Ḓ":"D",
"Ḋ":"D",
"Ḍ":"D",
"Ɗ":"D",
"Ḏ":"D",
"Dz":"D",
"Dž":"D",
"Đ":"D",
"Ƌ":"D",
"DZ":"DZ",
"DŽ":"DZ",
"É":"E",
"Ĕ":"E",
"Ě":"E",
"Ȩ":"E",
"Ḝ":"E",
"Ê":"E",
"Ế":"E",
"Ệ":"E",
"Ề":"E",
"Ể":"E",
"Ễ":"E",
"Ḙ":"E",
"Ë":"E",
"Ė":"E",
"Ẹ":"E",
"Ȅ":"E",
"È":"E",
"Ẻ":"E",
"Ȇ":"E",
"Ē":"E",
"Ḗ":"E",
"Ḕ":"E",
"Ę":"E",
"Ɇ":"E",
"Ẽ":"E",
"Ḛ":"E",
"":"ET",
"Ḟ":"F",
"Ƒ":"F",
"Ǵ":"G",
"Ğ":"G",
"Ǧ":"G",
"Ģ":"G",
"Ĝ":"G",
"Ġ":"G",
"Ɠ":"G",
"Ḡ":"G",
"Ǥ":"G",
"Ḫ":"H",
"Ȟ":"H",
"Ḩ":"H",
"Ĥ":"H",
"Ⱨ":"H",
"Ḧ":"H",
"Ḣ":"H",
"Ḥ":"H",
"Ħ":"H",
"Í":"I",
"Ĭ":"I",
"Ǐ":"I",
"Î":"I",
"Ï":"I",
"Ḯ":"I",
"İ":"I",
"Ị":"I",
"Ȉ":"I",
"Ì":"I",
"Ỉ":"I",
"Ȋ":"I",
"Ī":"I",
"Į":"I",
"Ɨ":"I",
"Ĩ":"I",
"Ḭ":"I",
"Ꝺ":"D",
"Ꝼ":"F",
"Ᵹ":"G",
"Ꞃ":"R",
"Ꞅ":"S",
"Ꞇ":"T",
"Ꝭ":"IS",
"Ĵ":"J",
"Ɉ":"J",
"Ḱ":"K",
"Ǩ":"K",
"Ķ":"K",
"Ⱪ":"K",
"Ꝃ":"K",
"Ḳ":"K",
"Ƙ":"K",
"Ḵ":"K",
"Ꝁ":"K",
"Ꝅ":"K",
"Ĺ":"L",
"Ƚ":"L",
"Ľ":"L",
"Ļ":"L",
"Ḽ":"L",
"Ḷ":"L",
"Ḹ":"L",
"Ⱡ":"L",
"Ꝉ":"L",
"Ḻ":"L",
"Ŀ":"L",
"Ɫ":"L",
"Lj":"L",
"Ł":"L",
"LJ":"LJ",
"Ḿ":"M",
"Ṁ":"M",
"Ṃ":"M",
"Ɱ":"M",
"Ń":"N",
"Ň":"N",
"Ņ":"N",
"Ṋ":"N",
"Ṅ":"N",
"Ṇ":"N",
"Ǹ":"N",
"Ɲ":"N",
"Ṉ":"N",
"Ƞ":"N",
"Nj":"N",
"Ñ":"N",
"NJ":"NJ",
"Ó":"O",
"Ŏ":"O",
"Ǒ":"O",
"Ô":"O",
"Ố":"O",
"Ộ":"O",
"Ồ":"O",
"Ổ":"O",
"Ỗ":"O",
"Ö":"O",
"Ȫ":"O",
"Ȯ":"O",
"Ȱ":"O",
"Ọ":"O",
"Ő":"O",
"Ȍ":"O",
"Ò":"O",
"Ỏ":"O",
"Ơ":"O",
"Ớ":"O",
"Ợ":"O",
"Ờ":"O",
"Ở":"O",
"Ỡ":"O",
"Ȏ":"O",
"Ꝋ":"O",
"Ꝍ":"O",
"Ō":"O",
"Ṓ":"O",
"Ṑ":"O",
"Ɵ":"O",
"Ǫ":"O",
"Ǭ":"O",
"Ø":"O",
"Ǿ":"O",
"Õ":"O",
"Ṍ":"O",
"Ṏ":"O",
"Ȭ":"O",
"Ƣ":"OI",
"Ꝏ":"OO",
"Ɛ":"E",
"Ɔ":"O",
"Ȣ":"OU",
"Ṕ":"P",
"Ṗ":"P",
"Ꝓ":"P",
"Ƥ":"P",
"Ꝕ":"P",
"Ᵽ":"P",
"Ꝑ":"P",
"Ꝙ":"Q",
"Ꝗ":"Q",
"Ŕ":"R",
"Ř":"R",
"Ŗ":"R",
"Ṙ":"R",
"Ṛ":"R",
"Ṝ":"R",
"Ȑ":"R",
"Ȓ":"R",
"Ṟ":"R",
"Ɍ":"R",
"Ɽ":"R",
"Ꜿ":"C",
"Ǝ":"E",
"Ś":"S",
"Ṥ":"S",
"Š":"S",
"Ṧ":"S",
"Ş":"S",
"Ŝ":"S",
"Ș":"S",
"Ṡ":"S",
"Ṣ":"S",
"Ṩ":"S",
"Ť":"T",
"Ţ":"T",
"Ṱ":"T",
"Ț":"T",
"Ⱦ":"T",
"Ṫ":"T",
"Ṭ":"T",
"Ƭ":"T",
"Ṯ":"T",
"Ʈ":"T",
"Ŧ":"T",
"Ɐ":"A",
"Ꞁ":"L",
"Ɯ":"M",
"Ʌ":"V",
"Ꜩ":"TZ",
"Ú":"U",
"Ŭ":"U",
"Ǔ":"U",
"Û":"U",
"Ṷ":"U",
"Ü":"U",
"Ǘ":"U",
"Ǚ":"U",
"Ǜ":"U",
"Ǖ":"U",
"Ṳ":"U",
"Ụ":"U",
"Ű":"U",
"Ȕ":"U",
"Ù":"U",
"Ủ":"U",
"Ư":"U",
"Ứ":"U",
"Ự":"U",
"Ừ":"U",
"Ử":"U",
"Ữ":"U",
"Ȗ":"U",
"Ū":"U",
"Ṻ":"U",
"Ų":"U",
"Ů":"U",
"Ũ":"U",
"Ṹ":"U",
"Ṵ":"U",
"Ꝟ":"V",
"Ṿ":"V",
"Ʋ":"V",
"Ṽ":"V",
"Ꝡ":"VY",
"Ẃ":"W",
"Ŵ":"W",
"Ẅ":"W",
"Ẇ":"W",
"Ẉ":"W",
"Ẁ":"W",
"Ⱳ":"W",
"Ẍ":"X",
"Ẋ":"X",
"Ý":"Y",
"Ŷ":"Y",
"Ÿ":"Y",
"Ẏ":"Y",
"Ỵ":"Y",
"Ỳ":"Y",
"Ƴ":"Y",
"Ỷ":"Y",
"Ỿ":"Y",
"Ȳ":"Y",
"Ɏ":"Y",
"Ỹ":"Y",
"Ź":"Z",
"Ž":"Z",
"Ẑ":"Z",
"Ⱬ":"Z",
"Ż":"Z",
"Ẓ":"Z",
"Ȥ":"Z",
"Ẕ":"Z",
"Ƶ":"Z",
"IJ":"IJ",
"Œ":"OE",
"ᴀ":"A",
"ᴁ":"AE",
"ʙ":"B",
"ᴃ":"B",
"":"C",
"ᴅ":"D",
"ᴇ":"E",
"ꜰ":"F",
"ɢ":"G",
"ʛ":"G",
"ʜ":"H",
"ɪ":"I",
"ʁ":"R",
"ᴊ":"J",
"ᴋ":"K",
"ʟ":"L",
"ᴌ":"L",
"ᴍ":"M",
"ɴ":"N",
"":"O",
"ɶ":"OE",
"ᴐ":"O",
"ᴕ":"OU",
"ᴘ":"P",
"ʀ":"R",
"ᴎ":"N",
"ᴙ":"R",
"":"S",
"ᴛ":"T",
"ⱻ":"E",
"ᴚ":"R",
"":"U",
"":"V",
"":"W",
"ʏ":"Y",
"":"Z",
"á":"a",
"ă":"a",
"ắ":"a",
"ặ":"a",
"ằ":"a",
"ẳ":"a",
"ẵ":"a",
"ǎ":"a",
"â":"a",
"ấ":"a",
"ậ":"a",
"ầ":"a",
"ẩ":"a",
"ẫ":"a",
"ä":"a",
"ǟ":"a",
"ȧ":"a",
"ǡ":"a",
"ạ":"a",
"ȁ":"a",
"à":"a",
"ả":"a",
"ȃ":"a",
"ā":"a",
"ą":"a",
"ᶏ":"a",
"ẚ":"a",
"å":"a",
"ǻ":"a",
"ḁ":"a",
"ⱥ":"a",
"ã":"a",
"ꜳ":"aa",
"æ":"ae",
"ǽ":"ae",
"ǣ":"ae",
"ꜵ":"ao",
"ꜷ":"au",
"ꜹ":"av",
"ꜻ":"av",
"ꜽ":"ay",
"ḃ":"b",
"ḅ":"b",
"ɓ":"b",
"ḇ":"b",
"ᵬ":"b",
"ᶀ":"b",
"ƀ":"b",
"ƃ":"b",
"ɵ":"o",
"ć":"c",
"č":"c",
"ç":"c",
"ḉ":"c",
"ĉ":"c",
"ɕ":"c",
"ċ":"c",
"ƈ":"c",
"ȼ":"c",
"ď":"d",
"ḑ":"d",
"ḓ":"d",
"ȡ":"d",
"ḋ":"d",
"ḍ":"d",
"ɗ":"d",
"ᶑ":"d",
"ḏ":"d",
"ᵭ":"d",
"ᶁ":"d",
"đ":"d",
"ɖ":"d",
"ƌ":"d",
"ı":"i",
"ȷ":"j",
"ɟ":"j",
"ʄ":"j",
"dz":"dz",
"dž":"dz",
"é":"e",
"ĕ":"e",
"ě":"e",
"ȩ":"e",
"ḝ":"e",
"ê":"e",
"ế":"e",
"ệ":"e",
"ề":"e",
"ể":"e",
"ễ":"e",
"ḙ":"e",
"ë":"e",
"ė":"e",
"ẹ":"e",
"ȅ":"e",
"è":"e",
"ẻ":"e",
"ȇ":"e",
"ē":"e",
"ḗ":"e",
"ḕ":"e",
"ⱸ":"e",
"ę":"e",
"ᶒ":"e",
"ɇ":"e",
"ẽ":"e",
"ḛ":"e",
"ꝫ":"et",
"ḟ":"f",
"ƒ":"f",
"ᵮ":"f",
"ᶂ":"f",
"ǵ":"g",
"ğ":"g",
"ǧ":"g",
"ģ":"g",
"ĝ":"g",
"ġ":"g",
"ɠ":"g",
"ḡ":"g",
"":"g",
"ǥ":"g",
"ḫ":"h",
"ȟ":"h",
"ḩ":"h",
"ĥ":"h",
"ⱨ":"h",
"ḧ":"h",
"ḣ":"h",
"ḥ":"h",
"ɦ":"h",
"ẖ":"h",
"ħ":"h",
"ƕ":"hv",
"í":"i",
"ĭ":"i",
"ǐ":"i",
"î":"i",
"ï":"i",
"ḯ":"i",
"ị":"i",
"ȉ":"i",
"ì":"i",
"ỉ":"i",
"ȋ":"i",
"ī":"i",
"į":"i",
"ᶖ":"i",
"ɨ":"i",
"ĩ":"i",
"ḭ":"i",
"ꝺ":"d",
"ꝼ":"f",
"ᵹ":"g",
"ꞃ":"r",
"ꞅ":"s",
"ꞇ":"t",
"ꝭ":"is",
"ǰ":"j",
"ĵ":"j",
"ʝ":"j",
"ɉ":"j",
"ḱ":"k",
"ǩ":"k",
"ķ":"k",
"ⱪ":"k",
"ꝃ":"k",
"ḳ":"k",
"ƙ":"k",
"ḵ":"k",
"ᶄ":"k",
"ꝁ":"k",
"ꝅ":"k",
"ĺ":"l",
"ƚ":"l",
"ɬ":"l",
"ľ":"l",
"ļ":"l",
"ḽ":"l",
"ȴ":"l",
"ḷ":"l",
"ḹ":"l",
"ⱡ":"l",
"ꝉ":"l",
"ḻ":"l",
"ŀ":"l",
"ɫ":"l",
"ᶅ":"l",
"ɭ":"l",
"ł":"l",
"lj":"lj",
"ſ":"s",
"ẜ":"s",
"ẛ":"s",
"":"s",
"ḿ":"m",
"ṁ":"m",
"ṃ":"m",
"ɱ":"m",
"ᵯ":"m",
"ᶆ":"m",
"ń":"n",
"ň":"n",
"ņ":"n",
"ṋ":"n",
"ȵ":"n",
"ṅ":"n",
"ṇ":"n",
"ǹ":"n",
"ɲ":"n",
"ṉ":"n",
"ƞ":"n",
"ᵰ":"n",
"ᶇ":"n",
"ɳ":"n",
"ñ":"n",
"nj":"nj",
"ó":"o",
"ŏ":"o",
"ǒ":"o",
"ô":"o",
"ố":"o",
"ộ":"o",
"ồ":"o",
"ổ":"o",
"ỗ":"o",
"ö":"o",
"ȫ":"o",
"ȯ":"o",
"ȱ":"o",
"ọ":"o",
"ő":"o",
"ȍ":"o",
"ò":"o",
"ỏ":"o",
"ơ":"o",
"ớ":"o",
"ợ":"o",
"ờ":"o",
"ở":"o",
"ỡ":"o",
"ȏ":"o",
"ꝋ":"o",
"ꝍ":"o",
"ⱺ":"o",
"ō":"o",
"ṓ":"o",
"ṑ":"o",
"ǫ":"o",
"ǭ":"o",
"ø":"o",
"ǿ":"o",
"õ":"o",
"ṍ":"o",
"ṏ":"o",
"ȭ":"o",
"ƣ":"oi",
"ꝏ":"oo",
"ɛ":"e",
"ᶓ":"e",
"ɔ":"o",
"ᶗ":"o",
"ȣ":"ou",
"ṕ":"p",
"ṗ":"p",
"ꝓ":"p",
"ƥ":"p",
"ᵱ":"p",
"ᶈ":"p",
"ꝕ":"p",
"ᵽ":"p",
"ꝑ":"p",
"ꝙ":"q",
"ʠ":"q",
"ɋ":"q",
"ꝗ":"q",
"ŕ":"r",
"ř":"r",
"ŗ":"r",
"ṙ":"r",
"ṛ":"r",
"ṝ":"r",
"ȑ":"r",
"ɾ":"r",
"ᵳ":"r",
"ȓ":"r",
"ṟ":"r",
"ɼ":"r",
"ᵲ":"r",
"ᶉ":"r",
"ɍ":"r",
"ɽ":"r",
"ↄ":"c",
"ꜿ":"c",
"ɘ":"e",
"ɿ":"r",
"ś":"s",
"ṥ":"s",
"š":"s",
"ṧ":"s",
"ş":"s",
"ŝ":"s",
"ș":"s",
"ṡ":"s",
"ṣ":"s",
"ṩ":"s",
"ʂ":"s",
"ᵴ":"s",
"ᶊ":"s",
"ȿ":"s",
"ɡ":"g",
"":"o",
"ᴓ":"o",
"ᴝ":"u",
"ť":"t",
"ţ":"t",
"ṱ":"t",
"ț":"t",
"ȶ":"t",
"ẗ":"t",
"ⱦ":"t",
"ṫ":"t",
"ṭ":"t",
"ƭ":"t",
"ṯ":"t",
"ᵵ":"t",
"ƫ":"t",
"ʈ":"t",
"ŧ":"t",
"ᵺ":"th",
"ɐ":"a",
"ᴂ":"ae",
"ǝ":"e",
"ᵷ":"g",
"ɥ":"h",
"ʮ":"h",
"ʯ":"h",
"ᴉ":"i",
"ʞ":"k",
"ꞁ":"l",
"ɯ":"m",
"ɰ":"m",
"ᴔ":"oe",
"ɹ":"r",
"ɻ":"r",
"ɺ":"r",
"ⱹ":"r",
"ʇ":"t",
"ʌ":"v",
"ʍ":"w",
"ʎ":"y",
"ꜩ":"tz",
"ú":"u",
"ŭ":"u",
"ǔ":"u",
"û":"u",
"ṷ":"u",
"ü":"u",
"ǘ":"u",
"ǚ":"u",
"ǜ":"u",
"ǖ":"u",
"ṳ":"u",
"ụ":"u",
"ű":"u",
"ȕ":"u",
"ù":"u",
"ủ":"u",
"ư":"u",
"ứ":"u",
"ự":"u",
"ừ":"u",
"ử":"u",
"ữ":"u",
"ȗ":"u",
"ū":"u",
"ṻ":"u",
"ų":"u",
"ᶙ":"u",
"ů":"u",
"ũ":"u",
"ṹ":"u",
"ṵ":"u",
"ᵫ":"ue",
"":"um",
"ⱴ":"v",
"ꝟ":"v",
"ṿ":"v",
"ʋ":"v",
"":"v",
"ⱱ":"v",
"ṽ":"v",
"ꝡ":"vy",
"ẃ":"w",
"ŵ":"w",
"ẅ":"w",
"ẇ":"w",
"ẉ":"w",
"ẁ":"w",
"ⱳ":"w",
"ẘ":"w",
"ẍ":"x",
"ẋ":"x",
"ᶍ":"x",
"ý":"y",
"ŷ":"y",
"ÿ":"y",
"ẏ":"y",
"ỵ":"y",
"ỳ":"y",
"ƴ":"y",
"ỷ":"y",
"ỿ":"y",
"ȳ":"y",
"ẙ":"y",
"ɏ":"y",
"ỹ":"y",
"ź":"z",
"ž":"z",
"ẑ":"z",
"ʑ":"z",
"ⱬ":"z",
"ż":"z",
"ẓ":"z",
"ȥ":"z",
"ẕ":"z",
"ᵶ":"z",
"ᶎ":"z",
"ʐ":"z",
"ƶ":"z",
"ɀ":"z",
"ff":"ff",
"ffi":"ffi",
"ffl":"ffl",
"fi":"fi",
"fl":"fl",
"ij":"ij",
"œ":"oe",
"st":"st",
"ₐ":"a",
"ₑ":"e",
"ᵢ":"i",
"ⱼ":"j",
"ₒ":"o",
"ᵣ":"r",
"ᵤ":"u",
"ᵥ":"v",
"ₓ":"x",
"Ё":"YO",
"Й":"I",
"Ц":"TS",
"У":"U",
"К":"K",
"Е":"E",
"Н":"N",
"Г":"G",
"Ш":"SH",
"Щ":"SCH",
"З":"Z",
"Х":"H",
"Ъ":"'",
"ё":"yo",
"й":"i",
"ц":"ts",
"у":"u",
"к":"k",
"е":"e",
"н":"n",
"г":"g",
"ш":"sh",
"щ":"sch",
"з":"z",
"х":"h",
"ъ":"'",
"Ф":"F",
"Ы":"I",
"В":"V",
"А":"a",
"П":"P",
"Р":"R",
"О":"O",
"Л":"L",
"Д":"D",
"Ж":"ZH",
"Э":"E",
"ф":"f",
"ы":"i",
"в":"v",
"а":"a",
"п":"p",
"р":"r",
"о":"o",
"л":"l",
"д":"d",
"ж":"zh",
"э":"e",
"Я":"Ya",
"Ч":"CH",
"С":"S",
"М":"M",
"И":"I",
"Т":"T",
"Ь":"'",
"Б":"B",
"Ю":"YU",
"я":"ya",
"ч":"ch",
"с":"s",
"м":"m",
"и":"i",
"т":"t",
"ь":"'",
"б":"b",
"ю":"yu"
};
exports.transliterate = function(str) {
return str.replace(/[^A-Za-z0-9\[\] ]/g,function(ch) {
return exports.transliterationPairs[ch] || ch
});
};
})();

View File

@@ -12,11 +12,43 @@ Various static utility functions.
/*global $tw: false */
"use strict";
/*
Display a message, in colour if we're on a terminal
*/
exports.log = function(text,colour) {
console.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);
};
exports.terminalColour = function(colour) {
if(!$tw.browser && $tw.node && process.stdout.isTTY) {
if(colour) {
var code = exports.terminalColourLookup[colour];
if(code) {
return "\x1b[" + code + "m";
}
} else {
return "\x1b[0m"; // Cancel colour
}
}
return "";
};
exports.terminalColourLookup = {
"black": "0;30",
"red": "0;31",
"green": "0;32",
"brown/orange": "0;33",
"blue": "0;34",
"purple": "0;35",
"cyan": "0;36",
"light gray": "0;37"
};
/*
Display a warning, in colour if we're on a terminal
*/
exports.warning = function(text) {
console.log($tw.node ? "\x1b[1;33m" + text + "\x1b[0m" : text);
exports.log(text,"brown/orange");
};
/*
@@ -267,6 +299,9 @@ exports.formatDateString = function(date,template) {
[/^0ss/, function() {
return $tw.utils.pad(date.getSeconds());
}],
[/^0XXX/, function() {
return $tw.utils.pad(date.getMilliseconds());
}],
[/^0DD/, function() {
return $tw.utils.pad(date.getDate());
}],
@@ -308,6 +343,9 @@ exports.formatDateString = function(date,template) {
[/^ss/, function() {
return date.getSeconds();
}],
[/^XXX/, function() {
return date.getMilliseconds();
}],
[/^[AP]M/, function() {
return $tw.utils.getAmPm(date).toUpperCase();
}],
@@ -324,6 +362,16 @@ exports.formatDateString = function(date,template) {
return $tw.utils.pad(date.getFullYear() - 2000);
}]
];
// If the user wants everything in UTC, shift the datestamp
// Optimize for format string that essentially means
// 'return raw UTC (tiddlywiki style) date string.'
if(t.indexOf("[UTC]") == 0 ) {
if(t == "[UTC]YYYY0MM0DD0hh0mm0ssXXX")
return $tw.utils.stringifyDate(new Date());
var offset = date.getTimezoneOffset() ; // in minutes
date = new Date(date.getTime()+offset*60*1000) ;
t = t.substr(5) ;
}
while(t.length){
var matchString = "";
$tw.utils.each(matches, function(m) {
@@ -495,7 +543,24 @@ exports.stringify = function(s) {
.replace(/'/g, "\\'") // single quote character
.replace(/\r/g, '\\r') // carriage return
.replace(/\n/g, '\\n') // line feed
.replace(/[\x80-\uFFFF]/g, exports.escape); // non-ASCII characters
.replace(/[\x00-\x1f\x80-\uFFFF]/g, exports.escape); // non-ASCII characters
};
// Turns a string into a legal JSON string
// Derived from peg.js, thanks to David Majda
exports.jsonStringify = function(s) {
// See http://www.json.org/
return (s || "")
.replace(/\\/g, '\\\\') // backslash
.replace(/"/g, '\\"') // double quote character
.replace(/\r/g, '\\r') // carriage return
.replace(/\n/g, '\\n') // line feed
.replace(/\x08/g, '\\b') // backspace
.replace(/\x0c/g, '\\f') // formfeed
.replace(/\t/g, '\\t') // tab
.replace(/[\x00-\x1f\x80-\uFFFF]/g,function(s) {
return '\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);
}); // non-ASCII characters
};
/*
@@ -726,82 +791,4 @@ exports.strEndsWith = function(str,ending,position) {
}
};
/*
Transliterate string from eg. Cyrillic Russian to Latin
*/
var transliterationPairs = {
"Ё":"YO",
"Й":"I",
"Ц":"TS",
"У":"U",
"К":"K",
"Е":"E",
"Н":"N",
"Г":"G",
"Ш":"SH",
"Щ":"SCH",
"З":"Z",
"Х":"H",
"Ъ":"'",
"ё":"yo",
"й":"i",
"ц":"ts",
"у":"u",
"к":"k",
"е":"e",
"н":"n",
"г":"g",
"ш":"sh",
"щ":"sch",
"з":"z",
"х":"h",
"ъ":"'",
"Ф":"F",
"Ы":"I",
"В":"V",
"А":"a",
"П":"P",
"Р":"R",
"О":"O",
"Л":"L",
"Д":"D",
"Ж":"ZH",
"Э":"E",
"ф":"f",
"ы":"i",
"в":"v",
"а":"a",
"п":"p",
"р":"r",
"о":"o",
"л":"l",
"д":"d",
"ж":"zh",
"э":"e",
"Я":"Ya",
"Ч":"CH",
"С":"S",
"М":"M",
"И":"I",
"Т":"T",
"Ь":"'",
"Б":"B",
"Ю":"YU",
"я":"ya",
"ч":"ch",
"с":"s",
"м":"m",
"и":"i",
"т":"t",
"ь":"'",
"б":"b",
"ю":"yu"
};
exports.transliterate = function(str) {
return str.split("").map(function(char) {
return transliterationPairs[char] || char;
}).join("");
};
})();

View File

@@ -46,17 +46,23 @@ BrowseWidget.prototype.render = function(parent,nextSibling) {
if(this.nwsaveas) {
domNode.setAttribute("nwsaveas",this.nwsaveas);
}
// Nw.js supports "webkitdirectory" to allow a directory to be selected
// Nw.js supports "webkitdirectory" and "nwdirectory" to allow a directory to be selected
if(this.webkitdirectory) {
domNode.setAttribute("webkitdirectory",this.webkitdirectory);
}
if(this.nwdirectory) {
domNode.setAttribute("nwdirectory",this.nwdirectory);
}
// Add a click event handler
domNode.addEventListener("change",function (event) {
if(self.message) {
self.dispatchEvent({type: self.message, param: self.param, files: event.target.files});
} else {
self.wiki.readFiles(event.target.files,function(tiddlerFieldsArray) {
self.dispatchEvent({type: "tm-import-tiddlers", param: JSON.stringify(tiddlerFieldsArray)});
self.wiki.readFiles(event.target.files,{
callback: function(tiddlerFieldsArray) {
self.dispatchEvent({type: "tm-import-tiddlers", param: JSON.stringify(tiddlerFieldsArray)});
},
deserializer: self.deserializer
});
}
return false;
@@ -72,11 +78,13 @@ Compute the internal state of the widget
*/
BrowseWidget.prototype.execute = function() {
this.browseMultiple = this.getAttribute("multiple");
this.deserializer = this.getAttribute("deserializer");
this.message = this.getAttribute("message");
this.param = this.getAttribute("param");
this.tooltip = this.getAttribute("tooltip");
this.nwsaveas = this.getAttribute("nwsaveas");
this.webkitdirectory = this.getAttribute("webkitdirectory");
this.nwdirectory = this.getAttribute("nwdirectory");
};
/*

View File

@@ -104,7 +104,10 @@ DropZoneWidget.prototype.handleDragLeaveEvent = function(event) {
};
DropZoneWidget.prototype.handleDropEvent = function(event) {
var self = this;
var self = this,
readFileCallback = function(tiddlerFieldsArray) {
self.dispatchEvent({type: "tm-import-tiddlers", param: JSON.stringify(tiddlerFieldsArray)});
};
this.leaveDrag(event);
// Check for being over a TEXTAREA or INPUT
if(["TEXTAREA","INPUT"].indexOf(event.target.tagName) !== -1) {
@@ -121,15 +124,14 @@ DropZoneWidget.prototype.handleDropEvent = function(event) {
// Import any files in the drop
var numFiles = 0;
if(dataTransfer.files) {
numFiles = this.wiki.readFiles(dataTransfer.files,function(tiddlerFieldsArray) {
self.dispatchEvent({type: "tm-import-tiddlers", param: JSON.stringify(tiddlerFieldsArray)});
numFiles = this.wiki.readFiles(dataTransfer.files,{
callback: readFileCallback,
deserializer: this.dropzoneDeserializer
});
}
// Try to import the various data types we understand
if(numFiles === 0) {
$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle("Untitled"),function(fieldsArray) {
self.dispatchEvent({type: "tm-import-tiddlers", param: JSON.stringify(fieldsArray)});
});
$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle("Untitled"),readFileCallback);
}
// Tell the browser that we handled the drop
event.preventDefault();
@@ -138,6 +140,10 @@ DropZoneWidget.prototype.handleDropEvent = function(event) {
};
DropZoneWidget.prototype.handlePasteEvent = function(event) {
var self = this,
readFileCallback = function(tiddlerFieldsArray) {
self.dispatchEvent({type: "tm-import-tiddlers", param: JSON.stringify(tiddlerFieldsArray)});
};
// Let the browser handle it if we're in a textarea or input box
if(["TEXTAREA","INPUT"].indexOf(event.target.tagName) == -1) {
var self = this,
@@ -147,8 +153,9 @@ DropZoneWidget.prototype.handlePasteEvent = function(event) {
var item = items[t];
if(item.kind === "file") {
// Import any files
this.wiki.readFile(item.getAsFile(),function(tiddlerFieldsArray) {
self.dispatchEvent({type: "tm-import-tiddlers", param: JSON.stringify(tiddlerFieldsArray)});
this.wiki.readFile(item.getAsFile(),{
callback: readFileCallback,
deserializer: this.dropzoneDeserializer
});
} else if(item.kind === "string") {
// Create tiddlers from string items
@@ -176,6 +183,7 @@ DropZoneWidget.prototype.handlePasteEvent = function(event) {
Compute the internal state of the widget
*/
DropZoneWidget.prototype.execute = function() {
this.dropzoneDeserializer = this.getAttribute("deserializer");
// Make child widgets
this.makeChildWidgets();
};

View File

@@ -109,28 +109,28 @@ FieldManglerWidget.prototype.handleAddFieldEvent = function(event) {
};
FieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {
var tiddler = this.wiki.getTiddler(this.mangleTitle);
var tiddler = this.wiki.getTiddler(this.mangleTitle),
modification = this.wiki.getModificationFields();
if(tiddler && tiddler.fields.tags) {
var p = tiddler.fields.tags.indexOf(event.param);
if(p !== -1) {
var modification = this.wiki.getModificationFields();
modification.tags = (tiddler.fields.tags || []).slice(0);
modification.tags.splice(p,1);
if(modification.tags.length === 0) {
modification.tags = undefined;
}
this.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));
this.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));
}
}
return true;
};
FieldManglerWidget.prototype.handleAddTagEvent = function(event) {
var tiddler = this.wiki.getTiddler(this.mangleTitle);
var tiddler = this.wiki.getTiddler(this.mangleTitle),
modification = this.wiki.getModificationFields();
if(tiddler && typeof event.param === "string") {
var tag = event.param.trim();
if(tag !== "") {
var modification = this.wiki.getModificationFields();
modification.tags = (tiddler.fields.tags || []).slice(0);
$tw.utils.pushTop(modification.tags,tag);
this.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));
@@ -138,7 +138,7 @@ FieldManglerWidget.prototype.handleAddTagEvent = function(event) {
} else if(typeof event.param === "string" && event.param.trim() !== "" && this.mangleTitle.trim() !== "") {
var tag = [];
tag.push(event.param.trim());
this.wiki.addTiddler({title: this.mangleTitle, tags: tag});
this.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));
}
return true;
};

View File

@@ -80,14 +80,26 @@ LinkWidget.prototype.renderLink = function(parent,nextSibling) {
}
domNode.setAttribute("class",classes.join(" "));
// Set an href
var wikiLinkTemplateMacro = this.getVariable("tv-wikilink-template"),
wikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : "#$uri_encoded$",
var wikilinkTransformFilter = this.getVariable("tv-filter-export-link"),
wikiLinkText;
if(wikilinkTransformFilter) {
// Use the filter to construct the href
wikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {
iterator(self.wiki.getTiddler(self.to),self.to)
})[0];
} else {
// Expand the tv-wikilink-template variable to construct the href
var wikiLinkTemplateMacro = this.getVariable("tv-wikilink-template"),
wikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : "#$uri_encoded$";
wikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,"$uri_encoded$",encodeURIComponent(this.to));
wikiLinkText = $tw.utils.replaceString(wikiLinkText,"$uri_doubleencoded$",encodeURIComponent(encodeURIComponent(this.to)));
wikiLinkText = $tw.utils.replaceString(wikiLinkText,"$uri_doubleencoded$",encodeURIComponent(encodeURIComponent(this.to)));
}
// Override with the value of tv-get-export-link if defined
wikiLinkText = this.getVariable("tv-get-export-link",{params: [{name: "to",value: this.to}],defaultValue: wikiLinkText});
if(tag === "a") {
domNode.setAttribute("href",wikiLinkText);
}
// Set the tabindex
if(this.tabIndex) {
domNode.setAttribute("tabindex",this.tabIndex);
}
@@ -135,7 +147,11 @@ LinkWidget.prototype.handleClickEvent = function(event) {
navigateFromNode: this,
navigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height
},
navigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)
navigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),
metaKey: event.metaKey,
ctrlKey: event.ctrlKey,
altKey: event.altKey,
shiftKey: event.shiftKey
});
if(this.domNodes[0].hasAttribute("href")) {
event.preventDefault();

View File

@@ -48,6 +48,8 @@ LinkCatcherWidget.prototype.execute = function() {
this.catchActions = this.getAttribute("actions");
// Construct the child widgets
this.makeChildWidgets();
// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively
this.executingActions = false;
};
/*
@@ -67,23 +69,35 @@ LinkCatcherWidget.prototype.refresh = function(changedTiddlers) {
Handle a tm-navigate event
*/
LinkCatcherWidget.prototype.handleNavigateEvent = function(event) {
if(this.catchTo) {
this.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable("currentTiddler"));
}
if(this.catchMessage && this.parentWidget) {
if(!this.executingActions) {
// Execute the actions
if(this.catchTo) {
this.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable("currentTiddler"));
}
if(this.catchMessage && this.parentWidget) {
this.parentWidget.dispatchEvent({
type: this.catchMessage,
param: event.navigateTo,
navigateTo: event.navigateTo
});
}
if(this.catchSet) {
var tiddler = this.wiki.getTiddler(this.catchSet);
this.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));
}
if(this.catchActions) {
this.executingActions = true;
this.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo});
this.executingActions = false;
}
} else {
// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent
this.parentWidget.dispatchEvent({
type: this.catchMessage,
type: "tm-navigate",
param: event.navigateTo,
navigateTo: event.navigateTo
});
}
if(this.catchSet) {
var tiddler = this.wiki.getTiddler(this.catchSet);
this.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));
}
if(this.catchActions) {
this.invokeActionString(this.catchActions,this);
}
return false;
};

View File

@@ -60,6 +60,8 @@ NavigatorWidget.prototype.execute = function() {
// Get our parameters
this.storyTitle = this.getAttribute("story");
this.historyTitle = this.getAttribute("history");
this.setVariable("tv-story-list",this.storyTitle);
this.setVariable("tv-history-list",this.historyTitle);
// Construct the child widgets
this.makeChildWidgets();
};
@@ -209,6 +211,10 @@ NavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {
// Place a tiddler in edit mode
NavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {
var editTiddler = $tw.hooks.invokeHook("th-editing-tiddler",event);
if(!editTiddler) {
return false;
}
var self = this;
function isUnmodifiedShadow(title) {
return self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);
@@ -452,6 +458,13 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
if(additionalFields && additionalFields.title) {
title = additionalFields.title;
}
// Make a copy of the additional fields excluding any blank ones
var filteredAdditionalFields = $tw.utils.extend({},additionalFields);
Object.keys(filteredAdditionalFields).forEach(function(fieldName) {
if(filteredAdditionalFields[fieldName] === "") {
delete filteredAdditionalFields[fieldName];
}
});
// Generate a title if we don't have one
title = title || this.wiki.generateNewTitle($tw.language.getString("DefaultNewTiddlerTitle"));
// Find any existing draft for this tiddler
@@ -482,8 +495,9 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
"draft.title": title
},
templateTiddler,
existingTiddler,
additionalFields,
existingTiddler,
filteredAdditionalFields,
this.wiki.getCreationFields(),
{
title: draftTitle,
@@ -497,7 +511,7 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
storyList.splice(slot + 1,0,draftTitle);
}
if(storyList.indexOf(title) !== -1) {
storyList.splice(storyList.indexOf(title),1);
storyList.splice(storyList.indexOf(title),1);
}
this.saveStoryList(storyList);
// Add a new record to the top of the history stack
@@ -510,7 +524,7 @@ NavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {
// Get the tiddlers
var tiddlers = [];
try {
tiddlers = JSON.parse(event.param);
tiddlers = JSON.parse(event.param);
} catch(e) {
}
// Get the current $:/Import tiddler
@@ -526,6 +540,7 @@ NavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {
// Process each tiddler
importData.tiddlers = importData.tiddlers || {};
$tw.utils.each(tiddlers,function(tiddlerFields) {
tiddlerFields.title = $tw.utils.trim(tiddlerFields.title);
var title = tiddlerFields.title;
if(title) {
incomingTiddlers.push(title);
@@ -563,7 +578,7 @@ NavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {
return false;
};
//
//
NavigatorWidget.prototype.handlePerformImportEvent = function(event) {
var self = this,
importTiddler = this.wiki.getTiddler(event.param),

View File

@@ -41,6 +41,9 @@ SetWidget.prototype.execute = function() {
this.setName = this.getAttribute("name","currentTiddler");
this.setFilter = this.getAttribute("filter");
this.setSelect = this.getAttribute("select");
this.setTiddler = this.getAttribute("tiddler");
this.setField = this.getAttribute("field");
this.setIndex = this.getAttribute("index");
this.setValue = this.getAttribute("value");
this.setEmptyValue = this.getAttribute("emptyValue");
// Set context variable
@@ -54,7 +57,18 @@ Get the value to be assigned
*/
SetWidget.prototype.getValue = function() {
var value = this.setValue;
if(this.setFilter) {
if(this.setTiddler) {
var tiddler = this.wiki.getTiddler(this.setTiddler);
if(!tiddler) {
value = this.setEmptyValue;
} else if(this.setField) {
value = tiddler.getFieldString(this.setField) || this.setEmptyValue;
} else if(this.setIndex) {
value = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);
} else {
value = tiddler.fields.text || this.setEmptyValue ;
}
} else if(this.setFilter) {
var results = this.wiki.filterTiddlers(this.setFilter,this);
if(!this.setValue) {
var select;
@@ -73,7 +87,7 @@ SetWidget.prototype.getValue = function() {
} else if(!value && this.setEmptyValue) {
value = this.setEmptyValue;
}
return value;
return value || "";
};
/*
@@ -81,7 +95,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
*/
SetWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
if(changedAttributes.name || changedAttributes.filter || changedAttributes.select ||changedAttributes.value || changedAttributes.emptyValue ||
if(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||
(this.setFilter && this.getValue() != this.variables[this.setName].value)) {
this.refreshSelf();
return true;

View File

@@ -51,15 +51,16 @@ ViewWidget.prototype.execute = function() {
this.viewIndex = this.getAttribute("index");
this.viewFormat = this.getAttribute("format","text");
this.viewTemplate = this.getAttribute("template","");
this.viewMode = this.getAttribute("mode","block");
switch(this.viewFormat) {
case "htmlwikified":
this.text = this.getValueAsHtmlWikified();
this.text = this.getValueAsHtmlWikified(this.viewMode);
break;
case "plainwikified":
this.text = this.getValueAsPlainWikified();
this.text = this.getValueAsPlainWikified(this.viewMode);
break;
case "htmlencodedplainwikified":
this.text = this.getValueAsHtmlEncodedPlainWikified();
this.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);
break;
case "htmlencoded":
this.text = this.getValueAsHtmlEncoded();
@@ -134,16 +135,25 @@ ViewWidget.prototype.getValueAsText = function() {
return this.getValue({asString: true});
};
ViewWidget.prototype.getValueAsHtmlWikified = function() {
return this.wiki.renderText("text/html","text/vnd.tiddlywiki",this.getValueAsText(),{parentWidget: this});
ViewWidget.prototype.getValueAsHtmlWikified = function(mode) {
return this.wiki.renderText("text/html","text/vnd.tiddlywiki",this.getValueAsText(),{
parseAsInline: mode !== "block",
parentWidget: this
});
};
ViewWidget.prototype.getValueAsPlainWikified = function() {
return this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{parentWidget: this});
ViewWidget.prototype.getValueAsPlainWikified = function(mode) {
return this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{
parseAsInline: mode !== "block",
parentWidget: this
});
};
ViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function() {
return $tw.utils.htmlEncode(this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{parentWidget: this}));
ViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {
return $tw.utils.htmlEncode(this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{
parseAsInline: mode !== "block",
parentWidget: this
}));
};
ViewWidget.prototype.getValueAsHtmlEncoded = function() {

View File

@@ -1125,16 +1125,24 @@ exports.checkTiddlerText = function(title,targetText,options) {
/*
Read an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read
*/
exports.readFiles = function(files,callback) {
exports.readFiles = function(files,options) {
var callback;
if(typeof options === "function") {
callback = options;
options = {};
} else {
callback = options.callback;
}
var result = [],
outstanding = files.length;
for(var f=0; f<files.length; f++) {
this.readFile(files[f],function(tiddlerFieldsArray) {
outstanding = files.length,
readFileCallback = function(tiddlerFieldsArray) {
result.push.apply(result,tiddlerFieldsArray);
if(--outstanding === 0) {
callback(result);
}
});
};
for(var f=0; f<files.length; f++) {
this.readFile(files[f],Object.assign({},options,{callback: readFileCallback}));
}
return files.length;
};
@@ -1142,7 +1150,14 @@ exports.readFiles = function(files,callback) {
/*
Read a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects
*/
exports.readFile = function(file,callback) {
exports.readFile = function(file,options) {
var callback;
if(typeof options === "function") {
callback = options;
options = {};
} else {
callback = options.callback;
}
// Get the type, falling back to the filename extension
var self = this,
type = file.type;
@@ -1162,6 +1177,22 @@ exports.readFile = function(file,callback) {
if($tw.log.IMPORT) {
console.log("Importing file '" + file.name + "', type: '" + type + "', isBinary: " + isBinary);
}
// Give the hook a chance to process the drag
if($tw.hooks.invokeHook("th-importing-file",{
file: file,
type: type,
isBinary: isBinary,
callback: callback
}) !== true) {
this.readFileContent(file,type,isBinary,options.deserializer,callback);
}
};
/*
Lower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects
*/
exports.readFileContent = function(file,type,isBinary,deserializer,callback) {
var self = this;
// Create the FileReader
var reader = new FileReader();
// Onload
@@ -1183,7 +1214,7 @@ exports.readFile = function(file,callback) {
});
} else {
// Otherwise, just try to deserialise any tiddlers in the file
callback(self.deserializeTiddlers(type,text,tiddlerFields));
callback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));
}
};
// Kick off the read

View File

@@ -2,4 +2,4 @@ title: $:/core/templates/MOTW.html
\rules only filteredtranscludeinline transcludeinline entity
<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->
<!-- saved from url=(0021)http://tiddlywiki.com -->&#13;&#10;
<!-- saved from url=(0021)https://tiddlywiki.com -->&#13;&#10;

View File

@@ -0,0 +1,8 @@
title: $:/core/templates/canonical-uri-external-raw
<!--
This template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory
-->
<$view field="title" format="doubleurlencoded"/>

View File

@@ -1,8 +1,7 @@
title: $:/core/templates/static.content
type: text/vnd.tiddlywiki
<!-- For Google, and people without JavaScript-->
This [[TiddlyWiki|http://tiddlywiki.com]] contains the following tiddlers:
This [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:
<ul>
<$list filter=<<saveTiddlerFilter>>>

View File

@@ -78,14 +78,9 @@ $:/config/Plugins/Disabled/$(currentTiddler)$
</$reveal>
</div>
</$list>
<$reveal type="nomatch" text="" state="!!list">
<$set name="tabsList" filter="[<currentTiddler>list[]] contents">
<$macrocall $name="tabs" state=<<tabs-state-macro>> tabsList=<<tabsList>> default="readme" template="$:/core/ui/PluginInfo"/>
<$macrocall $name="tabs" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template="$:/core/ui/PluginInfo"/>
</$set>
</$reveal>
<$reveal type="match" text="" state="!!list">
<<lingo NoInformation/Hint>>
</$reveal>
</div>
</div>
</$reveal>

View File

@@ -17,7 +17,9 @@ tc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerCl
<$keyboard key="((cancel-edit-tiddler))" message="tm-cancel-tiddler">
<$keyboard key="((save-tiddler))" actions=<<actions>>>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]" variable="listItem">
<$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]">
<$transclude tiddler=<<listItem>>/>
</$set>
</$list>
</$keyboard>
</$keyboard>

View File

@@ -16,5 +16,4 @@ description: {{$:/language/Buttons/Save/Hint}}
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Save/Caption}}/></span>
</$list>
</$button>
</$fieldmangler>
</$button></$fieldmangler>

View File

@@ -0,0 +1,5 @@
title: $:/core/ui/MoreSideBar/Explorer
tags: $:/tags/MoreSideBar
caption: {{$:/language/SideBar/Explorer/Caption}}
<<tree "$:/">>

View File

@@ -6,7 +6,9 @@ $:/config/PageControlButtons/Visibility/$(listItem)$
<div class="tc-page-controls">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">
<$reveal type="nomatch" state=<<config-title>> text="hide">
<$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]">
<$transclude tiddler=<<listItem>> mode="inline"/>
</$set>
</$reveal>
</$list>
</div>

View File

@@ -27,8 +27,12 @@ $:/config/PageControlButtons/Visibility/$(listItem)$
<$reveal type="match" state=<<config-title>> text="hide">
<$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]">
<$transclude tiddler=<<listItem>> mode="inline"/>
</$set>
</$reveal>
</$list>

View File

@@ -17,7 +17,7 @@ $:/config/PageControlButtons/Visibility/$(listItem)$
<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">
<div style="position:relative;">
<div style="position:relative;" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>
<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show"/> <$transclude tiddler=<<listItem>>/> <i class="tc-muted"><$transclude tiddler=<<listItem>> field="description"/></i>

View File

@@ -10,7 +10,7 @@ $:/config/ViewToolbarButtons/Visibility/$(listItem)$
<div class="tc-tiddler-title">
<div class="tc-titlebar">
<span class="tc-tiddler-controls">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]" variable="listItem"><$reveal type="nomatch" state=<<config-title>> text="hide"><$transclude tiddler=<<listItem>>/></$reveal></$list>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]" variable="listItem"><$reveal type="nomatch" state=<<config-title>> text="hide"><$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>
</span>
<$set name="tv-wikilinks" value={{$:/config/Tiddlers/TitleLinks}}>
<$link>

View File

@@ -3,11 +3,15 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}
description: {{$:/language/Buttons/Clone/Hint}}
\whitespace trim
<$button message="tm-new-tiddler" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/clone-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Clone/Caption}}/></span>
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/Clone/Caption}}/>
</span>
</$list>
</$button>

View File

@@ -3,11 +3,15 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}
description: {{$:/language/Buttons/CloseOthers/Hint}}
\whitespace trim
<$button message="tm-close-other-tiddlers" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/close-others-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/CloseOthers/Caption}}/></span>
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>
</span>
</$list>
</$button>

View File

@@ -3,11 +3,14 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}
description: {{$:/language/Buttons/Close/Hint}}
\whitespace trim
<$button message="tm-close-tiddler" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/close-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Close/Caption}}/></span>
<span class="tc-btn-text">
<$text text={{$:/language/Buttons/Close/Caption}}/>
</span>
</$list>
</$button>

View File

@@ -3,11 +3,15 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}
description: {{$:/language/Buttons/Edit/Hint}}
\whitespace trim
<$button message="tm-edit-tiddler" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/edit-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Edit/Caption}}/></span>
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/Edit/Caption}}/>
</span>
</$list>
</$button>

View File

@@ -3,12 +3,16 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}
description: {{$:/language/Buttons/FoldOthers/Hint}}
\whitespace trim
<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>
<$action-sendmessage $message="tm-fold-other-tiddlers" $param=<<currentTiddler>> foldedStatePrefix="$:/state/folded/"/>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]" variable="listItem">
{{$:/core/images/fold-others-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/FoldOthers/Caption}}/></span>
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>
</span>
</$list>
</$button>

View File

@@ -3,24 +3,32 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}
description: {{$:/language/Buttons/Fold/Hint}}
<$reveal type="nomatch" state=<<folded-state>> text="hide" default="show"><$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>
\whitespace trim
<$reveal type="nomatch" state=<<folded-state>> text="hide" default="show">
<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>
<$action-sendmessage $message="tm-fold-tiddler" $param=<<currentTiddler>> foldedState=<<folded-state>>/>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]" variable="listItem">
{{$:/core/images/fold-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/Fold/Caption}}/>
</span>
</$list>
</$button></$reveal><$reveal type="match" state=<<folded-state>> text="hide" default="show"><$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>
</$button>
</$reveal>
<$reveal type="match" state=<<folded-state>> text="hide" default="show">
<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>
<$action-sendmessage $message="tm-fold-tiddler" $param=<<currentTiddler>> foldedState=<<folded-state>>/>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]" variable="listItem">
{{$:/core/images/unfold-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/Unfold/Caption}}/>
</span>
</$list>
</$button></$reveal>
</$button>
</$reveal>

View File

@@ -3,12 +3,15 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}
description: {{$:/language/Buttons/Info/Hint}}
\whitespace trim
\define button-content()
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/info-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Info/Caption}}/></span>
<span class="tc-btn-text">
<$text text={{$:/language/Buttons/Info/Caption}}/>
</span>
</$list>
\end
<$reveal state="$:/config/TiddlerInfo/Mode" type="match" text="popup">

View File

@@ -3,6 +3,7 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}
description: {{$:/language/Buttons/More/Hint}}
\whitespace trim
\define config-title()
$:/config/ViewToolbarButtons/Visibility/$(listItem)$
\end
@@ -11,9 +12,13 @@ $:/config/ViewToolbarButtons/Visibility/$(listItem)$
{{$:/core/images/down-arrow}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/More/Caption}}/></span>
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/More/Caption}}/>
</span>
</$list>
</$button><$reveal state=<<qualify "$:/state/popup/more">> type="popup" position="below" animate="yes">
</$button>
<$reveal state=<<qualify "$:/state/popup/more">> type="popup" position="below" animate="yes">
<div class="tc-drop-down">
@@ -27,8 +32,12 @@ $:/config/ViewToolbarButtons/Visibility/$(listItem)$
<$reveal type="match" state=<<config-title>> text="hide">
<$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]">
<$transclude tiddler=<<listItem>> mode="inline"/>
</$set>
</$reveal>
</$list>

View File

@@ -3,6 +3,7 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}
description: {{$:/language/Buttons/NewHere/Hint}}
\whitespace trim
\define newHereButtonTags()
[[$(currentTiddler)$]]
\end
@@ -13,7 +14,9 @@ description: {{$:/language/Buttons/NewHere/Hint}}
{{$:/core/images/new-here-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/NewHere/Caption}}/></span>
<span class="tc-btn-text">
<$text text={{$:/language/Buttons/NewHere/Caption}}/>
</span>
</$list>
</$button>
\end

View File

@@ -3,6 +3,7 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}
description: {{$:/language/Buttons/NewJournalHere/Hint}}
\whitespace trim
\define journalButtonTags()
[[$(currentTiddlerTag)$]] $(journalTags)$
\end
@@ -13,7 +14,9 @@ description: {{$:/language/Buttons/NewJournalHere/Hint}}
{{$:/core/images/new-journal-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/NewJournalHere/Caption}}/></span>
<span class="tc-btn-text">
<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>
</span>
</$list>
</$button>
\end
@@ -21,4 +24,6 @@ description: {{$:/language/Buttons/NewJournalHere/Hint}}
<$set name="journalTags" value={{$:/config/NewJournal/Tags}}>
<$set name="currentTiddlerTag" value=<<currentTiddler>>>
<<journalButton>>
</$set></$set></$set>
</$set>
</$set>
</$set>

View File

@@ -3,11 +3,15 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}
description: {{$:/language/Buttons/OpenWindow/Hint}}
\whitespace trim
<$button message="tm-open-window" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/open-window}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/OpenWindow/Caption}}/></span>
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>
</span>
</$list>
</$button>

View File

@@ -3,11 +3,15 @@ tags: $:/tags/ViewToolbar
caption: {{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}
description: {{$:/language/Buttons/Permalink/Hint}}
\whitespace trim
<$button message="tm-permalink" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/permalink-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Permalink/Caption}}/></span>
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/Permalink/Caption}}/>
</span>
</$list>
</$button>

View File

@@ -3,11 +3,15 @@ tags: $:/tags/ViewToolbar $:/tags/PageControls
caption: {{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}
description: {{$:/language/Buttons/Permaview/Hint}}
\whitespace trim
<$button message="tm-permaview" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/permaview-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Permaview/Caption}}/></span>
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/Permaview/Caption}}/>
</span>
</$list>
</$button>

View File

@@ -1,6 +1,6 @@
title: $:/config/OfficialPluginLibrary
tags: $:/tags/PluginLibrary
url: http://tiddlywiki.com/library/v5.1.14/index.html
url: https://tiddlywiki.com/library/v5.1.15/index.html
caption: {{$:/language/OfficialPluginLibrary}}
{{$:/language/OfficialPluginLibrary/Hint}}

View File

@@ -6,17 +6,14 @@ $baseFilename$$(extension)$
\end
\define exportButton(exportFilter:"[!is[system]sort[title]]",lingoBase,baseFilename:"tiddlers")
<span class="tc-popup-keep">
<$button popup=<<qualify "$:/state/popup/export">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected">
<span class="tc-popup-keep"><$button popup=<<qualify "$:/state/popup/export">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected">
<$list filter="[<tv-config-toolbar-icons>prefix[yes]]">
{{$:/core/images/export-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>prefix[yes]]">
<span class="tc-btn-text"><$text text={{$lingoBase$Caption}}/></span>
</$list>
</$button>
</span>
<$reveal state=<<qualify "$:/state/popup/export">> type="popup" position="below" animate="yes">
</$button></span><$reveal state=<<qualify "$:/state/popup/export">> type="popup" position="below" animate="yes">
<div class="tc-drop-down">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/Exporter]]">
<$set name="extension" value={{!!extension}}>

View File

@@ -1,5 +1,8 @@
title: $:/core/macros/image-picker
created: 20170715180840889
modified: 20170715180914005
tags: $:/tags/Macro
title: $:/core/macros/image-picker
type: text/vnd.tiddlywiki
\define image-picker-thumbnail(actions)
<$button tag="a" tooltip="""$(imageTitle)$""">
@@ -14,7 +17,7 @@ $actions$
</$list>
\end
\define image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]")
\define image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]",subfilter:"")
<div class="tc-image-chooser">
<$vars state-system=<<qualify "$:/state/image-picker/system">>>
<$checkbox tiddler=<<state-system>> field="text" checked="show" unchecked="hide" default="hide">

View File

@@ -1,15 +1,17 @@
title: $:/core/macros/tabs
tags: $:/tags/Macro
\define tabs(tabsList,default,state:"$:/state/tab",class,template)
\define tabs(tabsList,default,state:"$:/state/tab",class,template,buttonTemplate)
<div class="tc-tab-set $class$">
<div class="tc-tab-buttons $class$">
<$list filter="$tabsList$" variable="currentTab"><$set name="save-currentTiddler" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tc-tab-selected" tooltip={{!!tooltip}}>
<$tiddler tiddler=<<save-currentTiddler>>>
<$set name="tv-wikilinks" value="no">
<$transclude tiddler="$buttonTemplate$" mode="inline">
<$transclude tiddler=<<currentTab>> field="caption">
<$macrocall $name="currentTab" $type="text/plain" $output="text/plain"/>
</$transclude>
</$transclude>
</$set></$tiddler></$button></$tiddler></$set></$list>
</div>
<div class="tc-tab-divider $class$"/>

View File

@@ -2,7 +2,6 @@ created: 20141212105914482
modified: 20141212110330815
tags: $:/tags/Macro
title: $:/core/macros/timeline
type: text/vnd.tiddlywiki
\define timeline-title()
<!-- Override this macro with a global macro

53
core/wiki/macros/tree.tid Normal file
View File

@@ -0,0 +1,53 @@
title: $:/core/macros/tree
tags: $:/tags/Macro
\define leaf-node(prefix)
<li>
<$list filter="""[[$prefix$$(chunk)$]is[shadow]] [[$prefix$$(chunk)$]is[tiddler]] +[removeprefix[$prefix$]] +[limit[1]]"""
emptyMessage="""<$text text="$prefix$$(chunk)$"/>""">
<span>{{$:/core/images/file}}</span> <$link to="""$prefix$$(chunk)$""">
<$view field="title"/>
</$link>
</$list>
</li>
\end
\define branch-node(prefix)
<$reveal type="nomatch" text="" default="""$(chunk)$""">
<li>
<$list filter="""[all[shadows+tiddlers]prefix[$prefix$$(chunk)$]] -[[$prefix$$(chunk)$]] +[limit[1]]""">
<$reveal type="nomatch" state="""$:/state/tree/$prefix$$(chunk)$""" text="show">
<$button set="""$:/state/tree/$prefix$$(chunk)$""" setTo="show" class="tc-btn-invisible">{{$:/core/images/folder}} <$text text="""$(chunk)$"""/></$button>
</$reveal>
<$reveal type="match" state="""$:/state/tree/$prefix$$(chunk)$""" text="show">
<$button set="""$:/state/tree/$prefix$$(chunk)$""" setTo="hide" class="tc-btn-invisible">{{$:/core/images/folder}} <$text text="""$(chunk)$"""/></$button>
</$reveal>
</$list>
<$list filter="""[all[shadows+tiddlers]prefix[$prefix$$(chunk)$]] -[[$prefix$$(chunk)$]] +[limit[1]]"""><span>(<$count filter="""[all[shadows+tiddlers]prefix[$prefix$$(chunk)$]] -[[$prefix$$(chunk)$]]"""/>)</span>
<$reveal type="match" state="""$:/state/tree/$prefix$$(chunk)$""" text="show">
<$macrocall $name="tree-node" prefix="""$prefix$$(chunk)$"""/>
</$reveal>
</$list>
</li>
</$reveal>
\end
\define tree-node(prefix)
<ol>
<$list filter="[all[shadows+tiddlers]removeprefix[$prefix$]splitbefore[/]sort[title]] +[!suffix[/]]" variable="chunk">
<<leaf-node """$prefix$""">>
</$list>
<$list filter="[all[shadows+tiddlers]removeprefix[$prefix$]splitbefore[/]sort[title]] +[suffix[/]]" variable="chunk">
<<branch-node """$prefix$""">>
</$list>
</ol>
\end
\define tree(prefix)
<div class="tc-tree">
<span><$text text="""$prefix$"""/></span>
<div>
<$macrocall $name="tree-node" prefix="""$prefix$"""/>
</div>
</div>
\end

View File

@@ -1,3 +1,3 @@
title: $:/tags/MoreSideBar
list: [[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Plugins]]
list: [[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]

View File

@@ -1,4 +1,3 @@
title: $:/core/wiki/title
type: text/vnd.tiddlywiki
{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}

View File

@@ -0,0 +1,3 @@
title: HelloThere
This wiki provides a starting point for working with the AWS plugin for TiddlyWiki under Node.js.

View File

@@ -0,0 +1,18 @@
{
"description": "Amazon Web Services edition",
"plugins": [
"tiddlywiki/async",
"tiddlywiki/jszip",
"tiddlywiki/aws"
],
"themes": [
"tiddlywiki/vanilla",
"tiddlywiki/snowwhite"
],
"build": {
"index": [
"--rendertiddler","$:/core/save/all","index.html","text/plain"],
"lambda": [
"--rendertiddler","$:/plugins/tiddlywiki/aws/lambdas/main","index.js","text/plain"]
}
}

View File

@@ -55,8 +55,8 @@ TiddlyWiki markup is a dedicated markup syntax to <<tag Formatting "format your
|[[Pretty Link|Tiddler Name]]|{{{[[Pretty Link|Tiddler Name]]}}}|
|>| [[External Links|External Link]] |
|A valid URL is automatically rendered as an external link.|>|
|http://www.tiddlywiki.com|{{{http://www.tiddlywiki.com}}}|
|[[Pretty External Link|http://www.tiddlywiki.com]]|{{{[[Pretty External Link|http://www.tiddlywiki.com]]}}}|
|https://www.tiddlywiki.com|{{{https://www.tiddlywiki.com}}}|
|[[Pretty External Link|https://www.tiddlywiki.com]]|{{{[[Pretty External Link|https://www.tiddlywiki.com]]}}}|
|>| ![[Filesystem Links|Links]] |
|You can, of course, use file system links both as plain or pretty links.|>|
|''Windows Network Path''|{{{[[file://///server/share]]}}}|
@@ -65,11 +65,11 @@ TiddlyWiki markup is a dedicated markup syntax to <<tag Formatting "format your
|''Relative Path (Subfolder)''|{{{[[folder/file]]}}}|
|>| ![[Images]] |
|In general, image files are external to a TiddlyWiki.|>|
|[img[http://www.tiddlywiki.com/favicon.ico]]|{{{[img[path/image.jpg]]}}}|
| aligned right&nbsp;&nbsp;[>img[http://www.tiddlywiki.com/favicon.ico]]|{{{[>img[path/image.jpg]]}}}|
|[<img[http://www.tiddlywiki.com/favicon.ico]]&nbsp;&nbsp;aligned left|{{{[<img[path/image.jpg]]}}}|
|w/ internal link [>img[http://www.tiddlywiki.com/favicon.ico][TiddlyWiki]]|{{{[img[path/image.jpg][TiddlerName]]}}}|
|w/ external link [>img[http://www.tiddlywiki.com/favicon.ico][http://www.tiddlywiki.com]]|{{{[img[path/image.jpg][TiddlyWiki|http://www.tiddlywiki.com]]}}}|
|[img[https://www.tiddlywiki.com/favicon.ico]]|{{{[img[path/image.jpg]]}}}|
| aligned right&nbsp;&nbsp;[>img[https://www.tiddlywiki.com/favicon.ico]]|{{{[>img[path/image.jpg]]}}}|
|[<img[https://www.tiddlywiki.com/favicon.ico]]&nbsp;&nbsp;aligned left|{{{[<img[path/image.jpg]]}}}|
|w/ internal link [>img[https://www.tiddlywiki.com/favicon.ico][TiddlyWiki]]|{{{[img[path/image.jpg][TiddlerName]]}}}|
|w/ external link [>img[https://www.tiddlywiki.com/favicon.ico][https://www.tiddlywiki.com]]|{{{[img[path/image.jpg][TiddlyWiki|https://www.tiddlywiki.com]]}}}|
|>| ![[Gradients|gradient]] |
|<<gradient horiz #faa #afa #aaf>>&nbsp;&nbsp;__vert__ical or __horiz__ontal<br>&nbsp;&nbsp;see [[gradient macro|http://tiddlywiki.org/#%5B%5Bgradient%20(macro)%5D%5D]]>>|{{{<<gradient horiz #faa #afa #aaf>>wiki text>>}}}|
|>| ![[Tables]] |

View File

@@ -9,4 +9,4 @@ Einige interessante Projekte:
<<list-links filter:"[tag[Community]]">>
tiddlywiki.com: http://tiddlywiki.com/#Community
tiddlywiki.com: https://tiddlywiki.com/#Community

View File

@@ -30,7 +30,7 @@ Anders, als bei herkömmlichen Online-Diensten, lässt Ihnen ~TiddlyWiki die Fre
<a href="https://github.com/Jermolene/TiddlyWiki5" class="tc-btn-big-green" style="background-color:#444;" target="_blank">
{{$:/core/images/github}} ~TiddlyWiki on ~GitHub
</a>
<a href="http://tiddlywiki.com" class="tc-btn-big-green" style="background-color:#green;" target="_blank">
<a href="https://tiddlywiki.com" class="tc-btn-big-green" style="background-color:#green;" target="_blank">
{{Motovun Jack.svg}} ~TiddlyWiki Homepage
</a>
</div>

View File

@@ -10,4 +10,4 @@ Hier werden die globalen Makros aufgelistet, die in diesem Wiki beschrieben werd
<<list-links [tag[Makros]]>>
Weitere Makros siehe: http://tiddlywiki.com/#Macros
Weitere Makros siehe: https://tiddlywiki.com/#Macros

View File

@@ -3,4 +3,4 @@ modified: 20150518080417093
title: Releases
type: text/vnd.tiddlywiki
Siehe: http://tiddlywiki.com/prerelease/#Releases
Siehe: https://tiddlywiki.com/prerelease/#Releases

View File

@@ -6,4 +6,4 @@ tags: InhaltsVerzeichnis
title: Widgets
type: text/vnd.tiddlywiki
Es gibt momentan ca. 30 Widgets. Siehe: http://tiddlywiki.com/#Widgets
Es gibt momentan ca. 30 Widgets. Siehe: https://tiddlywiki.com/#Widgets

View File

@@ -5,4 +5,4 @@ modifier: pmario
title: WikiText mehr Beispiele
type: text/vnd.tiddlywiki
Siehe: http://tiddlywiki.com
Siehe: https://tiddlywiki.com

View File

@@ -8,5 +8,5 @@ type: text/vnd.tiddlywiki
Die "~TiddlyWiki Community" hat bereits begonnen, Plugins zu erstellen, mit denen ganze Projekte verwaltet werden können.
* Briefcase: http://tiddlywiki.com/#%22GSD5%22%20by%20Roma%20Hicks
* Briefcase: https://tiddlywiki.com/#%22GSD5%22%20by%20Roma%20Hicks
* Briefcase in Aktion: http://gsd5.tiddlyspot.com/

View File

@@ -18,4 +18,4 @@ type: text/vnd.tiddlywiki
* Da ~TiddlyWiki eine einzelne Datei ist, ist es sehr einfach sie mit anderen zu teilen. zB: Per mail verschicken --- fertig.
* Erstellen einer lokalen Wissensdatenbank mit mehreren vernetzten ~TiddlyWiki Dateien.
Weitere interessante Anwendungsmöglichkeiten finden Sie unter [[Community]] und auf http://tiddlywiki.com
Weitere interessante Anwendungsmöglichkeiten finden Sie unter [[Community]] und auf https://tiddlywiki.com

View File

@@ -1,5 +1,5 @@
created: 20150513150003950
source: http://tiddlywiki.com/poster
source: https://tiddlywiki.com/poster
tags: picture
title: Tiddler Poster.png
type: image/png

View File

@@ -6,6 +6,6 @@ type: text/vnd.tiddlywiki
Es gibt mehrere Ressourcen für Entwickler, um mehr über das TiddlyWiki Projekt zu erfahren, zu diskutieren und vor allem mitzuhelfen.
* [[tiddlywiki.com/dev|http://tiddlywiki.com/dev]] Offizielle Entwickler Doku.
* [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]] Offizielle Entwickler Doku.
* [[TiddlyWikiDev group|http://groups.google.com/group/TiddlyWikiDev]] Google Diskussionsforum für Entwickler.
* https://github.com/Jermolene/TiddlyWiki5 .. Github Repository.

View File

@@ -14,7 +14,7 @@ OpenSource-Projekte, wie ~TiddlyWiki wachsen und gedeihen ''nur'' durch das Enga
* Zwitschern sie über ~TiddlyWiki :) [[I love TiddlyWiki because...|https://twitter.com/intent/tweet?text=I+love+TiddlyWiki+because...&source=tiddlywiki5]]
* Klicken sie den [[TiddlyWiki5 Star Button auf GitHub|https://github.com/Jermolene/TiddlyWiki5]]
* [[Veröffentlichen Sie das TiddlyWiki Poster|http://tiddlywiki.com/poster]]
* [[Veröffentlichen Sie das TiddlyWiki Poster|https://tiddlywiki.com/poster]]
[img width=232 [Tiddler Poster.png]]

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