24 Commits

Author SHA1 Message Date
5897a90a99 Merge branch 'privatization-fixes'
Signed-off-by: Jacob Kiers <code@kiers.eu>
2022-03-16 00:06:21 +01:00
77e649f747 Add feature to also redact custom link text
It is possible that a private person is linked to in a tiddler with the
syntax `[[Jane|MsJaneDoe]]`.

Up to now, the text of the link was not redacted, which could lead to
unintentional privacy leaks.

Therefore, a new parameter `replace_text` is introduced for the
`replace_private_people` builder.

When that is set to True, then the link text is also replaced with the
initials.

Signed-off-by: Jacob Kiers <code@kiers.eu>
2022-03-15 23:59:28 +01:00
77886cb1c6 Merge branch 'allow-specifying-listening-host' 2022-03-12 02:32:57 +01:00
57394668be Merge branch 'privatization-fixes' 2022-03-12 02:32:46 +01:00
3b1f91bcb0 Allow setting the host parameter
In order to run in a Docker container, it is necessary to listen on all interfaces (`0.0.0.0`).
So make it possible to set the host.

Fixes #1

Signed-off-by: Jacob Kiers <code@kiers.eu>
2022-03-12 02:31:57 +01:00
4075c4fb18 Add feature to also redact custom link text
It is possible that a private person is linked to in a tiddler with the
syntax `[[Jane|MsJaneDoe]]`.

Up to now, the text of the link was not redacted, which could lead to
unintentional privacy leaks.

Therefore, a new parameter `replace_text` is introduced for the
`replace_private_people` builder.

When that is set to True, then the link text is also replaced with the
initials.

Signed-off-by: Jacob Kiers <code@kiers.eu>
2022-03-12 01:50:05 +01:00
Soren I. Bjornstad
35ca2b896e regular update 2022-01-03 15:31:14 -06:00
Soren I. Bjornstad
0705c55e77 fix only one PrivatePerson replacement working per line
Because the 'line' variable was already bound in the outer loop, changes
to the line in the inner loop were lost in subsequent inner-loop
iterations, if required. Change to always indexing the array (which is
defined outside the scope of the loops) directly on every reference.

(This is why it's usually best not to modify things while looping over
them. Maybe a refactor could be in order.)
2021-11-29 21:47:21 -06:00
Soren I. Bjornstad
f8edb70065 bump version 2021-09-22 11:34:02 -05:00
Soren I. Bjornstad
218705bdc9 add walkthrough video link 2021-09-22 11:33:19 -05:00
Soren I. Bjornstad
48a8789c4d activate venv before trying publish
Was planning to do this myself, but I forgot so many times I'm just
adding it...
2021-09-22 11:29:05 -05:00
Soren Bjornstad
48ab7f9514 add walkthrough video to README 2021-09-22 11:28:36 -05:00
Soren I. Bjornstad
f2d9a2abe6 bump version 2021-09-22 10:58:25 -05:00
Soren I. Bjornstad
cb55a967d0 remove build folder prior to building wheels
Otherwise files that have been removed will still show up in the wheel
-- but not in the source distribution -- which is super confusing and
wrong. No idea why Python doesn't check this itself.
2021-09-22 10:57:18 -05:00
Soren I. Bjornstad
52c0daedbb fix tray 2021-09-22 10:54:06 -05:00
Soren I. Bjornstad
09b856488b bump version 2021-09-22 08:06:32 -05:00
Soren I. Bjornstad
9218a83d41 fix caption/description on several buttons 2021-09-22 07:58:17 -05:00
Soren I. Bjornstad
a896244367 fix permalink button going to my Zettelkasten 2021-09-22 07:52:15 -05:00
Soren I. Bjornstad
ec83de9978 fix 'compile_html_file' to use dirs_exist_ok
5065efd3 incorrectly changed to doing an rmtree of the entire target
since that was what editionify needed. Editionify should clean the
target directory, but the single HTML file build should not (it ended up
wiping my git repository from my hard drive). We might wish to revisit
this particular fix in the future since it still fails to delete removed
extimages, but this doesn't seem like a big deal.
2021-09-21 21:13:30 -05:00
Soren I. Bjornstad
9a70b67af7 bump version 2021-09-21 20:45:44 -05:00
Soren I. Bjornstad
86441e9618 don't carry FileSystemPaths into emptified edition
Better for people to set up their own scheme if they want one, and it
avoids tiddlers potentially being in two different places (since
FileSystemPaths isn't honored during an init/savewikifolder).
2021-09-21 20:44:12 -05:00
Soren I. Bjornstad
2f53a8f616 fix missing link and missing kill phrases tiddler 2021-09-21 20:20:37 -05:00
Soren I. Bjornstad
c335597b57 adjust explanation of restore-plugins situation
It was just me being dense...I was overwriting the existing plugins
array.
2021-09-21 13:08:55 -05:00
Soren I. Bjornstad
a7bdd2397e fix bad URL to license 2021-09-21 12:44:53 -05:00
62 changed files with 1137 additions and 19462 deletions

View File

@@ -19,7 +19,7 @@ Some basic knowledge of [TiddlyWiki](https://tiddlywiki.com)
Documentation / Installation
============================
----------------------------
Find a live version of the edition on the web with further instructions
at https://sobjornstad.github.io/tzk/.
@@ -28,3 +28,14 @@ You can find the documentation for the CLI
versioning with Git,
and creating public and other derivative versions of the wiki)
at https://tzk.readthedocs.io/en/latest/.
Video walkthrough
-----------------
Since tzk is still in an alpha state,
general instructions on how to use it are somewhat lacking at the moment.
To fill in the gap in the meantime,
I recorded an hour-long walkthrough showing how you might take notes using tzk;
you can select individual sections to watch if that's longer than you want.
[Watch the video on YouTube](https://www.youtube.com/watch?v=9X_T-DVie8o).

View File

@@ -5,7 +5,7 @@
2. Update version numbers:
`setup.py`,
`cli_docs/conf.py`,
`util.py`.
`tzk/util.py`.
3. Push changes to GitHub.
Check that RTD and GitHub Pages update as desired
(https://tzk.readthedocs.io/en/latest/,

View File

@@ -18,9 +18,9 @@ copyright = '2021 Soren Bjornstad'
author = 'Soren Bjornstad'
# The short X.Y version
version = "0.1.0"
version = "0.1.4"
# The full version, including alpha/beta/rc tags
release = "0.1.0"
release = "0.1.4"
# -- General configuration ---------------------------------------------------

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,8 @@
#!/bin/bash
set -e
. venv/bin/activate
rm -rf build/
rm -f dist/*
mkdir -p dist
python setup.py sdist bdist_wheel

View File

@@ -9,7 +9,7 @@ with open("README.md", "r") as fh:
setuptools.setup(
name="tzk",
version="0.1.0",
version="0.1.4",
author="Soren I. Bjornstad",
author_email="zettelkasten@sorenbjornstad.com",
description="Build tool for TiddlyWiki Zettelkasten",

View File

@@ -83,6 +83,12 @@ class ListenCommand(CliCommand):
@classmethod
def setup_arguments(cls, parser: argparse.ArgumentParser) -> None:
parser.add_argument(
"--host",
metavar="HOST",
help="Host to listen on.",
default=str(cm().listen_host or "127.0.0.1"),
)
parser.add_argument(
"-p", "--port",
metavar="PORT",
@@ -109,6 +115,7 @@ class ListenCommand(CliCommand):
tw.exec(
[
("listen",
f"host={args.host}",
f"port={args.port}",
f"username={args.username}",
f"password={args.password}")
@@ -402,7 +409,7 @@ def launch():
parser = argparse.ArgumentParser(
description=f"TiddlyZettelKasten {TZK_VERSION} CLI\n"
f"Copyright (c) 2021 Soren Bjornstad.\n"
f"MIT license; see https://github.com/sobjornstad/tzk/LICENSE for details.",
f"MIT license; see https://github.com/sobjornstad/tzk/blob/master/LICENSE for details.",
epilog="For full documentation, see https://tzk.readthedocs.io/en/latest/.",
formatter_class=argparse.RawDescriptionHelpFormatter
)

View File

@@ -188,13 +188,13 @@ def check_for_kill_phrases(kill_phrase_file: str = None) -> None:
:param kill_phrase_file: The path from the source wiki's root directory to the
config tiddler containing kill phrases. In the default
Zettelkasten edition, this is
tiddlers/_system/config/zettelkasten/Build/KillPhrases.tid;
"tiddlers/$__config_zettelkasten_Build_KillPhrases.tid";
if you change the way paths are determined, you can give
a different path here.
"""
assert 'public_wiki_folder' in build_state, "new_output_folder builder must run first"
if kill_phrase_file is None:
kill_phrase_file = "tiddlers/_system/config/zettelkasten/Build/KillPhrases.tid"
kill_phrase_file = "tiddlers/$__config_zettelkasten_Build_KillPhrases.tid"
kill_phrases = set()
with open(kill_phrase_file) as f:
@@ -278,7 +278,8 @@ def compile_html_file(
will be placed, relative to the private wiki's root directory.
Default ``output/public_site``.
:param overwrite: If the ``output_folder`` already exists,
should we overwrite it? Default True.
should we overwrite any files in it with the same name?
Default True.
:param externalize_attachments: If True, update tiddlers that match
the ``attachment_filter`` parameter to point to
external versions of their content.
@@ -311,13 +312,10 @@ def compile_html_file(
f"(To overwrite any files existing in the output folder, "
f"set overwrite = True for this builder.)")
try:
shutil.rmtree(output_folder)
except FileNotFoundError:
pass
shutil.copytree(
Path(build_state['public_wiki_folder']) / "output",
Path(output_folder),
dirs_exist_ok=True
)
info(f"Successfully copied built output to {os.path.abspath(output_folder)}.")
@@ -362,7 +360,7 @@ def _private_people_replacement_table(
@tzk_builder
def replace_private_people(initialer: Callable[[str], str] = None) -> None:
def replace_private_people(initialer: Callable[[str], str] = None, replace_link_text = False) -> None:
"""
Replace the names of people who are not marked Public with their initials.
@@ -386,35 +384,60 @@ def replace_private_people(initialer: Callable[[str], str] = None) -> None:
that takes one string argument
(a tiddler filename without the full path, e.g., ``MsJaneDoe.tid``)
and returns a string to be considered the "initials" of that person.
:param replace_link_text: If you have links in the form
``So then [[John said|MrJohnDoe]] something about this``,
then enabling this option ensures that the link is fully
replaced with
``So then [[J.D.|PrivatePerson]] something about this``.
This means that when using this feature, having the
link text also be meaningful after redaction is important.
.. warning ::
Using this link replacement feature does not redact everything, just the link
(and the link text with `replace_link_text` enabled). So *do not* rely on it
for redacting everything. Making a tiddler public still needs consideration and
tooling is there to help, not to replace your own judgment.
"""
assert 'public_wiki_folder' in build_state
replacement_table = _private_people_replacement_table(initialer)
from pprint import pprint; pprint(replacement_table)
tid_files = (Path(build_state['public_wiki_folder']) / "tiddlers").glob("**/*.tid")
for tiddler in tid_files:
dirty = False
with tiddler.open() as f:
lines = f.readlines()
for idx, line in enumerate(lines):
for i in range(len(lines)):
for replace_person, replace_initials in replacement_table.items():
if replace_person in line:
if '|' + replace_person + ']]' in line:
if replace_person in lines[i]:
if '|' + replace_person + ']]' in lines[i]:
# link with the person as the target only;
# beware that you might have put something private in the text
lines[idx] = line.replace(replace_person,
'PrivatePerson')
elif '[[' + replace_person + ']]' in line:
if replace_link_text:
# with this option, the initials are also
# put in the text, solving the warning before
end = lines[i].find('|' + replace_person + ']]')
start = lines[i].rfind('[[', 0, end) + 2
search = f"[[{lines[i][start:end]}|{replace_person}]]"
replace = f"[[{replace_initials}|PrivatePerson]]"
lines[i] = lines[i].replace(search, replace)
else:
lines[i] = lines[i].replace(replace_person, 'PrivatePerson')
elif '[[' + replace_person + ']]' in lines[i]:
# link with the person as the target and text
lines[idx] = line.replace(replace_person,
replace_initials + '|PrivatePerson')
lines[i] = lines[i].replace(
replace_person,
replace_initials + '|PrivatePerson')
else:
# camel-case link or unlinked reference in text;
# or spurious substring, so rule that out with the '\b' search
lines[idx] = re.sub(
lines[i] = re.sub(
r"\b" + re.escape(replace_person) + r"\b",
f'<<privateperson "{replace_initials}">>',
line
lines[i]
)
dirty = True
if dirty:

View File

@@ -0,0 +1,5 @@
created: 20210925145600000
modified: 20210925145600000
tags:
title: $:/config/TiddlyRemember/DefaultClasses
type: text/vnd.tiddlywiki

View File

@@ -0,0 +1,7 @@
created: 20210929144900000
modified: 20210929144900000
tags:
title: $:/config/TiddlyRemember/snippets/remembercz
<<remembercz "%NOTE_ID%"
"Cloze">>

View File

@@ -0,0 +1,8 @@
created: 20210929144900000
modified: 20210929144900000
tags:
title: $:/config/TiddlyRemember/snippets/rememberq
<<rememberq "%NOTE_ID%"
"Q"
"A">>

View File

@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2020 Soren Bjornstad.
Copyright (c) 2020-2021 Soren Bjornstad and the TiddlyRemember community.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -0,0 +1,20 @@
created: 20210929144300000
modified: 20210929144300000
tags: $:/tags/Macro
title: $:/plugins/sobjornstad/TiddlyRemember/macros/insert-snippet
type: text/vnd.tiddlywiki
\define tr-insert-note(snippet)
<$vars
thetime=<<now "[UTC]YYYY0MM0DD0hh0mm0ss0XXX">>
theprefix={{$:/config/TiddlyRemember/IdPrefix}}>
<$vars
noteid={{{ [<theprefix>addsuffix<thetime>] }}}
editingtid={{{ [<storyTiddler>get[draft.of]] }}}>
<$action-sendmessage
$message="tm-edit-text-operation"
$param="replace-selection"
text={{{ [<__snippet__>search-replace[%NOTE_ID%],<noteid>search-replace[%EDITING_TIDDLER%],<editingtid>] }}}/>
</$vars>
</$vars>
\end

View File

@@ -1,10 +1,10 @@
created: 20200510004110231
modified: 20200730205800000
modified: 20200925141800000
tags: $:/tags/Macro
title: $:/plugins/sobjornstad/TiddlyRemember/macros/remember
type: text/vnd.tiddlywiki
\define remembertwo(id, reference)
\define remembertwo(id, reference, sched)
<div class="tr-selfidentification">
<$set name="selfid" filter="""[enlist[$reference$]]""" value="""[<$link to="$reference$">$reference$</$link>: $id$]""" emptyValue="[$id$]">
<<selfid>>
@@ -16,10 +16,13 @@ type: text/vnd.tiddlywiki
<div class="tr-reference">
<$text text=<<__reference__>>/>
</div>
<div class="tr-sched">
<$text text=<<__sched__>>/>
</div>
\end
\define rememberq(id, question, answer, reference: "")
<div class="rememberq remembertwo">
\define rememberq(id, question, answer, reference: "", sched: "", class:"")
<div class={{{ [[rememberq remembertwo ]addsuffix<__class__>addsuffix[ ]addsuffix{$:/config/TiddlyRemember/DefaultClasses}] }}}>
<div class="rquestion tr-ritem">
<div>Q:</div>
<p>$question$</p>
@@ -28,12 +31,12 @@ type: text/vnd.tiddlywiki
<div>A:</div>
<p>$answer$</p>
</div>
<$macrocall $name=remembertwo id=<<__id__>> reference=<<__reference__>>/>
<$macrocall $name=remembertwo id=<<__id__>> reference=<<__reference__>> sched=<<__sched__>>/>
</div>
\end
\define rememberp(id, first, second, reference: "")
<div class="rememberp remembertwo">
\define rememberp(id, first, second, reference: "", sched: "", class: "")
<div class={{{ [[rememberp remembertwo ]addsuffix<__class__>addsuffix[ ]addsuffix{$:/config/TiddlyRemember/DefaultClasses}] }}}>
<div class="rfirst tr-ritem">
<div>1:</div>
<p>$first$</p>
@@ -42,52 +45,51 @@ type: text/vnd.tiddlywiki
<div>2:</div>
<p>$second$</p>
</div>
<$macrocall $name=remembertwo id=<<__id__>> reference=<<__reference__>>/>
<$macrocall $name=remembertwo id=<<__id__>> reference=<<__reference__>> sched=<<__sched__>>/>
</div>
\end
\define remembercz(id, text, mode: "block", reference: "")
<$list filter="[[$mode$]match[inline]]">
<$macrocall $name=twRememberClozeInline id=<<__id__>> text=<<__text__>> reference=<<__reference__>>/>
\define remembercz(id, text, mode: "block", reference: "", sched: "", class: "")
<$list filter="[[$mode$]match[inline]]" variable=_>
<$macrocall $name=twRememberClozeInline id=<<__id__>> text=<<__text__>> reference=<<__reference__>> sched=<<__sched__>> class=<<__class__>>/>
</$list>
<$list filter="[[$mode$]!match[inline]]">
<$macrocall $name=twRememberClozeBlock id=<<__id__>> text=<<__text__>> reference=<<__reference__>>/>
<$list filter="[[$mode$]!match[inline]]" variable=_>
<$macrocall $name=twRememberClozeBlock id=<<__id__>> text=<<__text__>> reference=<<__reference__>> sched=<<__sched__>> class=<<__class__>>/>
</$list>
\end
\define twRememberClozeBlock(id, text, reference)
<div class="remembercz">
<span class="cloze-identifier">cloze: </span>
<span class="cloze-text">$text$</span>
<div class="tr-selfidentification">
<$set name="selfid" filter="""[enlist[$reference$]]""" value="""[<$link to="$reference$">$reference$</$link>: $id$]""" emptyValue="[$id$]">
<<selfid>>
</$set>
</div>
<div class="rid">
[$id$]
</div>
<div class="tr-reference">
<$text text=<<__reference__>>/>
</div>
\define twRememberMetadata(id, reference, sched)
<div class="tr-selfidentification">
<$set name="selfid" filter="""[enlist[$reference$]]""" value="""[<$link to="$reference$">$reference$</$link>: $id$]""" emptyValue="[$id$]">
<<selfid>>
</$set>
</div>
<div class="rid">
[$id$]
</div>
<div class="tr-reference">
<$text text=<<__reference__>>/>
</div>
<div class="tr-sched">
<$text text=<<__sched__>>/>
</div>
\end
\define twRememberClozeInline(id, text, reference)
<span class="remembercz">
<span class="cloze-identifier">{cloze: </span>
\define twRememberClozeBlock(id, text, reference, sched, class)
<div class={{{ [[remembercz ]addsuffix<__class__>addsuffix[ ]addsuffix{$:/config/TiddlyRemember/DefaultClasses}] }}}>
<span class="cloze-identifier"><span class="tr-name-cloze">cloze: </span></span>
<span class="cloze-display"><$set name="unescape" value={{{ [<__text__>search-replace:g[\{],[{]search-replace:g[\}],[}]] }}}><<unescape>></$set></span>
<span class="cloze-text">$text$</span>
<$macrocall $name="twRememberMetadata" id=<<__id__>> reference=<<__reference__>> sched=<<__sched__>>/>
</div>
\end
\define twRememberClozeInline(id, text, reference, sched, class)
<span class={{{ [[remembercz ]addsuffix<__class__>addsuffix[ ]addsuffix{$:/config/TiddlyRemember/DefaultClasses}] }}}>
<span class="cloze-identifier">{<span class="tr-name-cloze">cloze: </span></span>
<span class="cloze-display"><$set name="unescape" value={{{ [<__text__>search-replace:g[\{],[{]search-replace:g[\}],[}]] }}}><<unescape>></$set></span>
<span class="cloze-identifier">}</span>
<div class="tr-selfidentification">
<$set name="selfid" filter="""[enlist[$reference$]]""" value="""[<$link to="$reference$">$reference$</$link>: $id$]""" emptyValue="[$id$]">
<<selfid>>
</$set>
</div>
<div class="rid">
[$id$]
</div>
<div class="tr-reference">
<$text text=<<__reference__>>/>
</div>
<span class="cloze-text">$text$</span>
<$macrocall $name="twRememberMetadata" id=<<__id__>> reference=<<__reference__>> sched=<<__sched__>>/>
</span>
\end

View File

@@ -43,7 +43,8 @@ div.remembercz {
color: <<colour muted-foreground>>;
}
/* the separate reference and ID fields are only for TR's benefit */
/* these separate fields are only read by the TR parser */
div.remembertwo div.tr-reference, .remembercz div.tr-reference {
display: none;
}
@@ -51,3 +52,28 @@ div.remembertwo div.tr-reference, .remembercz div.tr-reference {
div.remembertwo div.rid, .remembercz div.rid {
display: none;
}
div.remembertwo div.tr-sched, .remembercz div.tr-sched {
display: none;
}
.remembercz > span.cloze-text {
display: none;
}
/***** Built-in classes for common format customizations; apply to the class: parameter to macros *****/
/* Hide the ID field */
.tr-hide-id div.tr-selfidentification {
display: none;
}
/* Hide the ID only if it's an inline cloze */
span.remembercz.tr-hide-inline-cloze-id div.tr-selfidentification {
display: none;
}
/* Hide the word "cloze" on inline clozes */
span.remembercz.tr-hide-inline-cloze-name span.cloze-identifier span.tr-name-cloze {
display: none;
}

View File

@@ -6,9 +6,13 @@ type: text/vnd.tiddlywiki
\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]
<span id="tr-version">1.2.2</span>
<$set name="tr-rendering" value="yes">
<span id="tr-version">1.3.2</span>
{{||$:/plugins/sobjornstad/TiddlyRemember/templates/AnkiDecks}}
{{||$:/plugins/sobjornstad/TiddlyRemember/templates/AnkiTags}}
<$transclude mode="block" />
</$set>

View File

@@ -10,21 +10,4 @@ tags: $:/tags/EditorToolbar
title: $:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz
type: text/vnd.tiddlywiki
\define getMacro()
<<remembercz "$(clozeid)$"
"Cloze">>
\end
\define prefixId() $(theprefix)$$(thetime)$
<$set name=thetime value=<<now "[UTC]YYYY0MM0DD0hh0mm0ss0XXX">> >
<$set name=theprefix value={{$:/config/TiddlyRemember/IdPrefix}}>
<$set name=clozeid value=<<prefixId>> >
<$action-sendmessage
$message="tm-edit-text-operation"
$param="replace-selection"
text=<<getMacro>>
/>
</$set>
</$set>
</$set>
<$macrocall $name=tr-insert-note snippet={{$:/config/TiddlyRemember/snippets/remembercz}}>

View File

@@ -9,22 +9,4 @@ tags: $:/tags/EditorToolbar
title: $:/plugins/sobjornstad/TiddlyRemember/toolbar/rememberq
type: text/vnd.tiddlywiki
\define getMacro()
<<rememberq "$(questionid)$"
"Q"
"A">>
\end
\define prefixId() $(theprefix)$$(thetime)$
<$set name=thetime value=<<now "[UTC]YYYY0MM0DD0hh0mm0ss0XXX">> >
<$set name=theprefix value={{$:/config/TiddlyRemember/IdPrefix}}>
<$set name=questionid value=<<prefixId>> >
<$action-sendmessage
$message="tm-edit-text-operation"
$param="replace-selection"
text=<<getMacro>>
/>
</$set>
</$set>
</$set>
<$macrocall $name=tr-insert-note snippet={{$:/config/TiddlyRemember/snippets/rememberq}}>

View File

@@ -2,7 +2,7 @@
"title": "$:/plugins/sobjornstad/TiddlyRemember",
"description": "TiddlyRemember: Embed Anki notes in your TiddlyWiki",
"author": "Soren Bjornstad",
"version": "1.2.2",
"version": "1.3.2",
"core-version": ">=5.1.21",
"source": "https://github.com/sobjornstad/TiddlyRemember",
"list": "readme license",

View File

@@ -0,0 +1,68 @@
caption: Shuffle Operator
title: $:/plugins/mklauber/shuffle/readme
|!purpose|Randomize the order of the input list|
|!input|a selection of titles|
|!parameter|a random string to be used to create consistent random ordering|
|!output|The input titles, rearranged in a random order|
This plugin implements a new filter operator called Shuffle. This operator takes the input list and randomizes the order of the list. If no parameter is provided, the list order is random every time.
!!!Example:
```
<$list filter="1 2 3 4 5 +[shuffle[]]">
</$list>
```
<$button popup="$:/state/shuffle/reveal1">Run Demo</$button>
<$reveal type="popup" state="$:/state/shuffle/reveal1">
<div class="tc-drop-down">
<$list filter="1 2 3 4 5 +[shuffle[]]">
</$list>
</div>
</$reveal>
Combining this operator with the first operator allows you to choose 1 or more titles randomly from a list.
!!!Example:
```
<$list filter="1 2 3 4 5 +[shuffle[]first[2]]">
</$list>
```
<$button popup="$:/state/shuffle/reveal2">Run Demo</$button>
<$reveal type="popup" state="$:/state/shuffle/reveal2">
<div class="tc-drop-down">
<$list filter="1 2 3 4 5 +[shuffle[]first[2]]">
</$list>
</div>
</$reveal>
If a parameter is provided the list will be ordered identically every time it is rendered. This can be useful in conjunction a button that updates a state tiddler. Set the parameter of this operator to reference that state tiddler, and create a button that updates that tiddler, and now the ordering of the random operators only changes when the button is pressed.
!!!Example:
```
<$button>
<$action-setfield $tiddler="$:/temp/shuffle/example" $field="state" $value=<<now "0hh:0mm:0ss">>/>
Change Order
</$button>
<$list filter="1 2 3 4 5 +[shuffle{$:/temp/shuffle/example!!state}]">
</$list>
```
<$button>
<$action-setfield $tiddler="$:/temp/shuffle/example" $field="state" $value=<<now "0hh:0mm:0ss">>/>
Update
</$button>
<$list filter="1 2 3 4 5 +[shuffle{$:/temp/shuffle/example!!state}]">
</$list>

View File

@@ -0,0 +1 @@
!function(a,b){function c(c,j,k){var n=[];j=1==j?{entropy:!0}:j||{};var s=g(f(j.entropy?[c,i(a)]:null==c?h():c,3),n),t=new d(n),u=function(){for(var a=t.g(m),b=p,c=0;a<q;)a=(a+c)*l,b*=l,c=t.g(1);for(;a>=r;)a/=2,b/=2,c>>>=1;return(a+c)/b};return u.int32=function(){return 0|t.g(4)},u.quick=function(){return t.g(4)/4294967296},u.double=u,g(i(t.S),a),(j.pass||k||function(a,c,d,f){return f&&(f.S&&e(f,t),a.state=function(){return e(t,{})}),d?(b[o]=a,c):a})(u,s,"global"in j?j.global:this==b,j.state)}function d(a){var b,c=a.length,d=this,e=0,f=d.i=d.j=0,g=d.S=[];for(c||(a=[c++]);e<l;)g[e]=e++;for(e=0;e<l;e++)g[e]=g[f=s&f+a[e%c]+(b=g[e])],g[f]=b;(d.g=function(a){for(var b,c=0,e=d.i,f=d.j,g=d.S;a--;)b=g[e=s&e+1],c=c*l+g[s&(g[e]=g[f=s&f+b])+(g[f]=b)];return d.i=e,d.j=f,c})(l)}function e(a,b){return b.i=a.i,b.j=a.j,b.S=a.S.slice(),b}function f(a,b){var c,d=[],e=typeof a;if(b&&"object"==e)for(c in a)try{d.push(f(a[c],b-1))}catch(a){}return d.length?d:"string"==e?a:a+"\0"}function g(a,b){for(var c,d=a+"",e=0;e<d.length;)b[s&e]=s&(c^=19*b[s&e])+d.charCodeAt(e++);return i(b)}function h(){try{var b;return j&&(b=j.randomBytes)?b=b(l):(b=new Uint8Array(l),(k.crypto||k.msCrypto).getRandomValues(b)),i(b)}catch(b){var c=k.navigator,d=c&&c.plugins;return[+new Date,k,d,k.screen,i(a)]}}function i(a){return String.fromCharCode.apply(0,a)}var j,k=this,l=256,m=6,n=52,o="random",p=b.pow(l,m),q=b.pow(2,n),r=2*q,s=l-1;if(b["seed"+o]=c,g(b.random(),a),"object"==typeof module&&module.exports){module.exports=c;try{j=require("crypto")}catch(a){}}else"function"==typeof define&&define.amd&&define(function(){return c})}([],Math);

View File

@@ -0,0 +1,6 @@
created: 20180220123939614
modified: 20180220125617309
module-type: library
tags:
title: $:/plugins/mklauber/shuffle/seedrandom.js
type: application/javascript

View File

@@ -0,0 +1,53 @@
(function(){
"use strict";
var hash = function(str) {
var hash = 0, i, chr, len;
if (str.length === 0) return hash;
for (i = 0, len = str.length; i < len; i++) {
chr = str.charCodeAt(i);
hash = ((hash << 5) - hash) + chr;
hash |= 0; // Convert to 32bit integer
}
return hash;
}
var shuffle = function(array, seed) {
var currentIndex = array.length, temporaryValue, randomIndex ;
Math.seedrandom(seed)
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
var prepare_results = function (source) {
var results = [];
source(function(tiddler,title) {
results.push(title);
});
return results;
};
exports.shuffle = function(source, operator, options) {
var results = prepare_results(source);
if (operator['operand'] == "") {
shuffle(results);
} else {
shuffle(results, hash(operator['operand']));
}
return results;
}
})();

View File

@@ -0,0 +1,6 @@
caption: A filter Operator to randomize the order of the list passed to it.
created: 20150811171933696
modified: 20180220125039203
module-type: filteroperator
title: $:/plugins/mklauber/shuffle/shuffle.js
type: application/javascript

View File

@@ -0,0 +1,5 @@
exports.name = "shuffle"
exports.before = ["render"]
exports.startup = function() {
$tw.modules.execute('$:/plugins/mklauber/shuffle/seedrandom.js');
}

View File

@@ -0,0 +1,6 @@
created: 20180220133753576
modified: 20180220133920300
module-type: startup
tags:
title: $:/plugins/mklauber/shuffle/startup.js
type: application/javascript

View File

@@ -0,0 +1,13 @@
{
"author": "Matthew Lauber",
"core-version": ">=5.0.0",
"created": "20210105134918257",
"dependents": "",
"description": "A Shuffle filter operator",
"list": "readme",
"modified": "20211107172616237",
"plugin-type": "plugin",
"source": "https://github.com/mklauber/tiddly-shuffle",
"title": "$:/plugins/mklauber/shuffle",
"version": "1.0.2"
}

View File

@@ -0,0 +1,8 @@
created: 20210928031215487
creator: soren
modified: 20210928031216652
modifier: soren
title: $:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/do-thing
type: text/vnd.tiddlywiki
show

View File

@@ -1,15 +0,0 @@
created: 20200427015719697
modified: 20200427020204931
tags:
title: $:/config/FileSystemPaths
type: text/vnd.tiddlywiki
[is[system]removeprefix[$:/]addprefix[_system/]]
[tag[Template]tag[Meta]tag[Tool]addprefix[_meta/]]
[tag[Image]tag[Attachment]addprefix[media/]]
[tag[Journal]addprefix[journal/]]
[tag[Source]addprefix[source/]]
[tag[Sink]addprefix[sink/]]
[tag[PAO]addprefix[pao/]]
[tag[Place]addprefix[place/]]
[tag[Publication]tag[Class]addprefix[metasource/]]

View File

@@ -1,5 +1,5 @@
created: 20200516190911842
modified: 20210308030709436
modified: 20211113234932630
tags:
title: $:/config/TiddlyRemember/TagMapping
type: text/vnd.tiddlywiki

View File

@@ -3,4 +3,4 @@ modified: 20201120173215063
title: $:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink
type: text/vnd.tiddlywiki
hide
show

View File

@@ -1,6 +1,8 @@
created: 20210525001044166
modified: 20210525000849030
creator: soren
modified: 20210922125743198
modifier: soren
title: $:/config/ViewToolbarButtons/Visibility/$:/sib/Buttons/CopyPublicZettelkastenLink
type: text/vnd.tiddlywiki
show
hide

View File

@@ -0,0 +1,5 @@
created: 20210731165327653
modified: 20210731173813193
title: $:/config/zettelkasten/Build/KillPhrases
type: text/vnd.tiddlywiki

View File

@@ -2,9 +2,9 @@ caption: Sidebar info links
created: 20210623014408947
creator: soren
description: Show navigation links to the most important parts of the wiki underneath the subtitle.
modified: 20210825145449987
modified: 20211107173557802
modifier: soren
private: no
private: yes
public: no
tags:
title: $:/config/zettelkasten/FeatureFlags/SidebarInfoLinks

View File

@@ -2,7 +2,7 @@ caption: Spoiler banner
created: 20210622003118415
creator: soren
description: Display a warning banner on fiction tiddlers (any tiddler with a non-empty `universe` field) noting that we don't try to hide spoilers.
modified: 20210909130158483
modified: 20211107181812051
modifier: soren
private: no
public: no

View File

@@ -0,0 +1,19 @@
caption: {{$:/language/Buttons/Linkify/Caption}}
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]
created: 20210928031136147
creator: soren
description: {{$:/language/Buttons/Linkify/Hint}}
icon: $:/core/images/linkify
modified: 20210928031136215
modifier: soren
shortcuts: ((linkify))
tags: $:/tags/EditorToolbar
title: $:/core/ui/EditorToolbar/linkify
type: text/vnd.tiddlywiki
<$action-sendmessage
$message="tm-edit-text-operation"
$param="wrap-selection"
prefix="[["
suffix="]]"
/>

View File

@@ -0,0 +1,19 @@
caption: {{$:/language/Buttons/Transcludify/Caption}}
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]
created: 20210928031136147
creator: soren
description: {{$:/language/Buttons/Transcludify/Hint}}
icon: $:/core/images/transcludify
modified: 20210928031136239
modifier: soren
shortcuts: ((transcludify))
tags: $:/tags/EditorToolbar
title: $:/core/ui/EditorToolbar/transcludify
type: text/vnd.tiddlywiki
<$action-sendmessage
$message="tm-edit-text-operation"
$param="wrap-selection"
prefix="{{"
suffix="}}"
/>

View File

@@ -0,0 +1,52 @@
/*\
title: $:/inmysocks/macros/day-diff.js
type: application/javascript
module-type: macro
Takes two dates and returns their difference in days
\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";
/*
Information about this macro
*/
exports.name = "day-diff";
exports.params = [
{name: "year1"},
{name: "month1"},
{name: "day1"},
{name: "year2"},
{name: "month2"},
{name: "day2"}
];
/*
Run the macro
*/
exports.run = function(year1, month1, day1, year2, month2, day2) {
//Make each date object.
var date1 = new Date(year1, Number(month1)+Number(1), day1);
var date2 = new Date(year2, Number(month2)+Number(1), day2);
//Find difference in milliseconds.
var elapsed = date2.getTime()-date1.getTime();
//Number of milliseconds in a day.
var dayMS = 86400000;
//Convert milliseconds to year months and days
var days_diff = Math.floor(elapsed/dayMS);
var result = days_diff;
return result;
};
})();

View File

@@ -0,0 +1,6 @@
created: 20150225185218583
modified: 20211204021739668
module-type: macro
tags:
title: $:/inmysocks/macros/day-diff.js
type: application/javascript

View File

@@ -0,0 +1,31 @@
caption: RememberCz
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]
created: 20200517155905263
creator: soren
description: Remember Cloze Deletion
icon: $:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-black.svg
modified: 20211113234933532
modifier: soren
shortcuts: ((remembercz))
tags: $:/tags/EditorToolbar
title: $:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz
type: text/vnd.tiddlywiki
\define getMacro()
<<remembercz "$(clozeid)$"
"Cloze">>
\end
\define prefixId() $(theprefix)$$(thetime)$
<$set name=thetime value=<<now "[UTC]YYYY0MM0DD0hh0mm0ss0XXX">> >
<$set name=theprefix value={{$:/config/TiddlyRemember/IdPrefix}}>
<$set name=clozeid value=<<prefixId>> >
<$action-sendmessage
$message="tm-edit-text-operation"
$param="replace-selection"
text=<<getMacro>>
/>
</$set>
</$set>
</$set>

View File

@@ -1,9 +1,9 @@
caption: Copy public Zettelkasten link
caption: copy public link
created: 20201120172611922
creator: soren
description: Copy a link to this tiddler in the public Zettelkasten
list-after: $:/core/ui/Buttons/info
modified: 20210825162715432
modified: 20210922125543768
modifier: soren
tags: $:/tags/ViewToolbar
title: $:/sib/Buttons/CopyPublicZettelkastenLink
@@ -15,7 +15,15 @@ type: text/vnd.tiddlywiki
\end
<$set name="tidTitle" value={{!!title}}>
<$button message="tm-copy-to-clipboard" param=<<copier>> tooltip={{!!caption}} class=<<tv-config-toolbar-class>>>
<$button message="tm-copy-to-clipboard" param=<<copier>> tooltip={{$:/sib/Buttons/CopyPublicZettelkastenLink!!caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
{{$:/core/images/permalink-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>match[yes]]">
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/sib/Buttons/CopyPublicZettelkastenLink!!caption}}/>
</span>
</$list>
</$button>
</$set>

View File

@@ -1,15 +1,23 @@
caption: Copy tiddler title
caption: copy tiddler title
created: 20200419143537510
creator: soren
description: Copy the name of this tiddler to the clipboard
list-after: $:/core/ui/Buttons/info
modified: 20210825162721583
modified: 20210922125723154
modifier: soren
tags: $:/tags/ViewToolbar
title: $:/sib/Buttons/CopyTitleReference
type: text/vnd.tiddlywiki
\whitespace trim
<$button message="tm-copy-to-clipboard" param={{!!title}} tooltip={{!!caption}} class=<<tv-config-toolbar-class>>>
<i class="far fa-copy" style="font-size:160%; position:relative; bottom:-4px; left:-1px;"/>
<$button message="tm-copy-to-clipboard" param={{!!title}} tooltip={{$:/sib/Buttons/CopyTitleReference!!caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
<i class="far fa-copy" style="font-size:160%; position:relative; bottom:-4px; left:-1px;"/>
</$list>
<$list filter="[<tv-config-toolbar-text>match[yes]]">
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/sib/Buttons/CopyTitleReference!!caption}}/>
</span>
</$list>
</$button>

View File

@@ -1,10 +1,11 @@
caption: Excise private chunk
condition: [<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]]
created: 20210522034413324
creator: soren
description: Create a new private chunk from the selection
icon: $:/core/images/locked-padlock
list-after: $:/core/ui/EditorToolbar/excise
modified: 20210522034828757
modified: 20210928031136154
modifier: soren
shortcuts: ((excise-private-chunk))
tags: $:/tags/EditorToolbar
title: $:/sib/Buttons/excise-private-chunk

View File

@@ -1,11 +1,13 @@
caption: possible
color: lightblue
created: 20210508225155649
modified: 20210508230813020
creator: soren
modified: 20211229142954562
modifier: soren
section: main
stackorder: 30
tags:
title: $:/sib/EpistemicStatus/possible
type: text/vnd.tiddlywiki
I [[withhold judgment|OpinionsRequireCounterarguments]] on the idea; I am merely reporting it.
I [[withhold judgment|NoOpinion]] on the idea; I am merely reporting it.

View File

@@ -2,7 +2,7 @@ created: 20210523150144006
creator: soren
description: Guided wizard that walks you through basic settings and the most important things to know about this edition.
list: $:/sib/GettingStarted/Warning $:/sib/GettingStarted/Title $:/sib/GettingStarted/Copyright $:/sib/GettingStarted/ZettelkastenCardTypes $:/sib/GettingStarted/ReferenceExplorer $:/sib/GettingStarted/ThingsToDo $:/sib/GettingStarted/NextSteps
modified: 20210920203903771
modified: 20210922011910182
modifier: soren
tags: Meta Tool
title: $:/sib/GettingStarted
@@ -56,7 +56,7 @@ tzk is primarily designed for use with Node.js and has an associated helper comm
* Highly configurable builds, allowing you to publish different versions of your wiki -- a common use case is publishing some of your content on the web and keeping some of it private.
* Space-efficient backups and version history with Git.
Full instructions for installing and initializing the tzk command-line tool can be found on Read the Docs.
Full instructions for installing and initializing the tzk command-line tool can be [[found on Read the Docs|https://tzk.readthedocs.io/en/latest/]].
If you're familiar with command-line tools like tzk, you can get a quick start by making sure you have Git, NPM, and Python 3.6 or greater installed, then running:

View File

@@ -1,7 +1,7 @@
caption: Next steps
created: 20210828133924602
creator: soren
modified: 20210828134435065
modified: 20210922163144199
modifier: soren
tags:
title: $:/sib/GettingStarted/NextSteps
@@ -13,6 +13,8 @@ I recommend starting by ''adding some notes''! Add a couple of tiddlers for the
Once you've gotten a few notes into the system, you will be in a good place to ''decide what elements of this edition you like and what things you'll want to change''. If you want to get into customizing the wiki and you don't have much experience with TiddlyWiki, check out [[Grok TiddlyWiki|https://groktiddlywiki.com/read]], a complete textbook and reference designed for learning how this stuff works from the ground up.
At any time, you can watch [[an hour-long walkthrough video|https://www.youtube.com/watch?v=9X_T-DVie8o]] showing the most important features of tzk.
At any time, you can click the ''tools button {{$:/core/images/theme-button}}'' on the page toolbar (upper-right corner of the wiki, right under the title) to access a wide variety of tools, settings, and documentation related to the Zettelkasten edition.
If you have questions, comments, or suggestions, please feel free to get in touch at `zettelkasten@sorenbjornstad.com`.

View File

@@ -1,14 +1,19 @@
created: 20210623014041787
creator: soren
list-after: $:/core/ui/SideBarSegments/site-subtitle
modified: 20210623014719347
modified: 20211107173606954
modifier: soren
tags: $:/tags/SideBarSegment
title: $:/sib/SideBar/InfoLinks
type: text/vnd.tiddlywiki
\define go-random-action() <$action-navigate $to={{{[tag[Idea]!tag[PrivateChunk]!regexp[/]!tag[Stub]shuffle[]first[]]}}}/>
<$list filter=<<ff SidebarInfoLinks>> variable=_>
[[about|PublicHomepage]]&nbsp;·
[[reading|RecentlyRead]]&nbsp;·
[[favorites|Favorites]]
[[favorites|Favorites]]&nbsp;·
<$button class="tc-tiddlylink tc-btn-invisible" actions=<<go-random-action>>>random idea</$button>
<style>
.gtw-sidebar-links a, .gtw-sidebar-links button {

View File

@@ -1,10 +1,12 @@
caption: Stubs
created: 20200516155336361
creator: soren
list-after: $:/core/ui/MoreSideBar/Missing
modified: 20210522014721028
modified: 20211204001205484
modifier: soren
title: $:/sib/SideBar/Write/Stub
type: text/vnd.tiddlywiki
<$list filter="[tag[Stub]sort[]]" emptyMessage="No stubs right now! You're awesome!">
<$list filter="[tag[Stub]sort[]] -[[$:/TagSaver]]" emptyMessage="No stubs right now! You're awesome!">
<$link to=<<currentTiddler>>><<currentTiddler>></$link><br/>
</$list>

View File

@@ -1,10 +1,12 @@
created: 20201204132021892
modified: 20210522014049552
creator: soren
modified: 20211027125509141
modifier: soren
tags: $:/tags/EditTemplate
title: $:/sib/Templates/Automatic/MissingTiddlerCreationNotification
type: text/vnd.tiddlywiki
<$list filter="[all[current]get[draft.of]prefix[New Tiddler]]" variable="draftof">
<$list filter="[all[current]get[draft.of]prefix[New ]]" variable="draftof">
<$list filter="[all[current]get[draft.title]backlinks[]first[]]" variable=_>
Creating missing tiddler <$link to={{!!draft.title}}/>. The following tiddlers will link here when you save:
<<list-links "[all[current]get[draft.title]backlinks[]]">>

View File

@@ -0,0 +1,33 @@
created: 20211120164840100
creator: soren
description: Navigate to the parent or a sibling of the current subtiddler. Subtiddler names are separated from that of their supertiddlers by a / (and are not system tiddlers).
modified: 20211120170254112
modifier: soren
tags: $:/tags/ViewTemplate
title: $:/sib/Templates/Automatic/Subtiddler
transcludedin: All tiddlers whose titles contain a slash and are not system tiddlers.
type: text/vnd.tiddlywiki
\define expand-siblings() <$action-setfield $tiddler="$:/temp/ShowSiblings" $index=<<currentTiddler>> $value="yes" />
\define contract-siblings() <$action-setfield $tiddler="$:/temp/ShowSiblings" $index=<<currentTiddler>> $value="no" />
<$list filter="[all[current]!is[system]regexp:title[/]]" variable=_>
<$set name="parentTiddler" value={{{ [all[current]split[/]butlast[]join[/]] }}}>
<$set name="parentTiddlerPlusSlash" value={{{ [<parentTiddler>addsuffix[/]] }}}>
<div style="text-align: center;">
This is a subtiddler of <$link to=<<parentTiddler>>/>.<br>
<$reveal stateTitle="$:/temp/ShowSiblings" stateIndex=<<currentTiddler>> type="nomatch" text="yes">
<$button class="tc-btn-invisible tc-tiddlylink" actions=<<expand-siblings>>>{{$:/core/images/right-arrow}} Siblings of this subtiddler</$button>
</$reveal>
<$reveal stateTitle="$:/temp/ShowSiblings" stateIndex=<<currentTiddler>> type="match" text="yes">
<$button class="tc-btn-invisible tc-tiddlylink" actions=<<contract-siblings>>>{{$:/core/images/down-arrow}} Siblings of this subtiddler:</$button><br>
<$list filter="[prefix<parentTiddlerPlusSlash>]">
<$link to=<<currentTiddler>>><$text text={{{ [<currentTiddler>removeprefix<parentTiddlerPlusSlash>] }}}/></$link><br>
</$list>
</$reveal>
</div>
</$set>
</$set>
</$list>

View File

@@ -0,0 +1,22 @@
created: 20211120170347843
creator: soren
description: Show a warning on tiddlers that don't have a type selected.
modified: 20211221014011578
modifier: soren
tags: $:/tags/ViewTemplate
title: $:/sib/Templates/Automatic/TypeTagChecker
transcludedin: All tiddlers that exist, aren't system tiddlers or subtiddlers, and don't have at least one tag of the color #ff0000.
type: text/vnd.tiddlywiki
<!-- System tiddlers, missing tiddlers, and subtiddlers are exempt from the warning. -->
<$list filter="[all[current]!is[system]!is[missing]!regexp[/]]">
<$list filter="[all[current]tags[]color[#ff0000]] ~[[Oops]] +[match[Oops]]" variable=_>
<div style="display: inline-block; vertical-align: center; margin-top: 6px; margin-left: 1em; fill: yellow;">
<span style="height: 44px">{{$:/core/images/warning}}</span>
</div>
<div style="display: inline-block; margin-left: 1em; color: yellow; font-weight: bold;">
This tiddler does not have a type tag (type tags appear in red). You should probably attach one.<br>
See [[ZettelkastenCardType]] for details on the available options.
</div>
</$list>
</$list>

View File

@@ -0,0 +1,15 @@
caption: Tray
created: 20210701023215046
creator: soren
description: Items we're currently working on but don't need to leave open. Drag and drop a link to a tiddler to add it.
list:
modified: 20211026030511257
modifier: soren
tags: Meta Tool
title: $:/sib/Tools/Tray
tooltype: aggregator
type: text/vnd.tiddlywiki
Stuff I'm working on but don't need to keep open:
<<list-links-draggable "$:/sib/Tools/Tray" itemTemplate:"$:/sib/Tools/Tray/Template">>

View File

@@ -1,6 +1,6 @@
created: 20210410004529968
creator: soren
modified: 20210825162735756
modified: 20210924153927403
modifier: soren
tags:
title: $:/sib/indite/InditeChildren
@@ -50,11 +50,14 @@ copy <<copy-me>> · <<copy-rendered>>
$viewBlock$
</div>
</$list>
<$list filter="[<tr-rendering>!match[yes]]" variable=_>
<$list filter="[all[current]editmode[edit]] [all[current]editmode[both]]">
<div class={{{ [[indite-sbs-editor]addsuffix[ ]addsuffix<thewidth>] }}}>
<$transclude tiddler="$:/core/ui/EditTemplate/body/editor"/>
</div>
</$list>
</$list>
</$set>
\end

View File

@@ -1,7 +1,9 @@
caption: Indite view template
created: 20210410004824597
creator: soren
description: Tiddlers that are part of the Indite writing system (under development) hide the normal view template via CSS and use this one instead.
modified: 20210523143848140
modified: 20210924153731019
modifier: soren
tags: $:/tags/ViewTemplate
title: $:/sib/indite/ViewTemplate
transcludedin: All tiddlers tagged <<tag Indite>>.

View File

@@ -2,7 +2,7 @@ caption: Subtiddlers
condition: [all[tiddlers]prefix<storyTiddler>!field:title<storyTiddler>sort[]]
created: 20201206210345097
creator: soren
modified: 20210920161045390
modified: 20211227155615108
modifier: soren
tags: $:/tags/ReferenceExplorerTab
title: $:/sib/refexplorer/Subtiddlers

View File

@@ -1,5 +1,7 @@
created: 20210719234124096
modified: 20210719235343017
creator: soren
modified: 20211025140658570
modifier: soren
tags: $:/tags/Stylesheet
title: $:/sib/styles/footnote
type: text/vnd.tiddlywiki
@@ -26,8 +28,10 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
.refnotes-footnote:after {
content: counter(fnote-count);
font-size:small;
vertical-align: super;
line-height: 1.5;
vertical-align: top;
font-size: 0.8em;
/*vertical-align: super;
line-height: 1.5;*/
margin-left: 0em;
color: yellow;
}

View File

@@ -1,5 +1,7 @@
created: 20210624125244567
modified: 20210629025407566
creator: soren
modified: 20211025010048942
modifier: soren
tags: $:/tags/Stylesheet
title: $:/sib/styles/hr
type: text/vnd.tiddlywiki
@@ -7,7 +9,7 @@ type: text/vnd.tiddlywiki
/* Based on: Flaired edges, by Tomas Theunissen
https://css-tricks.com/examples/hrs/ */
.tc-tiddler-body hr, .tc-tiddler-preview-preview hr {
.tc-tiddler-body > hr, .tc-tiddler-preview-preview > hr {
overflow: visible; /* For IE */
height: 30px;
border-style: solid;

View File

@@ -0,0 +1,7 @@
created: 20210928031136148
creator: soren
list: $:/core/ui/EditorToolbar/do-thing $:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/linkify $:/core/ui/EditorToolbar/transcludify $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/sib/Buttons/excise-private-chunk $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type $:/plugins/sobjornstad/TiddlyRemember/toolbar/rememberq $:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz $:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex
modified: 20210928031142401
modifier: soren
title: $:/tags/EditorToolbar
type: text/vnd.tiddlywiki

View File

@@ -1,5 +1,7 @@
created: 20201129183705439
list: $:/core/ui/ViewTemplate/title $:/core/ui/ViewTemplate/unfold $:/core/ui/ViewTemplate/subtitle $:/sib/EpistemicStatus/Display $:/sib/MediaRating/Display $:/core/ui/ViewTemplate/tags $:/core/ui/ViewTemplate/classic $:/sib/Templates/Automatic/SpoilerBanner $:/sib/Templates/Automatic/Untitled $:/sib/Templates/Automatic/PrivateChunkParentNotice $:/sib/Templates/Automatic/Source $:/sib/Templates/Topical/MinnesotaStateParkInfo $:/sib/Templates/Automatic/MacroDescription $:/core/ui/ViewTemplate/body $:/sib/indite/ViewTemplate $:/sib/Reviewer/SchedulableTemplate $:/sib/gis/MappingTools $:/sib/Templates/Topical/SabbaticalUpdates/DateNavigation $:/sib/Templates/Automatic/Publicity/ViewerPublicLine $:/core/ui/ViewTemplate/import $:/core/ui/ViewTemplate/plugin $:/plugins/danielo515/2click2edit/ui/ViewTemplate $:/sib/refexplorer/ReferenceExplorer $:/sib/Templates/Automatic/ViewTemplateDescription $:/sib/Templates/Automatic/ReaderActions $:/plugins/kookma/refnotes/viewtemplates/main
modified: 20210807194815491
creator: soren
list: $:/core/ui/ViewTemplate/title $:/core/ui/ViewTemplate/unfold $:/core/ui/ViewTemplate/subtitle $:/sib/EpistemicStatus/Display $:/sib/MediaRating/Display $:/core/ui/ViewTemplate/tags $:/core/ui/ViewTemplate/classic $:/sib/Templates/Automatic/Subtiddler $:/sib/Templates/Automatic/TypeTagChecker $:/sib/Templates/Automatic/SpoilerBanner $:/sib/Templates/Automatic/Untitled $:/sib/Templates/Automatic/PrivateChunkParentNotice $:/sib/Templates/Automatic/Source $:/sib/Templates/Topical/MinnesotaStateParkInfo $:/sib/Templates/Automatic/MacroDescription $:/core/ui/ViewTemplate/body $:/sib/indite/ViewTemplate $:/sib/Reviewer/SchedulableTemplate $:/sib/gis/MappingTools $:/sib/Templates/Topical/SabbaticalUpdates/DateNavigation $:/sib/Templates/Automatic/Publicity/ViewerPublicLine $:/core/ui/ViewTemplate/import $:/core/ui/ViewTemplate/plugin $:/plugins/danielo515/2click2edit/ui/ViewTemplate $:/sib/refexplorer/ReferenceExplorer $:/sib/Templates/Automatic/ViewTemplateDescription $:/sib/Templates/Automatic/ReaderActions
modified: 20211120171147065
modifier: soren
title: $:/tags/ViewTemplate
type: text/vnd.tiddlywiki

View File

@@ -1,6 +1,8 @@
created: 20200507143136944
creator: soren
list: PublicHomepage/Navigating PublicHomepage/Organization [[PublicHomepage/Points of Interest]] [[PublicHomepage/No Warranty]] PublicHomepage/Copyright PublicHomepage/Contact [[PublicHomepage/Video Tour]]
modified: 20210720015457472
modified: 20211007181213586
modifier: soren
tags: Public Meta
title: PublicHomepage
type: text/vnd.tiddlywiki

View File

@@ -122,11 +122,11 @@ def _init_tw(wiki_name: str) -> None:
def _restore_plugins(wiki_name: str) -> None:
"""
Add the plugins from the edition's tiddlywiki.info to the new wiki's
tiddlywiki.info (for some reason, this is not done automatically). Also
add the two plugins required for client-server operation.
Add the two plugins required for client-server operation to the existing
ones in the edition, sort them in order, and replace the existing plugins
array in the tiddlywiki.info.
"""
print("tzk: Adding plugins to tiddlywiki.info...")
print("tzk: Configuring plugins in tiddlywiki.info...")
info_path = Path.cwd() / wiki_name / "tiddlywiki.info"
edition_path = Path(__file__).parent / "editions" / "tzk" / "tiddlywiki.info"

View File

@@ -10,7 +10,7 @@ import sys
from typing import Any, Callable, Dict, NoReturn
TZK_VERSION = "0.1.0"
TZK_VERSION = "0.1.4"
class BuildError(Exception):