1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-01-25 12:23:42 +00:00

Compare commits

..

59 Commits

Author SHA1 Message Date
Mario Pietsch
a1a8b56124 Fix modified date in TaskManagementExampleDraggable 2025-12-09 17:38:02 +01:00
Mario Pietsch
88b472c955 Update modified date in TaskManagementExample.tid 2025-12-09 17:37:43 +01:00
Mario Pietsch
8c956a9448 [DOCS] Make TaskManagementExamples more "hackable" 2025-12-09 17:37:20 +01: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
Jeremy Ruston
4dc89f6362 Community Cards (#9069)
* Initial Commit

* Oops

* Force CI build

* Introduce procedure for displaying teams

And some styling tweaks

* More styling tweaks

* Add a pill for vacant positions

* Reorganise table of contents

* Fix generic team icon

* Fix copy-paste error

* Add default icon for people

* Add newsletter team

* Project team icon

* New community tab for people

* Update succession team blurb

* Person cards should show team leaderships/memberships

* Add card for @Arlen22

* Add card for Motovun Jack

cc @saqimtiaz

* Remove erroneously committed file

* Preparing for v5.4.0

* Add final batch of survey responses

* Fix merge from master instead of tiddlywiki-com

* Prerelease local plugin library URI is wrong, but shouldn't fix that here

* Update modified/created dates for docs tiddlers

* Add an incompleteness caveat
2025-09-09 17:40:22 +01:00
Jeremy Ruston
f9b9c02843 HireJeremy: More tweaks
Thanks @ericshulman
2025-09-02 18:01:58 +01:00
Mateusz Wilczek
dd371addbc [Docs] Fix typos in Hire Jeremy banner (#9279) 2025-09-02 12:27:19 +01:00
Jeremy Ruston
2459eee619 HireJeremy: Fix clipped pin on the sidebar note 2025-09-01 15:11:50 +01:00
Jeremy Ruston
8eabd903a4 HireJeremy: Get rid of the fancy fonts 2025-09-01 15:10:33 +01:00
Jeremy Ruston
742d98157a More "Hire Jeremy" tweaks - replace "creator" with "founder" 2025-09-01 12:00:17 +01:00
Jeremy Ruston
b3c472c50d Tweak "hire Jeremy" banner styles
Thanks @pmario - https://github.com/TiddlyWiki/TiddlyWiki5/pull/9278#pullrequestreview-3172963997
2025-09-01 11:50:36 +01:00
Jeremy Ruston
92ea494650 Add a "Hire Jeremy" banner (#9278) 2025-09-01 10:34:55 +01:00
Jeremy Ruston
6119d5c2c6 Remove sidebar banner for the survey 2025-08-29 11:32:18 +01:00
Jeremy Ruston
fb514d1f30 Update survey banner now it is closed 2025-08-26 17:46:19 +01:00
Jeremy Ruston
bdcc67a277 Final survey results 2025-08-19 10:42:28 +01:00
bepuzzled
78e7eb70ce Clarify the format of CLA signatures (#9264) 2025-08-18 16:57:33 +01:00
bepuzzled
23c8204c24 Improved guidelines for PR title capitalization (#9263) 2025-08-18 16:55:28 +01:00
bepuzzled
4ff454eb34 Signing the CLA (#9261)
* Update cla-individual.md

added Frédéric Demers

* Signing the CLA

corrected handle to github's
2025-08-18 16:41:21 +01:00
Mario Pietsch
314ce12676 [DOCS] Update TiddlyWiki Archive (#9132) 2025-08-07 12:21:56 +01:00
212 changed files with 1879 additions and 26197 deletions

View File

@@ -0,0 +1,5 @@
title: Community Cards Caveats
created: 20250909171928024
modified: 20250909171928024
''Please note that [[Community Cards]] are a new initiative started in September 2025. There is further work required to complete the team and people information.''

View File

@@ -0,0 +1,11 @@
title: Community Cards
tags: Community
modified: 20250909171928024
created: 20250909171928024
The purpose of Community Cards is to allow project plans and other community activities to be linked to the people who are involved in them. They also allow people to share their interests and activities in the TiddlyWiki community, and to help people in the TiddlyWiki community get to know each other better.
{{Community Cards Caveats}}
* [[Submitting a Community Card]]
* [[Displaying Community Cards]]

View File

@@ -0,0 +1,26 @@
title: Displaying Community Cards
tags: [[Community Cards]]
modified: 20250909171928024
created: 20250909171928024
!! Cards for people
This is an inline card for <<community-card-pill-person title:"@Jermolene">> and <<community-card-pill-person title:"@ericshulman">> which can be used in the middle of a sentence.
This is a stack of inline cards:
<<community-card-pill-stack-person>>
Here is a full format card:
<<community-card-person title:"@Jermolene">>
This is how the card looks when there is no such person:
<<community-card-person title:"@MissingPerson">>
!! Cards for teams
This is a card for a project team:
<<community-card-team title:"Project Team">>

View File

@@ -0,0 +1,36 @@
title: Submitting a Community Card
tags: [[Community Cards]]
modified: 20250909171928024
created: 20250909171928024
Anyone associated with the TiddlyWiki community can submit a Community Card. The submission process currently involves making a GitHub pull request but we intend to provide a more user-friendly submission process in the future.
Pull requests to add or update a community card should be made against the `tiddlywiki-com` branch of the [[TiddlyWiki repository|https://github.com/TiddlyWiki/TiddlyWiki5]] in the directory `community/people`.
The card should be a TiddlyWiki tiddler with the following fields:
|!Field |!Required|!Description |
|`title`|Yes |The username of the person represented by the card, starting with `@` (e.g. `@Jermolene`). This is the title of the card and should be unique |
|`tags`|Yes |The tags for the card, including `Community/Person` |
|`fullname`|Yes |The full name of the person or group represented by the card |
|`avatar`|Yes |The base64 representation of the 32x32 avatar image for the person represented by the card |
|`first-sighting`|No |The date of the first sighting in the community of the person represented by the card. This should be in ISO 8601 format (YYYY-MM-DD) |
|`talk.tiddlywiki.org`|Yes |The username of the person or group on the TiddlyWiki Talk forum |
|`github`|No |The username of the person or group on GitHub |
|`linkedin`|No |The URL of the LinkedIn profile for the person or group represented by the card |
|`flickr`|No |The URL of the Flickr profile for the person or group represented by the card |
|`homepage`|No |The URL of the homepage for the person or group represented by the card |
|`email`|No |The email address of the person or group represented by the card |
|`text`|Yes |The text of the card. This should include a brief description of the person or group represented by the card, and any other relevant information |
! Rules for Community Cards
Community cards must observe the following rules. It is intended to enforce them with an automated script, but for the moment they will be manually checked.
* `title` must be unique and start with `@`
* `tags` must include `Community/Person`
* `fullname` must be provided
* `avatar` must be a base64 representation of a 32x32 image, with a limit of 1KB. [[Squoosh|https://squoosh.app/]] is recommended for resizing and compressing images
* `first-sighting` should be in ISO 8601 format (YYYY-MM-DD)
* `talk.tiddlywiki.org` must be provided
* `text` total size must not exceed 2KB

View File

@@ -0,0 +1,10 @@
title: @Arlen22
tags: Community/Person
fullname: Arlen Beiler
first-sighting: 2011-06-20
talk.tiddlywiki.org: arlen22
github: Arlen22
homepage: arlen22.github.io
avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wEEEAAVABUAFQAVABYAFQAYABoAGgAYACEAIwAfACMAIQAwAC0AKQApAC0AMABJADQAOAA0ADgANABJAG8ARQBRAEUARQBRAEUAbwBiAHcAYQBaAGEAdwBiALEAiwB7AHsAiwCxAMwArACiAKwAzAD4AN0A3QD4ATgBKAE4AZcBlwIkEQAVABUAFQAVABYAFQAYABoAGgAYACEAIwAfACMAIQAwAC0AKQApAC0AMABJADQAOAA0ADgANABJAG8ARQBRAEUARQBRAEUAbwBiAHcAYQBaAGEAdwBiALEAiwB7AHsAiwCxAMwArACiAKwAzAD4AN0A3QD4ATgBKAE4AZcBlwIk/8IAEQgAQABAAwEiAAIRAQMRAf/EADAAAAIDAQEAAAAAAAAAAAAAAAMFAQQGAgABAQEBAQEAAAAAAAAAAAAAAAIDAQAE/9oADAMBAAIQAxAAAADIRMd3XctQlXtCTTmB6RFvANDouy4DYwEEar6YVM7ocz57mcqnZys+V2azZU4XZSoiZqhQt9TKOlnO+GOl1HyoUPXLn//EACYQAAICAQQCAgEFAAAAAAAAAAECABEDBBIhMUFRECITFCMycZH/2gAIAQEAAT8AI4Bv4ryAeBAnANHuNidWogEwYHNRsdfA8iruVMOIu6iYtK4c714vgTDpXyOfrQHdifoArEXxM2mR0NeOhUzI+LJzYbuHszCm5hYseZh0gXYWFIai4cWJgFJuFKYvtr2sJRuB9fUzgDHlGMHia2757uYsYc0TNHpsSmzzMONjl9iu74iK6PbWT7gv/RMiZDk+qcA3NXkAVl3gE+ADU1PDVdiaDCGJZjQEyowKANS1ZMwK+HJ+3a0KUDqYnYINxJ3eItDk81M2cZD+NVIrmanU/wAl2gCZiGNiaFziJ3LYIHcXMrLvDABe17EN1vCgqR2TNPnGTBSBbDTeV3c2amdlxPuD2C3H9epqmV628xqsUYmdiuwkVVTSZ0Q/dxwYdScrgBRsqONi2KQX7mo1G4WCK20B6j6p/VpcfMXPVQ9mbhx9eLgZrFGDUZB1DqMrCma4xN8mDcR5qK5Rgw7Hx//EABwRAQEBAQACAwAAAAAAAAAAAAECABEDIhIxQf/aAAgBAgEBPwDVQYpfzd66qDeOSn7yEmH23ffDAi66mug6DM9N8HTAY3//xAAcEQEBAQEAAgMAAAAAAAAAAAABAAIREBIiQVH/2gAIAQMBAT8AglC+rJbdCT1vVC33l83tj2OPLS+AJ3+Tf//Z
I make random software.

View File

@@ -0,0 +1,29 @@
title: @ericshulman
tags: Community/Person Community/Team/Contributors
fullname: Eric Shulman
first-sighting: 2005-06-21
talk.tiddlywiki.org: ericshulman
github: ericshulman
homepage: tiddlytools.com
email: elsdesign@gmail.com
avatar: iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAD/ElEQVR42o2Tf2iUdRzH37e7rOa222233bab3mqKU9QihCAi+isKwX/sh5UQhGYQhNAvQowRUoghQWDOIJtQmOY0M92ZmVGm0WbTyZI1Nnft99S1jc3dPT9efffg/bHdLn19Hp4HPjzv9/fz+fL5aE58PwUkjzzFVC4P/G/k6E445Pc+uceeaqnv7Ogd6Rq68PPhrc+vkiERWOLT/+Ib8uQHNiXax3BIM0mC+CEtl2G7X9mIeCV+9Ejrr2MAtgkH14SNBRZXrYYPNF86nsXCkx/8dATAsp0JhknQTYJrTHg5SNI0qMekb+aw8Hr74WCKpNNu/0Kck5ymkRMcZz/1Jv5g2CUFbZYelrbMvlBMonHvJK3JuPsdTQxwExc8XG7SxF7OcxGScP6wRGCG/Asjf39VPydTzbQyRBrXBKToBCP/nQQ9VpIDO6SumU3EjUFLzX766HMG0mIvoJnXEbU47GGXc4TGBs3zWp5Jh7F47omdf56hy9lLIz3gyYfZSQMJztFEH3KEDg+bf1dkzkO9Savks7H9NLqnuEw3MEU314nTwABj/MV2R6y8JL+0wKdM8MtX23aFy04dF5mg08QI6XYsemmzRfiMDP5Mg1emK4ienZxi0p0gBfRwhSHAxgXGGeS6tYUdu6TPA3Ofr3Mfj9Bv4zHMDaCTMcBlnG4cJqx64sagN9Ngw3RJoa5R+MftI8k1Wm7NcSsH6KKPFGBbG1n1srQ+06DWpJ59cRhsGKGbo0wBFpDgNGcBcHGsl9BuSZmjfCRHWnv0BtgOcJVWwAZG2cw+3uErAKacZ6hq32PkGWuNSaxsHgIHxqjje5I4/Ms2dCt+BHpcUT4ai0j5sw22TCea2sCBbz3BOjaRFj+JeAE46IoHxlUmlfrmWuZT+8Ae935fjljDe3zpLdEJxGriLHdFtL8mKC2cbbAgIOXVBemwBhHibZq4xN/0YgPrESsRsiMs+C1zEwwFxqBqs4hY2yhlKeIUab5GLEM8SLlVRslu77jZhEwL/ofKKZ4uknxiiLO0cYFGFpJPMTGiRO0iQqtNrX7NxueTcahqv4/FTpgwFYinOcoxtiLKWEwF+U6Mqv5FuVlWSQHzvBWmKmUqIEg1YiMfIu6lhjKCRK0YkXelwoDmIjztWrCot5KQs5R5zKccIVZQwl3cTaVdQVGnfOkrzFbDuvuJWTVuBcXcQ5iFlFFAmBynlBKKH/f6z06pX6r6pJoSQlaeW2gsighi3na1E6HwNSkUUHbS45FXG7ajhIi68+1cO98qtqqJEHzTW6LbEfUstER1ef2llBKhiGqKW7VGUk6lT7dnmS/gnZMf1KPaoI16VWsrA1KhX3dObo5m9VqQpff/AFTcI4hMzFV+AAAAAElFTkSuQmCC
\define wiki(text,topic) [[$text$|https://en.wikipedia.org/wiki/$topic$]]
''Hello! My name is Eric Shulman''. I am the author of ''[[www.TiddlyTools.com|http://www.TiddlyTools.com]] (Small Tools for Big Ideas! &trade;)'', a popular collection of original plugins, macros, widgets, templates and stylesheets for TiddlyWiki that I have created and shared with the TiddlyWiki community.
<<<
Think of TiddlyTools as a ''virtual hardware store and "demonstration showroom"'', offering tools, parts and techniques that provide a rich variety of new functionality and feature enhancements to help you ''turn a general-purpose TiddlyWiki "info-house" into a comfortable, custom-built "info-home"''.
The TiddlyWiki core system provides the basic structure and utilities: the foundation, framing, walls, roof, windows/doors, plumbing, heating, and electrical systems. Then, TiddlyTools helps you with all the "finish work": the appliances, fixtures, lighting, cabinets, furniture, paint, wallpaper, carpeting, etc. ''to best suit your specific needs and personal style''.
<<<
Since the early days of TiddlyWiki (April 2005), I have worked closely with its inventor, [[Jeremy Ruston|https://jermolene.com/]], to help develop and improve TiddlyWiki's core functions. I am also a key contributor and administrator of the online TiddlyWiki [[Discourse|https://talk.TiddlyWiki.org]] and [[GoogleGroups|https://groups.google.com/forum/#!forum/tiddlywiki]] discussion forums, providing ongoing assistance to the worldwide TiddlyWiki community. I have written over 15,000 detailed responses to individual questions posted online. For several years I was also the lead developer and maintainer of the [[TiddlyWiki Classic|https://classic.tiddlywiki.com/]] codebase.
I was born and raised in suburban Long Island, NY, and attended [[Carnegie Mellon University (CMU)|https://www.cmu.edu/]] in Pittsburgh, PA, where I studied ''Computer Science, Cognitive Psychology, Sociology, Human Factors Design, and Artificial Intelligence''. As an undergraduate at CMU, I was privileged to work with some of the major luminaries in early software research and design, including <<wiki "Herbert Simon" "Herbert_A._Simon">>, <<wiki "Allen Newell" "Allen_Newell">>, <<wiki "James Gosling" "James_Gosling">>, and <<wiki "Raj Reddy" "Raj_Reddy">>. I was also employed in several Computer Science Department research projects, including the development of speech recognition technologies, graphical interface systems, and interactive applications for instruction in physics, art and music. I received a ''Bachelor of Science in "Interactive Systems Design"'' from CMU in 1985.
During my early post-graduate years, I worked for several notable software development companies, including
<<wiki "Honeywell Information Systems" "Honeywell#Honeywell_Information_Systems">> and <<wiki "Lotus Software" "Lotus_Software">>. I was an integral member of the <<wiki "1-2-3 spreadsheet"
"Lotus_1-2-3">> development team where I helped create the first GUI-based application interfaces for Microsoft Windows and IBM OS/2.
Since 1998, I have been an ''independent design consultant'', living and working in Silicon Valley, where I apply more than 40 years of experience to provide ''analysis, design and software development services'' for commercial companies and not-for-profit organizations, with emphasis on ''information architecture'' and ''interaction/visual design standards'' to improve ease-of-use for new and existing software products and online environments.

View File

@@ -0,0 +1,21 @@
title: @Jermolene
tags: Community/Person
fullname: Jeremy Ruston
first-sighting: 2004-09-20
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=
I'm the original inventor of TiddlyWiki. You can hire me through my consultancy company [[Intertwingled Innovations|https://intertwingledinnovations.com]] or contact me directly.
Further information:
* A recording of the [[keynote I gave at QCon London in April 2024|https://www.infoq.com/presentations/bbc-micro/]], and the [[discussion on talk.tiddlywiki.org|https://talk.tiddlywiki.org/t/recording-of-jeremys-keynote-at-qcon-london-april-2024/10505]]. The talk mixes some nostalgia about my teenage activities with the BBC Micro with thoughts on the development of the software industry and insights gained from working with TiddlyWiki
* An [[interview with me in The Inquirer|https://web.archive.org/web/20111103225832/http://www.theinquirer.net/inquirer/feature/2105529/bt-software-engineer-tells-telco-source]] by Wendy Grossman
* A [[hilarious interview with me|https://www.youtube.com/watch?v=auyIhw8MTmQ]] from British television in 1983
* Here's a video of a presentation I did in 2007 called [["How to Start an Open Source Project"|http://vimeo.com/856110]].

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,11 @@
title: @MotovunJack
tags: Community/Person Community/Robot
fullname: Motovun Jack
first-sighting: 2012-01-12
github: MotovunJack
homepage: tiddlywiki.com
avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wEEEAAYABgAGAAYABkAGAAaAB0AHQAaACUAKAAjACgAJQA2ADIALgAuADIANgBSADsAPwA7AD8AOwBSAH0ATgBbAE4ATgBbAE4AfQBuAIYAbQBlAG0AhgBuAMYAnACKAIoAnADGAOUAwQC2AMEA5QEWAPgA+AEWAV4BTAFeAckByQJmEQAYABgAGAAYABkAGAAaAB0AHQAaACUAKAAjACgAJQA2ADIALgAuADIANgBSADsAPwA7AD8AOwBSAH0ATgBbAE4ATgBbAE4AfQBuAIYAbQBlAG0AhgBuAMYAnACKAIoAnADGAOUAwQC2AMEA5QEWAPgA+AEWAV4BTAFeAckByQJm/8IAEQgAQABAAwEiAAIRAQMRAf/EADAAAAIDAQEAAAAAAAAAAAAAAAMEAQIFBgABAQEBAQEAAAAAAAAAAAAAAAIDAQAE/9oADAMBAAIQAxAAAADZCfn5vZJz+rnODGtpbpm6O8xzG9lCiszXtikQhtkTBputBxURJuVVYlEdBaQ284mPDj6GmkNUblMxRmi7dKw//8QAKxAAAgIBAgUCBgMBAAAAAAAAAQIAAxESIQQTIkFRFGEjMUJxgaEyNGLR/9oACAEBAAE/AMmX3ilMkjPaV3ragZDtNRmoxpvA2sEqQcHEwJxlwa98nYbCU8TymDfSTvPVKMbZHkQcTU4yDH46tTiE8RxjLXnQp7Dx5MACgKuyqMAS1xXU7kjYTiEbWp3y0IucYbGx6e05hDAqMH/k59o3DfxAE5hss1MNzODdVraxu50ieppH1Tivi8O6eYQ1j4B6guAftChDMNjBqycHcCYJqdj2s3idRBHfpi/1Kie7PDo95w/EMxYM22n9yy5AzBc/iLe7dIqx7kyy2ypyOWoYTofhCyDAZtx4MOmpK9sncyx1NdSq2kBBt3EKf6mgIzDUPIiByuqk7faMLbOyEjuuxEAyo56AgeTA3KL1AYRm1CcvmkgAs2wHjEvPxGIMJPmHUQCQNothr32A0ggeYluplcAK2PlLbTytZUkdwI7V3lAQMgbAfP8AMoCV1AKMOR+pdsc5yD595mMmNIGD4h0vsfupHyBlTKW9znMd+TQnljPWqHYIqhwD1zKsqtjBzCAVAyBicnqG6jbOe0//xAAbEQEBAAMBAQEAAAAAAAAAAAABAAIRIRASQf/aAAgBAgEBPwBYbZDuXvnLE5OrkWJzxI4g33ift//EABsRAAMBAQADAAAAAAAAAAAAAAABEQIhEBJB/9oACAEDAQE/AMqjzHwjGoZXPHTb6Zp1/TRp1khYjW01xHqz/9k=
Motovun Jack is a robot that helps maintain the TiddlyWiki project infrastructure. It is not a person, but rather a set of automated scripts and tools that assist in managing the various services and resources used by the TiddlyWiki community.
The origin of the name "Motovun Jack" is a lovable and playful kitten encountered by [[@Jermolene]] in the beautiful medieval hill town of Motovun in Croatia. Jack was [[first adopted|https://github.com/TiddlyWiki/TiddlyWiki5/commit/ecfbaaa5641f14e1766ef17ef6416bf9aa992863]] as the TiddlyWiki 5 mascot in 2012.

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,10 @@
title: TiddlyWiki People
modified: 20250909171928024
created: 20250909171928024
tags: Community About
Members of the TiddlyWiki community who are involved in the development of TiddlyWiki and the running of the project are invited to [[create a Community Card|Submitting a Community Card]] so that they can be included in project plans and organisation charts. Community Cards can also showcase their interests and activities in the TiddlyWiki community.
{{Community Cards Caveats}}
<<community-card-pill-stack-person personFilter:"[tag[Community/Person]sort[title]]">>

View File

@@ -0,0 +1,10 @@
title: TiddlyWiki Project
modified: 20250909171928024
created: 20250909171928024
tags: Community About
The TiddlyWiki Project is the coordinated, ongoing effort to maintain and improve TiddlyWiki, and to support the TiddlyWiki community.
{{Community Cards Caveats}}
<$list filter="[tag[Community/Team]]" template="$:/tiddlywiki/community/cards/ViewTemplateBodyTemplateTeam"/>

View File

@@ -0,0 +1,4 @@
title: Vacant Positions
tags: [[TiddlyWiki Project]]
If you are interested in volunteering to help the project please get in touch with <<community-card-pill-person title:"@Jermolene">>.

View File

@@ -0,0 +1,8 @@
title: Core Team
tags: Community/Team
modified: 20250909171928024
created: 20250909171928024
leader: @Jermolene
team: @saqimtiaz
The core team is responsible for the maintenance and development of the TiddlyWiki core and official plugins.

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

@@ -0,0 +1,15 @@
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.
The infrastructure includes:
* talk.tiddlywiki.org
* github.com/TiddlyWiki
* tiddlywiki.com DNS
* Netlify account for PR previews
* edit.tiddlywiki.com

View File

@@ -0,0 +1,8 @@
title: MultiWikiServer Team
tags: Community/Team
modified: 20250909171928024
created: 20250909171928024
leader: @Arlen22
team:
The MultiWikiServer development repository is at https://github.com/TiddlyWiki/MultiWikiServer

View File

@@ -0,0 +1,6 @@
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,15 @@
title: Project Team
tags: Community/Team
modified: 20250909171928024
created: 20250909171928024
icon: $:/tiddlywiki/community/icons/project-team
leader: @Jermolene
team: @saqimtiaz @ericshulman
The project team is responsible for the overall TiddlyWiki project, its vision, mission and values, and ensuring that it meets the needs of the community.
Areas of responsibility include:
* Communicating and demonstrating the vision, mission and values of the project
* Continuously improve the development process and practices of the project
* more to come...

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,13 @@
title: Succession Team
tags: Community/Team
modified: 20250909171928024
created: 20250909171928024
leader: @Jermolene
team: @saqimtiaz @ericshulman
The Succession Team is responsible for ensuring that personnel changes do not impact access to the external infrastructure used by the project.
* Work with the other teams to ensure that the project has a succession plan for key personnel
* Work with the other teams to ensure that they are using the appropriate, community-owned infrastructure
* Ensure that the members of the succession team share ownership of the key project resources (eg passwords and user accounts). The Succession Team is not expected to use their access rights apart from managing access in the event of personnel changes

View File

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

3
community/readme.md Normal file
View File

@@ -0,0 +1,3 @@
# Community Records and Resources
These raw tiddlers comprise the community records and resources for the TiddlyWiki project. They are packaged as a root directory outside of the usual "editions" folder so that they can be shared with other wikis.

View File

@@ -0,0 +1,15 @@
title: $:/config/DefaultColourMappings/
community-card-background: #ffffee
community-card-foreground: #441111
community-card-dark-shadow: rgba(188, 189, 189, 0.5)
community-card-shadow: rgba(212, 212, 213, 0.5)
community-card-header-background: #9e3060
community-card-header-foreground: #ddddee
community-card-team-header-background: #306090
community-card-team-header-foreground: #ddeedd
community-card-vacancy-header-background: #609030
community-card-vacancy-header-foreground: #eedddd
community-card-info-background: #f3f38b
community-card-info-foreground: #444411
community-card-field-name-foreground: #888844

View File

@@ -0,0 +1,168 @@
title: $:/tiddlywiki/community/cards/Procedures
tags: $:/tags/Global
\procedure community-card-display-jpeg-field(fieldName,mode:"block",default)
<$genesis $type={{{ [<mode>match[block]then[div]else[span]] }}} class={{{ tc-community-card-field-image [[tc-community-card-field-image-]addsuffix<fieldName>] +[join[ ]] }}}>
<%if [<currentTiddler>has<fieldName>] %>
<img src={{{ [<currentTiddler>get<fieldName>addprefix[data:image/jpeg;base64,]] }}} width="32"/>
<%else%>
<$transclude $tiddler=<<default>> $mode=<<mode>>/>
<%endif%>
</$genesis>
\end community-card-display-jpeg-field
\procedure community-card-display-transclusion(fieldName,mode:"inline",default)
<$genesis $type={{{ [<mode>match[block]then[div]else[span]] }}} class={{{ tc-community-card-field-image [[tc-community-card-field-image-]addsuffix<fieldName>] +[join[ ]] }}}>
<%if [<currentTiddler>has<fieldName>] %>
<$transclude $tiddler={{{ [<currentTiddler>get<fieldName>] }}} $mode=<<mode>>/>
<%else%>
<$transclude $tiddler=<<default>> $mode=<<mode>>/>
<%endif%>
</$genesis>
\end community-card-display-transclusion
\procedure community-card-display-text-field(fieldName,showLabel:"yes",linkPrefix,displayPrefix,mode:"block")
<%if [<currentTiddler>has<fieldName>] :or[<fieldName>match[title]] %>
<$genesis $type={{{ [<mode>match[block]then[div]else[span]] }}} class={{{ tc-community-card-field-text [[tc-community-card-field-text-]addsuffix<fieldName>] +[join[ ]] }}}>
<%if [<showLabel>match[yes]] %>
<span class="tc-community-card-field-text-name"><$text text=<<fieldName>>/></span>
<%endif%>
<%if [<linkPrefix>!match[]] %>
<a
href={{{ [<currentTiddler>get<fieldName>addprefix<linkPrefix>] }}}
class="tc-community-card-field-text-value"
rel="noopener noreferrer"
target="_blank"
>
<$text text={{{ [<currentTiddler>get<fieldName>] :else[<fieldName>match[title]then<currentTiddler>] +[addprefix<displayPrefix>] }}}/>
</a>
<%else%>
<span class="tc-community-card-field-text-value">
<$text text={{{ [<currentTiddler>get<fieldName>] :else[<fieldName>match[title]then<currentTiddler>] +[addprefix<displayPrefix>] }}}/>
</span>
<%endif%>
</$genesis>
<%endif%>
\end community-card-display-text-field
\procedure community-card-person(title)
<$let currentTiddler=<<title>>>
<div class="tc-community-card">
<$link to=<<currentTiddler>> class="tc-community-card-header-link">
<div class="tc-community-card-header">
<<community-card-display-jpeg-field "avatar" default:"$:/tiddlywiki/community/icons/person">>
<<community-card-display-text-field "title" showLabel:"no">>
</div>
</$link>
<div class="tc-community-card-info">
<<community-card-display-text-field "fullname">>
<<community-card-display-text-field "first-sighting">>
<<community-card-display-text-field "talk.tiddlywiki.org" linkPrefix:"https://talk.tiddlywiki.org/u/" displayPrefix:"@">>
<<community-card-display-text-field "github" linkPrefix:"https://github.com/" displayPrefix:"@">>
<<community-card-display-text-field "linkedin" linkPrefix:"https://">>
<<community-card-display-text-field "flickr" linkPrefix:"https://">>
<<community-card-display-text-field "homepage" linkPrefix:"https://">>
<<community-card-display-text-field "email" linkPrefix:"mailto:">>
<%if [all[tiddlers+shadows]tag[Community/Team]sort[title]] :filter[{!!leader}match<..currentTiddler>] +[count[]compare:number:gt[0]] %>
<div class="tc-community-card-field-text">
<span class="tc-community-card-field-text-name">leader</span>
<span class="tc-community-card-field-text-value">
<$list filter="[all[tiddlers+shadows]tag[Community/Team]sort[title]] :filter[{!!leader}match<..currentTiddler>]">
<$transclude $variable="community-card-pill-team" title=<<currentTiddler>>/>
</$list>
</span>
</div>
<%endif%>
<%if [all[tiddlers+shadows]tag[Community/Team]sort[title]] :filter[enlist{!!team}match<..currentTiddler>] +[count[]compare:number:gt[0]] %>
<div class="tc-community-card-field-text">
<span class="tc-community-card-field-text-name">member</span>
<span class="tc-community-card-field-text-value">
<$list filter="[all[tiddlers+shadows]tag[Community/Team]sort[title]] :filter[enlist{!!team}match<..currentTiddler>]">
<$transclude $variable="community-card-pill-team" title=<<currentTiddler>>/>
</$list>
</span>
</div>
<%endif%>
</div>
<div class="tc-community-card-body">
<$transclude $tiddler=<<currentTiddler>> $field="text" $mode="block"/>
</div>
</div>
</$let>
\end community-card-person
\procedure community-card-team(title)
<$let currentTiddler=<<title>>>
<div class="tc-community-card tc-community-card-team">
<$link to=<<currentTiddler>> class="tc-community-card-header-link">
<div class="tc-community-card-header">
<<community-card-display-transclusion fieldName:"icon" default:"$:/tiddlywiki/community/icons/team">>
<<community-card-display-text-field "title" showLabel:"no">>
</div>
</$link>
<div class="tc-community-card-info">
<div class="tc-community-card-field-text">
<span class="tc-community-card-field-text-name">leader</span>
<span class="tc-community-card-field-text-value">
<%if [<currentTiddler>has[leader]] %>
<$transclude $variable="community-card-pill-person" title={{!!leader}}/>
<%else%>
<$transclude $variable="community-card-vacancy"/>
<%endif%>
</span>
</div>
<div class="tc-community-card-field-text">
<span class="tc-community-card-field-text-name">team</span>
<span class="tc-community-card-field-text-value"><$transclude $variable="community-card-pill-stack-person" personFilter={{!!team}}/></span>
</div>
</div>
<div class="tc-community-card-body">
<$transclude $tiddler=<<currentTiddler>> $field="text" $mode="block"/>
</div>
</div>
</$let>
\end community-card-team
\procedure community-card-pill-person(title)
<$let currentTiddler=<<title>>>
<$link to=<<currentTiddler>> class="tc-community-card-pill">
<<community-card-display-jpeg-field "avatar" default:"$:/tiddlywiki/community/icons/person" mode="inline">>
<<community-card-display-text-field "title" showLabel:"no" mode:"inline">>
</$link>
</$let>
\end community-card-pill-person
\procedure community-card-pill-stack-person(personFilter:"[tag[Community/Person]]")
<div class="tc-community-card-pill-stack">
<$list filter=<<personFilter>>>
<$list-template>
<$transclude $variable="community-card-pill-person" title=<<currentTiddler>> mode="block"/>
</$list-template>
<$list-empty>
<$transclude $variable="community-card-vacancy"/>
</$list-empty>
</$list>
</div>
\end community-card-pill-stack-person
\procedure community-card-pill-team(title)
<$let currentTiddler=<<title>>>
<$link to=<<currentTiddler>> class="tc-community-card-pill">
<<community-card-display-transclusion fieldName:"icon" default:"$:/tiddlywiki/community/icons/team">>
<<community-card-display-text-field "title" showLabel:"no" mode:"inline">>
</$link>
</$let>
\end community-card-pill-team
\procedure community-card-vacancy()
<$link to="Vacant Positions" class="tc-community-card-pill tc-community-card-pill-vacancy">
<span class="tc-community-card-field-image tc-community-card-field-image-avatar">
{{$:/core/images/help}}
</span>
<span class="tc-community-card-field-text tc-community-card-field-text-title">
<span class="tc-community-card-field-text-value">
Vacant
</span>
</span>
</$link>
\end community-card-vacancy

View File

@@ -0,0 +1,158 @@
title: $:/tiddlywiki/community/cards/Styles
tags: $:/tags/Stylesheet
.tc-community-card {
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: center;
border-radius: 8px;
width: 100%;
margin-bottom: 8px;
background: <<colour community-card-background>>;
color: <<colour community-card-foreground>>;
fill: <<colour community-card-foreground>>;
box-shadow: 0 1px 3px 0 <<colour community-card-shadow>>, 0 0 0 1px <<colour community-card-shadow>>;
transition: box-shadow 0.3s ease,transform .3s ease;
}
.tc-community-card:hover {
box-shadow: 0 1px 6px 0 <<colour community-card-dark-shadow>>, 0 0 0 1px <<colour community-card-shadow>>;
transform: translateY(-2px);
}
.tc-community-card .tc-community-card-header-link {
background-color: <<colour community-card-header-background>>;
color: <<colour community-card-header-foreground>>;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
}
.tc-community-card.tc-community-card-team .tc-community-card-header-link {
background: <<colour community-card-team-header-background>>;
color: <<colour community-card-team-header-foreground>>;
fill: <<colour community-card-team-header-foreground>>;
}
.tc-community-card .tc-community-card-header-link:hover {
text-decoration: none;
background-color: <<colour community-card-header-foreground>>;
color: <<colour community-card-header-background>>;
}
.tc-community-card-header {
margin: 0;
padding: 0.5em;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: center;
line-height: 0;
}
.tc-community-card-header .tc-community-card-field-text-title {
font-size: 1.5em;
font-weight: bold;
}
.tc-community-card-header .tc-community-card-field-image {
display: table-row;
width: auto;
max-width: 100%;
margin-right: 12px;
}
.tc-community-card-info {
display: table;
width: auto;
max-width: 100%;
padding: 8px;
margin: 0;
background-color: <<colour community-card-info-background>>;
color: <<colour community-card-info-foreground>>;
}
.tc-community-card-body {
padding: 0 8px;
}
.tc-community-card .tc-community-card-field-text {
display: table-row;
}
.tc-community-card .tc-community-card-field-text-name,
.tc-community-card .tc-community-card-field-text-value {
display: table-cell;
padding: 2px 6px 2px 0;
vertical-align: top;
}
.tc-community-card .tc-community-card-field-text-name {
color: <<colour community-card-field-name-foreground>>;
white-space: nowrap;
text-align: right;
padding-right: 8px;
}
.tc-community-card .tc-community-card-field-text-value {
word-break: break-word;
font-weight: bold;
width: 100%;
}
a.tc-community-card-pill {
display: inline-flex;
align-items: center;
gap: 4px;
width: auto;
min-width:0;
max-width: none;
align-self: auto;
font-size: 0.9em;
line-height: 1;
vertical-align: middle;
padding: 4px;
border-radius: 4px;
background: <<colour community-card-header-background>>;
color: <<colour community-card-header-foreground>>;
fill: <<colour community-card-header-foreground>>;
box-shadow: 0 1px 3px 0 <<colour community-card-shadow>>, 0 0 0 1px <<colour community-card-shadow>>;
transition: box-shadow 0.3s ease,transform .3s ease;
}
a.tc-community-card-pill.tc-community-card-pill-vacancy {
background: <<colour community-card-vacancy-header-background>>;
color: <<colour community-card-vacancy-header-foreground>>;
fill: <<colour community-card-vacancy-header-foreground>>;
}
a.tc-community-card-pill:hover {
text-decoration: none;
box-shadow: 0 1px 6px 0 <<colour community-card-dark-shadow>>, 0 0 0 1px <<colour community-card-shadow>>;
transform: translateY(-2px);
background: <<colour community-card-header-foreground>>;
color: <<colour community-card-header-background>>;
fill: <<colour community-card-header-background>>;
}
a.tc-community-card-pill .tc-community-card-field-image img,
a.tc-community-card-pill .tc-community-card-field-image svg {
width: 16px;
height: 16px;
vertical-align: middle;
display: inline-block;
}
a.tc-community-card-pill .tc-community-card-field-text {
display: inline;
}
.tc-community-card-pill-stack {
display: inline-flex;
flex-direction: column;
align-items: stretch;
gap: 4px;
margin: 0;
padding: 0;
}

View File

@@ -0,0 +1,6 @@
title: $:/tiddlywiki/community/cards/ViewTemplateBodyCascade
tags: $:/tags/ViewTemplateBodyFilter
list-before:
[tag[Community/Person]then[$:/tiddlywiki/community/cards/ViewTemplateBodyTemplatePerson]]
[tag[Community/Team]then[$:/tiddlywiki/community/cards/ViewTemplateBodyTemplateTeam]]

View File

@@ -0,0 +1,3 @@
title: $:/tiddlywiki/community/cards/ViewTemplateBodyTemplatePerson
<$transclude $variable="community-card-person" title=<<currentTiddler>>/>

View File

@@ -0,0 +1,3 @@
title: $:/tiddlywiki/community/cards/ViewTemplateBodyTemplateTeam
<$transclude $variable="community-card-team" title=<<currentTiddler>>/>

View File

@@ -0,0 +1,7 @@
title: $:/tiddlywiki/community/icons/person
tags: $:/tags/Image
\parameters (size:"22pt")
<svg width=<<size>> height=<<size>> viewBox="0 0 64 64">
<path d="M43.127,29.612c-0.879,-0.378 -1.452,-1.25 -1.452,-2.207c-0.006,-0.678 0.27,-1.33 0.761,-1.797c0.147,-0.141 0.29,-0.28 0.397,-0.393c0.753,-0.791 1.416,-1.663 1.978,-2.6c1.392,-2.318 2.126,-4.974 2.126,-7.677c0,-8.196 -6.744,-14.938 -14.938,-14.938c-0.945,0 -1.886,0.088 -2.813,0.266c-5.891,1.031 -10.578,5.586 -11.781,11.446c-1.105,5.016 0.454,10.264 4.118,13.865c0.495,0.469 0.78,1.118 0.792,1.799l0,0.012c0.008,0.966 -0.567,1.848 -1.453,2.23c-5.949,2.466 -10.698,7.172 -13.217,13.099c-1.772,4.059 -2.66,8.45 -2.607,12.88l0,3.192c0,2.858 2.351,5.211 5.212,5.211l43.5,0c2.859,0 5.212,-2.353 5.212,-5.211l-0,-3.225c0.053,-4.427 -0.837,-8.816 -2.611,-12.873c-2.523,-5.922 -7.274,-10.621 -13.224,-13.079Z" style="fill-rule:nonzero;"/>
</svg>

View File

@@ -0,0 +1,7 @@
title: $:/tiddlywiki/community/icons/project-team
tags: $:/tags/Image
\parameters (size:"22pt")
<svg width=<<size>> height=<<size>> viewBox="0 0 64 64">
<path d="M24.891,49.399l-3.521,0c-1.398,0 -2.547,-1.15 -2.547,-2.547l0,-1.56c-0.026,-2.165 0.408,-4.311 1.274,-6.295c1.231,-2.897 3.552,-5.197 6.46,-6.402c0.433,-0.187 0.714,-0.618 0.71,-1.09l0,-0.006c-0.006,-0.333 -0.145,-0.65 -0.387,-0.879c-1.791,-1.76 -2.553,-4.325 -2.013,-6.777c0.588,-2.864 2.879,-5.09 5.758,-5.594c0.453,-0.087 0.913,-0.13 1.375,-0.13c4.005,0 7.301,3.295 7.301,7.301c0,1.321 -0.359,2.619 -1.039,3.752c-0.275,0.458 -0.599,0.884 -0.967,1.271c-0.052,0.055 -0.122,0.123 -0.194,0.192c-0.24,0.228 -0.375,0.547 -0.372,0.878c0,0.468 0.28,0.894 0.71,1.079c2.908,1.201 5.23,3.498 6.463,6.392c0.815,1.865 1.248,3.872 1.276,5.904c-0.179,0.006 -0.351,0.007 -0.514,0.003c-0.556,-0.016 -1.375,-0.294 -2.288,-0.512c-1.295,-0.308 -2.719,-0.543 -4.01,-0.396l-0.013,0.001c-1.056,0.128 -2.116,0.325 -3.097,0.76c-0.385,0.171 -1.216,0.753 -1.446,0.916c-1.157,0.297 -2.564,0.475 -3.797,0.312c-0.713,-0.094 -1.402,-0.225 -1.703,-0.778c-0.207,-0.382 -0.181,-0.896 -0.031,-1.565c0.068,-0.3 0.11,-0.593 0.118,-0.842l-0.106,-0.887l-0.212,-0.491l-0.258,-0.36l-0.669,-0.514l-0.832,-0.231l-0.491,0.017l-0.459,0.12l-0.417,0.211l-0.415,0.342l-0.546,0.802l-0.033,0.067c-1.174,2.499 -0.945,4.643 0.013,6.317c0.251,0.437 0.56,0.845 0.919,1.219Zm22.984,-4.722c-0.052,-2.344 -0.566,-4.656 -1.514,-6.805c-1.232,-2.86 -3.339,-5.257 -6.018,-6.845c0.955,-0.816 2.033,-1.473 3.195,-1.949c0.434,-0.187 0.715,-0.618 0.71,-1.09l-0,-0.006c-0.005,-0.333 -0.144,-0.651 -0.386,-0.88c-1.791,-1.76 -2.553,-4.324 -2.013,-6.776c0.587,-2.864 2.878,-5.09 5.758,-5.594c0.453,-0.087 0.913,-0.131 1.375,-0.131c4.005,0 7.3,3.296 7.3,7.301c-0,1.322 -0.359,2.619 -1.038,3.753c-0.276,0.457 -0.6,0.883 -0.968,1.27c-0.052,0.055 -0.121,0.123 -0.194,0.192c-0.24,0.229 -0.375,0.547 -0.372,0.878c-0,0.468 0.28,0.894 0.71,1.079c2.908,1.201 5.229,3.498 6.462,6.392c0.756,1.728 1.184,3.578 1.264,5.458c-0.577,-0.341 -1.293,-0.373 -1.904,-0.07c-0.961,0.475 -1.861,1.117 -2.911,1.371c-0.49,-0.133 -0.983,-0.245 -1.485,-0.308c-0.253,-0.326 -0.536,-0.66 -0.84,-0.911l-0.813,-0.51l-0.752,-0.225c-0.327,-0.051 -0.662,-0.021 -0.974,0.089l-0.67,0.321l-0.569,0.448c-0.403,0.393 -0.733,0.911 -0.979,1.569c-0.202,0.54 -0.344,1.222 -0.492,2.014c-0.244,-0.027 -0.49,-0.047 -0.737,-0.058c-0.333,-0.02 -0.725,-0.006 -1.145,0.023Zm-24.215,-13.651c-2.683,1.591 -4.793,3.994 -6.024,6.861c-1.026,2.332 -1.542,4.857 -1.513,7.405l0,0.59l-11.735,0c-1.397,0 -2.547,-1.15 -2.547,-2.547l0,-1.561c-0.026,-2.165 0.409,-4.31 1.274,-6.295c1.231,-2.897 3.553,-5.197 6.46,-6.401c0.434,-0.187 0.715,-0.618 0.71,-1.09l0,-0.006c-0.005,-0.333 -0.144,-0.651 -0.386,-0.88c-1.791,-1.76 -2.553,-4.324 -2.013,-6.776c0.588,-2.864 2.879,-5.09 5.758,-5.594c0.453,-0.087 0.914,-0.131 1.375,-0.131c4.005,0 7.301,3.296 7.301,7.301c0,1.322 -0.359,2.619 -1.039,3.753c-0.275,0.457 -0.6,0.883 -0.967,1.27c-0.052,0.055 -0.122,0.123 -0.194,0.192c-0.24,0.228 -0.375,0.547 -0.372,0.878c0,0.468 0.28,0.894 0.71,1.079c1.164,0.476 2.246,1.135 3.202,1.952Zm29.027,33.111c-1.417,-0.04 -2.04,-0.037 -2.761,-1.223l-0.563,0.016c-0.654,-0.029 -0.381,-0.016 -0.818,-0.038c-0.73,-0.028 -0.613,-0.722 -0.742,-1.089c-0.205,-1.244 0.272,-2.494 0.257,-3.739c-0.005,-0.442 -0.63,-2.005 -0.854,-2.564c-0.7,0.131 -1.404,0.157 -2.114,0.192c-1.637,-0.004 -3.263,-0.205 -4.878,-0.459c-0.314,1.299 -1.249,3.118 -0.476,4.439c0.938,1.366 1.596,1.745 2.617,1.827c1.02,0.082 1.251,1.234 1.004,1.646c-0.219,0.284 -0.603,0.336 -0.929,0.405l-0.653,0.03c-0.513,-0.017 -0.973,-0.155 -1.43,-0.369c-0.765,-0.427 -1.554,-1.314 -2.141,-1.951c0.137,0.254 0.218,0.751 0.095,0.982c-0.347,0.491 -1.847,0.488 -2.534,0.183c-0.78,-0.347 -2.665,-2.781 -2.957,-4.604c0.776,-1.467 1.905,-2.744 2.477,-4.341c-1.246,-0.795 -1.913,-2.089 -1.827,-3.555l0.032,-0.17c-1.226,0.23 -0.59,0.144 -1.909,0.244c-4.2,-0.013 -7.893,-2.86 -5.813,-7.286c0.135,-0.262 0.263,-0.5 0.493,-0.386c0.184,0.091 0.157,0.457 0.065,0.863c-1.189,5.288 4.621,5.329 8.192,4.35c0.355,-0.097 1.06,-0.751 1.548,-0.968c0.798,-0.354 1.665,-0.498 2.524,-0.602c2.139,-0.244 4.709,0.883 6.015,0.92c1.306,0.037 3.164,-0.313 4.305,-0.239c0.827,0.037 1.64,0.187 2.438,0.4c0.517,-2.519 0.554,-4.374 1.779,-4.804c0.719,0.113 1.273,1.093 1.683,1.617l0.002,-0c0.835,-0.033 1.63,0.178 2.42,0.414c1.431,-0.203 2.631,-1.007 3.895,-1.632c-0.004,0.02 -0.025,0.027 -0.037,0.04c-1.244,1.005 -1.417,2.706 -1.271,4.278c0.054,0.816 -0.176,1.702 -0.461,2.538c-0.534,1.361 -1.564,2.796 -2.759,2.722c-0.452,-0.014 -0.715,-0.27 -1.051,-0.543c-0.065,0.553 -0.321,1.047 -0.568,1.536c-0.57,1.086 -2.06,1.564 -3.44,2.723c-1.379,1.159 0.442,5.297 0.883,6.052c0.442,0.754 1.674,1.03 1.196,1.71c-0.147,0.225 -0.37,0.305 -0.609,0.393l-0.325,0.042Zm-15.735,-3.096l0.206,0.06c0.258,-0.115 0.778,0.064 1.054,0.151c-0.508,-0.563 -1.273,-1.389 -1.824,-1.91c-0.181,-0.631 -0.103,-1.266 -0.065,-1.91l0.008,-0.053c-0.217,0.515 -0.493,1.016 -0.641,1.559c-0.173,0.732 0.771,1.522 1.137,1.975l0.125,0.128Z"/>
</svg>

View File

@@ -0,0 +1,9 @@
title: $:/tiddlywiki/community/icons/team
tags: $:/tags/Image
\parameters (size:"22pt")
<svg width=<<size>> height=<<size>> viewBox="0 0 64 64">
<path d="M37.439,32.592c-0.43,-0.185 -0.71,-0.611 -0.71,-1.079c-0.003,-0.331 0.132,-0.65 0.372,-0.878c0.072,-0.069 0.142,-0.137 0.194,-0.192c0.368,-0.387 0.692,-0.813 0.967,-1.271c0.68,-1.133 1.039,-2.431 1.039,-3.752c-0,-4.006 -3.296,-7.301 -7.301,-7.301c-0.462,-0 -0.922,0.043 -1.375,0.13c-2.879,0.504 -5.17,2.73 -5.758,5.594c-0.54,2.452 0.222,5.017 2.013,6.777c0.242,0.229 0.381,0.546 0.387,0.879l-0,0.006c0.004,0.472 -0.277,0.903 -0.71,1.09c-2.908,1.205 -5.229,3.505 -6.46,6.402c-0.866,1.984 -1.3,4.13 -1.274,6.295l-0,1.56c-0,1.397 1.149,2.547 2.547,2.547c-0,-0 0,-0 0,-0l21.261,-0c1.397,-0 2.547,-1.15 2.547,-2.547l-0,-1.576c0.026,-2.164 -0.409,-4.309 -1.276,-6.292c-1.233,-2.894 -3.555,-5.191 -6.463,-6.392Z" style="fill-rule:nonzero;"/>
<path d="M60.882,35.466c-1.233,-2.894 -3.554,-5.191 -6.462,-6.392c-0.43,-0.185 -0.71,-0.611 -0.71,-1.079c-0.003,-0.331 0.132,-0.649 0.372,-0.878c0.073,-0.069 0.142,-0.137 0.194,-0.192c0.368,-0.387 0.692,-0.813 0.968,-1.27c0.679,-1.134 1.038,-2.431 1.038,-3.753c0,-4.005 -3.295,-7.301 -7.3,-7.301c-0.462,0 -0.922,0.044 -1.375,0.131c-2.88,0.504 -5.171,2.73 -5.758,5.594c-0.54,2.452 0.222,5.016 2.013,6.776c0.242,0.229 0.381,0.547 0.386,0.88l-0,0.006c0.005,0.472 -0.276,0.903 -0.71,1.09c-1.162,0.476 -2.24,1.133 -3.195,1.949c2.679,1.588 4.786,3.985 6.018,6.845c1.029,2.332 1.546,4.857 1.517,7.405l-0,0.605l11.734,-0c1.397,-0 2.547,-1.15 2.547,-2.547l-0,-1.576c0.026,-2.165 -0.409,-4.31 -1.277,-6.293Z" style="fill-rule:nonzero;"/>
<path d="M23.66,31.026c-0.956,-0.817 -2.038,-1.476 -3.202,-1.952c-0.43,-0.185 -0.71,-0.611 -0.71,-1.079c-0.003,-0.331 0.132,-0.65 0.372,-0.878c0.072,-0.069 0.142,-0.137 0.194,-0.192c0.367,-0.387 0.692,-0.813 0.967,-1.27c0.68,-1.134 1.039,-2.431 1.039,-3.753c-0,-4.005 -3.296,-7.301 -7.301,-7.301c-0.461,0 -0.922,0.044 -1.375,0.131c-2.879,0.504 -5.17,2.73 -5.758,5.594c-0.54,2.452 0.222,5.016 2.013,6.776c0.242,0.229 0.381,0.547 0.386,0.88l0,0.006c0.005,0.472 -0.276,0.903 -0.71,1.09c-2.907,1.204 -5.229,3.504 -6.46,6.401c-0.865,1.985 -1.3,4.13 -1.274,6.295c0,0 0,1.561 0,1.561c0,1.397 1.15,2.547 2.547,2.547c-0,-0 11.735,-0 11.735,-0l0,-0.59c-0.029,-2.548 0.487,-5.073 1.513,-7.405c1.231,-2.867 3.341,-5.27 6.024,-6.861Z" style="fill-rule:nonzero;"/>
</svg>

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

@@ -2,6 +2,7 @@ created: 20131127215321439
modified: 20140912135951542
title: $:/DefaultTiddlers
[[Hire the founder of TiddlyWiki]]
[[TiddlyWiki Pre-release]]
HelloThere
[[Quick Start]]

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,37 @@
[
{
"first-heard-survey": "tiddlywiki.com",
"other-survey-source": "",
"are-you-a-dev": "No, I would not",
"first-used-tw": "2005",
"joined-tw-community": "No",
"started-tw-community": "",
"use-ttw": "",
"use-mailing-list": "",
"use-reddit": "",
"use-discord": "",
"use-github-discuss": "",
"published-plugin": "No",
"main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content)",
"other-use-cases": "",
"use-for-work-or-study": "No",
"share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)",
"publish-to-web": "Yes, using a single-file wiki",
"publish-to-intranet": "Yes, using a single-file wiki",
"value-of-tw": "I have several TWs, I used constantly",
"tw-ability-level": "I have customised TiddlyWiki through options and plugins",
"save-method": "Single-file wiki with TiddlyDesktop;Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)",
"backup-method": "Consumer online storage (e.g. Google Drive, Dropbox);DIY (any other solution)",
"diy-backup-info": "Rsync with several usb disks",
"wiki-setup-info": "",
"tw-customisations": "Plugins:\nDisclosure HTML element\nTristate Sidebar\nHighlight-searched-text\nLayout tweaks",
"positive-about-future": "Yes",
"tw-future-confidence": "Yes",
"project-decision-trust": "Yes",
"project-strengths": "I dont know. Its super util for me",
"project-weaknesses": "I dont know",
"ok-to-publish": "Yes, I am happy for my responses to be published",
"title": "Community Survey 2025 Answer 00189",
"tags": "[[Community Survey 2025]]"
}
]

View File

@@ -0,0 +1,33 @@
are-you-a-dev: No, I would not
backup-method: N/A - I keep my wiki on a single system
diy-backup-info:
first-heard-survey: tiddlywiki.com
first-used-tw: 2018
joined-tw-community: No
main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)
ok-to-publish: Yes, I am happy for my responses to be published
other-survey-source:
other-use-cases:
positive-about-future: Yes
project-decision-trust: Yes
project-strengths: Not breaking functionality, good documentation
project-weaknesses: examples for complicated tasks
publish-to-intranet: Yes, using a single-file wiki
publish-to-web: Not publishing to this location
published-plugin: No
save-method: Single-file wiki through web browser with Download Saver (default saving mechanism)
share-wikis: Yes, with multiple editors/administrators
started-tw-community:
tags: [[Community Survey 2025]]
title: Community Survey 2025 Answer 00190
tw-ability-level: I have customised TiddlyWiki through options and plugins
tw-customisations:
tw-future-confidence: Yes
use-discord:
use-for-work-or-study: Yes
use-github-discuss:
use-mailing-list:
use-reddit:
use-ttw:
value-of-tw: Organised notes and knowledge base with many visualisation options. Much more human brain friendly than browsing files and folders, or spreadsheets.
wiki-setup-info: did not work

View File

@@ -0,0 +1,37 @@
[
{
"first-heard-survey": "tiddlywiki.com",
"other-survey-source": "",
"are-you-a-dev": "Yes, I would",
"first-used-tw": "2018",
"joined-tw-community": "No",
"started-tw-community": "",
"use-ttw": "",
"use-mailing-list": "",
"use-reddit": "",
"use-discord": "",
"use-github-discuss": "",
"published-plugin": "No",
"main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content)",
"other-use-cases": "",
"use-for-work-or-study": "No",
"share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)",
"publish-to-web": "Yes, served through Node.js",
"publish-to-intranet": "Not publishing to this location",
"value-of-tw": "It powers my personal wiki. It's where I keep notes, bookmarks, and keep track books I've read and their highlights.",
"tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom CSS styles",
"save-method": "Multi-file wiki served through Node.js",
"backup-method": "Git forge (GitHub, Gitea/Forgejo, GitLab);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)",
"diy-backup-info": "",
"wiki-setup-info": "<details><summary>Wiki Information</summary><pre><code>\nTiddlyWiki Version: 5.3.8\nCurrent palette: $:/palettes/personal\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: yes\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: permalink\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/save-tiddler\nDisabled plugins: \nPlugins: \n $:/core - 5.3.8\n $:/plugins/tiddlywiki/filesystem - 5.3.8\n $:/plugins/tiddlywiki/highlight - 5.3.8\n $:/plugins/tiddlywiki/markdown - 5.1.23\n $:/plugins/tiddlywiki/tiddlyweb - 5.3.8\n $:/temp/info-plugin - \n $:/themes/tiddlywiki/snowwhite - 5.3.8\n $:/themes/tiddlywiki/vanilla - 5.3.8\n</code></pre></details>",
"tw-customisations": "I override some styles with a custom CSS tiddler, I attempt to keep bots off my wiki by adding a `<meta>` tag to `<head>`.",
"positive-about-future": "Yes",
"tw-future-confidence": "Yes",
"project-decision-trust": "Yes",
"project-strengths": "* Frequent releases.\n* Moving from Google Groups to Discourse (Talk TiddlyWiki).\n* Doing community surveys. :)\n* Maintaining a Mastodon account.",
"project-weaknesses": "* iOS and mobile browser support. There has been a bug for a while where typing in the text field renders \"Internal JavaScript Error\"\n* I think Node.JS documentation could be improved, it feels fairly light given the power of the hosted option. I would specifically like improvement around hosting multiple wikis and sharing Tiddlers between wikis.\n* Overall I would love to try contributing, but feel intimidated by the scope and history of TiddlyWiki.",
"ok-to-publish": "Yes, I am happy for my responses to be published",
"title": "Community Survey 2025 Answer 00191",
"tags": "[[Community Survey 2025]]"
}
]

View File

@@ -0,0 +1,37 @@
[
{
"first-heard-survey": "tiddlywiki.com",
"other-survey-source": "",
"are-you-a-dev": "No, I would not",
"first-used-tw": "2018",
"joined-tw-community": "Yes",
"started-tw-community": "2018",
"use-ttw": "I read and post in this community",
"use-mailing-list": "I read/lurk, but do not post",
"use-reddit": "I do not engage with this community",
"use-discord": "I do not engage with this community",
"use-github-discuss": "I do not engage with this community",
"published-plugin": "No",
"main-use-cases": "As a knowledge base (including technical, non-fiction and encyclopaedic content)",
"other-use-cases": "",
"use-for-work-or-study": "Not applicable (as retired, etc)",
"share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki",
"publish-to-web": "",
"publish-to-intranet": "",
"value-of-tw": "A flexible platform for my information needs.",
"tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)",
"save-method": "Multi-file wiki served through Node.js",
"backup-method": "TiddlySpot / TiddlyHost;Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)",
"diy-backup-info": "",
"wiki-setup-info": "<details><summary>Wiki Information</summary><pre><code>\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: zoomin\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: top\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n $:/core - 5.3.7\n $:/plugins/danielo515/ContextPlugin - 2.1.0\n $:/plugins/Gk0Wk/sidebar-resizer - 0.0.3\n $:/plugins/kookma/commander - 2.1.2\n $:/plugins/kookma/refnotes - 1.8.5\n $:/plugins/kookma/shiraz - 2.7.5\n $:/plugins/snowgoon88/edit-comptext - 0.8.1\n $:/plugins/sq/editor-autolist - 0.1.10\n $:/plugins/sq/macy - 0.0.9\n $:/plugins/sq/spotlight - 0.0.4\n $:/plugins/sq/Stories - 1.0.3\n $:/plugins/sycom/leaflet - 0.8.6\n $:/plugins/tiddlywiki/filesystem - 5.3.7\n $:/plugins/tiddlywiki/highlight - 5.3.7\n $:/plugins/tiddlywiki/tiddlyweb - 5.3.7\n $:/plugins/wikilabs/link-to-tabs - 2.0.1\n $:/temp/info-plugin - \n $:/themes/tiddlywiki/snowwhite - 5.3.7\n $:/themes/tiddlywiki/vanilla - 5.3.7\n</code></pre></details>",
"tw-customisations": "",
"positive-about-future": "Yes",
"tw-future-confidence": "Yes",
"project-decision-trust": "Yes",
"project-strengths": "Community support",
"project-weaknesses": "More and better 'How To' guides rather than 'developer focussed' documentation.",
"ok-to-publish": "Yes, I am happy for my responses to be published",
"title": "Community Survey 2025 Answer 00192",
"tags": "[[Community Survey 2025]]"
}
]

View File

@@ -0,0 +1,37 @@
[
{
"first-heard-survey": "tiddlywiki.com",
"other-survey-source": "",
"are-you-a-dev": "No, I would not",
"first-used-tw": "2007",
"joined-tw-community": "Yes",
"started-tw-community": "2017",
"use-ttw": "I read and post in this community",
"use-mailing-list": "I read/lurk, but do not post",
"use-reddit": "I do not engage with this community",
"use-discord": "I do not engage with this community",
"use-github-discuss": "I do not engage with this community",
"published-plugin": "No",
"main-use-cases": "Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other",
"other-use-cases": "I try to learn how it works (HTML5, JS, TiddlyWiki itself and several tools for it)",
"use-for-work-or-study": "Yes",
"share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki",
"publish-to-web": "",
"publish-to-intranet": "",
"value-of-tw": "Several years ago, I had using TW to organized my part of work in a bigger project. Now I'm looking for an easy GTD tool, and I'm thinking TW would be fine, but I need it in German language and the translation is hard to me.",
"tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom HTML;I have written custom JavaScript",
"save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)",
"backup-method": "DIY (any other solution)",
"diy-backup-info": "Normally I'm using file-backups by Mario Pietsch within my Firefox browser and get backups to my NAS. Also, sometimes I'm using a USB drive or send it in an e-mail.",
"wiki-setup-info": "<details><summary>Wiki Information</summary><pre><code>\nTiddlyWiki Version: 5.3.8\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: de\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n $:/core - 5.3.8\n $:/languages/de-DE - 5.3.8\n $:/plugins/.jcs/RefLinks - 0.0.6\n $:/plugins/danielo515/ContextPlugin - 2.1.0\n $:/plugins/flibbles/relink - 2.5.2\n $:/plugins/flibbles/relink-fieldnames - 2.5.2\n $:/plugins/flibbles/relink-markdown - 2.5.2\n $:/plugins/flibbles/relink-titles - 2.5.2\n $:/plugins/flibbles/relink-variables - 2.5.2\n $:/plugins/wikilabs/link-to-tabs - 3.0.1\n $:/temp/info-plugin - \n $:/themes/tiddlywiki/snowwhite - 5.3.8\n $:/themes/tiddlywiki/vanilla - 5.3.8\n</code></pre></details>",
"tw-customisations": "",
"positive-about-future": "Yes",
"tw-future-confidence": "Yes",
"project-decision-trust": "Yes",
"project-strengths": "It's free software - that's perhaps the best thing about it. It can be adapted to your own needs. There is also a community that is happy to help and answers questions. TiddlyWiki is much more than the online notebook for which it is pretending. It is a universal tool that you can learn to deal with HTML and JS.",
"project-weaknesses": "TW is the best tool I'd got since I'd used it for the first time. I've tested several others, but I always come back to it, even it's hard to me, to struggle with the English language. Yes, there is a German translation and a little introduction, but that isn't enough to get a useful TW. So it's still necessary always to use the original documentation and the English-speaking community. Yes, Google can help, but a German-speaking community would make it easier to me.",
"ok-to-publish": "Yes, I am happy for my responses to be published",
"title": "Community Survey 2025 Answer 00193",
"tags": "[[Community Survey 2025]]"
}
]

View File

@@ -0,0 +1,33 @@
are-you-a-dev: Yes, I would
backup-method: TiddlySpot / TiddlyHost;N/A - I keep my wiki on a single system
diy-backup-info:
first-heard-survey: tiddlywiki.com
first-used-tw: 2005
joined-tw-community: Yes
main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);Programming
ok-to-publish: Yes, I am happy for my responses to be published
other-survey-source:
other-use-cases:
positive-about-future: Yes
project-decision-trust: Yes
project-strengths: Very transparent in making decisions about the project.
project-weaknesses: Understanding how the project will continue if/when Jeremy moves on.
publish-to-intranet:
publish-to-web:
published-plugin: No
save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)
share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki
started-tw-community: 2024
tags: [[Community Survey 2025]]
title: Community Survey 2025 Answer 00194
tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...)
tw-customisations:
tw-future-confidence: Yes
use-discord: I do not engage with this community
use-for-work-or-study: Yes
use-github-discuss: I read/lurk, but do not post
use-mailing-list: I do not engage with this community
use-reddit: I read/lurk, but do not post
use-ttw: I read and post in this community
value-of-tw: Tiddlywiki provides a way for me to capture notes in a free form way and then reorganize them (transclusions!) easily.
wiki-setup-info:

View File

@@ -0,0 +1,37 @@
[
{
"first-heard-survey": "Other",
"other-survey-source": "Friend who uses tiddlywiki shared the link with me",
"are-you-a-dev": "Yes, I would",
"first-used-tw": "2017",
"joined-tw-community": "Yes",
"started-tw-community": "2018",
"use-ttw": "I read/lurk, but do not post",
"use-mailing-list": "I read/lurk, but do not post",
"use-reddit": "I read/lurk, but do not post",
"use-discord": "I read/lurk, but do not post",
"use-github-discuss": "I do not engage with this community",
"published-plugin": "Yes",
"main-use-cases": "Note-taking;Journalling;Programming;Other",
"other-use-cases": "I use it as a tiny art gallery website (very minimal CSS, only one tiddler open at a time)",
"use-for-work-or-study": "No",
"share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)",
"publish-to-web": "Yes, using a single-file wiki;Yes, served through Node.js",
"publish-to-intranet": "Yes, using a single-file wiki",
"value-of-tw": "TiddlyWiki provides a way for me to serve my personal website content in a package that lets people download it as a single file, which is quite important to me. I do wish the Node.js lazy loading features were actually viable (last I looked primarily search didn't function).",
"tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles;I have written custom JavaScript",
"save-method": "Multi-file wiki served through Node.js",
"backup-method": "DIY (any other solution)",
"diy-backup-info": "My primary note storage is on my NAS, with SyncThing to synchronize it across devices eg. phone, laptop. This backs up my _notes_ which I edit with various other tools, not TiddlyWiki, and TiddlyWiki is a publishing layer on top.",
"wiki-setup-info": "<details><summary>Wiki Information</summary><pre><code>\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fixed-fluid\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/noahlange/markdown-plus,$:/plugins/rmnvsl/krystal\nPlugins: \n $:/core - 5.3.3\n $:/plugins/benwebber/css-palette - 0.3.0\n $:/plugins/noahlange/monaco - 0.5.0\n $:/plugins/oeyoews/markdown-extensions-startup - 0.0.2\n $:/plugins/tiddlywiki/highlight - 5.3.3\n $:/plugins/tiddlywiki/markdown - 5.3.3\n $:/temp/info-plugin - \n $:/themes/tiddlywiki/snowwhite - 5.3.3\n $:/themes/tiddlywiki/vanilla - 5.3.3\n</code></pre></details>",
"tw-customisations": "- \"New Tiddlers\" sidebar customization\n- SO MUCH CSS customization\n- Because noahlange/tiddlymark exists, I can render my Obsidian vault as a single file wiki, still using TW in a way w/this.\n- I had to edit Core TW's JavaScript to enable Obsidian Style [[wiki|pretty links]].",
"positive-about-future": "Yes",
"tw-future-confidence": "Yes",
"project-decision-trust": "Yes",
"project-strengths": "I'm glad TW is still under development, and I'm glad it still has a healthy community of users - even though I don't use TiddlyWiki directly anymore, there's still many things (abstraction from the file system, hackability, ability to produce a single HTML file that can function like a \"book\" for my writing that can go anywhere and has longevity) that I appreciate about it, and while I couldn't go back now, I could see a future TW with improvements winning me back!",
"project-weaknesses": "After converting my Tiddlers from TW syntax to Obsidian style markdown, there's no way I'd ever go back to the TW syntax, sorry. Markdown support was in a poor state, especially the extent to which I had to hack it to read Obsidian style markdown (pretty links). I'd **love** to be able to use TW as an alternate UI to view and edit my notes while _also_ being able to use logseq or obsidian, but the Node.JS version not supporting bidirectionality or YAML metadata OOTB makes this nonviable.",
"ok-to-publish": "Yes, I am happy for my responses to be published",
"title": "Community Survey 2025 Answer 00195",
"tags": "[[Community Survey 2025]]"
}
]

View File

@@ -0,0 +1,37 @@
[
{
"first-heard-survey": "tiddlywiki.com",
"other-survey-source": "",
"are-you-a-dev": "No, I would not",
"first-used-tw": "2023",
"joined-tw-community": "No",
"started-tw-community": "",
"use-ttw": "",
"use-mailing-list": "",
"use-reddit": "",
"use-discord": "",
"use-github-discuss": "",
"published-plugin": "No",
"main-use-cases": "Task and project management (including CRMs)",
"other-use-cases": "",
"use-for-work-or-study": "Yes",
"share-wikis": "Yes, and I am the only editor/administrator of my wiki(s)",
"publish-to-web": "Not publishing to this location",
"publish-to-intranet": "Yes, using a single-file wiki",
"value-of-tw": "Organized training materials for the newcomers, the training session is more efficient (shorter).",
"tw-ability-level": "My use is basic; I use TiddlyWiki in a configuration close to standard, without plugins",
"save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)",
"backup-method": "N/A - I keep my wiki on a single system",
"diy-backup-info": "",
"wiki-setup-info": "<details><summary>Wiki Information</summary><pre><code>\nTiddlyWiki Version: 5.3.3\nCurrent palette: $:/palettes/Dracula\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: $:/core/ui/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: pop\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: top\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: \nPlugins: \n $:/core - 5.3.3\n $:/temp/info-plugin - \n $:/themes/tiddlywiki/snowwhite - 5.3.3\n $:/themes/tiddlywiki/vanilla - 5.3.3\n</code></pre></details>",
"tw-customisations": "",
"positive-about-future": "Yes",
"tw-future-confidence": "Yes",
"project-decision-trust": "Yes",
"project-strengths": "Works out of the box. Overcomes the problem with our company's IT security - no exe/php file, while still can store data in a more friendly format than an Excel sheet.",
"project-weaknesses": "With ChatGPT things are changing, but when I started with the TiddlyWiki, I was looking for examples of how to use it. Grok book has been helpful (old school learner here). Still, would love to see some more examples of some user cases, e.g. Editable List - like in Microsoft's Lists or OneNote. I use it mostly as a CRM system and using the codes from Grok's book to tweak a bit to make what I need.",
"ok-to-publish": "Yes, I am happy for my responses to be published",
"title": "Community Survey 2025 Answer 00196",
"tags": "[[Community Survey 2025]]"
}
]

View File

@@ -0,0 +1,33 @@
are-you-a-dev: No, I would not
backup-method: TiddlySpot / TiddlyHost
diy-backup-info:
first-heard-survey: tiddlywiki.com
first-used-tw: 2003
joined-tw-community: No
main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Other
ok-to-publish: Yes, I am happy for my responses to be published
other-survey-source:
other-use-cases: Electronic document management
positive-about-future: Yes
project-decision-trust: Yes
project-strengths: Site Web, gestion documentaire
project-weaknesses: pouvoir sortir en pdf plusieurs tiddlers
publish-to-intranet:
publish-to-web:
published-plugin: No
save-method: Single-file wiki through web browser with Download Saver (default saving mechanism)
share-wikis: No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki
started-tw-community:
tags: [[Community Survey 2025]]
title: Community Survey 2025 Answer 00197
tw-ability-level: I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I have written custom CSS styles
tw-customisations:
tw-future-confidence: Yes
use-discord:
use-for-work-or-study: Yes
use-github-discuss:
use-mailing-list:
use-reddit:
use-ttw:
value-of-tw: template to print in pdf
wiki-setup-info:

View File

@@ -0,0 +1,37 @@
[
{
"first-heard-survey": "tiddlywiki.com",
"other-survey-source": "",
"are-you-a-dev": "No, I would not",
"first-used-tw": "2015",
"joined-tw-community": "Yes",
"started-tw-community": "2024",
"use-ttw": "I read/lurk, but do not post",
"use-mailing-list": "I read/lurk, but do not post",
"use-reddit": "I do not engage with this community",
"use-discord": "I read and post in this community",
"use-github-discuss": "I read/lurk, but do not post",
"published-plugin": "No",
"main-use-cases": "Note-taking;Task and project management (including CRMs);As a knowledge base (including technical, non-fiction and encyclopaedic content)",
"other-use-cases": "",
"use-for-work-or-study": "Yes",
"share-wikis": "No, but I may export content into other formats and share individual tiddlers, the whole wiki, or an extract of the wiki",
"publish-to-web": "",
"publish-to-intranet": "",
"value-of-tw": "It helps me organize and prioritize my work-related activities and provides a reference for past work done.",
"tw-ability-level": "I have customised TiddlyWiki through options and plugins;I am comfortable using WikiText widgets (e.g. <$transclude>, <$list>...);I am comfortable writing filter expressions;I have written custom HTML;I have written custom CSS styles",
"save-method": "Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver)",
"backup-method": "Consumer online storage (e.g. Google Drive, Dropbox)",
"diy-backup-info": "",
"wiki-setup-info": "<details><summary>Wiki Information</summary><pre><code>\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/JMW/palettes/Nightfall\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: \nBrowser language setting: en-CA\nDefault type for missing tiddlers: \nAuto save setting: yes\nCode wrapping setting: pre-wrap\nSticky titles setting: no\nSidebar layout setting: fluid-fixed\nAuto focus field setting for new tiddlers: title\nCurrent storyview setting: classic\nToolbar text setting: no\nToolbar icon setting: yes\nButton class setting: tc-btn-invisible\nNavigation address bar setting: no\nTiddler opening behaviour setting for navigations from outside the story river: bottom\nTiddler opening behaviour setting for navigations from within the story river: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/Gk0Wk/sidebar-resizer,$:/plugins/nico/notebook-mobile\nPlugins: \n $:/core - 5.3.6\n $:/plugins/danielo515/2click2edit - 0.1\n $:/plugins/eucaly/quickjump - 0.0.2\n $:/plugins/flibbles/relink - 2.4.5\n $:/plugins/flibbles/relink-fieldnames - 2.4.1\n $:/plugins/flibbles/relink-markdown - 2.4.5\n $:/plugins/flibbles/relink-titles - 2.4.0\n $:/plugins/flibbles/relink-variables - 2.4.1\n $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\n $:/plugins/kookma/commander - 2.1.13\n $:/plugins/kookma/narenj - 0.5.1\n $:/plugins/kookma/search - 1.0.0\n $:/plugins/kookma/shiraz - 3.0.8\n $:/plugins/kookma/shiraz-callout - 0.8.0\n $:/plugins/kookma/shiraz-formatter - 0.6.0\n $:/plugins/kookma/trashbin - 1.3.5\n $:/plugins/kookma/tweaks - 0.2.1\n $:/plugins/kookma/utility - 3.2.2\n $:/plugins/nico/projectify - 0.14.3\n $:/plugins/tiddlywiki/markdown - 5.3.6\n $:/plugins/wikilabs/link-to-tabs - 3.0.1\n $:/plugins/xp/magicsidebar - 0.2.0\n $:/temp/info-plugin - \n $:/themes/nico/notebook - 1.4.1\n $:/themes/tiddlywiki/snowwhite - 5.3.6\n $:/themes/tiddlywiki/vanilla - 5.3.6\n</code></pre></details>",
"tw-customisations": "stylesheets, macros, community-sourced customizations, custom templates, custom pallettes",
"positive-about-future": "Yes",
"tw-future-confidence": "Yes",
"project-decision-trust": "Yes",
"project-strengths": "Keeping tiddlywiki infinitely customizable to adapt to my needs rather than forcing me to adapt to it.",
"project-weaknesses": "For me, tighter Markdown integration, especially with macros, would be great. I currently have a mix of markdown and tiddlywiki tiddlers scattered throughout my file.",
"ok-to-publish": "Yes, I am happy for my responses to be published",
"title": "Community Survey 2025 Answer 00198",
"tags": "[[Community Survey 2025]]"
}
]

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: 20231005205623086
modified: 20241115193649399
modified: 20250807100434131
tags: About
title: TiddlyWiki Archive

View File

@@ -1,22 +1,11 @@
created: 20150412191004348
modified: 20240925114810504
modified: 20251022153208584
tags: Community Reference
title: Developers
type: text/vnd.tiddlywiki
! [[GitHub Stats|https://github.com/TiddlyWiki/TiddlyWiki5/graphs/contributors]]
There are several resources for developers to learn more about TiddlyWiki and to discuss and contribute to its development.
> [img[https://repobeats.axiom.co/api/embed/b92b1b363e2b5f26837ae573a60d39b4248b50a0.svg]]
* [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]] is the official developer documentation
* 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
* The older ~TiddlyWikiDev Google Group is now closed in favour of [[Talk TiddlyWiki|https://talk.tiddlywiki.org/]] and [[GitHub Discussions|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]]
** It remains a useful archive: https://groups.google.com/group/TiddlyWikiDev
*** An enhanced group search facility is available on [[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]]
* 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

@@ -10,7 +10,7 @@ Nonetheless, TiddlyWiki is a relatively big, complex machine that requires a sig
The people in the community that do the work have widely varying needs:
* At one end, a good proportion of the work on TiddlyWiki is performed by community members on a purely voluntary basis. For those people, the satisfaction of helping others is sufficient reward. Indeed, for many people, unpaid voluntary activities are a satisfying antidote to everyday paid work
* At the other extreme, JeremyRuston and some other contributors are trying to make a full-time living working on TiddlyWiki by offering commercial products and services around it
* At the other extreme, [[@Jermolene]] and some other contributors are trying to make a full-time living working on TiddlyWiki by offering commercial products and services around it
* In between, there are other people who would appreciate an ocassional token to reward them for their work
To support these needs in the community, we have two initiatives:

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

@@ -1,6 +1,6 @@
created: 20140320230543190
modified: 20160602172752299
tags: Community
tags: Resources
title: Articles
type: text/vnd.tiddlywiki

View File

@@ -1,6 +1,6 @@
created: 20210101150806938
modified: 20230803053451496
tags: Community
tags: Resources
title: Community Editions
These are prepackaged editions created by the ~TiddlyWiki [[Community]]. These are ~TiddlyWikis with added plugins and configurations to facilitate a certain use-case. These are great starting points if you want to quickly jump into TiddlyWiki and start using it without spending too much time configuring yourself.

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