Compare commits
111 Commits
v5.3.7
...
docs-make-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1a8b56124 | ||
|
|
88b472c955 | ||
|
|
8c956a9448 | ||
|
|
4bb0bc5527 | ||
|
|
3378497816 | ||
|
|
d81204c6ab | ||
|
|
e001c21bf5 | ||
|
|
102c236267 | ||
|
|
06a2923adf | ||
|
|
54e5ef7489 | ||
|
|
6f306d1ed6 | ||
|
|
5dfdbc8ea0 | ||
|
|
4d4d9d9995 | ||
|
|
bad87c405e | ||
|
|
6f23a078b7 | ||
|
|
c3706b8a79 | ||
|
|
7ca8fb29af | ||
|
|
d39bb5274e | ||
|
|
81b69783c4 | ||
|
|
b349adde16 | ||
|
|
d63a1896b3 | ||
|
|
b65fa11643 | ||
|
|
4043499633 | ||
|
|
6a39a4e13b | ||
|
|
5b5147dade | ||
|
|
2c8fafee48 | ||
|
|
09a42a54c0 | ||
|
|
f4f31c37fc | ||
|
|
ed3405672a | ||
|
|
e3af967cbb | ||
|
|
6b0d3fab5d | ||
|
|
13f1689e7e | ||
|
|
4c09a88272 | ||
|
|
3c1d658fad | ||
|
|
5d738673ac | ||
|
|
7c020d0eb6 | ||
|
|
a2e5c2cca2 | ||
|
|
5ff4e02a61 | ||
|
|
2cc7c96eec | ||
|
|
8cd3d4e22c | ||
|
|
37e09d1c25 | ||
|
|
7a080092d0 | ||
|
|
dd91ac0b82 | ||
|
|
c22046a2c2 | ||
|
|
4dc89f6362 | ||
|
|
f9b9c02843 | ||
|
|
dd371addbc | ||
|
|
2459eee619 | ||
|
|
8eabd903a4 | ||
|
|
742d98157a | ||
|
|
b3c472c50d | ||
|
|
92ea494650 | ||
|
|
6119d5c2c6 | ||
|
|
fb514d1f30 | ||
|
|
bdcc67a277 | ||
|
|
78e7eb70ce | ||
|
|
23c8204c24 | ||
|
|
4ff454eb34 | ||
|
|
314ce12676 | ||
|
|
ae943f4906 | ||
|
|
9bdd475e60 | ||
|
|
ac83b46102 | ||
|
|
e3ced3edcb | ||
|
|
672211da15 | ||
|
|
23a23d9cac | ||
|
|
4080268887 | ||
|
|
9617a6d6d8 | ||
|
|
113eadf265 | ||
|
|
3597e6542d | ||
|
|
a467ee0816 | ||
|
|
14760da6af | ||
|
|
29a567f0a8 | ||
|
|
482af2c5d9 | ||
|
|
953792aeae | ||
|
|
047f8c7052 | ||
|
|
740018dc4c | ||
|
|
82dbc4b14c | ||
|
|
8ab4306b52 | ||
|
|
dc3d38563c | ||
|
|
00aa6efb01 | ||
|
|
0d6da12cba | ||
|
|
a785d1f4d2 | ||
|
|
7550226617 | ||
|
|
2459abcfc1 | ||
|
|
32caeb69c3 | ||
|
|
07b1502259 | ||
|
|
2a21ae5c10 | ||
|
|
9729e157cc | ||
|
|
e8a7bbf14e | ||
|
|
4f0f139a26 | ||
|
|
34889cf47b | ||
|
|
2bd4c38ee3 | ||
|
|
89030c4d4b | ||
|
|
6e7c63a72d | ||
|
|
2d75d3ccb1 | ||
|
|
f22937053b | ||
|
|
44a5d7f3dc | ||
|
|
3357da4d56 | ||
|
|
c91ef05e5b | ||
|
|
93d30f374d | ||
|
|
4a97cf35d0 | ||
|
|
c625e3c946 | ||
|
|
3e98fa0558 | ||
|
|
709c4a1b3c | ||
|
|
6e22d7eca5 | ||
|
|
67ba056832 | ||
|
|
10cf32177a | ||
|
|
b52e9d0b3e | ||
|
|
bdc0fe18fb | ||
|
|
962dbbfe16 | ||
|
|
ffb598280f |
4
.github/workflows/pr-check-build-size.yml
vendored
@@ -5,8 +5,8 @@ on:
|
||||
paths:
|
||||
- 'boot/**'
|
||||
- 'core/**'
|
||||
- 'themes/snowwhite/**'
|
||||
- 'themes/vanilla/**'
|
||||
- 'themes/tiddlywiki/snowwhite/**'
|
||||
- 'themes/tiddlywiki/vanilla/**'
|
||||
|
||||
jobs:
|
||||
calculate-build-size:
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# Default to the current version number for building the plugin library
|
||||
|
||||
if [ -z "$TW5_BUILD_VERSION" ]; then
|
||||
TW5_BUILD_VERSION=v5.3.7
|
||||
TW5_BUILD_VERSION=v5.3.8
|
||||
fi
|
||||
|
||||
echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]"
|
||||
|
||||
5
community/docs/Community Cards Caveats.tid
Normal 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.''
|
||||
11
community/docs/Community Cards.tid
Normal 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]]
|
||||
26
community/docs/Displaying Community Cards.tid
Normal 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">>
|
||||
36
community/docs/Submitting a Community Card.tid
Normal 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
|
||||
10
community/people/Arlen22.tid
Normal 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.
|
||||
29
community/people/EricShulman.tid
Normal 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! ™)'', 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.
|
||||
21
community/people/Jermolene.tid
Normal 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]].
|
||||
19
community/people/LinOnetwo.tid
Normal 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 don’t want to forget any of them. When I’m deeply focused on a task, it’s 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, I’ve 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.
|
||||
11
community/people/MotovunJack.tid
Normal 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.
|
||||
25
community/people/PMario.tid
Normal 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 that’s 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
|
||||
10
community/project/TiddlyWiki People.tid
Normal 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]]">>
|
||||
10
community/project/TiddlyWiki Project.tid
Normal 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"/>
|
||||
4
community/project/Vacant Positions.tid
Normal 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">>.
|
||||
8
community/project/teams/Core Team.tid
Normal 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.
|
||||
19
community/project/teams/Developer Experience Team.tid
Normal 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
|
||||
15
community/project/teams/Infrastructure Team.tid
Normal 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
|
||||
8
community/project/teams/MultiWikiServer Team.tid
Normal 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
|
||||
6
community/project/teams/Newsletter Team.tid
Normal 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.
|
||||
15
community/project/teams/Project Team.tid
Normal 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...
|
||||
11
community/project/teams/Quality Assurance Team.tid
Normal 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.
|
||||
|
||||
13
community/project/teams/Succession Team.tid
Normal 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
|
||||
|
||||
5
community/project/teams/tagCommunityTeam.tid
Normal 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
@@ -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.
|
||||
15
community/tools/cards/DefaultColourMappings.multids
Normal 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
|
||||
168
community/tools/cards/Procedures.tid
Normal 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
|
||||
158
community/tools/cards/Styles.tid
Normal 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;
|
||||
}
|
||||
6
community/tools/cards/ViewTemplateBodyCascade.tid
Normal 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]]
|
||||
3
community/tools/cards/ViewTemplateBodyTemplatePerson.tid
Normal file
@@ -0,0 +1,3 @@
|
||||
title: $:/tiddlywiki/community/cards/ViewTemplateBodyTemplatePerson
|
||||
|
||||
<$transclude $variable="community-card-person" title=<<currentTiddler>>/>
|
||||
3
community/tools/cards/ViewTemplateBodyTemplateTeam.tid
Normal file
@@ -0,0 +1,3 @@
|
||||
title: $:/tiddlywiki/community/cards/ViewTemplateBodyTemplateTeam
|
||||
|
||||
<$transclude $variable="community-card-team" title=<<currentTiddler>>/>
|
||||
7
community/tools/icons/person.tid
Normal 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>
|
||||
7
community/tools/icons/project-team.tid
Normal 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>
|
||||
9
community/tools/icons/team.tid
Normal 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>
|
||||
@@ -4,4 +4,4 @@ TiddlyWiki incorporates code from these fine OpenSource projects:
|
||||
|
||||
* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]
|
||||
* [[The Jasmine JavaScript Test Framework|https://jasmine.github.io/]]
|
||||
* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]
|
||||
* [[modern-normalize by Sindre Sorhus|https://github.com/sindresorhus/modern-normalize]]
|
||||
|
||||
@@ -70,7 +70,7 @@ alert-border: <<colour flexoki-ye>>
|
||||
alert-highlight: <<colour flexoki-re>>
|
||||
alert-muted-foreground: <<colour flexoki-ye>>
|
||||
background: #100F0F
|
||||
blockquote-bar: <<colour flexoki-ma-2>>
|
||||
blockquote-bar: <<colour flexoki-ma>>
|
||||
button-background: <<colour flexoki-bg-2>>
|
||||
button-foreground: <<colour flexoki-paper>>
|
||||
button-border: <<colour flexoki-600>>
|
||||
@@ -106,7 +106,7 @@ foreground: #CECDC3
|
||||
highlight-background: <<colour flexoki-yellow-900>>
|
||||
highlight-foreground: inherit
|
||||
menubar-background: <<colour primary>>
|
||||
menubar-foreground: <<colour flexoki-paper>>
|
||||
menubar-foreground: <<colour flexoki-999>>
|
||||
message-background: <<colour background>>
|
||||
message-border: <<colour foreground>>
|
||||
message-foreground: <<colour foreground>>
|
||||
|
||||
@@ -7,7 +7,7 @@ caption: {{$:/language/SideBar/Tools/Caption}}
|
||||
\procedure lingo-base() $:/language/ControlPanel/
|
||||
\function config-title() [[$:/config/PageControlButtons/Visibility/$(listItem)$]substitute[]]
|
||||
|
||||
<<lingo Basics/Version/Prompt>> <<version>>
|
||||
<<lingo Basics/Version/Prompt>><span class="tc-tiny-gap-left"><<version>></span>
|
||||
|
||||
<$let tv-config-toolbar-icons="yes"
|
||||
tv-config-toolbar-text="yes"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
title: $:/config/OfficialPluginLibrary
|
||||
tags: $:/tags/PluginLibrary
|
||||
url: https://tiddlywiki.com/library/v5.3.7/index.html
|
||||
url: https://tiddlywiki.com/library/v5.3.8/index.html
|
||||
caption: {{$:/language/OfficialPluginLibrary}}
|
||||
|
||||
{{$:/language/OfficialPluginLibrary/Hint}}
|
||||
|
||||
@@ -1,55 +1,58 @@
|
||||
title: $:/core/macros/colour-picker
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\procedure colour-picker-update-recent()
|
||||
\define colour-picker-update-recent()
|
||||
<$action-listops
|
||||
$tiddler="$:/config/ColourPicker/Recent"
|
||||
$subfilter="[<colour-picker-value>] [list[$:/config/ColourPicker/Recent]remove<colour-picker-value>] +[limit[8]]"
|
||||
$subfilter="$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]"
|
||||
/>
|
||||
\end
|
||||
|
||||
\procedure colour-picker-inner(actions)
|
||||
<$button tag="a" tooltip=<<colour-picker-value>>>
|
||||
<<colour-picker-update-recent>>
|
||||
<$transclude $variable="actions"/>
|
||||
<span style.display="inline-block" style.backgroundColor=<<colour-picker-value>> style.width="100%" style.height="100%" style.borderRadius="50%"/>
|
||||
\define colour-picker-inner(actions)
|
||||
<$button tag="a" tooltip="""$(colour-picker-value)$""">
|
||||
$(colour-picker-update-recent)$
|
||||
<$transclude $variable="__actions__"/>
|
||||
|
||||
<span style="display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;"/>
|
||||
|
||||
</$button>
|
||||
\end
|
||||
|
||||
\define colour-picker-recent-inner(actions)
|
||||
\whitespace trim
|
||||
\procedure colour-picker-recent-inner(actions)
|
||||
<$set name="colour-picker-value" value=<<recentColour>>>
|
||||
<$transclude $variable="colour-picker-inner" actions=<<actions>>/>
|
||||
<$set name="colour-picker-value" value="$(recentColour)$">
|
||||
<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/>
|
||||
</$set>
|
||||
\end
|
||||
|
||||
\procedure colour-picker-recent(actions)
|
||||
\define colour-picker-recent(actions)
|
||||
\whitespace trim
|
||||
{{$:/language/ColourPicker/Recent}}<$list filter="[list[$:/config/ColourPicker/Recent]]" variable="recentColour">
|
||||
 
|
||||
<$transclude $variable="colour-picker-recent-inner" actions=<<actions>>/>
|
||||
<$macrocall $name="colour-picker-recent-inner" actions=<<__actions__>>/>
|
||||
</$list>
|
||||
\end
|
||||
|
||||
\procedure colour-picker(actions)
|
||||
\define colour-picker(actions)
|
||||
\whitespace trim
|
||||
<div class="tc-colour-chooser">
|
||||
|
||||
<$transclude $variable="colour-picker-recent" actions=<<actions>>/>
|
||||
<$macrocall $name="colour-picker-recent" actions=<<__actions__>>/>
|
||||
|
||||
---
|
||||
|
||||
<$list filter="LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black" variable="colour-picker-value">
|
||||
 
|
||||
<$transclude $variable="colour-picker-inner" actions=<<actions>>/>
|
||||
<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/>
|
||||
</$list>
|
||||
|
||||
---
|
||||
|
||||
<$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder="" class="tc-tiny-gap-right"/>
|
||||
<$edit-text tiddler="$:/config/ColourPicker/New" tag="input" default="" placeholder=""/>
|
||||
 
|
||||
<$edit-text tiddler="$:/config/ColourPicker/New" type="color" tag="input"/>
|
||||
<$set name="colour-picker-value" value={{$:/config/ColourPicker/New}}>
|
||||
<%if [{$:/config/ColourPicker/New}!is[blank]] %>
|
||||
<$transclude $variable="colour-picker-inner" actions=<<actions>>/>
|
||||
<%endif%>
|
||||
<$macrocall $name="colour-picker-inner" actions=<<__actions__>>/>
|
||||
</$set>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
title: $:/core/macros/dumpvariables
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\procedure dumpvariables()
|
||||
\define dumpvariables()
|
||||
\whitespace trim
|
||||
<ul>
|
||||
<$list filter="[variables[]]" variable="varname">
|
||||
|
||||
@@ -1,36 +1,39 @@
|
||||
created: 20170715180840889
|
||||
modified: 20170715180914005
|
||||
tags: $:/tags/Macro
|
||||
title: $:/core/macros/image-picker
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\procedure image-picker-thumbnail(actions)
|
||||
<$button tag="a" tooltip=<<imageTitle>>><$transclude $variable="actions"/><$transclude tiddler=<<imageTitle>>/></$button>
|
||||
\define image-picker-thumbnail(actions)
|
||||
<$button tag="a" tooltip="""$(imageTitle)$"""><$transclude $variable="__actions__"/><$transclude tiddler=<<imageTitle>>/></$button>
|
||||
\end
|
||||
|
||||
\procedure image-picker-list(filter,actions)
|
||||
\define image-picker-list(filter,actions)
|
||||
\whitespace trim
|
||||
<$list filter=<<filter>> variable="imageTitle">
|
||||
<$transclude $variable="image-picker-thumbnail" actions=<<actions>>/>
|
||||
<$list filter="""$filter$""" variable="imageTitle">
|
||||
<$macrocall $name="image-picker-thumbnail" actions=<<__actions__>>/>
|
||||
 
|
||||
</$list>
|
||||
\end
|
||||
|
||||
\procedure image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]",subfilter:"")
|
||||
\define image-picker(actions,filter:"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]",subfilter:"")
|
||||
\whitespace trim
|
||||
<div class="tc-image-chooser">
|
||||
<$let state-system=<<qualify "$:/state/image-picker/system">> tv-filter={{{ [<filter>search-replace[$subfilter$],<subfilter>] }}}>
|
||||
<$vars state-system=<<qualify "$:/state/image-picker/system">>>
|
||||
<$checkbox tiddler=<<state-system>> field="text" checked="show" unchecked="hide" default="hide">
|
||||
<span class="tc-tiny-gap-left">{{$:/language/SystemTiddlers/Include/Prompt}}</span>
|
||||
 
|
||||
{{$:/language/SystemTiddlers/Include/Prompt}}
|
||||
</$checkbox>
|
||||
<$reveal state=<<state-system>> type="match" text="hide" default="hide" tag="div">
|
||||
<$transclude $variable="image-picker-list" filter=`$(tv-filter)$ +[!is[system]]` actions=<<actions>>/>
|
||||
<$macrocall $name="image-picker-list" filter="""$filter$ +[!is[system]]""" actions=<<__actions__>>/>
|
||||
</$reveal>
|
||||
<$reveal state=<<state-system>> type="nomatch" text="hide" default="hide" tag="div">
|
||||
<$transclude $variable="image-picker-list" filter=<<tv-filter>> actions=<<actions>>/>
|
||||
<$macrocall $name="image-picker-list" filter="""$filter$""" actions=<<__actions__>>/>
|
||||
</$reveal>
|
||||
</$let>
|
||||
</$vars>
|
||||
</div>
|
||||
\end
|
||||
|
||||
\procedure image-picker-include-tagged-images(actions)
|
||||
<$transclude $variable="image-picker" filter="[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]" actions=<<actions>>/>
|
||||
\define image-picker-include-tagged-images(actions)
|
||||
<$macrocall $name="image-picker" filter="[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]" actions=<<__actions__>>/>
|
||||
\end
|
||||
|
||||
@@ -1,18 +1,14 @@
|
||||
title: $:/core/macros/list
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\procedure list-links-draggable-drop-actions()
|
||||
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
\end
|
||||
|
||||
\define list-links(filter,type:"ul",subtype:"li",class:"",emptyMessage,field:"caption")
|
||||
\whitespace trim
|
||||
\procedure list-links(filter,type:"ul",subtype:"li",class:"",emptyMessage,field:"caption")
|
||||
<$genesis $type=<<type>> class=<<class>>>
|
||||
<$list filter=<<filter>> emptyMessage=<<emptyMessage>>>
|
||||
<$genesis $type=<<subtype>>>
|
||||
<$genesis $type=<<__type__>> class=<<__class__>>>
|
||||
<$list filter=<<__filter__>> emptyMessage=<<__emptyMessage__>>>
|
||||
<$genesis $type=<<__subtype__>>>
|
||||
<$link to={{!!title}}>
|
||||
<$let tv-wikilinks="no">
|
||||
<$transclude field=<<field>>>
|
||||
<$transclude field=<<__field__>>>
|
||||
<$view field="title"/>
|
||||
</$transclude>
|
||||
</$let>
|
||||
@@ -22,19 +18,24 @@ tags: $:/tags/Macro
|
||||
</$genesis>
|
||||
\end
|
||||
|
||||
\procedure list-links-draggable(tiddler,field:"list",emptyMessage,type:"ul",subtype:"li",class:"",itemTemplate)
|
||||
\define list-links-draggable-drop-actions()
|
||||
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
\end
|
||||
|
||||
\define list-links-draggable(tiddler,field:"list",emptyMessage,type:"ul",subtype:"li",class:"",itemTemplate)
|
||||
\whitespace trim
|
||||
<span class="tc-links-draggable-list">
|
||||
<$let targetTiddler=<<tiddler>> targetField=<<field>>>
|
||||
<$genesis $type=<<type>> class=<<class>>>
|
||||
<$list filter="[<tiddler>get<field>enlist-input[]]" emptyMessage=<<emptyMessage>>>
|
||||
<$vars targetTiddler="""$tiddler$""" targetField="""$field$""">
|
||||
<$genesis $type=<<__type__>> class="$class$">
|
||||
<$list filter="[list[$tiddler$!!$field$]]" emptyMessage=<<__emptyMessage__>>>
|
||||
<$droppable
|
||||
actions=<<list-links-draggable-drop-actions>>
|
||||
tag=<<subtype>>
|
||||
tag="""$subtype$"""
|
||||
enable=<<tv-enable-drag-and-drop>>
|
||||
>
|
||||
<div class="tc-droppable-placeholder"/>
|
||||
<div>
|
||||
<$transclude tiddler=<<itemTemplate>>>
|
||||
<$transclude tiddler="""$itemTemplate$""">
|
||||
<$link to={{!!title}}>
|
||||
<$let tv-wikilinks="no">
|
||||
<$transclude field="caption">
|
||||
@@ -59,54 +60,52 @@ tags: $:/tags/Macro
|
||||
</$droppable>
|
||||
</$tiddler>
|
||||
</$genesis>
|
||||
</$let>
|
||||
</$vars>
|
||||
</span>
|
||||
\end
|
||||
|
||||
\procedure list-tagged-draggable-drop-actions(tag)
|
||||
\define list-tagged-draggable-drop-actions(tag)
|
||||
\whitespace trim
|
||||
<!-- Save the current ordering of the tiddlers with this tag -->
|
||||
<$set name="order" filter="[<tag>tagging[]]">
|
||||
<$set name="order" filter="[<__tag__>tagging[]]">
|
||||
<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->
|
||||
<$list filter="[<tag>tagging[]]">
|
||||
<$list filter="[<__tag__>tagging[]]">
|
||||
<$action-deletefield $field="list-before"/>
|
||||
<$action-deletefield $field="list-after"/>
|
||||
</$list>
|
||||
<!-- Save the new order to the Tag Tiddler -->
|
||||
<$action-listops $tiddler=<<tag>> $field="list" $filter="+[enlist<order>] +[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
<$action-listops $tiddler=<<__tag__>> $field="list" $filter="+[enlist<order>] +[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
<!-- Make sure the newly added item has the right tag -->
|
||||
<!-- Removing this line makes dragging tags within the dropdown work as intended -->
|
||||
<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<tag>>/>-->
|
||||
<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->
|
||||
<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->
|
||||
<$list filter="[<actionTiddler>!contains:tags<tag>]">
|
||||
<$list filter="[<actionTiddler>!contains:tags<__tag__>]">
|
||||
<$fieldmangler tiddler=<<actionTiddler>>>
|
||||
<$action-sendmessage $message="tm-add-tag" $param=<<tag>>/>
|
||||
<$action-sendmessage $message="tm-add-tag" $param=<<__tag__>>/>
|
||||
</$fieldmangler>
|
||||
</$list>
|
||||
</$set>
|
||||
\end
|
||||
|
||||
\procedure list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:"div",storyview:"")
|
||||
\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:"div",storyview:"")
|
||||
\whitespace trim
|
||||
<span class="tc-tagged-draggable-list">
|
||||
<$set name="tag" value=<<tag>>>
|
||||
<$set name="tag" value=<<__tag__>>>
|
||||
<$list
|
||||
filter=`[<tag>tagging[]$(subFilter)$]`
|
||||
emptyMessage=<<emptyMessage>>
|
||||
storyview=<<storyview>>
|
||||
filter="[<__tag__>tagging[]$subFilter$]"
|
||||
emptyMessage=<<__emptyMessage__>>
|
||||
storyview=<<__storyview__>>
|
||||
>
|
||||
<$genesis $type=<<elementTag>> class="tc-menu-list-item">
|
||||
<$genesis $type=<<__elementTag__>> class="tc-menu-list-item">
|
||||
<$droppable
|
||||
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<tag>>/>"""
|
||||
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>"""
|
||||
enable=<<tv-enable-drag-and-drop>>
|
||||
>
|
||||
<$genesis $type=<<elementTag>> class="tc-droppable-placeholder"/>
|
||||
<$genesis $type=<<elementTag>>>
|
||||
<$transclude tiddler=<<itemTemplate>>>
|
||||
<$genesis $type=<<__elementTag__>> class="tc-droppable-placeholder"/>
|
||||
<$genesis $type=<<__elementTag__>>>
|
||||
<$transclude tiddler="""$itemTemplate$""">
|
||||
<$link to={{!!title}}>
|
||||
<$let tv-wikilinks="no">
|
||||
<$transclude field="caption">
|
||||
<$view field="title"/>
|
||||
</$transclude>
|
||||
</$let>
|
||||
<$view field="title"/>
|
||||
</$link>
|
||||
</$transclude>
|
||||
</$genesis>
|
||||
@@ -115,11 +114,11 @@ tags: $:/tags/Macro
|
||||
</$list>
|
||||
<$tiddler tiddler="">
|
||||
<$droppable
|
||||
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<tag>>/>"""
|
||||
actions="""<$macrocall $name="list-tagged-draggable-drop-actions" tag=<<__tag__>>/>"""
|
||||
enable=<<tv-enable-drag-and-drop>>
|
||||
>
|
||||
<$genesis $type=<<elementTag>> class="tc-droppable-placeholder"/>
|
||||
<$genesis $type=<<elementTag>> style="height:0.5em;"/>
|
||||
<$genesis $type=<<__elementTag__>> class="tc-droppable-placeholder"/>
|
||||
<$genesis $type=<<__elementTag__>> style="height:0.5em;"/>
|
||||
</$droppable>
|
||||
</$tiddler>
|
||||
</$set>
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
title: $:/core/macros/translink
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\procedure translink(title,mode:"block")
|
||||
\define translink(title,mode:"block")
|
||||
\whitespace trim
|
||||
<%if [<mode>match[block]] %>
|
||||
<$list filter="[<__mode__>match[block]]">
|
||||
<div class="tc-translink">
|
||||
<div>
|
||||
<$link to=<<title>>>
|
||||
<h1><$text text=<<title>>/></h1>
|
||||
<$link to="""$title$""">
|
||||
<h1><$text text="""$title$"""/></h1>
|
||||
</$link>
|
||||
<$transclude tiddler=<<title>> mode="block">
|
||||
<$set name="currentTiddler" value=<<title>>><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
|
||||
<$transclude tiddler="""$title$""" mode="block">
|
||||
<$set name="currentTiddler" value="""$title$"""><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
|
||||
</$transclude>
|
||||
</div>
|
||||
</div>
|
||||
<%endif%>
|
||||
<%if [<mode>match[inline]] %>
|
||||
</$list>
|
||||
<$list filter="[<__mode__>match[inline]]">
|
||||
<span class="tc-translink">
|
||||
<$link to=<<title>> class="tc-tiny-gap-right">
|
||||
<$text text=<<title>>/>
|
||||
<$link to="""$title$""">
|
||||
<$text text="""$title$"""/>
|
||||
</$link>
|
||||
(<$transclude tiddler=<<title>> mode="inline">
|
||||
<$set name="currentTiddler" value=<<title>>><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
|
||||
 (<$transclude tiddler="""$title$""" mode="inline">
|
||||
<$set name="currentTiddler" value="""$title$"""><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
|
||||
</$transclude>)
|
||||
</span>
|
||||
<%endif%>
|
||||
</$list>
|
||||
\end
|
||||
|
||||
@@ -1,58 +1,62 @@
|
||||
title: $:/core/macros/tree
|
||||
tags: $:/tags/Macro
|
||||
|
||||
\procedure leaf-link(full-title,chunk,separator: "/")
|
||||
<$link to=<<full-title>>><$text text=<<chunk>>/></$link>
|
||||
\define leaf-link(full-title,chunk,separator: "/")
|
||||
<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>
|
||||
\end
|
||||
|
||||
\define leaf-node(prefix,chunk)
|
||||
\whitespace trim
|
||||
\procedure leaf-node(prefix,chunk)
|
||||
<li>
|
||||
<$list filter="[<prefix>addsuffix<chunk>is[shadow]] [<prefix>addsuffix<chunk>is[tiddler]]" variable="full-title">
|
||||
<$list filter="[<full-title>removeprefix<prefix>]" variable="chunk">
|
||||
<span class="tc-tiny-gap-right">{{$:/core/images/file}}</span><$transclude $variable="leaf-link" full-title=<<full-title>> chunk=<<chunk>>/>
|
||||
<$list filter="[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]" variable="full-title">
|
||||
<$list filter="[<full-title>removeprefix<__prefix__>]" variable="chunk">
|
||||
<span>{{$:/core/images/file}}</span> <$macrocall $name="leaf-link" full-title=<<full-title>> chunk=<<chunk>>/>
|
||||
</$list>
|
||||
</$list>
|
||||
</li>
|
||||
\end
|
||||
|
||||
\procedure branch-node(prefix,chunk,separator: "/")
|
||||
\define branch-node(prefix,chunk,separator: "/")
|
||||
\whitespace trim
|
||||
<li>
|
||||
<$set name="reveal-state" value={{{ [[$:/state/tree/]addsuffix<prefix>addsuffix<chunk>] }}}>
|
||||
<$set name="reveal-state" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>
|
||||
<$reveal type="nomatch" stateTitle=<<reveal-state>> text="show">
|
||||
<$button setTitle=<<reveal-state>> setTo="show" class="tc-btn-invisible">
|
||||
{{$:/core/images/folder}} <$text text=<<chunk>>/>
|
||||
{{$:/core/images/folder}} <$text text=<<__chunk__>>/>
|
||||
</$button>
|
||||
</$reveal>
|
||||
<$reveal type="match" stateTitle=<<reveal-state>> text="show">
|
||||
<$button setTitle=<<reveal-state>> setTo="hide" class="tc-btn-invisible">
|
||||
{{$:/core/images/folder}} <$text text=<<chunk>>/>
|
||||
{{$:/core/images/folder}} <$text text=<<__chunk__>>/>
|
||||
</$button>
|
||||
</$reveal>
|
||||
<span class="tc-tiny-gap-left">(<$count filter="[all[shadows+tiddlers]removeprefix<prefix>removeprefix<chunk>] -[<prefix>addsuffix<chunk>]"/>)</span>
|
||||
 
|
||||
<span>(<$count filter="[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]"/>)</span>
|
||||
<$reveal type="match" stateTitle=<<reveal-state>> text="show">
|
||||
<$transclude $variable="tree-node" prefix={{{ [<prefix>addsuffix<chunk>] }}} separator=<<separator>>/>
|
||||
<$macrocall $name="tree-node" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>
|
||||
</$reveal>
|
||||
</$set>
|
||||
</li>
|
||||
\end
|
||||
|
||||
\procedure tree-node(prefix,separator: "/")
|
||||
\define tree-node(prefix,separator: "/")
|
||||
\whitespace trim
|
||||
<ol>
|
||||
<$list filter="[all[shadows+tiddlers]removeprefix<prefix>splitbefore<separator>sort[]!suffix<separator>]" variable="chunk">
|
||||
<$transclude $variable="leaf-node" prefix=<<prefix>> chunk=<<chunk>> separator=<<separator>>/>
|
||||
<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]" variable="chunk">
|
||||
<$macrocall $name="leaf-node" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>
|
||||
</$list>
|
||||
<$list filter="[all[shadows+tiddlers]removeprefix<prefix>splitbefore<separator>sort[]suffix<separator>]" variable="chunk">
|
||||
<$transclude $variable="branch-node" prefix=<<prefix>> chunk=<<chunk>> separator=<<separator>>/>
|
||||
<$list filter="[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]" variable="chunk">
|
||||
<$macrocall $name="branch-node" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>
|
||||
</$list>
|
||||
</ol>
|
||||
\end
|
||||
|
||||
\procedure tree(prefix: "$:/",separator: "/")
|
||||
\define tree(prefix: "$:/",separator: "/")
|
||||
\whitespace trim
|
||||
<div class="tc-tree">
|
||||
<span><$text text=<<prefix>>/></span>
|
||||
<span><$text text=<<__prefix__>>/></span>
|
||||
<div>
|
||||
<$transclude $variable="tree-node" prefix=<<prefix>> separator=<<separator>>/>
|
||||
<$macrocall $name="tree-node" prefix=<<__prefix__>> separator=<<__separator__>>/>
|
||||
</div>
|
||||
</div>
|
||||
\end
|
||||
|
||||
127
editions/dev/tiddlers/How to Create a Custom Cascade Entry.tid
Normal 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 you’ll add, only for learning purpose. You don’t 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 you’ll 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 won’t 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 it’s 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 you’ll 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 you’ll 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
|
||||
|
||||
It’s 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 you’re adding to the correct file or creating a new one if it doesn’t 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 plugin’s 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%>
|
||||
```
|
||||
@@ -1,5 +1,5 @@
|
||||
created: 20190809095728085
|
||||
modified: 20190809123445125
|
||||
modified: 20250707151538845
|
||||
title: Releasing a new version of TiddlyWiki
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
@@ -11,36 +11,40 @@ type: text/vnd.tiddlywiki
|
||||
# Move the latest release note from the prerelease edition into the tw5.com edition
|
||||
# Adjust the release date and the ''released'' field of the latest release tiddler (eg, [[Release 5.1.3]])
|
||||
# Also adjust the github.com comparison link to point to the tag for the new release
|
||||
# Adjust the tiddler [[TiddlyWiki Archive]] to include the new version number
|
||||
# Ensure [[TiddlyWiki Releases]] has the new version as the default tab
|
||||
# Adjust the modified time of HelloThere
|
||||
# Make sure ''master'' is fully committed
|
||||
|
||||
!! Update Readmes
|
||||
!! Update Readmes and release note
|
||||
|
||||
# Edit `package.json` to the new version number
|
||||
# Run `./bin/readme-bld.sh` to build the readme files
|
||||
# Commit the new readme files to ''master''
|
||||
# Restore `package.json` to the previous version number
|
||||
# Adjust the link for "GitHub for detailed change history of this release" in the release note
|
||||
# Add the credits for the new release banner to the release note, including a link to the GitHub instance of the image from the commit history
|
||||
|
||||
!! Make New Release
|
||||
|
||||
# Run `./bin/verbump "5.1.3"` (substituting the correct version number) to update the version number, assign it a tag
|
||||
# Run `./bin/verbump "5.1.3"` (substituting the correct version number) to update the version number and assign it a tag
|
||||
# Run `./bin/npm-publish.sh` to publish the release to npm
|
||||
# Verify that the new release of TiddlyWiki is available at https://www.npmjs.org/package/tiddlywiki
|
||||
|
||||
!! Update tiddlywiki.com release
|
||||
|
||||
# Update ''tiddlywiki-com'' from ''master'' and push to ~GitHub
|
||||
# Wait until https://tiddlywiki.com is updated with the new release
|
||||
|
||||
!! Cleaning Up
|
||||
!! Announcements
|
||||
|
||||
# Tweet the release with the text "TiddlyWiki v5.x.x released to https://tiddlywiki.com #newtiddlywikirelease"
|
||||
# Announce the new release on [[TalkTW|https://talk.tiddlywiki.org]]
|
||||
|
||||
!! Preparation for the next release in ''master''
|
||||
|
||||
# Adjust version number in `package.json`
|
||||
# Adjust version number in `bin/build-site.sh`
|
||||
# Adjust version number in [[$:/config/OfficialPluginLibrary]] (both in `editions/tw5.com` and `editions/prerelease/tiddlers/system`) and [[$:/config/LocalPluginLibrary]]
|
||||
# Adjust new release banner
|
||||
# Create temporary new release banner
|
||||
# Create the release note for the new release
|
||||
# Commit changes to ''master'' and push to ~GitHub
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -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>
|
||||
|
||||
@@ -2,6 +2,7 @@ created: 20131127215321439
|
||||
modified: 20140912135951542
|
||||
title: $:/DefaultTiddlers
|
||||
|
||||
[[Hire the founder of TiddlyWiki]]
|
||||
[[TiddlyWiki Pre-release]]
|
||||
HelloThere
|
||||
[[Quick Start]]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
title: $:/config/OfficialPluginLibrary
|
||||
tags: $:/tags/PluginLibrary
|
||||
url: https://tiddlywiki.com/prerelease/library/v5.3.7/index.html
|
||||
url: https://tiddlywiki.com/prerelease/library/v5.3.8/index.html
|
||||
caption: {{$:/language/OfficialPluginLibrary}} (Prerelease)
|
||||
|
||||
The prerelease version of the official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team.
|
||||
|
||||
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 826 B |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 577 B |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 9.3 KiB |
@@ -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;
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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",
|
||||
' <style id="' + id + '" type="text/css">' + css + '</style>'); // fails without
|
||||
} 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";
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
@@ -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));
|
||||
//}}}
|
||||
@@ -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);
|
||||
//}}}
|
||||
@@ -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);
|
||||
//}}}
|
||||
@@ -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));
|
||||
//}}}
|
||||
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -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;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
@@ -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"};
|
||||
@@ -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("×")
|
||||
.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("×")
|
||||
.click(cb)
|
||||
.appendTo(item);
|
||||
}
|
||||
|
||||
ts.parseParameters = parseParameters;
|
||||
window.ts = {
|
||||
init: ts.init
|
||||
};
|
||||
|
||||
}(jQuery));
|
||||
//}}}
|
||||
@@ -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.
|
||||
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"first-heard-survey": "Talk TiddlyWiki",
|
||||
"other-survey-source": "",
|
||||
"are-you-a-dev": "No, I would not",
|
||||
"first-used-tw": "2017",
|
||||
"joined-tw-community": "Yes",
|
||||
"started-tw-community": "2021",
|
||||
"use-ttw": "I read and post in this community",
|
||||
"use-mailing-list": "I do not engage with this community",
|
||||
"use-reddit": "I read and post in 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;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content)",
|
||||
"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": "Extensive use of TiddlyWiki in personal life, mainly for journalling, tracking activity and cataloging posessions. Strong use in work for knowledge sharing and instruction.",
|
||||
"tw-ability-level": "I am comfortable writing filter expressions",
|
||||
"save-method": "Single-file wiki through web browser with Download Saver (default saving mechanism)",
|
||||
"backup-method": "DIY (any other solution)",
|
||||
"diy-backup-info": "I wrote a set of batch scripts to pick up listed files from Download folder, place in live locations and backing up files with date timestamp files that were already in live location with the same name.",
|
||||
"wiki-setup-info": "<details><summary>Wiki Information</summary><pre><code>\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/Vanilla\nCurrent theme: \nCurrent layout: \nBrowser language setting: en-GB\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.7\n $:/plugins/bj/Calendar - 1.11.0\n $:/plugins/inmysocks/WordCount - 5.1.10-prerelease\n $:/temp/info-plugin - \n $:/themes/tiddlywiki/snowwhite - 5.3.7\n $:/themes/tiddlywiki/vanilla - 5.3.7\n</code></pre></details>",
|
||||
"tw-customisations": "Throughout my wiki's I've used various plugins downloaded from community. This includes Projectify, Relink, Tekan,",
|
||||
"positive-about-future": "Yes",
|
||||
"tw-future-confidence": "Yes",
|
||||
"project-decision-trust": "Yes",
|
||||
"project-strengths": "Looking forward to seeing what comes of project 2036 and achivements made on the path there. \nHoping to get more out of Tiddlywiki by going through Grok again (my first attempt through v1 and my brain began glazing over after a point).",
|
||||
"project-weaknesses": "Only real fear if support dries up and browser updates break key functionality of Tiddlywiki.",
|
||||
"ok-to-publish": "Yes, I am happy for my responses to be published",
|
||||
"title": "Community Survey 2025 Answer 00001",
|
||||
"tags": "[[Community Survey 2025]]"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"first-heard-survey": "Talk TiddlyWiki",
|
||||
"other-survey-source": "",
|
||||
"are-you-a-dev": "Yes, I would",
|
||||
"first-used-tw": "2020",
|
||||
"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": "No, my TiddlyWiki is for personal use only",
|
||||
"publish-to-web": "",
|
||||
"publish-to-intranet": "",
|
||||
"value-of-tw": "Single location, where I gather information.",
|
||||
"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",
|
||||
"save-method": "Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop",
|
||||
"backup-method": "DIY (any other solution)",
|
||||
"diy-backup-info": "Nextcloud for TiddlyDesktop, Backup on filesystem-level for Node.js",
|
||||
"wiki-setup-info": "<details><summary>Wiki Information</summary><pre><code>\nTiddlyWiki Version: 5.3.7\nCurrent palette: $:/palettes/SpartanDay 1\nCurrent theme: $:/themes/tiddlywiki/snowwhite\nCurrent layout: \nBrowser language setting: de-DE\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: top\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: above\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: \nDisabled plugins: $:/plugins/wikilabs/click-effect\nPlugins: \n $:/core - 5.3.7\n $:/plugins/felixhayashi/hotzone - 0.0.3\n $:/plugins/felixhayashi/tiddlymap - 0.17.20+10024\n $:/plugins/felixhayashi/topstoryview - 0.2.0\n $:/plugins/flibbles/vis-network - 9.1.2\n $:/plugins/Gk0Wk/CPL-Repo - 2025.03.29\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": "No",
|
||||
"project-decision-trust": "Yes",
|
||||
"project-strengths": "Open source allows all people to contribute. Perfect spot between writing content and linking content in a database-like structure.",
|
||||
"project-weaknesses": "The initial learning curve for getting started is very steep. Thankfully there is Grok-TW.\nOne of my painpoints is synchronization with Android devices, which I haven't yet found a reasonable way to do.",
|
||||
"ok-to-publish": "Yes, I am happy for my responses to be published",
|
||||
"title": "Community Survey 2025 Answer 00002",
|
||||
"tags": "[[Community Survey 2025]]"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"first-heard-survey": "Talk TiddlyWiki",
|
||||
"other-survey-source": "",
|
||||
"are-you-a-dev": "No, I would not",
|
||||
"first-used-tw": "2021",
|
||||
"joined-tw-community": "Yes",
|
||||
"started-tw-community": "2022",
|
||||
"use-ttw": "I read and post in this community",
|
||||
"use-mailing-list": "I read/lurk, but do not post",
|
||||
"use-reddit": "I read and post in this community",
|
||||
"use-discord": "I read and post in 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);Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)",
|
||||
"other-use-cases": "",
|
||||
"use-for-work-or-study": "No",
|
||||
"share-wikis": "Yes, with multiple editors/administrators",
|
||||
"publish-to-web": "Not publishing to this location",
|
||||
"publish-to-intranet": "Yes, using a single-file wiki",
|
||||
"value-of-tw": "It lets me keep all my notes in one, well-structured, easy-to-edit place; remix content and display it in different formats via programmatic templates; and visualize, search, and manipulate data.",
|
||||
"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": "No automatic sync across my devices",
|
||||
"diy-backup-info": "",
|
||||
"wiki-setup-info": "<details><summary>Wiki Information</summary><pre><code>\nTiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/Rad\nCurrent theme: $:/themes/tiddlywiki/vanilla\nCurrent layout: $:/themes/be-rad/PageTemplate\nBrowser language setting: en-US\nDefault type for missing tiddlers: \nAuto save setting: no\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: 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: below\nCamelCase linking setting: disable\nKeyboard shortcuts that have been customised: $:/config/shortcuts/diceify,$:/config/shortcuts/streams-indent,$:/config/shortcuts/streams-unindent\nDisabled plugins: $:/plugins/TWaddle/pluginsize\nPlugins: \n $:/core - 5.3.6\n $:/plugins/ahahn/hoverWidget - 0.1.0\n $:/plugins/ahahn/tinka - 0.5.2\n $:/plugins/benwebber/list-inline - 0.2.3\n $:/plugins/bimlas/kin-filter - 1.0.2\n $:/plugins/cdr/external-js - 0.2.1\n $:/plugins/D&DTools/d20.js - 1.1.0\n $:/plugins/designthinkerer/bettercode - 0.0.1\n $:/plugins/ebalster/formula - 0.2.5\n $:/plugins/eskha/DelphesNotes/NotesMenu - 0.1.14\n $:/plugins/eskha/DelphesNotes/SeeAlsoForMissing - 0.1.20\n $:/plugins/eskha/DelphesNotes/SmartSearch - 0.1.13\n $:/plugins/eskha/DelphesNotes/TagsSidebar - 0.1.16\n $:/plugins/EvidentlyCube/AdvancedPerformance - 1.1.6\n $:/plugins/EvidentlyCube/AutoComplete - 1.0.18\n $:/plugins/felixhayashi/respawn - 0.0.3\n $:/plugins/felixhayashi/tiddlymap - 0.17.20+10024\n $:/plugins/felixhayashi/topstoryview - 0.2.0\n $:/plugins/flibbles/relink - 2.4.3\n $:/plugins/flibbles/relink-titles - 2.4.0\n $:/plugins/flibbles/vis-network - 9.1.3\n $:/plugins/Gk0Wk/CPL-Repo - 2022.12.28\n $:/plugins/Gk0Wk/drawio - 0.0.4\n $:/plugins/inmysocks/GenTags - 0.0.6\n $:/plugins/inmysocks/randVal - 0.1.3\n $:/plugins/kookma/commander - 2.1.8\n $:/plugins/kookma/favorites - 4.8.4\n $:/plugins/kookma/section - 1.2.6\n $:/plugins/kookma/shiraz - 2.9.21\n $:/plugins/kookma/thinkup - 0.2.12\n $:/plugins/kookma/todolist - 1.4.4\n $:/plugins/kookma/trashbin - 1.3.4\n $:/plugins/mklauber/shuffle - 1.0.2\n $:/plugins/souk21/commandpalette - 0.0.9\n $:/plugins/sq/macy - 0.0.9\n $:/plugins/sq/selective-refresh - 0.0.1\n $:/plugins/sq/spotlight - 0.0.5\n $:/plugins/sq/sq-filters - 0.1.5\n $:/plugins/sq/streams - 1.2.25\n $:/plugins/tiddlywiki/codemirror - 5.3.6\n $:/plugins/tiddlywiki/codemirror-search-replace - 5.3.6\n $:/plugins/tiddlywiki/dynannotate - 5.3.6\n $:/plugins/tiddlywiki/dynaview - 5.3.6\n $:/plugins/tobibeer/appear - 0.6.4\n $:/plugins/tobibeer/contains - 0.6.0\n $:/plugins/tobibeer/rate - 0.6.2\n $:/plugins/tobibeer/split - 0.8.1\n $:/plugins/TWaddle/Boosters - 0.0.6\n $:/plugins/TWaddle/ListTree - 1.0.5\n $:/plugins/TWaddle/OverWrite - 0.0.2\n $:/plugins/TWaddle/ScrollBack - 0.0.1\n $:/plugins/TWaddle/SideEditor - 3.0.26\n $:/plugins/TWaddle/Stylefields - 1.0.4\n $:/plugins/wikilabs/advanced-search-plus - 0.4.2\n $:/plugins/wikilabs/keyvalues - 2.2.0\n $:/plugins/wikilabs/link-to-tabs - 2.2.0\n $:/plugins/wikilabs/thin-scrollbars - 0.1.2\n $:/plugins/wikilabs/uni-link - 2.2.8\n $:/plugins/wilk/dictionary-table - 1.0.6\n $:/temp/info-plugin - \n $:/themes/tiddlywiki/vanilla - 5.3.6\n</code></pre></details>\n\n* Many of the plugin version numbers are probably misleading: I regularly use Tinka to edit and repack plugins for my own private use, which automatically increments the number.",
|
||||
"tw-customisations": "- many custom stylesheets\n- a number of edit toolbar buttons not listed above\n- replaced select field input areas with textareas via Field Editor cascade\n- heavy use of the ViewTemplate and EditTemplate cascades\n- many macros/functions/procedures\n- modified $link widget",
|
||||
"positive-about-future": "Yes",
|
||||
"tw-future-confidence": "Yes",
|
||||
"project-decision-trust": "Yes",
|
||||
"project-strengths": "I love how easy TW makes it to edit (nearly) anything, including itself. I'm also boundlessly grateful to the community for their generosity with their time and their own code, which continues to aid and inspire my work. I've very confident I could not have reached my current proficiency without their help.\n\nOf the future features I've seen mentioned, I'm most excited for multi-value variables and increased flexibility in procedure syntax.",
|
||||
"project-weaknesses": "I'm slightly concerned about what I perceive as an increased reliance on AI assistance, both in coding (some users actively recommend using AI to write and publish plugins for public use) and in branding (like the new AI-generated version logo). I feel that it both undermines the long-standing TW principle that users should own their data and risks the proliferation of bad code by publishers who don't understand it well enough to fix it.",
|
||||
"ok-to-publish": "Yes, I am happy for my responses to be published",
|
||||
"title": "Community Survey 2025 Answer 00003",
|
||||
"tags": "[[Community Survey 2025]]"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,33 @@
|
||||
are-you-a-dev: Yes, I would
|
||||
backup-method: Consumer online storage (e.g. Google Drive, Dropbox)
|
||||
diy-backup-info:
|
||||
first-heard-survey: Talk TiddlyWiki
|
||||
first-used-tw: 2005
|
||||
joined-tw-community: Yes
|
||||
main-use-cases: Note-taking;Journalling;Task and project management (including CRMs);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: Backwards compatibility, transparency with future developments.
|
||||
project-weaknesses: Documentation, specific use-case versions, better 'Home' screen experience--think about what HyperCard did.
|
||||
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: 2014
|
||||
tags: [[Community Survey 2025]]
|
||||
title: Community Survey 2025 Answer 00004
|
||||
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
|
||||
tw-customisations: Yes, I have extensive custom CSS that I wrote, since I am extremely proficient with CSS.
|
||||
tw-future-confidence: Yes
|
||||
use-discord: I do not engage with this community
|
||||
use-for-work-or-study: Yes
|
||||
use-github-discuss: I do not engage with this community
|
||||
use-mailing-list: I do not engage with this community
|
||||
use-reddit: I do not engage with this community
|
||||
use-ttw: I read and post in this community
|
||||
value-of-tw: For the past 11 years, I could not have performed my daily job at the level I have without the use of TiddlyWiki. It is indispensable. I use it continuously throughout the work day.
|
||||
wiki-setup-info:
|
||||
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"first-heard-survey": "Talk TiddlyWiki",
|
||||
"other-survey-source": "",
|
||||
"are-you-a-dev": "No, I would not",
|
||||
"first-used-tw": "2006",
|
||||
"joined-tw-community": "Yes",
|
||||
"started-tw-community": "2011",
|
||||
"use-ttw": "I read and post in this community",
|
||||
"use-mailing-list": "I do not engage with this community",
|
||||
"use-reddit": "I read/lurk, but do not post",
|
||||
"use-discord": "I do not engage with this community",
|
||||
"use-github-discuss": "I read/lurk, but do not post",
|
||||
"published-plugin": "Yes",
|
||||
"main-use-cases": "Note-taking;Journalling;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": "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": "RAD, especially Project management customized for my exact needs",
|
||||
"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": "Single-file wiki through web browser with Download Saver (default saving mechanism);Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Multi-file wiki served through Node.js;Single-file wiki with TiddlyDesktop;Single-file wiki with third-party desktop app (e.g. TidGi Desktop, twexe);Single-file wiki third-party mobile app (e.g. Tiddloid, Quine)",
|
||||
"backup-method": "TiddlySpot / TiddlyHost;Consumer online storage (e.g. Google Drive, Dropbox)",
|
||||
"diy-backup-info": "",
|
||||
"wiki-setup-info": "NA",
|
||||
"tw-customisations": "Many macros/procedures, widgets, filter operators myself. \n\nHandful of plugins from others like relink, editor autolist, autocomplete",
|
||||
"positive-about-future": "Yes",
|
||||
"tw-future-confidence": "Yes",
|
||||
"project-decision-trust": "No",
|
||||
"project-strengths": "LOTS! Adding functionality and flexibility, stability, performance, great community (and moderation)!",
|
||||
"project-weaknesses": "Need easy apps for mobile and easy syncing that’s secure & private, bad name, plain website, documentation is confusing, lots of different syntaxes, community links looks and functionality are poor - need easy adding and voting, need real concurrent multi-user capability, key add-ins like BOB get discontinued which is very painful.",
|
||||
"ok-to-publish": "Yes, I am happy for my responses to be published",
|
||||
"title": "Community Survey 2025 Answer 00005",
|
||||
"tags": "[[Community Survey 2025]]"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"first-heard-survey": "Official newsletter",
|
||||
"other-survey-source": "",
|
||||
"are-you-a-dev": "Yes, I would",
|
||||
"first-used-tw": "2008",
|
||||
"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 read/lurk, but do not post",
|
||||
"use-discord": "I do not engage with this community",
|
||||
"use-github-discuss": "I read/lurk, but do not post",
|
||||
"published-plugin": "No",
|
||||
"main-use-cases": "Note-taking;Journalling;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": "Not publishing to this location",
|
||||
"value-of-tw": "I like that it can be very simple to use, but I have the option to \"go deep\" when needed. It's a local-first, single-file HTML document, which is a winning combination.",
|
||||
"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": "Git forge (GitHub, Gitea/Forgejo, GitLab)",
|
||||
"diy-backup-info": "",
|
||||
"wiki-setup-info": "TiddlyWiki Version: 5.3.6\nCurrent palette: $:/palettes/TranquilHarmony\nCurrent theme: $:/themes/tiddlywiki/snowwhite\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: 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: enable\nKeyboard shortcuts that have been customised: $:/config/shortcuts-mac/new-tiddler,$:/config/shortcuts/excise\nDisabled plugins: $:/plugins/EvidentlyCube/AutoComplete,$:/plugins/kookma/commander,$:/plugins/kookma/refnotes,$:/plugins/sq/quickimages,$:/plugins/tiddlywiki/bibtex\nPlugins: \n $:/core - 5.3.6\n $:/plugins/cdaven/markdown-export - 0.9.0\n $:/plugins/commons/file-uploads - 0.1.8\n $:/plugins/flibbles/relink - 2.5.0\n $:/plugins/kookma/shiraz - 2.6.9\n $:/plugins/sq/file-uploads-PUT - 0.1.2\n $:/plugins/telmiger/details - 0.7.6\n $:/plugins/TheDiveO/FontAwesome - 1.2.18\n $:/plugins/tiddlywiki/markdown - 5.3.6\n $:/plugins/tobibeer/random - 0.1.0\n $:/plugins/tobibeer/rate - 0.6.1\n $:/temp/info-plugin - \n $:/themes/odin/zacht - 0.1\n $:/themes/tiddlywiki/heavier - 5.3.6\n $:/themes/tiddlywiki/snowwhite - 5.3.6\n $:/themes/tiddlywiki/vanilla - 5.3.6",
|
||||
"tw-customisations": "",
|
||||
"positive-about-future": "Yes",
|
||||
"tw-future-confidence": "Yes",
|
||||
"project-decision-trust": "Yes",
|
||||
"project-strengths": "Consistent steady improvement with sensible introduction of new features.",
|
||||
"project-weaknesses": "Documentation. There is a lot of it, but much of it isn't helpful. For example, the notes about a feature dive directly into every possible scenario/option. Would prefer you pick a few common use cases and start there. Not easy, I know.",
|
||||
"ok-to-publish": "Yes, I am happy for my responses to be published",
|
||||
"title": "Community Survey 2025 Answer 00006",
|
||||
"tags": "[[Community Survey 2025]]"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,33 @@
|
||||
are-you-a-dev: No, I would not
|
||||
backup-method: TiddlySpot / TiddlyHost;Git forge (GitHub, Gitea/Forgejo, GitLab);Consumer online storage (e.g. Google Drive, Dropbox);Web or cloud hosting (other than TiddlyHost/TiddlySpot e.g. Netlify, AWS, OVH, Google Cloud...)
|
||||
diy-backup-info:
|
||||
first-heard-survey: Discord
|
||||
first-used-tw: 2015
|
||||
joined-tw-community: Yes
|
||||
main-use-cases: Note-taking;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games)
|
||||
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: user support/community, transparency in development
|
||||
project-weaknesses: maybe some prebuilt empty sample single file tiddlywiki files with simple instructions for different uses, journaling, different types of note taking, etc.
|
||||
publish-to-intranet: Yes, using a single-file wiki
|
||||
publish-to-web: Yes, using a single-file wiki
|
||||
published-plugin: No
|
||||
save-method: Single-file wiki through web browser with Download Saver (default saving mechanism)
|
||||
share-wikis: Yes, and I am the only editor/administrator of my wiki(s)
|
||||
started-tw-community: 2022
|
||||
tags: [[Community Survey 2025]]
|
||||
title: Community Survey 2025 Answer 00007
|
||||
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
|
||||
tw-customisations: yes, often.
|
||||
tw-future-confidence: Yes
|
||||
use-discord: I read and post in this community
|
||||
use-for-work-or-study: Not applicable (as retired, etc)
|
||||
use-github-discuss: I do not engage with this community
|
||||
use-mailing-list: I read/lurk, but do not post
|
||||
use-reddit: I read/lurk, but do not post
|
||||
use-ttw: I read and post in this community
|
||||
value-of-tw: because it's cross platform I can use it on any of my devices and can easily share single file with anyone without any worry they will be able to use it
|
||||
wiki-setup-info:
|
||||
@@ -0,0 +1,33 @@
|
||||
are-you-a-dev: Yes, I would
|
||||
backup-method: DIY (any other solution);No automatic sync across my devices
|
||||
diy-backup-info: Simple SFTP link, with manual tracking of the latest version (yes, I could do better, but it's quick and dirty)
|
||||
first-heard-survey: Official newsletter
|
||||
first-used-tw: 2024
|
||||
joined-tw-community: No
|
||||
main-use-cases: Note-taking;Journalling;As a knowledge base (including technical, non-fiction and encyclopaedic content);Worldbuilding (e.g. for role-playing games);Narrative fiction writing (either supporting its creation or directly writing in TiddlyWiki)
|
||||
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: You created TiddlyWiki
|
||||
project-weaknesses: No idea, not long enough in the community
|
||||
publish-to-intranet:
|
||||
publish-to-web:
|
||||
published-plugin: No
|
||||
save-method: Single-file wiki with custom saver (e.g. TiddlyPWA, Timimi, tw5-browser-nativesaver);Single-file wiki with TiddlyDesktop
|
||||
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 00008
|
||||
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
|
||||
tw-customisations:
|
||||
tw-future-confidence: Yes
|
||||
use-discord:
|
||||
use-for-work-or-study: No
|
||||
use-github-discuss:
|
||||
use-mailing-list:
|
||||
use-reddit:
|
||||
use-ttw:
|
||||
value-of-tw: General organized notepad and brainstorming tool
|
||||
wiki-setup-info:
|
||||