mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2026-01-22 10:54:46 +00:00
Compare commits
647 Commits
v5.0.9-bet
...
v5.0.14-be
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
932d3950c8 | ||
|
|
554f235305 | ||
|
|
bf748eafec | ||
|
|
65014a8d6c | ||
|
|
65b2852c7f | ||
|
|
b2e1dd2138 | ||
|
|
57878631e4 | ||
|
|
1c44ea8941 | ||
|
|
c38d682d7d | ||
|
|
7a18417d81 | ||
|
|
d7aeb7e932 | ||
|
|
be8c753f28 | ||
|
|
1892f33ae6 | ||
|
|
af70f7be6b | ||
|
|
961089f266 | ||
|
|
2bf5398eaa | ||
|
|
69de66ef80 | ||
|
|
e74a598aeb | ||
|
|
f6d7d87a3d | ||
|
|
ba0accf4f5 | ||
|
|
c590f9de8b | ||
|
|
2ff2092615 | ||
|
|
5e06ef871a | ||
|
|
76914c4045 | ||
|
|
bcf89d533d | ||
|
|
cc4552f544 | ||
|
|
878689f92e | ||
|
|
2526bfb078 | ||
|
|
f8548cc8f2 | ||
|
|
9c8564d5b0 | ||
|
|
d7390dbbe1 | ||
|
|
bd92dc3692 | ||
|
|
d01efe8698 | ||
|
|
b64b1ab9cc | ||
|
|
38431507d2 | ||
|
|
3d7e43fa7a | ||
|
|
7cd13f7163 | ||
|
|
737b6adc7d | ||
|
|
5260899d8b | ||
|
|
7528f3d3cd | ||
|
|
3842657392 | ||
|
|
017ba740e5 | ||
|
|
2c4e9a64e9 | ||
|
|
c5b941dc1a | ||
|
|
e38f924eb5 | ||
|
|
7953b95d13 | ||
|
|
08f775eac8 | ||
|
|
ec3827e5a4 | ||
|
|
edc14f44d2 | ||
|
|
86bf754933 | ||
|
|
826b0f58f0 | ||
|
|
7d87d73b0b | ||
|
|
c3a1af8649 | ||
|
|
3529625a6c | ||
|
|
bf9a87dc0e | ||
|
|
f7287718a7 | ||
|
|
14fd8282dc | ||
|
|
5782bbf21f | ||
|
|
83bae92a29 | ||
|
|
a0266bdb2a | ||
|
|
8779936182 | ||
|
|
33b4851d0f | ||
|
|
1573f5840e | ||
|
|
1a9bd683e4 | ||
|
|
19028fee0a | ||
|
|
fead253e9c | ||
|
|
87c899d842 | ||
|
|
73e65d8590 | ||
|
|
2a6caa42fc | ||
|
|
f09ba1114b | ||
|
|
0f79dfea17 | ||
|
|
d5625ceaab | ||
|
|
3b612fe758 | ||
|
|
17f78ae9c1 | ||
|
|
c8bba8caea | ||
|
|
1d8e3ef288 | ||
|
|
9b9f7d32a0 | ||
|
|
748e4ccddc | ||
|
|
1cc85fa3cb | ||
|
|
bf39a45fc0 | ||
|
|
bdd33be001 | ||
|
|
7816c1d944 | ||
|
|
120203a8e0 | ||
|
|
7316795238 | ||
|
|
0d9acad12a | ||
|
|
dee4836ded | ||
|
|
5291f33c84 | ||
|
|
9774c763b1 | ||
|
|
b8fba1fcb9 | ||
|
|
ae469c3f87 | ||
|
|
c23f6af4b5 | ||
|
|
6a2f1be9d7 | ||
|
|
d357e1706c | ||
|
|
52bbd6d583 | ||
|
|
799a5b059a | ||
|
|
6d06a54530 | ||
|
|
17ec15750e | ||
|
|
688760c4b3 | ||
|
|
e98d3f86c2 | ||
|
|
099919f61e | ||
|
|
1bd4ab945d | ||
|
|
0d8b82ce37 | ||
|
|
a54476fd55 | ||
|
|
a6da7bfe6a | ||
|
|
50b73c5264 | ||
|
|
3ff66c9fef | ||
|
|
a61169e7e8 | ||
|
|
789ba1e85d | ||
|
|
8adcfc97c5 | ||
|
|
2d43003841 | ||
|
|
3732f7b564 | ||
|
|
258c97d4b0 | ||
|
|
f589e56692 | ||
|
|
1ba5d17613 | ||
|
|
18f1634802 | ||
|
|
c4c4c3d270 | ||
|
|
ac4a104bac | ||
|
|
2a88ff9add | ||
|
|
56945d91d3 | ||
|
|
a45690a876 | ||
|
|
121835a697 | ||
|
|
1e30da2c6a | ||
|
|
73d7e85e11 | ||
|
|
74bf2a053d | ||
|
|
ec2020e888 | ||
|
|
0db4d93c21 | ||
|
|
0534270194 | ||
|
|
d7767b1f1f | ||
|
|
aea06f7df4 | ||
|
|
8e91bdeca9 | ||
|
|
f4b834aa2a | ||
|
|
6af6a77c3c | ||
|
|
74038c0687 | ||
|
|
e689e904ac | ||
|
|
458071a2f1 | ||
|
|
8faf839bdd | ||
|
|
2380392f35 | ||
|
|
7e7a0a18b9 | ||
|
|
e5e503fe17 | ||
|
|
4de1a1adbe | ||
|
|
0d5380d4a6 | ||
|
|
4bb8c4e8a7 | ||
|
|
758762eee3 | ||
|
|
f1589e707f | ||
|
|
30f60c400e | ||
|
|
46ae9bd34e | ||
|
|
4be5c28ed4 | ||
|
|
536c697c9f | ||
|
|
cb0eba73c2 | ||
|
|
5f018c2092 | ||
|
|
ad4db0de97 | ||
|
|
4fd111e8ea | ||
|
|
497d9812c8 | ||
|
|
1d81d52f52 | ||
|
|
0485e3fa02 | ||
|
|
6800e1d3e2 | ||
|
|
71ae63e24f | ||
|
|
40b4259e86 | ||
|
|
be040ea8a2 | ||
|
|
40368062e3 | ||
|
|
d6cafa9da1 | ||
|
|
3d5f68f7a8 | ||
|
|
7d435cf850 | ||
|
|
8600445100 | ||
|
|
7c7671e4ca | ||
|
|
33a070c5b1 | ||
|
|
69af30bf0d | ||
|
|
6de453d796 | ||
|
|
bb47f1dbad | ||
|
|
95f6c92192 | ||
|
|
c73853288c | ||
|
|
0c34459d75 | ||
|
|
8888993ba3 | ||
|
|
7aa6c7c06d | ||
|
|
218ce09605 | ||
|
|
9d69c38611 | ||
|
|
1f16ef6fa8 | ||
|
|
eecb9126cd | ||
|
|
2a887a5bac | ||
|
|
22468990a2 | ||
|
|
99eb556645 | ||
|
|
6298ffc516 | ||
|
|
9424001054 | ||
|
|
fd82112700 | ||
|
|
7916553b99 | ||
|
|
85952e6f59 | ||
|
|
40d44ba4e5 | ||
|
|
b3bbdfbfd8 | ||
|
|
4f3ee7e7ca | ||
|
|
507cda234e | ||
|
|
3d8626dafa | ||
|
|
80e5c65681 | ||
|
|
ad57272324 | ||
|
|
e54b94a744 | ||
|
|
84b2a48544 | ||
|
|
da3f955aa4 | ||
|
|
ef67cc3fd9 | ||
|
|
67faf3fe5d | ||
|
|
89e2859007 | ||
|
|
b4d47858e5 | ||
|
|
9ddff6d8c0 | ||
|
|
beabae8d2b | ||
|
|
1a9f34203c | ||
|
|
7e8aedd865 | ||
|
|
e3dc00573d | ||
|
|
1657b82a16 | ||
|
|
d85bc46ca4 | ||
|
|
1bef4b8d8d | ||
|
|
0cf63ab9f0 | ||
|
|
608999a97a | ||
|
|
8612bc4006 | ||
|
|
310e119bb4 | ||
|
|
2322be3f41 | ||
|
|
f793816dfa | ||
|
|
ed0bf7aed1 | ||
|
|
f8296bdf6c | ||
|
|
89989c737e | ||
|
|
0a716ca0ef | ||
|
|
b440e67f68 | ||
|
|
7a034560d1 | ||
|
|
cee81ed44b | ||
|
|
eda09ba1c4 | ||
|
|
cfc326a827 | ||
|
|
6b457ee499 | ||
|
|
e40a0c07b8 | ||
|
|
85f37a7d35 | ||
|
|
a58e1d01ca | ||
|
|
7e7c9592be | ||
|
|
32ea939809 | ||
|
|
98bf08d155 | ||
|
|
1b6a593b71 | ||
|
|
9d5e112922 | ||
|
|
cf273129ef | ||
|
|
4a810f209f | ||
|
|
ac21faed3e | ||
|
|
3233a10c34 | ||
|
|
85d9f38ed8 | ||
|
|
58cd874f22 | ||
|
|
4d948c575f | ||
|
|
c92a21ff14 | ||
|
|
bc87fac600 | ||
|
|
7f721ffece | ||
|
|
c0edca78c8 | ||
|
|
07f13b310d | ||
|
|
5a23c883e2 | ||
|
|
7998686cb3 | ||
|
|
5891a61bfc | ||
|
|
1f6e16318a | ||
|
|
f08f57c5d2 | ||
|
|
4743d0a863 | ||
|
|
b9bf1ff574 | ||
|
|
9de679b84b | ||
|
|
0f78c4afbf | ||
|
|
786bfc6e24 | ||
|
|
d5e4b9b5d1 | ||
|
|
73cf1bfdb3 | ||
|
|
73dcc577e5 | ||
|
|
91acad0f7c | ||
|
|
811df7bbf0 | ||
|
|
4292d09651 | ||
|
|
21c137a66c | ||
|
|
241d19bef8 | ||
|
|
5b5fb18161 | ||
|
|
529345f08b | ||
|
|
3351ae7e29 | ||
|
|
465f4ac469 | ||
|
|
c9d4714e98 | ||
|
|
856110374f | ||
|
|
3ff7462afd | ||
|
|
a3de93b4eb | ||
|
|
e18d8a8866 | ||
|
|
f43cd5ba9c | ||
|
|
367b14f70d | ||
|
|
d93da81671 | ||
|
|
1735970ffd | ||
|
|
4936be5b86 | ||
|
|
35055509c2 | ||
|
|
791471c4f4 | ||
|
|
5b3b62f93d | ||
|
|
e018d8e0ef | ||
|
|
0cca9092ef | ||
|
|
b594eb5b36 | ||
|
|
917c4404e5 | ||
|
|
6f3e31abe5 | ||
|
|
5962600cb6 | ||
|
|
cf3f11a4c0 | ||
|
|
bcf37c765f | ||
|
|
248029b53a | ||
|
|
57c534b97d | ||
|
|
6d1eaeb0fc | ||
|
|
680fe41ed7 | ||
|
|
32a1da7673 | ||
|
|
8d78336e9b | ||
|
|
9987e6de22 | ||
|
|
38530f14f2 | ||
|
|
0fae9ee992 | ||
|
|
12b5ebb946 | ||
|
|
5120a1b32b | ||
|
|
9a2d650868 | ||
|
|
ad74877dad | ||
|
|
b77ad3061d | ||
|
|
31b1e073a6 | ||
|
|
5d88f19ec6 | ||
|
|
133c24e9c7 | ||
|
|
f15eba66fe | ||
|
|
911a64221a | ||
|
|
424c0737a2 | ||
|
|
0b38cd640c | ||
|
|
32099b85d3 | ||
|
|
71aa2bbe5f | ||
|
|
fb5c44a875 | ||
|
|
f12d7bb6c0 | ||
|
|
665e490d33 | ||
|
|
76f637d57a | ||
|
|
2ccc13b936 | ||
|
|
0206358a1c | ||
|
|
f3a466ee86 | ||
|
|
0c48502e8e | ||
|
|
19061650de | ||
|
|
c2b08b43b5 | ||
|
|
a2ec4c55e3 | ||
|
|
5eae2f0fb6 | ||
|
|
b8aedf2ca3 | ||
|
|
2d24d05f61 | ||
|
|
44cb3bc100 | ||
|
|
0cf4e5514c | ||
|
|
1717c93d00 | ||
|
|
0bdc5b5c70 | ||
|
|
1945af0b2d | ||
|
|
e6b783154f | ||
|
|
d2d0b09235 | ||
|
|
e28c2e8b06 | ||
|
|
2e2d30bae9 | ||
|
|
a9b7df96c2 | ||
|
|
b2e48d00e9 | ||
|
|
9147cadd3c | ||
|
|
4951a53063 | ||
|
|
36556b817f | ||
|
|
8bd19c4e6a | ||
|
|
34e4166dc5 | ||
|
|
617963bd88 | ||
|
|
346b2f8611 | ||
|
|
6f859c8d44 | ||
|
|
325a93f3c3 | ||
|
|
06b0f9adb7 | ||
|
|
401349a1d6 | ||
|
|
bc9b67cbc3 | ||
|
|
6fb992690d | ||
|
|
57f3eb0b2c | ||
|
|
bf2f88ba8b | ||
|
|
00d041b778 | ||
|
|
eeedcb6d94 | ||
|
|
b4ddaccd1d | ||
|
|
d83c26fe3b | ||
|
|
1c484f59bd | ||
|
|
149ca0fc63 | ||
|
|
f467ae288b | ||
|
|
457764077b | ||
|
|
892900c9c5 | ||
|
|
d880cb135a | ||
|
|
a858329742 | ||
|
|
e44450edc4 | ||
|
|
f09d69d1b7 | ||
|
|
eee3a0cf8e | ||
|
|
4238af2a40 | ||
|
|
f54f0d1c3e | ||
|
|
ca34cc437c | ||
|
|
71c886e3a1 | ||
|
|
db147e3673 | ||
|
|
525613750b | ||
|
|
f751e2ecb4 | ||
|
|
ea5989048c | ||
|
|
eec849c69e | ||
|
|
666f243a82 | ||
|
|
4e5fa2c6e6 | ||
|
|
9ab0c84140 | ||
|
|
9261bdaa43 | ||
|
|
0e09fbf46a | ||
|
|
9547a1f01c | ||
|
|
0e4afc3986 | ||
|
|
10fa72d15e | ||
|
|
f131c37893 | ||
|
|
d2796d0c9c | ||
|
|
460f476aef | ||
|
|
2989c9b133 | ||
|
|
3105afe6e8 | ||
|
|
a03a15e7de | ||
|
|
305617b632 | ||
|
|
b446ef5d4e | ||
|
|
8dd30e97ac | ||
|
|
fc6d96672d | ||
|
|
78791192c3 | ||
|
|
9b576f2a8d | ||
|
|
08ed0017af | ||
|
|
450c646c31 | ||
|
|
0c6c5002c1 | ||
|
|
9b3b08a176 | ||
|
|
6386bf84a5 | ||
|
|
c3dfa3f27e | ||
|
|
50223562ea | ||
|
|
85c7da95bb | ||
|
|
c8e98c1567 | ||
|
|
13463a47c5 | ||
|
|
ffd9df670d | ||
|
|
d2edd9291e | ||
|
|
247eb04b11 | ||
|
|
954946352a | ||
|
|
0ccaedd7d2 | ||
|
|
3182a2d599 | ||
|
|
f999b2e931 | ||
|
|
4d70d5780e | ||
|
|
a330cb543e | ||
|
|
64a6544b02 | ||
|
|
3f25db0abe | ||
|
|
412cde6f53 | ||
|
|
f7b8813a27 | ||
|
|
62c602e9d2 | ||
|
|
d8a142fed5 | ||
|
|
1b37d660ea | ||
|
|
da273be054 | ||
|
|
a463859a28 | ||
|
|
9aaa000d3f | ||
|
|
f14ecf4eb8 | ||
|
|
128ad01866 | ||
|
|
ecbda326cb | ||
|
|
e24600f9bb | ||
|
|
6436dc22a7 | ||
|
|
f44f2b33ed | ||
|
|
86d182fd51 | ||
|
|
3fa4b00ede | ||
|
|
d30cb0f11d | ||
|
|
906d2db57e | ||
|
|
3e6de03f15 | ||
|
|
aaec1b2854 | ||
|
|
9edebc78e7 | ||
|
|
e228ac42db | ||
|
|
be0bc04929 | ||
|
|
b415b0e90e | ||
|
|
974aecba1f | ||
|
|
47fa18c2e0 | ||
|
|
d5094463f4 | ||
|
|
5951dc5901 | ||
|
|
1d15e4b7d3 | ||
|
|
67e66b4698 | ||
|
|
c00940f2d1 | ||
|
|
81ea326e16 | ||
|
|
c2f52f8a4b | ||
|
|
ca03984663 | ||
|
|
b2ff248d07 | ||
|
|
658bd2b8a3 | ||
|
|
a8b16c9c07 | ||
|
|
157ca0c8aa | ||
|
|
01b3962b2c | ||
|
|
19646c7f95 | ||
|
|
dfb8a07204 | ||
|
|
93566cdc33 | ||
|
|
ad8a20bfed | ||
|
|
00cddd3713 | ||
|
|
23c8902e70 | ||
|
|
818fd598dc | ||
|
|
31e1088aa7 | ||
|
|
f9f8ad725b | ||
|
|
81e1af1d35 | ||
|
|
c9c1b0fbb4 | ||
|
|
f7ce0c0b8d | ||
|
|
92aa1f24be | ||
|
|
e0a6c4e879 | ||
|
|
f72c177ba5 | ||
|
|
9a26c4259a | ||
|
|
6de6a43623 | ||
|
|
2fa3c8a4ed | ||
|
|
295094c9a3 | ||
|
|
da41879fc1 | ||
|
|
f8708874bc | ||
|
|
ad43958571 | ||
|
|
4e07b3335b | ||
|
|
b77d5f9725 | ||
|
|
75fee26b58 | ||
|
|
e8c9d78079 | ||
|
|
d972988a53 | ||
|
|
e83759e86d | ||
|
|
2633247492 | ||
|
|
b3032d452f | ||
|
|
e60fc9f81f | ||
|
|
6ab68e0fca | ||
|
|
e548dd35af | ||
|
|
8b20143b1b | ||
|
|
711b76307c | ||
|
|
b858e9dc69 | ||
|
|
a9411262f7 | ||
|
|
e676156b24 | ||
|
|
c592e658e7 | ||
|
|
6b03789e06 | ||
|
|
51f54b06f9 | ||
|
|
285ab41ccf | ||
|
|
854b739a35 | ||
|
|
abe0ce28b9 | ||
|
|
76e8640c31 | ||
|
|
cc3d44aec1 | ||
|
|
7b6cff0cca | ||
|
|
d1c85f53c0 | ||
|
|
e2b0da0b58 | ||
|
|
7c8c5cf745 | ||
|
|
38c60bd7d4 | ||
|
|
afb92c40fe | ||
|
|
6b45296ca9 | ||
|
|
b84c663215 | ||
|
|
4e101e240c | ||
|
|
56251dc1f8 | ||
|
|
f368175cb0 | ||
|
|
3e49dd65a0 | ||
|
|
f5ada72dac | ||
|
|
986a20b22b | ||
|
|
ffb6c8ab81 | ||
|
|
e58e68fa7c | ||
|
|
95def8b857 | ||
|
|
b24ec8009d | ||
|
|
9965c64b6f | ||
|
|
2a50277219 | ||
|
|
3cce12e13f | ||
|
|
887e9d978b | ||
|
|
a0022a1cd6 | ||
|
|
519e1b4a44 | ||
|
|
b9dec37fb7 | ||
|
|
09156af475 | ||
|
|
5b5621a600 | ||
|
|
78ba57d55d | ||
|
|
749582ede0 | ||
|
|
1c82348edb | ||
|
|
b96aade28a | ||
|
|
2f32621024 | ||
|
|
6ccf02ed96 | ||
|
|
b2c1331c11 | ||
|
|
f81df69395 | ||
|
|
a5e9ef9b5f | ||
|
|
7783378603 | ||
|
|
327b53a641 | ||
|
|
cb914ae853 | ||
|
|
a4294b55f0 | ||
|
|
bced7124e4 | ||
|
|
f5848c395a | ||
|
|
f6bd3b8c37 | ||
|
|
21b2d6fdc7 | ||
|
|
bd3e955821 | ||
|
|
fcb26419a6 | ||
|
|
a6f7da6c1c | ||
|
|
f82f8ae7c6 | ||
|
|
edb8c65d54 | ||
|
|
031c0f4146 | ||
|
|
e8316cf0ac | ||
|
|
0ac4c2b554 | ||
|
|
84cd296c58 | ||
|
|
a90339d1e5 | ||
|
|
d49495ab73 | ||
|
|
5fa6d001f8 | ||
|
|
f17dafefcb | ||
|
|
88314d968a | ||
|
|
28bab707b9 | ||
|
|
075cf544e4 | ||
|
|
a505b6ffc0 | ||
|
|
23a71b433e | ||
|
|
3bbe53a58e | ||
|
|
8556e0ea49 | ||
|
|
3be21853e1 | ||
|
|
d0636f2124 | ||
|
|
5226c7a2fa | ||
|
|
3a78465d2d | ||
|
|
23640d7af4 | ||
|
|
540681b2bc | ||
|
|
8611867930 | ||
|
|
77152ac577 | ||
|
|
f5bd99fa73 | ||
|
|
385c7e207c | ||
|
|
61c204366f | ||
|
|
570cad1c7f | ||
|
|
1d0dc60a2d | ||
|
|
fac0affa7b | ||
|
|
f57241abbd | ||
|
|
e9557b578e | ||
|
|
649f68288a | ||
|
|
37c50bae61 | ||
|
|
9ab31e37ea | ||
|
|
30707e2f19 | ||
|
|
1fb76ae56d | ||
|
|
4008191459 | ||
|
|
463bd0517c | ||
|
|
fb3a31ae43 | ||
|
|
f7e50e0950 | ||
|
|
552657fc58 | ||
|
|
d727046948 | ||
|
|
f6ca7d92e5 | ||
|
|
148e77b0e4 | ||
|
|
cc60ad1428 | ||
|
|
fecf3a556f | ||
|
|
39ef0ad88f | ||
|
|
f75826224b | ||
|
|
52f28a1cc3 | ||
|
|
61c3f8a5ba | ||
|
|
13da54b9bd | ||
|
|
680414d1c5 | ||
|
|
2c7d5c5964 | ||
|
|
3d69c929d9 | ||
|
|
8cbcfee346 | ||
|
|
43173c801f | ||
|
|
523faf71fb | ||
|
|
ad2bbb2c93 | ||
|
|
8756d25d78 | ||
|
|
8a27c2759b | ||
|
|
beddcd7138 | ||
|
|
2db90378a2 | ||
|
|
7684891285 | ||
|
|
821f1f1428 | ||
|
|
4538f081ee | ||
|
|
b4122be50c | ||
|
|
cd76514105 | ||
|
|
ba576d9f1b | ||
|
|
15d0c27e2a | ||
|
|
869cec1ccc | ||
|
|
d6054f1039 | ||
|
|
9fbe72a877 | ||
|
|
89165fc51d | ||
|
|
4758874d13 | ||
|
|
0153fd2a30 | ||
|
|
bb42c0ab36 | ||
|
|
95d291daac | ||
|
|
45b0966013 | ||
|
|
de07da3797 | ||
|
|
aebc1ea943 | ||
|
|
73cfd10218 | ||
|
|
d336ffea02 | ||
|
|
6da28e7365 | ||
|
|
d08a2d109f | ||
|
|
f57e047877 | ||
|
|
df5fe10a40 | ||
|
|
433ac8e96e | ||
|
|
ad4b03506a | ||
|
|
ace57dd205 | ||
|
|
bd4a031df8 | ||
|
|
6db94052c7 | ||
|
|
dd8797223a | ||
|
|
e54b0d7129 | ||
|
|
07ab8c75b8 | ||
|
|
5bcc666f34 | ||
|
|
6bef1d6b30 | ||
|
|
09cf788063 | ||
|
|
4d0b08d464 | ||
|
|
5447420832 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
.DS_Store
|
||||
tmp/
|
||||
output/
|
||||
|
||||
16
2bld.cmd
16
2bld.cmd
@@ -2,22 +2,13 @@
|
||||
|
||||
rem build TiddlyWiki 2.x
|
||||
|
||||
rem create a temporary directory if it doesn't already exist
|
||||
setlocal enableextensions
|
||||
mkdir tmp\tw2
|
||||
setlocal disableextensions
|
||||
|
||||
rem Delete any existing content
|
||||
|
||||
del /q /s tmp\tw2
|
||||
echo.
|
||||
|
||||
rem Prepare the readme file from the revelant content in the tw5.com wiki
|
||||
|
||||
node .\tiddlywiki.js ^
|
||||
editions\tw5.com ^
|
||||
--verbose ^
|
||||
--rendertiddler TiddlyWiki2ReadMe editions\tw2\readme.md text/html ^
|
||||
--output editions\tw2 ^
|
||||
--rendertiddler TiddlyWiki2ReadMe readme.md text/html ^
|
||||
|| exit 1
|
||||
|
||||
rem cook the TiddlyWiki 2.x.x index file
|
||||
@@ -25,8 +16,9 @@ rem cook the TiddlyWiki 2.x.x index file
|
||||
node .\tiddlywiki.js ^
|
||||
editions\tw2 ^
|
||||
--verbose ^
|
||||
--output tmp\tw2 ^
|
||||
--load editions\tw2\source\tiddlywiki.com\index.html.recipe ^
|
||||
--rendertiddler $:/core/templates/tiddlywiki2.template.html .\tmp\tw2\index.html text/plain ^
|
||||
--rendertiddler $:/core/templates/tiddlywiki2.template.html index.html text/plain ^
|
||||
|| exit 1
|
||||
|
||||
fc tmp\tw2\index.html editions\tw2\target\prebuilt.html
|
||||
|
||||
10
2bld.sh
10
2bld.sh
@@ -2,16 +2,13 @@
|
||||
|
||||
# build TiddlyWiki 2.x
|
||||
|
||||
# create a temporary directory if it doesn't already exist
|
||||
mkdir -p tmp
|
||||
mkdir -p tmp/tw2
|
||||
|
||||
# Prepare the readme file from the revelant content in the tw5.com wiki
|
||||
|
||||
node ./tiddlywiki.js \
|
||||
editions/tw5.com \
|
||||
--verbose \
|
||||
--rendertiddler TiddlyWiki2ReadMe editions/tw2/readme.md text/html \
|
||||
--output editions/tw2 \
|
||||
--rendertiddler TiddlyWiki2ReadMe readme.md text/html \
|
||||
|| exit 1
|
||||
|
||||
# cook the TiddlyWiki 2.x.x index file
|
||||
@@ -19,8 +16,9 @@ node ./tiddlywiki.js \
|
||||
node ./tiddlywiki.js \
|
||||
editions/tw2 \
|
||||
--verbose \
|
||||
--output tmp/tw2 \
|
||||
--load editions/tw2/source/tiddlywiki.com/index.html.recipe \
|
||||
--rendertiddler $:/core/templates/tiddlywiki2.template.html ./tmp/tw2/index.html text/plain \
|
||||
--rendertiddler $:/core/templates/tiddlywiki2.template.html index.html text/plain \
|
||||
|| exit 1
|
||||
|
||||
diff -q tmp/tw2/index.html editions/tw2/target/prebuilt.html
|
||||
|
||||
@@ -25,28 +25,32 @@ echo "tiddlywiki.com" > $TW5_BUILD_OUTPUT/CNAME
|
||||
node ./tiddlywiki.js \
|
||||
./editions/de-AT-DE \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/de-AT-DE.html text/plain \
|
||||
--savetiddler $:/favicon.ico $TW5_BUILD_OUTPUT/favicon.ico \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--rendertiddler $:/core/save/all de-AT-DE.html text/plain \
|
||||
--savetiddler $:/favicon.ico favicon.ico \
|
||||
|| exit 1
|
||||
|
||||
node ./tiddlywiki.js \
|
||||
./editions/zh-Hant \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/zh-Hant.html text/plain \
|
||||
--savetiddler $:/favicon.ico $TW5_BUILD_OUTPUT/favicon.ico \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--rendertiddler $:/core/save/all zh-Hant.html text/plain \
|
||||
--savetiddler $:/favicon.ico favicon.ico \
|
||||
|| exit 1
|
||||
|
||||
node ./tiddlywiki.js \
|
||||
./editions/zh-Hans \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/zh-Hans.html text/plain \
|
||||
--savetiddler $:/favicon.ico $TW5_BUILD_OUTPUT/favicon.ico \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--rendertiddler $:/core/save/all zh-Hans.html text/plain \
|
||||
--savetiddler $:/favicon.ico favicon.ico \
|
||||
|| exit 1
|
||||
|
||||
node ./tiddlywiki.js \
|
||||
./editions/fr-FR \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/fr-FR.html text/plain \
|
||||
--savetiddler $:/favicon.ico $TW5_BUILD_OUTPUT/favicon.ico \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--rendertiddler $:/core/save/all fr-FR.html text/plain \
|
||||
--savetiddler $:/favicon.ico favicon.ico \
|
||||
|| exit 1
|
||||
|
||||
|
||||
44
bld.cmd
44
bld.cmd
@@ -34,18 +34,19 @@ rem static.html: the static version of the default tiddlers
|
||||
node .\tiddlywiki.js ^
|
||||
.\editions\tw5.com ^
|
||||
--verbose ^
|
||||
--rendertiddler $:/core/save/all %TW5_BUILD_OUTPUT%\index.html text/plain ^
|
||||
--savetiddler $:/favicon.ico %TW5_BUILD_OUTPUT%\favicon.ico ^
|
||||
--rendertiddler ReadMe .\readme.md text/html ^
|
||||
--rendertiddler ContributingTemplate .\contributing.md text/html ^
|
||||
--rendertiddler $:/core/copyright.txt .\licenses\copyright.md text/plain ^
|
||||
--rendertiddler $:/editions/tw5.com/download-empty %TW5_BUILD_OUTPUT%\empty.html text/plain ^
|
||||
--rendertiddler $:/editions/tw5.com/download-empty %TW5_BUILD_OUTPUT%\empty.hta text/plain ^
|
||||
--savetiddler $:/green_favicon.ico %TW5_BUILD_OUTPUT%/static/favicon.ico ^
|
||||
--rendertiddler $:/core/templates/static.template.html %TW5_BUILD_OUTPUT%\static.html text/plain ^
|
||||
--rendertiddler $:/core/templates/alltiddlers.template.html %TW5_BUILD_OUTPUT%\alltiddlers.html text/plain ^
|
||||
--rendertiddler $:/core/templates/static.template.css %TW5_BUILD_OUTPUT%\static\static.css text/plain ^
|
||||
--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html %TW5_BUILD_OUTPUT%\static text/plain ^
|
||||
--output . ^
|
||||
--build readmes ^
|
||||
--output %TW5_BUILD_OUTPUT% ^
|
||||
--build favicon empty static index ^
|
||||
|| exit 1
|
||||
|
||||
rem upgrade.html: custom edition for handling upgrades
|
||||
|
||||
node .\tiddlywiki.js ^
|
||||
.\editions\upgrade ^
|
||||
--verbose ^
|
||||
--output %TW5_BUILD_OUTPUT% ^
|
||||
--build upgrade ^
|
||||
|| exit 1
|
||||
|
||||
rem encrypted.html: a version of the main file encrypted with the password "password"
|
||||
@@ -53,8 +54,8 @@ rem encrypted.html: a version of the main file encrypted with the password "pass
|
||||
node .\tiddlywiki.js ^
|
||||
.\editions\tw5.com ^
|
||||
--verbose ^
|
||||
--password password ^
|
||||
--rendertiddler $:/core/save/all %TW5_BUILD_OUTPUT%\encrypted.html text/plain ^
|
||||
--output %TW5_BUILD_OUTPUT% ^
|
||||
--build encrypted ^
|
||||
|| exit 1
|
||||
|
||||
rem tahoelafs.html: empty wiki with plugin for Tahoe-LAFS
|
||||
@@ -62,7 +63,8 @@ rem tahoelafs.html: empty wiki with plugin for Tahoe-LAFS
|
||||
node .\tiddlywiki.js ^
|
||||
.\editions\tahoelafs ^
|
||||
--verbose ^
|
||||
--rendertiddler $:/core/save/all %TW5_BUILD_OUTPUT%\tahoelafs.html text/plain ^
|
||||
--output %TW5_BUILD_OUTPUT% ^
|
||||
--rendertiddler $:/core/save/all tahoelafs.html text/plain ^
|
||||
|| exit 1
|
||||
|
||||
rem d3demo.html: wiki to demo d3 plugin
|
||||
@@ -70,7 +72,8 @@ rem d3demo.html: wiki to demo d3 plugin
|
||||
node .\tiddlywiki.js ^
|
||||
.\editions\d3demo ^
|
||||
--verbose ^
|
||||
--rendertiddler $:/core/save/all %TW5_BUILD_OUTPUT%\d3demo.html text/plain ^
|
||||
--output %TW5_BUILD_OUTPUT% ^
|
||||
--rendertiddler $:/core/save/all d3demo.html text/plain ^
|
||||
|| exit 1
|
||||
|
||||
rem codemirrordemo.html: wiki to demo codemirror plugin
|
||||
@@ -78,7 +81,8 @@ rem codemirrordemo.html: wiki to demo codemirror plugin
|
||||
node .\tiddlywiki.js ^
|
||||
.\editions\codemirrordemo ^
|
||||
--verbose ^
|
||||
--rendertiddler $:/core/save/all %TW5_BUILD_OUTPUT%\codemirrordemo.html text/plain ^
|
||||
--output %TW5_BUILD_OUTPUT% ^
|
||||
--rendertiddler $:/core/save/all codemirrordemo.html text/plain ^
|
||||
|| exit 1
|
||||
|
||||
rem markdowndemo.html: wiki to demo markdown plugin
|
||||
@@ -86,7 +90,8 @@ rem markdowndemo.html: wiki to demo markdown plugin
|
||||
node .\tiddlywiki.js ^
|
||||
.\editions\markdowndemo ^
|
||||
--verbose ^
|
||||
--rendertiddler $:/core/save/all %TW5_BUILD_OUTPUT%\markdowndemo.html text/plain ^
|
||||
--output %TW5_BUILD_OUTPUT% ^
|
||||
--rendertiddler $:/core/save/all markdowndemo.html text/plain ^
|
||||
|| exit 1
|
||||
|
||||
|
||||
@@ -95,7 +100,8 @@ rem highlightdemo.html: wiki to demo highlight plugin
|
||||
node .\tiddlywiki.js ^
|
||||
.\editions\highlightdemo ^
|
||||
--verbose ^
|
||||
--rendertiddler $:/core/save/all %TW5_BUILD_OUTPUT%\highlightdemo.html text/plain ^
|
||||
--output %TW5_BUILD_OUTPUT% ^
|
||||
--rendertiddler $:/core/save/all highlightdemo.html text/plain ^
|
||||
|| exit 1
|
||||
|
||||
rem Make the CNAME file that GitHub Pages requires
|
||||
|
||||
44
bld.sh
44
bld.sh
@@ -35,18 +35,19 @@ rm $TW5_BUILD_OUTPUT/static/*
|
||||
node ./tiddlywiki.js \
|
||||
./editions/tw5.com \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/index.html text/plain \
|
||||
--savetiddler $:/favicon.ico $TW5_BUILD_OUTPUT/favicon.ico \
|
||||
--rendertiddler ReadMe ./readme.md text/html \
|
||||
--rendertiddler ContributingTemplate ./contributing.md text/html \
|
||||
--rendertiddler $:/core/copyright.txt ./licenses/copyright.md text/plain \
|
||||
--rendertiddler $:/editions/tw5.com/download-empty $TW5_BUILD_OUTPUT/empty.html text/plain \
|
||||
--rendertiddler $:/editions/tw5.com/download-empty $TW5_BUILD_OUTPUT/empty.hta text/plain \
|
||||
--savetiddler $:/green_favicon.ico $TW5_BUILD_OUTPUT/static/favicon.ico \
|
||||
--rendertiddler $:/core/templates/static.template.html $TW5_BUILD_OUTPUT/static.html text/plain \
|
||||
--rendertiddler $:/core/templates/alltiddlers.template.html $TW5_BUILD_OUTPUT/alltiddlers.html text/plain \
|
||||
--rendertiddler $:/core/templates/static.template.css $TW5_BUILD_OUTPUT/static/static.css text/plain \
|
||||
--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html $TW5_BUILD_OUTPUT/static text/plain \
|
||||
--output . \
|
||||
--build readmes \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--build favicon empty static index \
|
||||
|| exit 1
|
||||
|
||||
# upgrade.html: custom edition for handling upgrades
|
||||
|
||||
node ./tiddlywiki.js \
|
||||
./editions/upgrade \
|
||||
--verbose \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--build upgrade \
|
||||
|| exit 1
|
||||
|
||||
# encrypted.html: a version of the main file encrypted with the password "password"
|
||||
@@ -54,8 +55,8 @@ node ./tiddlywiki.js \
|
||||
node ./tiddlywiki.js \
|
||||
./editions/tw5.com \
|
||||
--verbose \
|
||||
--password password \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/encrypted.html text/plain \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--build encrypted \
|
||||
|| exit 1
|
||||
|
||||
# tahoelafs.html: empty wiki with plugin for Tahoe-LAFS
|
||||
@@ -63,7 +64,8 @@ node ./tiddlywiki.js \
|
||||
node ./tiddlywiki.js \
|
||||
./editions/tahoelafs \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/tahoelafs.html text/plain \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--rendertiddler $:/core/save/all tahoelafs.html text/plain \
|
||||
|| exit 1
|
||||
|
||||
# d3demo.html: wiki to demo d3 plugin
|
||||
@@ -71,7 +73,8 @@ node ./tiddlywiki.js \
|
||||
node ./tiddlywiki.js \
|
||||
./editions/d3demo \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/d3demo.html text/plain \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--rendertiddler $:/core/save/all d3demo.html text/plain \
|
||||
|| exit 1
|
||||
|
||||
# codemirrordemo.html: wiki to demo codemirror plugin
|
||||
@@ -79,7 +82,8 @@ node ./tiddlywiki.js \
|
||||
node ./tiddlywiki.js \
|
||||
./editions/codemirrordemo \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/codemirrordemo.html text/plain \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--rendertiddler $:/core/save/all codemirrordemo.html text/plain \
|
||||
|| exit 1
|
||||
|
||||
# markdowndemo.html: wiki to demo markdown plugin
|
||||
@@ -87,7 +91,8 @@ node ./tiddlywiki.js \
|
||||
node ./tiddlywiki.js \
|
||||
./editions/markdowndemo \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/markdowndemo.html text/plain \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--rendertiddler $:/core/save/all markdowndemo.html text/plain \
|
||||
|| exit 1
|
||||
|
||||
# highlightdemo.html: wiki to demo highlight plugin
|
||||
@@ -95,7 +100,8 @@ node ./tiddlywiki.js \
|
||||
node ./tiddlywiki.js \
|
||||
./editions/highlightdemo \
|
||||
--verbose \
|
||||
--rendertiddler $:/core/save/all $TW5_BUILD_OUTPUT/highlightdemo.html text/plain \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--rendertiddler $:/core/save/all highlightdemo.html text/plain \
|
||||
|| exit 1
|
||||
|
||||
# Run the test edition to run the Node.js tests and to generate test.html for tests in the browser
|
||||
|
||||
463
boot/boot.js
463
boot/boot.js
@@ -33,7 +33,6 @@ if(!$tw) {
|
||||
}
|
||||
|
||||
$tw.utils = $tw.utils || Object.create(null);
|
||||
$tw.boot = $tw.boot || Object.create(null);
|
||||
|
||||
/////////////////////////// Standard node.js libraries
|
||||
|
||||
@@ -46,6 +45,11 @@ if($tw.node) {
|
||||
|
||||
/////////////////////////// Utility functions
|
||||
|
||||
$tw.boot.log = function(str) {
|
||||
$tw.boot.logMessages = $tw.boot.logMessages || [];
|
||||
$tw.boot.logMessages.push(str);
|
||||
}
|
||||
|
||||
/*
|
||||
Check if an object has a property
|
||||
*/
|
||||
@@ -131,7 +135,7 @@ $tw.utils.error = function(err) {
|
||||
promptMsg = "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser";
|
||||
// Log the error to the console
|
||||
console.error(err);
|
||||
if($tw.browser) {
|
||||
if($tw.browser && !$tw.node) {
|
||||
// Display an error message to the user
|
||||
var dm = $tw.utils.domMaker,
|
||||
heading = dm("h1",{text: errHeading}),
|
||||
@@ -146,7 +150,7 @@ $tw.utils.error = function(err) {
|
||||
return false;
|
||||
},true);
|
||||
return null;
|
||||
} else {
|
||||
} else if(!$tw.browser) {
|
||||
// Exit if we're under node.js
|
||||
process.exit(1);
|
||||
}
|
||||
@@ -155,7 +159,7 @@ $tw.utils.error = function(err) {
|
||||
/*
|
||||
Use our custom error handler if we're in the browser
|
||||
*/
|
||||
if($tw.browser) {
|
||||
if($tw.boot.tasks.trapErrors) {
|
||||
window.onerror = function(errorMsg,url,lineNumber) {
|
||||
$tw.utils.error(errorMsg);
|
||||
return false;
|
||||
@@ -183,11 +187,11 @@ $tw.utils.deepDefaults = function(object /*, sourceObjectList */) {
|
||||
$tw.utils.each(Array.prototype.slice.call(arguments,1),function(source) {
|
||||
if(source) {
|
||||
for (var p in source) {
|
||||
if(object[p] == null) {
|
||||
if(object[p] === null || object[p] === undefined) {
|
||||
object[p] = source[p];
|
||||
}
|
||||
if(typeof object[p] === "object" && typeof source[p] === "object") {
|
||||
$tw.utils.deepDefaults(object[p],source[p]);
|
||||
$tw.utils.deepDefaults(object[p],source[p]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -202,6 +206,14 @@ $tw.utils.htmlDecode = function(s) {
|
||||
return s.toString().replace(/</mg,"<").replace(/ /mg,"\xA0").replace(/>/mg,">").replace(/"/mg,"\"").replace(/&/mg,"&");
|
||||
};
|
||||
|
||||
/*
|
||||
Get the browser location.hash. We don't use location.hash because of the way that Firefox auto-urldecodes it (see http://stackoverflow.com/questions/1703552/encoding-of-window-location-hash)
|
||||
*/
|
||||
$tw.utils.getLocationHash = function() {
|
||||
var parts = window.location.href.split('#');
|
||||
return "#" + (parts.length > 1 ? parts[1] : "");
|
||||
};
|
||||
|
||||
/*
|
||||
Pad a string to a given length with "0"s. Length defaults to 2
|
||||
*/
|
||||
@@ -218,8 +230,8 @@ $tw.utils.pad = function(value,length) {
|
||||
$tw.utils.stringifyDate = function(value) {
|
||||
return value.getUTCFullYear() +
|
||||
$tw.utils.pad(value.getUTCMonth() + 1) +
|
||||
$tw.utils.pad(value.getUTCDate()) +
|
||||
$tw.utils.pad(value.getUTCHours()) +
|
||||
$tw.utils.pad(value.getUTCDate()) +
|
||||
$tw.utils.pad(value.getUTCHours()) +
|
||||
$tw.utils.pad(value.getUTCMinutes()) +
|
||||
$tw.utils.pad(value.getUTCSeconds()) +
|
||||
$tw.utils.pad(value.getUTCMilliseconds(),3);
|
||||
@@ -258,14 +270,14 @@ $tw.utils.stringifyList = function(value) {
|
||||
// Parse a string array from a bracketted list. For example "OneTiddler [[Another Tiddler]] LastOne"
|
||||
$tw.utils.parseStringArray = function(value) {
|
||||
if(typeof value === "string") {
|
||||
var memberRegExp = /(?:^|\s)(?:\[\[(.*?)\]\])(?=\s|$)|(\S+)/mg,
|
||||
var memberRegExp = /(?:^|[^\S\xA0])(?:\[\[(.*?)\]\])(?=[^\S\xA0]|$)|([\S\xA0]+)/mg,
|
||||
results = [],
|
||||
match;
|
||||
do {
|
||||
match = memberRegExp.exec(value);
|
||||
if(match) {
|
||||
var item = match[1] || match[2];
|
||||
if(results.indexOf(item) === -1) {
|
||||
if(item !== undefined && results.indexOf(item) === -1) {
|
||||
results.push(item);
|
||||
}
|
||||
}
|
||||
@@ -301,7 +313,6 @@ name `.` refers to the current directory
|
||||
*/
|
||||
$tw.utils.resolvePath = function(sourcepath,rootpath) {
|
||||
// If the source path starts with ./ or ../ then it is relative to the root
|
||||
|
||||
if(sourcepath.substr(0,2) === "./" || sourcepath.substr(0,3) === "../" ) {
|
||||
var src = sourcepath.split("/"),
|
||||
root = rootpath.split("/");
|
||||
@@ -352,7 +363,7 @@ $tw.utils.parseVersion = function(version) {
|
||||
};
|
||||
|
||||
/*
|
||||
Returns true if the version string A is greater than the version string B
|
||||
Returns true if the version string A is greater than the version string B. Returns true if the versions are the same
|
||||
*/
|
||||
$tw.utils.checkVersions = function(versionStringA,versionStringB) {
|
||||
var defaultVersion = {
|
||||
@@ -369,7 +380,8 @@ $tw.utils.checkVersions = function(versionStringA,versionStringB) {
|
||||
];
|
||||
return (diff[0] > 0) ||
|
||||
(diff[0] === 0 && diff[1] > 0) ||
|
||||
(diff[0] === 0 && diff[1] === 0 && diff[2] > 0);
|
||||
(diff[0] === 0 && diff[1] === 0 && diff[2] > 0) ||
|
||||
(diff[0] === 0 && diff[1] === 0 && diff[2] === 0);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -380,8 +392,8 @@ options: {flags: flags,deserializerType: deserializerType}
|
||||
*/
|
||||
$tw.utils.registerFileType = function(type,encoding,extension,options) {
|
||||
options = options || {};
|
||||
$tw.config.fileExtensionInfo[extension] = {type: type};
|
||||
$tw.config.contentTypeInfo[type] = {encoding: encoding, extension: extension, flags: options.flags || [], deserializerType: options.deserializerType || type};
|
||||
$tw.config.fileExtensionInfo[extension] = {type: type};
|
||||
$tw.config.contentTypeInfo[type] = {encoding: encoding, extension: extension, flags: options.flags || [], deserializerType: options.deserializerType || type};
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -413,7 +425,7 @@ $tw.utils.evalGlobal = function(code,context,filename) {
|
||||
if($tw.browser) {
|
||||
fn = window["eval"](code + "\n\n//# sourceURL=" + filename);
|
||||
} else {
|
||||
fn = vm.runInThisContext(code,filename);
|
||||
fn = vm.runInThisContext(code,filename);
|
||||
}
|
||||
// Call the function and return the exports
|
||||
return fn.apply(null,contextValues);
|
||||
@@ -553,7 +565,7 @@ Crypto helper object for encrypted content. It maintains the password text in a
|
||||
the password, and to encrypt/decrypt a block of text
|
||||
*/
|
||||
$tw.utils.Crypto = function() {
|
||||
var sjcl = $tw.browser ? window.sjcl : require("./sjcl.js"),
|
||||
var sjcl = $tw.node ? require("./sjcl.js") : window.sjcl,
|
||||
currentPassword = null,
|
||||
callSjcl = function(method,inputText,password) {
|
||||
password = password || currentPassword;
|
||||
@@ -564,7 +576,7 @@ $tw.utils.Crypto = function() {
|
||||
}
|
||||
} catch(ex) {
|
||||
console.log("Crypto error:" + ex);
|
||||
outputText = null;
|
||||
outputText = null;
|
||||
}
|
||||
return outputText;
|
||||
};
|
||||
@@ -603,7 +615,7 @@ $tw.modules.execute = function(moduleName,moduleRoot) {
|
||||
tiddler = $tw.wiki.getTiddler(name) || $tw.wiki.getTiddler(name + ".js") || $tw.wiki.getTiddler(moduleName) || $tw.wiki.getTiddler(moduleName + ".js") ,
|
||||
_exports = {},
|
||||
sandbox = {
|
||||
module: {},
|
||||
module: {exports: _exports},
|
||||
//moduleInfo: moduleInfo,
|
||||
exports: _exports,
|
||||
console: console,
|
||||
@@ -652,7 +664,7 @@ $tw.modules.execute = function(moduleName,moduleRoot) {
|
||||
return window.require(moduleName);
|
||||
} catch(e) {}
|
||||
}
|
||||
throw "Cannot find module named '" + moduleName + "' required by module '" + moduleRoot + "', resolved to " + name;
|
||||
throw "Cannot find module named '" + moduleName + "' required by module '" + moduleRoot + "', resolved to " + name;
|
||||
} else {
|
||||
// If we don't have a module with that name, let node.js try to find it
|
||||
return require(moduleName);
|
||||
@@ -668,6 +680,9 @@ $tw.modules.execute = function(moduleName,moduleRoot) {
|
||||
} else if(typeof moduleInfo.definition === "string") { // String
|
||||
moduleInfo.exports = _exports;
|
||||
$tw.utils.evalSandboxed(moduleInfo.definition,sandbox,tiddler.fields.title);
|
||||
if(sandbox.module.exports) {
|
||||
moduleInfo.exports = sandbox.module.exports; //more codemirror workaround
|
||||
}
|
||||
} else { // Object
|
||||
moduleInfo.exports = moduleInfo.definition;
|
||||
}
|
||||
@@ -749,7 +764,7 @@ $tw.Tiddler = function(/* [fields,] fields */) {
|
||||
var arg = arguments[c],
|
||||
src = (arg instanceof $tw.Tiddler) ? arg.fields : arg;
|
||||
for(var t in src) {
|
||||
if(src[t] === undefined) {
|
||||
if(src[t] === undefined || src[t] === null) {
|
||||
if(t in this.fields) {
|
||||
delete this.fields[t]; // If we get a field that's undefined, delete any previous field value
|
||||
}
|
||||
@@ -764,7 +779,7 @@ $tw.Tiddler = function(/* [fields,] fields */) {
|
||||
}
|
||||
// Freeze the field to keep it immutable
|
||||
if(typeof value === "object") {
|
||||
Object.freeze(value);
|
||||
Object.freeze(value);
|
||||
}
|
||||
this.fields[t] = value;
|
||||
}
|
||||
@@ -834,7 +849,7 @@ $tw.Wiki = function(options) {
|
||||
tiddlers[title] = tiddler;
|
||||
this.clearCache(title);
|
||||
this.clearGlobalCache();
|
||||
this.enqueueTiddlerEvent(title);
|
||||
this.enqueueTiddlerEvent(title);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -884,6 +899,37 @@ $tw.Wiki = function(options) {
|
||||
}
|
||||
};
|
||||
|
||||
// Iterate through all tiddlers and then the shadows
|
||||
this.eachTiddlerPlusShadows = function(callback) {
|
||||
for(var title in tiddlers) {
|
||||
callback(tiddlers[title],title);
|
||||
}
|
||||
for(var title in shadowTiddlers) {
|
||||
if(!Object.prototype.hasOwnProperty.call(tiddlers,title)) {
|
||||
var shadowInfo = shadowTiddlers[title];
|
||||
callback(shadowInfo.tiddler,title);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Iterate through all the shadows and then the tiddlers
|
||||
this.eachShadowPlusTiddlers = function(callback) {
|
||||
for(var title in shadowTiddlers) {
|
||||
if(Object.prototype.hasOwnProperty.call(tiddlers,title)) {
|
||||
callback(tiddlers[title],title);
|
||||
} else {
|
||||
var shadowInfo = shadowTiddlers[title];
|
||||
callback(shadowInfo.tiddler,title);
|
||||
}
|
||||
}
|
||||
for(var title in tiddlers) {
|
||||
if(!Object.prototype.hasOwnProperty.call(shadowTiddlers,title)) {
|
||||
callback(tiddlers[title],title);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// Test for the existence of a tiddler
|
||||
this.tiddlerExists = function(title) {
|
||||
return !!$tw.utils.hop(tiddlers,title);
|
||||
@@ -994,15 +1040,15 @@ $tw.Wiki = function(options) {
|
||||
};
|
||||
|
||||
// Dummy methods that will be filled in after boot
|
||||
$tw.Wiki.prototype.clearCache =
|
||||
$tw.Wiki.prototype.clearGlobalCache =
|
||||
$tw.Wiki.prototype.clearCache =
|
||||
$tw.Wiki.prototype.clearGlobalCache =
|
||||
$tw.Wiki.prototype.enqueueTiddlerEvent = function() {};
|
||||
|
||||
// Add an array of tiddlers
|
||||
$tw.Wiki.prototype.addTiddlers = function(tiddlers) {
|
||||
for(var t=0; t<tiddlers.length; t++) {
|
||||
this.addTiddler(tiddlers[t]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1043,6 +1089,37 @@ $tw.Wiki.prototype.defineShadowModules = function() {
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
Enable safe mode by deleting any tiddlers that override a shadow tiddler
|
||||
*/
|
||||
$tw.Wiki.prototype.processSafeMode = function() {
|
||||
var self = this,
|
||||
overrides = [];
|
||||
// Find the overriding tiddlers
|
||||
this.each(function(tiddler,title) {
|
||||
if(self.isShadowTiddler(title)) {
|
||||
console.log(title);
|
||||
overrides.push(title);
|
||||
}
|
||||
});
|
||||
// Assemble a report tiddler
|
||||
var titleReportTiddler = "TiddlyWiki Safe Mode",
|
||||
report = [];
|
||||
report.push("TiddlyWiki has been started in [[safe mode|http://tiddlywiki.com/static/SafeMode.html]]. Most customisations have been disabled by renaming the following tiddlers:")
|
||||
// Delete the overrides
|
||||
overrides.forEach(function(title) {
|
||||
var tiddler = self.getTiddler(title),
|
||||
newTitle = "SAFE: " + title;
|
||||
self.deleteTiddler(title);
|
||||
self.addTiddler(new $tw.Tiddler(tiddler, {title: newTitle}));
|
||||
report.push("* [[" + title + "|" + newTitle + "]]");
|
||||
});
|
||||
report.push()
|
||||
this.addTiddler(new $tw.Tiddler({title: titleReportTiddler, text: report.join("\n\n")}));
|
||||
// Set $:/DefaultTiddlers to point to our report
|
||||
this.addTiddler(new $tw.Tiddler({title: "$:/DefaultTiddlers", text: "[[" + titleReportTiddler + "]]"}));
|
||||
};
|
||||
|
||||
/*
|
||||
Extracts tiddlers from a typed block of text, specifying default field values
|
||||
*/
|
||||
@@ -1098,8 +1175,6 @@ $tw.modules.define("$:/boot/tiddlerdeserializer/tid","tiddlerdeserializer",{
|
||||
}
|
||||
if(split.length >= 2) {
|
||||
fields.text = split.slice(1).join("\n\n");
|
||||
} else {
|
||||
fields.text = "";
|
||||
}
|
||||
return [fields];
|
||||
}
|
||||
@@ -1155,7 +1230,7 @@ $tw.modules.define("$:/boot/tiddlerdeserializer/json","tiddlerdeserializer",{
|
||||
|
||||
/////////////////////////// Browser definitions
|
||||
|
||||
if($tw.browser) {
|
||||
if($tw.browser && !$tw.node) {
|
||||
|
||||
/*
|
||||
Decrypt any tiddlers stored within the element with the ID "encryptedArea". The function is asynchronous to allow the user to be prompted for a password
|
||||
@@ -1274,13 +1349,10 @@ $tw.loadTiddlersBrowser = function() {
|
||||
}
|
||||
};
|
||||
|
||||
// End of if($tw.browser)
|
||||
}
|
||||
} else {
|
||||
|
||||
/////////////////////////// Server definitions
|
||||
|
||||
if(!$tw.browser) {
|
||||
|
||||
/*
|
||||
Get any encrypted tiddlers
|
||||
*/
|
||||
@@ -1289,7 +1361,7 @@ $tw.boot.decryptEncryptedTiddlers = function(callback) {
|
||||
callback();
|
||||
};
|
||||
|
||||
}
|
||||
} // End of if($tw.browser && !$tw.node)
|
||||
|
||||
/////////////////////////// Node definitions
|
||||
|
||||
@@ -1353,7 +1425,7 @@ $tw.loadTiddlersFromPath = function(filepath,excludeRegExp) {
|
||||
} else {
|
||||
// If not, read all the files in the directory
|
||||
$tw.utils.each(files,function(file) {
|
||||
if(!excludeRegExp.test(file)) {
|
||||
if(!excludeRegExp.test(file) && file !== "plugin.info") {
|
||||
tiddlers.push.apply(tiddlers,$tw.loadTiddlersFromPath(filepath + path.sep + file,excludeRegExp));
|
||||
}
|
||||
});
|
||||
@@ -1370,53 +1442,102 @@ Load the tiddlers from a plugin folder, and package them up into a proper JSON p
|
||||
*/
|
||||
$tw.loadPluginFolder = function(filepath,excludeRegExp) {
|
||||
excludeRegExp = excludeRegExp || $tw.boot.excludeRegExp;
|
||||
var stat, files, pluginInfo, pluginTiddlers = [], f, file, titlePrefix, t;
|
||||
if(fs.existsSync(filepath)) {
|
||||
stat = fs.statSync(filepath);
|
||||
if(stat.isDirectory()) {
|
||||
// Read the plugin information
|
||||
pluginInfo = JSON.parse(fs.readFileSync(filepath + path.sep + "plugin.info","utf8"));
|
||||
// Read the plugin files
|
||||
files = fs.readdirSync(filepath);
|
||||
for(f=0; f<files.length; f++) {
|
||||
file = files[f];
|
||||
if(!excludeRegExp.test(file) && file !== "plugin.info" && file !== "tiddlywiki.files") {
|
||||
var tiddlerFiles = $tw.loadTiddlersFromPath(filepath + path.sep + file,excludeRegExp);
|
||||
$tw.utils.each(tiddlerFiles,function(tiddlerFile) {
|
||||
pluginTiddlers.push.apply(pluginTiddlers,tiddlerFile.tiddlers);
|
||||
});
|
||||
}
|
||||
}
|
||||
// Save the plugin tiddlers into the plugin info
|
||||
pluginInfo.tiddlers = pluginInfo.tiddlers || Object.create(null);
|
||||
for(t=0; t<pluginTiddlers.length; t++) {
|
||||
if(pluginTiddlers[t].title) {
|
||||
pluginInfo.tiddlers[pluginTiddlers[t].title] = pluginTiddlers[t];
|
||||
if(fs.existsSync(filepath) && fs.statSync(filepath).isDirectory()) {
|
||||
// Read the plugin information
|
||||
var pluginInfo = JSON.parse(fs.readFileSync(filepath + path.sep + "plugin.info","utf8"));
|
||||
// Read the plugin files
|
||||
var pluginFiles = $tw.loadTiddlersFromPath(filepath,excludeRegExp);
|
||||
// Save the plugin tiddlers into the plugin info
|
||||
pluginInfo.tiddlers = pluginInfo.tiddlers || Object.create(null);
|
||||
for(var f=0; f<pluginFiles.length; f++) {
|
||||
var tiddlers = pluginFiles[f].tiddlers;
|
||||
for(var t=0; t<tiddlers.length; t++) {
|
||||
var tiddler= tiddlers[t];
|
||||
if(tiddler.title) {
|
||||
pluginInfo.tiddlers[tiddler.title] = tiddler;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Give the plugin the same version number as the core if it doesn't have one
|
||||
if(pluginInfo && !("version" in pluginInfo)) {
|
||||
pluginInfo.version = $tw.packageInfo.version;
|
||||
}
|
||||
// Save the plugin tiddler
|
||||
if(pluginInfo) {
|
||||
var fields = {
|
||||
title: pluginInfo.title,
|
||||
type: "application/json",
|
||||
text: JSON.stringify({tiddlers: pluginInfo.tiddlers},null,4),
|
||||
"plugin-priority": pluginInfo["plugin-priority"],
|
||||
"name": pluginInfo["name"],
|
||||
"version": pluginInfo["version"],
|
||||
"thumbnail": pluginInfo["thumbnail"],
|
||||
"description": pluginInfo["description"],
|
||||
"plugin-type": pluginInfo["plugin-type"] || "plugin",
|
||||
"dependents": $tw.utils.stringifyList(pluginInfo["dependents"] || [])
|
||||
// Give the plugin the same version number as the core if it doesn't have one
|
||||
if(!("version" in pluginInfo)) {
|
||||
pluginInfo.version = $tw.packageInfo.version;
|
||||
}
|
||||
return fields;
|
||||
// Use "plugin" as the plugin-type if we don't have one
|
||||
if(!("plugin-type" in pluginInfo)) {
|
||||
pluginInfo["plugin-type"] = "plugin";
|
||||
}
|
||||
pluginInfo.dependents = pluginInfo.dependents || [];
|
||||
pluginInfo.type = "application/json";
|
||||
// Set plugin text
|
||||
pluginInfo.text = JSON.stringify({tiddlers: pluginInfo.tiddlers},null,4);
|
||||
delete pluginInfo.tiddlers;
|
||||
// Deserialise array fields (currently required for the dependents field)
|
||||
for(var field in pluginInfo) {
|
||||
if($tw.utils.isArray(pluginInfo[field])) {
|
||||
pluginInfo[field] = $tw.utils.stringifyList(pluginInfo[field]);
|
||||
}
|
||||
}
|
||||
return pluginInfo;
|
||||
} else {
|
||||
return null;
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
name: Name of the plugin to find
|
||||
paths: array of file paths to search for it
|
||||
Returns the path of the plugin folder
|
||||
*/
|
||||
$tw.findLibraryItem = function(name,paths) {
|
||||
var pathIndex = 0;
|
||||
do {
|
||||
var pluginPath = path.resolve(paths[pathIndex],"./" + name)
|
||||
if(fs.existsSync(pluginPath) && fs.statSync(pluginPath).isDirectory()) {
|
||||
return pluginPath;
|
||||
}
|
||||
} while(++pathIndex < paths.length);
|
||||
return null;
|
||||
};
|
||||
|
||||
/*
|
||||
name: Name of the plugin to load
|
||||
paths: array of file paths to search for it
|
||||
*/
|
||||
$tw.loadPlugin = function(name,paths) {
|
||||
var pluginPath = $tw.findLibraryItem(name,paths);
|
||||
if(pluginPath) {
|
||||
var pluginFields = $tw.loadPluginFolder(pluginPath);
|
||||
if(pluginFields) {
|
||||
$tw.wiki.addTiddler(pluginFields);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
libraryPath: Path of library folder for these plugins (relative to core path)
|
||||
envVar: Environment variable name for these plugins
|
||||
Returns an array of search paths
|
||||
*/
|
||||
$tw.getLibraryItemSearchPaths = function(libraryPath,envVar) {
|
||||
var pluginPaths = [path.resolve($tw.boot.corePath,libraryPath)],
|
||||
env = process.env[envVar];
|
||||
if(env) {
|
||||
Array.prototype.push.apply(pluginPaths,env.split(":"));
|
||||
}
|
||||
return pluginPaths;
|
||||
};
|
||||
|
||||
/*
|
||||
plugins: Array of names of plugins (eg, "tiddlywiki/filesystemadaptor")
|
||||
libraryPath: Path of library folder for these plugins (relative to core path)
|
||||
envVar: Environment variable name for these plugins
|
||||
*/
|
||||
$tw.loadPlugins = function(plugins,libraryPath,envVar) {
|
||||
if(plugins) {
|
||||
var pluginPaths = $tw.getLibraryItemSearchPaths(libraryPath,envVar);
|
||||
for(var t=0; t<plugins.length; t++) {
|
||||
$tw.loadPlugin(plugins[t],pluginPaths);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1448,36 +1569,10 @@ $tw.loadWikiTiddlers = function(wikiPath,parentPaths) {
|
||||
}
|
||||
});
|
||||
}
|
||||
// Load any plugins listed in the wiki info file
|
||||
if(wikiInfo.plugins) {
|
||||
var pluginBasePath = path.resolve($tw.boot.corePath,$tw.config.pluginsPath);
|
||||
for(var t=0; t<wikiInfo.plugins.length; t++) {
|
||||
pluginFields = $tw.loadPluginFolder(path.resolve(pluginBasePath,"./" + wikiInfo.plugins[t]));
|
||||
if(pluginFields) {
|
||||
$tw.wiki.addTiddler(pluginFields);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Load any themes listed in the wiki info file
|
||||
if(wikiInfo.themes) {
|
||||
var themesBasePath = path.resolve($tw.boot.corePath,$tw.config.themesPath);
|
||||
for(var t=0; t<wikiInfo.themes.length; t++) {
|
||||
pluginFields = $tw.loadPluginFolder(path.resolve(themesBasePath,"./" + wikiInfo.themes[t]));
|
||||
if(pluginFields) {
|
||||
$tw.wiki.addTiddler(pluginFields);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Load any languages listed in the wiki info file
|
||||
if(wikiInfo.languages) {
|
||||
var languagesBasePath = path.resolve($tw.boot.corePath,$tw.config.languagesPath);
|
||||
for(var t=0; t<wikiInfo.languages.length; t++) {
|
||||
pluginFields = $tw.loadPluginFolder(path.resolve(languagesBasePath,"./" + wikiInfo.languages[t]));
|
||||
if(pluginFields) {
|
||||
$tw.wiki.addTiddler(pluginFields);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Load any plugins, themes and languages listed in the wiki info file
|
||||
$tw.loadPlugins(wikiInfo.plugins,$tw.config.pluginsPath,$tw.config.pluginsEnvVar);
|
||||
$tw.loadPlugins(wikiInfo.themes,$tw.config.themesPath,$tw.config.themesEnvVar);
|
||||
$tw.loadPlugins(wikiInfo.languages,$tw.config.languagesPath,$tw.config.languagesEnvVar);
|
||||
// Load the wiki files, registering them as writable
|
||||
var resolvedWikiPath = path.resolve(wikiPath,$tw.config.wikiTiddlersSubDir);
|
||||
$tw.utils.each($tw.loadTiddlersFromPath(resolvedWikiPath),function(tiddlerFile) {
|
||||
@@ -1493,7 +1588,8 @@ $tw.loadWikiTiddlers = function(wikiPath,parentPaths) {
|
||||
$tw.wiki.addTiddlers(tiddlerFile.tiddlers);
|
||||
});
|
||||
// Save the original tiddler file locations if requested
|
||||
if(wikiInfo.config && wikiInfo.config["retain-original-tiddler-path"]) {
|
||||
var config = wikiInfo.config || {};
|
||||
if(config["retain-original-tiddler-path"]) {
|
||||
var output = [];
|
||||
for(var title in $tw.boot.files) {
|
||||
output.push(title + ": " + path.relative(resolvedWikiPath,$tw.boot.files[title].filepath) + "\n");
|
||||
@@ -1501,12 +1597,12 @@ $tw.loadWikiTiddlers = function(wikiPath,parentPaths) {
|
||||
$tw.wiki.addTiddler({title: "$:/config/OriginalTiddlerPaths", type: "application/x-tiddler-dictionary", text: output.join("")});
|
||||
}
|
||||
// Save the path to the tiddlers folder for the filesystemadaptor
|
||||
$tw.boot.wikiTiddlersPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiTiddlersSubDir);
|
||||
$tw.boot.wikiTiddlersPath = path.resolve($tw.boot.wikiPath,config["default-tiddler-location"] || $tw.config.wikiTiddlersSubDir);
|
||||
// Load any plugins within the wiki folder
|
||||
var wikiPluginsPath = path.resolve(wikiPath,$tw.config.wikiPluginsSubDir);
|
||||
if(fs.existsSync(wikiPluginsPath)) {
|
||||
var pluginFolders = fs.readdirSync(wikiPluginsPath);
|
||||
for(t=0; t<pluginFolders.length; t++) {
|
||||
for(var t=0; t<pluginFolders.length; t++) {
|
||||
pluginFields = $tw.loadPluginFolder(path.resolve(wikiPluginsPath,"./" + pluginFolders[t]));
|
||||
if(pluginFields) {
|
||||
$tw.wiki.addTiddler(pluginFields);
|
||||
@@ -1517,7 +1613,7 @@ $tw.loadWikiTiddlers = function(wikiPath,parentPaths) {
|
||||
var wikiThemesPath = path.resolve(wikiPath,$tw.config.wikiThemesSubDir);
|
||||
if(fs.existsSync(wikiThemesPath)) {
|
||||
var themeFolders = fs.readdirSync(wikiThemesPath);
|
||||
for(t=0; t<themeFolders.length; t++) {
|
||||
for(var t=0; t<themeFolders.length; t++) {
|
||||
pluginFields = $tw.loadPluginFolder(path.resolve(wikiThemesPath,"./" + themeFolders[t]));
|
||||
if(pluginFields) {
|
||||
$tw.wiki.addTiddler(pluginFields);
|
||||
@@ -1528,7 +1624,7 @@ $tw.loadWikiTiddlers = function(wikiPath,parentPaths) {
|
||||
var wikiLanguagesPath = path.resolve(wikiPath,$tw.config.wikiLanguagesSubDir);
|
||||
if(fs.existsSync(wikiLanguagesPath)) {
|
||||
var languageFolders = fs.readdirSync(wikiLanguagesPath);
|
||||
for(t=0; t<languageFolders.length; t++) {
|
||||
for(var t=0; t<languageFolders.length; t++) {
|
||||
pluginFields = $tw.loadPluginFolder(path.resolve(wikiLanguagesPath,"./" + languageFolders[t]));
|
||||
if(pluginFields) {
|
||||
$tw.wiki.addTiddler(pluginFields);
|
||||
@@ -1551,17 +1647,25 @@ $tw.loadTiddlersNode = function() {
|
||||
}
|
||||
};
|
||||
|
||||
// End of if($tw.node)
|
||||
// End of if($tw.node)
|
||||
}
|
||||
|
||||
/////////////////////////// Main startup function called once tiddlers have been decrypted
|
||||
|
||||
/*
|
||||
Startup TiddlyWiki. Options are:
|
||||
readBrowserTiddlers: whether to read tiddlers from the HTML file we're executing within; if not, tiddlers are read from the file system with Node.js APIs
|
||||
Startup TiddlyWiki
|
||||
*/
|
||||
$tw.boot.startup = function(options) {
|
||||
options = options || {};
|
||||
// Get the URL hash and check for safe mode
|
||||
$tw.locationHash = "#";
|
||||
if($tw.browser && !$tw.node) {
|
||||
if(location.hash === "#:safe") {
|
||||
$tw.safeMode = true;
|
||||
} else {
|
||||
$tw.locationHash = $tw.utils.getLocationHash();
|
||||
}
|
||||
}
|
||||
// Initialise some more $tw properties
|
||||
$tw.utils.deepDefaults($tw,{
|
||||
modules: { // Information about each module
|
||||
@@ -1578,12 +1682,17 @@ $tw.boot.startup = function(options) {
|
||||
wikiThemesSubDir: "./themes",
|
||||
wikiLanguagesSubDir: "./languages",
|
||||
wikiTiddlersSubDir: "./tiddlers",
|
||||
wikiOutputSubDir: "./output",
|
||||
jsModuleHeaderRegExpString: "^\\/\\*\\\\(?:\\r?\\n)((?:^[^\\r\\n]*(?:\\r?\\n))+?)(^\\\\\\*\\/$(?:\\r?\\n)?)",
|
||||
fileExtensionInfo: Object.create(null), // Map file extension to {type:}
|
||||
contentTypeInfo: Object.create(null) // Map type to {encoding:,extension:}
|
||||
contentTypeInfo: Object.create(null), // Map type to {encoding:,extension:}
|
||||
pluginsEnvVar: "TIDDLYWIKI_PLUGIN_PATH",
|
||||
themesEnvVar: "TIDDLYWIKI_THEME_PATH",
|
||||
languagesEnvVar: "TIDDLYWIKI_LANGUAGE_PATH",
|
||||
editionsEnvVar: "TIDDLYWIKI_EDITION_PATH"
|
||||
}
|
||||
});
|
||||
if(!options.readBrowserTiddlers) {
|
||||
if(!$tw.boot.tasks.readBrowserTiddlers) {
|
||||
// For writable tiddler files, a hashmap of title to {filepath:,type:,hasMetaFile:}
|
||||
$tw.boot.files = Object.create(null);
|
||||
// System paths and filenames
|
||||
@@ -1618,6 +1727,8 @@ $tw.boot.startup = function(options) {
|
||||
$tw.utils.registerFileType("text/plain","utf8",".txt");
|
||||
$tw.utils.registerFileType("text/css","utf8",".css");
|
||||
$tw.utils.registerFileType("text/html","utf8",".html");
|
||||
$tw.config.fileExtensionInfo[".htm"] = {type: "text/html"};
|
||||
$tw.config.fileExtensionInfo[".hta"] = {type: "text/html"};
|
||||
$tw.utils.registerFileType("application/hta","utf16le",".hta",{deserializerType:"text/html"});
|
||||
$tw.utils.registerFileType("application/javascript","utf8",".js");
|
||||
$tw.utils.registerFileType("application/json","utf8",".json");
|
||||
@@ -1636,7 +1747,7 @@ $tw.boot.startup = function(options) {
|
||||
$tw.Wiki.tiddlerDeserializerModules = Object.create(null);
|
||||
$tw.modules.applyMethods("tiddlerdeserializer",$tw.Wiki.tiddlerDeserializerModules);
|
||||
// Load tiddlers
|
||||
if(options.readBrowserTiddlers) {
|
||||
if($tw.boot.tasks.readBrowserTiddlers) {
|
||||
$tw.loadTiddlersBrowser();
|
||||
} else {
|
||||
$tw.loadTiddlersNode();
|
||||
@@ -1645,6 +1756,10 @@ $tw.boot.startup = function(options) {
|
||||
$tw.wiki.readPluginInfo();
|
||||
$tw.wiki.registerPluginTiddlers("plugin");
|
||||
$tw.wiki.unpackPluginTiddlers();
|
||||
// Process "safe mode"
|
||||
if($tw.safeMode) {
|
||||
$tw.wiki.processSafeMode();
|
||||
}
|
||||
// Register typed modules from the tiddlers we've just loaded
|
||||
$tw.wiki.defineTiddlerModules();
|
||||
// And any modules within plugins
|
||||
@@ -1653,12 +1768,114 @@ $tw.boot.startup = function(options) {
|
||||
if($tw.crypto) {
|
||||
$tw.crypto.updateCryptoStateTiddler();
|
||||
}
|
||||
// Run any startup modules
|
||||
// Gather up any startup modules
|
||||
$tw.boot.remainingStartupModules = []; // Array of startup modules
|
||||
$tw.modules.forEachModuleOfType("startup",function(title,module) {
|
||||
if(module.startup) {
|
||||
module.startup();
|
||||
$tw.boot.remainingStartupModules.push(module);
|
||||
}
|
||||
});
|
||||
// Keep track of the startup tasks that have been executed
|
||||
$tw.boot.executedStartupModules = Object.create(null);
|
||||
$tw.boot.disabledStartupModules = $tw.boot.disabledStartupModules || [];
|
||||
// Repeatedly execute the next eligible task
|
||||
$tw.boot.executeNextStartupTask();
|
||||
};
|
||||
|
||||
/*
|
||||
Execute the remaining eligible startup tasks
|
||||
*/
|
||||
$tw.boot.executeNextStartupTask = function() {
|
||||
// Find the next eligible task
|
||||
var taskIndex = 0, task,
|
||||
asyncTaskCallback = function() {
|
||||
if(task.name) {
|
||||
$tw.boot.executedStartupModules[task.name] = true;
|
||||
}
|
||||
return $tw.boot.executeNextStartupTask();
|
||||
};
|
||||
while(taskIndex < $tw.boot.remainingStartupModules.length) {
|
||||
task = $tw.boot.remainingStartupModules[taskIndex];
|
||||
if($tw.boot.isStartupTaskEligible(task)) {
|
||||
// Remove this task from the list
|
||||
$tw.boot.remainingStartupModules.splice(taskIndex,1);
|
||||
// Assemble log message
|
||||
var s = ["Startup task:",task.name];
|
||||
if(task.platforms) {
|
||||
s.push("platforms:",task.platforms.join(","));
|
||||
}
|
||||
if(task.after) {
|
||||
s.push("after:",task.after.join(","));
|
||||
}
|
||||
if(task.before) {
|
||||
s.push("before:",task.before.join(","));
|
||||
}
|
||||
$tw.boot.log(s.join(" "));
|
||||
// Execute task
|
||||
if(!$tw.utils.hop(task,"synchronous") || task.synchronous) {
|
||||
task.startup();
|
||||
if(task.name) {
|
||||
$tw.boot.executedStartupModules[task.name] = true;
|
||||
}
|
||||
return $tw.boot.executeNextStartupTask();
|
||||
} else {
|
||||
task.startup(asyncTaskCallback);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
taskIndex++;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/*
|
||||
Returns true if we are running on one platforms specified in a task modules `platforms` array
|
||||
*/
|
||||
$tw.boot.doesTaskMatchPlatform = function(taskModule) {
|
||||
var platforms = taskModule.platforms;
|
||||
if(platforms) {
|
||||
for(var t=0; t<platforms.length; t++) {
|
||||
if((platforms[t] === "browser" && !$tw.browser) || (platforms[t] === "node" && !$tw.node)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
$tw.boot.isStartupTaskEligible = function(taskModule) {
|
||||
var t;
|
||||
// Check that the platform is correct
|
||||
if(!$tw.boot.doesTaskMatchPlatform(taskModule)) {
|
||||
return false;
|
||||
}
|
||||
var name = taskModule.name,
|
||||
remaining = $tw.boot.remainingStartupModules;
|
||||
if(name) {
|
||||
// Fail if this module is disabled
|
||||
if($tw.boot.disabledStartupModules.indexOf(name) !== -1) {
|
||||
return false;
|
||||
}
|
||||
// Check that no other outstanding tasks must be executed before this one
|
||||
for(t=0; t<remaining.length; t++) {
|
||||
var task = remaining[t];
|
||||
if(task.before && task.before.indexOf(name) !== -1) {
|
||||
if($tw.boot.doesTaskMatchPlatform(task) || (task.name && $tw.boot.disabledStartupModules.indexOf(name) !== -1)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Check that all of the tasks that we must be performed after has been done
|
||||
var after = taskModule.after;
|
||||
if(after) {
|
||||
for(t=0; t<after.length; t++) {
|
||||
if(!$tw.boot.executedStartupModules[after[t]]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
/////////////////////////// Main boot function to decrypt tiddlers and then startup
|
||||
@@ -1667,15 +1884,13 @@ $tw.boot.boot = function() {
|
||||
// Initialise crypto object
|
||||
$tw.crypto = new $tw.utils.Crypto();
|
||||
// Initialise password prompter
|
||||
if($tw.browser) {
|
||||
if($tw.browser && !$tw.node) {
|
||||
$tw.passwordPrompt = new $tw.utils.PasswordPrompt();
|
||||
}
|
||||
// Preload any encrypted tiddlers
|
||||
$tw.boot.decryptEncryptedTiddlers(function() {
|
||||
// Startup
|
||||
$tw.boot.startup({
|
||||
readBrowserTiddlers: !!$tw.browser
|
||||
});
|
||||
$tw.boot.startup();
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -16,13 +16,20 @@ var _bootprefix = (function($tw) {
|
||||
|
||||
"use strict";
|
||||
|
||||
$tw = $tw || {};
|
||||
$tw = $tw || Object.create(null);
|
||||
$tw.boot = $tw.boot || Object.create(null);
|
||||
|
||||
// Detect platforms
|
||||
$tw.browser = typeof(window) !== "undefined" ? {} : null;
|
||||
$tw.node = typeof(process) === "object" ? {} : null;
|
||||
$tw.nodeWebKit = $tw.node && global.window && global.window.nwDispatcher ? {} : null;
|
||||
|
||||
// Set default boot tasks
|
||||
$tw.boot.tasks = {
|
||||
trapErrors: !!($tw.browser && !$tw.node),
|
||||
readBrowserTiddlers: !!($tw.browser && !$tw.node)
|
||||
};
|
||||
|
||||
/*
|
||||
Information about each module is kept in an object with these members:
|
||||
moduleType: type of module
|
||||
|
||||
File diff suppressed because one or more lines are too long
12
core/acknowledgements.tid
Normal file
12
core/acknowledgements.tid
Normal file
@@ -0,0 +1,12 @@
|
||||
title: $:/Acknowledgements
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
TiddlyWiki incorporates code from these fine OpenSource projects:
|
||||
|
||||
* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]
|
||||
* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]
|
||||
* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]
|
||||
|
||||
And media from these projects:
|
||||
|
||||
* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]
|
||||
8
core/icon.tid
Normal file
8
core/icon.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/icon
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z M85.1274062,95.4080042 C81.5494069,95.3047989 79.9756384,95.3136745 78.1534289,92.2560668 L76.733228,92.2975844 C75.0801573,92.2226776 75.7690718,92.256631 74.6662332,92.2006037 C72.822332,92.1273894 73.1177105,90.3396383 72.7933215,89.3950941 C72.2744094,86.1888106 73.4800004,82.9659571 73.4419681,79.7590415 C73.428503,78.6206623 71.8498363,74.5912119 71.2858469,73.150598 C69.5178104,73.490271 67.7401827,73.5550323 65.9465048,73.6462337 C61.8120677,73.6358996 57.7056703,73.1192806 53.628962,72.4632293 C52.8345141,75.8119659 50.473106,80.4990751 52.4249964,83.9024219 C54.794228,87.4227874 56.45684,88.3980868 59.0339286,88.6103485 C61.6109895,88.8224384 62.1929077,91.7913467 61.5694236,92.8517379 C61.0175661,93.5845847 60.0476425,93.7176093 59.2235739,93.8951553 L57.5752147,93.9742093 C56.2780933,93.9296822 55.1187057,93.5723203 53.9629071,93.0211763 C52.0327307,91.9217335 50.0392154,89.6360411 48.5580719,87.9950695 C48.9028934,88.6503604 49.1085703,89.9296134 48.7958122,90.5249222 C47.9200982,91.7907825 44.1326257,91.7830485 42.3980986,90.996433 C40.4277043,90.1030197 35.6664658,83.8299171 34.9303347,79.1316435 C36.8887135,75.3525836 39.7416856,72.0607931 41.1850909,67.9459622 C38.038852,65.8974525 36.3537697,62.5626501 36.5725198,58.7851619 L36.6514762,58.3478913 C33.5557196,58.9392548 35.1611076,58.7192345 31.8308843,58.9762949 C21.2252017,58.9431831 11.8983553,51.6054609 17.1501626,40.2013394 C17.4916881,39.5260388 17.8165752,38.9120742 18.3955298,39.205288 C18.8602051,39.440565 18.793457,40.3843583 18.5597268,41.4309776 C15.5577203,55.057365 30.2297484,55.161659 39.2489049,52.6401668 C40.1440491,52.3898612 41.9243599,50.7040626 43.1576153,50.1452033 C45.1734825,49.231769 47.3615008,48.8611654 49.5329344,48.5941256 C54.9337165,47.9661653 61.4247946,50.8693254 64.7228943,50.9641212 C68.0210328,51.0589131 72.7127563,50.1582941 75.5928121,50.3479196 C77.6825379,50.4454833 79.734518,50.8303777 81.7507717,51.3786556 C83.0558682,44.8897102 83.1481363,40.1071855 86.2420439,39 C88.0578592,39.2926449 89.4570618,41.8175853 90.4927503,43.1666676 C92.6062592,43.0809984 94.6134653,43.6270518 96.6091885,44.233091 C100.222332,43.7098824 103.254293,41.6394732 106.445091,40.0288813 C103.211767,42.7223157 102.77315,47.1042714 103.142605,51.1564486 C103.280001,53.2591496 102.697713,55.5420684 101.977868,57.6949551 C100.630795,61.2025356 98.0292951,64.8997754 95.009908,64.7101481 C93.868464,64.673306 93.2053722,64.0138 92.3570101,63.3096933 C92.1924386,64.7358711 91.5456263,66.0084523 90.9221089,67.2697748 C89.4822206,70.066388 85.7194927,71.2987762 82.2354164,74.2849828 C78.7515768,77.2712347 83.3502408,87.9363951 84.4652464,89.8796277 C85.5800708,91.8230453 88.6922789,92.5339992 87.484639,94.28798 C87.1151913,94.8672415 86.5502884,95.0744181 85.9465544,95.2991347 L85.1274062,95.4080042 Z M45.0303574,86.5575217 L45.5828655,86.699414 C46.277142,86.4290005 47.6727292,86.8469317 48.4130246,87.0512628 C47.0498362,85.7357167 44.9960929,83.8038623 43.5164417,82.5859671 C43.0307739,81.1115156 43.2380006,79.6278431 43.3424927,78.122648 L43.3634516,77.9981264 C42.7802099,79.2030731 42.040056,80.3743566 41.6422405,81.6426885 C41.176708,83.3537773 43.7112632,85.1999538 44.6940603,86.2580263 L45.0303574,86.5575217 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
9
core/images/chevron-left.tid
Normal file
9
core/images/chevron-left.tid
Normal file
@@ -0,0 +1,9 @@
|
||||
title: $:/core/images/chevron-left
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-chevron-left tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128" version="1.1">
|
||||
<g>
|
||||
<path d="M97.7982405,98.1688105 L152.184015,43.4979042 C155.938662,39.7236635 155.938662,33.6043964 152.184015,29.8301557 C148.429583,26.0559364 142.342116,26.0559364 138.587684,29.8301557 L91.0000107,77.667222 L43.4123803,29.8301557 C39.6578195,26.0559364 33.5704813,26.0559364 29.8159206,29.8301557 C26.0613598,33.6043964 26.0613598,39.7236635 29.8159206,43.4979042 L84.2017595,98.1688105 C87.9563202,101.943051 94.0436798,101.943051 97.7982405,98.1688126 L97.7982405,98.1688105 Z" transform="translate(91.000000, 63.999491) rotate(-270.000000) translate(-91.000000, -63.999491) "></path>
|
||||
<path d="M43.7982405,98.1688105 L98.1840153,43.4979042 C101.938662,39.7236635 101.938662,33.6043964 98.1840153,29.8301557 C94.4295828,26.0559364 88.3421164,26.0559364 84.5876838,29.8301557 L37.0000107,77.667222 L-10.5876197,29.8301557 C-14.3421805,26.0559364 -20.4295187,26.0559364 -24.1840794,29.8301557 C-27.9386402,33.6043964 -27.9386402,39.7236635 -24.1840794,43.4979042 L30.2017595,98.1688105 C33.9563202,101.943051 40.0436798,101.943051 43.7982405,98.1688126 L43.7982405,98.1688105 Z" transform="translate(37.000000, 63.999491) rotate(-270.000000) translate(-37.000000, -63.999491) "></path>
|
||||
</g>
|
||||
</svg>
|
||||
9
core/images/chevron-right.tid
Normal file
9
core/images/chevron-right.tid
Normal file
@@ -0,0 +1,9 @@
|
||||
title: $:/core/images/chevron-right
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-chevron-right tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g>
|
||||
<path d="M97.7982405,98.1688105 L152.184015,43.4979042 C155.938662,39.7236635 155.938662,33.6043964 152.184015,29.8301557 C148.429583,26.0559364 142.342116,26.0559364 138.587684,29.8301557 L91.0000107,77.667222 L43.4123803,29.8301557 C39.6578195,26.0559364 33.5704813,26.0559364 29.8159206,29.8301557 C26.0613598,33.6043964 26.0613598,39.7236635 29.8159206,43.4979042 L84.2017595,98.1688105 C87.9563202,101.943051 94.0436798,101.943051 97.7982405,98.1688126 L97.7982405,98.1688105 Z" transform="translate(91.000000, 63.999491) rotate(-90.000000) translate(-91.000000, -63.999491) "></path>
|
||||
<path d="M43.7982405,98.1688105 L98.1840153,43.4979042 C101.938662,39.7236635 101.938662,33.6043964 98.1840153,29.8301557 C94.4295828,26.0559364 88.3421164,26.0559364 84.5876838,29.8301557 L37.0000107,77.667222 L-10.5876197,29.8301557 C-14.3421805,26.0559364 -20.4295187,26.0559364 -24.1840794,29.8301557 C-27.9386402,33.6043964 -27.9386402,39.7236635 -24.1840794,43.4979042 L30.2017595,98.1688105 C33.9563202,101.943051 40.0436798,101.943051 43.7982405,98.1688126 L43.7982405,98.1688105 Z" transform="translate(37.000000, 63.999491) rotate(-90.000000) translate(-37.000000, -63.999491) "></path>
|
||||
</g>
|
||||
</svg>
|
||||
9
core/images/clone-button.tid
Normal file
9
core/images/clone-button.tid
Normal file
@@ -0,0 +1,9 @@
|
||||
title: $:/core/images/clone-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-clone-button tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M32.2650915,96 L32.2650915,120.002359 C32.2650915,124.419334 35.8432884,128 40.2627323,128 L120.002359,128 C124.419334,128 128,124.421803 128,120.002359 L128,40.2627323 C128,35.8457573 124.421803,32.2650915 120.002359,32.2650915 L96,32.2650915 L96,48 L108.858899,48 C110.519357,48 111.853018,49.3405131 111.853018,50.9941198 L111.853018,108.858899 C111.853018,110.519357 110.512505,111.853018 108.858899,111.853018 L50.9941198,111.853018 C49.333661,111.853018 48,110.512505 48,108.858899 L48,96 L32.2650915,96 Z"></path>
|
||||
<path d="M40,56 L32.0070969,56 C27.5881712,56 24,52.418278 24,48 C24,43.5907123 27.5848994,40 32.0070969,40 L40,40 L40,32.0070969 C40,27.5881712 43.581722,24 48,24 C52.4092877,24 56,27.5848994 56,32.0070969 L56,40 L63.9929031,40 C68.4118288,40 72,43.581722 72,48 C72,52.4092877 68.4151006,56 63.9929031,56 L56,56 L56,63.9929031 C56,68.4118288 52.418278,72 48,72 C43.5907123,72 40,68.4151006 40,63.9929031 L40,56 Z M7.9992458,0 C3.58138434,0 0,3.5881049 0,7.9992458 L0,88.0007542 C0,92.4186157 3.5881049,96 7.9992458,96 L88.0007542,96 C92.4186157,96 96,92.4118951 96,88.0007542 L96,7.9992458 C96,3.58138434 92.4118951,0 88.0007542,0 L7.9992458,0 Z M19.0010118,16 C17.3435988,16 16,17.336731 16,19.0010118 L16,76.9989882 C16,78.6564012 17.336731,80 19.0010118,80 L76.9989882,80 C78.6564012,80 80,78.663269 80,76.9989882 L80,19.0010118 C80,17.3435988 78.663269,16 76.9989882,16 L19.0010118,16 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
15
core/images/close-all-button.tid
Normal file
15
core/images/close-all-button.tid
Normal file
@@ -0,0 +1,15 @@
|
||||
title: $:/core/images/close-all-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-close-all-button tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M53.9827008,89.3556477 C56.4275461,87.3639978 57.9887999,84.3311393 57.9887999,80.9340168 C57.9887999,74.9354419 53.1208368,70.0726361 47.1158999,70.0726361 C44.078736,70.0726361 41.3324226,71.3165963 39.359689,73.3222993 L39.3567754,73.3194062 L3.099103,109.537527 L3.10272197,109.541128 C1.18328516,111.499774 0,114.181157 0,117.138619 C0,123.137194 4.86796314,128 10.8729,128 C13.8490664,128 16.5459476,126.805505 18.5093193,124.870257 L18.5232339,124.884102 L53.9827008,89.3556477 Z"></path>
|
||||
<path d="M53.9827008,19.3556477 C56.4275461,17.3639978 57.9887999,14.3311393 57.9887999,10.9340168 C57.9887999,4.93544186 53.1208368,0.0726360641 47.1158999,0.0726360641 C44.078736,0.0726360641 41.3324226,1.31659634 39.359689,3.3222993 L39.3567754,3.31940621 L3.099103,39.5375274 L3.10272197,39.5411281 C1.18328516,41.4997737 0,44.1811574 0,47.1386193 C0,53.1371942 4.86796314,58 10.8729,58 C13.8490664,58 16.5459476,56.8055047 18.5093193,54.870257 L18.5232339,54.8841017 L53.9827008,19.3556477 Z"></path>
|
||||
<path d="M123.982701,19.3556477 C126.427546,17.3639978 127.9888,14.3311393 127.9888,10.9340168 C127.9888,4.93544186 123.120837,0.0726360641 117.1159,0.0726360641 C114.078736,0.0726360641 111.332423,1.31659634 109.359689,3.3222993 L109.356775,3.31940621 L73.099103,39.5375274 L73.102722,39.5411281 C71.1832852,41.4997737 70,44.1811574 70,47.1386193 C70,53.1371942 74.8679631,58 80.8729,58 C83.8490664,58 86.5459476,56.8055047 88.5093193,54.870257 L88.5232339,54.8841017 L123.982701,19.3556477 Z"></path>
|
||||
<path d="M123.982701,89.3556477 C126.427546,87.3639978 127.9888,84.3311393 127.9888,80.9340168 C127.9888,74.9354419 123.120837,70.0726361 117.1159,70.0726361 C114.078736,70.0726361 111.332423,71.3165963 109.359689,73.3222993 L109.356775,73.3194062 L73.099103,109.537527 L73.102722,109.541128 C71.1832852,111.499774 70,114.181157 70,117.138619 C70,123.137194 74.8679631,128 80.8729,128 C83.8490664,128 86.5459476,126.805505 88.5093193,124.870257 L88.5232339,124.884102 L123.982701,89.3556477 Z"></path>
|
||||
<path d="M19.0968372,73.831398 C17.1051319,71.5224249 14.1594885,70.0611168 10.8729,70.0611168 C4.87432504,70.0611168 0.0115192444,74.92908 0.0115192444,80.9340168 C0.0115192444,84.1948309 1.44542995,87.1203819 3.71646837,89.1132541 L39.4956787,124.931536 L39.5183554,124.908745 C41.4770057,126.828213 44.1584112,128.011519 47.1158999,128.011519 C53.1144749,128.011519 57.9772807,123.143556 57.9772807,117.138619 C57.9772807,113.981762 56.6333409,111.139133 54.4869671,109.152809 L19.0968372,73.831398 Z"></path>
|
||||
<path d="M19.0968372,3.83139798 C17.1051319,1.52242486 14.1594885,0.0611168197 10.8729,0.0611168197 C4.87432504,0.0611168197 0.0115192444,4.92907996 0.0115192444,10.9340168 C0.0115192444,14.1948309 1.44542995,17.1203819 3.71646837,19.1132541 L39.4956787,54.9315363 L39.5183554,54.908745 C41.4770057,56.8282126 44.1584112,58.0115192 47.1158999,58.0115192 C53.1144749,58.0115192 57.9772807,53.1435561 57.9772807,47.1386193 C57.9772807,43.9817625 56.6333409,41.1391325 54.4869671,39.1528094 L19.0968372,3.83139798 Z"></path>
|
||||
<path d="M89.0968372,3.83139798 C87.1051319,1.52242486 84.1594885,0.0611168197 80.8729,0.0611168197 C74.874325,0.0611168197 70.0115192,4.92907996 70.0115192,10.9340168 C70.0115192,14.1948309 71.4454299,17.1203819 73.7164684,19.1132541 L109.495679,54.9315363 L109.518355,54.908745 C111.477006,56.8282126 114.158411,58.0115192 117.1159,58.0115192 C123.114475,58.0115192 127.977281,53.1435561 127.977281,47.1386193 C127.977281,43.9817625 126.633341,41.1391325 124.486967,39.1528094 L89.0968372,3.83139798 Z"></path>
|
||||
<path d="M89.0968372,73.831398 C87.1051319,71.5224249 84.1594885,70.0611168 80.8729,70.0611168 C74.874325,70.0611168 70.0115192,74.92908 70.0115192,80.9340168 C70.0115192,84.1948309 71.4454299,87.1203819 73.7164684,89.1132541 L109.495679,124.931536 L109.518355,124.908745 C111.477006,126.828213 114.158411,128.011519 117.1159,128.011519 C123.114475,128.011519 127.977281,123.143556 127.977281,117.138619 C127.977281,113.981762 126.633341,111.139133 124.486967,109.152809 L89.0968372,73.831398 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
8
core/images/close-others-button.tid
Normal file
8
core/images/close-others-button.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/images/close-others-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-close-others-button tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 127">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z M64,96 C81.673112,96 96,81.673112 96,64 C96,46.326888 81.673112,32 64,32 C46.326888,32 32,46.326888 32,64 C32,81.673112 46.326888,96 64,96 Z M64,80 C72.836556,80 80,72.836556 80,64 C80,55.163444 72.836556,48 64,48 C55.163444,48 48,55.163444 48,64 C48,72.836556 55.163444,80 64,80 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
4
core/images/download-button.tid
Normal file
4
core/images/download-button.tid
Normal file
@@ -0,0 +1,4 @@
|
||||
title: $:/core/images/download-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-download-button tw-image-button" width="22pt" height="22pt" viewBox="0 0 129 128"><g fill-rule="evenodd"><path class="tw-image-download-button-ring" d="M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z"/><path d="M34.3496823,66.4308767 L61.2415823,93.634668 C63.0411536,95.4551107 65.9588502,95.4551107 67.7584215,93.634668 L94.6503215,66.4308767 C96.4498928,64.610434 96.4498928,61.6588981 94.6503215,59.8384554 C93.7861334,58.9642445 92.6140473,58.4731195 91.3919019,58.4731195 L82.9324098,58.4731195 C80.3874318,58.4731195 78.3243078,56.3860674 78.3243078,53.8115729 L78.3243078,38.6615466 C78.3243078,36.0870521 76.2611837,34 73.7162058,34 L55.283798,34 C52.7388201,34 50.675696,36.0870521 50.675696,38.6615466 L50.675696,38.6615466 L50.675696,53.8115729 C50.675696,56.3860674 48.612572,58.4731195 46.0675941,58.4731195 L37.608102,58.4731195 C35.063124,58.4731195 33,60.5601716 33,63.134666 C33,64.3709859 33.4854943,65.5566658 34.3496823,66.4308767 L34.3496823,66.4308767 Z"/></g></svg>
|
||||
8
core/images/export-button.tid
Normal file
8
core/images/export-button.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/images/export-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-export-button tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M128.078948,81.2190241 L128.078948,103.072887 C128.078948,110.252507 122.258391,116.079527 115.07837,116.079527 L13.0007031,116.079527 C5.81517113,116.079527 0.0001254444,110.256256 0.0001254444,103.072887 L0.0001254444,60.043677 C0.0001254444,52.8640576 5.82068232,47.037037 13.0007031,47.037037 L50.9939627,47.037037 C46.9232966,53.1682159 47.3681412,61.433368 52.4317358,67.049353 L36.0221654,67.049353 C31.0486129,67.049353 27.016752,71.0784493 27.016752,76.0490922 L27.016752,86.0668561 C27.016752,91.0372749 31.0503474,95.0665954 36.0221654,95.0665954 L92.0569077,95.0665954 C97.0304602,95.0665954 101.062321,91.0374991 101.062321,86.0668561 L101.062321,76.6968446 L104.185741,73.5608014 L108.938546,78.3104149 C114.124001,83.4958696 121.907794,84.4351094 128.078948,81.2190241 L128.078948,81.2190241 Z M126.997239,16.6885444 C127.022653,13.3460126 124.333584,10.6569433 120.991052,10.682357 L71.0419165,11.0621275 C67.6993847,11.0875413 64.9691114,13.8178146 64.9436976,17.1603465 C64.9314934,18.7654933 65.5574285,20.3000438 66.6838081,21.4264234 L74.4804244,29.2230397 C76.8259808,31.5685961 76.7968452,35.4006519 74.4153482,37.7821489 L60.4010471,51.79645 C58.0195502,54.1779469 57.9904145,58.0100028 60.3359709,60.3555592 L77.324037,77.3436253 C79.6695934,79.6891817 83.5016493,79.6600461 85.8831462,77.2785491 L99.8974474,63.264248 C102.278944,60.8827511 106.111,60.8536154 108.456557,63.1991718 L116.253173,70.9957881 C118.598729,73.3413446 122.430785,73.3122089 124.812282,70.930712 C125.955921,69.7870731 126.605265,68.2428265 126.617469,66.6376797 L126.997239,16.6885444 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
19
core/images/full-screen-button.tid
Normal file
19
core/images/full-screen-button.tid
Normal file
@@ -0,0 +1,19 @@
|
||||
title: $:/core/images/full-screen-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-full-screen-button tw-image-button" class="tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z"></path>
|
||||
</g>
|
||||
<g transform="translate(104.000000, 104.000000) rotate(-180.000000) translate(-104.000000, -104.000000) translate(80.000000, 80.000000)">
|
||||
<path d="M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z"></path>
|
||||
</g>
|
||||
<g transform="translate(24.000000, 104.000000) rotate(-90.000000) translate(-24.000000, -104.000000) translate(0.000000, 80.000000)">
|
||||
<path d="M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z"></path>
|
||||
</g>
|
||||
<g transform="translate(104.000000, 24.000000) rotate(90.000000) translate(-104.000000, -24.000000) translate(80.000000, 0.000000)">
|
||||
<path d="M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
10
core/images/globe.tid
Normal file
10
core/images/globe.tid
Normal file
@@ -0,0 +1,10 @@
|
||||
title: $:/core/images/globe
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-globe tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M72.8111354,37.1275855 C72.8111354,37.9789875 72.8111354,38.8303894 72.8111354,39.6817913 C72.8111354,41.8784743 73.7885604,46.5631866 72.8111354,48.5143758 C71.3445471,51.4420595 68.1617327,52.0543531 66.4170946,54.3812641 C65.2352215,55.9575873 61.7987417,64.9821523 62.7262858,67.3005778 C66.6959269,77.2228204 74.26087,70.4881886 80.6887657,76.594328 C81.5527211,77.415037 83.5758191,78.8666631 83.985137,79.8899578 C87.2742852,88.1128283 76.4086873,94.8989524 87.7419325,106.189751 C88.9872885,107.430443 91.555495,102.372895 91.8205061,101.575869 C92.6726866,99.0129203 98.5458765,96.1267309 100.908882,94.5234439 C102.928056,93.1534443 105.782168,91.8557166 107.236936,89.7775886 C109.507391,86.5342557 108.717505,82.2640435 110.334606,79.0328716 C112.473794,74.7585014 114.163418,69.3979002 116.332726,65.0674086 C120.230862,57.2857361 121.054075,67.1596684 121.400359,67.5059523 C121.757734,67.8633269 122.411167,67.5059523 122.916571,67.5059523 C123.011132,67.5059523 124.364019,67.6048489 124.432783,67.5059523 C125.0832,66.5705216 123.390209,49.5852316 123.114531,48.2089091 C121.710578,41.1996597 116.17083,32.4278331 111.249523,27.7092761 C104.975994,21.6942076 104.160516,11.5121686 92.9912146,12.7547535 C92.7872931,12.7774397 87.906794,22.9027026 85.2136766,26.2672064 C81.486311,30.9237934 82.7434931,22.1144904 78.6876623,22.1144904 C78.6065806,22.1144904 77.5045497,22.0107615 77.4353971,22.1144904 C76.8488637,22.9942905 75.9952305,26.0101404 75.1288269,26.5311533 C74.8635477,26.6906793 73.4071369,26.2924966 73.2826811,26.5311533 C71.0401728,30.8313939 81.5394677,28.7427264 79.075427,34.482926 C76.7225098,39.9642538 72.747373,32.4860199 72.747373,43.0434079"></path>
|
||||
<path d="M44.4668556,7.01044608 C54.151517,13.1403033 45.1489715,19.2084878 47.1611905,23.2253896 C48.8157833,26.5283781 51.4021933,28.6198851 48.8753629,33.038878 C46.8123257,36.6467763 42.0052989,37.0050492 39.251679,39.7621111 C36.2115749,42.8060154 33.7884281,48.7028116 32.4624592,52.6732691 C30.8452419,57.5158356 47.0088721,59.5388126 44.5246867,63.6811917 C43.1386839,65.9923513 37.7785192,65.1466282 36.0880227,63.8791519 C34.9234453,63.0059918 32.4946425,63.3331166 31.6713597,62.0997342 C29.0575851,58.1839669 29.4107339,54.0758543 28.0457962,49.9707786 C27.1076833,47.1493864 21.732611,47.8501656 20.2022714,49.3776393 C19.6790362,49.8998948 19.8723378,51.1703278 19.8723378,51.8829111 C19.8723378,57.1682405 26.9914913,55.1986414 26.9914913,58.3421973 C26.9914913,72.9792302 30.9191897,64.8771867 38.1313873,69.6793121 C48.1678018,76.3618966 45.9763926,76.981595 53.0777543,84.0829567 C56.7511941,87.7563965 60.8192437,87.7689005 62.503478,93.3767069 C64.1046972,98.7081071 53.1759798,98.7157031 50.786754,100.825053 C49.663965,101.816317 47.9736094,104.970571 46.5680513,105.439676 C44.7757187,106.037867 43.334221,105.93607 41.6242359,107.219093 C39.1967302,109.040481 37.7241465,112.151588 37.6034934,112.030935 C35.4555278,109.88297 34.0848666,96.5511248 33.7147244,93.7726273 C33.1258872,89.3524817 28.1241923,88.2337027 26.7275443,84.7420826 C25.1572737,80.8164061 28.2518481,75.223612 25.599097,70.9819941 C19.0797019,60.557804 13.7775712,56.4811506 10.2493953,44.6896152 C9.3074899,41.5416683 13.5912267,38.1609942 15.1264825,35.8570308 C17.0029359,33.0410312 17.7876232,30.0028946 19.8723378,27.2224065 C22.146793,24.1888519 40.8551166,9.46076832 43.8574051,8.63490613 L44.4668556,7.01044608 Z"></path>
|
||||
<path d="M64,126 C98.2416545,126 126,98.2416545 126,64 C126,29.7583455 98.2416545,2 64,2 C29.7583455,2 2,29.7583455 2,64 C2,98.2416545 29.7583455,126 64,126 Z M64,120 C94.927946,120 120,94.927946 120,64 C120,33.072054 94.927946,8 64,8 C33.072054,8 8,33.072054 8,64 C8,94.927946 33.072054,120 64,120 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
8
core/images/import-button.tid
Normal file
8
core/images/import-button.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/images/import-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-import-button tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M105.449437,94.2138951 C105.449437,94.2138951 110.049457,94.1897106 110.049457,99.4026111 C110.049457,104.615512 105.163246,104.615511 105.163246,104.615511 L45.0075072,105.157833 C45.0075072,105.157833 0.367531803,106.289842 0.367532368,66.6449212 C0.367532934,27.0000003 45.0428249,27.0000003 45.0428249,27.0000003 L105.532495,27.0000003 C105.532495,27.0000003 138.996741,25.6734987 138.996741,55.1771866 C138.996741,84.6808745 105.727102,82.8457535 105.727102,82.8457535 L56.1735087,82.8457535 C56.1735087,82.8457535 22.6899229,85.1500223 22.6899229,66.0913753 C22.6899229,47.0327282 56.1735087,49.3383013 56.1735087,49.3383013 L105.727102,49.3383013 C105.727102,49.3383013 111.245209,49.3383024 111.245209,54.8231115 C111.245209,60.3079206 105.727102,60.5074524 105.727102,60.5074524 L56.1735087,60.5074524 C56.1735087,60.5074524 37.48913,60.5074528 37.48913,66.6449195 C37.48913,72.7823862 56.1735087,71.6766023 56.1735087,71.6766023 L105.727102,71.6766029 C105.727102,71.6766029 127.835546,73.1411469 127.835546,55.1771866 C127.835546,35.5304025 105.727102,38.3035317 105.727102,38.3035317 L45.0428249,38.3035317 C45.0428249,38.3035317 11.5287276,38.3035313 11.5287276,66.6449208 C11.5287276,94.9863103 45.0428244,93.9579678 45.0428244,93.9579678 L105.449437,94.2138951 Z" transform="translate(69.367532, 66.000000) rotate(-45.000000) translate(-69.367532, -66.000000) "></path>
|
||||
</g>
|
||||
</svg>
|
||||
8
core/images/locked-padlock.tid
Normal file
8
core/images/locked-padlock.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/images/locked-padlock
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-locked-padlock tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M96.4723753,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L32.0000269,64 C32.0028554,48.2766389 32.3030338,16.2688026 64.1594984,16.2688041 C95.9543927,16.2688056 96.4648869,48.325931 96.4723753,64 Z M80.5749059,64 L48.4413579,64 C48.4426205,47.71306 48.5829272,31.9999996 64.1595001,31.9999996 C79.8437473,31.9999996 81.1369461,48.1359182 80.5749059,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
8
core/images/permalink-button.tid
Normal file
8
core/images/permalink-button.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/images/permalink-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-permalink-button tw-image-button" width="22pt" height="22pt" viewBox="0 0 129 125">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M114,92.0520153 L85.0841463,92.0520153 L77.4459963,128.151367 L64.6248159,128.151367 L72.2629659,92.0520153 L47.8936301,92.0520153 L40.2554801,128.151367 L27.4342997,128.151367 L35.0724497,92.0520153 L17.7047515,92.0520153 L17.7047515,80.1401384 L37.6184997,80.1401384 L44.5292069,47.4961401 L17.7047515,47.4961401 L17.7047515,35.5842633 L46.9843266,35.5842633 L54.6224766,-0.151367188 L67.443657,-0.151367188 L59.805507,35.5842633 L84.1748428,35.5842633 L91.8129928,-0.151367188 L104.634173,-0.151367188 L97.0869535,35.5842633 L114,35.5842633 L114,47.4961401 L94.6318339,47.4961401 L87.7211267,80.1401384 L114,80.1401384 L114,92.0520153 Z M81.8106535,47.4961401 L57.3503873,47.4961401 L50.5306105,80.1401384 L74.8999463,80.1401384 L81.8106535,47.4961401 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
10
core/images/permaview-button.tid
Normal file
10
core/images/permaview-button.tid
Normal file
@@ -0,0 +1,10 @@
|
||||
title: $:/core/images/permaview-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-permaview-button tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M111.6744,92.2645264 L82.9006479,92.2645264 L75.300034,128.289805 L62.5418608,128.289805 L70.1424746,92.2645264 L45.8928971,92.2645264 L38.2922833,128.289805 L25.53411,128.289805 L33.1347239,92.2645264 L15.8523757,92.2645264 L15.8523757,80.3770918 L35.6682618,80.3770918 L42.5450077,47.8000762 L15.8523757,47.8000762 L15.8523757,35.9126416 L44.9880621,35.9126416 L52.588676,0.250337625 L65.3468492,0.250337625 L57.7462354,35.9126416 L81.9958129,35.9126416 L89.5964268,0.250337625 L102.3546,0.250337625 L94.8444696,35.9126416 L111.6744,35.9126416 L111.6744,47.8000762 L92.4014152,47.8000762 L85.5246693,80.3770918 L111.6744,80.3770918 L111.6744,92.2645264 Z M79.643242,47.8000762 L55.3031809,47.8000762 L48.5169186,80.3770918 L72.7664961,80.3770918 L79.643242,47.8000762 Z"></path>
|
||||
<rect x="15.9992745" y="57.8809888" width="95.528227" height="11.975377"></rect>
|
||||
<path d="M70.8113396,0.098602426 L83.5061663,0.219342965 L56.0934841,128.105958 L43.968839,128.22602 L70.8113396,0.098602426 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
8
core/images/plugin-generic-language.tid
Normal file
8
core/images/plugin-generic-language.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/images/plugin-generic-language
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M61.2072232,68.1369825 C56.8829239,70.9319564 54.2082892,74.793177 54.2082892,79.0581634 C54.2082892,86.9638335 63.3980995,93.4821994 75.2498076,94.3940006 C77.412197,98.2964184 83.8475284,101.178858 91.5684735,101.403106 C86.4420125,100.27851 82.4506393,97.6624107 80.9477167,94.3948272 C92.8046245,93.4861461 102,86.9662269 102,79.0581634 C102,70.5281905 91.3014611,63.6132813 78.1041446,63.6132813 C71.5054863,63.6132813 65.5315225,65.3420086 61.2072232,68.1369825 Z M74.001066,53.9793443 C69.6767667,56.7743182 63.7028029,58.5030456 57.1041446,58.5030456 C54.4851745,58.5030456 51.9646095,58.2307276 49.6065315,57.7275105 C46.2945155,59.9778212 41.2235699,61.4171743 35.5395922,61.4171743 C35.4545771,61.4171743 35.3696991,61.4168523 35.2849622,61.4162104 C39.404008,60.5235193 42.7961717,58.6691298 44.7630507,56.286533 C37.8379411,53.5817651 33.2082892,48.669413 33.2082892,43.0581634 C33.2082892,34.5281905 43.9068281,27.6132812 57.1041446,27.6132812 C70.3014611,27.6132812 81,34.5281905 81,43.0581634 C81,47.3231498 78.3253653,51.1843704 74.001066,53.9793443 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
8
core/images/plugin-generic-plugin.tid
Normal file
8
core/images/plugin-generic-plugin.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/images/plugin-generic-plugin
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M40.3972881,76.4456988 L40.3972881,95.3404069 L54.5170166,95.3404069 L54.5170166,95.3404069 C54.5165526,95.3385183 54.516089,95.3366295 54.515626,95.3347404 C54.6093153,95.3385061 54.7034848,95.3404069 54.7980982,95.3404069 C58.6157051,95.3404069 61.710487,92.245625 61.710487,88.4280181 C61.710487,86.6197822 61.01617,84.9737128 59.8795929,83.7418666 L59.8795929,83.7418666 C59.8949905,83.7341665 59.9104102,83.7265043 59.925852,83.7188798 C58.8840576,82.5086663 58.2542926,80.9336277 58.2542926,79.2114996 C58.2542926,75.3938927 61.3490745,72.2991108 65.1666814,72.2991108 C68.9842884,72.2991108 72.0790703,75.3938927 72.0790703,79.2114996 C72.0790703,81.1954221 71.2432806,82.9841354 69.9045961,84.2447446 L69.9045961,84.2447446 C69.9333407,84.2629251 69.9619885,84.281245 69.9905383,84.2997032 L69.9905383,84.2997032 C69.1314315,85.4516923 68.6228758,86.8804654 68.6228758,88.4280181 C68.6228758,91.8584969 71.1218232,94.7053153 74.3986526,95.2474079 C74.3913315,95.2784624 74.3838688,95.3094624 74.3762652,95.3404069 L95.6963988,95.3404069 L95.6963988,75.5678578 L95.6963988,75.5678578 C95.6466539,75.5808558 95.5967614,75.5934886 95.5467242,75.6057531 C95.5504899,75.5120637 95.5523907,75.4178943 95.5523907,75.3232809 C95.5523907,71.505674 92.4576088,68.4108921 88.6400019,68.4108921 C86.831766,68.4108921 85.1856966,69.105209 83.9538504,70.2417862 L83.9538504,70.2417862 C83.9461503,70.2263886 83.938488,70.2109688 83.9308636,70.1955271 C82.7206501,71.2373215 81.1456115,71.8670865 79.4234834,71.8670865 C75.6058765,71.8670865 72.5110946,68.7723046 72.5110946,64.9546976 C72.5110946,61.1370907 75.6058765,58.0423088 79.4234834,58.0423088 C81.4074059,58.0423088 83.1961192,58.8780985 84.4567284,60.2167829 L84.4567284,60.2167829 C84.4749089,60.1880383 84.4932288,60.1593906 84.511687,60.1308407 L84.511687,60.1308407 C85.6636761,60.9899475 87.0924492,61.4985032 88.6400019,61.4985032 C92.0704807,61.4985032 94.9172991,58.9995558 95.4593917,55.7227265 C95.538755,55.7414363 95.6177614,55.761071 95.6963988,55.7816184 L95.6963988,40.0412962 L74.3762652,40.0412962 L74.3762652,40.0412962 C74.3838688,40.0103516 74.3913315,39.9793517 74.3986526,39.9482971 L74.3986526,39.9482971 C71.1218232,39.4062046 68.6228758,36.5593862 68.6228758,33.1289073 C68.6228758,31.5813547 69.1314315,30.1525815 69.9905383,29.0005925 C69.9619885,28.9821342 69.9333407,28.9638143 69.9045961,28.9456339 C71.2432806,27.6850247 72.0790703,25.8963113 72.0790703,23.9123888 C72.0790703,20.0947819 68.9842884,17 65.1666814,17 C61.3490745,17 58.2542926,20.0947819 58.2542926,23.9123888 C58.2542926,25.6345169 58.8840576,27.2095556 59.925852,28.419769 L59.925852,28.419769 C59.9104102,28.4273935 59.8949905,28.4350558 59.8795929,28.4427558 C61.01617,29.674602 61.710487,31.3206715 61.710487,33.1289073 C61.710487,36.9465143 58.6157051,40.0412962 54.7980982,40.0412962 C54.7034848,40.0412962 54.6093153,40.0393953 54.515626,40.0356296 L54.515626,40.0356296 C54.516089,40.0375187 54.5165526,40.0394075 54.5170166,40.0412962 L40.3972881,40.0412962 L40.3972881,52.887664 L40.3972881,52.887664 C40.4916889,53.3430132 40.5412962,53.8147625 40.5412962,54.2980982 C40.5412962,58.1157051 37.4465143,61.210487 33.6289073,61.210487 C32.0813547,61.210487 30.6525815,60.7019313 29.5005925,59.8428245 C29.4821342,59.8713744 29.4638143,59.9000221 29.4456339,59.9287667 C28.1850247,58.5900823 26.3963113,57.7542926 24.4123888,57.7542926 C20.5947819,57.7542926 17.5,60.8490745 17.5,64.6666814 C17.5,68.4842884 20.5947819,71.5790703 24.4123888,71.5790703 C26.134517,71.5790703 27.7095556,70.9493053 28.919769,69.9075109 L28.919769,69.9075109 C28.9273935,69.9229526 28.9350558,69.9383724 28.9427558,69.95377 C30.174602,68.8171928 31.8206715,68.1228758 33.6289073,68.1228758 C37.4465143,68.1228758 40.5412962,71.2176578 40.5412962,75.0352647 C40.5412962,75.5186004 40.4916889,75.9903496 40.3972881,76.4456988 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
8
core/images/plugin-generic-theme.tid
Normal file
8
core/images/plugin-generic-theme.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/images/plugin-generic-theme
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M27.6619958,98.5383065 C27.5690581,98.5388896 27.4761291,98.539182 27.383212,98.539182 C41.5122315,92.2342259 36.7359182,71.4340774 52.2062903,71.4340772 C52.3396942,72.0325374 52.4778143,72.6764878 52.6543744,73.3309353 C41.7206358,71.5725612 42.70852,93.6013809 27.6619958,98.5383065 Z M27.962646,98.5354078 C44.3675979,98.3221342 60.9448114,89.104528 60.944811,79.6231217 C57.0326028,79.6231217 55.0057081,78.1546059 53.8483468,76.2715831 C46.8437297,73.3160546 41.0335584,95.5643154 27.9626323,98.5354081 Z M60.4476718,66.8723739 C57.4632888,63.6421817 54.9582687,60.7541572 53.4305549,58.7453802 C47.3662923,50.7715364 44.307483,54.9700909 40.8462757,58.7453801 C37.3850684,62.5206692 41.7580858,65.5796149 38.4732643,68.2464352 C35.1884428,70.9132556 35.391237,71.8376623 29.8473278,66.9588778 C24.3034186,62.0800933 23.919977,60.7368279 26.4649349,57.9530299 C29.0098928,55.1692318 31.1369568,59.5524845 36.3357237,54.6053302 C41.5344905,49.6581758 37.1673192,45.2736183 37.1673192,45.2736183 C37.1673192,45.2736183 47.9916921,23.1463023 62.4556497,24.7805686 C76.9196074,26.4148348 56.9839048,22.6644011 52.0250205,40.0179431 C49.9018746,47.4478606 52.4201529,45.6971267 56.4460414,48.8353078 C57.8695188,49.9449088 63.120208,53.6842856 69.3136884,58.3372485 C77.8095419,50.1273311 87.3705002,40.8200581 90.1462007,38.0443577 C94.9225135,33.268045 99.6988262,38.0443577 94.9225134,42.8206705 C92.2168565,45.5263274 83.0052228,54.3768782 74.6585455,62.4104777 C84.7196352,70.2010353 95.1107413,79.0341049 95.1107416,82.5307694 C95.1107421,88.9149413 92.3944614,92.7263341 86.6764506,90.6368273 C83.0906414,89.3264812 73.3126471,80.2536547 65.0234105,71.7029822 C62.8994697,73.7599251 61.2357389,75.3821997 60.3189624,76.2989761 C57.6045976,78.4574835 53.6647127,73.2589589 55.5426497,71.5226634 C56.5140946,70.6244887 58.249291,68.9770292 60.4476718,66.8723739 L60.4476718,66.8723739 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
4
core/images/right-arrow.tid
Normal file
4
core/images/right-arrow.tid
Normal file
@@ -0,0 +1,4 @@
|
||||
title: $:/core/images/right-arrow
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-right-arrow tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128"><path d="M72.7982405,98.6541105 L127.184015,43.9832042 C130.938662,40.2089635 130.938662,34.0896964 127.184015,30.3154557 C123.429583,26.5412364 117.342116,26.5412364 113.587684,30.3154557 L66.0000107,78.152522 L18.4123803,30.3154557 C14.6578195,26.5412364 8.57048132,26.5412364 4.81592057,30.3154557 C1.06135981,34.0896964 1.06135981,40.2089635 4.81592057,43.9832042 L59.2017595,98.6541105 C62.9563202,102.428351 69.0436798,102.428351 72.7982405,98.6541126 L72.7982405,98.6541105 Z" transform="translate(66.000000, 64.484791) rotate(-90.000000) translate(-66.000000, -64.484791) "/></svg>
|
||||
11
core/images/storyview-classic.tid
Normal file
11
core/images/storyview-classic.tid
Normal file
@@ -0,0 +1,11 @@
|
||||
title: $:/core/images/storyview-classic
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-storyview-classic tw-image-button" width="22pt" height="22pt" viewBox="0 0 129 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M9.99919566,0 C4.48152297,0 0.00856547772,4.48053479 0.00856547772,9.99063018 L0.00856547772,118.00937 C0.00856547772,123.527043 4.48910027,128 9.99919566,128 L118.017935,128 C123.535608,128 128.008565,123.519465 128.008565,118.00937 L128.008565,9.99063018 C128.008565,4.47295749 123.528031,0 118.017935,0 L9.99919566,0 Z M9.00856548,9 L9.00856548,119 L119.008565,119 L119.008565,9 L9.00856548,9 Z"></path>
|
||||
<rect x="16.0098828" y="16" width="96.203165" height="32"></rect>
|
||||
<rect x="16.0098828" y="55" width="96.203165" height="23"></rect>
|
||||
<rect x="16.0207797" y="85" width="96.203165" height="24"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
12
core/images/storyview-pop.tid
Normal file
12
core/images/storyview-pop.tid
Normal file
@@ -0,0 +1,12 @@
|
||||
title: $:/core/images/storyview-pop
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-storyview-pop tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M9.99919566,0 C4.48152297,0 0.00856547772,4.48053479 0.00856547772,9.99063018 L0.00856547772,118.00937 C0.00856547772,123.527043 4.48910027,128 9.99919566,128 L118.017935,128 C123.535608,128 128.008565,123.519465 128.008565,118.00937 L128.008565,9.99063018 C128.008565,4.47295749 123.528031,0 118.017935,0 L9.99919566,0 Z M9.00856548,9 L9.00856548,119 L119.008565,119 L119.008565,9 L9.00856548,9 Z"></path>
|
||||
<rect x="16.0098828" y="16" width="96.203165" height="32"></rect>
|
||||
<path d="M16.0098828,55 L16.0098828,78 L112.213048,78 L112.213048,55 L16.0098828,55 Z M18.5049414,57.5 L18.5049414,75.5 L109.717989,75.5 L109.717989,57.5 L18.5049414,57.5 Z"></path>
|
||||
<rect x="25.6164067" y="60.5" width="76.9901172" height="12"></rect>
|
||||
<rect x="16.0207797" y="85" width="96.203165" height="24"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
9
core/images/storyview-zoomin.tid
Normal file
9
core/images/storyview-zoomin.tid
Normal file
@@ -0,0 +1,9 @@
|
||||
title: $:/core/images/storyview-zoomin
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-storyview-zoomin tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M9.99919566,0 C4.48152297,0 0.00856547772,4.48053479 0.00856547772,9.99063018 L0.00856547772,118.00937 C0.00856547772,123.527043 4.48910027,128 9.99919566,128 L118.017935,128 C123.535608,128 128.008565,123.519465 128.008565,118.00937 L128.008565,9.99063018 C128.008565,4.47295749 123.528031,0 118.017935,0 L9.99919566,0 Z M9.00856548,9 L9.00856548,119 L119.008565,119 L119.008565,9 L9.00856548,9 Z"></path>
|
||||
<rect x="16.0098828" y="16" width="96.203165" height="57.9273639"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
12
core/images/theme-button.tid
Normal file
12
core/images/theme-button.tid
Normal file
@@ -0,0 +1,12 @@
|
||||
title: $:/core/images/theme-button
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-theme-button tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 129">
|
||||
<g fill-rule="evenodd">
|
||||
<g transform="translate(6.762422, 19.968999)">
|
||||
<path d="M0.824945506,108.186742 C0.664785639,108.187747 0.504640965,108.188251 0.344516735,108.188251 C24.6927592,97.3230528 16.4618388,61.4785938 43.121606,61.4785936 C43.3514982,62.5099075 43.5895175,63.6196137 43.8937798,64.7474092 C25.0518979,61.7172401 26.754298,99.6790423 0.824939051,108.186742 Z M1.34304326,108.181747 C29.613352,107.814217 58.1805158,91.9297101 58.1805151,75.5906019 C51.4386888,75.5906018 47.9457839,73.0599394 45.9513275,69.8149659 C33.880418,64.7217657 23.8678719,103.061726 1.34301955,108.181748 Z"></path>
|
||||
<path d="M48.871084,61.6312522 C45.6348746,64.6233738 52.4243955,73.581882 57.1020034,69.8621716 C65.3329228,61.631253 108.502656,20.4006304 116.733576,12.169711 C124.964495,3.9387916 116.733576,-4.29212771 108.502656,3.9387916 C100.271737,12.1697108 57.4180113,53.7289683 48.871084,61.6312522 Z"></path>
|
||||
</g>
|
||||
<path d="M62.2824054,71.6211067 C57.93733,66.8541323 54.3123948,62.6301561 51.9937779,59.5814279 C41.5433616,45.8402704 36.2721798,53.0755512 30.307554,59.5814276 C24.3429282,66.0873041 31.8788571,71.3587209 26.2181932,75.9543964 C20.5575294,80.5500719 20.9070004,82.1430826 11.3532982,73.7355757 C1.79959591,65.3280689 1.13881905,63.0132479 5.52449152,58.2159872 C9.91016399,53.4187265 13.5756887,60.9722938 22.5346144,52.4469667 C31.4935401,43.9216395 23.9676854,36.3658236 23.9676854,36.3658236 C23.9676854,36.3658236 42.6210998,-1.76571499 67.5465342,1.05058165 C92.4719685,3.8668783 58.1171911,-2.5961653 49.5716499,27.3088291 C45.9128772,40.1126497 50.2525733,37.0956468 57.1903023,42.5036084 C59.4792141,44.2878157 67.5103988,50.0176866 77.2457031,57.2905766 C71.4143155,62.9019825 66.2337717,67.8661661 62.2824054,71.6211067 Z M73.4870997,83.4678852 C87.4278174,97.7290403 103.323635,112.360587 109.285731,114.539289 C119.139459,118.140092 123.820369,111.571999 123.820368,100.570289 C123.820367,94.7414103 107.064445,80.3074425 90.2759123,67.2185217 C83.6390655,73.6178 77.7700759,79.2918373 73.4870997,83.4678852 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
8
core/images/unlocked-padlock.tid
Normal file
8
core/images/unlocked-padlock.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/core/images/unlocked-padlock
|
||||
tags: $:/tags/Image
|
||||
|
||||
<svg class="tw-image-unlocked-padlock tw-image-button" width="22pt" height="22pt" viewBox="0 0 128 128">
|
||||
<g fill-rule="evenodd">
|
||||
<path d="M48.6266053,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L30.136303,64 C19.6806213,51.3490406 2.77158986,28.2115132 25.8366966,8.85759246 C50.4723026,-11.8141335 71.6711028,13.2108337 81.613302,25.0594855 C91.5555012,36.9081373 78.9368488,47.4964439 69.1559674,34.9513593 C59.375086,22.4062748 47.9893192,10.8049522 35.9485154,20.9083862 C23.9077117,31.0118202 34.192312,43.2685325 44.7624679,55.8655518 C47.229397,58.805523 48.403443,61.5979188 48.6266053,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
56
core/language/en-GB/Buttons.multids
Normal file
56
core/language/en-GB/Buttons.multids
Normal file
@@ -0,0 +1,56 @@
|
||||
title: $:/language/Buttons/
|
||||
|
||||
AdvancedSearch/Caption: advanced search
|
||||
AdvancedSearch/Hint: Advanced search
|
||||
Cancel/Caption: cancel
|
||||
Cancel/Hint: Cancel editing this tiddler
|
||||
Clone/Caption: clone
|
||||
Clone/Hint: Clone this tiddler
|
||||
Close/Caption: close
|
||||
Close/Hint: Close this tiddler
|
||||
CloseAll/Caption: close all
|
||||
CloseAll/Hint: Close all tiddlers
|
||||
CloseOthers/Caption: close others
|
||||
CloseOthers/Hint: Close other tiddlers
|
||||
ControlPanel/Caption: control panel
|
||||
ControlPanel/Hint: Open control panel
|
||||
Delete/Caption: delete
|
||||
Delete/Hint: Delete this tiddler
|
||||
Edit/Caption: edit
|
||||
Edit/Hint: Edit this tiddler
|
||||
Encryption/Caption: encryption
|
||||
Encryption/Hint: Set or clear a password for saving this wiki
|
||||
Encryption/ClearPassword/Caption: clear password
|
||||
Encryption/ClearPassword/Hint: Clear the password and save this wiki without encryption
|
||||
Encryption/SetPassword/Caption: set password
|
||||
Encryption/SetPassword/Hint: Set a password for saving this wiki with encryption
|
||||
FullScreen/Caption: full-screen
|
||||
FullScreen/Hint: Enter or leave full-screen mode
|
||||
Import/Caption: import
|
||||
Import/Hint: Import files
|
||||
Info/Caption: info
|
||||
Info/Hint: Show information for this tiddler
|
||||
Home/Caption: home
|
||||
Home/Hint: Refresh the page and open the home tiddlers
|
||||
Language/Caption: language
|
||||
Language/Hint: Choose the user interface language
|
||||
NewTiddler/Caption: new tiddler
|
||||
NewTiddler/Hint: Create a new tiddler
|
||||
More/Caption: more
|
||||
More/Hint: More actions
|
||||
Permalink/Caption: permalink
|
||||
Permalink/Hint: Set browser address bar to a direct link to this tiddler
|
||||
Permaview/Caption: permaview
|
||||
Permaview/Hint: Set browser address bar to a direct link to all the tiddlers in this story
|
||||
Save/Caption: save
|
||||
Save/Hint: Save this tiddler
|
||||
SaveWiki/Caption: save changes
|
||||
SaveWiki/Hint: Save changes
|
||||
StoryView/Caption: storyview
|
||||
StoryView/Hint: Choose the story visualisation
|
||||
HideSideBar/Caption: hide sidebar
|
||||
HideSideBar/Hint: Hide sidebar
|
||||
ShowSideBar/Caption: show sidebar
|
||||
ShowSideBar/Hint: Show sidebar
|
||||
Theme/Caption: theme
|
||||
Theme/Hint: Choose the display theme
|
||||
@@ -1,9 +1,28 @@
|
||||
title: $:/language/ControlPanel/
|
||||
|
||||
Advanced/Caption: Advanced
|
||||
Advanced/EditorTypes/Caption: Editor Types
|
||||
Advanced/EditorTypes/Editor/Caption: Editor
|
||||
Advanced/EditorTypes/Hint: These tiddlers determine which editor is used to edit specific tiddler types.
|
||||
Advanced/EditorTypes/Type/Caption: Type
|
||||
Advanced/Hint: Internal information about this TiddlyWiki
|
||||
Advanced/LoadedModules/Caption: Loaded Modules
|
||||
Advanced/LoadedModules/Hint: These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process.
|
||||
Advanced/Settings/Caption: Settings
|
||||
Advanced/Settings/Hint: These advanced settings let you customise the behaviour of TiddlyWiki.
|
||||
Advanced/Settings/NavigationAddressBar/Caption: Navigation Address Bar
|
||||
Advanced/Settings/NavigationAddressBar/Hint: Behaviour of the browser address bar when navigating to a tiddler:
|
||||
Advanced/Settings/NavigationAddressBar/No/Description: Do not update the address bar
|
||||
Advanced/Settings/NavigationAddressBar/Permalink/Description: Include the target tiddler
|
||||
Advanced/Settings/NavigationAddressBar/Permaview/Description: Include the target tiddler and the current story sequence
|
||||
Advanced/Settings/NavigationHistory/Caption: Navigation History
|
||||
Advanced/Settings/NavigationHistory/Hint: Update browser history when navigating to a tiddler:
|
||||
Advanced/Settings/NavigationHistory/No/Description: Do not update history
|
||||
Advanced/Settings/NavigationHistory/Yes/Description: Update history
|
||||
Advanced/Settings/ToolbarButtons/Caption: Toolbar Buttons
|
||||
Advanced/Settings/ToolbarButtons/Hint: Default toolbar button appearance:
|
||||
Advanced/Settings/ToolbarButtons/Text/Description: Include text
|
||||
Advanced/Settings/ToolbarButtons/Icons/Description: Include icon
|
||||
Advanced/TiddlerFields/Caption: Tiddler Fields
|
||||
Advanced/TiddlerFields/Hint: This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers).
|
||||
Appearance/Caption: Appearance
|
||||
@@ -21,6 +40,14 @@ Appearance/StoryView/Caption: Story View
|
||||
Appearance/StoryView/Prompt: Current view:
|
||||
Appearance/Theme/Caption: Theme
|
||||
Appearance/Theme/Prompt: Current theme:
|
||||
Appearance/Toolbars/Caption: Toolbars
|
||||
Appearance/Toolbars/Hint: Select which toolbar buttons are displayed
|
||||
Appearance/Toolbars/EditToolbar/Caption: Edit Toolbar
|
||||
Appearance/Toolbars/EditToolbar/Hint: Choose which buttons are displayed for tiddlers in edit mode
|
||||
Appearance/Toolbars/ViewToolbar/Caption: View Toolbar
|
||||
Appearance/Toolbars/ViewToolbar/Hint: Choose which buttons are displayed for tiddlers in view mode
|
||||
Appearance/Toolbars/PageControls/Caption: Page Toolbar
|
||||
Appearance/Toolbars/PageControls/Hint: Choose which buttons are displayed on the main page toolbar
|
||||
Basics/AnimDuration/Prompt: Animation duration:
|
||||
Basics/Caption: Basics
|
||||
Basics/DefaultTiddlers/BottomHint: Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set="$:/DefaultTiddlers" setTo="[list[$:/StoryList]]">retain story ordering</$button>
|
||||
@@ -37,9 +64,6 @@ Basics/Title/Prompt: Title of this ~TiddlyWiki:
|
||||
Basics/Username/Prompt: Username for signing edits:
|
||||
Basics/Version/Prompt: ~TiddlyWiki version:
|
||||
Plugins/Caption: Plugins
|
||||
Plugins/Fields/Description: Description
|
||||
Plugins/Fields/Title: Title
|
||||
Plugins/Fields/Version: Version
|
||||
Plugins/Language/Prompt: Languages
|
||||
Plugins/Plugin/Prompt: Plugins
|
||||
Plugins/Theme/Prompt: Themes
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
title: $:/language/Docs/ModuleTypes/
|
||||
|
||||
animation: Animations that may be used with the RevealWidget.
|
||||
browser-startup: Startup functions that are only executed in the browser.
|
||||
command: Commands that can be executed under Node.js.
|
||||
config: Data to be inserted into `$tw.config`.
|
||||
filteroperator: Individual filter operator methods.
|
||||
|
||||
@@ -6,6 +6,7 @@ alert-highlight: Alert highlight
|
||||
alert-muted-foreground: Alert muted foreground
|
||||
background: General background
|
||||
blockquote-bar: Blockquote bar
|
||||
dirty-indicator: Unsaved changes indicator
|
||||
code-background: Code background
|
||||
code-border: Code border
|
||||
code-foreground: Code foreground
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
title: $:/language/EditTemplate/
|
||||
|
||||
Body/External/Hint: This is an external tiddler stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself
|
||||
Body/Hint: Use [[wiki text|http://tiddlywiki.com/static/WikiText.html]] to add formatting, images, and dynamic features
|
||||
Body/Placeholder: Type the text for this tiddler
|
||||
Body/Preview/Button/Hide: hide preview
|
||||
@@ -8,6 +9,8 @@ Fields/Add/Button: add
|
||||
Fields/Add/Name/Placeholder: field name
|
||||
Fields/Add/Prompt: Add a new field:
|
||||
Fields/Add/Value/Placeholder: field value
|
||||
Shadow/Warning: This is a shadow tiddler. Any changes will override the default version
|
||||
Shadow/OverriddenWarning: This is a modified shadow tiddler. You can revert to the default version by deleting this tiddler
|
||||
Tags/Add/Button: add
|
||||
Tags/Add/Placeholder: tag name
|
||||
Type/Placeholder: content type
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
title: $:/language/Docs/Fields/
|
||||
|
||||
_canonical_uri: The full URI of an external image tiddler
|
||||
bag: The name of the bag from which a tiddler came
|
||||
caption: The text to be displayed on a tab or button
|
||||
color: The CSS color value associated with a tiddler
|
||||
|
||||
11
core/language/en-GB/Help/build.tid
Normal file
11
core/language/en-GB/Help/build.tid
Normal file
@@ -0,0 +1,11 @@
|
||||
title: $:/language/Help/build
|
||||
description: Automatically run configured commands
|
||||
|
||||
Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.
|
||||
|
||||
```
|
||||
--build <target> [<target> ...]
|
||||
```
|
||||
|
||||
Build targets are defined in the `tiddlywiki.info` file of a wiki folder.
|
||||
|
||||
8
core/language/en-GB/Help/clearpassword.tid
Normal file
8
core/language/en-GB/Help/clearpassword.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
title: $:/language/Help/clearpassword
|
||||
description: Clear a password for subsequent crypto operations
|
||||
|
||||
Clear the password for subsequent crypto operations
|
||||
|
||||
```
|
||||
--clearpassword
|
||||
```
|
||||
10
core/language/en-GB/Help/output.tid
Normal file
10
core/language/en-GB/Help/output.tid
Normal file
@@ -0,0 +1,10 @@
|
||||
title: $:/language/Help/output
|
||||
description: Set the base output directory for subsequent commands
|
||||
|
||||
Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.
|
||||
|
||||
```
|
||||
--output <pathname>
|
||||
```
|
||||
|
||||
If the specified pathname is relative then it is resolved relative to the current working directory.
|
||||
@@ -6,3 +6,7 @@ Render an individual tiddler as a specified ContentType, defaults to `text/html`
|
||||
```
|
||||
--rendertiddler <title> <filename> [<type>]
|
||||
```
|
||||
|
||||
By default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.
|
||||
|
||||
Any missing directories in the path to the filename are automatically created.
|
||||
|
||||
@@ -12,3 +12,7 @@ For example:
|
||||
```
|
||||
--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain
|
||||
```
|
||||
|
||||
By default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.
|
||||
|
||||
Any files in the target directory are deleted. The target directory is recursively created if it is missing.
|
||||
|
||||
@@ -6,3 +6,7 @@ Saves an individual tiddler in its raw text or binary format to the specified fi
|
||||
```
|
||||
--savetiddler <title> <filename>
|
||||
```
|
||||
|
||||
By default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.
|
||||
|
||||
Any missing directories in the path to the filename are automatically created.
|
||||
|
||||
12
core/language/en-GB/Help/savetiddlers.tid
Normal file
12
core/language/en-GB/Help/savetiddlers.tid
Normal file
@@ -0,0 +1,12 @@
|
||||
title: $:/language/Help/savetiddlers
|
||||
description: Saves a group of raw tiddlers to a directory
|
||||
|
||||
Saves a group of tiddlers in their raw text or binary format to the specified directory.
|
||||
|
||||
```
|
||||
--savetiddlers <filter> <pathname>
|
||||
```
|
||||
|
||||
By default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.
|
||||
|
||||
Any missing directories in the pathname are automatically created.
|
||||
@@ -6,7 +6,7 @@ The server built in to TiddlyWiki5 is very simple. Although compatible with Tidd
|
||||
At the root, it serves a rendering of a specified tiddler. Away from the root, it serves individual tiddlers encoded in JSON, and supports the basic HTTP operations for `GET`, `PUT` and `DELETE`.
|
||||
|
||||
```
|
||||
--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host>
|
||||
--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host> <pathprefix>
|
||||
```
|
||||
|
||||
The parameters are:
|
||||
@@ -18,6 +18,7 @@ The parameters are:
|
||||
* ''username'' - the default username for signing edits
|
||||
* ''password'' - optional password for basic authentication
|
||||
* ''host'' - optional hostname to serve from (defaults to "127.0.0.1" aka "localhost")
|
||||
* ''pathprefix'' - optional prefix for paths
|
||||
|
||||
If the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation isn't suitable for general use.
|
||||
|
||||
|
||||
18
core/language/en-GB/Help/setfield.tid
Normal file
18
core/language/en-GB/Help/setfield.tid
Normal file
@@ -0,0 +1,18 @@
|
||||
title: $:/language/Help/setfield
|
||||
description: Prepares external tiddlers for use
|
||||
|
||||
//Note that this command is experimental and may change or be replaced during the TiddlyWiki version 5 beta//
|
||||
|
||||
Sets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.
|
||||
|
||||
```
|
||||
--setfield <filter> <fieldname> <templatetitle> <rendertype>
|
||||
```
|
||||
|
||||
The parameters are:
|
||||
|
||||
* ''filter'' - filter identifying the tiddlers to be affected
|
||||
* ''fieldname'' - the field to modify (defaults to "text")
|
||||
* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted
|
||||
* ''type'' - the text type to render (defaults to "text/plain"; "text/html" can be used to include HTML tags)
|
||||
|
||||
13
core/language/en-GB/Import.multids
Normal file
13
core/language/en-GB/Import.multids
Normal file
@@ -0,0 +1,13 @@
|
||||
title: $:/language/Import/
|
||||
|
||||
Listing/Cancel/Caption: Cancel
|
||||
Listing/Hint: These tiddlers are ready to import:
|
||||
Listing/Import/Caption: Import
|
||||
Listing/Select/Caption: Select
|
||||
Listing/Status/Caption: Status
|
||||
Listing/Title/Caption: Title
|
||||
Upgrader/Plugins/Suppressed/Incompatible: Blocked incompatible or obsolete plugin
|
||||
Upgrader/Plugins/Suppressed/Version: Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)
|
||||
Upgrader/Plugins/Upgraded: Upgraded plugin from <<incoming>> to <<upgraded>>
|
||||
Upgrader/System/Suppressed: Blocked system tiddler
|
||||
Upgrader/ThemeTweaks/Created: Migrated theme tweak from <$text text=<<from>>/>
|
||||
@@ -1,12 +1,14 @@
|
||||
title: $:/language/
|
||||
|
||||
BinaryWarning/Prompt: This tiddler contains binary data
|
||||
ClassicWarning/Hint: This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See http://tiddlywiki.com/static/Upgrading.html for more details.
|
||||
ClassicWarning/Upgrade/Caption: upgrade
|
||||
CloseAll/Button: close all
|
||||
ConfirmCancelTiddler: Do you wish to discard changes to the tiddler "<$text text=<<title>>/>"?
|
||||
ConfirmDeleteTiddler: Do you wish to delete the tiddler "<$text text=<<title>>/>"?
|
||||
ConfirmOverwriteTiddler: Do you wish to overwrite the tiddler "<$text text=<<title>>/>"?
|
||||
InvalidFieldName: Illegal characters in field name "<$text text=<<fieldName>>/>". Fields can only contain lowercase letters and the characters underscore (`_`), hyphen (`-`) and period (`.`)
|
||||
ConfirmEditShadowTiddler: You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit "<$text text=<<title>>/>"?
|
||||
InvalidFieldName: Illegal characters in field name "<$text text=<<fieldName>>/>". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)
|
||||
MissingTiddler/Hint: Missing tiddler "<$text text=<<currentTiddler>>/>" - click {{$:/core/images/edit-button}} to create
|
||||
RecentChanges/DateFormat: DDth MMM YYYY
|
||||
RelativeDate/Future/Days: <<period>> days from now
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
title: $:/language/Search/
|
||||
|
||||
Advanced/Matches: //<small><$count filter={{$:/temp/advancedsearch}}/> matches</small>//
|
||||
Filter/Caption: Filter
|
||||
Filter/Hint: Search via a [[filter expression|http://tiddlywiki.com/static/TiddlerFilters.html]]
|
||||
Filter/Matches: //<small><$count filter={{$:/temp/advancedsearch}}/> matches</small>//
|
||||
Matches: //<small><$count filter="[!is[system]search{$:/temp/search}]"/> matches</small>//
|
||||
Shadows/Caption: Shadows
|
||||
Shadows/Hint: Search for shadow tiddlers
|
||||
Shadows/Matches: //<small><$count filter="[all[shadows]search{$:/temp/advancedsearch}]"/> matches</small>//
|
||||
Standard/Caption: Standard
|
||||
Standard/Hint: Search for standard tiddlers
|
||||
Standard/Matches: //<small><$count filter="[!is[system]search{$:/temp/advancedsearch}]"/> matches</small>//
|
||||
System/Caption: System
|
||||
System/Hint: Search for system tiddlers
|
||||
System/Matches: //<small><$count filter="[is[system]search{$:/temp/advancedsearch}]"/> matches</small>//
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
title: $:/language/SideBar/
|
||||
|
||||
All/Caption: All
|
||||
Contents/Caption: Contents
|
||||
Drafts/Caption: Drafts
|
||||
Missing/Caption: Missing
|
||||
More/Caption: More
|
||||
|
||||
@@ -18,3 +18,4 @@ References/Caption: References
|
||||
References/Empty: No tiddlers link to this one
|
||||
Tagging/Caption: Tagging
|
||||
Tagging/Empty: No tiddlers are tagged with this one
|
||||
Tools/Caption: Tools
|
||||
|
||||
4
core/language/en-GB/Types/application_javascript.tid
Normal file
4
core/language/en-GB/Types/application_javascript.tid
Normal file
@@ -0,0 +1,4 @@
|
||||
title: $:/language/Docs/Types/application/javascript
|
||||
description: JavaScript code
|
||||
name: application/javascript
|
||||
group: Developer
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/application/json
|
||||
description: JSON data
|
||||
name: application/json
|
||||
group: Developer
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/application/x-tiddler-dictionary
|
||||
description: Data dictionary
|
||||
name: application/x-tiddler-dictionary
|
||||
group: Developer
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/image/gif
|
||||
description: GIF image
|
||||
name: image/gif
|
||||
group: Image
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/image/jpeg
|
||||
description: JPEG image
|
||||
name: image/jpeg
|
||||
group: Image
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/image/png
|
||||
description: PNG image
|
||||
name: image/png
|
||||
group: Image
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/image/svg+xml
|
||||
description: Structured Vector Graphics image
|
||||
name: image/svg+xml
|
||||
group: Image
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/image/x-icon
|
||||
description: ICO format icon file
|
||||
name: image/x-icon
|
||||
group: Image
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/text/css
|
||||
description: Static stylesheet
|
||||
name: text/css
|
||||
group: Developer
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/text/html
|
||||
description: HTML markup
|
||||
name: text/html
|
||||
group: Text
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/text/plain
|
||||
description: Plain text
|
||||
name: text/plain
|
||||
group: Text
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/text/vnd.tiddlywiki
|
||||
description: TiddlyWiki version 5 wikitext
|
||||
description: TiddlyWiki 5
|
||||
name: text/vnd.tiddlywiki
|
||||
group: Text
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
title: $:/language/Docs/Types/text/x-tiddlywiki
|
||||
description: TiddlyWiki Classic wikitext
|
||||
description: TiddlyWiki Classic
|
||||
name: text/x-tiddlywiki
|
||||
group: Text
|
||||
|
||||
13
core/language/en-GB/icon.tid
Normal file
13
core/language/en-GB/icon.tid
Normal file
@@ -0,0 +1,13 @@
|
||||
title: $:/languages/en-GB/icon
|
||||
type: image/svg+xml
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 30" width="1200" height="600">
|
||||
<clipPath id="t">
|
||||
<path d="M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z"/>
|
||||
</clipPath>
|
||||
<path d="M0,0 v30 h60 v-30 z" fill="#00247d"/>
|
||||
<path d="M0,0 L60,30 M60,0 L0,30" stroke="#fff" stroke-width="6"/>
|
||||
<path d="M0,0 L60,30 M60,0 L0,30" clip-path="url(#t)" stroke="#cf142b" stroke-width="4"/>
|
||||
<path d="M30,0 v30 M0,15 h60" stroke="#fff" stroke-width="10"/>
|
||||
<path d="M30,0 v30 M0,15 h60" stroke="#cf142b" stroke-width="6"/>
|
||||
</svg>
|
||||
@@ -20,11 +20,23 @@ Parse a sequence of commands
|
||||
callback: a callback invoked as callback(err) where err is null if there was no error
|
||||
*/
|
||||
var Commander = function(commandTokens,callback,wiki,streams) {
|
||||
var path = require("path");
|
||||
this.commandTokens = commandTokens;
|
||||
this.nextToken = 0;
|
||||
this.callback = callback;
|
||||
this.wiki = wiki;
|
||||
this.streams = streams;
|
||||
this.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);
|
||||
};
|
||||
|
||||
/*
|
||||
Add a string of tokens to the command queue
|
||||
*/
|
||||
Commander.prototype.addCommandTokens = function(commandTokens) {
|
||||
var params = commandTokens.slice(0);
|
||||
params.unshift(0);
|
||||
params.unshift(this.nextToken);
|
||||
Array.prototype.splice.apply(this.commandTokens,params);
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
52
core/modules/commands/build.js
Normal file
52
core/modules/commands/build.js
Normal file
@@ -0,0 +1,52 @@
|
||||
/*\
|
||||
title: $:/core/modules/commands/build.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to build a build target
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "build",
|
||||
synchronous: true
|
||||
};
|
||||
|
||||
var Command = function(params,commander) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
// Get the build targets defined in the wiki
|
||||
var buildTargets = $tw.boot.wikiInfo.build;
|
||||
if(!buildTargets) {
|
||||
return "No build targets defined"
|
||||
}
|
||||
// Loop through each of the specified targets
|
||||
var targets;
|
||||
if(this.params.length > 0) {
|
||||
targets = this.params;
|
||||
} else {
|
||||
targets = Object.keys(buildTargets);
|
||||
}
|
||||
for(var targetIndex=0; targetIndex<targets.length; targetIndex++) {
|
||||
var target = targets[targetIndex],
|
||||
commands = buildTargets[target];
|
||||
if(!commands) {
|
||||
return "Build target '" + target + "' not found";
|
||||
}
|
||||
// Add the commands to the queue
|
||||
this.commander.addCommandTokens(commands);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
||||
33
core/modules/commands/clearpassword.js
Normal file
33
core/modules/commands/clearpassword.js
Normal file
@@ -0,0 +1,33 @@
|
||||
/*\
|
||||
title: $:/core/modules/commands/clearpassword.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Clear password for crypto operations
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "clearpassword",
|
||||
synchronous: true
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
$tw.crypto.setPassword(null);
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
||||
@@ -34,7 +34,7 @@ Command.prototype.execute = function() {
|
||||
for(var editionIndex=0; editionIndex<editions.length; editionIndex++) {
|
||||
var editionName = editions[editionIndex];
|
||||
// Check the edition exists
|
||||
var editionPath = path.resolve($tw.boot.corePath,$tw.config.editionsPath) + path.sep + editionName;
|
||||
var editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));
|
||||
if(!$tw.utils.isDirectory(editionPath)) {
|
||||
return "Edition '" + editionName + "' not found";
|
||||
}
|
||||
|
||||
70
core/modules/commands/makelibrary.js
Normal file
70
core/modules/commands/makelibrary.js
Normal file
@@ -0,0 +1,70 @@
|
||||
/*\
|
||||
title: $:/core/modules/commands/makelibrary.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to pack all of the plugins in the library into a plugin tiddler of type "library"
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "makelibrary",
|
||||
synchronous: true
|
||||
};
|
||||
|
||||
var UPGRADE_LIBRARY_TITLE = "$:/UpgradeLibrary";
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
var wiki = this.commander.wiki,
|
||||
fs = require("fs"),
|
||||
path = require("path"),
|
||||
upgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,
|
||||
tiddlers = {};
|
||||
// Collect up the library plugins
|
||||
var collectPlugins = function(folder) {
|
||||
var pluginFolders = fs.readdirSync(folder);
|
||||
for(var p=0; p<pluginFolders.length; p++) {
|
||||
if(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {
|
||||
pluginFields = $tw.loadPluginFolder(path.resolve(folder,"./" + pluginFolders[p]));
|
||||
if(pluginFields && pluginFields.title) {
|
||||
tiddlers[pluginFields.title] = pluginFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
collectPublisherPlugins = function(folder) {
|
||||
var publisherFolders = fs.readdirSync(folder);
|
||||
for(var t=0; t<publisherFolders.length; t++) {
|
||||
if(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {
|
||||
collectPlugins(path.resolve(folder,"./" + publisherFolders[t]));
|
||||
}
|
||||
}
|
||||
};
|
||||
collectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.pluginsPath));
|
||||
collectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.themesPath));
|
||||
collectPlugins(path.resolve($tw.boot.corePath,$tw.config.languagesPath));
|
||||
// Save the upgrade library tiddler
|
||||
var pluginFields = {
|
||||
title: upgradeLibraryTitle,
|
||||
type: "application/json",
|
||||
"plugin-type": "library",
|
||||
"text": JSON.stringify({tiddlers: tiddlers},null,$tw.config.preferences.jsonSpaces)
|
||||
};
|
||||
wiki.addTiddler(new $tw.Tiddler(pluginFields));
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
||||
38
core/modules/commands/output.js
Normal file
38
core/modules/commands/output.js
Normal file
@@ -0,0 +1,38 @@
|
||||
/*\
|
||||
title: $:/core/modules/commands/output.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to set the default output location (defaults to current working directory)
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "output",
|
||||
synchronous: true
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
var fs = require("fs"),
|
||||
path = require("path");
|
||||
if(this.params.length < 1) {
|
||||
return "Missing output path";
|
||||
}
|
||||
this.commander.outputPath = path.resolve(process.cwd(),this.params[0]);
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
||||
@@ -31,8 +31,9 @@ Command.prototype.execute = function() {
|
||||
fs = require("fs"),
|
||||
path = require("path"),
|
||||
title = this.params[0],
|
||||
filename = this.params[1],
|
||||
filename = path.resolve(this.commander.outputPath,this.params[1]),
|
||||
type = this.params[2] || "text/html";
|
||||
$tw.utils.createFileDirectories(filename);
|
||||
fs.writeFile(filename,this.commander.wiki.renderTiddler(type,title),"utf8",function(err) {
|
||||
self.callback(err);
|
||||
});
|
||||
|
||||
@@ -35,10 +35,12 @@ Command.prototype.execute = function() {
|
||||
wiki = this.commander.wiki,
|
||||
filter = this.params[0],
|
||||
template = this.params[1],
|
||||
pathname = this.params[2],
|
||||
pathname = path.resolve(this.commander.outputPath,this.params[2]),
|
||||
type = this.params[3] || "text/html",
|
||||
extension = this.params[4] || ".html",
|
||||
tiddlers = wiki.filterTiddlers(filter);
|
||||
$tw.utils.deleteDirectory(pathname);
|
||||
$tw.utils.createDirectory(pathname);
|
||||
$tw.utils.each(tiddlers,function(title) {
|
||||
var parser = wiki.parseTiddler(template),
|
||||
widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});
|
||||
|
||||
@@ -31,10 +31,11 @@ Command.prototype.execute = function() {
|
||||
fs = require("fs"),
|
||||
path = require("path"),
|
||||
title = this.params[0],
|
||||
filename = this.params[1],
|
||||
filename = path.resolve(this.commander.outputPath,this.params[1]),
|
||||
tiddler = this.commander.wiki.getTiddler(title),
|
||||
type = tiddler.fields.type || "text/vnd.tiddlywiki",
|
||||
contentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: "utf8"};
|
||||
$tw.utils.createFileDirectories(filename);
|
||||
fs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {
|
||||
self.callback(err);
|
||||
});
|
||||
|
||||
53
core/modules/commands/savetiddlers.js
Normal file
53
core/modules/commands/savetiddlers.js
Normal file
@@ -0,0 +1,53 @@
|
||||
/*\
|
||||
title: $:/core/modules/commands/savetiddlers.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to save several tiddlers to a folder of files
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
var widget = require("$:/core/modules/widgets/widget.js");
|
||||
|
||||
exports.info = {
|
||||
name: "savetiddlers",
|
||||
synchronous: true
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
if(this.params.length < 1) {
|
||||
return "Missing filename";
|
||||
}
|
||||
var self = this,
|
||||
fs = require("fs"),
|
||||
path = require("path"),
|
||||
wiki = this.commander.wiki,
|
||||
filter = this.params[0],
|
||||
pathname = path.resolve(this.commander.outputPath,this.params[1]),
|
||||
tiddlers = wiki.filterTiddlers(filter);
|
||||
$tw.utils.deleteDirectory(pathname);
|
||||
$tw.utils.createDirectory(pathname);
|
||||
$tw.utils.each(tiddlers,function(title) {
|
||||
var tiddler = self.commander.wiki.getTiddler(title),
|
||||
type = tiddler.fields.type || "text/vnd.tiddlywiki",
|
||||
contentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: "utf8"},
|
||||
filename = path.resolve(pathname,encodeURIComponent(title));
|
||||
fs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);
|
||||
});
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
||||
@@ -50,10 +50,22 @@ SimpleServer.prototype.addRoute = function(route) {
|
||||
};
|
||||
|
||||
SimpleServer.prototype.findMatchingRoute = function(request,state) {
|
||||
var pathprefix = this.get("pathprefix") || "";
|
||||
for(var t=0; t<this.routes.length; t++) {
|
||||
var potentialRoute = this.routes[t],
|
||||
pathRegExp = potentialRoute.path,
|
||||
match = potentialRoute.path.exec(state.urlInfo.pathname);
|
||||
pathname = state.urlInfo.pathname,
|
||||
match;
|
||||
if(pathprefix) {
|
||||
if(pathname.substr(0,pathprefix.length) === pathprefix) {
|
||||
pathname = pathname.substr(pathprefix.length);
|
||||
match = potentialRoute.path.exec(pathname);
|
||||
} else {
|
||||
match = false;
|
||||
}
|
||||
} else {
|
||||
match = potentialRoute.path.exec(pathname);
|
||||
}
|
||||
if(match && request.method === potentialRoute.method) {
|
||||
state.params = [];
|
||||
for(var p=1; p<match.length; p++) {
|
||||
@@ -161,7 +173,8 @@ var Command = function(params,commander,callback) {
|
||||
state.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title}));
|
||||
var changeCount = state.wiki.getChangeCount(title).toString();
|
||||
response.writeHead(204, "OK",{
|
||||
Etag: "\"default/" + encodeURIComponent(title) + "/" + changeCount + ":\""
|
||||
Etag: "\"default/" + encodeURIComponent(title) + "/" + changeCount + ":\"",
|
||||
"Content-Type": "text/plain"
|
||||
});
|
||||
response.end();
|
||||
}
|
||||
@@ -172,7 +185,9 @@ var Command = function(params,commander,callback) {
|
||||
handler: function(request,response,state) {
|
||||
var title = decodeURIComponent(state.params[0]);
|
||||
state.wiki.deleteTiddler(title);
|
||||
response.writeHead(204, "OK");
|
||||
response.writeHead(204, "OK", {
|
||||
"Content-Type": "text/plain"
|
||||
});
|
||||
response.end();
|
||||
}
|
||||
});
|
||||
@@ -269,13 +284,15 @@ Command.prototype.execute = function() {
|
||||
serveType = this.params[3] || "text/html",
|
||||
username = this.params[4],
|
||||
password = this.params[5],
|
||||
host = this.params[6] || "127.0.0.1";
|
||||
host = this.params[6] || "127.0.0.1",
|
||||
pathprefix = this.params[7];
|
||||
this.server.set({
|
||||
rootTiddler: rootTiddler,
|
||||
renderType: renderType,
|
||||
serveType: serveType,
|
||||
username: username,
|
||||
password: password
|
||||
password: password,
|
||||
pathprefix: pathprefix
|
||||
});
|
||||
this.server.listen(port,host);
|
||||
console.log("Serving on " + host + ":" + port);
|
||||
|
||||
58
core/modules/commands/setfield.js
Normal file
58
core/modules/commands/setfield.js
Normal file
@@ -0,0 +1,58 @@
|
||||
/*\
|
||||
title: $:/core/modules/commands/setfield.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
var widget = require("$:/core/modules/widgets/widget.js");
|
||||
|
||||
exports.info = {
|
||||
name: "setfield",
|
||||
synchronous: true
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
if(this.params.length < 4) {
|
||||
return "Missing parameters";
|
||||
}
|
||||
var self = this,
|
||||
wiki = this.commander.wiki,
|
||||
filter = this.params[0],
|
||||
fieldname = this.params[1] || "text",
|
||||
templatetitle = this.params[2],
|
||||
rendertype = this.params[3] || "text/plain",
|
||||
tiddlers = wiki.filterTiddlers(filter);
|
||||
$tw.utils.each(tiddlers,function(title) {
|
||||
var parser = wiki.parseTiddler(templatetitle),
|
||||
newFields = {},
|
||||
tiddler = wiki.getTiddler(title);
|
||||
if(parser) {
|
||||
var widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});
|
||||
var container = $tw.fakeDocument.createElement("div");
|
||||
widgetNode.render(container,null);
|
||||
newFields[fieldname] = rendertype === "text/html" ? container.innerHTML : container.textContent;
|
||||
} else {
|
||||
newFields[fieldname] = undefined;
|
||||
}
|
||||
wiki.addTiddler(new $tw.Tiddler(tiddler,newFields));
|
||||
});
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
||||
@@ -24,6 +24,8 @@ var Command = function(params,commander) {
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
this.commander.verbose = true;
|
||||
// Output the boot message log
|
||||
this.commander.streams.output.write("Boot log:\n " + $tw.boot.logMessages.join("\n ") + "\n");
|
||||
return null; // No error
|
||||
};
|
||||
|
||||
|
||||
@@ -51,13 +51,13 @@ var parseTiddlerDiv = function(text /* [,fields] */) {
|
||||
// Extract the text
|
||||
result.text = text.substring(match.index + match[0].length,endMatch.index);
|
||||
// Process the attributes
|
||||
var attrRegExp = /\s*([^=\s]+)\s*=\s*"([^"]*)"/gi,
|
||||
var attrRegExp = /\s*([^=\s]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/gi,
|
||||
attrMatch;
|
||||
do {
|
||||
attrMatch = attrRegExp.exec(match[1]);
|
||||
if(attrMatch) {
|
||||
var name = attrMatch[1];
|
||||
var value = attrMatch[2];
|
||||
var value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];
|
||||
result[name] = value;
|
||||
}
|
||||
} while(attrMatch);
|
||||
|
||||
@@ -33,7 +33,7 @@ function parseFilterOperation(operators,filterString,p) {
|
||||
operator.prefix = filterString.charAt(p++);
|
||||
}
|
||||
// Get the operator name
|
||||
var nextBracketPos = filterString.substring(p).search(/[\[\{\/]/);
|
||||
var nextBracketPos = filterString.substring(p).search(/[\[\{<\/]/);
|
||||
if(nextBracketPos === -1) {
|
||||
throw "Missing [ in filter expression";
|
||||
}
|
||||
@@ -54,24 +54,28 @@ function parseFilterOperation(operators,filterString,p) {
|
||||
|
||||
p = nextBracketPos + 1;
|
||||
switch (bracket) {
|
||||
case '{': // Curly brackets
|
||||
operator.indirect = true;
|
||||
nextBracketPos = filterString.indexOf('}',p);
|
||||
break;
|
||||
case '[': // Square brackets
|
||||
nextBracketPos = filterString.indexOf(']',p);
|
||||
break;
|
||||
case '/': // regexp brackets
|
||||
var rex = /^((?:[^\\\/]*|\\.)*)\/(?:\(([mygi]+)\))?/g,
|
||||
rexMatch = rex.exec(filterString.substring(p));
|
||||
if(rexMatch) {
|
||||
operator.regexp = new RegExp(rexMatch[1], rexMatch[2]);
|
||||
nextBracketPos = p + rex.lastIndex - 1;
|
||||
}
|
||||
else {
|
||||
throw "Unterminated regular expression in filter expression";
|
||||
}
|
||||
break;
|
||||
case "{": // Curly brackets
|
||||
operator.indirect = true;
|
||||
nextBracketPos = filterString.indexOf("}",p);
|
||||
break;
|
||||
case "[": // Square brackets
|
||||
nextBracketPos = filterString.indexOf("]",p);
|
||||
break;
|
||||
case "<": // Angle brackets
|
||||
operator.variable = true;
|
||||
nextBracketPos = filterString.indexOf(">",p);
|
||||
break;
|
||||
case "/": // regexp brackets
|
||||
var rex = /^((?:[^\\\/]*|\\.)*)\/(?:\(([mygi]+)\))?/g,
|
||||
rexMatch = rex.exec(filterString.substring(p));
|
||||
if(rexMatch) {
|
||||
operator.regexp = new RegExp(rexMatch[1], rexMatch[2]);
|
||||
nextBracketPos = p + rex.lastIndex - 1;
|
||||
}
|
||||
else {
|
||||
throw "Unterminated regular expression in filter expression";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if(nextBracketPos === -1) {
|
||||
@@ -149,22 +153,22 @@ exports.getFilterOperators = function() {
|
||||
return this.filterOperators;
|
||||
};
|
||||
|
||||
exports.filterTiddlers = function(filterString,currTiddlerTitle,source) {
|
||||
exports.filterTiddlers = function(filterString,widget,source) {
|
||||
var fn = this.compileFilter(filterString);
|
||||
return fn.call(this,source,currTiddlerTitle);
|
||||
return fn.call(this,source,widget);
|
||||
};
|
||||
|
||||
/*
|
||||
Compile a filter into a function with the signature fn(source,currTiddlerTitle) where:
|
||||
Compile a filter into a function with the signature fn(source,widget) where:
|
||||
source: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)
|
||||
currTiddlerTitle: the optional name of the current tiddler
|
||||
widget: an optional widget node for retrieving the current tiddler etc.
|
||||
*/
|
||||
exports.compileFilter = function(filterString) {
|
||||
var filterParseTree;
|
||||
try {
|
||||
filterParseTree = this.parseFilter(filterString);
|
||||
} catch(e) {
|
||||
return function(source,currTiddlerTitle) {
|
||||
return function(source,widget) {
|
||||
return ["Filter error: " + e];
|
||||
};
|
||||
}
|
||||
@@ -176,9 +180,10 @@ exports.compileFilter = function(filterString) {
|
||||
var self = this;
|
||||
$tw.utils.each(filterParseTree,function(operation) {
|
||||
// Create a function for the chain of operators in the operation
|
||||
var operationSubFunction = function(source,currTiddlerTitle) {
|
||||
var operationSubFunction = function(source,widget) {
|
||||
var accumulator = source,
|
||||
results = [];
|
||||
results = [],
|
||||
currTiddlerTitle = widget && widget.getVariable("currentTiddler");
|
||||
$tw.utils.each(operation.operators,function(operator) {
|
||||
var operand = operator.operand,
|
||||
operatorFunction;
|
||||
@@ -192,6 +197,9 @@ exports.compileFilter = function(filterString) {
|
||||
if(operator.indirect) {
|
||||
operand = self.getTextReference(operator.operand,"",currTiddlerTitle);
|
||||
}
|
||||
if(operator.variable) {
|
||||
operand = widget.getVariable(operator.operand,{defaultValue: ""});
|
||||
}
|
||||
results = operatorFunction(accumulator,{
|
||||
operator: operator.operator,
|
||||
operand: operand,
|
||||
@@ -200,35 +208,47 @@ exports.compileFilter = function(filterString) {
|
||||
regexp: operator.regexp
|
||||
},{
|
||||
wiki: self,
|
||||
currTiddlerTitle: currTiddlerTitle
|
||||
widget: widget
|
||||
});
|
||||
accumulator = self.makeTiddlerIterator(results);
|
||||
if($tw.utils.isArray(results)) {
|
||||
accumulator = self.makeTiddlerIterator(results);
|
||||
} else {
|
||||
accumulator = results;
|
||||
}
|
||||
});
|
||||
return results;
|
||||
if($tw.utils.isArray(results)) {
|
||||
return results;
|
||||
} else {
|
||||
var resultArray = [];
|
||||
results(function(tiddler,title) {
|
||||
resultArray.push(title);
|
||||
});
|
||||
return resultArray;
|
||||
}
|
||||
};
|
||||
// Wrap the operator functions in a wrapper function that depends on the prefix
|
||||
operationFunctions.push((function() {
|
||||
switch(operation.prefix || "") {
|
||||
case "": // No prefix means that the operation is unioned into the result
|
||||
return function(results,source,currTiddlerTitle) {
|
||||
$tw.utils.pushTop(results,operationSubFunction(source,currTiddlerTitle));
|
||||
return function(results,source,widget) {
|
||||
$tw.utils.pushTop(results,operationSubFunction(source,widget));
|
||||
};
|
||||
case "-": // The results of this operation are removed from the main result
|
||||
return function(results,source,currTiddlerTitle) {
|
||||
$tw.utils.removeArrayEntries(results,operationSubFunction(source,currTiddlerTitle));
|
||||
return function(results,source,widget) {
|
||||
$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));
|
||||
};
|
||||
case "+": // This operation is applied to the main results so far
|
||||
return function(results,source,currTiddlerTitle) {
|
||||
return function(results,source,widget) {
|
||||
// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved
|
||||
source = self.makeTiddlerIterator(results);
|
||||
results.splice(0,results.length);
|
||||
$tw.utils.pushTop(results,operationSubFunction(source,currTiddlerTitle));
|
||||
$tw.utils.pushTop(results,operationSubFunction(source,widget));
|
||||
};
|
||||
}
|
||||
})());
|
||||
});
|
||||
// Return a function that applies the operations to a source iterator of tiddler titles
|
||||
return $tw.perf.measure("filter",function filterFunction(source,currTiddlerTitle) {
|
||||
return $tw.perf.measure("filter",function filterFunction(source,widget) {
|
||||
if(!source) {
|
||||
source = self.each;
|
||||
} else if(typeof source === "object") { // Array or hashmap
|
||||
@@ -236,7 +256,7 @@ exports.compileFilter = function(filterString) {
|
||||
}
|
||||
var results = [];
|
||||
$tw.utils.each(operationFunctions,function(operationFunction) {
|
||||
operationFunction(results,source,currTiddlerTitle);
|
||||
operationFunction(results,source,widget);
|
||||
});
|
||||
return results;
|
||||
});
|
||||
|
||||
31
core/modules/filters/after.js
Normal file
31
core/modules/filters/after.js
Normal file
@@ -0,0 +1,31 @@
|
||||
/*\
|
||||
title: $:/core/modules/filters/after.js
|
||||
type: application/javascript
|
||||
module-type: filteroperator
|
||||
|
||||
Filter operator returning the tiddler from the current list that is after the tiddler named in the operand.
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
/*
|
||||
Export our filter function
|
||||
*/
|
||||
exports.after = function(source,operator,options) {
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
results.push(title);
|
||||
});
|
||||
var index = results.indexOf(operator.operand);
|
||||
if(index === -1 || index > (results.length - 2)) {
|
||||
return [];
|
||||
} else {
|
||||
return [results[index + 1]];
|
||||
}
|
||||
};
|
||||
|
||||
})();
|
||||
@@ -5,7 +5,7 @@ module-type: filteroperator
|
||||
|
||||
Filter operator for selecting tiddlers
|
||||
|
||||
[all[tiddlers+shadows]]
|
||||
[all[shadows+tiddlers]]
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
@@ -33,6 +33,17 @@ exports.all = function(source,operator,options) {
|
||||
// Cycle through the suboperators accumulating their results
|
||||
var results = [],
|
||||
subops = operator.operand.split("+");
|
||||
// Check for common optimisations
|
||||
if(subops.length === 1 && subops[0] === "tiddlers") {
|
||||
return options.wiki.each;
|
||||
} else if(subops.length === 1 && subops[0] === "shadows") {
|
||||
return options.wiki.eachShadow;
|
||||
} else if(subops.length === 2 && subops[0] === "tiddlers" && subops[1] === "shadows") {
|
||||
return options.wiki.eachTiddlerPlusShadows;
|
||||
} else if(subops.length === 2 && subops[0] === "shadows" && subops[1] === "tiddlers") {
|
||||
return options.wiki.eachShadowPlusTiddlers;
|
||||
}
|
||||
// Do it the hard way
|
||||
for(var t=0; t<subops.length; t++) {
|
||||
var subop = allFilterOperators[subops[t]];
|
||||
if(subop) {
|
||||
|
||||
@@ -16,8 +16,9 @@ Filter function for [all[current]]
|
||||
Export our filter function
|
||||
*/
|
||||
exports.current = function(source,prefix,options) {
|
||||
if(options.currTiddlerTitle) {
|
||||
return [options.currTiddlerTitle];
|
||||
var currTiddlerTitle = options.widget && options.widget.getVariable("currentTiddler");
|
||||
if(currTiddlerTitle) {
|
||||
return [currTiddlerTitle];
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
|
||||
31
core/modules/filters/before.js
Normal file
31
core/modules/filters/before.js
Normal file
@@ -0,0 +1,31 @@
|
||||
/*\
|
||||
title: $:/core/modules/filters/before.js
|
||||
type: application/javascript
|
||||
module-type: filteroperator
|
||||
|
||||
Filter operator returning the tiddler from the current list that is before the tiddler named in the operand.
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
/*
|
||||
Export our filter function
|
||||
*/
|
||||
exports.before = function(source,operator,options) {
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
results.push(title);
|
||||
});
|
||||
var index = results.indexOf(operator.operand);
|
||||
if(index <= 0) {
|
||||
return [];
|
||||
} else {
|
||||
return [results[index - 1]];
|
||||
}
|
||||
};
|
||||
|
||||
})();
|
||||
31
core/modules/filters/get.js
Normal file
31
core/modules/filters/get.js
Normal file
@@ -0,0 +1,31 @@
|
||||
/*\
|
||||
title: $:/core/modules/filters/get.js
|
||||
type: application/javascript
|
||||
module-type: filteroperator
|
||||
|
||||
Filter operator for replacing tiddler titles by the value of the field specified in the operand.
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
/*
|
||||
Export our filter function
|
||||
*/
|
||||
exports.get = function(source,operator,options) {
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
if(tiddler) {
|
||||
var value = tiddler.getFieldString(operator.operand);
|
||||
if(value) {
|
||||
results.push(value);
|
||||
}
|
||||
}
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
})();
|
||||
@@ -16,16 +16,17 @@ Filter function for [is[current]]
|
||||
Export our filter function
|
||||
*/
|
||||
exports.current = function(source,prefix,options) {
|
||||
var results = [];
|
||||
var results = [],
|
||||
currTiddlerTitle = options.widget && options.widget.getVariable("currentTiddler");
|
||||
if(prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
if(title !== options.currTiddlerTitle) {
|
||||
if(title !== currTiddlerTitle) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if(title === options.currTiddlerTitle) {
|
||||
if(title === currTiddlerTitle) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
|
||||
37
core/modules/filters/is/tag.js
Normal file
37
core/modules/filters/is/tag.js
Normal file
@@ -0,0 +1,37 @@
|
||||
/*\
|
||||
title: $:/core/modules/filters/is/tag.js
|
||||
type: application/javascript
|
||||
module-type: isfilteroperator
|
||||
|
||||
Filter function for [is[tag]]
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
/*
|
||||
Export our filter function
|
||||
*/
|
||||
exports.tag = function(source,prefix,options) {
|
||||
var results = [],
|
||||
tagMap = options.wiki.getTagMap();
|
||||
if(prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
if(!$tw.utils.hop(tagMap,title)) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if($tw.utils.hop(tagMap,title)) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
}
|
||||
return results;
|
||||
};
|
||||
|
||||
})();
|
||||
@@ -18,7 +18,8 @@ Export our filter function
|
||||
exports.list = function(source,operator,options) {
|
||||
var results = [],
|
||||
tr = $tw.utils.parseTextReference(operator.operand),
|
||||
list = options.wiki.getTiddlerList(tr.title || options.currTiddlerTitle,tr.field,tr.index);
|
||||
currTiddlerTitle = options.widget && options.widget.getVariable("currentTiddler"),
|
||||
list = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);
|
||||
if(operator.prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
if(list.indexOf(title) === -1) {
|
||||
|
||||
@@ -16,9 +16,10 @@ Filter operator returning all tiddlers that have the selected tiddlers in a list
|
||||
Export our filter function
|
||||
*/
|
||||
exports.listed = function(source,operator,options) {
|
||||
var results = [];
|
||||
var field = operator.operand || "list",
|
||||
results = [];
|
||||
source(function(tiddler,title) {
|
||||
$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title));
|
||||
$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
@@ -18,7 +18,7 @@ Export our filter function
|
||||
exports.plugintiddlers = function(source,operator,options) {
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
var pluginInfo = options.wiki.getPluginInfo(title);
|
||||
var pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerData(title,{tiddlers:[]});
|
||||
if(pluginInfo) {
|
||||
$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {
|
||||
results.push(title);
|
||||
|
||||
@@ -25,10 +25,8 @@ exports.untagged = function(source,operator,options) {
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if(tiddler) {
|
||||
if(!tiddler.hasField("tags") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {
|
||||
$tw.utils.pushTop(results,title);
|
||||
}
|
||||
if(!tiddler || !tiddler.hasField("tags") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {
|
||||
$tw.utils.pushTop(results,title);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
24
core/modules/info/platform.js
Normal file
24
core/modules/info/platform.js
Normal file
@@ -0,0 +1,24 @@
|
||||
/*\
|
||||
title: $:/core/modules/info/platform.js
|
||||
type: application/javascript
|
||||
module-type: info
|
||||
|
||||
Initialise basic platform $:/info/ tiddlers
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.getInfoTiddlerFields = function() {
|
||||
var mapBoolean = function(value) {return value ? "yes" : "no"},
|
||||
infoTiddlerFields = [];
|
||||
// Basics
|
||||
infoTiddlerFields.push({title: "$:/info/browser", text: mapBoolean(!!$tw.browser)});
|
||||
infoTiddlerFields.push({title: "$:/info/node", text: mapBoolean(!!$tw.node)});
|
||||
return infoTiddlerFields;
|
||||
};
|
||||
|
||||
})();
|
||||
@@ -15,7 +15,7 @@ The CSV text parser processes CSV files into a table wrapped in a scrollable wid
|
||||
var CsvParser = function(type,text,options) {
|
||||
// Table framework
|
||||
this.tree = [{
|
||||
"type": "element", "tag": "$scrollable", "children": [{
|
||||
"type": "scrollable", "children": [{
|
||||
"type": "element", "tag": "table", "children": [{
|
||||
"type": "element", "tag": "tbody", "children": []
|
||||
}], "attributes": {
|
||||
|
||||
@@ -13,9 +13,18 @@ The HTML parser displays text as raw HTML
|
||||
"use strict";
|
||||
|
||||
var HtmlParser = function(type,text,options) {
|
||||
var src;
|
||||
if(options._canonical_uri) {
|
||||
src = options._canonical_uri;
|
||||
} else if(text) {
|
||||
src = "data:text/html," + encodeURIComponent(text);
|
||||
}
|
||||
this.tree = [{
|
||||
type: "raw",
|
||||
html: text
|
||||
type: "element",
|
||||
tag: "iframe",
|
||||
attributes: {
|
||||
src: {type: "string", value: src}
|
||||
}
|
||||
}];
|
||||
};
|
||||
|
||||
|
||||
@@ -19,7 +19,12 @@ var ImageParser = function(type,text,options) {
|
||||
attributes: {}
|
||||
},
|
||||
src;
|
||||
if(text) {
|
||||
if(options._canonical_uri) {
|
||||
element.attributes.src = {type: "string", value: options._canonical_uri};
|
||||
if(type === "application/pdf" || type === ".pdf") {
|
||||
element.tag = "embed";
|
||||
}
|
||||
} else if(text) {
|
||||
if(type === "application/pdf" || type === ".pdf") {
|
||||
element.attributes.src = {type: "string", value: "data:application/pdf;base64," + text};
|
||||
element.tag = "embed";
|
||||
|
||||
272
core/modules/parsers/parseutils.js
Normal file
272
core/modules/parsers/parseutils.js
Normal file
@@ -0,0 +1,272 @@
|
||||
/*\
|
||||
title: $:/core/modules/utils/parseutils.js
|
||||
type: application/javascript
|
||||
module-type: utils
|
||||
|
||||
Utility functions concerned with parsing text into tokens.
|
||||
|
||||
Most functions have the following pattern:
|
||||
|
||||
* The parameters are:
|
||||
** `source`: the source string being parsed
|
||||
** `pos`: the current parse position within the string
|
||||
** Any further parameters are used to identify the token that is being parsed
|
||||
* The return value is:
|
||||
** null if the token was not found at the specified position
|
||||
** an object representing the token with the following standard fields:
|
||||
*** `type`: string indicating the type of the token
|
||||
*** `start`: start position of the token in the source string
|
||||
*** `end`: end position of the token in the source string
|
||||
*** Any further fields required to describe the token
|
||||
|
||||
The exception is `skipWhiteSpace`, which just returns the position after the whitespace.
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
/*
|
||||
Look for a whitespace token. Returns null if not found, otherwise returns {type: "whitespace", start:, end:,}
|
||||
*/
|
||||
exports.parseWhiteSpace = function(source,pos) {
|
||||
var node = {
|
||||
type: "whitespace",
|
||||
start: pos
|
||||
};
|
||||
var re = /(\s)+/g;
|
||||
re.lastIndex = pos;
|
||||
var match = re.exec(source);
|
||||
if(match && match.index === pos) {
|
||||
node.end = pos + match[0].length;
|
||||
return node;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
/*
|
||||
Convenience wrapper for parseWhiteSpace. Returns the position after the whitespace
|
||||
*/
|
||||
exports.skipWhiteSpace = function(source,pos) {
|
||||
var whitespace = $tw.utils.parseWhiteSpace(source,pos);
|
||||
if(whitespace) {
|
||||
return whitespace.end;
|
||||
}
|
||||
return pos;
|
||||
};
|
||||
|
||||
/*
|
||||
Look for a given string token. Returns null if not found, otherwise returns {type: "token", value:, start:, end:,}
|
||||
*/
|
||||
exports.parseTokenString = function(source,pos,token) {
|
||||
var match = source.indexOf(token,pos) === pos;
|
||||
if(match) {
|
||||
return {
|
||||
type: "token",
|
||||
value: token,
|
||||
start: pos,
|
||||
end: pos + token.length
|
||||
};
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
/*
|
||||
Look for a token matching a regex. Returns null if not found, otherwise returns {type: "regexp", match:, start:, end:,}
|
||||
*/
|
||||
exports.parseTokenRegExp = function(source,pos,reToken) {
|
||||
var node = {
|
||||
type: "regexp",
|
||||
start: pos
|
||||
};
|
||||
reToken.lastIndex = pos;
|
||||
node.match = reToken.exec(source);
|
||||
if(node.match && node.match.index === pos) {
|
||||
node.end = pos + node.match[0].length;
|
||||
return node;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
Look for a string literal. Returns null if not found, otherwise returns {type: "string", value:, start:, end:,}
|
||||
*/
|
||||
exports.parseStringLiteral = function(source,pos) {
|
||||
var node = {
|
||||
type: "string",
|
||||
start: pos
|
||||
};
|
||||
var reString = /(?:"""([\s\S]*?)"""|"([^"]*)")|(?:'([^']*)')/g;
|
||||
reString.lastIndex = pos;
|
||||
var match = reString.exec(source);
|
||||
if(match && match.index === pos) {
|
||||
node.value = match[1] !== undefined ? match[1] :(
|
||||
match[2] !== undefined ? match[2] : match[3]
|
||||
);
|
||||
node.end = pos + match[0].length;
|
||||
return node;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
Look for a macro invocation parameter. Returns null if not found, or {type: "macro-parameter", name:, value:, start:, end:}
|
||||
*/
|
||||
exports.parseMacroParameter = function(source,pos) {
|
||||
var node = {
|
||||
type: "macro-parameter",
|
||||
start: pos
|
||||
};
|
||||
// Define our regexp
|
||||
var reMacroParameter = /(?:([A-Za-z0-9\-_]+)\s*:)?(?:\s*(?:"""([\s\S]*?)"""|"([^"]*)"|'([^']*)'|\[\[([^\]]*)\]\]|([^\s>"'=]+)))/g;
|
||||
// Skip whitespace
|
||||
pos = $tw.utils.skipWhiteSpace(source,pos);
|
||||
// Look for the parameter
|
||||
var token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);
|
||||
if(!token) {
|
||||
return null;
|
||||
}
|
||||
pos = token.end;
|
||||
// Get the parameter details
|
||||
node.value = token.match[2] !== undefined ? token.match[2] : (
|
||||
token.match[3] !== undefined ? token.match[3] : (
|
||||
token.match[4] !== undefined ? token.match[4] : (
|
||||
token.match[5] !== undefined ? token.match[5] : (
|
||||
token.match[6] !== undefined ? token.match[6] : (
|
||||
""
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
if(token.match[1]) {
|
||||
node.name = token.match[1];
|
||||
}
|
||||
// Update the end position
|
||||
node.end = pos;
|
||||
return node;
|
||||
};
|
||||
|
||||
/*
|
||||
Look for a macro invocation. Returns null if not found, or {type: "macrocall", name:, parameters:, start:, end:}
|
||||
*/
|
||||
exports.parseMacroInvocation = function(source,pos) {
|
||||
var node = {
|
||||
type: "macrocall",
|
||||
start: pos,
|
||||
params: []
|
||||
};
|
||||
// Define our regexps
|
||||
var reMacroName = /([^\s>"'=]+)/g;
|
||||
// Skip whitespace
|
||||
pos = $tw.utils.skipWhiteSpace(source,pos);
|
||||
// Look for a double less than sign
|
||||
var token = $tw.utils.parseTokenString(source,pos,"<<");
|
||||
if(!token) {
|
||||
return null;
|
||||
}
|
||||
pos = token.end;
|
||||
// Get the macro name
|
||||
var name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);
|
||||
if(!name) {
|
||||
return null;
|
||||
}
|
||||
node.name = name.match[1];
|
||||
pos = name.end;
|
||||
// Process parameters
|
||||
var parameter = $tw.utils.parseMacroParameter(source,pos);
|
||||
while(parameter) {
|
||||
node.params.push(parameter);
|
||||
pos = parameter.end;
|
||||
// Get the next parameter
|
||||
parameter = $tw.utils.parseMacroParameter(source,pos);
|
||||
}
|
||||
// Skip whitespace
|
||||
pos = $tw.utils.skipWhiteSpace(source,pos);
|
||||
// Look for a double greater than sign
|
||||
token = $tw.utils.parseTokenString(source,pos,">>");
|
||||
if(!token) {
|
||||
return null;
|
||||
}
|
||||
pos = token.end;
|
||||
// Update the end position
|
||||
node.end = pos;
|
||||
return node;
|
||||
};
|
||||
|
||||
/*
|
||||
Look for an HTML attribute definition. Returns null if not found, otherwise returns {type: "attribute", name:, valueType: "string|indirect|macro", value:, start:, end:,}
|
||||
*/
|
||||
exports.parseAttribute = function(source,pos) {
|
||||
var node = {
|
||||
start: pos
|
||||
};
|
||||
// Define our regexps
|
||||
var reAttributeName = /([^\/\s>"'=]+)/g,
|
||||
reUnquotedAttribute = /([^\/\s<>"'=]+)/g,
|
||||
reIndirectValue = /\{\{([^\}]+)\}\}/g;
|
||||
// Skip whitespace
|
||||
pos = $tw.utils.skipWhiteSpace(source,pos);
|
||||
// Get the attribute name
|
||||
var name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);
|
||||
if(!name) {
|
||||
return null;
|
||||
}
|
||||
node.name = name.match[1];
|
||||
pos = name.end;
|
||||
// Skip whitespace
|
||||
pos = $tw.utils.skipWhiteSpace(source,pos);
|
||||
// Look for an equals sign
|
||||
var token = $tw.utils.parseTokenString(source,pos,"=");
|
||||
if(token) {
|
||||
pos = token.end;
|
||||
// Skip whitespace
|
||||
pos = $tw.utils.skipWhiteSpace(source,pos);
|
||||
// Look for a string literal
|
||||
var stringLiteral = $tw.utils.parseStringLiteral(source,pos);
|
||||
if(stringLiteral) {
|
||||
pos = stringLiteral.end;
|
||||
node.type = "string";
|
||||
node.value = stringLiteral.value;
|
||||
} else {
|
||||
// Look for an indirect value
|
||||
var indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);
|
||||
if(indirectValue) {
|
||||
pos = indirectValue.end;
|
||||
node.type = "indirect";
|
||||
node.textReference = indirectValue.match[1];
|
||||
} else {
|
||||
// Look for a unquoted value
|
||||
var unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);
|
||||
if(unquotedValue) {
|
||||
pos = unquotedValue.end;
|
||||
node.type = "string";
|
||||
node.value = unquotedValue.match[1];
|
||||
} else {
|
||||
// Look for a macro invocation value
|
||||
var macroInvocation = $tw.utils.parseMacroInvocation(source,pos);
|
||||
if(macroInvocation) {
|
||||
pos = macroInvocation.end;
|
||||
node.type = "macro";
|
||||
node.value = macroInvocation;
|
||||
} else {
|
||||
node.type = "string";
|
||||
node.value = "true";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
node.type = "string";
|
||||
node.value = "true";
|
||||
}
|
||||
// Update the end position
|
||||
node.end = pos;
|
||||
return node;
|
||||
};
|
||||
|
||||
})();
|
||||
@@ -14,12 +14,11 @@ The plain text parser processes blocks of source text into a degenerate parse tr
|
||||
|
||||
var TextParser = function(type,text,options) {
|
||||
this.tree = [{
|
||||
type: "element",
|
||||
tag: "pre",
|
||||
children: [{
|
||||
type: "text",
|
||||
text: text
|
||||
}]
|
||||
type: "codeblock",
|
||||
attributes: {
|
||||
code: {type: "string", value: text},
|
||||
language: {type: "string", value: type}
|
||||
}
|
||||
}];
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user