1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-01-22 10:54:46 +00:00

Compare commits

...

62 Commits

Author SHA1 Message Date
Mario Pietsch
efe58e41bc [DOCS] Fix some typos in "days Operator (Examples)" (#9479)
* [DOCS] Fix some typos in "days Operator (Examples)"

* Remove created and modified fields from days.tid

Remove created and modified fields from days.tid
2026-01-21 09:09:14 +01:00
Mario Pietsch
79e3d14698 [DOCS] Make TaskManagementExamples more "hackable" (#9482)
* [DOCS] Make TaskManagementExamples more "hackable"

* Update modified date in TaskManagementExample.tid

* Fix modified date in TaskManagementExampleDraggable
2026-01-20 13:23:17 +01:00
superuser-does
763d717a13 Improvements to DateFormat tiddler (#9583) 2026-01-20 13:18:24 +01:00
Mario Pietsch
419fe68ee2 [Docs] Improve tag-pill documentation and examples (#9580)
* [Docs] Improve tag-pill documentation and examples

* Apply suggestion from @saqimtiaz

---------

Co-authored-by: Saq Imtiaz <saq.imtiaz@gmail.com>
2026-01-14 14:04:34 +01:00
yaisog
47ab3476f6 Improve LogWidget and ActionLogWidget documentation (#9550) 2026-01-05 14:31:11 +01:00
Mario Pietsch
f0e64660f2 [DOCS] Add multi-columns class to Widgets in Wikitext (#9516) 2026-01-04 21:45:19 +00:00
Mario Pietsch
7cb422242a DOCS - Fix typo in Date Fields (#9518) 2026-01-04 21:36:57 +00:00
superuser-does
5fa1098c03 tw5.com: remove duplicate text from Forums tiddler (#9523) 2026-01-04 18:15:37 +00:00
superuser-does
92dc927c7b docs: savetiddlers extension is now Firefox-only (#9524)
* tw5.com: removed Chrome browser from savetiddlers

Was deprecated in early 2025, and is now Firefox-only

Additional changes:
* Lowercased buggyj in line with how the name is used elsewhere on tw5.com and the rest of the internet
* Pulled url from the url field (following the example of Timimi resource tiddler)
* Changed formatting of title to match other community resources

* tw5.com: update French & Japanese savetiddlers plugin docs to note it is now Firefox-only

Please note this update was validated using machine translation
2026-01-04 18:12:56 +00:00
superuser-does
f3fa69e229 Docs: rename 'definition lists' to 'description lists' (#9535)
* docs: Definition Lists to definition lists

* tw5.com: rename Definition Lists to Description Lists throught tiddler

* apply recommendations by @pmario on #9535
2026-01-04 17:37:54 +00:00
peteratkins
7fb8560908 Signing CLA (#9534)
Co-authored-by: Jeremy Ruston <jeremy@jermolene.com>
2026-01-04 13:30:54 +00:00
Jeremy Ruston
ff7814360e Cleanup whitespace in CLA 2026-01-04 13:19:24 +00:00
hsteve11
2d9303c6ff Signing CLA (#9539) 2026-01-04 13:18:46 +00:00
Mario Pietsch
6aee5eb0c7 Add Filter Syntax History link to Filters tiddler (#9541) 2026-01-04 13:16:54 +00:00
XLBilly
4196d96adc [DOCS] Update docs about saving via WebDAV (#9543) 2026-01-02 09:42:58 +01:00
wiki-tutor
838fad916d Signing CLA (#9527) 2025-12-28 18:30:51 +00:00
Jeremy Ruston
935e89bd93 Tweak HelloThere thumbnail ordering 2025-12-20 09:25:25 +00:00
Jeremy Ruston
ecba671bcf Update Newsletter links and editorial 2025-12-19 09:12:06 +00:00
IchijikuIchigo
4b824795c8 [ja_JP] Update of Japanese translations (#9499)
* [ja_JP] Japanese translation update from commit: c625e3c, ac83b46, 314ce12

* [ja_JP] Japanese translation update from commit: b0d950f, 381388f, 4dc89f6, 6a39a4e

* [ja_JP] Japanese translation update from commit: 29a567f, 3597e65, 3378497

* [ja_JP] Japanese translation update from commit: 4dc89f6

* [ja_JP] Japanese translation update from commit: b0d950f, 381388f

* [ja_JP] Japanese translation update from commit: 614ba84

* [ja_JP] Japanese translation update from commit: 23a23d9

* [ja_JP] Japanese translation update from commit: 8993572

* [ja_JP] Japanese translation update from commit: 8993572, 697171a, 75e89a1, ee55ab6, a73e03c, ac83b46

* [ja_JP] Japanese translation update from commit: 8993572

* [ja_JP] Japanese translation update from commit: 8993572

* [ja_JP] Japanese translation update from commit: 81862b5

* [ja_JP] Japanese translation update from commit: 81d8d67

* [ja_JP] Japanese translation update from commit: 899a498

* [ja-JP] A little correction to the Japanese translation

* [ja_JP] Japanese translation update from commit: d63a189

* [ja_JP] Japanese translation update from commit: 789d64f

* [ja_JP] Japanese translation update from commit: 5490b78

* [ja-JP] A little correction to the Japanese translation

* [ja-JP] A little correction to the Japanese translation

* [ja-JP] A little correction to the Japanese translation

* [ja-JP] A little correction to the Japanese translation

* [ja_JP] Japanese translation update from commit: 29a567f
2025-12-18 16:13:07 +00:00
Christian Byron
fc74219c0b Add CeebeeTree comunity card (#9501) 2025-12-17 14:28:23 +00:00
Jeremy Ruston
ffde2da16c Add @CeeBeeTree to the comunity card for the Newsletter team 2025-12-16 09:20:51 +00:00
Christian Höhne
4bb0bc5527 Signing CLA (#9307)
Co-authored-by: Jeremy Ruston <jeremy@jermolene.com>
2025-11-23 18:32:43 +00:00
Jeremy Ruston
3378497816 Add link to launch archive 2025-11-22 17:48:28 +00:00
Jeremy Ruston
d81204c6ab Add Community Card for QA team
@Leilei332 I hope you don't mind, but I've nominated you to be the lead of the QA team. If you're happy to take the role, please could you submit a community card?
2025-11-12 13:03:14 +00:00
lin onetwo
e001c21bf5 Adds commuinity card for LinOnetwo (#9426)
(cherry picked from commit 98ecbf7441)
2025-11-12 12:26:27 +01:00
Mario Pietsch
102c236267 Create PMario community card (#9417) 2025-11-11 16:43:59 +00:00
Saq Imtiaz
06a2923adf Adds edit.tiddlywiki.com to infrastructure team responsibilities (#9419) 2025-11-11 16:37:45 +00:00
Jeremy Ruston
54e5ef7489 Fix link 2025-11-11 11:41:27 +00:00
Jeremy Ruston
6f306d1ed6 Community Team Card for the Developer Experience Team
@pmario this is a starter list of, please do suggest improvements
2025-11-10 10:21:58 +00:00
Mario Pietsch
5dfdbc8ea0 [DOCS] Slightly improve the substitution documentation (#9357) 2025-11-07 19:27:20 +00:00
XLBilly
4d4d9d9995 [DOCS] Add docs about deprecated classes (#9345)
* Add docs about deprecated classes

* Add Core classes tag

* Deprecate `tc-language-*` class

* Update deprecation warning

* 更新 Deprecated Core Classes.tid

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

* Apply suggestion from @saqimtiaz

---------

Co-authored-by: Saq Imtiaz <saq.imtiaz@gmail.com>
2025-11-04 13:03:38 +01:00
yogoshell
bad87c405e docs: Correcting typo in description field (#9087) 2025-10-28 22:16:32 +01:00
yogoshell
6f23a078b7 Signing CLA (#9086)
Co-authored-by: Saq Imtiaz <saq.imtiaz@gmail.com>
2025-10-28 22:15:04 +01:00
Mario Pietsch
c3706b8a79 [Docs] Convert Markdown links into TW-Links. Remove redundant TiddlyWiki links. Add links to current docs. (#9209) 2025-10-28 22:12:05 +01:00
Mohammad Rahmani
7ca8fb29af Docs: Fix Issue in Triggering $:/AdvancedSearch (#9244) 2025-10-28 22:11:20 +01:00
Markus Sauermann
d39bb5274e Fix typo in Filter Syntax (#9111) 2025-10-28 22:07:54 +01:00
lin onetwo
81b69783c4 docs: How to add new cascade and use it (#8472)
* docs: How to add new cascade and use it

* Update Cascade Mechanism.tid

* docs: update

* Update How to Create a Custom Cascade Entry.tid

* Refine with deepseek
2025-10-27 15:59:14 +00:00
Rishu Kumar
b349adde16 Fix Renaming on pasting image from clipboard (#9369)
We can do Renaming on pasting image from clipboard
2025-10-27 16:11:32 +01:00
Saq Imtiaz
d63a1896b3 docs: update more links for PR maker (#9362) 2025-10-23 17:48:57 +02:00
Saq Imtiaz
b65fa11643 Update ContributionBanner to reflect new URI for pr maker 2025-10-23 16:56:21 +02:00
Saq Imtiaz
4043499633 Update link in make-pr-maker-link procedure
Update URI for PR maker
2025-10-23 16:53:30 +02:00
Saq Imtiaz
6a39a4e13b Docs: add link to Contributing guidelines in developers tiddler (#9361) 2025-10-23 12:07:37 +01:00
Mario Pietsch
5b5147dade Make ReleaseTemplate use code-body (#9340) 2025-10-21 13:00:06 +02:00
Mohammad Rahmani
2c8fafee48 docs: Fix Slider Plugin Url (#9354) 2025-10-21 12:30:37 +02:00
Joseph Yi
09a42a54c0 Chore: Signing CLA (#9344) 2025-10-15 21:25:01 +01:00
Mario Pietsch
f4f31c37fc Remove tweb.at from community resources (#9330) 2025-10-12 10:55:39 +01:00
Mario Pietsch
ed3405672a Rename Intertwingled innovations.webp to Innovations.webp (#9331) 2025-10-11 11:19:55 +02:00
Mario Pietsch
e3af967cbb [DOCS] Convert PNG images into WEBP to reduce wiki size by 3MB (#9162)
* convert PNG images into WEBP to reduce wiki size by 3MB

* convert Community Survey 2025.png to webp
2025-10-10 15:02:30 +01:00
Mario Pietsch
6b0d3fab5d [Docs] Fix typo in DefaultTiddlers (#9202) 2025-10-10 15:01:00 +01:00
Mario Pietsch
13f1689e7e [DOC] ContentType Info and Links - Add Compount Tiddler Type (#9249) 2025-10-10 15:00:43 +01:00
Mario Pietsch
4c09a88272 [DOCS] Improve "range Operator" documentation. Make placeholder "terms" consistent with filter strings (#9276)
* [DOCS] Improve "range Operator" documentation. Make placeholder "terms" consistent with filter strings

* update range operator table formatting a bit
2025-10-10 14:59:27 +01:00
Mario Pietsch
3c1d658fad Adjust Missing Links for Community Resources (#9329)
* Adjust Missing Links for Community Resources

* Update _Lucky Sushi_ online shop by sini-Kit.tid
2025-10-10 14:44:57 +01:00
Cameron Fischer
5d738673ac Added "Hello There" Thumbnail for TW5-Graph (#9322)
* Added "Hello There" Thumbnail for TW5-Graph

* Preventing TiddlyWiki link in TW5-Graph description

* Added modified date for TW5-Graph post
2025-10-10 14:30:54 +01:00
Mario Pietsch
7c020d0eb6 Add a CSV Table as Example to Typed Blocks in Wikitext (#9318) 2025-10-06 16:22:31 +01:00
Mario Pietsch
a2e5c2cca2 Add documentation for Encrypted Import Problems (#9100) 2025-10-02 11:49:59 +01:00
Scott Sauyet
5ff4e02a61 Update TableOfContents.tid (#9312)
Move Welcome back to the top of the TOC.

Third attempt.  Someday I'll get this right.
2025-10-02 11:22:37 +01:00
Jeremy Ruston
2cc7c96eec Remove inadvertently committed files 2025-09-25 16:48:22 +01:00
Jeremy Ruston
8cd3d4e22c HireJeremy: Tweaks 2025-09-20 11:52:39 +01:00
Jeremy Ruston
37e09d1c25 Add Bluesky link for Jermolene 2025-09-17 14:02:13 +01:00
Jeremy Ruston
7a080092d0 Allow community cards to be edited in the browser under Node.js 2025-09-16 11:05:04 +01:00
Leilei332
dd91ac0b82 [DOCS] Button widget role attribute (#9168)
* [DOCS] Button role attribute

* Fix wrong language
2025-09-14 11:27:49 +01:00
Jeremy Ruston
c22046a2c2 Fix some duplicate tiddlers
There were two Welcome tiddlers, and two tiddlers with the title "Saving with the HTML5 saver"
2025-09-11 13:29:53 +01:00
194 changed files with 1060 additions and 26475 deletions

View File

@@ -0,0 +1,14 @@
title: @Christian_Byron
tags: Community/Person
fullname: Christian Byron
talk.tiddlywiki.org: Christian_Byron
github: ceebeetree
linkedin: www.linkedin.com/in/christian-byron-b84a594/
avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAgICAgJCAkKCgkNDgwODRMREBARExwUFhQWFBwrGx8bGx8bKyYuJSMlLiZENS8vNUROQj5CTl9VVV93cXecnNEBCAgICAkICQoKCQ0ODA4NExEQEBETHBQWFBYUHCsbHxsbHxsrJi4lIyUuJkQ1Ly81RE5CPkJOX1VVX3dxd5yc0f/CABEIACAAIAMBIgACEQEDEQH/xAAuAAEBAAMBAAAAAAAAAAAAAAAHBgEDBQQBAAMBAAAAAAAAAAAAAAAAAAABAwX/2gAMAwEAAhADEAAAADv2xtJlY03sqePW3ARS1RSydIhcH//EACcQAAICAgIBAgYDAAAAAAAAAAECAwQFEQASMRMhBhBBk8HRIzJx/9oACAEBAAE/AMFQxs+NExqJLMCwYE+SOT4bF3qr+hAIpRsDQ6lWH0Yco4S/eVniRVQHXZzrZ5dwGQpQtNII2RfJVvHMRl5cbKxC94n/ALp+RxfiKpNcgMMUqPIwjcnWip/I5XtUowaL3Ujir/xt79Glb6/4OZ7MV5oEpUzuIa7MPB14A5jpoYLsEsydo1bbLre+CWEEEYab7Uf74ZYSSThpvtR/vmRmhnuzywp1jZtquta+VPM49qlcy24lf017At7g8uZnHrUsGK3Ez+m3UBvcnXy//8QAHhEAAgEFAAMAAAAAAAAAAAAAAQIDAAQRIkEyUaH/2gAIAQIBAT8AmiuVlZkLEeQOflJPcvMAF0z65V+h0YIW52rBDuxUrztf/8QAIxEBAAEDAwMFAAAAAAAAAAAAAgEAAxEEBSMSQcEiMVJxof/aAAgBAwEBPwC/Z1ZvNBOYz1Gc/lDUat3ySPRM/H2P3W4hcbIldpxnxW3BcjQk9oznzX//2Q==
Hello ~TiddlyWikiers - I have been a long time fan, recent contributor to the TW community.
Recently I have volunteered to run the [[TiddlyWiki Newsletter|https://tiddlywiki.substack.com/]] to spread the great news about TW.
I have been in the IT industry for about thirty years, mostly as a consultant and technical arcitect.
More recently I went back to study a masters in IT focussing on AI and data science.
Now my partner and I have started our own business ([[Sphere Innovations|https://sphere-innovations.com.au]]) - in consulting and building web applications for small to medium size businesses here in Australia.

View File

@@ -6,6 +6,7 @@ talk.tiddlywiki.org: jeremyruston
github: Jermolene
linkedin: www.linkedin.com/in/jermy
flickr: www.flickr.com/photos/jermy/
bluesky: https://bsky.app/profile/jermolene.bsky.social
homepage: jermolene.com
email: jeremy@jermolene.com
avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAgICAgJCAkKCgkNDgwODRMREBARExwUFhQWFBwrGx8bGx8bKyYuJSMlLiZENS8vNUROQj5CTl9VVV93cXecnNEBCAgICAkICQoKCQ0ODA4NExEQEBETHBQWFBYUHCsbHxsbHxsrJi4lIyUuJkQ1Ly81RE5CPkJOX1VVX3dxd5yc0f/CABEIACAAIAMBIgACEQEDEQH/xAAtAAEBAAMAAAAAAAAAAAAAAAAHBgIEBQEBAQEBAAAAAAAAAAAAAAAAAgQBBf/aAAwDAQACEAMQAAAANF4uTuPRhD2nBLnUiJvKM0DtMKy//8QAKxAAAgIBAwMDAQkAAAAAAAAAAQIDBBEABRITITEiMkFxFEJRUmFicoGR/9oACAEBAAE/AInTA6gUGP4ZOQbW1bPsmyUq1q+gmvFPUzZPDkPamtwqU75ks04JakroVcg5RwRjg66NUx25KbzqJYyMngfqSuq0M3NZYIebJIvZozIvI/iNPcp/aalSdJXsS4VcKeIzlvU3jVTcYLNiaGISrjkhWQYDfQ63pYAzCDBsOiu7Dsx4EHH6r2w2ttimjd2IsNErhhJHKI04/uzqxuCxpBYVVWKSHqwMyMSQ33SB7dUJFmlkMYRgnqZgCMf7rf8AeEt3A9YOhjXAb2k8u7dtT1RZeOtXmYxiOPj4ZWY/lb51skqUNnNW/wBNzC7IpB6gQeeB/jq/fqGOaLbowuYn5MAQOw8LjW5Vmeo0qIsqYLLKjHIZmwv9fB1//8QAHxEAAQMEAwEAAAAAAAAAAAAAEQABAgMSIWExMkFR/9oACAECAQE/AD9iTy2lJmHUB8BVKM4SNSOj46a29saX/8QAHREAAgICAwEAAAAAAAAAAAAAAQIAAwQRITGBkf/aAAgBAwEBPwDHpFpJZtamVSiBWT2Yt7hmCDsb+TKtsKqpGg3M/9k=

View File

@@ -0,0 +1,19 @@
avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAgICAgJCAkKCgkNDgwODRMREBARExwUFhQWFBwrGx8bGx8bKyYuJSMlLiZENS8vNUROQj5CTl9VVV93cXecnNEBCAgICAkICQoKCQ0ODA4NExEQEBETHBQWFBYUHCsbHxsbHxsrJi4lIyUuJkQ1Ly81RE5CPkJOX1VVX3dxd5yc0f/CABEIACAAIAMBIgACEQEDEQH/xAAuAAEAAwEBAAAAAAAAAAAAAAAGAwQHAgUBAAMBAAAAAAAAAAAAAAAAAAACAwT/2gAMAwEAAhADEAAAAOfCWAMdKKetM4wOvY5OcvZnrYf/xAApEAACAQQBBAECBwAAAAAAAAABAgMABAURQQYSIVETFCIxMkJicYKh/9oACAEBAAE/AEtysaStr7mPaPeuazWdMM4gEnfPryW8hBUuZvou2RXRxyreBWPmgyNqs8f8MOQalhdY7Vz+R4/s/qfP+1edNi/zl7HDcFbmS3E8CcMR4INP0PkBhklIm+sZNtFtQiV0nj57Owl+dSrSTFgD6/CtH4VV9lU3oAbPngAVY389lc5URuUZkMxhnR4pvW0VwDqsP1FNmLWYqCpikMbngmliJNY+aKzyTxXS6lRAyg/u5rq+5x2RsuyTa3MQMlvKniRGThTUd1JYXUdzAwDvqVxGdRXMbfrVOD7HBrG3mNEsU8z98TRhl9eRzX//xAAcEQACAgIDAAAAAAAAAAAAAAABAgARAzESIVH/2gAIAQIBAT8ARuXZPsul3Eoje5lBQWBP/8QAGREAAwEBAQAAAAAAAAAAAAAAAAECEiER/9oACAEDAQE/AM98Lk7LJe20z//Z
created: 20251110102157310
first-sighting: 2019-03-01
fullname: Lin Onetwo
github: linonetwo
homepage: https://wiki.onetwo.website/
modified: 20251111184556193
tags: Community/Person Community/Team/Contributors
talk.tiddlywiki.org: linonetwo
title: @linonetwo
type: text/vnd.tiddlywiki
Since 2014, when I started college, I've been on a quest for a lifelong PKM tool. I cherish my life and all my experiences, and I dont want to forget any of them. When Im deeply focused on a task, its easy to lose sight of other important parts of my life—so I needed a system to help me stay balanced.
Early on, I tried TiddlyWiki several times, but I was initially put off by its save mechanism and markup editing. That changed when I discovered an auto-backup script, which gave me the confidence to fully commit. Over time, I improved the script and eventually transitioned to using TidGi-Desktop and TidGi-Mobile.
Today, my TiddlyWiki holds all my game design ideas and progress logs—it has truly become my second brain. With the help of LLM-powered programming tools, Ive enhanced it with numerous plugins, allowing me to manage my mind in a more programmable and structured way. As a game developer, TiddlyWiki isn't the core of my professional work; But I've invested so much time because it's fundamentally about upgrading my mind.
Most of my notes are open by default and shared publicly on my homepage as a digital garden.

View File

@@ -0,0 +1,25 @@
avatar: UklGRiwIAABXRUJQVlA4WAoAAAAwAAAAPwAAPwAASUNDUCACAAAAAAIgbGNtcwRAAABtbnRyR1JBWVhZWiAH6QALAAoACwADAAZhY3NwTVNGVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZkZXNjAAAAzAAAAG5jcHJ0AAABPAAAADZ3dHB0AAABdAAAABRrVFJDAAABiAAAACBkbW5kAAABqAAAACRkbWRkAAABzAAAAFJtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFIAAAAcAEcASQBNAFAAIABiAHUAaQBsAHQALQBpAG4AIABEADYANQAgAEcAcgBhAHkAcwBjAGEAbABlACAAdwBpAHQAaAAgAHMAUgBHAEIAIABUAFIAQwAAbWx1YwAAAAAAAAABAAAADGVuVVMAAAAaAAAAHABQAHUAYgBsAGkAYwAgAEQAbwBtAGEAaQBuAABYWVogAAAAAAAA81EAAQAAAAEWzHBhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbbWx1YwAAAAAAAAABAAAADGVuVVMAAAAIAAAAHABHAEkATQBQbWx1YwAAAAAAAAABAAAADGVuVVMAAAA2AAAAHABEADYANQAgAEcAcgBhAHkAcwBjAGEAbABlACAAdwBpAHQAaAAgAHMAUgBHAEIAIABUAFIAQwAAVlA4TOYFAAAvP8APEDWGgbRtWv+yt/0WImICOBvWn1C4dFi1bStbvpY8Qg2ePANNNAMh3N2db/7A91/7CHBvBBRr25ZFH+4k98ihkqi2CP4tsANvX8a+8y8Ct04dn0nuUt39ZiBJkowqt911M+MJ1G3bNiZJr1iP0DZ+2bbdadsqprOjAqmoUIX9hf3Fl5/uPYV7I3OMeoFzIvrvwG0kRUr3zPLdYMMXaqrMMsp0K4fufKO6c2hFV5Zh7kRROZX0PSCmB/3KWQwpuiekWelSRZDW94d0q750NrxavpFn1eLNQ9EV8nWlmAET6Q8lrCRTcjFLlLImluK3iXJW/hT47KGklS8OlzWUtXLFYDRCSS74ojUjxggqKMoxd6A1lTCyvsvyzC5/d7BsCHb7yIcHyrX2yR/NPnsAdRT2i0Pwp/o0Il6ix8hsRAuJmQgcr4KREfAiMgUVm9KqmfSxL5pOJspVwwTiV6jiIAg1RMhHpERhbvwgGI34Hc49T7UeKZtXwEqJ+BAaoBneperJH0POs1u4dufwv8Gf+qcOfjyvX6ZIVgxE0Rw87YF3BSc9c7jsXfdjOBG7FwmSb39pfGRwu8IuvUjJNoTpFzkEvDg6W3Qt/9nf99ZXPy8HM43IweTKyNR+WVatXcWWyakBksj9cqW+QetplcjsKElvZH/zuOO/PrCx//tL3/6x/O/C1PZZvSKuulLcS4l8M1ewGPR6ef5sllXW2eGQZ7hVSEZiPmcqrSS8e2ElX8o7t1fvB9LFetmEx5hx1Xuye2PpfjZnSjj7QfKTB3bZZo05Zvh6YuivX24cpc8+ddvADWG9odrSwFalVurxUiidDHmTiaoNkkh2gjbcpxMiAbd39aVP119/N9k4+euNKfcNjwaPhZEuUupUsJrHchw1LkPrRC9bQKa3M8Mj/xx903drdnHMpbirj1ENsUre0oo3N+7gat+2ZctKdsIUYc21sRu+Ucdhn+P7DyarftW00iu3Tmbv+hTfdCTmyaIPT4PrYZDFtBN2W8S9m4oTB5Z2P3Oe7weKjVBq86kXX/r0+WuvTAzfjqm1hsYRPWlbxm4n3IaeGOJEizv8orH9w5ejjmSrfOuEq/HxT6eDemtsZ/HTvvG1/8iVspxZILrlkz/cdsIbIroOgJileFSty2xiHNW5t9fbHJ3ze87bp5T9vc8RuqMB0ReDSt464R/BJxspvgpEsrVAJMTsYg2QovPTOHrvQ9et/S2Xx+40z7dY4JBX0Pz/ElH/T73U2DkK8EiqC9hM/zV3frQfzjaAqO16s1l6xCUXnBFlYxyIer3eEdth7u5xsHKxWoGLqzY3wIULt9G3K6soei9jZ+UcF+Ka3M/II9EUWrJ/LLxy+Q9xIh0vOl3NZCrVnBsuFUTOSnJnSioRWZ9q4g+ZDk5XVORoW2qX2hbIkna3JOrdR3jmpHVLovUkLES6grRO010u0GkDlX7SpH1DQ64Wl2zaSUJv1Mtti2G7kx5IyftWMhfDlGClcxvIUhP5crhp9LIb1Vne187oSAWxelcR/kXjYQTZboW+Oj1pqF0gmfZhSDD6bSgzGWrw3s7QLNtCV+2uatYrd/aFtjDI8R52e/DdyKgRKXBhEak3Ev50+GCUA9EFUor39htVMxmWvW8AM6ptG416rZvdWn+MarIEyH5r6ruZSrx8XrWDP370vbfTjqpmZGIbiFPFoihc4jcrlYi9p3ndSuymZ+XLaKza/P/HUWHn5Axdkd9OjBskY0+pIlz4AlFPFs+aStK5PBIRR4MVVJDihsy4JdEA4pVcrVqMZDyL2/8aYocikEAR9Xjc1BNG9zEiJG7n/cGyrtnblkClBhEgMW4Kx21BEBGJjLa0hcOGmTK64KsKLfKr9QyQELclxY3hqowTIZKdZNTSS5BWiBPlKxDWBVSS41bOepkhTkhGDajLfLyUBOKlkMHPgOhx3JoRN/cEiRgSWdgF2yCyDQu4IcbNo8ftTzxveOJ5y+h509h52+h549h569h587/M20f/b1AB
created: 20251110102157310
first-sighting: 2009-11-14
fullname: Mario Pietsch
github: pmario
homepage: https://wikilabs.github.io/
modified: 20251110124935183
tags: Community/Person Community/Team/Contributors
talk.tiddlywiki.org: pmario
title: @pmario
type: text/vnd.tiddlywiki
youtube: https://www.youtube.com/@pmario
''Hi, My name is Mario Pietsch''. Back in 2009 I was ''searching'' for ''a simple presentation tool'' and discovered ~TiddlyWiki Classic, Monkey Pirate ~TiddlyWiki ([[MPTW|https://mptw.tiddlyspot.com/]]) with ~TagglyTagging, Eric Shulman's ~TiddlyTools, Saq Imtiaz's navigation macros, and more. --- ''I was captivated''.
After a deep dive, I combined these elements into my own "Presentation Manager", along [[3 step by step tutorials|https://groups.google.com/g/tiddlywiki/c/qG_tZ1x0MEU/m/-vLA0luMicYJ]] to help others build it.
Thanks to ''the positive spirit'' of the ~TiddlyWiki community, I am proud to be part of it since 2009.
When Jeremy started developing ~TiddlyWiki 5 on ~GitHub, I joined in—opening [[issue no. 1|https://github.com/TiddlyWiki/TiddlyWiki5/issues/1]] all the way up to 13. For what thats good ;) Since then, I have submitted nearly 600 pull requests and more than 500 issues, many of which have been merged or resolved.
My ~TiddlyWiki 5 "laboratory" is at https://wikilabs.github.io, and I also share content on my ''~YouTube'' channel: https://www.youtube.com/@pmario
Have fun!<br>
Mario

View File

@@ -0,0 +1,19 @@
title: Developer Experience Team
tags: Community/Team
modified: 20251109200632671
created: 20251109200632671
leader: @pmario
team: @saqimtiaz
The Developer Experience Team improves the experience of software contributors to the TiddlyWiki project. This includes enhancing documentation, streamlining contribution processes, and providing tools and resources to help developers effectively contribute to TiddlyWiki.
Tools and resources managed by the Developer Experience Team include:
* Advising and assisting contributors, particularly new developers
* Maintenance of developer-focused documentation on the https://tiddlywiki.com/dev/ site, including:
** Development environment setup guides
** Code review processes and best practices
** Contribution guidelines and documentation
* Continuous integration and deployment scripts providing feedback on pull requests
* Devising and implementing labelling systems for issues and pull requests
* Automation scripts to simplify common development tasks

View File

@@ -1,8 +1,8 @@
title: Infrastructure Team
tags: Community/Team
modified: 20250909171928024
created: 20250909171928024
modified: 20251110133437795
tags: Community/Team
team: @MotovunJack
title: Infrastructure Team
The Infrastructure Team is responsible for maintaining and improving the infrastructure that supports the TiddlyWiki project. This includes the hosting, deployment, and management of the TiddlyWiki websites and services, as well as the tools and systems used by the TiddlyWiki community.
@@ -12,3 +12,4 @@ The infrastructure includes:
* github.com/TiddlyWiki
* tiddlywiki.com DNS
* Netlify account for PR previews
* edit.tiddlywiki.com

View File

@@ -1,6 +0,0 @@
title: Newsletter Team
tags: Community/Team
modified: 20250909171928024
created: 20250909171928024
The Newsletter Team is responsible for producing the TiddlyWiki Newsletter, a monthly email newsletter that highlights news, updates, and community contributions related to TiddlyWiki.

View File

@@ -0,0 +1,11 @@
title: Quality Assurance Team
created: 20251112125742296
modified: 20251112125742296
tags: Community/Team
team:
leader: @Leilei332
title: Quality Assurance Team
The Quality Assurance Team is responsible for ensuring the quality and reliability of TiddlyWiki releases. This includes reviewing code submissions, testing new features, identifying bugs, and verifying that fixes are effective.

View File

@@ -0,0 +1,15 @@
title: TiddlyWiki Newsletter Team
tags: Community/Team
modified: 20251219090709874
created: 20250909171928024
leader: @Christian_Byron
The Newsletter Team is responsible for producing the [[TiddlyWiki Newsletter]]. We would love to have your help if you would like to get involved.
! Audience
The newsletter is intended for TiddlyWiki end users who do not track all the discussions on https://talk.tiddlywiki.org/.
Coverage of developer topics such as JavaScript and intricate wikitext should be handled thoughtfully to avoid alienating the core audience of end users.
Subscribing to the newsletter is intended to give people confidence that they will not miss any important developments.

View File

@@ -1,5 +1,5 @@
title: Community/Team
modified: 20250909171928024
created: 20250909171928024
list: [[Project Team]] [[Core Team]] [[Documentation Team]] [[MultiWikiServer Team]] [[Newsletter Team]] [[Infrastructure Team]] [[Succession Team]]
list: [[Project Team]] [[Core Team]] [[Documentation Team]] [[Quality Assurance Team]] [[Infrastructure Team]] [[MultiWikiServer Team]] [[Newsletter Team]] [[Succession Team]]

View File

@@ -0,0 +1,127 @@
created: 20240802065815656
modified: 20240802065836064
title: How to Create a Custom Cascade Entry
type: text/vnd.tiddlywiki
This guide explains how to add a new [[cascade|https://tiddlywiki.com/#Cascades]] to the ~TiddlyWiki core or your own plugins. This allows third-party plugins to extend the functionality of the core or your plugin.
!! How Cascade Works in the Core
This section explains how the existing WikiText in the core interacts with the new WikiText youll add, only for learning purpose. You dont need to modify the core WikiText when adding a new cascade.
!!! The Default Template as a Fallback
The default behavior in ~TiddlyWiki is defined by [[$:/core/ui/ViewTemplate/tags/default]].
<pre>
<$view tiddler="$:/core" subtiddler="$:/core/ui/ViewTemplate/tags/default" mode=block format=text/>
</pre>
!!! Transclusion of the Active Template
[[$:/core/ui/ViewTemplate/tags]] uses a filter expression to find the cascade filter and the view template youll add.
<pre>
<$view tiddler="$:/core" subtiddler="$:/core/ui/ViewTemplate/tags" mode=block format=text/>
</pre>
The `:cascade` clause collects all tiddlers it finds and uses their filter text sequentially. Most filters wont return any text and will be skipped. The first filter that returns a tiddler title becomes the result of the `:cascade` clause. If no filters return a result, the fallback default filter will be used.
The `:and[!is[blank]else` clause provides additional fallback protection, though its often redundant because a fallback is typically tagged with `$:/tags/ViewTemplateTagsFilter`. However, including fallbacks is a good practice for defensive programming.
!! Adding a New Cascade Entry
This section contains the WikiText youll need to add to the core. Modify it to suit your needs instead of copying it directly.
!!! Creating a Control Panel Tab
To create a new tab under [[ControlPanel|$:/ControlPanel]] → Advanced → [[Cascade|$:/core/ui/ControlPanel/Cascades]], use the following code:
[[$:/core/ui/ControlPanel/ViewTemplateTags]] uses a filter expression to find the cascade filter and the view template youll add.
<pre>
<$view tiddler="$:/core" subtiddler="$:/core/ui/ControlPanel/ViewTemplateTags" mode=block format=text/>
</pre>
Add the following metadata:
```tid
tags: $:/tags/ControlPanel/Cascades
caption: {{$:/language/ControlPanel/ViewTemplateTags/Caption}}
```
!!! Adding a New Language Entry
Its important to add related language files. Create a file starting with `title: $:/language/ControlPanel/`:
```multid
title: $:/language/ControlPanel/
ViewTemplateTags/Caption: View Template Tags
ViewTemplateTags/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the tags area of a tiddler.
```
!!! Adding Default Configuration
Similar to the language file, add a config file starting with `title: $:/config/ViewTemplateTagsFilters/`. For example:
```tid
title: $:/config/ViewTemplateTagsFilters/
tags: $:/tags/ViewTemplateTagsFilter
default: [[$:/core/ui/ViewTemplate/tags/default]]
```
Different templates may have their own config files. Ensure youre adding to the correct file or creating a new one if it doesnt exist.
!! Using the New Cascade
This section provides a simplified example based on a real-world use case. It demonstrates how to override the default template with a custom template.
!!! Your Template
Add the content you want to display conditionally. Update `publisher/plugin-name` to your plugins name.
```tid
code-body: yes
title: $:/plugins/publisher/plugin-name/EditMode
\whitespace trim
<$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes">
<div class="tc-tags-wrapper" style="display:flex">
<$transclude tiddler="$:/core/ui/EditTemplate/tags"/>
<$button class="tc-btn-invisible" style="margin-left:1em;">
{{$:/core/images/done-button}}
<$action-deletetiddler $tiddler={{{ [[$:/state/edit-view-mode-tags/]addsuffix<storyTiddler>] }}}/>
</$button>
</div>
</$reveal>
```
!!! The Condition
Write a filter that ends with `then[$:/plugins/publisher/plugin-name/EditMode]`.
```tid
code-body: yes
tags: $:/tags/ViewTemplateTagsFilter
title: $:/plugins/publisher/plugin-name/CascadeEditMode
list-before: $:/config/ViewTemplateTagsFilters/default
[[$:/state/edit-view-mode-tags/]addsuffix<currentTiddler>get[text]compare:string:eq[yes]then[$:/plugins/publisher/plugin-name/EditMode]]
```
!!! A Button to Trigger the Condition
```tid
code-body: yes
tags: $:/tags/ViewTemplate/Tags
title: $:/plugins/publisher/plugin-name/TriggerEdit
\whitespace trim
<%if [<storyTiddler>get[tags]!is[blank]] %>
<$button class="tc-btn-invisible" set={{{ [[$:/state/edit-view-mode-tags/]addsuffix<storyTiddler>] }}} setTo="yes" tooltip="add tags">
{{$:/core/images/new-here-button}}
</$button>
<%endif%>
```

View File

@@ -1,9 +1,10 @@
chapter.of: UI and Rendering Pipeline
created: 20140717175203036
modified: 20140717182314488
modified: 20240802065804331
sub.num: 5
tags: doc
title: RootWidget and Rendering Startup
type: text/vnd.tiddlywiki
The previous parts of this chapter showed how WikiText is transformed to DOM nodes which dynamically react to tiddler changes and a way to compose tiddlers from other tiddlers.
This last part describes how the TiddlyWiki core plug-in starts up a UI build from tiddlers and WikiText.
@@ -29,6 +30,9 @@ and a listener is registered at the store which executes the refresh function of
[[Techniques for including other tiddlers and Templates|Transclusion and TextReference]] are finally used in [[$:/core/ui/PageTemplate]] to build the TiddlyWiki UI only from tiddlers written in WikiText (with widgets implemented in javascript):
For example to implement the list of open wiki pages the [[$:/core/ui/PageTemplate]] contains a [[navigator widget|$:/core/modules/widgets/navigator.js]] which maintains a list of open tiddlers in a field of [[$:/StoryList]] and handles events like ``tm-navigate`` by adding a tiddler specified as parameter to the top of the list in [[$:/StoryList]].
The [[story tiddler|$:/core/ui/PageTemplate/story]] transcluded in [[$:/core/ui/PageTemplate]] then uses a ~ListWidget to transclude all tiddlers in [[$:/StoryList]] through a special template [[$:/core/ui/ViewTemplate]].
The ViewTemplate here is a combination of different fragments, like title fragment and body fragment, each fragment can be override individually using [[Cascade Mechanism|How to Create a Custom Cascade Entry]].
A event of the type ``tm-close-tiddler`` would remove a specified tiddler from [[$:/StoryList]].
The [[Event Mechanism]] would trigger a changed event which triggers a call of the ~ListWidget's refresh function which would remove the tiddler from the list, closing the tiddler.

View File

@@ -2,4 +2,4 @@ title: Using TiddlyWiki as a library in another Node.js application
Node.js applications can include TiddlyWiki as a library so that they can use wikitext rendering.
See the demo at https://github.com/TiddlyWiki/TiddlyWiki5DemoApp
See the demo at https://github.com/Jermolene/TiddlyWiki5DemoApp

View File

@@ -1,5 +1,6 @@
created: 20141115211411211
title: ReleaseTemplate
code-body: yes
type: text/vnd.tiddlywiki
<h2><$link to=<<currentTab>>><$view tiddler=<<currentTab>> field="title"/></$link></h2>

View File

@@ -1,17 +0,0 @@
caption: savetiddlers
color: #4DB6AC
community-author: Buggyj
created: 20171109171935039
delivery: Browser Extension
description: Extension pour les navigateurs Chrome et Firefox
fr-title:
method: save
modified: 20220402105820520
tags: Chrome Firefox Saving [[Other Resources]] plugins
title: "savetiddlers" Extension for Chrome and Firefox by buggyj
type: text/vnd.tiddlywiki
url: https://github.com/buggyj/savetiddlers
Une extension pour Google Chrome et Mozilla Firefox qui fluidifie l'utilisation de [[l'enregistreur HTML5 par défaut|Saving with the HTML5 fallback saver]] de <<tw>>, et le rend presque aussi convivial que ~TiddlyFox une fois configurée.
https://github.com/buggyj/savetiddlers

View File

@@ -0,0 +1,17 @@
caption: savetiddlers
color: #4DB6AC
community-author: buggyj
created: 20171109171935039
delivery: Browser Extension
description: Extension pour les navigateur Firefox
fr-title:
method: save
modified: 20250809092435788
tags: Firefox Saving [[Other Resources]] plugins
title: savetiddlers: Extension for Firefox by buggyj
type: text/vnd.tiddlywiki
url: https://github.com/buggyj/savetiddlers
Une extension Mozilla Firefox qui fluidifie l'utilisation de [[l'enregistreur HTML5 par défaut|Saving with the HTML5 fallback saver]] de <<tw>>, et le rend presque aussi convivial que [[TiddlyFox]] une fois configurée.
{{!!url}}

View File

@@ -1,13 +1,12 @@
created: 20240313100515958
modified: 20241222104855231
original-modified: 20240313103959789
modified: 20251214111324789
original-modified: 20251023154747366
tags: Editions
title: TiddlyWiki Docs PR Maker
ja-title: TiddlyWikiドキュメントPRメーカー
[[@saqimtiaz|https://github.com/saqimtiaz/]]が作成した''~TiddlyWikiドキュメントPRメーカー''は、ドキュメントへの貢献と改善を支援するために設計された、tiddlywiki.comの特別エディションです。
https://saqimtiaz.github.io/tw5-docs-pr-maker/
''~TiddlyWikiドキュメントPRメーカー''は、ドキュメントへの貢献と改善を支援するために設計された、tiddlywiki.comの特別エディションです。
https://edit.tiddlywiki.com
ドキュメントに加えられたすべての変更は、GitHubに簡単に送信できます。 -- プルリクエストは自動的に作成されるため、エディションの名前は"PRメーカー"になります。

View File

@@ -1,8 +1,10 @@
list: HelloThere [[Quick Start]] [[Find Out More]] [[TiddlyWiki on the Web]] [[Testimonials and Reviews]] GettingStarted Community
tags: TableOfContents
list-before:
title: Welcome
ja-title: ようこそ
type: text/vnd.tiddlywiki
<<list-links filter:"[tag<currentTiddler>]" >>
<$transclude $tiddler="HelloThere"/>
''詳細については、トピックを選択してください:''
<div class="tc-table-of-contents"><<toc-selective-expandable "Welcome">></div>

View File

@@ -1,6 +1,6 @@
created: 20231005205623086
modified: 20241226114558500
original-modified: 20241115193649399
modified: 20251208113045167
original-modified: 20250807100434131
tags: About
title: TiddlyWiki Archive
ja-title: TiddlyWikiアーカイブ
@@ -10,7 +10,7 @@ ja-title: TiddlyWikiアーカイブ
5.1.10 5.1.11 5.1.12 5.1.13 5.1.14 5.1.15 5.1.16 5.1.17 5.1.18 5.1.19
5.1.20 5.1.21 5.1.22 5.1.23
5.2.0 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7
5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6
5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.3.8
\end
TiddlyWikiの古いバージョンは[[アーカイブ|https://github.com/TiddlyWiki/tiddlywiki.com-gh-pages/tree/master/archive]]で入手できます:

View File

@@ -1,31 +1,13 @@
created: 20150412191004348
modified:
original-modified: 20240925114810504
modified: 20251208113458455
original-modified: 20251022153208584
tags: Community Reference
title: Developers
ja-title: 開発者
type: text/vnd.tiddlywiki
! [[GitHubの統計|https://github.com/TiddlyWiki/TiddlyWiki5/graphs/contributors]]
開発者がTiddlyWikiについて学び、開発について議論し、貢献するためのリソースがあります。
> [img[https://repobeats.axiom.co/api/embed/b92b1b363e2b5f26837ae573a60d39b4248b50a0.svg]]
* [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]]は公式の開発者ドキュメントです
* [[GitHubでの開発|https://github.com/TiddlyWiki/TiddlyWiki5]]に参加する
* [[GitHubディスカッション|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]]はQ&Aとオープンな形式のディスカッションです
* [[GitHubイシュー|https://github.com/TiddlyWiki/TiddlyWiki5/issues]]は、バグレポートを作成し、具体的で実現可能な新しいアイデアを提案するためのものです
* 古い~TiddlyWikiDevGoogleグループは閉鎖され、[[TiddlyWikiトーク|https://talk.tiddlywiki.org/]]と[[GitHubディスカッション|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]]に代わりました
** 有用なアーカイブとして残っています: https://groups.google.com/group/TiddlyWikiDev
*** 強化されたグループ検索機能は[[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]]で利用できます
* https://gitter.im/TiddlyWiki/public でチャットしてください(開発ルームは近日公開予定)
! Twitter
* 最新ニュースは[[Twitterで@TiddlyWiki|http://twitter.com/#!/TiddlyWiki]]をフォローしてください
* プロジェクトに貢献する方法についてのガイドラインについては、[[貢献|Contributing]]を参照してください

View File

@@ -1,88 +1,14 @@
created: 20140908114400000
modified: 20241225112134741
original-modified: 20241016125145988
modified: 20251208115007037
original-modified: 20251122174540932
tags: About
title: History of TiddlyWiki
ja-title: TiddlyWikiの歴史
type: text/vnd.tiddlywiki
! ~TiddlyWikiの20年
~TiddlyWikiの20周年を祝うために、いくつかのライブストリームを開催しました。録画はここで視聴できます:
* 2024年9月19日 - https://youtube.com/live/z9slx92TyrU
* 2024年9月20日 - https://youtube.com/live/puFdN-FgOjg
* 2024年9月21日 - https://youtube.com/live/0SjsHvwjHGE
* 2024年9月22日 - https://youtube.com/live/oD7Jtq2D4lg
GitHubでは、TiddlyWikiの貢献者に記念日の感想を[[聞いて|https://github.com/TiddlyWiki/TiddlyWiki5/discussions/7983]]お祝いしました。興味深く思慮深い回答がいくつか寄せられました。たとえば、[[@FND|https://github.com/FND]]からの回答は次の通りです:
> TiddlyWikiは、私のキャリアだけでなく、価値観にも計り知れないほどの永続的な影響を与えました。今日に至るまで、私はTiddlyWikiから学んだ[[基本的なコンセプト|https://prepitaph.org/articles/creative-privacy/]] - その多くは、他では忘れられたり無視されたりしています - を頻繁に参照しています。このバックグラウンドがあることで、技術的な複雑さを崇拝したり、テクノロジーの世界に人間が存在することを思い出したりする場合でも、この業界で仕事をする上で自分の方向性を保つことができます。
> TiddlyWikiとは、人々のことです。このコミュニティや、Jeremyがその周りに築いたグループと交流し、そこから学ぶことができたのは、私にとって計り知れない特権でした。また、この特権がまったくの偶然によって私に与えられたものだということを思い出すのにも役立ちます。この恩返しをしていきたいと思います。
~TiddlyWikiを特集した最近のポッドキャスト:
* 2016年のチェンジログ ポッドキャスト - https://changelog.com/podcast/196 ~TiddlyWikiの背景について議論しています
* 2021年のFloss Weeklyの録画 - https://twit.tv/shows/floss-weekly/episodes/620
! TiddlyWikiの起源
遡ること1997年に、同僚が私に[[Ward Cunningham のオリジナル wiki|http://c2.com/cgi/wiki]]を紹介してくれました。これほど強力なものがわずか700行のPerlに収まることに感銘を受け、セキュリティとパーミッションの根本的な再考に魅了されました。他の多くの開発者と同様に、私もあらゆる機会を利用してさまざまなWikiを試し、仕事での使用法を模索しました
私にとってWikiの魅力は、印刷物中心のドキュメントやEメールの一般的なパラダイムを最終的に破壊する可能性があるという感覚でした
人々がWikiを使用する様子を数年間観察した結果、パワーユーザーは複数のブラウザタブで複数のWikiページを同時に開く機能を多用しており、ページの比較やレビュー、ページ間でのテキストのコピー、未読ページの一種のキューとして用いることが容易になっていることに気づきました
一度に複数のページを操作するこの機能がWikiをリファクタリングする機能の中心であると感じました。また、愛情を込めてリファクタリングされたWikiはより便利になる傾向があると一般に認められています。それでも、標準のWikiユーザーインターフェイスは常に、単一ページを一度に表示し操作すること専用にデザインされてきました
2004年4月にGMailを見たとき、すべての考えがまとまりました。GMailは、Ajaxを巧みに使用して個々のメールをスレッド化された会話に融合させました。
このアイデアをさらに探求するために、HTMLとJavaScriptを試し始めました。私にはどちらの経験もなく、以前の活動で、いくつかの静的ページと単純なASPサイトをまとめただけでした。これらのクライアント側テクロジーについて理解するのは大変でした。他の皆さんと同じように、私もWebプログラミングの非互換性と矛盾がどれほど恐ろしいものであるかを知り、愕然としました
! TiddlyWikiのラウンチ
そうして、2004年9月に、私は原始的な[[TiddlyWikiの最初のバージョン|https://classic.tiddlywiki.com/firstversion.html]]をリリースしました。これは、アイデアを実証するための最小のもので、シンプルで自己完結型の静的な48KB HTMLファイルでした
TiddlyWikiの最初のバージョンをこの方法で作成することの欠点は、編集に使用するのが完全に非現実的になることでした。'変更を保存'をクリックすると、ファイルシステムにHTMLページを書き込むために、保存されるデータを示すウィンドウがポップアップ表示されるだけでした
初期のフィードバックの多くは、TiddlyWikiは優れているが、変更を適切に保存できればさらに便利になるというものでした。ブラウザで実行されているHTMLファイルがローカルファイルシステムに変更を保存することは不可能であることはわかっていると思っていたので、少しイライラしました
数か月以内に、TiddlyWikiがブラウザに変更を保存できるようにする実験的なFirefox拡張機能を目にしました。コードを調べてみると、ファイルシステムへの書き込みに使用されていたAPIは、`file://` URI経由でロードされている場合に限り、実際には通常のHTMLファイルで利用できることがわかりました
私はFirefoxコードをTiddlyWikiのコアに適合させ、すぐにInternet Explorerにも同様の機能を追加しました(MicrosoftがInternet Explorerとともに配布した古い[[ActiveX|https://en.wikipedia.org/wiki/ActiveX]]コントロールを利用しています)
! TiddlyWikiの成長
TiddlyWikiの成長における大きなマイルストーンは、Nathan Bowersによる"GTDTiddlyWiki"の作成でした。彼はバニラのTiddlyWiki製品を採用し、一般的なGetting Things Done方法論を使用してタスクをトラックするという特定のアプリケーションに適応させました。GTDTiddlyWikiはすぐに人気を博し、[[LifeHacker|https://lifehacker.com/]]などのWebサイトで熱狂的に歓迎されました
その後数年間にわたって、TiddlyWikiの人気は高まり続け、新しい機能や能力も獲得しました。1年以内に、私はTiddlyWikiでオーダーメイドの開発作業を行うことで自活できるようになり、特にWikiパイオニアである[[SocialText|https://en.wikipedia.org/wiki/Socialtext]]と協力して変更をオンラインサーバと同期する機能に取り組みました
! BTの獲得
2007年5月に、[[BT]]は私のコンサルティング会社である[[Osmosoft]]を買収しました。従業員が1人で、収益がほんの少ししかない会社を買収するというのは、異例の決断でした。[[Osmosoft]]は、コミュニティの将来を保証するために私がTiddlyWikiの知的財産をUnaMesaに譲渡したため、TiddlyWikiの知的財産さえ所有していませんでした
[[BT]]の動機は、コミュニティベースのエコシステムを理解することでした。私は"オープンソースイノベーション責任者"として組織に加わり、オープンソースガバナンスの責任を負い、オープンソースコミュニティへの参加方法に関するアドバイスと専門知識を提供しました
! [[Osmosoft]]とTiddlySpace
私はBTに[[Osmosoft]]という名前でチームを作りました。私たちの目的は、オープンソースのメリットを広め、他のチームが実際にそのメリットを実感できるよう支援することでした。また、Webの使用全般、特にWeb標準の使用を普及する必要があることもわかりました
私たちのアプローチは、話すことよりも見せることに重点を置くことでした。私たちはTiddlyWikiコミュニティと協力してエコシステムを拡張し、BT用の多数の内部システムを構築しました(TiddlyWikiに基づくものもあれば、そうでないものもあります)
TiddlyWikiコミュニティへの[[Osmosoft]]の主な貢献は、TiddlyWebとTiddlySpaceの作成でした。TiddlyWebは、Tiddlerのための堅牢なインターネット規模のサーバであり、TiddlerのTiddlyWikiビューを構成することもできました。TiddlySpaceは、TiddlyWebをより直接的に使用可能な形式にパッケージ化する試みでした
! BTを離れる
2011年の終わりまでに、私はBTという企業の枠外でTiddlyWikiの可能性を実現するのがより適切な立場にあると感じるようになりました。そうして、私は退職して独立した開発者として働き始め、主にTiddlyWiki5という形でTiddlyWikiを新しくリブートすることに取り組みました
! TiddlyWiki5の開発
私は2011年11月からTiddlyWikiの新しいリリースに取り組みました。プログラマーとして、すでに書いたものの"バージョン 2.0"に取り組むことは非常に魅力的な提案です。これは、要件が完全に理解され、目的の機能をサポートするために必要なアーキテクチャの進化に集中できることを意味します
! 将来
TiddlyWiki5がついに"ベータ"ステータスを脱した今、私の希望は、それが長く存続することです。HTML5とNode.jsの標準機能のみを使用しているため、今後何年にもわたって完全に動作しない理由はありません。私の目標は、少なくとも25年は続けることです
//Jeremy Ruston, 2014年9月20日//
~TiddlyWikiの歴史をまとめています。このプロジェクトは現在進行中です。寄稿や思い出話など、ぜひお寄せください。
* [[TiddlyWiki物語|The Story of TiddlyWiki]] [[@Jermolene]]によるTiddlyWikiの物語、その起源と進化に関する個人的な記録
* https://github.com/TiddlyWiki/LaunchArchive 2004年のTiddlyWiki立ち上げ時からのブログとツイート
* [[TiddlyWiki記念日|TiddlyWiki Anniversaries]] TiddlyWikiの主要な記念日のお祝いイベントの記録
* [[フィルタシンタックスの歴史|Filter Syntax History]] TiddlyWiki5におけるフィルタシンタックスの進化の簡単な歴史

View File

@@ -0,0 +1,71 @@
title: The Story of TiddlyWiki
ja-title: TiddlyWiki物語
tags: [[History of TiddlyWiki]]
modifier: Jeremy Ruston
created: 20140908114400000
modified: 20251215111120830
original-modified: 20250730154331065
これは、2004年9月20日の最初のリリース以来のTiddlyWikiの起源と進化のストーリーについての個人的な記録です。
! TiddlyWikiの起源
遡ること1997年に、同僚が私に[[Ward Cunningham のオリジナル wiki|http://c2.com/cgi/wiki]]を紹介してくれました。これほど強力なものがわずか700行のPerlに収まることに感銘を受け、セキュリティとパーミッションの根本的な再考に魅了されました。他の多くの開発者と同様に、私もあらゆる機会を利用してさまざまなWikiを試し、仕事での使用法を模索しました
私にとってWikiの魅力は、印刷物中心のドキュメントやEメールの一般的なパラダイムを最終的に破壊する可能性があるという感覚でした
人々がWikiを使用する様子を数年間観察した結果、パワーユーザーは複数のブラウザタブで複数のWikiページを同時に開く機能を多用しており、ページの比較やレビュー、ページ間でのテキストのコピー、未読ページの一種のキューとして用いることが容易になっていることに気づきました
一度に複数のページを操作するこの機能がWikiをリファクタリングする機能の中心であると感じました。また、愛情を込めてリファクタリングされたWikiはより便利になる傾向があると一般に認められています。それでも、標準のWikiユーザーインターフェイスは常に、単一ページを一度に表示し操作すること専用にデザインされてきました
2004年4月にGMailを見たとき、すべての考えがまとまりました。GMailは、Ajaxを巧みに使用して個々のメールをスレッド化された会話に融合させました。
このアイデアをさらに探求するために、HTMLとJavaScriptを試し始めました。私にはどちらの経験もなく、以前の活動で、いくつかの静的ページと単純なASPサイトをまとめただけでした。これらのクライアント側テクロジーについて理解するのは大変でした。他の皆さんと同じように、私もWebプログラミングの非互換性と矛盾がどれほど恐ろしいものであるかを知り、愕然としました
! TiddlyWikiのラウンチ
そうして、2004年9月に、私は原始的な[[TiddlyWikiの最初のバージョン|https://classic.tiddlywiki.com/firstversion.html]]をリリースしました。これは、アイデアを実証するための最小のもので、シンプルで自己完結型の静的な48KB HTMLファイルでした
TiddlyWikiの最初のバージョンをこの方法で作成することの欠点は、編集に使用するのが完全に非現実的になることでした。'変更を保存'をクリックすると、ファイルシステムにHTMLページを書き込むために、保存されるデータを示すウィンドウがポップアップ表示されるだけでした
初期のフィードバックの多くは、TiddlyWikiは優れているが、変更を適切に保存できればさらに便利になるというものでした。ブラウザで実行されているHTMLファイルがローカルファイルシステムに変更を保存することは不可能であることはわかっていると思っていたので、少しイライラしました
数か月以内に、TiddlyWikiがブラウザに変更を保存できるようにする実験的なFirefox拡張機能を目にしました。コードを調べてみると、ファイルシステムへの書き込みに使用されていたAPIは、`file://` URI経由でロードされている場合に限り、実際には通常のHTMLファイルで利用できることがわかりました
私はFirefoxコードをTiddlyWikiのコアに適合させ、すぐにInternet Explorerにも同様の機能を追加しました(MicrosoftがInternet Explorerとともに配布した古い[[ActiveX|https://en.wikipedia.org/wiki/ActiveX]]コントロールを利用しています)
! TiddlyWikiの成長
TiddlyWikiの成長における大きなマイルストーンは、Nathan Bowersによる"GTDTiddlyWiki"の作成でした。彼はバニラのTiddlyWiki製品を採用し、一般的なGetting Things Done方法論を使用してタスクをトラックするという特定のアプリケーションに適応させました。GTDTiddlyWikiはすぐに人気を博し、[[LifeHacker|https://lifehacker.com/]]などのWebサイトで熱狂的に歓迎されました
その後数年間にわたって、TiddlyWikiの人気は高まり続け、新しい機能や能力も獲得しました。1年以内に、私はTiddlyWikiでオーダーメイドの開発作業を行うことで自活できるようになり、特にWikiパイオニアである[[SocialText|https://en.wikipedia.org/wiki/Socialtext]]と協力して変更をオンラインサーバと同期する機能に取り組みました
! BTの獲得
2007年5月に、[[BT]]は私のコンサルティング会社である[[Osmosoft]]を買収しました。従業員が1人で、収益がほんの少ししかない会社を買収するというのは、異例の決断でした。[[Osmosoft]]は、コミュニティの将来を保証するために私がTiddlyWikiの知的財産をUnaMesaに譲渡したため、TiddlyWikiの知的財産さえ所有していませんでした
[[BT]]の動機は、コミュニティベースのエコシステムを理解することでした。私は"オープンソースイノベーション責任者"として組織に加わり、オープンソースガバナンスの責任を負い、オープンソースコミュニティへの参加方法に関するアドバイスと専門知識を提供しました
! [[Osmosoft]]とTiddlySpace
私はBTに[[Osmosoft]]という名前でチームを作りました。私たちの目的は、オープンソースのメリットを広め、他のチームが実際にそのメリットを実感できるよう支援することでした。また、Webの使用全般、特にWeb標準の使用を普及する必要があることもわかりました
私たちのアプローチは、話すことよりも見せることに重点を置くことでした。私たちはTiddlyWikiコミュニティと協力してエコシステムを拡張し、BT用の多数の内部システムを構築しました(TiddlyWikiに基づくものもあれば、そうでないものもあります)
TiddlyWikiコミュニティへの[[Osmosoft]]の主な貢献は、TiddlyWebとTiddlySpaceの作成でした。TiddlyWebは、Tiddlerのための堅牢なインターネット規模のサーバであり、TiddlerのTiddlyWikiビューを構成することもできました。TiddlySpaceは、TiddlyWebをより直接的に使用可能な形式にパッケージ化する試みでした
! BTを離れる
2011年の終わりまでに、私はBTという企業の枠外でTiddlyWikiの可能性を実現するのがより適切な立場にあると感じるようになりました。そうして、私は退職して独立した開発者として働き始め、主にTiddlyWiki5という形でTiddlyWikiを新しくリブートすることに取り組みました
! TiddlyWiki5の開発
私は2011年11月からTiddlyWikiの新しいリリースに取り組みました。プログラマーとして、すでに書いたものの"バージョン 2.0"に取り組むことは非常に魅力的な提案です。これは、要件が完全に理解され、目的の機能をサポートするために必要なアーキテクチャの進化に集中できることを意味します
! 将来
2014年、 TiddlyWiki5を初めてリリースした直後に、私は次のように書きました:
> TiddlyWiki5がついに"ベータ"ステータスを脱した今、私の希望は、それが長く存続することです。HTML5とNode.jsの標準機能のみを使用しているため、今後何年にもわたって完全に動作しない理由はありません。私の目標は、少なくとも25年は続けることです
これを書いている時点で、TiddlyWiki5は目標の44%を達成しています。コミュニティの皆様のご支援と熱意により、このプロジェクトは今後も発展し、進化していくと確信しています。

View File

@@ -0,0 +1,33 @@
title: TiddlyWiki Anniversaries
ja-title: TiddlyWiki記念日
tags: [[History of TiddlyWiki]]
created: 20250730154331065
modified: 20251215105745893
original-modified: 20250730154331065
! ~TiddlyWikiの20周年
~TiddlyWikiの20周年を祝うために、いくつかのライブストリームを開催しました。録画はここで視聴できます:
* 2024年9月19日 - https://youtube.com/live/z9slx92TyrU
* 2024年9月20日 - https://youtube.com/live/puFdN-FgOjg
* 2024年9月21日 - https://youtube.com/live/0SjsHvwjHGE
* 2024年9月22日 - https://youtube.com/live/oD7Jtq2D4lg
GitHubでは、TiddlyWikiの貢献者に記念日の感想を[[聞いて|https://github.com/TiddlyWiki/TiddlyWiki5/discussions/7983]]お祝いしました。興味深く思慮深い回答がいくつか寄せられました。たとえば、[[@FND|https://github.com/FND]]からの回答は次の通りです:
> TiddlyWikiは、私のキャリアだけでなく、価値観にも計り知れないほどの永続的な影響を与えました。今日に至るまで、私はTiddlyWikiから学んだ[[基本的なコンセプト|https://prepitaph.org/articles/creative-privacy/]] - その多くは、他では忘れられたり無視されたりしています - を頻繁に参照しています。このバックグラウンドがあることで、技術的な複雑さを崇拝したり、テクノロジーの世界に人間が存在することを思い出したりする場合でも、この業界で仕事をする上で自分の方向性を保つことができます。
> TiddlyWikiとは、人々のことです。このコミュニティや、Jeremyがその周りに築いたグループと交流し、そこから学ぶことができたのは、私にとって計り知れない特権でした。また、この特権がまったくの偶然によって私に与えられたものだということを思い出すのにも役立ちます。この恩返しをしていきたいと思います。
~TiddlyWikiを特集した最近のポッドキャスト:
* 2016年のチェンジログ ポッドキャスト - https://changelog.com/podcast/196 ~TiddlyWikiの背景について議論しています
* 2021年のFloss Weeklyの録画 - https://twit.tv/shows/floss-weekly/episodes/620
! ~TiddlyWikiの10周年
2014年9月20日に行われた、TiddlyWikiの10周年を祝うライブストリームはここで視聴できます:
https://www.youtube.com/watch?v=f_02ZV0J9NY

View File

@@ -1,13 +1,11 @@
created: 20130909151600000
modified: 20241002113817654
original-modified: 20210322152237662
modified: 20251210110939585
original-modified: 20250909171928024
tags: TableOfContents Welcome
title: Community
ja-title: コミュニティ
type: text/vnd.tiddlywiki
<<.tip "最新の有益なリンクが[[コミュニティリンク収集|Community Links Aggregator]]に集められています。">>
TiddlyWikiコミュニティは、TiddlyWikiをより良くするために協力し、お互いにベストを尽せるよう支援する熱心なユーザーと開発者のグループです。
すべての関連リンクがこれらのエントリに書かれると、メインのtiddlywiki.comサイトからは削除されます。
<<tabs "Forums Latest Tutorials [[Community Editions]] [[Community Plugins]] [[Community Themes]] [[Community Palettes]] [[Other Resources]] Examples Articles Meetups" "Latest">>
<<tabs "[[TiddlyWiki Project]] [[TiddlyWiki People]] Forums" "TiddlyWiki Project">>

View File

@@ -1,9 +1,9 @@
color: #808
created: 20241009150445080
icon: $:/core/images/link
list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Twitter]] [[TiddlyWiki on Gitter]] [[TiddlyWiki on Open Collective]]
modified: 20241010114936568
original-modified: 20241009150453139
list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Open Collective]]
modified: 20251210112417726
original-modified: 20241115170824144
tags: Welcome
title: TiddlyWiki on the Web
ja-title: ウェブ上のTiddlyWiki

View File

@@ -1,18 +0,0 @@
caption: savetiddlers
color: #4DB6AC
community-author: Buggyj
created: 20171109171935039
delivery: Browser Extension
description: ChromeとFirefoxのブラウザ拡張機能
method: save
modified: 20241014110546647
original-modified: 20210106151027189
tags: Chrome Firefox Saving [[Other Resources]] plugins
title: "savetiddlers" Extension for Chrome and Firefox by buggyj
ja-title: buggyjによるChromeとFirefoxの"savetiddlers"拡張機能
type: text/vnd.tiddlywiki
url: https://github.com/buggyj/savetiddlers
Google ChromeとMozilla Firefoxの拡張機能で、TiddlyWikiの組み込み[[HTML5セーバー|Saving with the HTML5 saver]]による使いにくさの一部を解消し、正しく設定すればTiddlyFoxとほぼ同じくらい簡単に使用できるようになります。
https://github.com/buggyj/savetiddlers

View File

@@ -0,0 +1,18 @@
caption: savetiddlers
color: #4DB6AC
community-author: buggyj
created: 20171109171935039
delivery: Browser Extension
description: Firefoxのブラウザ拡張機能
method: save
modified: 20250809092435788
original-modified: 20250809092435788
tags: Firefox Saving [[Other Resources]] plugins
title: savetiddlers: Extension for Firefox by buggyj
ja-title: buggyjによるFirefoxの"savetiddlers"拡張機能
type: text/vnd.tiddlywiki
url: https://github.com/buggyj/savetiddlers
Mozilla Firefoxの拡張機能で、TiddlyWikiの組み込み[[HTML5セーバー|Saving with the HTML5 saver]]による使いにくさの一部を解消し、正しく設定すれば[[TiddlyFox]]とほぼ同じくらい簡単に使用できるようになります。
{{!!url}}

View File

@@ -1,6 +1,6 @@
created: 20140610213500000
modified: 20241209112247651
original-modified: 20241030132047048
modified: 20251212111127961
original-modified: 20250217154855572
tags: Concepts Features
title: ExternalImages
ja-title: 外部画像
@@ -25,22 +25,28 @@ TiddlyWikiの外部画像は、画像データすべてを埋め込むのでは
参照される外部画像を含む''images''フォルダーを伴うWikiの静的HTMLファイルバージョンを作成するには、次の手順を使用します:
# 通常の方法でTiddlyWikiFoldersに画像Tiddlerを作成します
# 画像を別ファイルとして保存します (慣例により、''images''という名前のサブフォルダに保存します)
# 画像を別ファイルとして保存します (慣例により、''/images''という名前のサブフォルダに保存します)
# ''_canonical_uri''フィールドを追加して画像Tiddlerを外部化します
# メインのHTMLファイルを保存します
画像ファイルは外部化する前に保存する必要があることに注意してください。外部化すると、Wikiストアのメモリ内コピーの''text''フィールドが破壊され、保存の試みが失敗します。
たとえば、''tw5.com'' Wikiの''externalimages''ビルドターゲットを参照してください:
!! 外部画像の構成
たとえば、''tiddlywiki.info''ファイル内に、''externalimages''ビルドターゲットを作成します:
```
--save [is[image]] images
--setfield [is[image]] _canonical_uri $:/core/templates/canonical-uri-external-image text/plain
--setfield [is[image]] text "" text/plain
--render $:/core/save/all externalimages.html text/plain
"build": {
"externalimages": [
--save [is[image]] images
--setfield [is[image]] _canonical_uri $:/core/templates/canonical-uri-external-image text/plain
--setfield [is[image]] text "" text/plain
--render $:/core/save/all externalimages.html text/plain
]
}
```
!! 個別の画像ファイルを保存する
!! 画像Tiddlerの外部化
次の`--save`コマンド ([[Saveコマンド|SaveCommand]]を参照)を使用すると、Wikiの画像を''images''サブフォルダーに保存できます:
@@ -48,8 +54,6 @@ TiddlyWikiの外部画像は、画像データすべてを埋め込むのでは
--save [is[image]] images
```
!! 画像Tiddlerの外部化
2つの`--setfield`コマンドが使用されています: 最初のコマンドは、''_canonical_uri''フィールドをTiddlerのタイトルから派生したURIに設定し、2番目のコマンドはtextフィールドをクリアします。
```
@@ -67,6 +71,20 @@ TiddlyWikiの外部画像は、画像データすべてを埋め込むのでは
これらの操作により、Wikiストア内のTiddlerが変更されるため、後続のコマンド操作に影響する可能性があることに注意してください。
!! 外部画像をビルドするためのNode.jsコマンド
次のコマンドは、`myWiki/output`フォルダー内に外部画像を作成します。
```
tiddlywiki myWiki --build externalimages
```
Windowsでは、次のコマンドを実行すると、[[tw5.comエディション|https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/editions/tw5.com/tiddlywiki.info#L26]]の一部である外部画像が作成されます。ファイルは出力ディレクトリに作成されます。
```
tiddlywiki .\editions\tw5.com --build index
```
! 外部画像の使用について
URIフィールドを別の画像を指すように変更しない限り、ブラウザで外部画像を直接編集することはできません。

View File

@@ -1,6 +1,6 @@
created: 20150124182127000
modified: 20250222110925130
original-modified: 20230710074414361
modified: 20251213102731461
original-modified: 20250731101041336
tags: [[Filter Run]]
title: Filter Step
ja-title: フィルタステップ
@@ -13,10 +13,10 @@ type: text/vnd.tiddlywiki
<$railroad text="""
\start none
\end none
[:"!"]
["!"]
( / "省略の場合のデフォルト: title" /|:
( - | :[[<"オペレータ">|"Filter Operators"]] )
{ [:":" [[<"サフィックス">|"Filter Operators"]] ] } )
( :[[<"オペレータ">|"Filter Operators"]] )
[ {":" [: [[<"サフィックス">|"Filter Operators"]] ] }] )
{ [[<"パラメータ">|"Filter Parameter"]] + "," }
"""/>

View File

@@ -1,8 +1,8 @@
color: #880
created: 20241009150347613
icon: $:/core/images/help
modified: 20241010114029686
original-modified: 20241009150430229
modified: 20251213103718012
original-modified: 20241115170824144
tags: Welcome
title: Find Out More
ja-title: さらに詳しく

View File

@@ -1,19 +1,41 @@
created: 20130822170200000
icon: $:/core/icon
list: [[A Gentle Guide to TiddlyWiki]] [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[What happened to the original TiddlyWiki?]]
modified: 20241010112232871
original-modified: 20241009150333146
modified: 20251213104120189
original-modified: 20250807084952911
tags: Welcome
title: HelloThere
ja-title: こんにちは
type: text/vnd.tiddlywiki
!!.tc-hero-heading ''TiddlyWikiへようこそ。 TiddlyWikiは複雑な情報を[[収集|Creating and editing tiddlers]]し、[[整理|Structuring TiddlyWiki]]し、[[共有|Sharing your tiddlers with others]]するためのユニークな[[非線形|Philosophy of Tiddlers]]ノートブックです。''
<h2
style="
background: red;
padding: 0.5em;
color: white;
font-weight: bold;
text-align: center;
border-radius: 0.5em;
box-shadow: 0 1px 3px 0 #d4d4d5, 0 0 0 1px #d4d4d5;
background-image: linear-gradient(90deg, rgb(34, 132, 224), rgb(95, 174, 248), rgb(34, 132, 224));
">
メモを有効活用する
</h2>
<h2
class="tc-hero-heading"
style="
text-align: center;
">
TiddlyWikiへようこそ。 TiddlyWikiは複雑な情報を[[収集|Creating and editing tiddlers]]し、[[整理|Structuring TiddlyWiki]]し、[[共有|Sharing your tiddlers with others]]するためのユニークな[[非線形|Philosophy of Tiddlers]]ノートブックです
</h2>
[[ToDo リスト|TaskManagementExample]]を管理したり、[[エッセイや小説|"TiddlyWiki for Scholars" by Alberto Molina]]を練ったり、結婚式を準備したりするために使えます。頭をよぎるすべての考えを記録し、柔軟で応答性の高いWebサイトを構築できます。
* ~TiddlyWikiを使用すると、データの保存場所を選択でき、今日とったメモを今後数十年も[[使用できること|Future Proof]]が保証されます
* ~TiddlyWikiはデータとコードを単一のHTMLファイルに保存し、インストールや外部依存を必要とせず、Webブラウザのみで動作します
* ~TiddlyWikiは、新しい機能を追加する多くのプラグインにより、無限にカスタマイズ、拡張可能です。
* ~TiddlyWikiを使用すると、データの保存場所を選択でき、今日とったメモを今後数十年も[[使用できること|Future Proof]]が保証されます
* ~TiddlyWikiは、大規模なユーザーコミュニティの一部である開発者集団の製品です
* ~TiddlyWikiは、新しい機能を追加する多くのプラグインにより、無限にカスタマイズ、拡張可能です
* ~TiddlyWikiは、大規模なユーザーコミュニティの一部である開発者集団の製品です

View File

@@ -1,7 +1,7 @@
color: #088
icon: $:/core/images/star-filled
modified: 20241010114508408
original-modified: 20241001141521924
modified: 20251214104051278
original-modified: 20241115170824144
tags: Welcome
title: Testimonials and Reviews
ja-title: 利用者の声とレビュー

View File

@@ -2,8 +2,8 @@ color: #cc9
created: 20241009163451663
icon: $:/core/images/tip
list: GettingStarted [[Getting Started Video]] [[Find Out More]] [[TiddlyWiki on the Web]] [[Testimonials and Reviews]]
modified: 20241010112536263
original-modified: 20241009163521037
modified: 20251214103541254
original-modified: 20241115170824144
tags: Welcome
title: Quick Start
ja-title: クイックスタート

View File

@@ -1,9 +1,9 @@
created: 20240907042443909
modified: 20241116104031988
original-modified: 20240907042629405
modified: 20251214104453831
original-modified: 20241120225606237
tags: [[Hidden Settings]]
title: Hidden Setting: Default Tiddler Colour
ja-title: 隠し設定: TIddlerのデフォルト色
type: text/vnd.tiddlywiki
デフォルトのTiddler色は、$:/config/DefaultTiddlerColourというTiddlerを作成し、CSSの色の値を含むことによって指定できます。
デフォルトのtag-tiddler色は、$:/config/DefaultTiddlerColourというTiddlerを作成し、CSSの色の値を含むことによって指定できます。詳細については、[[Tiddlerカラーカスケード|Tiddler Colour Cascade]]を参照してください

View File

@@ -1,7 +1,7 @@
created: 20201228143125000
modified: 20241222103744408
original-modified: 20201228143125000
tags: OfficialPlugins
modified: 20251214105341696
original-modified: 20250302051857380
tags: OfficialPlugins [[Plugin Editions]]
title: Share Plugin
ja-title: シェアプラグイン
type: text/vnd.tiddlywiki
@@ -11,4 +11,6 @@ type: text/vnd.tiddlywiki
この実験的なプラグインは、URL経由でTiddlerを共有するためのツールを提供します。これには以下が含まれます:
* 起動時にブラウザのロケーションハッシュからTiddlerのグループをロードする機能
* TiddlerのグループからURLを作成するためのウィザードとテンプレート
* TiddlerのグループからURLを作成するためのウィザードとテンプレート
デモは[ext[https://tiddlywiki.com/share|share]]を参照してください

View File

@@ -1,12 +1,12 @@
created: 20130825160900000
modified: 20241110103519303
original-modified: 20160610083350724
modified: 20251214105948181
original-modified: 20241106165307259
tags: Features [[Working with TiddlyWiki]]
title: Encryption
ja-title: 暗号化
type: text/vnd.tiddlywiki
TiddlyWiki5を単一のHTMLファイルとして使用すると、[[Stanford JavaScript Crypto Library]]を使用してコンテンツを暗号化できます。
TiddlyWiki5を単一のHTMLファイルとして使用すると、[[Stanford JavaScript Crypto Library]]を使用してCCMモードのAES 128ビット暗号化でコンテンツを暗号化できます。
# サイドバーの''ツール''タブに切り替えて、南京錠アイコンのボタンを探します
# ボタンに<<.icon $:/core/images/unlocked-padlock>> ''パスワードの設定''と表示されている場合、現在のウィキは暗号化されていません。ボタンをクリックすると、以降の保存を暗号化するために使用されるパスワードの入力を求められます

View File

@@ -4,7 +4,8 @@ created: 20160216191710789
delivery: Protocol
description: SharePointなどの製品で利用できる標準Webプロトコル
method: save
modified: 20220615155048712
modified: 20251214110658333
original-modified: 20220615155048712
tags: Android Chrome Firefox [[Internet Explorer]] Linux Mac Opera PHP Safari Saving Windows iOS Edge
title: Saving via WebDAV
ja-title: WebDAV経由の保存

View File

@@ -1,6 +1,6 @@
created: 20140908163900000
modified: 20241016111248572
original-modified: 20201228143412000
modified: 20251214112408533
original-modified: 20230803052125981
tags: Learning
title: Sharing your tiddlers with others
ja-title: Tiddlerを他の人と共有する
@@ -12,7 +12,7 @@ type: text/vnd.tiddlywiki
* ~TiddlyWikiをオンラインで公開し、リンクを取得して他の人に送信、または、伝言できます:
** ~TiddlyWikiファイル全体のWebアドレスへのリンク
** 特定のTiddlerへの[[パーマリンク|PermaLinks]](<<.icon $:/core/images/permalink-button>>)
** 現在開いているすべてのTiddlerの[[パーマビュー|PermaViews]](<<.icon $:/core/images/permaview-button>>)リンク
** 現在開いているすべてのTiddlerの[[パーマビュー|PermaLinks]](<<.icon $:/core/images/permaview-button>>)リンク
* [[TiddlyWikiへのDropboxリンクを共有|Sharing a TiddlyWiki on Dropbox]]できます
* テキスト、静的HTML、カンマ区切り値(つまり、スプレッドシート互換)などのさまざまな形式で[[Tiddlerをエクスポート|How to export tiddlers]](<<.icon $:/core/images/export-button>>)できます
* また、~TiddlyWikiを他の人がアクセスできるようにするだけで、例えば、オンラインで公開して、そこから[[Tiddlerをインポート|Importing Tiddlers]]できるようにするだけで、Tiddlerを共有できます

View File

@@ -1,191 +0,0 @@
body {
font-size: 62.5%;
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
a {
color: #BC4378;
}
.ts-loggedin .ts-openidlogin,
.ts-loggedin .ts-login {
display: none;
}
form input {
width: 90px;
border: solid 1px #CCC;
height: 24px;
}
.ts-login input,
.ts-logout input {
font-size: 11px;
}
form input[type=text],
form input[type=password] {
border-radius: 2px;
padding: 0.1em 0.5em;
}
form input[type=submit] {
width: auto;
}
.ts-logout,
.ts-logout form {
font-size: 1.6em;
text-align: center;
}
.ts-logout form {
display: inline;
}
#app-list {
background: #F0F4F8;
list-style: none;
padding: 0; margin: 0;
}
#app-list li {
height: 4.5em;
line-height: 4.5em;
background: url(/bags/common/tiddlers/double_angle_lightblue_42x42.png) no-repeat 90% #F0F4F8;
background-size: 24px 24px;
}
#app-list li:hover {
cursor: pointer;
background: url(/bags/common/tiddlers/double_angle_lightblue_42x42.png) no-repeat 90% #0082AF;
background-size: 24px 24px;
}
#app-list li form,
#app-list li a {
display: block;
height: 100%;
font-size: 2em;
text-decoration: none;
color: #8C9DA7;
width: 100%;
font-weight: normal;
}
#app-list li input {
width: 50%;
}
#app-list li:hover a {
color: #E56AA0;
}
.tsbackstage #app-list li:hover a {
color: #fff;
}
#app-list .app-img {
position: relative;
top: 0.2125em;
margin: 0 1.25em 0 1em;
height: 1.25em;
width: 1.25em;
}
#app-list .search .app-img {
margin-right: 10px;
}
.ts-loggedin .login-method:target,
.login-method {
display: none;
}
.login-method {
display: block;
}
.login-method-hide {
display: none;
}
.login-method p {
padding-bottom: 5px;
}
.tsbackstage .message {
color: #4C4A54;
display: block;
text-align: center;
}
.tsbackstage .message a {
text-decoration: none;
}
.btn {
border-radius: 2px;
}
.btn-action {
background: #0082AF;
color: #fff;
border: none;
}
.btn-action:hover {
box-shadow: 0 0 3px rgba(0,0,0,.5);
}
form input.btn-system {
background: #F8F9F9;
color: #4C4A54;
border: 1px solid rgba(0,0,0,.2);
}
.btn-system:hover {
color: #000;
cursor: pointer;
box-shadow: 0 0 3px rgba(0,0,0,.25);
}
.search form {
height: 4.5em;
}
.search input {
font-size: 1em;
border: none;
outline: none;
padding: 0.2em 0.5em;
background: transparent;
border-radius: 2px;
}
.search:hover input {
color: #fff;
}
.search input:focus {
-webkit-box-shadow: inset 0 0 8px rgba(140,157,167,0.75);
-moz-box-shadow: inset 0 0 8px rgba(140,157,167,0.75);
box-shadow: inset 0 0 8px rgba(140,157,167,0.75);
}
.search:hover input:focus {
-webkit-box-shadow: inset 0 0 8px rgba(255,255,255,0.5);
-moz-box-shadow: inset 0 0 8px rgba(255,255,255,0.5);
box-shadow: inset 0 0 8px rgba(255,255,255,0.5);
}
.logindetails {
background: #fff;
padding: 1em 1em 2em;
box-shadow: 0 0 6px 0px rgba(0, 0, 0, 0.25);
z-index: 1;
position: relative;
text-align: center;
}
.logindetails p {
margin: 0;
}

View File

@@ -1,95 +0,0 @@
<!DOCTYPE html>
<!-- saved from url=(0078)http://interview.tiddlyspace.com/bags/common/tiddlers/backstage#userpass-login -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="./normalize.css">
<link rel="stylesheet" href="./app.css">
</head>
<body class="tsbackstage ts-loggedin ts-member">
<div class="logindetails">
<form class="ts-login login login-method" action="http://interview.tiddlyspace.com/bags/common/tiddlers/backstage" autocomplete="off" id="userpass-login">
<p>login via <a class="toggle-form" href="http://interview.tiddlyspace.com/bags/common/tiddlers/backstage#openid-login">openid</a></p>
<input autocapitalize="off" autocorrect="off" type="text" name="username" placeholder="username">
<input autocapitalize="off" autocorrect="off" type="password" name="password" placeholder="password">
<input type="hidden" name="redirect" value="/bags/common/tiddlers/backstage?action=login#refreshParent">
<input type="submit" class="btn btn-action" value="Log In">
</form>
<form class="ts-openidlogin login-method login-method-hide" id="openid-login" method="post" action="http://interview.tiddlyspace.com/challenge/tiddlywebplugins.tiddlyspace.openid">
<p>login with <a class="toggle-form" href="http://interview.tiddlyspace.com/bags/common/tiddlers/backstage#userpass-login">username and password</a></p>
<input name="tiddlyweb_redirect" type="hidden" value="/bags/common/tiddlers/backstage">
<input class="openid" autocapitalize="off" autocorrect="off" type="text" name="openid" placeholder="your openid">
<input class="button btn btn-action" type="submit" value="Sign In">
<a class="openid-help" href="http://openid.net/get-an-openid/">What is an open id?</a>
</form>
<div class="ts-logout logout"><span class="message">Welcome back <a href="http://jermolene.tiddlyspace.com/" target="_parent">jermolene</a><span>!</span></span>
<form method="post" action="http://interview.tiddlyspace.com/logout">
<input type="hidden" name="tiddlyweb_redirect" value="/bags/common/tiddlers/backstage?action=login#refreshParent">
<input type="submit" class="btn btn-system" value="Log out">
<input type="hidden" name="csrf_token" value="2016120917:jermolene:8cef480d1bd2bf774327ae085b2efa8bb7937fd1"></form>
</div>
</div>
<div><ul id="app-list">
<li class="search">
<form method="GET" target="_blank" action="http://interview.tiddlyspace.com/hsearch">
<img src="./search.png" alt="Search Icon" class="app-img">
<input type="text" name="q" placeholder="Search">
</form></li>
<li class="help">
<a href="http://help.tiddlyspace.com/" target="_blank">
<img src="./help.png" alt="Help SiteIcon" class="app-img">Help
</a>
</li>
<li class="space">
<a href="http://interview.tiddlyspace.com/_space" target="_blank">
<img src="./SiteIcon(24)" alt="Space SiteIcon" class="app-img">This space
</a>
</li>
<li class="account"><a target="_blank" href="http://jermolene.tiddlyspace.com/_account"><img class="app-img" alt="SiteIcon for jermolene" src="./SiteIcon">Your account</a></li></ul></div>
<script type="text/javascript" src="./jquery.js"></script>
<script type="text/javascript" src="./chrjs"></script>
<script type="text/javascript" src="./chrjs.users"></script>
<script type="text/javascript" src="./chrjs.space"></script>
<script type="text/javascript" src="./chrjs.identities"></script>
<script type="text/javascript" src="./ts.js"></script>
<script src="./status.js"></script>
<script type="text/javascript">
if(window.location.hash === "#refreshParent") {
window.location.hash = "";
window.parent.location.reload();
}
var li, siteiconurl, link, host;
ts.init(function(ts) {
host = ts.getHost(ts.user.name);
$(document.body).show();
window.location.hash = "#userpass-login";
if (ts.user.anon) {
$('.toggle-form').click(function(ev) {
$(this).closest('form').addClass('login-method-hide')
.siblings('form').removeClass('login-method-hide');
ev.preventDefault();
});
}
if ($(document.body).hasClass('ts-nonmember')) {
$('.write').remove();
}
if(!ts.user.anon) {
li = $('<li class="account" />').appendTo("#app-list")[0];
siteiconurl = host + '/bags/' + ts.user.name + '_public/tiddlers/SiteIcon';
link = $('<a target="_blank" />').attr("href", host + "/_account").
text("Your account").appendTo(li);
$('<img class="app-img">').attr("alt", 'SiteIcon for ' + ts.user.name).
attr("src", siteiconurl).prependTo(link);
}
}, {});
(function($) {
$(function() {
// send doc height to parent window
var totalHeight = $("html").height();
if(self !== top && !!window.postMessage) {
parent.postMessage(totalHeight, "*");
}
});
}(jQuery));
</script>
</body></html>

View File

@@ -1,360 +0,0 @@
/***
Adds the app switcher to a TiddlySpace app.
Makes use of tw.Stylesheet
Triple licensed under the BSD, MIT and GPL licenses:
http://www.opensource.org/licenses/bsd-license.php
http://www.opensource.org/licenses/mit-license.php
http://www.gnu.org/licenses/gpl.html
***/
(function() {
// Add or replace a style sheet
// css argument is a string of CSS rule sets
// options.id is an optional name identifying the style sheet
// options.doc is an optional document reference
// N.B.: Uses DOM methods instead of jQuery to ensure cross-browser comaptibility.
var twStylesheet = function(css, options) {
options = options || {};
var id = options.id || "backstageStyleSheet";
var doc = options.doc || document;
var el = doc.getElementById(id);
if(doc.createStyleSheet) { // IE-specific handling
if(el) {
el.parentNode.removeChild(el);
}
doc.getElementsByTagName("head")[0].insertAdjacentHTML("beforeEnd",
'&nbsp;<style id="' + id + '" type="text/css">' + css + '</style>'); // fails without &nbsp;
} else { // modern browsers
if(el) {
el.replaceChild(doc.createTextNode(css), el.firstChild);
} else {
el = doc.createElement("style");
el.type = "text/css";
el.id = id;
el.appendChild(doc.createTextNode(css));
doc.getElementsByTagName("head")[0].appendChild(el);
}
}
};
// detect background-size support
// in <IE9 need to fallback to msfilter property
function hasBgSizing() {
var supported,
elem = document.createElement('div');
document.body.appendChild(elem);
elem.style.cssText = "background-size: cover;";
supported = (elem.style.backgroundSize === undefined || elem.style.backgroundSize === null) ? false : true;
// clean up
elem.parentNode.removeChild(elem);
return supported;
}
// ms filters as fix for not supporting background-size property
var msfilter_in = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/bags/tiddlyspace/tiddlers/privateAndPublicIcon', sizingMethod='scale')",
msfilter_out = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/bags/tiddlyspace/tiddlers/publicIcon', sizingMethod='scale')";
var stylesheet = ["#tsbackstage {",
" height: 256px; /* default value unless changed */",
" z-index: 1000;",
" position: relative;",
"}",
"",
"#app-picker {",
" cursor: pointer;",
" position: absolute;",
" right: 24px;",
" top: 0px;",
" width: 24px;",
" height: 24px;",
" background-size: 24px 24px;",
" text-indent: -999px;",
" overflow: hidden;",
" z-index: 2000;",
" border: none;",
" opacity: 0.5;",
"}",
"",
"#app-picker:hover {",
" background-color: none !important;",
" opacity: 1;",
"}",
"",
".bs-popup {",
" width: 100%;",
" position: absolute;",
" z-index: 1000;",
" right: 10px;",
" top: 36px;",
"}",
"",
".bubble .description {",
" margin-left: 70px;",
" margin-top: 2px;",
"}",
"",
".bubble {",
" float: right;",
" font-size: 0.9em;",
" font-family: Georgia;",
" position: relative;",
" width: 300px;",
" margin: 0px auto 0px auto;",
" margin: top right bottom left;",
" border: solid 1px rgb(200, 200, 200);",
" border-radius: 4px;",
" -webkit-box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
" -moz-box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
" -o-box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
" -ms-box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
" box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
" background-color: #F0F4F8;",
"}",
"",
".ts-logout {",
" display: none;",
"}",
".ts-loggedin .ts-logout {",
" display: block;",
"}",
".arrow {",
" border-width: 0 10px 10px;",
" border-style: dashed dashed solid;",
" width: 0;",
" height: 0;",
" border-color: transparent;",
" display: inline-block;",
" position: absolute;",
" top: -10px;",
" right: 16px;",
" border-bottom-color: #fff;",
"}",
".bubble div.whitearrow {",
" top: -11px;",
" border-bottom-color: rgba(0,0,0,0.25);",
"}",
".ts-terms {",
" color: #999;",
" display: block;",
" font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Garuda, Verdana, Tahoma, sans-serif;",
" font-size: 12px;",
" font-style: normal;",
" font-variant: normal;",
" font-weight: normal;",
" height: 46px;",
" line-height: 16.7999992370605px;",
" z-index: 800;",
" background-color: rgb(218, 218, 218);",
" padding-right: 50px;",
" padding-top: 10px;",
" padding-left: 10px;",
" padding-bottom: 10px;",
"}",
".ts-terms a {",
" color: #333;",
"}",
".ts-service-update {",
" padding: 10px;",
" background-color: red;",
" font-family: Arial;",
" color: #ffffff;",
" font-size: 15px;",
" text-align: center;",
"}",
".ts-service-update a {",
" color: #ffffff;",
" font-weight: bold;",
" text-decoration: underline;",
"}",
".ts-service-update a:hover {",
" background-color: #cc0000;",
" text-decoration: none;",
"}"
].join("\n");
function addEventListener(node, event, handler, bubble) {
if (node.addEventListener){
node.addEventListener(event, handler, bubble);
} else if (node.attachEvent){
event = event == "click" ? "onclick" : event;
event = event == "load" ? "onload" : event;
node.attachEvent(event, handler);
}
}
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
}
return "";
}
var loadEvent = function() {
var link = document.createElement("a");
link.setAttribute("id", "app-picker");
link.setAttribute("class", "app-picker");
link.setAttribute("title", "Click to navigate around tiddlyspace");
link.appendChild(document.createTextNode("tiddlyspace"));
var backgroundSizeSupported = hasBgSizing();
// Quite a hack. GUEST does not have a csrf token.
if (/csrf_token=\d+:\w+:\w+/.test(document.cookie)) {
if( backgroundSizeSupported ) {
link.style.backgroundImage = 'url(/bags/tiddlyspace/tiddlers/privateAndPublicIcon)';
} else {
link.style.filter = msfilter_in;
}
} else {
if( backgroundSizeSupported ) {
link.style.backgroundImage = 'url(/bags/tiddlyspace/tiddlers/publicIcon)';
} else {
link.style.filter = msfilter_out;
}
stylesheet = stylesheet.replace('height: 180px;', 'height: 156px;');
}
var body = document.getElementsByTagName("BODY")[0];
body.insertBefore(link, body.firstChild);
var html = [
'<div class="bubble">',
'<iframe src="/bags/common/tiddlers/backstage#userpass-login" name="tsbackstage" id="tsbackstage" width="auto" frameborder=0 border=0></iframe>',
'<div class="arrow whitearrow"></div>',
'<div class="arrow"></div>',
'</div>'].join("");
var bubble = document.createElement("div");
bubble.setAttribute("id", "bs-popup");
bubble.style.cssText = "visibility:hidden;";
bubble.className = "bs-popup";
bubble.innerHTML = html;
body.insertBefore(bubble, link);
//Terms and Conditions
if (document.getElementById("backstageButton")) {
//backstage area is displayed, so also check for terms acceptance;
var acceptedTermsVersion,
latestTermsVersion = 'v1.0-dec2014',
privacyPolicyOpen = false,
cookiePolicyOpen = false;
acceptedTermsVersion = getCookie('termsAccepted');
if (acceptedTermsVersion !== latestTermsVersion) {
html = 'The tiddlyspace service uses cookies. By using the service, you are agreeing to the <a href="http://osmo-terms.tiddlyspace.com/Cookies20141205" target="_blank">Cookie Policy</a>. We have updated tiddlyspace <a href="http://osmo-terms.tiddlyspace.com/TermsOfService20141205" target="_blank">Terms of Service</a>, effective as of 05 December 2014. By using the service you\'re agreeing to the updated terms. <a id="acceptTermsId" href="#">OK, got it</a>.';
var terms = document.createElement('div');
terms.setAttribute('id', 'bs-terms');
terms.className = 'ts-terms';
terms.innerHTML = html;
contentWrapper = document.getElementById('contentWrapper');
body.insertBefore(terms, contentWrapper);
addEventListener(document.getElementById("acceptTermsId"), "click", function(ev) {
setCookie('termsAccepted', latestTermsVersion, 365);
terms.style.cssText = "display:none;";
});
}
//Add Service Update Message
html = 'Service Update: <a href="http://osmo-service.tiddlyspace.com/ServiceUpdate20161205">***Please read this important Tiddlyspace service announcement December 5th 2016 ***</a>';
var serviceUpdate = document.createElement('div');
serviceUpdate.setAttribute('id', 'bs-serviceUpdate');
serviceUpdate.className = 'ts-service-update';
serviceUpdate.innerHTML = html;
contentWrapper = document.getElementById('contentWrapper');
body.insertBefore(serviceUpdate, contentWrapper);
//End of Service Update Message
}
//End of Terms and Conditions
twStylesheet(stylesheet);
var bubbleFadeInterval;
function fade(el, fadeIn) {
var opacity = fadeIn ? 0 : 1;
if(bubbleFadeInterval) {
clearInterval(bubbleFadeInterval);
}
bubbleFadeInterval = setInterval(function() {
// TODO: IE does not support opacity
el.style.cssText = "opacity:" + opacity;
opacity = fadeIn ? opacity + 0.1 : opacity - 0.1;
if(opacity < 0 || opacity > 1) {
clearInterval(bubbleFadeInterval);
el.style.cssText = fadeIn ? "" : "visibility:hidden;";
}
}, 25);
}
addEventListener(link, "mousedown", function(ev) {
ev.preventDefault();
}, false);
var bubbleOpen = false;
var toggleBubble = function(ev) {
if(ev.stopPropagation) {
ev.stopPropagation();
} else {
ev.cancelBubble = false;
}
if(bubbleOpen) {
fade(bubble, false);
} else {
fade(bubble, true);
}
bubbleOpen = !bubbleOpen;
};
addEventListener(link, "click", toggleBubble);
addEventListener(window.document.body, "click",
function(ev) {
var targ,
ev = ev || window.event;
if (ev.target) targ = ev.target;
else if (ev.srcElement) targ = ev.srcElement;
if(targ == link) {
return;
}
if(bubbleOpen) {
toggleBubble(ev);
}
}, true);
addEventListener(bubble, "click", function(ev) {
if(ev.stopPropagation) {
ev.stopPropagation();
} else {
ev.cancelBubble = false;
}
});
};
if(window.top == window) { // only add the backstage when NOT in an iframe (top window)
addEventListener(window, "load", loadEvent);
// check if postMessage is supported
// best test: https://github.com/ternarylabs/porthole/pull/10
if(!!window.postMessage) {
addEventListener(window, "message", function(e) {
var iframe = document.getElementById('tsbackstage');
if(e.data) {
iframe.style.height = e.data + "px";
}
});
}
}
})();

View File

@@ -1,373 +0,0 @@
/***
https://raw.github.com/tiddlyweb/chrjs/master/main.js
***/
//{{{
// TiddlyWeb adaptor
// v0.14.3
/*jslint vars: true, unparam: true, nomen: true, white: true */
/*global jQuery */
var tiddlyweb = (function($) {
"use strict";
var tw = {
routes: {
// host is the TiddlyWeb instance's URI (including server_prefix)
// placeholders "_type" & "name" refer to the respective bag/recipe
root : "{host}/",
bags : "{host}/bags",
bag : "{host}/bags/{name}",
recipes : "{host}/recipes",
recipe : "{host}/recipes/{name}",
tiddlers : "{host}/{_type}s/{name}/tiddlers",
tiddler : "{host}/{_type}s/{name}/tiddlers/{title}",
revisions: "{host}/{_type}s/{name}/tiddlers/{title}/revisions",
revision : "{host}/{_type}s/{name}/tiddlers/{title}/revisions/{revision}",
search : "{host}/search?q={query}"
}
};
var convertTimestamp, supplant;
// host (optional) is the URI of the originating TiddlyWeb instance
tw.Resource = function(type, host) {
if(arguments.length) { // initialization
this._type = type;
if(host !== false) {
this.host = host !== undefined ? host.replace(/\/$/, "") : null;
}
}
};
$.extend(tw.Resource.prototype, {
// retrieves resource from server
// callback is passed resource, status, XHR (cf. jQuery.ajax success)
// errback is passed XHR, error, exception, resource (cf. jQuery.ajax error)
// filters is an optional filter string (e.g. "select=tag:foo;limit=5")
get: function(callback, errback, filters) {
var uri = this.route();
if(filters) {
var separator = uri.indexOf("?") === -1 ? "?" : ";";
uri += separator + filters;
}
var self = this;
return $.ajax({
url: uri,
type: "GET",
dataType: "json",
success: function(data, status, xhr) {
var resource = self.parse(data);
resource.etag = xhr.getResponseHeader("Etag");
callback(resource, status, xhr);
},
error: function(xhr, error, exc) {
errback(xhr, error, exc, self);
}
});
},
// sends resource to server
// callback is passed data, status, XHR (cf. jQuery.ajax success)
// errback is passed XHR, error, exception, resource (cf. jQuery.ajax error)
put: function(callback, errback) {
var self = this;
var options = {
url: this.route(),
type: "PUT",
contentType: "application/json",
data: JSON.stringify(this.baseData()),
success: function(data, status, xhr) {
callback(self, status, xhr);
},
error: function(xhr, error, exc) {
errback(xhr, error, exc, self);
}
};
if(this.ajaxSetup) {
this.ajaxSetup(options);
}
return $.ajax(options);
},
// deletes resource on server
// callback is passed data, status, XHR (cf. jQuery.ajax success)
// errback is passed XHR, error, exception, resource (cf. jQuery.ajax error)
"delete": function(callback, errback) {
var self = this;
var options = {
url: this.route(),
type: "DELETE",
success: function(data, status, xhr) {
callback(self, status, xhr);
},
error: function(xhr, error, exc) {
errback(xhr, error, exc, self);
}
};
if(this.ajaxSetup) {
this.ajaxSetup(options);
}
return $.ajax(options);
},
// returns an object carrying only the essential information of the resource
baseData: function() {
var data = {},
self = this;
$.each(this.data, function(i, item) {
var value = self[item];
if(value !== undefined) {
data[item] = value;
}
});
return data;
},
// returns corresponding instance from a raw object (if applicable)
parse: function(data) {
return data;
},
// list of accepted keys in serialization
data: [],
// returns resource's URI
route: function() {
return supplant(tw.routes[this._type], this);
}
});
var Container = function(type, name, host) {
if(arguments.length) { // initialization
tw.Resource.apply(this, [type, host]);
this.name = name;
this.desc = "";
this.policy = new tw.Policy({});
}
};
Container.prototype = new tw.Resource();
$.extend(Container.prototype, {
tiddlers: function() {
return new tw.TiddlerCollection(this);
},
parse: function(data) {
var type = tw._capitalize(this._type),
container = new tw[type](this.name, this.host);
data.policy = new tw.Policy(data.policy);
return $.extend(container, data);
},
data: ["desc", "policy"]
});
// attribs is an object whose members are merged into the instance (e.g. query)
tw.Collection = function(type, host, attribs) {
if(arguments.length) { // initialization
tw.Resource.apply(this, [type, host]);
$.extend(this, attribs);
}
};
tw.Collection.prototype = new tw.Resource();
tw.TiddlerCollection = function(container, tiddler) {
if(arguments.length) { // initialization
tw.Collection.apply(this, [tiddler ? "revisions" : "tiddlers"]);
this.container = container || null;
this.tiddler = tiddler || null;
}
};
tw.TiddlerCollection.prototype = new tw.Collection();
$.extend(tw.TiddlerCollection.prototype, {
parse: function(data) {
var container = this.container;
return $.map(data, function(item, i) {
var tiddler = new tw.Tiddler(item.title, container),
bag = item.bag;
tiddler = tw.Tiddler.prototype.parse.apply(tiddler, [item]);
if(!tiddler.bag && bag) { // XXX: bag always present!?
tiddler.bag = new tw.Bag(bag, container.host);
}
if(!tiddler.recipe && item.recipe) {
tiddler.recipe = new tw.Recipe(item.recipe, container.host);
}
delete item.recipe;
return $.extend(tiddler, item);
});
},
route: function() {
var params = this.container;
if(this.tiddler) {
var container = this.tiddler.bag || this.tiddler.recipe;
params = {
_type: container._type,
host: container.host,
name: container.name,
title: this.tiddler.title
};
}
return supplant(tw.routes[this._type], params);
}
});
tw.Search = function(query, host) {
tw.Collection.apply(this, ["search", host]);
this.query = query;
};
tw.Search.prototype = new tw.Collection();
$.extend(tw.Search.prototype, {
parse: function(data) {
this.container = { // XXX: hacky
_type: "bag",
host: this.host
};
var tiddlers = tw.TiddlerCollection.prototype.parse.apply(this, arguments);
delete this.container;
return tiddlers;
}
});
// title is the name of the tiddler
// container (optional) is an instance of either Bag or Recipe
// optionally accepts a single object representing tiddler attributes
tw.Tiddler = function(title, container) {
tw.Resource.apply(this, ["tiddler", false]);
this.title = title;
this.bag = container && container._type === "bag" ? container : null;
this.recipe = container && container._type === "recipe" ? container : null;
var self = this;
$.each(this.data, function(i, item) {
self[item] = undefined; // exposes list of standard attributes for inspectability
});
if(title && title.title) { // title is an object of tiddler attributes
$.extend(this, title);
}
};
tw.Tiddler.prototype = new tw.Resource();
$.extend(tw.Tiddler.prototype, {
revisions: function() {
return new tw.TiddlerCollection(this.bag || this.recipe, this);
},
route: function() {
var container = this.bag || this.recipe;
var params = $.extend({}, this, {
host: container ? container.host : null,
_type: this.bag ? "bag" : (this.recipe ? "recipe" : null),
name: container ? container.name : null
});
return supplant(tw.routes[this._type], params);
},
parse: function(data) {
var tiddler = new tw.Tiddler(this.title),
container = this.bag || this.recipe;
if(data.bag) {
tiddler.bag = new tw.Bag(data.bag, container.host);
delete data.bag;
}
delete data.recipe;
tiddler.created = data.created ? convertTimestamp(data.created) : new Date();
delete data.created;
tiddler.modified = data.modified ? convertTimestamp(data.modified) : new Date();
delete data.modified;
if(this.recipe) {
tiddler.recipe = this.recipe;
}
return $.extend(tiddler, data);
},
data: ["created", "creator", "modifier", "modified", "tags", "type", "text",
"fields"],
ajaxSetup: function(options) {
var self = this;
if(this.etag && (options.type === "PUT" || options.type === "DELETE")) {
options.beforeSend = function(xhr) {
xhr.setRequestHeader("If-Match", self.etag);
};
}
if(options.type === "PUT") {
var callback = options.success;
options.success = function(data, status, xhr) {
var loc = xhr.getResponseHeader("Location"),
etag = xhr.getResponseHeader("Etag");
if(loc && etag) {
self.etag = etag;
if(!self.bag) {
var bag = loc.split("/bags/").pop().split("/")[0];
self.bag = new tw.Bag(bag, self.recipe.host);
}
callback(self, status, xhr);
} else { // IE
self.get(callback, options.error);
}
};
}
}
});
tw.Revision = function(id, tiddler) {
var container = tiddler.bag || tiddler.recipe;
tw.Tiddler.apply(this, [tiddler.title, container]);
this._type = "revision";
this.revision = id;
};
tw.Revision.prototype = new tw.Tiddler();
$.extend(tw.Revision.prototype, {
revisions: false,
data: false,
put: false,
"delete": false
});
tw.Bag = function(name, host) {
Container.apply(this, ["bag", name, host]);
};
tw.Bag.prototype = new Container();
tw.Recipe = function(name, host) {
Container.apply(this, ["recipe", name, host]);
this.recipe = [];
};
tw.Recipe.prototype = new Container();
$.extend(tw.Recipe.prototype, {
data: ["recipe"].concat(Container.prototype.data)
});
tw.Policy = function(constraints) { // TODO: validation?
var self = this;
$.each(this.constraints, function(i, item) {
self[item] = constraints[item];
});
};
tw.Policy.prototype.constraints = ["read", "write", "create", "delete",
"manage", "accept", "owner"];
/*
* utilities
*/
tw._capitalize = function(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
};
// convert YYYYMMDDhhmmss timestamp to Date instance
convertTimestamp = function(t) {
if (t.match(/^\d{12,17}$/)) {
return new Date(Date.UTC(
parseInt(t.substr(0, 4), 10),
parseInt(t.substr(4, 2), 10) - 1,
parseInt(t.substr(6, 2), 10),
parseInt(t.substr(8, 2), 10),
parseInt(t.substr(10, 2), 10),
parseInt(t.substr(12, 2) || "0", 10),
parseInt(t.substr(14, 3) || "0", 10)
));
} else {
return new Date(Date.parse(t));
}
};
// adapted from Crockford (http://javascript.crockford.com/remedial.html)
supplant = function(str, obj) {
return str.replace(/{([^{}]*)}/g, function (a, b) {
var r = obj[b];
r = typeof r === "string" || typeof r === "number" ? r : a;
return $.inArray(b, ["host", "query"]) !== -1 ? r : encodeURIComponent(r); // XXX: special-casing
});
};
return tw;
}(jQuery));
//}}}

View File

@@ -1,42 +0,0 @@
/***
TiddlySpace extensions for [[chrjs]]
|''Requires''|chrjs.users|
***/
//{{{
(function($) {
tiddlyweb.routes.identities = "{host}/users/{username}/identities";
var IdentitiesCollection = function(user) {
tiddlyweb.Collection.apply(this, ["identities", user.host, {
username: user.username
}]);
};
IdentitiesCollection.prototype = new tiddlyweb.Collection();
jQuery.extend(IdentitiesCollection.prototype, {
add: function(identity, callback, errback) {
var tiddler = new tiddlyweb.Tiddler(identity);
tiddler.bag = new tiddlyweb.Bag("MAPUSER", this.host);
tiddler.put(callback, errback);
},
get: function(callback, errback) {
var uri = this.route();
$.ajax({
type: "get",
dataType: "json",
url: uri,
success: function(uris, status, xhr) {
callback(uris, status, xhr);
},
error: function(xhr, error, exc) {
errback(xhr, error, exc, self);
}
});
}
});
tiddlyweb.User.prototype.identities = function() {
return new IdentitiesCollection(this);
};
})(jQuery);
//}}}

View File

@@ -1,108 +0,0 @@
/***
TiddlySpace extensions for [[chrjs]]
***/
//{{{
(function($) {
tiddlyweb.routes.spaces = "{host}/spaces";
tiddlyweb.routes.space = "{host}/spaces/{name}";
tiddlyweb.routes.members = "{host}/spaces/{name}/members";
tiddlyweb.routes.member = "{host}/spaces/{name}/members/{username}";
tiddlyweb.Space = function(name, host) {
tiddlyweb.Resource.apply(this, ["space", host]);
this.name = name;
};
tiddlyweb.Space.prototype = new tiddlyweb.Resource();
$.extend(tiddlyweb.Space.prototype, {
create: function(callback, errback) { // API wrapper
this.put.apply(this, arguments);
},
members: function() {
return new MemberCollection(this);
},
includes: function() {
return new IncludesCollection(this);
}
});
var Member = function(username, space) {
tiddlyweb.Resource.apply(this, ["member", space.host]);
this.name = space.name;
this.username = username;
};
Member.prototype = new tiddlyweb.Resource();
var MemberCollection = function(space) {
tiddlyweb.Collection.apply(this, ["members", space.host, {
name: space.name
}]);
};
MemberCollection.prototype = new tiddlyweb.Collection();
$.extend(MemberCollection.prototype, {
add: function(username, callback, errback) {
var member = new Member(username, this);
member.put(callback, errback);
},
remove: function(username, callback, errback) {
var member = new Member(username, this);
member["delete"](callback, errback);
}
});
var IncludesCollection = function(space) {
tiddlyweb.Collection.apply(this, ["space", space.host, {
name: space.name
}]);
};
IncludesCollection.prototype = new tiddlyweb.Collection();
$.extend(IncludesCollection.prototype, {
get: function(callback, errback) {
var self = this;
var recipe = new tiddlyweb.Recipe(this.name + "_public", this.host);
recipe.get(function(recipe, status, xhr) {
var inclusions = $.map(recipe.recipe, function(item, i) {
var arr = item[0].split("_public");
return (arr[0] != self.name && arr[1] === "") ? arr[0] : null;
});
callback(inclusions, status, xhr);
}, function(xhr, error, exc) {
errback(xhr, error, exc, self);
});
},
add: function(name, callback, errback) {
var self = this;
var names = typeof(name) === "string" ? [ name ] : name;
$.ajax({
type: "post",
url: this.route(),
contentType: "json",
data: JSON.stringify({ "subscriptions": names }),
success: function(response, status, xhr) {
callback(self, status, xhr);
},
error: function(xhr, error, exc) {
errback(xhr, error, exc, self);
}
});
},
remove: function(name, callback, errback) {
var self = this;
var names = typeof(name) === "string" ? [ name ] : name;
$.ajax({
type: "post",
contentType: "json",
url: this.route(),
data: JSON.stringify({ "unsubscriptions": names }),
success: function(response, status, xhr) {
callback(self, status, xhr);
},
error: function(xhr, error, exc) {
errback(xhr, error, exc, self);
}
});
}
});
})(jQuery);
//}}}

View File

@@ -1,57 +0,0 @@
/***
https://raw.github.com/tiddlyweb/chrjs/master/users.js
***/
//{{{
// chrjs users extension
// v0.5.0
//
// requires tiddlywebplugins.socialusers
// http://pypi.python.org/pypi/tiddlywebplugins.socialusers
/*jslint vars: true */
/*global jQuery, tiddlyweb */
(function($, tw) {
"use strict";
tw.routes.users = "{host}/users";
tw.routes.user = "{host}/users/{username}";
tw.User = function(username, password, host) {
tw.Resource.apply(this, ["user", host]);
this.username = username;
this.password = password;
};
tw.User.prototype = new tw.Resource();
$.extend(tw.User.prototype, {
create: function(callback, errback) {
var uri = this.route().split("/"); // XXX: hacky!?
uri.pop();
uri = uri.join("/");
var data = {
username: this.username,
password: this.password
};
var self = this;
return $.ajax({
url: uri,
type: "POST",
contentType: "application/json",
data: JSON.stringify(data),
success: callback,
error: function(xhr, error, exc) {
errback(xhr, error, exc, self);
}
});
},
setPassword: function(newPass, callback, errback) {
this.old_password = this.password; // XXX: should not use underscore (consistency)
this.password = newPass;
return this.put(callback, errback);
},
data: ["password", "old_password"]
});
}(jQuery, tiddlyweb));
//}}}

View File

@@ -1,406 +0,0 @@
/*! normalize.css v2.1.3 | MIT License | git.io/normalize */
/* ==========================================================================
HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined in IE 8/9.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
/**
* Correct `inline-block` display not defined in IE 8/9.
*/
audio,
canvas,
video {
display: inline-block;
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9.
* Hide the `template` element in IE, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* ==========================================================================
Base
========================================================================== */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* ==========================================================================
Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background: transparent;
}
/**
* Address `outline` inconsistency between Chrome and other browsers.
*/
a:focus {
outline: thin dotted;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* ==========================================================================
Typography
========================================================================== */
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari 5, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9, Safari 5, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari 5 and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Correct font family set oddly in Safari 5 and Chrome.
*/
code,
kbd,
pre,
samp {
font-family: monospace, serif;
font-size: 1em;
}
/**
* Improve readability of pre-formatted text in all browsers.
*/
pre {
white-space: pre-wrap;
}
/**
* Set consistent quote types.
*/
q {
quotes: "\201C" "\201D" "\2018" "\2019";
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* ==========================================================================
Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9.
*/
img {
border: 0;
}
/**
* Correct overflow displayed oddly in IE 9.
*/
svg:not(:root) {
overflow: hidden;
}
/* ==========================================================================
Figures
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari 5.
*/
figure {
margin: 0;
}
/* ==========================================================================
Forms
========================================================================== */
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* 1. Correct font family not being inherited in all browsers.
* 2. Correct font size not being inherited in all browsers.
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
*/
button,
input,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 2 */
margin: 0; /* 3 */
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
button,
input {
line-height: normal;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
* Correct `select` style inheritance in Firefox 4+ and Opera.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari 5 and Chrome
* on OS X.
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* 1. Remove default vertical scrollbar in IE 8/9.
* 2. Improve readability and alignment in all browsers.
*/
textarea {
overflow: auto; /* 1 */
vertical-align: top; /* 2 */
}
/* ==========================================================================
Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}

View File

@@ -1,2 +0,0 @@
var tiddlyweb = tiddlyweb || {};
tiddlyweb.status = {"username": "jermolene", "tiddlyspace_version": "1.2.26", "space": {"recipe": "interview_private", "name": "interview"}, "challengers": ["tiddlywebplugins.tiddlyspace.cookie_form", "tiddlywebplugins.tiddlyspace.openid"], "server_host": {"host": "tiddlyspace.com", "scheme": "http", "port": "80"}, "version": "1.4.18"};

View File

@@ -1,766 +0,0 @@
/***
https://raw.github.com/TiddlySpace/ts.js/master/src/ts.js
***/
//{{{
/*jslint vars: true, browser: true */
/*global jQuery, tiddlyweb, confirm, prompt */
//
// version 0.5.12
(function($) {
"use strict";
var getCSRFToken = function() {
// XXX: should not use RegEx - cf.
// http://www.quirksmode.org/js/cookies.html
// https://github.com/TiddlySpace/tiddlyspace/commit/5f4adbe009ed4bda3ce39058a3fb07de1420358d
var regex = /^(?:.*; )?csrf_token=([^(;|$)]*)(?:;|$)/;
var match = regex.exec(document.cookie);
var csrf_token = null;
if (match && (match.length === 2)) {
csrf_token = match[1];
}
return csrf_token;
};
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader("X-ControlView", "false");
}
});
window.getCSRFToken = getCSRFToken;
/*
* Add the members of spaceName to the current space.
*/
function addMembersfromSpace(ts, spaceName, callback, errback) {
new tiddlyweb.Space(spaceName, "/").members().get(function(members) {
var spaceMembers = new tiddlyweb.Space(ts.currentSpace, "/").
members(),
putMembers = function(members, callback, errback) {
var currentMember = members.shift();
if (currentMember) {
var next = function() {
putMembers(members, callback, errback);
};
spaceMembers.add(currentMember, next, errback);
} else {
callback();
}
};
putMembers(members, callback, errback);
}, errback);
}
/*
* Reset the message area associated with the provided form.
*/
function resetMessage(form) {
$(".annotation", form).removeClass("annotation");
$(".messageArea", form).removeClass("error").hide();
$(".inputArea", form).show();
}
/*
* Build message area element
*/
function buildMsgArea(form) {
var msgArea = $("<div class='messageArea' />");
msgArea
.append($("<button></button>")
.html("&times;")
.addClass("close-btn")
.attr("title", "close notification")
.data("parent-class", "messageArea")
.click( function() {
resetMessage(form);
return false;
} )
)
.append( $("<p></p>") );
var container = $("<div />").appendTo(msgArea)[0];
$("<a />").text("Try again?").click(function() {
$("input", form)[0].focus();
}).appendTo(container);
return msgArea;
}
/*
* Display a message aligned with the provided form.
*/
function displayMessage(form, msg, error, options) {
options = options || {};
if(options.hideForm) {
$(".inputArea", form).hide();
} else {
$(".inputArea", form).show();
}
var msgArea = $(".messageArea", form);
if(msgArea.length === 0) {
msgArea = buildMsgArea(form);
msgArea.prependTo(form);
}
// replace error msg
msgArea
.find("p")
.empty()
.html(msg || ts.locale.error)
.end()
.show(100);
var errorDiv = msgArea.find("div");
if(error) {
msgArea.addClass("error annotation");
errorDiv.show();
} else {
msgArea.removeClass("error");
errorDiv.hide();
}
if(options.annotate) {
$(options.annotate, form).addClass("annotation");
}
}
/*
* Do the default initialization behaviors.
*/
function defaultInit(ts, status, callback, options) {
options = options || {};
if (status.space && status.space.name &&
typeof options.space === "undefined") {
options.space = status.space.name;
}
ts.resolveCurrentSpaceName(options, status.server_host.host);
if(!ts.currentSpace) {
$(document.body).addClass("ts-unknown-space");
}
ts.loadStatus(status);
if(status.identity || ts.parameters.openid) {
ts.register_openid(status.identity);
} else if(status.username && ts.parameters.openid) {
// open id login occurred so redirect to homespace
window.location.href = ts.parameters.redirect ||
ts.getHost(status.username);
}
// do login status
ts.forms.password($("form.ts-password")[0]);
ts.loginStatus();
if(ts.currentSpace) {
ts.initForSpace(status);
}
if(callback) {
callback(ts);
}
}
/*
* Parse query parameters into a simple object.
*/
function parseParameters(queryString) {
var args = queryString.split(/[&;]/),
parameters = {},
i,
nameval;
for(i = 0; i < args.length; i += 1) {
nameval = args[i].split("=");
if(nameval.length === 2) {
parameters[nameval[0]] = nameval[1];
}
}
return parameters;
}
/*
* add CSRF form fields to the provided form.
*/
function addCSRF(form) {
$("<input type='hidden' name='csrf_token' />").
val(getCSRFToken()).appendTo(form);
}
var ts = {
currentSpace: false,
locale: {
error: "An error occurred",
tryAgain: "Please try again",
success: "Clear this notification",
badLogin: "We are unable to log you in with those details.",
charError: "Username is invalid - must only contain lowercase " +
"letters, digits or hyphens",
spaceSuccess: "Successfully created space.",
userError: "Username is already taken, please choose another.",
passwordError: "Passwords do not match",
passwordLengthError: "Error: password must be at least 6 characters",
invalidSpaceError: ["error: invalid space name - must start with a ",
"letter, be at least two characters in length and only contain ",
"lowercase letters, digits or hyphens"].join("")
},
status: {},
user: {},
resolveCurrentSpaceName: function(options, host) {
if(options && typeof options.space !== "undefined") {
ts.currentSpace = options.space;
} else if(window.location.protocol !== "file:") {
var hostname = window.location.hostname;
if(host.split(".").length < hostname.split(".").length) {
ts.currentSpace = hostname.split(".")[0];
}
}
},
isValidSpaceName: function(name) {
return name.match(/^[a-z][0-9a-z\-]*[0-9a-z]$/) ? true : false;
},
init: function(callback, options) {
ts.parameters = parseParameters(window.location.search.substr(1));
var status = tiddlyweb.status;
if (status) {
defaultInit(ts, status, callback, options);
}
},
initForSpace: function(status) {
if (/_private$/.test(status.space.recipe)) {
$(document.body).addClass("ts-member");
ts.forms.addInclude($("form.ts-includes")[0]);
ts.forms.addMember($("form.ts-members")[0]);
ts.forms.addSpace($("form.ts-spaces")[0]);
} else {
$(document.body).addClass("ts-nonmember");
}
ts.initLists();
},
getSpaces: function(callback) {
if(ts.spaces) {
callback(ts.spaces);
} else {
$.ajax({
url: "/spaces?mine=1",
dataType: "json",
success: function(spaces) {
ts.spaces = spaces;
callback(ts.spaces);
},
error: function() {
ts.spaces = false;
}
});
}
},
initLists: function() {
ts.lists.identities();
ts.lists.members();
ts.lists.includes();
},
loadStatus: function(status) {
ts.status = status;
ts.user = {
name: status.username,
anon: status.username ? status.username === "GUEST" : true
};
},
getHost: function(subdomain) {
var s = ts.status;
var host = s.server_host;
subdomain = subdomain ? subdomain + "." : "";
var url = host.scheme + "://" + subdomain + host.host;
var port = host.port;
if(port && port !== "80" && port !== "443") {
url += ":" + port;
}
return url;
},
login: function(username, password, options) {
options = options || {};
var success = options.success || function() {
window.location = options.redirect || ts.getHost(username);
};
// XXX void errback?
var errback = options.errback || function() {};
var challenger = options.challenger = options.challenger ||
"/challenge/tiddlywebplugins.tiddlyspace.cookie_form";
$.ajax({
url: challenger,
type: "POST",
data: {
user: username,
password: password,
csrf_token: getCSRFToken(),
// workaround to marginalize automatic subsequent GET
tiddlyweb_redirect: "/status"
},
success: success,
error: errback
});
},
parameters: {},
register_openid_for_user: function(username, openid) {
var user = new tiddlyweb.User(username, null, "/");
user.identities().add(openid, function() {
window.location.href = window.location.pathname;
}, function() {
throw "failed to add identity to current user.";
});
},
register_openid: function(openid) {
var space = ts.parameters.space;
var username = ts.parameters.user;
if(!space && !username) {
var answer = confirm(
"Would you like to create a space with your openid: " +
openid + "?"
);
if(answer) {
space = prompt("What would you like to be your TiddlySpace username?");
}
}
if(space && openid) {
var possible =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var password = "";
while(password.length < 16) {
password += possible.charAt(Math.floor(Math.random() * possible.length));
}
// register user with username of space and random password
ts.register(space, password, null, {
errback: function() {
throw "failed at step 1/3";
},
success: function() {
// login as that newly created user
ts.login(space, password, {
success: function() {
ts.register_openid_for_user(space, openid);
},
errback: function() {
throw "failed at step 2/3";
}
});
}
});
} else if(username) {
ts.register_openid_for_user(username, ts.parameters.openid);
}
},
register: function(username, password, form, options) {
options = options || {};
var spaceCallback = options.success || function() {
displayMessage(form, ts.locale.spaceSuccess, false);
window.location = options.redirect || ts.getHost(username);
};
var spaceErrback = function (xhr) {
// XXX: 409 unlikely to occur at this point
var msg = xhr.status === 409 ? ts.locale.userError : false;
displayMessage(form, msg, true, options);
};
var userCallback = function() {
ts.login(username, password, {
success: function() {
var space = new tiddlyweb.Space(username, "/");
space.create(spaceCallback, spaceErrback);
}
});
};
var userErrback = function(xhr) {
var msg = xhr.status === 409 ? ts.locale.userError : false;
displayMessage(form, msg, true, options);
};
var user = new tiddlyweb.User(username, password, "/");
user.create(userCallback, userErrback);
},
createSpace: function(form, spaceName, callback, errback) {
if(ts.isValidSpaceName(spaceName)) {
var space = new tiddlyweb.Space(spaceName, "/");
space.create(callback, errback);
} else {
displayMessage(form, ts.locale.invalidSpaceError, true);
}
},
changePassword: function(username, password, npassword, form) {
var pwCallback = function() {
var msg = "Successfully changed your password.";
displayMessage(form, msg);
};
var pwErrback = function() {
var msg = "Old password is incorrect.";
displayMessage(form, msg, true);
};
var user = new tiddlyweb.User(username, password, "/");
user.setPassword(npassword, pwCallback, pwErrback);
},
loginStatus: function() {
var register = $("form.ts-registration");
var login = $("form.ts-login");
var logout = $(".ts-logout");
var user = ts.user;
$("form.ts-openid").each(function(i, el) {
ts.forms.openid(el, { user: user });
});
if(!user.anon) {
$(document.body).addClass("ts-loggedin");
$([register, login]).remove();
logout.each(function(i, el) {
ts.forms.logout(el);
});
} else {
if(register) {
ts.forms.register(register);
}
if(login) {
ts.forms.login(login);
}
logout.remove();
}
}
};
ts.forms = {
password: function(form) {
$(form).submit(function(ev) {
ev.preventDefault();
var oldPass = $("[name=password]").val();
var newPass = $("[name=new_password]").val();
var newPass2 = $("[name=new_password_confirm]").val();
if(newPass !== newPass2) {
var msg = "Passwords do not match";
displayMessage(form, msg, true);
} else if(newPass.length < 6) {
displayMessage(form, ts.locale.passwordLengthError, true);
} else {
ts.changePassword(ts.user.name, oldPass, newPass, form);
}
return false;
});
},
addInclude: function(form) {
if(!form) {
return;
}
addCSRF(form);
$(form).submit(function(ev) {
ev.preventDefault();
var input = $("input[name=spacename]", form);
var space = input.val();
var callback = function() {
ts.lists.includes($("ul.ts-includes").empty()[0]);
input.val("");
var msg = space + " included";
displayMessage(form, msg, false);
};
var errback = function() {
var msg = "Unable to include space with that name.";
displayMessage(form, msg, true);
};
new tiddlyweb.Space(ts.currentSpace, "/").includes().
add(space, callback, errback);
});
},
addMember: function(form) {
if(!form) {
return;
}
addCSRF(form);
$(form).submit(function(ev) {
ev.preventDefault();
var input = $("input[name=username]", form);
var username = input.val();
var spaceName = /^@/.test(username) ? username.slice(1) :
null;
var callback = function() {
ts.lists.members($("ul.ts-members").empty()[0]);
input.val("");
resetMessage(form);
};
var errback = function(xhr) {
if(xhr.status === 403) {
displayMessage(form,
"Unable to add members from a space you " +
"are not a member of",
true);
} else if (xhr.status === 409) {
displayMessage(form,
"Unknown username entered.",
true);
} else {
var msg = "Unknown error occurred.";
displayMessage(form, msg, true);
}
};
if (!spaceName) {
new tiddlyweb.Space(ts.currentSpace, "/").members().
add(username, callback, errback);
} else {
addMembersfromSpace(ts, spaceName, callback, errback);
}
});
},
addSpace: function(form) {
if(!form) {
return;
}
var selector = "[name=spacename]";
addCSRF(form);
$(form).submit(function(ev) {
ev.preventDefault();
var spaceName = $(selector, form).val() || "";
var callback = function() {
var host = ts.getHost(spaceName),
msg = "Successfully created <a href='" +
host + "'>" + host + "</a>.";
displayMessage(form, msg, false);
};
var errback = function() {
var msg = "Problem creating a space with that name.";
displayMessage(form, msg, true);
};
ts.createSpace(form, spaceName, callback, errback);
});
},
register: function(form, options) {
options = options || {};
addCSRF(form);
$(form).submit(function(ev) {
ev.preventDefault();
var username = $("[name=username]", form).val();
var password = $("[name=password]", form).val();
options.redirect = $("[name=redirect]", form).val();
var passwordConfirm = $("[name=password_confirm]",
form).val();
var validName = ts.isValidSpaceName(username);
var validLength = password.length >= 6;
if(validName && validLength && password &&
password === passwordConfirm) {
ts.register(username, password, ev.target, options);
} else {
var msg = validName ?
(!validLength ? ts.locale.passwordLengthError :
ts.locale.passwordError) :
ts.locale.charError;
options.annotate = validName ? "[type=password]" :
"[name=username]";
displayMessage(form, msg, true, options);
}
return false;
});
},
openid: function(form, options) {
addCSRF(form);
$(form).attr("method", "post").
attr("action",
"/challenge/tiddlywebplugins.tiddlyspace.openid").
submit(function(ev) {
var identity = $("input[name=openid]", form).val(),
space = $("input[name=space]", form).val(),
user = options && options.user ?
options.user.name : null;
if(!identity) {
ev.preventDefault();
return displayMessage(form,
"Please provide an openid!");
}
var querystring = "?openid=" + identity;
if(space) {
querystring += "&space=" + space;
}
if(user) {
querystring += "&user=" + user;
}
var redirect = $("[name=redirect]", form).val();
if(redirect) {
querystring += "&redirect=" + redirect;
}
// IMPORTANT: #auth:OpenID=<openid> is read by the openid tiddlyweb plugin
// when present it keeps you logged in as your cookie username
$("<input name='tiddlyweb_redirect' type='hidden' />").
val(window.location.pathname + querystring +
"#auth:OpenID=" + identity).appendTo(form);
});
},
logout: function(form_or_container) {
if(!form_or_container) {
return;
}
var tag = form_or_container.nodeName;
var form;
var isContainer = tag !== "FORM";
if(isContainer) {
var uri = ts.getHost(ts.user.name);
var link = $("<a />").attr({"href": uri,
"target": "_parent"}).text(ts.user.name)[0];
var msg = $("<span class='message' />").
text("Welcome back ").prependTo(form_or_container)[0];
$(msg).append(link);
$("<span />").text("!").appendTo(msg);
form = $("form", form_or_container)[0];
if(!form) {
form = $("<form />").appendTo(form_or_container)[0];
$("<input type='submit' class='button' value='Log out'>").appendTo(form);
}
} else {
form = form_or_container;
}
$(form).attr("action", "/logout").attr("method", "post");
addCSRF(form);
},
login: function(form) {
// do login
addCSRF(form);
var options = {
errback: function(xhr) {
var code = xhr.status;
if(code === 401) {
displayMessage(form, ts.locale.badlogin, true);
} else {
displayMessage(form, ts.locale.tryAgain, true);
}
}
};
function doLogin(ev) {
var user = $("input[name=username]", form).val();
var pass = $("input[name=password]", form).val();
if(!user) {
return displayMessage(form, "Please provide a username!");
}
if(!pass) {
return displayMessage(form, "Please provide a password!");
}
options.redirect = $("input[name=redirect]", form).val();
options.challenger = $(form).attr("action");
ts.login(user, pass, options);
ev.preventDefault();
}
$(form).submit(function(ev) {
doLogin(ev);
});
$(form).keypress(function(ev) {
if(ev.keyCode === 13) {
doLogin(ev);
}
});
}
};
ts.lists = {
identities: function() {
var list = $("ul.ts-identities")[0];
if (list) {
$(list).addClass("ts-loading");
var user = new tiddlyweb.User(ts.user.name, null, "/");
user.identities().get(
function(identities) {
var i;
$(list).removeClass("ts-loading").empty();
for(i = 0; i < identities.length; i += 1) {
$("<li />").text(identities[i]).appendTo(list);
}
},
function() {
$(list).removeClass("ts-loading").empty();
}
);
}
},
includes: function() {
var space = new tiddlyweb.Space(ts.currentSpace, "/");
var removeInclusion = function(ev) {
var item = $(ev.target).parents("li")[0];
var target_space = $(ev.target).data("inclusion");
var callback = function() {
$(item).hide(200);
};
var errback = function() {};
space.includes().remove(target_space, callback, errback);
};
var list = $("ul.ts-includes").addClass("ts-loading")[0];
if(list) {
var callback = function(inclusions) {
var i, item;
$(list).removeClass("ts-loading").empty();
for(i = 0; i < inclusions.length; i += 1) {
item = $("<li />").appendTo(list)[0];
$("<a />")
.text(inclusions[i])
.attr("href", ts.getHost(inclusions[i]))
.attr("title", "visit icluded space")
.appendTo(item);
addDeleteBtn("inclusion", inclusions[i], item, removeInclusion);
}
};
var errback = function(xhr) {
$(list).removeClass("ts-loading").empty();
$("<li class='annotation' />").
text("Error requesting inclusions:" + xhr.status + " " + xhr.statusText).
prependTo(list);
};
space.includes().get(callback, errback);
}
},
members: function() {
var space = new tiddlyweb.Space(ts.currentSpace, "/");
var removeMember = function(ev) {
var list = $(ev).parents("ul.members")[0];
var item = $(ev.target).parents("li")[0];
var member = $(ev.target).data("member");
var callback = function() {
$(item).hide(200, function() {
$(item).remove();
if($("ul.ts-members li:visible").length > 1) {
$("button.delete", list).show();
}
});
$("button.delete", list).hide();
};
var errback = function() {
// Um ought to be something here
};
space.members().remove(member, callback, errback);
};
var list = $("ul.ts-members").addClass("ts-loading")[0];
if(list) {
var callback = function(members) {
var i, item;
$(list).removeClass("ts-loading").empty();
members = members.sort();
for(i = 0; i < members.length; i += 1) {
item = $("<li />").appendTo(list)[0];
$("<a />")
.text(members[i])
.attr("href", ts.getHost(members[i]))
.attr("title", "visit member's home space")
.appendTo(item);
if(members.length > 1) {
addDeleteBtn("member", members[i], item, removeMember);
}
}
};
var errback = function() {
$(list).removeClass("ts-loading").empty();
$("<li class='annotation' />").
text("Only members can see other members.").
prependTo(list);
};
space.members().get(callback, errback);
}
}
};
function addDeleteBtn(type, data, item, cb) {
$("<button />")
.addClass("delete")
.data(type, data)
.attr("title", "remove " + type)
.html("&times;")
.click(cb)
.appendTo(item);
}
ts.parseParameters = parseParameters;
window.ts = {
init: ts.init
};
}(jQuery));
//}}}

View File

@@ -1,3 +0,0 @@
This folder contains the output of using "save HTML file" in the browser viewing the interview project on TiddlySpace. This is not a TiddlyWiki; it is a snapshot of the HTML generated by an instance of TiddlyWiki.
See the `./scripts` directory for the tools used to extract the data from this file.

View File

@@ -0,0 +1,13 @@
created: 20251021142729667
modified: 20251021142729667
tags:
title: Concatenating a text reference to create a URL
type: text/vnd.tiddlywiki
!! Concatenating variables and a text reference to create a URL
<$macrocall $name=wikitext-example src="""<$let hash={{{ [<currentTiddler>encodeuricomponent[]] }}}>
<a href=`${ [{!!base-url}] }$#$(hash)$`>this tiddler on tiddlywiki.com</a>
</$let>"""/>
See: [[Substituted Attribute Values]]

View File

@@ -0,0 +1,13 @@
created: 20251021142733998
modified: 20251021142733998
tags:
title: Concatenating variables to create a URL
type: text/vnd.tiddlywiki
!! Concatenating strings and variables to create a URL
<$macrocall $name=wikitext-example src="""<$let hash={{{ [<currentTiddler>encodeuricomponent[]] }}}>
<a href=`http://tiddlywiki.com/#$(hash)$`>this tiddler on tiddlywiki.com</a>
</$let>"""/>
See: [[Substituted Attribute Values]]

View File

@@ -0,0 +1,13 @@
created: 20251015120940754
modified: 20251101092833913
tags: $:/deprecated [[Core Classes]]
title: Deprecated Core Classes
type: text/vnd.tiddlywiki
<<.warning "It is not recommended to use these classes for styling. Though tiddlywiki might still support them, they may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using them, and update existing code if possible. Be aware that this feature may cease to work at any time.">>
These [[Core Classes]] are considered deprecated. It is not recommend to use them for styling.
* `tc-tagged-*` <<.deprecated-since 5.1.16>> Use [[Custom styles by data-tags]] instead.
* `tc-reveal` <<.deprecated-since 5.3.8>> for styling purposes as it is subject to change.
* `tc-language-(language code)` <<.deprecated-since 5.3.8>> Please use [[:lang()|https://developer.mozilla.org/en-US/docs/Web/CSS/:lang]] instead.

View File

@@ -1,11 +1,10 @@
created: 20240313100515958
modified: 20240313103959789
modified: 20251023154747366
tags: Editions
title: TiddlyWiki Docs PR Maker
''~TiddlyWiki Docs PR Maker'' is a special edition of tiddlywiki.com designed to help you contribute to and improve the documentation made by [[@saqimtiaz|https://github.com/saqimtiaz/]].
https://saqimtiaz.github.io/tw5-docs-pr-maker/
''~TiddlyWiki Docs PR Maker'' is a special edition of tiddlywiki.com designed to help you contribute to and improve the documentation.
https://edit.tiddlywiki.com
All changes made to the documentation can be very easily submitted to GitHub -- the pull request will be automatically made, hence the "PR Maker" name of the edition.

View File

@@ -1,5 +1,5 @@
created: 20150412191004348
modified: 20240925114810504
modified: 20251022153208584
tags: Community Reference
title: Developers
type: text/vnd.tiddlywiki
@@ -8,3 +8,4 @@ type: text/vnd.tiddlywiki
* Get involved in the [[development on GitHub|https://github.com/TiddlyWiki/TiddlyWiki5]]
* [[GitHub Discussions|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]] are for Q&A and open-ended discussion
* [[GitHub Issues|https://github.com/TiddlyWiki/TiddlyWiki5/issues]] are for raising bug reports and proposing specific, actionable new ideas
* See [[Contributing]] for guidelines on how to contribute to the project.

View File

@@ -1,22 +1,22 @@
title: Filter Syntax History
tags: [[History of TiddlyWiki]]
modifier: Jeremy Ruston
created: 20250730154331065
modified: 20250730154331065
modified: 20250731162557775
modifier: Jeremy Ruston
tags: [[History of TiddlyWiki]]
title: Filter Syntax History
In response to [[a discussion|https://talk.tiddlywiki.org/t/filter-syntax-history/13058]] about the filter syntax in TiddlyWiki5 I posted this brief personal history.
For context, before TiddlyWiki, I only had practical experience of a very small number of languages: machine code, assembly language, BASIC, FORTH, C, C++ and of course JavaScript. I had a smattering of Java, Pascal and one or two other ancient languages but no experience of actor based languages like Erlang, or modern functional languages.
The story starts with the double square bracket syntax used in wikitext for links. In 2004 this was already an established usage in wikis. However, I switched the ordering of pretty links because I thought Wikipedia's `[[link address|link text]]` was the wrong way around. It broke up sentences: `The file is [[https://site.com/thing|here]]` seems less readable than `The file is [[here|https://site.com/thing]]`. For a long time I regretted this decision, and wished that I had just gone with Wikipedia's established usage. Others have since pointed out that TiddlyWiki's ordering is actually consistent with [[Markdown]], which might be regarded as the winner of the markup wars.
The story starts with the double square bracket syntax used in wikitext for links. In 2004 this was already an established usage in wikis. However, I switched the ordering of pretty links because I thought Wikipedia's `[[link address|link text]]` was the wrong way around. It broke up sentences: `The file is [[https://site.com/thing|here]]` seems less readable than `The file is [[here|https://site.com/thing]]`. For a long time I regretted this decision, and wished that I had just gone with Wikipedia's established usage. Others have since pointed out that ~TiddlyWiki's ordering is actually consistent with [[Markdown]], which might be regarded as the winner of the markup wars.
I looked at the double square bracket link syntax is that it establishes a way to quote page/tiddler titles so that they may contain spaces, and don't have to use CamelCase. Thus, right at the start of TiddlyWiki Classic when I was implementing the first iteration of the DefaultTiddlers feature it was natural to use double square brackets to quote titles containing spaces, making a list of titles to be opened at startup.
I looked at the double square bracket link syntax is that it establishes a way to quote page/tiddler titles so that they may contain spaces, and don't have to use CamelCase. Thus, right at the start of [[TiddlyWiki Classic|TiddlyWikiClassic]] when I was implementing the first iteration of the DefaultTiddlers feature it was natural to use double square brackets to quote titles containing spaces, making a list of titles to be opened at startup.
Soon, I wanted to extend the implementation of DefaultTiddlers so that it could be used to open all tiddlers with a particular tag while retaining backwards compatibility.
A trick that I am apt to use in such situations is to try to engineer things so that the current behaviour is re-interpreted as a shortcut syntax for a new, richer syntax that provides more flexibility. In this case, the idea was that in filters we would interpret `[[mytiddler]]` as a shortcut for `[title[mytiddler]]`. Then we could put any keywords we like in place of "title", giving us an infinitely extensible syntax. A similar example is the way that we implemented filter run prefixes by retrospectively defining the absence of a prefix as implying a default prefix.
The new syntax was first [introduced in 2007] (see [this commit](https://github.com/TiddlyWiki/TiddlyWikiClassic/commit/1928962ea6811b1ca67378ed3cd62059a9806ae9)), with a simplified syntax that only supported a single `tag` operator but was just about sufficient for intended purpose. The only documentation was a comment in the source code (complete with a typo):
The new syntax was first [[introduced in 2007|https://github.com/TiddlyWiki/TiddlyWikiClassic/commit/1928962ea6811b1ca67378ed3cd62059a9806ae9]], with a simplified syntax that only supported a single `tag` operator but was just about sufficient for intended purpose. The only documentation was a comment in the source code (complete with a typo):
```
// Filter a list of tiddlers
@@ -24,19 +24,19 @@ The new syntax was first [introduced in 2007] (see [this commit](https://github.
//# Returns an array of Tiddler() objects that match the filter expression
```
Provision to combine the filter operators had been on my mind from the beginning. When TiddlyWiki 5 started in 2011 I reused the simple implementation from TiddlyWiki Classic. Smashing operators [was finally implemented in May 2012](https://github.com/TiddlyWiki/TiddlyWiki5/commit/8b0703b694e982b2bc448bdb133742164723dd8a). By the time of the launch the filter language had grown into pretty much what it is today -- see the [documentation for TiddlyWiki v5.1.0](https://tiddlywiki.com/archive/full/TiddlyWiki-5.1.0#Introduction%20to%20Filters).
Provision to combine the filter operators had been on my mind from the beginning. When ~TiddlyWiki 5 started in 2011 I reused the simple implementation from ~TiddlyWiki Classic. Smashing operators [[was finally implemented in May 2012|https://github.com/TiddlyWiki/TiddlyWiki5/commit/8b0703b694e982b2bc448bdb133742164723dd8a]]. By the time of the launch the filter language had grown into pretty much what it is today -- see the [[documentation for TiddlyWiki v5.1.0|https://tiddlywiki.com/archive/full/TiddlyWiki-5.1.0#Introduction%20to%20Filters]].
The filter syntax had undoubtedly evolved into something approaching a programming language. As others have probably expressed much more eloquently, a characteristic of the programming languages that I love is that they start with a small number of principles that are consistently applied and combined. In the case of TiddlyWiki, the list would be very roughly:
The filter syntax had undoubtedly evolved into something approaching a programming language. As others have probably expressed much more eloquently, a characteristic of the programming languages that I love is that they start with a small number of principles that are consistently applied and combined. In the case of ~TiddlyWiki, the list would be very roughly:
* Double square brackets for linking and quoting
* Curly braces for transclusion
* Angle brackets for macros (which evolved into variables)
* Double square brackets for [[linking and quoting|Linking in WikiText]]
* Curly braces for [[transclusion|Transclusion in WikiText]]
* Angle brackets for [[macros|Procedures]] (which evolved into variables)
* Double exclamation marks to indicate fields `{{!!myfield}}`
* Double hashes to indicate indexes `{{##myindex}}`
* Smashing together adjacent filter operations by removing the combining `][`
* The dollar sign as a rough signifier of data owned by the system rather than the user
* Smashing together adjacent [[filter operations|Introduction to filter notation]] by removing the combining `][`
* The dollar sign as a rough signifier of data [[owned by the system|Transclusion in WikiText]] rather than the user
As I have written about elsewhere I was privileged to know Joe Armstrong, the co-inventor of Erlang, in the last few years of his life we were working together on a book about TiddlyWiki when he passed away in 2019. Joe had contacted me out of the blue ten years before to express his admiration for TiddlyWiki, and we had developed a friendship. He was actually a big fan of TW5's filter syntax, and used to make me feel better about it by joking that I had (re-)invented the monad, which sounded impressive to me. That doesn't make the filter language any easier to learn, but it does mean that it is *worth* learning: it's a real language, based on the same principles as other languages.
As I have written about elsewhere I was privileged to know Joe Armstrong, the co-inventor of Erlang, in the last few years of his life we were working together on a book about ~TiddlyWiki when he passed away in 2019. Joe had contacted me out of the blue ten years before to express his admiration for ~TiddlyWiki, and we had developed a friendship. He was actually a big fan of TW5's filter syntax, and used to make me feel better about it by joking that I had (re-)invented the monad, which sounded impressive to me. That doesn't make the filter language any easier to learn, but it does mean that it is *worth* learning: it's a real language, based on the same principles as other languages.
I find it pleasing that the TW5 filter language has its roots in decisions that were taken in the TWC days. It's still hard to learn, but that's an ongoing paradox of programming: people want to do complicated things, and complicated things are complicated. It's hard to see how we could have made filters any simpler without depriving users of the possibility of doing complicated things.

View File

@@ -1,12 +1,12 @@
created: 20140908114400000
modified: 20250730154331065
modified: 20251122174540932
tags: About
title: History of TiddlyWiki
type: text/vnd.tiddlywiki
Gathering the history of ~TiddlyWiki. This is an ongoing project. Contributions and reminiscences are welcome.
Here is a brief history of TiddlyWiki, its origins and its evolution since it was first released on 20th September 2004. Contributions and reminiscences are welcome.
* [[The Story of TiddlyWiki]] a personal account of the story of TiddlyWiki, its origins and evolution
* [[TiddlyWiki Anniversaries]] relive the celebrations of TiddlyWiki's major anniversaries
* [[Filter Syntax History]] gives a brief history of the evolution of the filter syntax in TiddlyWiki5
* [[The Story of TiddlyWiki]] A personal account from [[@Jermolene]] of the story of TiddlyWiki, its origins and evolution
* https://github.com/TiddlyWiki/LaunchArchive Blog posts and tweets from TiddlyWiki's launch in 2004
* [[TiddlyWiki Anniversaries]] Relive the celebrations of TiddlyWiki's major anniversaries
* [[Filter Syntax History]] A brief history of the evolution of the filter syntax in TiddlyWiki5

View File

@@ -1,6 +1,6 @@
caption: render
created: 20170919131752774
modified: 20170919131805871
modified: 20250811164528905
tags: Commands
title: RenderCommand
type: text/vnd.tiddlywiki
@@ -10,6 +10,7 @@ type: text/vnd.tiddlywiki
<$button class="tc-btn-invisible" style="text-decoration:underline">
Show available rendering templates
<$action-setfield $tiddler="$:/temp/advancedsearch" text="[all[shadows]prefix[$:/core/templates/]]"/>
<$action-setfield $tiddler="$:/temp/advancedsearch/input" text="[all[shadows]prefix[$:/core/templates/]]"/>
<$action-setfield $tiddler="$:/state/tab--1498284803" text="$:/core/ui/AdvancedSearch/Filter"/>
<$action-navigate $to="$:/AdvancedSearch"/>
</$button>

View File

@@ -3,7 +3,7 @@ created: 20250708130030654
modified: 20250826162904085
<div style.float="right" style.padding-left="1em">
<$image source="Community Survey 2025.png" alt="Shaping the future of TiddlyWiki with the Community Survey 2025" width="280"/>
<$image source="Community Survey 2025" alt="Shaping the future of TiddlyWiki with the Community Survey 2025" width="280"/>
</div>
The core developers work hard year by year to continuously improve ~TiddlyWiki. Part of the satisfaction is that we are not just building software for ourselves, were serving the needs of a wider community of users.

View File

@@ -26,7 +26,6 @@ For the convenience of existing users, we also continue to operate the original
* [[TiddlyWiki Subreddit|https://www.reddit.com/r/TiddlyWiki5/]]
* Chat on Discord at https://discord.gg/HFFZVQ8
* [[TiddlyWiki Subreddit|https://www.reddit.com/r/TiddlyWiki5/]]
!! Developers

View File

@@ -1,5 +1,5 @@
created: 20140820151051019
modified: 20240313114828368
modified: 20251023154718268
tags: Community
title: Improving TiddlyWiki Documentation
type: text/vnd.tiddlywiki
@@ -20,7 +20,7 @@ You can choose to edit the documentation using the [[TiddlyWiki Docs PR Maker]]
!! Using [[Docs PR Maker|TiddlyWiki Docs PR Maker]] edition
# Go to https://saqimtiaz.github.io/tw5-docs-pr-maker/ or click the link displayed in the ribbon underneath the title when editing a tiddler on tiddlywiki.com
# Go to https://edit.tiddlywiki.com or click the link displayed in the ribbon underneath the title when editing a tiddler on tiddlywiki.com
# Go through the quick introduction where you will need to provide your ~GitHub username and a ~GitHub access token (you will be guided in creating one)
# Edit or create tiddlers to update the documentation, the wiki will keep track of all changes
# Click the "Submit updates" button and check if all the tiddlers that you edited are included in the submission; if not, drag them into the box

View File

@@ -1,60 +0,0 @@
title: TiddlyWiki Newsletter Team
modified: 20241009171916728
tags: Community
The ~TiddlyWiki Newsletter is produced by a small team of volunteers. We would love to have your help if you want to get involved.
! Team
The newsletter team currently consists of:
* [[@jeremyruston|https://talk.tiddlywiki.org/u/jeremyruston]]
* [[@CodaCoder|https://talk.tiddlywiki.org/u/codacoder]]
* [[@Springer|https://talk.tiddlywiki.org/u/springer]]
! Audience
The newsletter is intended for TiddlyWiki end users who do not track all the discussions on https://talk.tiddlywiki.org/.
Coverage of developer topics such as JavaScript and intricate wikitext should be handled thoughtfully to avoid alienating the core audience of end users.
Subscribing to the newsletter should give people confidence that they will not miss any important developments.
! Process
The process is:
# Determine which discussion forum threads should be included
# Decide whether to link to the thread itself or to link to the subject of the thread
# Write a 30-70 word introduction
# Optionally, choose or make an image/screenshot to illustrate the story
These steps are described in more detail below.
!! Criteria for Inclusion
The criteria for inclusion are necessarily loose. Editorial judgement is required to decide whether an item is sufficiently interesting to a broad enough audience.
Important categories of threads that should be considered:
* All announcements of new releases of TiddlyWiki and TiddlyDesktop
* Community news and developments
* New plugins
* Updates to widely used plugins
* Showcases of interesting TiddlyWiki's in the wild
!! Linking
In most cases, news items should link to the opening post in the corresponding thread. There might be situations where it makes more sense to link to the item concerned which will be listed here.
!! Writing News Items
Items would be a 30-70 word introduction with a link, and optionally an image (the newsletter looks much more inviting with some images included).
!! Images
Well chosen images can be informative and add visual interest to the newsletter as a whole. Some points to consider when choosing an image:
* Images that work best of all are those that trigger an emotional response by including a human face. It is fairly unlikely that a ~TiddlyWiki news story would have a reason to be illustrated by a picture of a smiling baby, but we should strive to do so if we can
* If using a screenshot, remember that the image will be displayed fairly small in the newsletter so it is better to crop screenshots to show a smaller area of interest rather than the entire browser window
* Avoid using AI generated images

View File

@@ -1,10 +1,10 @@
title: TiddlyWiki Newsletter
modified: 20241009171916728
modified: 20251219090240895
The ~TiddlyWiki Newsletter is a fortnightly overview of news, announcements and discussions within the ~TiddlyWiki community. It has been on hiatus for the last few months, but we are hoping to revive it soon.
The ~TiddlyWiki Newsletter is a collection of news, announcements and discussions from the ~TiddlyWiki community.
Subscribe to the ~TiddlyWiki Newsletter here:
Subscribe here:
<iframe src="https://tiddlywiki.substack.com/embed" width="480" height="320" style="border:1px solid #EEE; background:white;" frameborder="0" scrolling="no"></iframe>
!! https://tiddlywiki.substack.com/
The newsletter is produced by a small team of volunteers. We would welcome your help. See [[TiddlyWiki Newsletter Team]].
The newsletter is produced by a small team of volunteers. We would welcome your help. See [[TiddlyWiki Newsletter Team]].

View File

@@ -1,9 +1,10 @@
created: 20160204225047445
lost-url: http://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html
modified: 20160204225307847
tags: Articles
title: "A free, open source wiki revisited" by Mark Gibbs, NetworkWorld
type: text/vnd.tiddlywiki
url: http://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html
url: https://web.archive.org/web/20180911094717/https://www.networkworld.com/article/3028098/open-source-tools/tiddlywiki-a-free-open-source-wiki-revisited.html
Interesting article giving the perspective of someone who has been away from TiddlyWiki for a few years:

View File

@@ -1,9 +1,10 @@
created: 20141122093837330
lost-url: http://cardo.wiki
modified: 20210106151026996
tags: [[Community Editions]]
title: "Cardo - Task and Project Management Wiki" by David Szego
type: text/vnd.tiddlywiki
url: http://cardo.wiki
url: https://web.archive.org/web/20181114094516/http://cardo.wiki/#Joe%20Cardo:%5B%5BJoe%20Cardo%5D%5D
Task & Delegation Tracking, Meetings & Agenda Items, Project Roles, Progress & Status Updates, Reference Items, Tickler Calendar, Conversation Logging, Book Notes & Library, and More!
@@ -11,4 +12,10 @@ Task & Delegation Tracking, Meetings & Agenda Items, Project Roles, Progress & S
<<<
Cardo is a standalone, browser-based tool that can be used as a simple task manager, or as a complex Project Management system (and indeed, I do use it this way in my daily work) as well as a fully Wiki-ized personal knowledge store. It runs completely independently in the browser, even without an Internet connection, making it possible to carry around on a USB stick, or to use on the morning commute.
<<<
<<<
* https://cardo-revisited.tiddlyhost.com (re-activated TW v5.3.8)
* https://cardo-dyumnin.tiddlyhost.com (TW v5.1.19)

View File

@@ -3,7 +3,7 @@ modified: 20140716084548184
tags: Examples
title: "PETTIL - Forth for the Commodore PET" by Charlie Hitselberger
type: text/vnd.tiddlywiki
url: http://pettilmobile.com/tw/
url: http://pettilmobile.com
A fast Forth interpreter for the [[Commodore PET|https://en.wikipedia.org/wiki/Commodore_PET]], written in 6502 assembly language. The TiddlyWiki containing program documentation is automatically generated from the source code: see https://github.com/chitselb/pettil.

View File

@@ -1,9 +1,10 @@
created: 20141122093837330
lost-url: http://luckysushi.ru/habarovsk/heeg.html
modified: 20210106151027143
tags: Examples
title: "Lucky Sushi" online shop by sini-Kit
type: text/vnd.tiddlywiki
url: http://luckysushi.ru/habarovsk/heeg.html#index
url: https://web.archive.org/web/20241127033249/http://luckysushi.ru/habarovsk/heeg.html#index
A complete online shop made in ~TiddlyWiki!

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