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

Compare commits

...

97 Commits

Author SHA1 Message Date
Jeremy Ruston
d5addd4ea5 Update 5.4.0 and 5.3.8 to use the new format 2025-09-12 15:05:45 +01:00
Jeremy Ruston
bc40bac10b Rationalise link badges in old release notes
Some of them were hardly used, and getting rid of them makes it easier to see what badges we need in the new system
2025-09-12 10:16:28 +01:00
Jeremy Ruston
0efbcd6b9b Fix procedure name 2025-09-11 16:30:35 +01:00
Jeremy Ruston
468e523bf3 A self-referential change note 2025-09-11 16:30:19 +01:00
Jeremy Ruston
34be67f853 Move the old release notes out of the way 2025-09-11 16:16:19 +01:00
Jeremy Ruston
f380aad0ea Initial Commit 2025-09-11 16:15:37 +01:00
Jeremy Ruston
3592a0be67 Merge branch 'tiddlywiki-com' 2025-09-09 21:15:51 +01:00
Jeremy Ruston
4dc89f6362 Community Cards (#9069)
* Initial Commit

* Oops

* Force CI build

* Introduce procedure for displaying teams

And some styling tweaks

* More styling tweaks

* Add a pill for vacant positions

* Reorganise table of contents

* Fix generic team icon

* Fix copy-paste error

* Add default icon for people

* Add newsletter team

* Project team icon

* New community tab for people

* Update succession team blurb

* Person cards should show team leaderships/memberships

* Add card for @Arlen22

* Add card for Motovun Jack

cc @saqimtiaz

* Remove erroneously committed file

* Preparing for v5.4.0

* Add final batch of survey responses

* Fix merge from master instead of tiddlywiki-com

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

* Update modified/created dates for docs tiddlers

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

added Frédéric Demers

* Signing the CLA

corrected handle to github's
2025-08-18 16:41:21 +01:00
Jeremy Ruston
38462d4464 Merge branch 'tiddlywiki-com' 2025-08-07 19:16:55 +01:00
Mario Pietsch
314ce12676 [DOCS] Update TiddlyWiki Archive (#9132) 2025-08-07 12:21:56 +01:00
Jeremy Ruston
b2656c82dd Preparing for v5.4.0 2025-08-07 09:33:55 +01:00
Jeremy Ruston
ae943f4906 Version number update for 5.3.8 2025-08-07 09:01:06 +01:00
Jeremy Ruston
9bdd475e60 Update readme and release note for v5.3.8 2025-08-07 09:00:32 +01:00
Jeremy Ruston
ac83b46102 Preparing for v5.3.8 2025-08-07 08:54:34 +01:00
Jeremy Ruston
e3ced3edcb More community survey responses 2025-08-07 08:46:56 +01:00
Jeremy Ruston
672211da15 Merge branch 'tiddlywiki-com' 2025-08-07 08:31:40 +01:00
Mario Pietsch
23a23d9cac [Docs] Fix Filter Step Railroad diagram (#9205) 2025-08-06 10:53:31 +01:00
Christian Byron
4080268887 Update cla-individual.md (#9223) 2025-08-05 11:27:34 +01:00
Jeremy Ruston
9617a6d6d8 Revert "Fix filter run syntax diagram"
This reverts commit 113eadf265.

Apologies @CrossEye I hadn't seen #9204
2025-07-31 10:49:33 +01:00
Jeremy Ruston
113eadf265 Fix filter run syntax diagram
Thank you @CrossEye
2025-07-31 10:16:10 +01:00
Jeremy Ruston
3597e6542d Docs: Update modified/created dates 2025-07-30 15:45:13 +01:00
Jeremy Ruston
a467ee0816 Docs: Update to filter syntax history 2025-07-30 14:52:13 +01:00
Jeremy Ruston
14760da6af Merge branch 'tiddlywiki-com' 2025-07-30 13:59:06 +01:00
Jeremy Ruston
29a567f0a8 Docs about the history of the filter syntax 2025-07-30 13:04:33 +01:00
Jeremy Ruston
482af2c5d9 Update link to Surveys site 2025-07-30 12:05:42 +01:00
Jeremy Ruston
953792aeae Community Survey Site Improvements (28 July 2025) (#9200)
* Fix Typo

* Group responses to multiple choice questions

* Additional responses

* Hide the responses to free text questions
2025-07-30 12:04:11 +01:00
Jeremy Ruston
047f8c7052 Merge branch 'tiddlywiki-com' 2025-07-30 11:20:50 +01:00
Jeremy Ruston
740018dc4c Tweak Community Surveys tiddler 2025-07-30 11:20:37 +01:00
Jeremy Ruston
82dbc4b14c Import community survey 2025 (#9189)
* Community Survey import specifier for xlsx plugin

* Community Survey 2025 improvements

* Survey results as of 25th July 2025

* New 2025 answer

* Save changes on the server for when we're importing on the command line

* Improve import specs

* Reimport answers with new schema

* Fix schema

* Fix responses

* Show response count

* Add count for each unique response

* Update responses
2025-07-28 10:59:10 +01:00
Jeremy Ruston
8ab4306b52 Update release note 2025-07-25 16:01:57 +01:00
Leilei332
dc3d38563c Fix name field of fa-IR language (#9166) 2025-07-25 15:21:42 +01:00
Leilei332
00aa6efb01 Replace link to normalize.css in acknowledgements with modern-normalize (#9158)
* Update & minify modern-normalize

* Do not minify css

* Update acknowledgements

* Update to v3.0.1

* Revert "Update to v3.0.1"

This reverts commit fe09398862.
2025-07-25 15:21:23 +01:00
Leilei332
0d6da12cba Flexoki palette update (#9175) 2025-07-25 15:20:38 +01:00
Leilei332
a785d1f4d2 Fixes for highlight plugin theme list (#9185) 2025-07-25 15:18:36 +01:00
Jeremy Ruston
7550226617 Fix Greek translation 2025-07-25 14:56:51 +01:00
Maurycy Zarzycki
2459abcfc1 PL Translations 2025-07-25 (#9184)
* Migrate EN i18n changes from commit: 65afdacdfe

* Migrate EN i18n changes from commit: 117e88e604

* Migrate EN i18n changes from commit: 5d0d2b1369

* Migrate EN i18n changes from commit: 7aad7fa3e6
2025-07-25 12:10:02 +01:00
Jeremy Ruston
32caeb69c3 Correctly revert #8721 2025-07-25 09:44:33 +01:00
Jeremy Ruston
07b1502259 Merge branch 'tiddlywiki-com' 2025-07-25 08:38:30 +01:00
Mario Pietsch
2a21ae5c10 Fix sidebar tools version for v5.3.8 (#9165) 2025-07-25 08:35:07 +01:00
Jeremy Ruston
9729e157cc Revert "Revert "list-tagged-draggable shows caption field if it is available …" (#9182)
This reverts commit 2d75d3ccb1.
2025-07-25 08:28:50 +01:00
Jeremy Ruston
e8a7bbf14e Update New Release Banner.png 2025-07-18 13:41:15 +01:00
Jeremy Ruston
4f0f139a26 Update release note 2025-07-18 10:51:13 +01:00
Jeremy Ruston
34889cf47b Update release note 2025-07-18 10:01:05 +01:00
Jeremy Ruston
2bd4c38ee3 Revert "Migrate some old macros to new syntax (#8768)" (#9160)
This reverts commit 2801eee905.
2025-07-18 09:59:30 +01:00
Jeremy Ruston
89030c4d4b Reapply "list-tagged-draggable shows caption field if it is available (#8721)" (#9156)
This reverts commit 2d75d3ccb1 and 6e7c63a72d.
2025-07-18 09:57:24 +01:00
Jeremy Ruston
6e7c63a72d Update release note 2025-07-17 14:17:30 +01:00
Jeremy Ruston
2d75d3ccb1 Revert "list-tagged-draggable shows caption field if it is available (#8721)" (#9156)
This reverts commit a1053ddc3d.
2025-07-17 14:11:27 +01:00
Jeremy Ruston
f22937053b Prepare for v5.3.8 2025-07-17 14:08:12 +01:00
Mario Pietsch
44a5d7f3dc [Docs] Tiny improvements for the ButtonWidget (#9151)
* [Docs] Tiny improvements for the ButtonWidget

* Update ButtonWidget.tid
2025-07-15 19:53:56 +01:00
superuser-does
3357da4d56 Signed Contributor Licence Agreement (#9143)
Backdated to 6 July to account for 771e963b0c
2025-07-14 17:41:18 +01:00
Leilei332
c91ef05e5b Fix PR size check path (#9149) 2025-07-14 14:37:25 +01:00
Jeremy Ruston
93d30f374d Enable wrapping on field names in tiddler info
The current setting makes it impossible to use the tiddler info panel with field names that are excessively long. Changing it should not have any impact on fields of ordinary length
2025-07-11 15:20:10 +01:00
Jeremy Ruston
4a97cf35d0 Merge branch 'tiddlywiki-com' 2025-07-11 11:58:08 +01:00
Jeremy Ruston
c625e3c946 Include v5.3.7 in the archive 2025-07-11 10:58:57 +01:00
Jeremy Ruston
3e98fa0558 Merge branch 'tiddlywiki-com' 2025-07-11 10:08:04 +01:00
Jeremy Ruston
709c4a1b3c Remove mis-paste 2025-07-11 09:20:06 +01:00
Jeremy Ruston
6e22d7eca5 Merge branch 'tiddlywiki-com' 2025-07-10 11:31:15 +01:00
Jeremy Ruston
67ba056832 Final fixups for v5.3.7
And documentation update to make sure I don't miss this again.
2025-07-10 11:31:00 +01:00
Bram Chen
10cf32177a Update chinese language files (#9133)
* Update chinese language files

* Add relevant chinese translation for System Information Panel

* Update chinese language files

* Fix typo

* * Fix typo again
2025-07-10 09:23:13 +01:00
Jeremy Ruston
b52e9d0b3e Merge branch 'tiddlywiki-com' 2025-07-08 13:24:30 +01:00
Jeremy Ruston
bdc0fe18fb Add badge for the community survey 2025-07-08 13:24:16 +01:00
Jeremy Ruston
962dbbfe16 Update new release checklist 2025-07-07 15:17:37 +01:00
Jeremy Ruston
ffb598280f Prepare for v5.4.0 prerelease 2025-07-07 12:06:02 +01:00
Jeremy Ruston
0f5aa3d194 Version number update for 5.3.7 2025-07-07 11:55:50 +01:00
Jeremy Ruston
a73e03c976 Preparing for releaase of v5.3.7 2025-07-07 11:55:02 +01:00
Jeremy Ruston
4f775bed74 Merge branch 'tiddlywiki-com' 2025-07-07 11:46:36 +01:00
Jeremy Ruston
71232fbea2 Add new release banner
Competition: https://talk.tiddlywiki.org/t/vote-for-the-banner-tiddlywiki-v5-3-7/12853
2025-07-07 10:29:19 +01:00
Jeremy Ruston
859603961e Fix wiki information dragger 2025-07-07 09:47:13 +01:00
Jeremy Ruston
771e963b0c Greek translation update 2025-07-06 18:34:07 +01:00
Jeremy Ruston
ebbe6cd625 Update release note 2025-07-06 18:21:51 +01:00
Jeremy Ruston
7aad7fa3e6 System Information Panel (#9099)
* Initial Commit

* Improve formatting of plugin listing

* Rename to "wiki information"

* Include a bunch more config settings

* Include plugin versions

* Include customised keyboard shortcuts

* Include listing of disabled plugins

* Add footer and link for dragging to other wikis

* Lingo tweaks
2025-07-06 17:13:47 +01:00
bobjoe12131
f8a912dfde Signing the CLA (#9124) 2025-07-04 16:36:15 +01:00
Leilei332
5380472b8f Update zh-Hans translation (#9125)
* Update zh-Hans translation

* Fix errors
2025-07-04 16:35:27 +01:00
Jeremy Ruston
f49f00b52b Introduce TiddlyWiki surveys (#9130)
* Initial Commit

* Fix build

* Add original announcement

* Add title and subtitle

* Fix question ordering bug

* Fix nesting bug
2025-07-04 13:28:01 +01:00
Markus Sauermann
163adeb376 Signing the CLA (#9106) 2025-06-22 12:23:51 +01:00
Jeremy Ruston
381388f9c4 Remove obsolete references to Gitter
No one uses it
2025-06-20 14:29:16 +01:00
670 changed files with 37329 additions and 944 deletions

View File

@@ -5,8 +5,8 @@ on:
paths:
- 'boot/**'
- 'core/**'
- 'themes/snowwhite/**'
- 'themes/vanilla/**'
- 'themes/tiddlywiki/snowwhite/**'
- 'themes/tiddlywiki/vanilla/**'
jobs:
calculate-build-size:

View File

@@ -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.4.0
fi
echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]"
@@ -159,6 +159,13 @@ node $TW5_BUILD_TIDDLYWIKI \
--rendertiddler $:/core/save/all-external-js tour.html text/plain \
|| exit 1
# /surveys.html surveys edition
node $TW5_BUILD_TIDDLYWIKI \
./editions/tiddlywiki-surveys \
--output $TW5_BUILD_OUTPUT \
--build index \
|| exit 1
# /share.html Custom edition for sharing via the URL
node $TW5_BUILD_TIDDLYWIKI \
./editions/share \

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,20 @@
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/
homepage: jermolene.com
email: jeremy@jermolene.com
avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAgICAgJCAkKCgkNDgwODRMREBARExwUFhQWFBwrGx8bGx8bKyYuJSMlLiZENS8vNUROQj5CTl9VVV93cXecnNEBCAgICAkICQoKCQ0ODA4NExEQEBETHBQWFBYUHCsbHxsbHxsrJi4lIyUuJkQ1Ly81RE5CPkJOX1VVX3dxd5yc0f/CABEIACAAIAMBIgACEQEDEQH/xAAtAAEBAAMAAAAAAAAAAAAAAAAHBgIEBQEBAQEBAAAAAAAAAAAAAAAAAgQBBf/aAAwDAQACEAMQAAAANF4uTuPRhD2nBLnUiJvKM0DtMKy//8QAKxAAAgIBAwMDAQkAAAAAAAAAAQIDBBEABRITITEiMkFxFEJRUmFicoGR/9oACAEBAAE/AInTA6gUGP4ZOQbW1bPsmyUq1q+gmvFPUzZPDkPamtwqU75ks04JakroVcg5RwRjg66NUx25KbzqJYyMngfqSuq0M3NZYIebJIvZozIvI/iNPcp/aalSdJXsS4VcKeIzlvU3jVTcYLNiaGISrjkhWQYDfQ63pYAzCDBsOiu7Dsx4EHH6r2w2ttimjd2IsNErhhJHKI04/uzqxuCxpBYVVWKSHqwMyMSQ33SB7dUJFmlkMYRgnqZgCMf7rf8AeEt3A9YOhjXAb2k8u7dtT1RZeOtXmYxiOPj4ZWY/lb51skqUNnNW/wBNzC7IpB6gQeeB/jq/fqGOaLbowuYn5MAQOw8LjW5Vmeo0qIsqYLLKjHIZmwv9fB1//8QAHxEAAQMEAwEAAAAAAAAAAAAAEQABAgMSIWExMkFR/9oACAECAQE/AD9iTy2lJmHUB8BVKM4SNSOj46a29saX/8QAHREAAgICAwEAAAAAAAAAAAAAAQIAAwQRITGBkf/aAAgBAwEBPwDHpFpJZtamVSiBWT2Yt7hmCDsb+TKtsKqpGg3M/9k=
I'm the original inventor of TiddlyWiki. You can hire me through my consultancy company [[Intertwingled Innovations|https://intertwingledinnovations.com]] or contact me directly.
Further information:
* A recording of the [[keynote I gave at QCon London in April 2024|https://www.infoq.com/presentations/bbc-micro/]], and the [[discussion on talk.tiddlywiki.org|https://talk.tiddlywiki.org/t/recording-of-jeremys-keynote-at-qcon-london-april-2024/10505]]. The talk mixes some nostalgia about my teenage activities with the BBC Micro with thoughts on the development of the software industry and insights gained from working with TiddlyWiki
* An [[interview with me in The Inquirer|https://web.archive.org/web/20111103225832/http://www.theinquirer.net/inquirer/feature/2105529/bt-software-engineer-tells-telco-source]] by Wendy Grossman
* A [[hilarious interview with me|https://www.youtube.com/watch?v=auyIhw8MTmQ]] from British television in 1983
* Here's a video of a presentation I did in 2007 called [["How to Start an Open Source Project"|http://vimeo.com/856110]].

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,14 @@
title: Infrastructure Team
tags: Community/Team
modified: 20250909171928024
created: 20250909171928024
team: @MotovunJack
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

View File

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

View File

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

View File

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

View File

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

View File

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

3
community/readme.md Normal file
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -252,3 +252,6 @@ ViewTemplateSubtitle/Caption: View Template Subtitle
ViewTemplateSubtitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the subtitle of a tiddler.
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.
WikiInformation/Caption: Wiki Information
WikiInformation/Hint: This page summarises high level information about the configuration of this ~TiddlyWiki. It is designed to enable users to quickly share relevant aspects of the configuration of their ~TiddlyWiki with others, for example when seeking help in one of the forums. No private or personal information is included, and nothing is shared without being explicitly copied and pasted elsewhere
WikiInformation/Drag/Caption: Drag this link to copy this tool to another wiki

View File

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

View File

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

122
core/ui/WikiInformation.tid Normal file
View File

@@ -0,0 +1,122 @@
title: $:/core/ui/ControlPanel/WikiInformation
tags: $:/tags/ControlPanel/Info
caption: <%if [[$:/language/ControlPanel/WikiInformation/Caption]is[shadow]] %>{{$:/language/ControlPanel/WikiInformation/Caption}}<%else%>Wiki Information<%endif%>
subtitle: <%if [[$:/language/ControlPanel/WikiInformation/Caption]is[shadow]] %>{{$:/language/ControlPanel/WikiInformation/Caption}}<%else%>Wiki Information<%endif%>
\procedure lingo-base() $:/language/ControlPanel/WikiInformation/
<!--
A custom implementation of the lingo macro that works even if this tiddler has been copied to an earlier version of TiddlyWiki that doesn't include the necessary lingo tiddlers in the core.
-->
\procedure intrinsic-lingo-Hint()
This page summarises high level information about the configuration of this ~TiddlyWiki. It is designed to enable users to quickly share relevant aspects of the configuration of their ~TiddlyWiki with others, for example when seeking help in one of the forums. No private or personal information is included, and nothing is shared without being explicitly copied and pasted elsewhere
\end intrinsic-lingo-Hint
\procedure intrinsic-lingo-Drag/Caption()
Drag this link to copy this tool to another wiki
\end intrinsic-lingo-Drag/Caption
\procedure lingo(title,mode:"inline")
<%if [<title>addprefix<lingo-base>is[shadow]] %>
<$transclude $tiddler={{{ [<title>addprefix<lingo-base>] }}} $mode=<<mode>>/>
<%else%>
<$transclude $variable={{{ [<title>addprefix[intrinsic-lingo-]] }}} $mode=<<mode>>/>
<%endif%>
\end lingo
\whitespace trim
\procedure capture-item(label,value)
<$action-setfield $tiddler=<<tempWikiInfo>> text={{{ [<tempWikiInfo>get[text]addsuffix<label>addsuffix[: ]addsuffix<value>addsuffix<crlf>] }}}/>
\end capture-item
\procedure capture-item-wikified(label,value)
<$wikify name="text" text=<<value>> mode="inline">
<$transclude
$variable="capture-item"
label=<<label>>
value=<<text>>
/>
</$wikify>
\end capture-item-wikified
\procedure capture-wiki-info(tempWikiInfo)
<$transclude $variable="capture-item-wikified" label="TiddlyWiki Version" value="<<version>>"/>
<$transclude $variable="capture-item" label="Current palette" value={{$:/palette}}/>
<$transclude $variable="capture-item" label="Current theme" value={{$:/theme}}/>
<$transclude $variable="capture-item" label="Current layout" value={{$:/layout}}/>
<$transclude $variable="capture-item" label="Browser language setting" value={{$:/info/browser/language}}/>
<$transclude $variable="capture-item" label="Default type for missing tiddlers" value={{$:/config/DefaultMissingType}}/>
<$transclude $variable="capture-item" label="Auto save setting" value={{$:/config/AutoSave}}/>
<$transclude $variable="capture-item" label="Code wrapping setting" value={{$:/themes/tiddlywiki/vanilla/options/codewrapping}}/>
<$transclude $variable="capture-item" label="Sticky titles setting" value={{$:/themes/tiddlywiki/vanilla/options/stickytitles}}/>
<$transclude $variable="capture-item" label="Sidebar layout setting" value={{$:/themes/tiddlywiki/vanilla/options/sidebarlayout}}/>
<$transclude $variable="capture-item" label="Auto focus field setting for new tiddlers" value={{$:/config/AutoFocus}}/>
<$transclude $variable="capture-item" label="Current storyview setting" value={{$:/view}}/>
<$transclude $variable="capture-item" label="Toolbar text setting" value={{$:/config/Toolbar/Text}}/>
<$transclude $variable="capture-item" label="Toolbar icon setting" value={{$:/config/Toolbar/Icons}}/>
<$transclude $variable="capture-item" label="Button class setting" value={{$:/config/Toolbar/ButtonClass}}/>
<$transclude $variable="capture-item" label="Navigation address bar setting" value={{$:/config/Navigation/UpdateAddressBar}}/>
<$transclude $variable="capture-item" label="Tiddler opening behaviour setting for navigations from outside the story river" value={{$:/config/Navigation/openLinkFromOutsideRiver}}/>
<$transclude $variable="capture-item" label="Tiddler opening behaviour setting for navigations from within the story river" value={{$:/config/Navigation/openLinkFromInsideRiver}}/>
<$transclude $variable="capture-item" label="CamelCase linking setting" value={{$:/config/WikiParserRules/Inline/wikilink}}/>
<$transclude $variable="capture-item" label="Keyboard shortcuts that have been customised" value={{{ [all[tiddlers]prefix[$:/config/shortcuts]] +[join[,]] }}}/>
<$transclude $variable="capture-item" label="Disabled plugins" value={{{ [all[tiddlers]prefix[$:/config/Plugins/Disabled/]] :filter[{!!text}match[yes]] :map[<currentTiddler>removeprefix[$:/config/Plugins/Disabled/]] +[join[,]] }}}/>
<$transclude $variable="capture-item" label="Plugins" value={{{ [has[plugin-type]sort[]] :filter[<currentTiddler>addprefix[$:/config/Plugins/Disabled/]get[text]else[no]!match[yes]] :map[{!!version}addprefix[ - ]addprefix<currentTiddler>] +[addprefix[ ]addprefix<crlf>join[]] }}}/>
\end capture-wiki-info
\procedure template-header()
<details><summary>Wiki Information</summary><pre><code>
\end template-header
\procedure template-footer()
</code></pre></details>
\end template-footer
\procedure display-wiki-info-modal()
<$let
tempWikiInfo="$:/temp/wiki-info"
crlf={{{ [charcode[13],[10]] }}}
>
<$action-sendmessage
$message="tm-modal"
$param="$:/core/ui/ControlPanel/WikiInformation"
isModal="yes"
tempWikiInfo=<<tempWikiInfo>>
/>
<$action-deletetiddler $tiddler=<<tempWikiInfo>>/>
<$action-setfield $tiddler=<<tempWikiInfo>> text=<<template-header>>/>
<$transclude
$variable="capture-wiki-info"
tempWikiInfo=<<tempWikiInfo>>
/>
<$action-setfield $tiddler=<<tempWikiInfo>> text={{{ [<tempWikiInfo>get[text]addsuffix<template-footer>] }}}/>
</$let>
\end display-wiki-info-modal
\procedure story-content()
<<lingo title:"Hint" mode:"block">>
<$button>
<<display-wiki-info-modal>>
Click to generate wiki information report
</$button>
<$link to="$:/core/ui/ControlPanel/WikiInformation">
<<lingo title:"Drag/Caption" mode:"inline">>
</$link>
\end story-content
\procedure modal-content()
<p>
<$transclude $variable="copy-to-clipboard" src={{{ [<tempWikiInfo>get[text]] }}}/>
</p>
<p>
<$edit-text tiddler=<<tempWikiInfo>> tag="textarea" disabled="yes" class="tc-max-width"/>
</p>
\end modal-content
<$transclude $variable={{{ [<isModal>match[yes]then[modal-content]else[story-content]] }}} $mode="block"/>

View File

@@ -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.4.0/index.html
caption: {{$:/language/OfficialPluginLibrary}}
{{$:/language/OfficialPluginLibrary/Hint}}

View File

@@ -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">
&#32;
<$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">
&#32;
<$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=""/>
&#32;
<$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>

View File

@@ -1,7 +1,7 @@
title: $:/core/macros/dumpvariables
tags: $:/tags/Macro
\procedure dumpvariables()
\define dumpvariables()
\whitespace trim
<ul>
<$list filter="[variables[]]" variable="varname">

View File

@@ -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__>>/>
&#32;
</$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>
&#32;
{{$:/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

View File

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

View File

@@ -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>
&#32;(<$transclude tiddler="""$title$""" mode="inline">
<$set name="currentTiddler" value="""$title$"""><$transclude tiddler="$:/language/MissingTiddler/Hint"/></$set>
</$transclude>)
</span>
<%endif%>
</$list>
\end

View File

@@ -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>&#32;<$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}}&#32;<$text text=<<chunk>>/>
{{$:/core/images/folder}}&#32;<$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}}&#32;<$text text=<<chunk>>/>
{{$:/core/images/folder}}&#32;<$text text=<<__chunk__>>/>
</$button>
</$reveal>
<span class="tc-tiny-gap-left">(<$count filter="[all[shadows+tiddlers]removeprefix<prefix>removeprefix<chunk>] -[<prefix>addsuffix<chunk>]"/>)</span>
&#32;
<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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
title: $:/config/LocalPluginLibrary
tags: $:/tags/PluginLibrary
url: http://127.0.0.1:8080/prerelease/library/v5.3.7/index.html
url: http://127.0.0.1:8080/prerelease/library/v5.4.0/index.html
caption: {{$:/language/OfficialPluginLibrary}} (Prerelease Local)
A locally installed version of the official ~TiddlyWiki plugin library at tiddlywiki.com for testing and debugging. //Requires a local web server to share the library//

View File

@@ -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.4.0/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.

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,57 @@
/***
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));
//}}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,406 @@
/*! 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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,73 @@
function stringifyList(value) {
if(Array.isArray(value)) {
var result = new Array(value.length);
for(var t=0, l=value.length; t<l; t++) {
var entry = value[t] || "";
if(entry.match(/[^\S\xA0]/mg)) {
result[t] = "[[" + entry + "]]";
} else {
result[t] = entry;
}
}
return result.join(" ");
} else {
return value || "";
}
};
const tiddlers=[];
const questions = [];
const siteIconByUsername = {};
for(const child of document.querySelector("#tiddlerDisplay").childNodes) {
const titlePrefix = "2010 - ";
const title = child.getAttribute("tiddler");
if(title !== "HelloThere") {
questions.push(titlePrefix + title);
const childTitles = [];
const children = title === "What do you think of the name TiddlyWiki and the term \"tiddler\"?" ? child.querySelectorAll("div.content > div.viewer > div.resultsArea > ul > li") : child.querySelectorAll("div.resultsArea > ul > li");
for(const answer of children) {
const siteIconName = answer.querySelector(".siteIcon img").src.split("/").pop();
const username = answer.innerText.split("\n\n")[0].split(" ")[1];
const answerDate = new Date(answer.innerText.split("\n\n")[0].split(" on ")[1]);
const answerHTML = answer.querySelector("blockquote").innerHTML;
const childTitle = titlePrefix + title + " - " + username + " - " + answerDate.toISOString();
// console.log(`${username} has site icon ${siteIconName}`);
siteIconByUsername[username] = siteIconName;
childTitles.push(childTitle);
tiddlers.push({
title: childTitle,
text: answerHTML,
icon: `$:/avatars/${username}`,
modifier: username,
modified: answerDate.toISOString().slice(0, 10).replace(/-/g, '') + "000000000",
tags: stringifyList([titlePrefix + title,"2010 - Interview Answer"])
});
}
tiddlers.push({
title: titlePrefix + title,
list: stringifyList(childTitles.reverse()),
tags: "[[2010 - Interview Question]]"
});
}
}
tiddlers.push({
title: "2010 - Interview Question",
list: stringifyList(questions)
})
copy(JSON.stringify(tiddlers,null,4));
const commands = [
"mkdir -p ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/"
];
for(const username in siteIconByUsername) {
commands.push(`cp './editions/tiddlywiki-surveys/great-interview-project-2010/The great TiddlyWiki interview project_files/${siteIconByUsername[username]}' './editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/${username}.jpg'`);
const metafile = `title: $:/avatars/${username}
type: image/jpeg
tags: $:/tags/Avatar
modifier: ${username}
`;
commands.push(`echo "${metafile}" > './editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images/${username}.jpg.meta'`);
}
console.log(commands.join(" && "));

View File

@@ -0,0 +1,12 @@
#!/bin/bash
# Load the Great Interview Project JSON data into TiddlyWiki and then save it to the specified folder as .tid files
rm -rf ./tmp/2010-great-interview-project
node ./tiddlywiki.js --load ./tmp/2010-great-interview-project.json --savewikifolder ./tmp/2010-great-interview-project
# Copy the tiddlers into this wiki
rm -rf ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project
mkdir ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project
mkdir ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text
mkdir ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/images
cp ./tmp/2010-great-interview-project/tiddlers/2010* ./editions/tiddlywiki-surveys/tiddlers/2010-great-interview-project/text

View File

@@ -0,0 +1,16 @@
# Utility Scripts
This folder contains tools used to extract the tiddlers from the original HTML file.
All pathnames in these instructions are relative to the root of this repository.
1. Load `./editions/tiddlywiki-surveys/great-interview-project-2010/The great TiddlyWiki interview project.htm` in a browser
2. Open the developer console and paste the script from `./editions/tiddlywiki-surveys/scripts/extract-text-tiddlers-via-console.js`. The JSON representation of the text tiddlers will be generated and copied to the clipboard
3. Paste the resulting JSON into `2010-great-interview-project.json` in the `./tmp` folder in the root of this repository
4. Open a terminal console in the root of this repository
5. Run the script `./editions/tiddlywiki-surveys/scripts/import-great-interview-project-json.sh`
6. Go back to the developer console and copy the text that was output by the previous line. This is quite tricky: it's a big block of text including newlines. It is easiest to scroll back up to find the line starting with `mkdir -p` and then select down to the bottom
7. Paste the results of the previous into the terminal
8. Build the wiki with `node ./tiddlywiki.js ./editions/tiddlywiki-surveys --build index`
The resulting wiki will be found in `./editions/tiddlywiki-surveys/output/index.html`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1,5 @@
title: $:/avatars/aamaadmitw5
type: image/jpeg
tags: $:/tags/Avatar
modifier: aamaadmitw5

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

View File

@@ -0,0 +1,5 @@
title: $:/avatars/alexhough
type: image/jpeg
tags: $:/tags/Avatar
modifier: alexhough

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,5 @@
title: $:/avatars/amalfaro-wrk
type: image/jpeg
tags: $:/tags/Avatar
modifier: amalfaro-wrk

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1,5 @@
title: $:/avatars/andrewbarbour
type: image/jpeg
tags: $:/tags/Avatar
modifier: andrewbarbour

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1,5 @@
title: $:/avatars/calmo
type: image/jpeg
tags: $:/tags/Avatar
modifier: calmo

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