1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-01-08 16:30:26 +00:00

Merge branch 'master' into feat/section-mark

This commit is contained in:
lin onetwo 2024-09-13 13:03:31 +08:00 committed by GitHub
commit cb2d4bb756
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
846 changed files with 6728 additions and 4218 deletions

View File

@ -231,7 +231,10 @@ rules:
prefer-spread: 'off' prefer-spread: 'off'
prefer-template: 'off' prefer-template: 'off'
quote-props: 'off' quote-props: 'off'
quotes: 'off' quotes:
- error
- double
- avoidEscape: true
radix: 'off' radix: 'off'
require-atomic-updates: error require-atomic-updates: error
require-await: error require-await: error

View File

@ -21,7 +21,7 @@ body:
attributes: attributes:
label: To Reproduce label: To Reproduce
description: "Steps to reproduce the behavior:" description: "Steps to reproduce the behavior:"
value: | placeholder: |
1. Go to '...' 1. Go to '...'
2. Click on '....' 2. Click on '....'
3. Scroll down to '....' 3. Scroll down to '....'
@ -41,7 +41,7 @@ body:
attributes: attributes:
label: TiddlyWiki Configuration label: TiddlyWiki Configuration
description: please complete the following information description: please complete the following information
value: | placeholder: |
- Version [e.g. v5.1.24] - Version [e.g. v5.1.24]
- Saving mechanism [e.g. Node.js, TiddlyDesktop, TiddlyHost etc] - Saving mechanism [e.g. Node.js, TiddlyDesktop, TiddlyHost etc]
- Plugins installed [e.g. Freelinks, TiddlyMap] - Plugins installed [e.g. Freelinks, TiddlyMap]

View File

@ -1,7 +1,7 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Discuss feature request - name: Discuss feature request
url: https://github.com/Jermolene/TiddlyWiki5/discussions url: https://github.com/TiddlyWiki/TiddlyWiki5/discussions
about: Open new discussion about new feature about: Open new discussion about new feature
- name: Talk.Tiddlywiki Forum - name: Talk.Tiddlywiki Forum
url: https://talk.tiddlywiki.org url: https://talk.tiddlywiki.org

30
.github/workflows/cla-check.yml vendored Normal file
View File

@ -0,0 +1,30 @@
name: Check CLA Signature
on:
pull_request_target:
types:
- opened
- reopened
paths-ignore:
- 'licenses/cla-individual.md'
jobs:
check_cla:
runs-on: ubuntu-latest
permissions:
pull-requests: write
if: ${{ (github.event.pull_request.user.login != github.repository_owner) }}
steps:
- run: |
if ! curl -s https://raw.githubusercontent.com/Jermolene/TiddlyWiki5/tiddlywiki-com/licenses/cla-individual.md | grep -o "@$USER,"; then
echo "CLA not signed"
gh pr comment "$NUMBER" -b "@$USER It appears that this is your first contribution to the project, welcome.
With apologies for the bureaucracy, please could you prepare a separate PR to the 'tiddlywiki-com' branch with your signature for the Contributor License Agreement (see [contributing.md](https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/contributing.md))."
else
echo "CLA already signed"
gh pr comment "$NUMBER" -b "Confirmed: **$USER** has already signed the Contributor License Agreement (see [contributing.md](https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/contributing.md))"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.pull_request.number }}
USER: ${{ github.actor }}

70
.github/workflows/cla-signed.yml vendored Normal file
View File

@ -0,0 +1,70 @@
name: CLA Signed
on:
pull_request_target:
types:
- opened
- closed
paths:
- 'licenses/cla-individual.md'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.pull_request.number }}
AUTHOR: ${{ github.event.pull_request.user.login }}
jobs:
# check if PRs updating the CLA are targetting the tiddlywiki-com branch
check-signature-branch:
if: (github.event.pull_request.merged != true) && (github.event.pull_request.user.login != github.repository_owner)
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- run: |
if ! $BRANCH == "tiddlywiki-com"; then
echo "This CLA signature targets the wrong branch"
gh pr comment "$NUMBER" -b "@$AUTHOR Signatures to the CLA must target the 'tiddlywiki-com' branch."
fi
env:
BRANCH: ${{ github.event.pull_request.base.ref }}
# leave a comment on each open PR by a given author when their signature is added to the CLA
cla-signed:
if: (github.event.pull_request.merged == true) && (github.event.pull_request.user.login != github.repository_owner)
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: List open PRs by user
id: list-prs
uses: actions/github-script@v6
with:
result-encoding: string
script: |
const owner = context.repo.owner,
repo = context.repo.repo,
author = context.payload.pull_request.user.login;
const { data: pullRequests } = await github.rest.pulls.list({
owner: owner,
repo: repo,
state: 'open',
sort: 'created',
direction: 'desc',
per_page: 100
});
const userPullRequests = pullRequests.filter(pr => pr.user.login === author),
prNumbers = userPullRequests.map(pr => pr.number).join(',');
console.log(`Open pull requests by ${author}:${prNumbers}`);
return prNumbers;
- name: Comment open PRs by the same author
run: |
prs=($(echo ${{ steps.list-prs.outputs.result }} | tr "," "\n"))
for number in "${prs[@]}"
do
gh pr comment "$number" -b "**$AUTHOR** has signed the Contributor License Agreement (see [contributing.md](https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/contributing.md))"
done

View File

@ -5,7 +5,7 @@
# Default to the current version number for building the plugin library # Default to the current version number for building the plugin library
if [ -z "$TW5_BUILD_VERSION" ]; then if [ -z "$TW5_BUILD_VERSION" ]; then
TW5_BUILD_VERSION=v5.3.3 TW5_BUILD_VERSION=v5.3.6
fi fi
echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]" echo "Using TW5_BUILD_VERSION as [$TW5_BUILD_VERSION]"

View File

@ -7,4 +7,4 @@ npm --force install tiddlywiki || exit 1
# Pull existing GitHub pages content # Pull existing GitHub pages content
git clone --depth=1 --branch=master "https://github.com/Jermolene/jermolene.github.io.git" output git clone --depth=1 --branch=master "https://github.com/TiddlyWiki/tiddlywiki.com-gh-pages.git" output

View File

@ -10,6 +10,6 @@ git config --global user.email "actions@github.com"
git config --global user.name "GitHub Actions" git config --global user.name "GitHub Actions"
git add -A . git add -A .
git commit --message "GitHub build: $GITHUB_RUN_NUMBER of $TW5_BUILD_BRANCH ($(date +'%F %T %Z'))" git commit --message "GitHub build: $GITHUB_RUN_NUMBER of $TW5_BUILD_BRANCH ($(date +'%F %T %Z'))"
git remote add deploy "https://$GH_TOKEN@github.com/Jermolene/jermolene.github.io.git" &>/dev/null git remote add deploy "https://$GH_TOKEN@github.com/TiddlyWiki/tiddlywiki.com-gh-pages.git" &>/dev/null
git push deploy master &>/dev/null git push deploy master &>/dev/null
cd .. cd ..

View File

@ -15,3 +15,11 @@ node $TW5_BUILD_TIDDLYWIKI \
--output . \ --output . \
--build readmes \ --build readmes \
|| exit 1 || exit 1
# tw.org readmes
node $TW5_BUILD_TIDDLYWIKI \
editions/tw.org \
--verbose \
--output . \
--build readmes \
|| exit 1

View File

@ -386,8 +386,8 @@ $tw.utils.parseDate = function(value) {
parseInt(value.substr(10,2)||"00",10), parseInt(value.substr(10,2)||"00",10),
parseInt(value.substr(12,2)||"00",10), parseInt(value.substr(12,2)||"00",10),
parseInt(value.substr(14,3)||"000",10))); parseInt(value.substr(14,3)||"000",10)));
d.setUTCFullYear(year); // See https://stackoverflow.com/a/5870822 d.setUTCFullYear(year); // See https://stackoverflow.com/a/5870822
return d; return d;
} else if($tw.utils.isDate(value)) { } else if($tw.utils.isDate(value)) {
return value; return value;
} else { } else {

View File

@ -21,7 +21,7 @@ $tw.boot = $tw.boot || Object.create(null);
// Detect platforms // Detect platforms
if(!("browser" in $tw)) { if(!("browser" in $tw)) {
$tw.browser = typeof(window) !== "undefined" ? {} : null; $tw.browser = typeof(window) !== "undefined" && typeof(document) !== "undefined" ? {} : null;
} }
if(!("node" in $tw)) { if(!("node" in $tw)) {
$tw.node = typeof(process) === "object" ? {} : null; $tw.node = typeof(process) === "object" ? {} : null;

1
code-of-conduct.md Normal file
View File

@ -0,0 +1 @@
<p>This community exists because TiddlyWiki is more useful when people share and work together.</p><p>This community is a beautiful but fragile thing: a collection of diverse people from all over the planet, united in their interest in the project, and their commitment to helping one another achieve and learn more.</p><p>We try to make the community as broad and welcoming as possible by remembering some basic principles of culture and behaviour.</p><p>These principles guide technical and non-technical decisions, and help contributors and leaders support our project and community.</p><ul><li>We are optimistic and hopeful</li><li>We aim to foster a learning environment that is collaborative and safe for everyone</li><li>We recognise that the motivation for sharing and helping is usually for appreciation, and not financial gain, and so we take care to acknowledge and <strong>thank the people who enrich the community by sharing what they have created</strong></li><li>While we are united in our interest in TiddlyWiki, we differ in every other conceivable way. We choose to focus on what unites us, and <strong>avoid unnecessarily mixing contentious topics like religion and politics</strong></li><li>We treat each other with respect, and start with the assumption that <strong>others are acting in good faith</strong></li><li>We avoid discriminatory language</li><li>We try to use our strength as a community to help others</li><li>We avoid responding when angry or upset because we try to de-escalate conflict</li><li>We make sure we critique ideas, not people</li><li>When we disagree with others we do so graciously, and treat others with dignity and respoect</li><li>We do not tolerate intolerance towards others</li><li>We seek first to understand others, and then to be understood</li><li>We have fun</li></ul><p>Our discussions are in English. It is not the first language of many people in the community, nor do we all share the same cultural background and reference points. So we take care to use language that is clear and unambigous, and avoid cultural references or jokes that will not be widely understood.</p><p>It is not acceptable to make jokes or other comments that discriminate by race, gender, sexuality, or other protected characteristic.</p><p>As an inclusive community, we are committed to making sure that TiddlyWiki is an accessible tool that understands the needs of people with disabilities.</p>

File diff suppressed because one or more lines are too long

5
core/images/discord.tid Normal file
View File

@ -0,0 +1,5 @@
title: $:/core/images/discord
tags: $:/tags/Image
\parameters (size:"22pt")
<svg width=<<size>> height=<<size>> class="tc-image-discord tc-image-button" viewBox="0 -28.5 256 256"><path d="M216.856 16.597A208.502 208.502 0 0 0 164.042 0c-2.275 4.113-4.933 9.645-6.766 14.046-19.692-2.961-39.203-2.961-58.533 0-1.832-4.4-4.55-9.933-6.846-14.046a207.809 207.809 0 0 0-52.855 16.638C5.618 67.147-3.443 116.4 1.087 164.956c22.169 16.555 43.653 26.612 64.775 33.193A161.094 161.094 0 0 0 79.735 175.3a136.413 136.413 0 0 1-21.846-10.632 108.636 108.636 0 0 0 5.356-4.237c42.122 19.702 87.89 19.702 129.51 0a131.66 131.66 0 0 0 5.355 4.237 136.07 136.07 0 0 1-21.886 10.653c4.006 8.02 8.638 15.67 13.873 22.848 21.142-6.58 42.646-16.637 64.815-33.213 5.316-56.288-9.08-105.09-38.056-148.36ZM85.474 135.095c-12.645 0-23.015-11.805-23.015-26.18s10.149-26.2 23.015-26.2c12.867 0 23.236 11.804 23.015 26.2.02 14.375-10.148 26.18-23.015 26.18Zm85.051 0c-12.645 0-23.014-11.805-23.014-26.18s10.148-26.2 23.014-26.2c12.867 0 23.236 11.804 23.015 26.2 0 14.375-10.148 26.18-23.015 26.18Z"/></svg>

View File

@ -0,0 +1,5 @@
title: $:/core/images/input-button
tags: $:/tags/Image
\parameters (size:"22pt")
<svg width=<<size>> height=<<size>> class="tc-image-input-button tc-image-button" viewBox="0 0 22 22"><path d="M1.375 22h19.249c.365 0 .716-.145.973-.404v.001c.258-.257.404-.607.403-.972v-11a1.376 1.376 0 0 0-2.75 0v9.625H2.75V9.625a1.376 1.376 0 0 0-2.75 0v11C0 21.384.617 22 1.375 22Z"/><path d="m9.732 11.904-1.541-1.541a1.375 1.375 0 1 0-1.944 1.944l3.887 3.888c.258.258.608.402.973.402h-.001c.353 0 .705-.134.974-.402l3.888-3.889a1.376 1.376 0 0 0 .001-1.944 1.377 1.377 0 0 0-1.946 0l-1.541 1.542V1.376a1.375 1.375 0 1 0-2.75 0v10.528Z"/></svg>

View File

@ -80,6 +80,7 @@ NewMarkdown/Caption: new Markdown tiddler
NewMarkdown/Hint: Create a new Markdown tiddler NewMarkdown/Hint: Create a new Markdown tiddler
NewTiddler/Caption: new tiddler NewTiddler/Caption: new tiddler
NewTiddler/Hint: Create a new tiddler NewTiddler/Hint: Create a new tiddler
OpenControlPanel/Hint: Open control panel
OpenWindow/Caption: open in new window OpenWindow/Caption: open in new window
OpenWindow/Hint: Open tiddler in new window OpenWindow/Hint: Open tiddler in new window
Palette/Caption: palette Palette/Caption: palette
@ -104,6 +105,8 @@ ShowSideBar/Caption: show sidebar
ShowSideBar/Hint: Show sidebar ShowSideBar/Hint: Show sidebar
TagManager/Caption: tag manager TagManager/Caption: tag manager
TagManager/Hint: Open tag manager TagManager/Hint: Open tag manager
TestCaseImport/Caption: import tiddlers
TestCaseImport/Hint: Import tiddlers
Timestamp/Caption: timestamps Timestamp/Caption: timestamps
Timestamp/Hint: Choose whether modifications update timestamps Timestamp/Hint: Choose whether modifications update timestamps
Timestamp/On/Caption: timestamps are on Timestamp/On/Caption: timestamps are on
@ -130,6 +133,7 @@ Excise/Caption/Replace/Link: link
Excise/Caption/Replace/Transclusion: transclusion Excise/Caption/Replace/Transclusion: transclusion
Excise/Caption/Tag: Tag new tiddler with the title of this tiddler Excise/Caption/Tag: Tag new tiddler with the title of this tiddler
Excise/Caption/TiddlerExists: Warning: tiddler already exists Excise/Caption/TiddlerExists: Warning: tiddler already exists
Excise/DefaultTitle: New Excision
Excise/Hint: Excise the selected text into a new tiddler Excise/Hint: Excise the selected text into a new tiddler
Heading1/Caption: heading 1 Heading1/Caption: heading 1
Heading1/Hint: Apply heading level 1 formatting to lines containing selection Heading1/Hint: Apply heading level 1 formatting to lines containing selection

View File

@ -198,6 +198,12 @@ Settings/TitleLinks/Yes/Description: Display tiddler titles as links
Settings/MissingLinks/Caption: Wiki Links Settings/MissingLinks/Caption: Wiki Links
Settings/MissingLinks/Hint: Choose whether to link to tiddlers that do not exist yet Settings/MissingLinks/Hint: Choose whether to link to tiddlers that do not exist yet
Settings/MissingLinks/Description: Enable links to missing tiddlers Settings/MissingLinks/Description: Enable links to missing tiddlers
SocialCard/Caption: Social Media Card
SocialCard/Domain/Prompt: Domain name to display for the link (for example, ''tiddlywiki.com'')
SocialCard/Hint: This information is used by social and messaging services to display a preview card for links to this TiddlyWiki when hosted online
SocialCard/PreviewUrl/Prompt: Full URL to preview image for this TiddlyWiki
SocialCard/PreviewUrl/Preview: Preview image:
SocialCard/Url/Prompt: Full URL of this TiddlyWiki
StoryTiddler/Caption: Story Tiddler StoryTiddler/Caption: Story Tiddler
StoryTiddler/Hint: This rule cascade is used to dynamically choose the template for displaying a tiddler in the story river. StoryTiddler/Hint: This rule cascade is used to dynamically choose the template for displaying a tiddler in the story river.
StoryView/Caption: Story View StoryView/Caption: Story View
@ -235,3 +241,7 @@ ViewTemplateBody/Caption: View Template Body
ViewTemplateBody/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the body of a tiddler. ViewTemplateBody/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the body of a tiddler.
ViewTemplateTitle/Caption: View Template Title ViewTemplateTitle/Caption: View Template Title
ViewTemplateTitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the title of a tiddler. ViewTemplateTitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the title of a tiddler.
ViewTemplateSubtitle/Caption: View Template Subtitle
ViewTemplateSubtitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the subtitle of a tiddler.
ViewTemplateTags/Caption: View Template Tags
ViewTemplateTags/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the tags area of a tiddler.

View File

@ -65,6 +65,10 @@ sidebar-tab-foreground-selected: Sidebar tab foreground for selected tabs
sidebar-tab-foreground: Sidebar tab foreground sidebar-tab-foreground: Sidebar tab foreground
sidebar-tiddler-link-foreground-hover: Sidebar tiddler link foreground hover sidebar-tiddler-link-foreground-hover: Sidebar tiddler link foreground hover
sidebar-tiddler-link-foreground: Sidebar tiddler link foreground sidebar-tiddler-link-foreground: Sidebar tiddler link foreground
stability-stable: Badge for stability level "stable"
stability-experimental: Badge for stability level "experimental"
stability-deprecated: Badge for stability level "deprecated"
stability-legacy: Badge for stability level "legacy"
testcase-accent-level-1: Test case accent colour with no nesting testcase-accent-level-1: Test case accent colour with no nesting
testcase-accent-level-2: Test case accent colour with 2nd level nesting testcase-accent-level-2: Test case accent colour with 2nd level nesting
testcase-accent-level-3: Test case accent colour with 3rd level nesting or higher testcase-accent-level-3: Test case accent colour with 3rd level nesting or higher

View File

@ -26,6 +26,7 @@ Tags/ClearInput/Caption: clear input
Tags/ClearInput/Hint: Clear tag input Tags/ClearInput/Hint: Clear tag input
Tags/Dropdown/Caption: tag list Tags/Dropdown/Caption: tag list
Tags/Dropdown/Hint: Show tag list Tags/Dropdown/Hint: Show tag list
Tags/EmptyMessage: (no search result)
Title/BadCharacterWarning: Warning: avoid using any of the characters <<bad-chars>> in tiddler titles Title/BadCharacterWarning: Warning: avoid using any of the characters <<bad-chars>> in tiddler titles
Title/Exists/Prompt: Target tiddler already exists Title/Exists/Prompt: Target tiddler already exists
Title/Relink/Prompt: Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers Title/Relink/Prompt: Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers

View File

@ -6,6 +6,8 @@ Filter/Hint: Search via a [[filter expression|https://tiddlywiki.com/static/Filt
Filter/Matches: //<small><<resultCount>> matches</small>// Filter/Matches: //<small><<resultCount>> matches</small>//
Matches: //<small><<resultCount>> matches</small>// Matches: //<small><<resultCount>> matches</small>//
Matches/All: All matches: Matches/All: All matches:
Matches/NoMatch: //No match//
Matches/NoResult: //No search result//
Matches/Title: Title matches: Matches/Title: Title matches:
Search: Search Search: Search
Search/TooShort: Search text too short Search/TooShort: Search text too short

View File

@ -0,0 +1,7 @@
title: $:/language/Snippets/FunctionDefinition
tags: $:/tags/TextEditor/Snippet
caption: Function definition
\function f.name(param1,param2:"default value") [<param1>!is[blank]else<param2>]
<<f.name>>

View File

@ -0,0 +1,7 @@
title: $:/language/Snippets/ProcedureDefinition
tags: $:/tags/TextEditor/Snippet
caption: Procedure definition
\procedure procName(param1:"default value",param2)
Your text comes here.
\end

View File

@ -1,5 +0,0 @@
title: $:/language/Docs/Types/image/x-icon
description: ICO icon
name: image/x-icon
group: Image
group-sort: 1

View File

@ -0,0 +1,5 @@
title: $:/language/Docs/Types/text/vnd.tiddlywiki-multiple
description: Compound tiddler
name: text/vnd.tiddlywiki-multiple
group: Developer
group-sort: 2

View File

@ -45,17 +45,22 @@ Render individual tiddlers and save the results to the specified files
variableList = variableList.slice(2); variableList = variableList.slice(2);
} }
$tw.utils.each(tiddlers,function(title) { $tw.utils.each(tiddlers,function(title) {
var filepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]); var filenameResults = wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]));
if(self.commander.verbose) { if(filenameResults.length > 0) {
console.log("Rendering \"" + title + "\" to \"" + filepath + "\""); var filepath = path.resolve(self.commander.outputPath,filenameResults[0]);
if(self.commander.verbose) {
console.log("Rendering \"" + title + "\" to \"" + filepath + "\"");
}
var parser = wiki.parseTiddler(template || title),
widgetNode = wiki.makeWidget(parser,{variables: $tw.utils.extend({},variables,{currentTiddler: title,storyTiddler: title})}),
container = $tw.fakeDocument.createElement("div");
widgetNode.render(container,null);
var text = type === "text/html" ? container.innerHTML : container.textContent;
$tw.utils.createFileDirectories(filepath);
fs.writeFileSync(filepath,text,"utf8");
} else {
console.log("Not rendering \"" + title + "\" because the filename filter returned an empty result");
} }
var parser = wiki.parseTiddler(template || title),
widgetNode = wiki.makeWidget(parser,{variables: $tw.utils.extend({},variables,{currentTiddler: title,storyTiddler: title})}),
container = $tw.fakeDocument.createElement("div");
widgetNode.render(container,null);
var text = type === "text/html" ? container.innerHTML : container.textContent;
$tw.utils.createFileDirectories(filepath);
fs.writeFileSync(filepath,text,"utf8");
}); });
return null; return null;
}; };

View File

@ -30,7 +30,7 @@ exports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + "+" +
exports.textPrimitives.upperLetter + exports.textPrimitives.upperLetter +
exports.textPrimitives.anyLetter + "*"; exports.textPrimitives.anyLetter + "*";
exports.htmlEntities = {quot:34, dollar:36, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 }; exports.htmlEntities = {quot:34, dollar:36, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, nobreak:8288, NoBreak:8288, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };
exports.htmlVoidElements = "area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr".split(","); exports.htmlVoidElements = "area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr".split(",");

View File

@ -12,20 +12,27 @@ Text editor operation to excise the selection to a new tiddler
/*global $tw: false */ /*global $tw: false */
"use strict"; "use strict";
function isMarkdown(mediaType) {
return mediaType === 'text/markdown' || mediatype === 'text/x-markdown';
}
exports["excise"] = function(event,operation) { exports["excise"] = function(event,operation) {
var editTiddler = this.wiki.getTiddler(this.editTitle), var editTiddler = this.wiki.getTiddler(this.editTitle),
editTiddlerTitle = this.editTitle; editTiddlerTitle = this.editTitle,
wikiLinks = !isMarkdown(editTiddler.fields.type),
excisionBaseTitle = $tw.language.getString("Buttons/Excise/DefaultTitle");
if(editTiddler && editTiddler.fields["draft.of"]) { if(editTiddler && editTiddler.fields["draft.of"]) {
editTiddlerTitle = editTiddler.fields["draft.of"]; editTiddlerTitle = editTiddler.fields["draft.of"];
} }
var excisionTitle = event.paramObject.title || this.wiki.generateNewTitle("New Excision"); var excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(excisionBaseTitle);
this.wiki.addTiddler(new $tw.Tiddler( this.wiki.addTiddler(new $tw.Tiddler(
this.wiki.getCreationFields(), this.wiki.getCreationFields(),
this.wiki.getModificationFields(), this.wiki.getModificationFields(),
{ {
title: excisionTitle, title: excisionTitle,
text: operation.selection, text: operation.selection,
tags: event.paramObject.tagnew === "yes" ? [editTiddlerTitle] : [] tags: event.paramObject.tagnew === "yes" ? [editTiddlerTitle] : [],
type: editTiddler.fields.type
} }
)); ));
operation.replacement = excisionTitle; operation.replacement = excisionTitle;
@ -34,7 +41,8 @@ exports["excise"] = function(event,operation) {
operation.replacement = "{{" + operation.replacement+ "}}"; operation.replacement = "{{" + operation.replacement+ "}}";
break; break;
case "link": case "link":
operation.replacement = "[[" + operation.replacement+ "]]"; operation.replacement = wikiLinks ? "[[" + operation.replacement+ "]]"
: ("[" + operation.replacement + "](<#" + operation.replacement + ">)");
break; break;
case "macro": case "macro":
operation.replacement = "<<" + (event.paramObject.macro || "translink") + " \"\"\"" + operation.replacement + "\"\"\">>"; operation.replacement = "<<" + (event.paramObject.macro || "translink") + " \"\"\"" + operation.replacement + "\"\"\">>";

View File

@ -13,37 +13,125 @@ Text editor operation to wrap the selection with the specified prefix and suffix
"use strict"; "use strict";
exports["wrap-selection"] = function(event,operation) { exports["wrap-selection"] = function(event,operation) {
if(operation.selStart === operation.selEnd) { var o = operation,
// No selection; check if we're within the prefix/suffix prefix = event.paramObject.prefix,
if(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) { suffix = event.paramObject.suffix,
trimSelection = event.paramObject.trimSelection || "no",
selLength = o.selEnd - o.selStart;
// This function detects, if trailing spaces are part of the selection __and__ if the user wants to handle them
// Returns "yes", "start", "end", "no" (default)
// yes .. there are trailing spaces at both ends
// start .. there are trailing spaces at the start
// end .. there are trailing spaces at the end
// no .. no trailing spaces are taken into account
var trailingSpaceAt = function(sel) {
var _start,
_end,
result;
// trimSelection is a user parameter, which this evaluations takes into account
switch(trimSelection) {
case "end":
result = (sel.trimEnd().length !== selLength) ? "end" : "no";
break;
case "yes":
_start = sel.trimStart().length !== selLength;
_end = sel.trimEnd().length !== selLength;
result = (_start && _end) ? "yes" : (_start) ? "start" : (_end) ? "end" : "no";
break;
case "start":
result = (sel.trimStart().length !== selLength) ? "start" : "no";
break;
default:
result = "no";
break;
}
return result;
}
function togglePrefixSuffix() {
if(o.text.substring(o.selStart - prefix.length, o.selStart + suffix.length) === prefix + suffix) {
// Remove the prefix and suffix // Remove the prefix and suffix
operation.cutStart = operation.selStart - event.paramObject.prefix.length; o.cutStart = o.selStart - prefix.length;
operation.cutEnd = operation.selEnd + event.paramObject.suffix.length; o.cutEnd = o.selEnd + suffix.length;
operation.replacement = ""; o.replacement = "";
operation.newSelStart = operation.cutStart; o.newSelStart = o.cutStart;
operation.newSelEnd = operation.newSelStart; o.newSelEnd = o.newSelStart;
} else { } else {
// Wrap the cursor instead // Wrap the cursor instead
operation.cutStart = operation.selStart; o.cutStart = o.selStart;
operation.cutEnd = operation.selEnd; o.cutEnd = o.selEnd;
operation.replacement = event.paramObject.prefix + event.paramObject.suffix; o.replacement = prefix + suffix;
operation.newSelStart = operation.selStart + event.paramObject.prefix.length; o.newSelStart = o.selStart + prefix.length;
operation.newSelEnd = operation.newSelStart; o.newSelEnd = o.newSelStart;
} }
} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) { }
// options: lenPrefix, lenSuffix
function removePrefixSuffix(options) {
options = options || {};
var _lenPrefix = options.lenPrefix || 0;
var _lenSuffix = options.lenSuffix || 0;
o.cutStart = o.selStart - _lenPrefix;
o.cutEnd = o.selEnd + _lenSuffix;
o.replacement = (_lenPrefix || _lenSuffix) ? o.selection : o.selection.substring(prefix.length, o.selection.length - suffix.length);
o.newSelStart = o.cutStart;
o.newSelEnd = o.cutStart + o.replacement.length;
}
function addPrefixSuffix() {
// remove trailing space if requested
switch(trailingSpaceAt(o.selection)) {
case "no":
// has no trailing spaces
o.cutStart = o.selStart;
o.cutEnd = o.selEnd;
o.replacement = prefix + o.selection + suffix;
o.newSelStart = o.selStart;
o.newSelEnd = o.selStart + o.replacement.length;
break;
case "yes":
// handle both ends
o.cutStart = o.selEnd - (o.selection.trimStart().length);
o.cutEnd = o.selection.trimEnd().length + o.selStart;
o.replacement = prefix + o.selection.trim() + suffix;
o.newSelStart = o.cutStart;
o.newSelEnd = o.cutStart + o.replacement.length;
break;
case "start":
// handle leading
o.cutStart = o.selEnd - (o.selection.trimStart().length);
o.cutEnd = o.selEnd;
o.replacement = prefix + o.selection.trimStart() + suffix;
o.newSelStart = o.cutStart;
o.newSelEnd = o.cutStart + o.replacement.length;
break;
case "end":
// handle trailing
o.cutStart = o.selStart;
o.cutEnd = o.selection.trimEnd().length + o.selStart;
o.replacement = prefix + o.selection.trimEnd() + suffix;
o.newSelStart = o.selStart;
o.newSelEnd = o.selStart + o.replacement.length;
break;
}
}
if(o.selStart === o.selEnd) {
// No selection; Create prefix and suffix. Set cursor in between them: ""|""
togglePrefixSuffix();
} else if(o.text.substring(o.selStart, o.selStart + prefix.length) === prefix &&
o.text.substring(o.selEnd - suffix.length,o.selEnd) === suffix) {
// Prefix and suffix are already present, so remove them // Prefix and suffix are already present, so remove them
operation.cutStart = operation.selStart; removePrefixSuffix();
operation.cutEnd = operation.selEnd; } else if(o.text.substring(o.selStart - prefix.length, o.selStart) === prefix &&
operation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length); o.text.substring(o.selEnd, o.selEnd + suffix.length) === suffix) {
operation.newSelStart = operation.selStart; // Prefix and suffix are present BUT not selected -> remove them
operation.newSelEnd = operation.selStart + operation.replacement.length; removePrefixSuffix({"lenPrefix": prefix.length, "lenSuffix": suffix.length});
} else { } else {
// Add the prefix and suffix // Add the prefix and suffix
operation.cutStart = operation.selStart; addPrefixSuffix();
operation.cutEnd = operation.selEnd;
operation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;
operation.newSelStart = operation.selStart;
operation.newSelEnd = operation.selStart + operation.replacement.length;
} }
}; };

View File

@ -16,11 +16,11 @@ Filter operator for returning all the backtranscludes from a tiddler
Export our filter function Export our filter function
*/ */
exports.backtranscludes = function(source,operator,options) { exports.backtranscludes = function(source,operator,options) {
var results = []; var results = new $tw.utils.LinkedList();
source(function(tiddler,title) { source(function(tiddler,title) {
$tw.utils.pushTop(results,options.wiki.getTiddlerBacktranscludes(title)); results.pushTop(options.wiki.getTiddlerBacktranscludes(title));
}); });
return results; return results.makeTiddlerIterator(options.wiki);
}; };
})(); })();

View File

@ -18,8 +18,8 @@ Export our filter functions
exports.decodebase64 = function(source,operator,options) { exports.decodebase64 = function(source,operator,options) {
var results = []; var results = [];
var binary = operator.suffixes && operator.suffixes.indexOf("binary") !== -1; var binary = operator.suffixes && operator.suffixes[0].indexOf("binary") !== -1;
var urlsafe = operator.suffixes && operator.suffixes.indexOf("urlsafe") !== -1; var urlsafe = operator.suffixes && operator.suffixes[0].indexOf("urlsafe") !== -1;
source(function(tiddler,title) { source(function(tiddler,title) {
results.push($tw.utils.base64Decode(title,binary,urlsafe)); results.push($tw.utils.base64Decode(title,binary,urlsafe));
}); });
@ -28,8 +28,8 @@ exports.decodebase64 = function(source,operator,options) {
exports.encodebase64 = function(source,operator,options) { exports.encodebase64 = function(source,operator,options) {
var results = []; var results = [];
var binary = operator.suffixes && operator.suffixes.indexOf("binary") !== -1; var binary = operator.suffixes && operator.suffixes[0].indexOf("binary") !== -1;
var urlsafe = operator.suffixes && operator.suffixes.indexOf("urlsafe") !== -1; var urlsafe = operator.suffixes && operator.suffixes[0].indexOf("urlsafe") !== -1;
source(function(tiddler,title) { source(function(tiddler,title) {
results.push($tw.utils.base64Encode(title,binary,urlsafe)); results.push($tw.utils.base64Encode(title,binary,urlsafe));
}); });

View File

@ -20,7 +20,7 @@ exports.transcludes = function(source,operator,options) {
source(function(tiddler,title) { source(function(tiddler,title) {
results.pushTop(options.wiki.getTiddlerTranscludes(title)); results.pushTop(options.wiki.getTiddlerTranscludes(title));
}); });
return results.toArray(); return results.makeTiddlerIterator(options.wiki);
}; };
})(); })();

View File

@ -75,7 +75,7 @@ BackSubIndexer.prototype._getTarget = function(tiddler) {
} }
var parser = this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {}); var parser = this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {});
if(parser) { if(parser) {
return this.wiki[this.extractor](parser.tree); return this.wiki[this.extractor](parser.tree, tiddler.fields.title);
} }
return []; return [];
} }

View File

@ -16,20 +16,22 @@ exports.name = "unusedtitle";
exports.params = [ exports.params = [
{name: "baseName"}, {name: "baseName"},
{name: "separator"}, {name: "separator"},
{name: "template"} {name: "template"},
{name: "startCount"}
]; ];
/* /*
Run the macro Run the macro
*/ */
exports.run = function(baseName,separator,template) { exports.run = function(baseName,separator,template,startCount) {
separator = separator || " "; separator = separator || " ";
startCount = startCount || 0;
if(!baseName) { if(!baseName) {
baseName = $tw.language.getString("DefaultNewTiddlerTitle"); baseName = $tw.language.getString("DefaultNewTiddlerTitle");
} }
// $tw.wiki.generateNewTitle = function(baseTitle,options) // $tw.wiki.generateNewTitle = function(baseTitle,options)
// options.prefix must be a string! // options.prefix must be a string!
return this.wiki.generateNewTitle(baseName, {"prefix": separator, "template": template}); return this.wiki.generateNewTitle(baseName, {"prefix": separator, "template": template, "startCount": startCount});
}; };
})(); })();

View File

@ -6,7 +6,7 @@ module-type: wikirule
Conditional shortcut syntax Conditional shortcut syntax
``` ```
This is a <% if [{something}] %>Elephant<% elseif [{else}] %>Pelican<% else %>Crocodile<% endif %> This is a <%if [{something}] %>Elephant<%elseif [{else}] %>Pelican<%else%>Crocodile<%endif%>
``` ```
\*/ \*/
@ -27,7 +27,7 @@ exports.init = function(parser) {
}; };
exports.findNextMatch = function(startPos) { exports.findNextMatch = function(startPos) {
// Look for the next <% if shortcut // Look for the next <%if shortcut
this.matchRegExp.lastIndex = startPos; this.matchRegExp.lastIndex = startPos;
this.match = this.matchRegExp.exec(this.parser.source); this.match = this.matchRegExp.exec(this.parser.source);
// If not found then return no match // If not found then return no match

View File

@ -93,11 +93,12 @@ var processRow = function(prevColumns) {
} }
// Check whether this is a heading cell // Check whether this is a heading cell
var cell; var cell;
var start = this.parser.pos;
if(chr === "!") { if(chr === "!") {
this.parser.pos++; this.parser.pos++;
cell = {type: "element", tag: "th", children: []}; cell = {type: "element", tag: "th", start: start, children: []};
} else { } else {
cell = {type: "element", tag: "td", children: []}; cell = {type: "element", tag: "td", start: start, children: []};
} }
tree.push(cell); tree.push(cell);
// Record information about this cell // Record information about this cell
@ -121,6 +122,7 @@ var processRow = function(prevColumns) {
} }
// Move back to the closing `|` // Move back to the closing `|`
this.parser.pos--; this.parser.pos--;
cell.end = this.parser.pos;
} }
col++; col++;
cellRegExp.lastIndex = this.parser.pos; cellRegExp.lastIndex = this.parser.pos;
@ -169,12 +171,13 @@ exports.parse = function() {
rowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true}); rowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});
} else { } else {
// Create the row // Create the row
var theRow = {type: "element", tag: "tr", children: []}; var theRow = {type: "element", tag: "tr", children: [], start: rowMatch.index};
$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? "oddRow" : "evenRow"); $tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? "oddRow" : "evenRow");
rowContainer.children.push(theRow); rowContainer.children.push(theRow);
// Process the row // Process the row
theRow.children = processRow.call(this,prevColumns); theRow.children = processRow.call(this,prevColumns);
this.parser.pos = rowMatch.index + rowMatch[0].length; this.parser.pos = rowMatch.index + rowMatch[0].length;
theRow.end = this.parser.pos;
// Increment the row count // Increment the row count
rowCount++; rowCount++;
} }

View File

@ -95,6 +95,7 @@ function SaverHandler(options) {
if($tw.browser) { if($tw.browser) {
$tw.rootWidget.addEventListener("tm-save-wiki",function(event) { $tw.rootWidget.addEventListener("tm-save-wiki",function(event) {
self.saveWiki({ self.saveWiki({
wiki: event.widget.wiki,
template: event.param, template: event.param,
downloadType: "text/plain", downloadType: "text/plain",
variables: event.paramObject variables: event.paramObject
@ -102,6 +103,7 @@ function SaverHandler(options) {
}); });
$tw.rootWidget.addEventListener("tm-download-file",function(event) { $tw.rootWidget.addEventListener("tm-download-file",function(event) {
self.saveWiki({ self.saveWiki({
wiki: event.widget.wiki,
method: "download", method: "download",
template: event.param, template: event.param,
downloadType: "text/plain", downloadType: "text/plain",
@ -147,20 +149,22 @@ Save the wiki contents. Options are:
method: "save", "autosave" or "download" method: "save", "autosave" or "download"
template: the tiddler containing the template to save template: the tiddler containing the template to save
downloadType: the content type for the saved file downloadType: the content type for the saved file
wiki: optional wiki, overriding the default wiki specified in the constructor
*/ */
SaverHandler.prototype.saveWiki = function(options) { SaverHandler.prototype.saveWiki = function(options) {
options = options || {}; options = options || {};
var self = this, var self = this,
wiki = options.wiki || this.wiki,
method = options.method || "save"; method = options.method || "save";
// Ignore autosave if disabled // Ignore autosave if disabled
if(method === "autosave" && ($tw.config.disableAutoSave || this.wiki.getTiddlerText(this.titleAutoSave,"yes") !== "yes")) { if(method === "autosave" && ($tw.config.disableAutoSave || wiki.getTiddlerText(this.titleAutoSave,"yes") !== "yes")) {
return false; return false;
} }
var variables = options.variables || {}, var variables = options.variables || {},
template = (options.template || template = (options.template ||
this.wiki.getTiddlerText("$:/config/SaveWikiButton/Template","$:/core/save/all")).trim(), wiki.getTiddlerText("$:/config/SaveWikiButton/Template","$:/core/save/all")).trim(),
downloadType = options.downloadType || "text/plain", downloadType = options.downloadType || "text/plain",
text = this.wiki.renderTiddler(downloadType,template,options), text = wiki.renderTiddler(downloadType,template,options),
callback = function(err) { callback = function(err) {
if(err) { if(err) {
alert($tw.language.getString("Error/WhileSaving") + ":\n\n" + err); alert($tw.language.getString("Error/WhileSaving") + ":\n\n" + err);

View File

@ -20,7 +20,7 @@ Retrieve ETag if available
*/ */
var retrieveETag = function(self) { var retrieveETag = function(self) {
var headers = { var headers = {
Accept: "*/*;charset=UTF-8" Accept: "*/*"
}; };
$tw.utils.httpRequest({ $tw.utils.httpRequest({
url: self.uri(), url: self.uri(),
@ -48,14 +48,14 @@ var PutSaver = function(wiki) {
var self = this; var self = this;
var uri = this.uri(); var uri = this.uri();
// Async server probe. Until probe finishes, save will fail fast // Async server probe. Until probe finishes, save will fail fast
// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276 // See also https://github.com/TiddlyWiki/TiddlyWiki5/issues/2276
$tw.utils.httpRequest({ $tw.utils.httpRequest({
url: uri, url: uri,
type: "OPTIONS", type: "OPTIONS",
callback: function(err,data,xhr) { callback: function(err,data,xhr) {
// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1 // Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1
if(!err) { if(!err) {
self.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader("dav"); self.serverAcceptsPuts = xhr.status >= 200 && xhr.status < 300 && !!xhr.getResponseHeader("dav");
} }
} }
}); });

View File

@ -37,7 +37,9 @@ HeaderAuthenticator.prototype.authenticateRequest = function(request,response,st
return false; return false;
} else { } else {
// authenticatedUsername will be undefined for anonymous users // authenticatedUsername will be undefined for anonymous users
state.authenticatedUsername = $tw.utils.decodeURIComponentSafe(username); if(username) {
state.authenticatedUsername = $tw.utils.decodeURIComponentSafe(username);
}
return true; return true;
} }
}; };

View File

@ -61,7 +61,7 @@ exports.startup = function() {
// Collect the shadow tiddlers of any modified plugins // Collect the shadow tiddlers of any modified plugins
$tw.utils.each(changes.modifiedPlugins,function(pluginTitle) { $tw.utils.each(changes.modifiedPlugins,function(pluginTitle) {
var pluginInfo = $tw.wiki.getPluginInfo(pluginTitle); var pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);
if(pluginInfo) { if(pluginInfo && pluginInfo.tiddlers) {
$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) { $tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {
changedShadowTiddlers[title] = false; changedShadowTiddlers[title] = false;
}); });

View File

@ -41,12 +41,8 @@ ClassicStoryView.prototype.navigateTo = function(historyInfo) {
if(!targetElement || targetElement.nodeType === Node.TEXT_NODE) { if(!targetElement || targetElement.nodeType === Node.TEXT_NODE) {
return; return;
} }
if(duration) { // Scroll the node into view
// Scroll the node into view this.listWidget.dispatchEvent({type: "tm-scroll", target: targetElement, highlight: foundAnchor});
this.listWidget.dispatchEvent({type: "tm-scroll", target: targetElement, highlight: foundAnchor});
} else {
targetElement.scrollIntoView();
}
}; };
ClassicStoryView.prototype.insert = function(widget) { ClassicStoryView.prototype.insert = function(widget) {
@ -93,6 +89,10 @@ ClassicStoryView.prototype.remove = function(widget) {
removeElement = function() { removeElement = function() {
widget.removeChildDomNodes(); widget.removeChildDomNodes();
}; };
// Blur the focus if it is within the descendents of the node we are removing
if($tw.utils.domContains(targetElement,targetElement.ownerDocument.activeElement)) {
targetElement.ownerDocument.activeElement.blur();
}
// Abandon if the list entry isn't a DOM element (it might be a text node) // Abandon if the list entry isn't a DOM element (it might be a text node)
if(!targetElement || targetElement.nodeType === Node.TEXT_NODE) { if(!targetElement || targetElement.nodeType === Node.TEXT_NODE) {
removeElement(); removeElement();

View File

@ -12,7 +12,7 @@ Upgrader module that suppresses certain system tiddlers that shouldn't be import
/*global $tw: false */ /*global $tw: false */
"use strict"; "use strict";
var DONT_IMPORT_LIST = ["$:/Import"], var DONT_IMPORT_LIST = ["$:/Import", "$:/build"],
UNSELECT_PREFIX_LIST = ["$:/temp/","$:/state/","$:/StoryList","$:/HistoryList"], UNSELECT_PREFIX_LIST = ["$:/temp/","$:/state/","$:/StoryList","$:/HistoryList"],
WARN_IMPORT_PREFIX_LIST = ["$:/core/modules/"]; WARN_IMPORT_PREFIX_LIST = ["$:/core/modules/"];

View File

@ -270,6 +270,7 @@ Copy plain text to the clipboard on browsers that support it
*/ */
exports.copyToClipboard = function(text,options) { exports.copyToClipboard = function(text,options) {
options = options || {}; options = options || {};
text = text || "";
var textArea = document.createElement("textarea"); var textArea = document.createElement("textarea");
textArea.style.position = "fixed"; textArea.style.position = "fixed";
textArea.style.top = 0; textArea.style.top = 0;
@ -289,7 +290,7 @@ exports.copyToClipboard = function(text,options) {
var succeeded = false; var succeeded = false;
try { try {
succeeded = document.execCommand("copy"); succeeded = document.execCommand("copy");
} catch (err) { } catch(err) {
} }
if(!options.doNotNotify) { if(!options.doNotNotify) {
var successNotification = options.successNotification || "$:/language/Notifications/CopiedToClipboard/Succeeded", var successNotification = options.successNotification || "$:/language/Notifications/CopiedToClipboard/Succeeded",
@ -326,7 +327,7 @@ exports.collectDOMVariables = function(selectedNode,domNode,event) {
variables["tv-popup-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,nodeRect); variables["tv-popup-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,nodeRect);
var absRect = $tw.utils.extend({}, nodeRect); var absRect = $tw.utils.extend({}, nodeRect);
for (var currentNode = selectedNode.offsetParent; currentNode; currentNode = currentNode.offsetParent) { for(var currentNode = selectedNode.offsetParent; currentNode; currentNode = currentNode.offsetParent) {
absRect.left += currentNode.offsetLeft; absRect.left += currentNode.offsetLeft;
absRect.top += currentNode.offsetTop; absRect.top += currentNode.offsetTop;
} }

View File

@ -29,10 +29,14 @@ exports.getEditionInfo = function() {
for(var entryIndex=0; entryIndex<entries.length; entryIndex++) { for(var entryIndex=0; entryIndex<entries.length; entryIndex++) {
var entry = entries[entryIndex]; var entry = entries[entryIndex];
// Check if directories have a valid tiddlywiki.info // Check if directories have a valid tiddlywiki.info
if(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) { // Check if the entry is a hidden directory
var info = $tw.utils.parseJSONSafe(fs.readFileSync(path.resolve(editionPath,entry,"tiddlywiki.info"),"utf8"),null); if((entry.charAt(0) !== ".") && !editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {
if(info) { var file=path.resolve(editionPath,entry,"tiddlywiki.info");
editionInfo[entry] = info; if(fs.existsSync(file)) {
var info = $tw.utils.parseJSONSafe(fs.readFileSync(file,"utf8"),null);
if(info) {
editionInfo[entry] = info;
}
} }
} }
} }
@ -41,4 +45,4 @@ exports.getEditionInfo = function() {
return editionInfo; return editionInfo;
}; };
})(); })();

View File

@ -238,7 +238,7 @@ exports.generateTiddlerFileInfo = function(tiddler,options) {
} else { } else {
// Save as a .tid or a text/binary file plus a .meta file // Save as a .tid or a text/binary file plus a .meta file
var tiddlerType = tiddler.fields.type || "text/vnd.tiddlywiki"; var tiddlerType = tiddler.fields.type || "text/vnd.tiddlywiki";
if(tiddlerType === "text/vnd.tiddlywiki" || tiddler.hasField("_canonical_uri")) { if(tiddlerType === "text/vnd.tiddlywiki" || tiddlerType === "text/vnd.tiddlywiki-multiple" || tiddler.hasField("_canonical_uri")) {
// Save as a .tid file // Save as a .tid file
fileInfo.type = "application/x-tiddler"; fileInfo.type = "application/x-tiddler";
fileInfo.hasMetaFile = false; fileInfo.hasMetaFile = false;

View File

@ -924,7 +924,7 @@ exports.transliterate = function(str) {
}; };
exports.transliterateToSafeASCII = function(str) { exports.transliterateToSafeASCII = function(str) {
return str.replace(/[^\x00-\x7F]/g,function(ch) { return str.replace(/[^\x20-\x7F]/g,function(ch) {
return exports.transliterationPairs[ch] || "" return exports.transliterationPairs[ch] || ""
}); });
}; };

View File

@ -330,16 +330,18 @@ exports.formatTitleString = function(template,options) {
}] }]
]; ];
while(t.length){ while(t.length){
var matchString = ""; var matchString = "",
found = false;
$tw.utils.each(matches, function(m) { $tw.utils.each(matches, function(m) {
var match = m[0].exec(t); var match = m[0].exec(t);
if(match) { if(match) {
found = true;
matchString = m[1].call(null,match); matchString = m[1].call(null,match);
t = t.substr(match[0].length); t = t.substr(match[0].length);
return false; return false;
} }
}); });
if(matchString) { if(found) {
result += matchString; result += matchString;
} else { } else {
result += t.charAt(0); result += t.charAt(0);

View File

@ -262,7 +262,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
*/ */
ButtonWidget.prototype.refresh = function(changedTiddlers) { ButtonWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes(); var changedAttributes = this.computeAttributes();
if(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.popupAbsCoords || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled || changedAttributes["default"]) { if(changedAttributes.tooltip || changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.popupAbsCoords || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled || changedAttributes["default"]) {
this.refreshSelf(); this.refreshSelf();
return true; return true;
} else { } else {

View File

@ -75,7 +75,9 @@ DataWidget.prototype.computeDataTiddlerValues = function() {
} }
}); });
// Deal with $tiddler, $filter or $compound-tiddler attributes // Deal with $tiddler, $filter or $compound-tiddler attributes
var tiddlers = [],title; var tiddlers = [],
compoundTiddlers,
title;
if(this.hasAttribute("$tiddler")) { if(this.hasAttribute("$tiddler")) {
title = this.getAttribute("$tiddler"); title = this.getAttribute("$tiddler");
if(title) { if(title) {
@ -91,7 +93,9 @@ DataWidget.prototype.computeDataTiddlerValues = function() {
var titles = this.wiki.filterTiddlers(filter); var titles = this.wiki.filterTiddlers(filter);
$tw.utils.each(titles,function(title) { $tw.utils.each(titles,function(title) {
var tiddler = self.wiki.getTiddler(title); var tiddler = self.wiki.getTiddler(title);
tiddlers.push(tiddler); if(tiddler) {
tiddlers.push(tiddler);
}
}); });
} }
} }
@ -101,8 +105,17 @@ DataWidget.prototype.computeDataTiddlerValues = function() {
tiddlers.push.apply(tiddlers,this.extractCompoundTiddler(title)); tiddlers.push.apply(tiddlers,this.extractCompoundTiddler(title));
} }
} }
if(this.hasAttribute("$compound-filter")) {
filter = this.getAttribute("$compound-filter");
if(filter) {
compoundTiddlers = this.wiki.filterTiddlers(filter);
$tw.utils.each(compoundTiddlers, function(title){
tiddlers.push.apply(tiddlers,self.extractCompoundTiddler(title));
});
}
}
// Return the literal item if none of the special attributes were used // Return the literal item if none of the special attributes were used
if(!this.hasAttribute("$tiddler") && !this.hasAttribute("$filter") && !this.hasAttribute("$compound-tiddler")) { if(!this.hasAttribute("$tiddler") && !this.hasAttribute("$filter") && !this.hasAttribute("$compound-tiddler") && !this.hasAttribute("$compound-filter")) {
if(Object.keys(item).length > 0 && !!item.title) { if(Object.keys(item).length > 0 && !!item.title) {
return [new $tw.Tiddler(item)]; return [new $tw.Tiddler(item)];
} else { } else {
@ -110,7 +123,6 @@ DataWidget.prototype.computeDataTiddlerValues = function() {
} }
} else { } else {
// Apply the item fields to each of the tiddlers // Apply the item fields to each of the tiddlers
delete item.title; // Do not overwrite the title
if(Object.keys(item).length > 0) { if(Object.keys(item).length > 0) {
$tw.utils.each(tiddlers,function(tiddler,index) { $tw.utils.each(tiddlers,function(tiddler,index) {
tiddlers[index] = new $tw.Tiddler(tiddler,item); tiddlers[index] = new $tw.Tiddler(tiddler,item);

View File

@ -96,13 +96,15 @@ KeyboardWidget.prototype.execute = function() {
this.param = this.getAttribute("param",""); this.param = this.getAttribute("param","");
this.key = this.getAttribute("key",""); this.key = this.getAttribute("key","");
this.tag = this.getAttribute("tag",""); this.tag = this.getAttribute("tag","");
this.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key); if($tw.keyboardManager) {
if(this.key.substr(0,2) === "((" && this.key.substr(-2,2) === "))") { this.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);
this.shortcutTiddlers = []; if(this.key.substr(0,2) === "((" && this.key.substr(-2,2) === "))") {
var name = this.key.substring(2,this.key.length -2); this.shortcutTiddlers = [];
$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) { var name = this.key.substring(2,this.key.length -2);
self.shortcutTiddlers.push("$:/config/" + platformDescriptor + "/" + name); $tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {
}); self.shortcutTiddlers.push("$:/config/" + platformDescriptor + "/" + name);
});
}
} }
// Make child widgets // Make child widgets
this.makeChildWidgets(); this.makeChildWidgets();
@ -126,7 +128,7 @@ KeyboardWidget.prototype.refresh = function(changedTiddlers) {
this.assignDomNodeClasses(); this.assignDomNodeClasses();
} }
// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed // Update the keyInfoArray if one of its shortcut-config-tiddlers has changed
if(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) { if(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) && $tw.keyboardManager) {
this.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key); this.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);
} }
return this.refreshChildren(changedTiddlers); return this.refreshChildren(changedTiddlers);

View File

@ -185,7 +185,7 @@ NavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {
// Place a tiddler in edit mode // Place a tiddler in edit mode
NavigatorWidget.prototype.handleEditTiddlerEvent = function(event) { NavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {
var editTiddler = $tw.hooks.invokeHook("th-editing-tiddler",event), var editTiddler = $tw.hooks.invokeHook("th-editing-tiddler",event),
win = event.event && event.event.view ? event.event.view : window; win = event.event && event.event.view ? event.event.view : window;
if(!editTiddler) { if(!editTiddler) {
return false; return false;
} }
@ -307,7 +307,7 @@ NavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {
var title = event.param || event.tiddlerTitle, var title = event.param || event.tiddlerTitle,
tiddler = this.wiki.getTiddler(title), tiddler = this.wiki.getTiddler(title),
storyList = this.getStoryList(), storyList = this.getStoryList(),
win = event.event && event.event.view ? event.event.view : window; win = event.event && event.event.view ? event.event.view : window;
// Replace the original tiddler with the draft // Replace the original tiddler with the draft
if(tiddler) { if(tiddler) {
var draftTitle = (tiddler.fields["draft.title"] || "").trim(), var draftTitle = (tiddler.fields["draft.title"] || "").trim(),
@ -413,7 +413,8 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
event = $tw.hooks.invokeHook("th-new-tiddler", event); event = $tw.hooks.invokeHook("th-new-tiddler", event);
// Get the story details // Get the story details
var storyList = this.getStoryList(), var storyList = this.getStoryList(),
templateTiddler, additionalFields, title, draftTitle, existingTiddler; templateTiddler, additionalFields, title, draftTitle, existingTiddler,
templateHasTags = false;
// Get the template tiddler (if any) // Get the template tiddler (if any)
if(typeof event.param === "string") { if(typeof event.param === "string") {
// Get the template tiddler // Get the template tiddler
@ -458,8 +459,10 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
// Merge tags // Merge tags
mergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags)); mergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));
} }
var additionalFieldsHasTags = !!(additionalFields && (additionalFields.tags === ""));
if(templateTiddler && templateTiddler.fields.tags) { if(templateTiddler && templateTiddler.fields.tags) {
// Merge tags // Merge tags
templateHasTags = true;
mergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags); mergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);
} }
// Save the draft tiddler // Save the draft tiddler
@ -475,7 +478,8 @@ NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
{ {
title: draftTitle, title: draftTitle,
"draft.of": title, "draft.of": title,
tags: mergedTags // If template or additionalFields have "tags" even if empty a tags field will be created.
tags: ((mergedTags.length > 0) || templateHasTags || additionalFieldsHasTags) ? mergedTags : undefined
},this.wiki.getModificationFields()); },this.wiki.getModificationFields());
this.wiki.addTiddler(draftTiddler); this.wiki.addTiddler(draftTiddler);
// Update the story to insert the new draft at the top and remove any existing tiddler // Update the story to insert the new draft at the top and remove any existing tiddler
@ -527,7 +531,7 @@ NavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {
var systemMessage = $tw.language.getString("Import/Upgrader/Tiddler/Unselected"); var systemMessage = $tw.language.getString("Import/Upgrader/Tiddler/Unselected");
$tw.utils.each(messages,function(message,title) { $tw.utils.each(messages,function(message,title) {
newFields["message-" + title] = message; newFields["message-" + title] = message;
if (message.indexOf(systemMessage) !== -1) { if(message.indexOf(systemMessage) !== -1) {
newFields["selection-" + title] = "unchecked"; newFields["selection-" + title] = "unchecked";
} }
}); });

View File

@ -194,18 +194,24 @@ options.prefix must be a string
*/ */
exports.generateNewTitle = function(baseTitle,options) { exports.generateNewTitle = function(baseTitle,options) {
options = options || {}; options = options || {};
var c = 0, var title = baseTitle,
title = baseTitle, template = options.template || "",
template = options.template, // test if .startCount is a positive integer. If not set to 0
c = (parseInt(options.startCount,10) > 0) ? parseInt(options.startCount,10) : 0,
prefix = (typeof(options.prefix) === "string") ? options.prefix : " "; prefix = (typeof(options.prefix) === "string") ? options.prefix : " ";
if (template) { if (template) {
// "count" is important to avoid an endless loop in while(...)!! // "count" is important to avoid an endless loop in while(...)!!
template = (/\$count:?(\d+)?\$/i.test(template)) ? template : template + "$count$"; template = (/\$count:?(\d+)?\$/i.test(template)) ? template : template + "$count$";
title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":c}); // .formatTitleString() expects strings as input
title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":c+""});
while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) { while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {
title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":(++c)}); title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":(++c)+""});
} }
} else { } else {
if (c > 0) {
title = baseTitle + prefix + c;
}
while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) { while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {
title = baseTitle + prefix + (++c); title = baseTitle + prefix + (++c);
} }
@ -551,28 +557,45 @@ exports.getTiddlerBacklinks = function(targetTitle) {
/* /*
Return an array of tiddler titles that are directly transcluded within the given parse tree Return an array of tiddler titles that are directly transcluded within the given parse tree. `title` is the tiddler being parsed, we will ignore its self-referential transclusions, only return
*/ */
exports.extractTranscludes = function(parseTreeRoot) { exports.extractTranscludes = function(parseTreeRoot, title) {
// Count up the transcludes // Count up the transcludes
var transcludes = [], var transcludes = [],
checkParseTree = function(parseTree, parentNode) { checkParseTree = function(parseTree, parentNode) {
for(var t=0; t<parseTree.length; t++) { for(var t=0; t<parseTree.length; t++) {
var parseTreeNode = parseTree[t]; var parseTreeNode = parseTree[t];
if(parseTreeNode.type === "transclude" && parseTreeNode.attributes.$tiddler && parseTreeNode.attributes.$tiddler.type === "string") { if(parseTreeNode.type === "transclude") {
var value; if(parseTreeNode.attributes.$tiddler) {
// if it is Transclusion with Templates like `{{Index||$:/core/ui/TagTemplate}}`, the `$tiddler` will point to the template. We need to find the actual target tiddler from parent node if(parseTreeNode.attributes.$tiddler.type === "string") {
if(parentNode && parentNode.type === "tiddler" && parentNode.attributes.tiddler && parentNode.attributes.tiddler.type === "string") { var value;
value = parentNode.attributes.tiddler.value; // if it is Transclusion with Templates like `{{Index||$:/core/ui/TagTemplate}}`, the `$tiddler` will point to the template. We need to find the actual target tiddler from parent node
} else { if(parentNode && parentNode.type === "tiddler" && parentNode.attributes.tiddler && parentNode.attributes.tiddler.type === "string") {
value = parseTreeNode.attributes.$tiddler.value; // Empty value (like `{{!!field}}`) means self-referential transclusion.
value = parentNode.attributes.tiddler.value || title;
} else {
value = parseTreeNode.attributes.$tiddler.value;
}
}
} else if(parseTreeNode.attributes.tiddler) {
if (parseTreeNode.attributes.tiddler.type === "string") {
// Old transclude widget usage
value = parseTreeNode.attributes.tiddler.value;
}
} else if(parseTreeNode.attributes.$field && parseTreeNode.attributes.$field.type === "string") {
// Empty value (like `<$transclude $field='created'/>`) means self-referential transclusion.
value = title;
} else if(parseTreeNode.attributes.field && parseTreeNode.attributes.field.type === "string") {
// Old usage with Empty value (like `<$transclude field='created'/>`)
value = title;
} }
if(transcludes.indexOf(value) === -1) { // Deduplicate the result.
transcludes.push(value); if(value && transcludes.indexOf(value) === -1) {
$tw.utils.pushTop(transcludes,value);
} }
} }
if(parseTreeNode.children) { if(parseTreeNode.children) {
checkParseTree(parseTreeNode.children, parseTreeNode); checkParseTree(parseTreeNode.children,parseTreeNode);
} }
} }
}; };
@ -591,7 +614,8 @@ exports.getTiddlerTranscludes = function(title) {
// Parse the tiddler // Parse the tiddler
var parser = self.parseTiddler(title); var parser = self.parseTiddler(title);
if(parser) { if(parser) {
return self.extractTranscludes(parser.tree); // this will ignore self-referential transclusions from `title`
return self.extractTranscludes(parser.tree,title);
} }
return []; return [];
}); });

View File

@ -33,6 +33,7 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee external-link-foreground: #0000ee
footnote-target-background: #ecf2ff
foreground: #333333 foreground: #333333
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -33,6 +33,7 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee external-link-foreground: #0000ee
footnote-target-background: #ecf2ff
foreground: #333353 foreground: #333353
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -33,6 +33,7 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee external-link-foreground: #0000ee
footnote-target-background: #ecf2ff
foreground: #333333 foreground: #333333
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -1,7 +1,7 @@
title: $:/palettes/ContrastLight title: $:/palettes/ContrastDark
name: Contrast (Light) name: Contrast (Dark)
color-scheme: light color-scheme: dark
description: High contrast and unambiguous (light version) description: High contrast and unambiguous (dark version)
tags: $:/tags/Palette tags: $:/tags/Palette
type: application/x-tiddler-dictionary type: application/x-tiddler-dictionary
@ -9,7 +9,7 @@ alert-background: #f00
alert-border: <<colour background>> alert-border: <<colour background>>
alert-highlight: <<colour foreground>> alert-highlight: <<colour foreground>>
alert-muted-foreground: #800 alert-muted-foreground: #800
background: #fff background: #000
blockquote-bar: <<colour muted-foreground>> blockquote-bar: <<colour muted-foreground>>
button-background: <<colour background>> button-background: <<colour background>>
button-foreground: <<colour foreground>> button-foreground: <<colour foreground>>
@ -33,7 +33,8 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #00a external-link-foreground-visited: #00a
external-link-foreground: #00e external-link-foreground: #00e
foreground: #000 footnote-target-background: #4c4c4c
foreground: #fff
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000
message-background: <<colour foreground>> message-background: <<colour foreground>>
@ -82,8 +83,8 @@ tab-foreground: <<colour background>>
table-border: #dddddd table-border: #dddddd
table-footer-background: #a8a8a8 table-footer-background: #a8a8a8
table-header-background: #f0f0f0 table-header-background: #f0f0f0
tag-background: #000 tag-background: #fff
tag-foreground: #fff tag-foreground: #000
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour foreground>> tiddler-border: <<colour foreground>>
tiddler-controls-foreground-hover: #ddd tiddler-controls-foreground-hover: #ddd

View File

@ -1,7 +1,7 @@
title: $:/palettes/ContrastDark title: $:/palettes/ContrastLight
name: Contrast (Dark) name: Contrast (Light)
color-scheme: dark color-scheme: light
description: High contrast and unambiguous (dark version) description: High contrast and unambiguous (light version)
tags: $:/tags/Palette tags: $:/tags/Palette
type: application/x-tiddler-dictionary type: application/x-tiddler-dictionary
@ -9,7 +9,7 @@ alert-background: #f00
alert-border: <<colour background>> alert-border: <<colour background>>
alert-highlight: <<colour foreground>> alert-highlight: <<colour foreground>>
alert-muted-foreground: #800 alert-muted-foreground: #800
background: #000 background: #fff
blockquote-bar: <<colour muted-foreground>> blockquote-bar: <<colour muted-foreground>>
button-background: <<colour background>> button-background: <<colour background>>
button-foreground: <<colour foreground>> button-foreground: <<colour foreground>>
@ -33,7 +33,8 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #00a external-link-foreground-visited: #00a
external-link-foreground: #00e external-link-foreground: #00e
foreground: #fff footnote-target-background: #e5e5e5
foreground: #000
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000
message-background: <<colour foreground>> message-background: <<colour foreground>>
@ -82,8 +83,8 @@ tab-foreground: <<colour background>>
table-border: #dddddd table-border: #dddddd
table-footer-background: #a8a8a8 table-footer-background: #a8a8a8
table-header-background: #f0f0f0 table-header-background: #f0f0f0
tag-background: #fff tag-background: #000
tag-foreground: #000 tag-foreground: #fff
tiddler-background: <<colour background>> tiddler-background: <<colour background>>
tiddler-border: <<colour foreground>> tiddler-border: <<colour foreground>>
tiddler-controls-foreground-hover: #ddd tiddler-controls-foreground-hover: #ddd

View File

@ -31,6 +31,7 @@ external-link-background: transparent
external-link-foreground-hover: external-link-foreground-hover:
external-link-foreground-visited: #BF5AF2 external-link-foreground-visited: #BF5AF2
external-link-foreground: #32D74B external-link-foreground: #32D74B
footnote-target-background: #747474
foreground: #FFFFFF foreground: #FFFFFF
highlight-background: #ffff78 highlight-background: #ffff78
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -35,6 +35,7 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee external-link-foreground: #0000ee
footnote-target-background: #ecf2ff
foreground: #333333 foreground: #333333
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -39,6 +39,7 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #313163 external-link-foreground-visited: #313163
external-link-foreground: #555592 external-link-foreground: #555592
footnote-target-background: #fff7d9
foreground: #2D2A23 foreground: #2D2A23
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -40,6 +40,7 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #d3869b external-link-foreground-visited: #d3869b
external-link-foreground: #8ec07c external-link-foreground: #8ec07c
footnote-target-background: #665c54
foreground: #fbf1c7 foreground: #fbf1c7
highlight-background: #ffff79 highlight-background: #ffff79
highlight-foreground: #000000 highlight-foreground: #000000
@ -82,6 +83,10 @@ sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #458588 sidebar-tiddler-link-foreground-hover: #458588
sidebar-tiddler-link-foreground: #98971a sidebar-tiddler-link-foreground: #98971a
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-deprecated: #cc241d
stability-experimental: #d79921
stability-legacy: #458588
stability-stable: #98971a
static-alert-foreground: #B48EAD static-alert-foreground: #B48EAD
tab-background-selected: #ebdbb2 tab-background-selected: #ebdbb2
tab-background: #665c54 tab-background: #665c54

View File

@ -40,6 +40,7 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #5E81AC external-link-foreground-visited: #5E81AC
external-link-foreground: #8FBCBB external-link-foreground: #8FBCBB
footnote-target-background: #2E3440
foreground: #d8dee9 foreground: #d8dee9
highlight-background: #ffff78 highlight-background: #ffff78
highlight-foreground: #000000 highlight-foreground: #000000
@ -82,6 +83,10 @@ sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #A3BE8C sidebar-tiddler-link-foreground-hover: #A3BE8C
sidebar-tiddler-link-foreground: #81A1C1 sidebar-tiddler-link-foreground: #81A1C1
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-deprecated: #bf616a
stability-experimental: #d08770
stability-legacy: #88c0d0
stability-stable: #a3be8c
static-alert-foreground: #B48EAD static-alert-foreground: #B48EAD
tab-background-selected: #ECEFF4 tab-background-selected: #ECEFF4
tab-background: #4C566A tab-background: #4C566A

View File

@ -33,6 +33,7 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee external-link-foreground: #0000ee
footnote-target-background: #ecf2ff
foreground: #333333 foreground: #333333
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -131,6 +131,7 @@ external-link-background-hover: inherit
external-link-background-visited: inherit external-link-background-visited: inherit
external-link-background: inherit external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
footnote-target-background: #ded8c5
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000
message-border: #cfd6e6 message-border: #cfd6e6
@ -141,6 +142,10 @@ sidebar-controls-foreground-hover:
sidebar-muted-foreground-hover: sidebar-muted-foreground-hover:
sidebar-tab-background: #ded8c5 sidebar-tab-background: #ded8c5
sidebar-tiddler-link-foreground-hover: sidebar-tiddler-link-foreground-hover:
stability-deprecated: <<colour red>>
stability-experimental: <<colour yellow>>
stability-legacy: <<colour blue>>
stability-stable: <<colour green>>
static-alert-foreground: #aaaaaa static-alert-foreground: #aaaaaa
tab-border: #cccccc tab-border: #cccccc
modal-footer-border: <<colour tab-border>> modal-footer-border: <<colour tab-border>>

View File

@ -18,7 +18,7 @@ button-foreground: #93a1a1
code-background: #073642 code-background: #073642
code-border: #586e75 code-border: #586e75
code-foreground: #93a1a1 code-foreground: #93a1a1
dirty-indicator: inherit dirty-indicator: #dc322f
download-background: #859900 download-background: #859900
download-foreground: #073642 download-foreground: #073642
dragger-background: #073642 dragger-background: #073642
@ -34,6 +34,7 @@ external-link-background-visited: inherit
external-link-foreground: #268bd2 external-link-foreground: #268bd2
external-link-foreground-hover: external-link-foreground-hover:
external-link-foreground-visited: #268bd2 external-link-foreground-visited: #268bd2
footnote-target-background: #073642
foreground: #839496 foreground: #839496
highlight-background: #ffff78 highlight-background: #ffff78
highlight-foreground: #000000 highlight-foreground: #000000
@ -72,6 +73,10 @@ sidebar-tab-foreground-selected: #93a1a1
sidebar-tiddler-link-foreground: #2aa198 sidebar-tiddler-link-foreground: #2aa198
sidebar-tiddler-link-foreground-hover: #eee8d5 sidebar-tiddler-link-foreground-hover: #eee8d5
site-title-foreground: #d33682 site-title-foreground: #d33682
stability-deprecated: #dc322f
stability-experimental: #b58900
stability-legacy: #268bd2
stability-stable: #859900
static-alert-foreground: #93a1a1 static-alert-foreground: #93a1a1
tab-background: #073642 tab-background: #073642
tab-background-selected: #002b36 tab-background-selected: #002b36

View File

@ -18,7 +18,7 @@ button-foreground: #586e75
code-background: #eee8d5 code-background: #eee8d5
code-border: #93a1a1 code-border: #93a1a1
code-foreground: #586e75 code-foreground: #586e75
dirty-indicator: inherit dirty-indicator: #dc322f
download-background: #859900 download-background: #859900
download-foreground: #eee8d5 download-foreground: #eee8d5
dragger-background: #eee8d5 dragger-background: #eee8d5
@ -34,6 +34,7 @@ external-link-background-visited: inherit
external-link-foreground: #268bd2 external-link-foreground: #268bd2
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #268bd2 external-link-foreground-visited: #268bd2
footnote-target-background: #eee8d5
foreground: #657b83 foreground: #657b83
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000
@ -72,6 +73,10 @@ sidebar-tab-foreground-selected: #586e75
sidebar-tiddler-link-foreground: #2aa198 sidebar-tiddler-link-foreground: #2aa198
sidebar-tiddler-link-foreground-hover: #002b36 sidebar-tiddler-link-foreground-hover: #002b36
site-title-foreground: #d33682 site-title-foreground: #d33682
stability-deprecated: #dc322f
stability-experimental: #b58900
stability-legacy: #268bd2
stability-stable: #859900
static-alert-foreground: #586e75 static-alert-foreground: #586e75
tab-background: #eee8d5 tab-background: #eee8d5
tab-background-selected: #fdf6e3 tab-background-selected: #fdf6e3

View File

@ -33,6 +33,7 @@ external-link-background: transparent
external-link-foreground-hover: external-link-foreground-hover:
external-link-foreground-visited: external-link-foreground-visited:
external-link-foreground: external-link-foreground:
footnote-target-background: #ececec
foreground: rgba(0, 0, 0, 0.87) foreground: rgba(0, 0, 0, 0.87)
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -33,6 +33,7 @@ external-link-background: transparent
external-link-foreground-hover: external-link-foreground-hover:
external-link-foreground-visited: #7c318c external-link-foreground-visited: #7c318c
external-link-foreground: #9e3eb3 external-link-foreground: #9e3eb3
footnote-target-background: #494949
foreground: rgba(255, 255, 255, 0.7) foreground: rgba(255, 255, 255, 0.7)
highlight-background: #ffff78 highlight-background: #ffff78
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -42,6 +42,7 @@ external-link-background-visited: inherit
external-link-foreground: rgb(179, 179, 255) external-link-foreground: rgb(179, 179, 255)
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: rgb(153, 153, 255) external-link-foreground-visited: rgb(153, 153, 255)
footnote-target-background: <<colour tag-foreground>>
foreground: rgb(179, 179, 179) foreground: rgb(179, 179, 179)
highlight-background: #ffff78 highlight-background: #ffff78
highlight-foreground: #000000 highlight-foreground: #000000

View File

@ -41,6 +41,7 @@ external-link-background: inherit
external-link-foreground-hover: inherit external-link-foreground-hover: inherit
external-link-foreground-visited: #0000aa external-link-foreground-visited: #0000aa
external-link-foreground: #0000ee external-link-foreground: #0000ee
footnote-target-background: #ecf2ff
foreground: #333333 foreground: #333333
highlight-background: #ffff00 highlight-background: #ffff00
highlight-foreground: #000000 highlight-foreground: #000000
@ -82,6 +83,10 @@ sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: #444444 sidebar-tiddler-link-foreground-hover: #444444
sidebar-tiddler-link-foreground: #999999 sidebar-tiddler-link-foreground: #999999
site-title-foreground: <<colour tiddler-title-foreground>> site-title-foreground: <<colour tiddler-title-foreground>>
stability-stable: #008000
stability-experimental: #c07c00
stability-deprecated: #ff0000
stability-legacy: #0000ff
static-alert-foreground: #aaaaaa static-alert-foreground: #aaaaaa
tab-background-selected: #ffffff tab-background-selected: #ffffff
tab-background: #d8d8d8 tab-background: #d8d8d8
@ -95,7 +100,7 @@ table-footer-background: #a8a8a8
table-header-background: #f0f0f0 table-header-background: #f0f0f0
tag-background: #ec6 tag-background: #ec6
tag-foreground: #ffffff tag-foreground: #ffffff
testcase-accent-level-1: #84C5E6 testcase-accent-level-1: #c1eaff
testcase-accent-level-2: #E3B740 testcase-accent-level-2: #E3B740
testcase-accent-level-3: #5FD564 testcase-accent-level-3: #5FD564
tiddler-background: <<colour background>> tiddler-background: <<colour background>>

View File

@ -1,23 +1,23 @@
title: $:/core/templates/server/static.tiddler.wikitext title: $:/core/templates/server/static.tiddler.wikitext
\whitespace trim \whitespace trim
<div class="tc-tiddler-title"> <div class="tc-tiddler-title tc-clearfix">
<div class="tc-titlebar"> <div class="tc-titlebar">
<h2><$text text=<<currentTiddler>>/></h2> <h2><$text text=<<currentTiddler>>/></h2>
</div> </div>
</div> </div>
<div class="tc-subtitle"> <div class="tc-subtitle tc-clearfix">
<$link to={{!!modifier}}> <$link to={{!!modifier}}>
<$view field="modifier"/> <$view field="modifier"/>
</$link> <$view field="modified" format="date" template={{$:/language/Tiddler/DateFormat}}/> </$link> <$view field="modified" format="date" template={{$:/language/Tiddler/DateFormat}}/>
</div> </div>
<div class="tc-tags-wrapper"> <div class="tc-tags-wrapper" tc-clearfix>
<$list filter="[all[current]tags[]sort[title]]"> <$list filter="[all[current]tags[]sort[title]]">
<a href={{{ [<currentTiddler>encodeuricomponent[]] }}}> <a href={{{ [<currentTiddler>encodeuricomponent[]] }}}>
<$macrocall $name="tag-pill" tag=<<currentTiddler>>/> <$macrocall $name="tag-pill" tag=<<currentTiddler>>/>
</a> </a>
</$list> </$list>
</div> </div>
<div class="tc-tiddler-body"> <div class="tc-tiddler-body tc-clearfix">
<$transclude mode="block"/> <$transclude mode="block"/>
</div> </div>

View File

@ -0,0 +1,38 @@
title: $:/core/templates/social-metadata
tags: $:/tags/RawMarkupWikified
\procedure meta-plain(name,source,name-attribute:"name")
\whitespace trim
<%if [<source>has[text]] %>
&lt;meta&#32;<$text text=<<name-attribute>>/>="<$text text=<<name>>/>" content="<$text text={{{ [<source>get[text]encodehtml[]] }}}/>"&gt;
<$text text={{{ [charcode[10]] }}}/>
<%endif%>
\end meta-plain
\procedure meta-wikified(name,source,name-attribute:"name")
\whitespace trim
<%if [<source>has[text]] %>
<$wikify name="html" text={{{ [<source>get[text]] }}} output="text">
&lt;meta&#32;<$text text=<<name-attribute>>/>="<$text text=<<name>>/>" content="<$text text={{{ [<html>encodehtml[]] }}}/>"&gt;
<$text text={{{ [charcode[10]] }}}/>
</$wikify>
<%endif%>
\end meta-wikified
\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock conditional commentinline commentblock
<<meta-wikified "description" "$:/SiteSubtitle">>
<!-- Facebook Meta Tags -->
<<meta-plain "og:url" "$:/SiteUrl" "property">>
<<meta-plain "og:type" "website" "property">>
<<meta-wikified "og:title" "$:/SiteTitle" "property">>
<<meta-wikified "og:description" "$:/SiteSubtitle" "property">>
<<meta-plain "og:image" "$:/SitePreviewUrl" "property">>
<!-- Twitter Meta Tags -->
<<meta-plain "twitter:card" "summary_large_image">>
<<meta-plain "twitter:domain" "$:/SiteDomain" "property">>
<<meta-plain "twitter:url" "$:/SiteUrl" "property">>
<<meta-wikified "twitter:title" "$:/SiteTitle">>
<<meta-wikified "twitter:description" "$:/SiteSubtitle">>
<<meta-plain "twitter:image" "$:/SitePreviewUrl">>

View File

@ -57,3 +57,4 @@ title: $:/core/templates/tiddlywiki5.html
`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}` `{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`
</body> </body>
</html>` </html>`
</$set>

View File

@ -2,10 +2,10 @@ title: $:/core/ui/Actions/new-journal
tags: $:/tags/Actions tags: $:/tags/Actions
description: create a new journal tiddler description: create a new journal tiddler
\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$
\whitespace trim \whitespace trim
<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}> \function get-tags() [<textFieldTags>] [<tagsFieldTags>] +[join[ ]]
<$wikify name="journalTitle" text="<$macrocall $name='now' format=<<journalTitleTemplate>>/>"> <$let journalTitleTemplate={{$:/config/NewJournal/Title}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}>
<$wikify name="journalTitle" text="<$transclude $variable='now' format=<<journalTitleTemplate>>/>">
<$reveal type="nomatch" state=<<journalTitle>> text=""> <$reveal type="nomatch" state=<<journalTitle>> text="">
<$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> tags=<<get-tags>> text={{{ [<journalTitle>get[]] }}}/> <$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> tags=<<get-tags>> text={{{ [<journalTitle>get[]] }}}/>
</$reveal> </$reveal>
@ -13,4 +13,4 @@ description: create a new journal tiddler
<$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> tags=<<get-tags>> text=<<journalText>>/> <$action-sendmessage $message="tm-new-tiddler" title=<<journalTitle>> tags=<<get-tags>> text=<<journalText>>/>
</$reveal> </$reveal>
</$wikify> </$wikify>
</$vars> </$let>

View File

@ -2,8 +2,8 @@ title: $:/core/ui/Actions/new-tiddler
tags: $:/tags/Actions tags: $:/tags/Actions
description: create a new empty tiddler description: create a new empty tiddler
\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$
\whitespace trim \whitespace trim
<$vars textFieldTags={{$:/config/NewTiddler/Tags}} tagsFieldTags={{$:/config/NewTiddler/Tags!!tags}}> \function get-tags() [<textFieldTags>] [<tagsFieldTags>] +[join[ ]]
<$let textFieldTags={{$:/config/NewTiddler/Tags}} tagsFieldTags={{$:/config/NewTiddler/Tags!!tags}}>
<$action-sendmessage $message="tm-new-tiddler" tags=<<get-tags>>/> <$action-sendmessage $message="tm-new-tiddler" tags=<<get-tags>>/>
</$vars> </$let>

View File

@ -9,14 +9,16 @@ caption: {{$:/language/Search/Filter/Caption}}
tag="$:/tags/AdvancedSearch" tag="$:/tags/AdvancedSearch"
beforeafter="$beforeafter$" beforeafter="$beforeafter$"
defaultState="$:/core/ui/AdvancedSearch/System" defaultState="$:/core/ui/AdvancedSearch/System"
actions="<$action-setfield $tiddler='$:/state/advancedsearch/currentTab' text=<<nextTab>>/>"/> actions="<$action-setfield $tiddler='$:/state/advancedsearch/currentTab' text=<<nextTab>>/>"
/>
\end \end
\define cancel-search-actions() \define cancel-search-actions()
\whitespace trim \whitespace trim
<$list <$list filter="[{$:/temp/advancedsearch/input}!match{$:/temp/advancedsearch}]">
filter="[{$:/temp/advancedsearch/input}!match{$:/temp/advancedsearch}]" <$list-empty>
emptyMessage="<$action-deletetiddler $filter='[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]' />"> <$action-deletetiddler $filter="[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]"/>
</$list-empty>
<$action-setfield $tiddler="$:/temp/advancedsearch/input" text={{$:/temp/advancedsearch}}/> <$action-setfield $tiddler="$:/temp/advancedsearch/input" text={{$:/temp/advancedsearch}}/>
<$action-setfield $tiddler="$:/temp/advancedsearch/refresh" text="yes"/> <$action-setfield $tiddler="$:/temp/advancedsearch/refresh" text="yes"/>
</$list> </$list>
@ -24,54 +26,67 @@ caption: {{$:/language/Search/Filter/Caption}}
\define input-accept-actions() \define input-accept-actions()
\whitespace trim \whitespace trim
<$list <$list filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]">
filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]" <$list-empty>
emptyMessage="<$list filter='[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]'><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>"> <$list filter="[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]">
<$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/>
</$list>
<$/list-empty>
<$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/> <$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/>
</$list> </$list>
\end \end
\define input-accept-variant-actions() \define input-accept-variant-actions()
\whitespace trim \whitespace trim
<$list <$list filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]">
filter="[{$:/config/Search/NavigateOnEnter/enable}match[yes]]" <$list-empty>
emptyMessage="<$list filter='[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]'><$list filter='[<__tiddler__>get[text]minlength[1]]'><$action-sendmessage $message='tm-edit-tiddler' $param={{{ [<__tiddler__>get[text]] }}}/></$list></$list>"> <$list filter="[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]">
<$list filter="[<__tiddler__>get[text]minlength[1]]">
<$action-sendmessage $message="tm-edit-tiddler" $param={{{ [<__tiddler__>get[text]] }}}/>
</$list>
</$list>
</$list-empty>
<$list filter="[<__tiddler__>get[text]minlength[1]]"> <$list filter="[<__tiddler__>get[text]minlength[1]]">
<$action-sendmessage $message="tm-edit-tiddler" $param={{{ [<__tiddler__>get[text]] }}}/> <$action-sendmessage $message="tm-edit-tiddler" $param={{{ [<__tiddler__>get[text]] }}}/>
</$list></$list> </$list>
\end
\whitespace trim
<<lingo Filter/Hint>>
<div class="tc-search tc-advanced-search">
<$keyboard key="((input-tab-right))" actions=<<set-next-input-tab>>>
<$keyboard key="((input-tab-left))" actions=<<set-next-input-tab "before">>>
<$macrocall $name="keyboard-driven-input"
tiddler="$:/temp/advancedsearch/input"
storeTitle="$:/temp/advancedsearch"
refreshTitle="$:/temp/advancedsearch/refresh"
selectionStateTitle="$:/temp/advancedsearch/selected-item"
type="search"
tag="input"
focus={{$:/config/Search/AutoFocus}}
configTiddlerFilter="[[$:/temp/advancedsearch]]"
firstSearchFilterField="text"
inputAcceptActions=<<input-accept-actions>>
inputAcceptVariantActions=<<input-accept-variant-actions>>
inputCancelActions=<<cancel-search-actions>>/>
</$keyboard>
</$keyboard>
&#32;
<$list filter="[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]"><$transclude/></$list>
</div>
<$reveal state="$:/temp/advancedsearch" type="nomatch" text="">
<$set name="resultCount" value="<$count filter={{$:/temp/advancedsearch}}/>">
<div class="tc-search-results">
<p><<lingo Filter/Matches>></p>
<$list filter={{$:/temp/advancedsearch}}>
<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>
<$transclude tiddler="$:/core/ui/ListItemTemplate"/>
</span>
</$list> </$list>
\end
\whitespace trim
<<lingo Filter/Hint>>
<div class="tc-search tc-advanced-search">
<$keyboard key="((input-tab-right))" actions=<<set-next-input-tab>> class="tc-small-gap-right">
<$keyboard key="((input-tab-left))" actions=<<set-next-input-tab "before">>>
<$macrocall $name="keyboard-driven-input"
tiddler="$:/temp/advancedsearch/input"
storeTitle="$:/temp/advancedsearch"
refreshTitle="$:/temp/advancedsearch/refresh"
selectionStateTitle="$:/temp/advancedsearch/selected-item"
type="search"
tag="input"
focus={{$:/config/Search/AutoFocus}}
configTiddlerFilter="[[$:/temp/advancedsearch]]"
firstSearchFilterField="text"
inputAcceptActions=<<input-accept-actions>>
inputAcceptVariantActions=<<input-accept-variant-actions>>
inputCancelActions=<<cancel-search-actions>>
/>
</$keyboard>
</$keyboard>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]">
<$transclude/>
</$list>
</div> </div>
</$set>
<$reveal state="$:/temp/advancedsearch" type="nomatch" text="" tag="div" class="tc-search-results">
<$set name="resultCount" value="<$count filter={{$:/temp/advancedsearch}}/>">
<p><<lingo Filter/Matches>></p>
<$list filter={{$:/temp/advancedsearch}}>
<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>
<$transclude tiddler="$:/core/ui/ListItemTemplate"/>
</span>
</$list>
</$set>
</$reveal> </$reveal>

View File

@ -79,11 +79,15 @@ first-search-filter: [all[shadows]search<userInput>sort[title]limit[250]] -[[$:/
<$list filter="[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]" emptyMessage="<div class='tc-search-results'>{{$:/language/Search/Search/TooShort}}</div>" variable="listItem"> <$list filter="[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]" emptyMessage="<div class='tc-search-results'>{{$:/language/Search/Search/TooShort}}</div>" variable="listItem">
<$set name="resultCount" value="<$count filter='[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]'/>"> <$set name="resultCount" value={{{ [all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] +[count[]]}}}>
<div class="tc-search-results"> <div class="tc-search-results">
<<lingo Shadows/Matches>> <%if [<resultCount>match[0]] %>
{{$:/language/Search/Matches/NoMatch}}
<%else%>
<<lingo Shadows/Matches>>
<%endif%>
<$list filter="[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]"> <$list filter="[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]">
<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}> <span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>

View File

@ -39,6 +39,7 @@ caption: {{$:/language/Search/Standard/Caption}}
</$keyboard> </$keyboard>
</$keyboard> </$keyboard>
</$keyboard> </$keyboard>
&#32;
<$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> <$reveal state="$:/temp/advancedsearch" type="nomatch" text="">
<$button class="tc-btn-invisible"> <$button class="tc-btn-invisible">
<<cancel-search-actions>> <<cancel-search-actions>>
@ -57,15 +58,15 @@ caption: {{$:/language/Search/Standard/Caption}}
configTiddler={{{ [[$:/state/advancedsearch/standard/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} configTiddler={{{ [[$:/state/advancedsearch/standard/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}
searchListState="$:/temp/advancedsearch/selected-item"> searchListState="$:/temp/advancedsearch/selected-item">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]"> <$list filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]">
<$list-empty>
<$list filter='[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]'><$transclude mode="block"/></$list>
</$list-empty>
<$macrocall $name="tabs" <$macrocall $name="tabs"
tabsList="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]" tabsList="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]"
default={{$:/config/SearchResults/Default}} default={{$:/config/SearchResults/Default}}
actions="<$action-setfield $tiddler='$:/state/advancedsearch/standard/currentTab' text=<<currentTab>>/>" actions="<$action-setfield $tiddler='$:/state/advancedsearch/standard/currentTab' text=<<currentTab>>/>"
explicitState="$:/state/tab/search-results/advancedsearch" /> explicitState="$:/state/tab/search-results/advancedsearch" />
</$list> </$list>
<$list filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]] :else[[]]">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]"><$transclude mode="block"/></$list>
</$list>
</$vars> </$vars>
</$list> </$list>
</$reveal> </$reveal>

View File

@ -78,11 +78,15 @@ first-search-filter: [is[system]search<userInput>sort[title]limit[250]] -[[$:/te
<$list filter="[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]" emptyMessage="<div class='tc-search-results'>{{$:/language/Search/Search/TooShort}}</div>" variable="listItem"> <$list filter="[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]" emptyMessage="<div class='tc-search-results'>{{$:/language/Search/Search/TooShort}}</div>" variable="listItem">
<$set name="resultCount" value="<$count filter='[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]'/>"> <$set name="resultCount" value={{{ [is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]] +[count[]] }}}>
<div class="tc-search-results"> <div class="tc-search-results">
<<lingo System/Matches>> <%if [<resultCount>match[0]] %>
{{$:/language/Search/Matches/NoMatch}}
<%else%>
<<lingo System/Matches>>
<%endif%>
<$list filter="[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]"> <$list filter="[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]">
<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}> <span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>

View File

@ -2,22 +2,7 @@ title: $:/core/ui/ControlPanel/Basics
tags: $:/tags/ControlPanel/Info tags: $:/tags/ControlPanel/Info
caption: {{$:/language/ControlPanel/Basics/Caption}} caption: {{$:/language/ControlPanel/Basics/Caption}}
\define lingo-base() $:/language/ControlPanel/Basics/ \procedure lingo-base() $:/language/ControlPanel/Basics/
\define show-filter-count(filter)
\whitespace trim
<$button class="tc-btn-invisible">
<$action-setfield $tiddler="$:/temp/advancedsearch" $value="""$filter$"""/>
<$action-setfield $tiddler="$:/temp/advancedsearch/input" $value="""$filter$"""/>
<$action-setfield $tiddler="$:/temp/advancedsearch/refresh" text="yes"/>
<$action-setfield $tiddler="$:/state/tab--1498284803" $value="$:/core/ui/AdvancedSearch/Filter"/>
<$action-navigate $to="$:/AdvancedSearch"/>
<$action-sendmessage $message="tm-focus-selector" $param=".tc-advanced-search input"/>
''<$count filter="""$filter$"""/>''
&#32;
{{$:/core/images/advanced-search-button}}
</$button>
\end
\whitespace trim \whitespace trim
|tc-max-width tc-edit-max-width|k |tc-max-width tc-edit-max-width|k
@ -25,7 +10,7 @@ caption: {{$:/language/ControlPanel/Basics/Caption}}
|<$link to="$:/SiteTitle"><<lingo Title/Prompt>></$link> |<$edit-text tiddler="$:/SiteTitle" default="" tag="input"/> | |<$link to="$:/SiteTitle"><<lingo Title/Prompt>></$link> |<$edit-text tiddler="$:/SiteTitle" default="" tag="input"/> |
|<$link to="$:/SiteSubtitle"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler="$:/SiteSubtitle" default="" tag="input"/> | |<$link to="$:/SiteSubtitle"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler="$:/SiteSubtitle" default="" tag="input"/> |
|<$link to="$:/status/UserName"><<lingo Username/Prompt>></$link> |<$edit-text tiddler="$:/status/UserName" default="" tag="input"/> | |<$link to="$:/status/UserName"><<lingo Username/Prompt>></$link> |<$edit-text tiddler="$:/status/UserName" default="" tag="input"/> |
|<$link to="$:/config/AnimationDuration"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler="$:/config/AnimationDuration" default="" tag="input"/> | |<$link to="$:/config/AnimationDuration"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler="$:/config/AnimationDuration" default="" tag="input" type="number"/> |
|<$link to="$:/DefaultTiddlers"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit class="tc-edit-texteditor" tiddler="$:/DefaultTiddlers" autoHeight="yes"/><br>//<<lingo DefaultTiddlers/BottomHint>>// | |<$link to="$:/DefaultTiddlers"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit class="tc-edit-texteditor" tiddler="$:/DefaultTiddlers" autoHeight="yes"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |
|<$link to="$:/language/DefaultNewTiddlerTitle"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler="$:/language/DefaultNewTiddlerTitle" default="" tag="input"/> | |<$link to="$:/language/DefaultNewTiddlerTitle"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler="$:/language/DefaultNewTiddlerTitle" default="" tag="input"/> |
|<$link to="$:/config/NewJournal/Title"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler="$:/config/NewJournal/Title" default="" tag="input"/> | |<$link to="$:/config/NewJournal/Title"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler="$:/config/NewJournal/Title" default="" tag="input"/> |

View File

@ -0,0 +1,9 @@
title: $:/core/ui/ControlPanel/ViewTemplateSubtitle
tags: $:/tags/ControlPanel/Cascades
caption: {{$:/language/ControlPanel/ViewTemplateSubtitle/Caption}}
\define lingo-base() $:/language/ControlPanel/ViewTemplateSubtitle/
<<lingo Hint>>
{{$:/tags/ViewTemplateSubtitleFilter||$:/snippets/ListTaggedCascade}}

View File

@ -0,0 +1,9 @@
title: $:/core/ui/ControlPanel/ViewTemplateTags
tags: $:/tags/ControlPanel/Cascades
caption: {{$:/language/ControlPanel/ViewTemplateTags/Caption}}
\define lingo-base() $:/language/ControlPanel/ViewTemplateTags/
<<lingo Hint>>
{{$:/tags/ViewTemplateTagsFilter||$:/snippets/ListTaggedCascade}}

View File

@ -13,4 +13,4 @@ caption: {{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}
|<<lingo Branch>> |<$edit-text tiddler="$:/GitHub/Branch" default="main" tag="input"/> | |<<lingo Branch>> |<$edit-text tiddler="$:/GitHub/Branch" default="main" tag="input"/> |
|<<lingo Path>> |<$edit-text tiddler="$:/GitHub/Path" default="" tag="input"/> | |<<lingo Path>> |<$edit-text tiddler="$:/GitHub/Path" default="" tag="input"/> |
|<<lingo Filename>> |<$edit-text tiddler="$:/GitHub/Filename" default="" tag="input"/> | |<<lingo Filename>> |<$edit-text tiddler="$:/GitHub/Filename" default="" tag="input"/> |
|<<lingo ServerURL>> |<$edit-text tiddler="$:/GitHub/ServerURL" default="https://api.github.com" tag="input"/> | |<<lingo ServerURL>> |<$edit-text tiddler="$:/GitHub/ServerURL" default="https://api.github.com" tag="input" type="url"/> |

View File

@ -13,4 +13,4 @@ caption: {{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}
|<<lingo Branch>> |<$edit-text tiddler="$:/GitLab/Branch" default="master" tag="input"/> | |<<lingo Branch>> |<$edit-text tiddler="$:/GitLab/Branch" default="master" tag="input"/> |
|<<lingo Path>> |<$edit-text tiddler="$:/GitLab/Path" default="" tag="input"/> | |<<lingo Path>> |<$edit-text tiddler="$:/GitLab/Path" default="" tag="input"/> |
|<<lingo Filename>> |<$edit-text tiddler="$:/GitLab/Filename" default="" tag="input"/> | |<<lingo Filename>> |<$edit-text tiddler="$:/GitLab/Filename" default="" tag="input"/> |
|<<lingo ServerURL>> |<$edit-text tiddler="$:/GitLab/ServerURL" default="https://gitlab.com/api/v4" tag="input"/> | |<<lingo ServerURL>> |<$edit-text tiddler="$:/GitLab/ServerURL" default="https://gitlab.com/api/v4" tag="input" type="url"/> |

View File

@ -34,7 +34,7 @@ http://$(userName)$.tiddlyspot.com/$path$/
''<<lingo Advanced/Heading>>'' ''<<lingo Advanced/Heading>>''
|<<lingo ServerURL>> |<$edit-text tiddler="$:/UploadURL" default="" tag="input"/> | |<<lingo ServerURL>> |<$edit-text tiddler="$:/UploadURL" default="" tag="input" type="url"/> |
|<<lingo Filename>> |<$edit-text tiddler="$:/UploadFilename" default="index.html" tag="input"/> | |<<lingo Filename>> |<$edit-text tiddler="$:/UploadFilename" default="index.html" tag="input"/> |
|<<lingo UploadDir>> |<$edit-text tiddler="$:/UploadDir" default="." tag="input"/> | |<<lingo UploadDir>> |<$edit-text tiddler="$:/UploadDir" default="." tag="input"/> |
|<<lingo BackupDir>> |<$edit-text tiddler="$:/UploadBackupDir" default="." tag="input"/> | |<<lingo BackupDir>> |<$edit-text tiddler="$:/UploadBackupDir" default="." tag="input"/> |

View File

@ -13,4 +13,4 @@ caption: {{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}
|<<lingo Branch>> |<$edit-text tiddler="$:/Gitea/Branch" default="master" tag="input"/> | |<<lingo Branch>> |<$edit-text tiddler="$:/Gitea/Branch" default="master" tag="input"/> |
|<<lingo Path>> |<$edit-text tiddler="$:/Gitea/Path" default="" tag="input"/> | |<<lingo Path>> |<$edit-text tiddler="$:/Gitea/Path" default="" tag="input"/> |
|<<lingo Filename>> |<$edit-text tiddler="$:/Gitea/Filename" default="" tag="input"/> | |<<lingo Filename>> |<$edit-text tiddler="$:/Gitea/Filename" default="" tag="input"/> |
|<<lingo ServerURL>> |<$edit-text tiddler="$:/Gitea/ServerURL" default="https://gitea/api/v1" tag="input"/> | |<<lingo ServerURL>> |<$edit-text tiddler="$:/Gitea/ServerURL" default="https://gitea/api/v1" tag="input" type="url"/> |

View File

@ -0,0 +1,22 @@
title: $:/core/ui/ControlPanel/SocialCard
tags: $:/tags/ControlPanel/Advanced
caption: {{$:/language/ControlPanel/SocialCard/Caption}}
\define lingo-base() $:/language/ControlPanel/
<<lingo SocialCard/Hint>>
|<$link to="$:/SiteTitle"><<lingo Basics/Title/Prompt>></$link> |<$edit-text tiddler="$:/SiteTitle" default="" tag="input"/> |
|<$link to="$:/SiteSubtitle"><<lingo Basics/Subtitle/Prompt>></$link> |<$edit-text tiddler="$:/SiteSubtitle" default="" tag="input"/> |
|<$link to="$:/SiteDomain"><<lingo SocialCard/Domain/Prompt>></$link> |<$edit-text tiddler="$:/SiteDomain" default="" tag="input" type="url"/> |
|<$link to="$:/SiteUrl"><<lingo SocialCard/Url/Prompt>></$link> |<$edit-text tiddler="$:/SiteUrl" default="" tag="input" type="url"/> |
|<$link to="$:/SitePreviewUrl"><<lingo SocialCard/PreviewUrl/Prompt>></$link> |<$edit-text tiddler="$:/SitePreviewUrl" default="" tag="input" type="url"/> |
<%if [[$:/SitePreviewUrl]get[text]else[]!is[blank]] %>
<div>
<div>
<<lingo SocialCard/PreviewUrl/Preview>>
</div>
<img src={{$:/SitePreviewUrl}}/>
</div>
<%endif%>

View File

@ -9,7 +9,7 @@ list-before:
<$list filter="[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]"> <$list filter="[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]">
<div class="tc-control-panel-setting" data-setting-title=<<currentTiddler>> style="border-top:1px solid #eee;"> <div class="tc-control-panel-setting" data-setting-title=<<currentTiddler>> >
!!.tc-control-panel-accent <$link><$transclude field="caption"/></$link> !!.tc-control-panel-accent <$link><$transclude field="caption"/></$link>

View File

@ -9,7 +9,7 @@ second-search-filter: [!is[system]search<userInput>sort[title]limit[250]]
//<small>{{$:/language/Search/Matches/Title}}</small>// //<small>{{$:/language/Search/Matches/Title}}</small>//
<$list filter="[<userInput>minlength[1]]" variable="ignore"> <$list filter="[<userInput>minlength[1]]" variable="ignore">
<$list filter={{{ [<configTiddler>get[first-search-filter]] }}}> <$list filter={{{ [<configTiddler>get[first-search-filter]] }}} emptyMessage={{$:/language/Search/Matches/NoResult}}>
<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}> <span class={{{[<currentTiddler>addsuffix[-primaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>
<$transclude tiddler="$:/core/ui/ListItemTemplate"/> <$transclude tiddler="$:/core/ui/ListItemTemplate"/>
</span> </span>
@ -19,7 +19,7 @@ second-search-filter: [!is[system]search<userInput>sort[title]limit[250]]
//<small>{{$:/language/Search/Matches/All}}</small>// //<small>{{$:/language/Search/Matches/All}}</small>//
<$list filter="[<userInput>minlength[1]]" variable="ignore"> <$list filter="[<userInput>minlength[1]]" variable="ignore">
<$list filter={{{ [<configTiddler>get[second-search-filter]] }}}> <$list filter={{{ [<configTiddler>get[second-search-filter]] }}} emptyMessage={{$:/language/Search/Matches/NoResult}}>
<span class={{{[<currentTiddler>addsuffix[-secondaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}> <span class={{{[<currentTiddler>addsuffix[-secondaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>
<$transclude tiddler="$:/core/ui/ListItemTemplate"/> <$transclude tiddler="$:/core/ui/ListItemTemplate"/>
</span> </span>

View File

@ -3,7 +3,7 @@ tags: $:/tags/EditTemplate
\define config-title() $:/config/EditToolbarButtons/Visibility/$(listItem)$ \define config-title() $:/config/EditToolbarButtons/Visibility/$(listItem)$
\whitespace trim \whitespace trim
<div class="tc-tiddler-title tc-tiddler-edit-title"> <div class="tc-tiddler-title tc-tiddler-edit-title tc-clearfix">
<$view field="title"/> <$view field="title"/>
<span class="tc-tiddler-controls tc-titlebar"> <span class="tc-tiddler-controls tc-titlebar">
<$list filter="[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]" variable="listItem"> <$list filter="[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]" variable="listItem">
@ -14,5 +14,4 @@ tags: $:/tags/EditTemplate
</$let> </$let>
</$list> </$list>
</span> </span>
<div style="clear: both;"></div>
</div> </div>

View File

@ -4,11 +4,15 @@ caption: {{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}
description: {{$:/language/Buttons/Cancel/Hint}} description: {{$:/language/Buttons/Cancel/Hint}}
\whitespace trim \whitespace trim
<$button actions=<<cancel-delete-tiddler-actions "cancel">> tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>> <$button actions=<<cancel-delete-tiddler-actions "cancel">>
<$list filter="[<tv-config-toolbar-icons>match[yes]]"> tooltip={{$:/language/Buttons/Cancel/Hint}}
{{$:/core/images/cancel-button}} aria-label={{$:/language/Buttons/Cancel/Hint}}
</$list> class=<<tv-config-toolbar-class>>
<$list filter="[<tv-config-toolbar-text>match[yes]]"> >
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span> <%if [<tv-config-toolbar-icons>match[yes]] %>
</$list> {{$:/core/images/cancel-button}}
<%endif%>
<%if [<tv-config-toolbar-text>match[yes]] %>
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>
<%endif%>
</$button> </$button>

View File

@ -4,11 +4,15 @@ caption: {{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}
description: {{$:/language/Buttons/Delete/Hint}} description: {{$:/language/Buttons/Delete/Hint}}
\whitespace trim \whitespace trim
<$button actions=<<cancel-delete-tiddler-actions "delete">> tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>> <$button actions=<<cancel-delete-tiddler-actions "delete">>
<$list filter="[<tv-config-toolbar-icons>match[yes]]"> tooltip={{$:/language/Buttons/Delete/Hint}}
{{$:/core/images/delete-button}} aria-label={{$:/language/Buttons/Delete/Hint}}
</$list> class=<<tv-config-toolbar-class>>
<$list filter="[<tv-config-toolbar-text>match[yes]]"> >
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Delete/Caption}}/></span> <%if [<tv-config-toolbar-icons>match[yes]] %>
</$list> {{$:/core/images/delete-button}}
<%endif%>
<%if [<tv-config-toolbar-text>match[yes]] %>
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>
<%endif%>
</$button> </$button>

View File

@ -4,21 +4,20 @@ caption: {{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}
description: {{$:/language/Buttons/Save/Hint}} description: {{$:/language/Buttons/Save/Hint}}
\whitespace trim \whitespace trim
\define save-tiddler-button() \procedure save-tiddler-button()
\whitespace trim
<$fieldmangler> <$fieldmangler>
<$button <$button
tooltip={{$:/language/Buttons/Save/Hint}} tooltip={{$:/language/Buttons/Save/Hint}}
aria-label={{$:/language/Buttons/Save/Caption}} aria-label={{$:/language/Buttons/Save/Hint}}
class=<<tv-config-toolbar-class>> class=<<tv-config-toolbar-class>>
> >
<<save-tiddler-actions>> <<save-tiddler-actions>>
<$list filter="[<tv-config-toolbar-icons>match[yes]]"> <%if [<tv-config-toolbar-icons>match[yes]] %>
{{$:/core/images/done-button}} {{$:/core/images/done-button}}
</$list> <%endif%>
<$list filter="[<tv-config-toolbar-text>match[yes]]"> <%if [<tv-config-toolbar-text>match[yes]] %>
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Save/Caption}}/></span> <span class="tc-btn-text"><$text text={{$:/language/Buttons/Save/Caption}}/></span>
</$list> <%endif%>
</$button> </$button>
</$fieldmangler> </$fieldmangler>
\end \end

View File

@ -3,7 +3,7 @@ tags: $:/tags/EditorToolbar
icon: $:/core/images/bold icon: $:/core/images/bold
caption: {{$:/language/Buttons/Bold/Caption}} caption: {{$:/language/Buttons/Bold/Caption}}
description: {{$:/language/Buttons/Bold/Hint}} description: {{$:/language/Buttons/Bold/Hint}}
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]] condition: [<targetTiddler>!has[type]] [<targetTiddler>get[type]prefix[text/vnd.tiddlywiki]]
shortcuts: ((bold)) shortcuts: ((bold))
<$action-sendmessage <$action-sendmessage
@ -11,4 +11,5 @@ shortcuts: ((bold))
$param="wrap-selection" $param="wrap-selection"
prefix="''" prefix="''"
suffix="''" suffix="''"
trimSelection="yes"
/> />

View File

@ -3,7 +3,7 @@ tags: $:/tags/EditorToolbar
icon: $:/core/images/excise icon: $:/core/images/excise
caption: {{$:/language/Buttons/Excise/Caption}} caption: {{$:/language/Buttons/Excise/Caption}}
description: {{$:/language/Buttons/Excise/Hint}} description: {{$:/language/Buttons/Excise/Hint}}
condition: [<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]] condition: [<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] [<targetTiddler>type[text/markdown]] [<targetTiddler>type[text/x-markdown]] +[first[]]
shortcuts: ((excise)) shortcuts: ((excise))
dropdown: $:/core/ui/EditorToolbar/excise-dropdown dropdown: $:/core/ui/EditorToolbar/excise-dropdown

View File

@ -3,7 +3,7 @@ tags: $:/tags/EditorToolbar
icon: $:/core/images/heading-1 icon: $:/core/images/heading-1
caption: {{$:/language/Buttons/Heading1/Caption}} caption: {{$:/language/Buttons/Heading1/Caption}}
description: {{$:/language/Buttons/Heading1/Hint}} description: {{$:/language/Buttons/Heading1/Hint}}
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]] condition: [<targetTiddler>!has[type]] [<targetTiddler>get[type]prefix[text/vnd.tiddlywiki]]
button-classes: tc-text-editor-toolbar-item-start-group button-classes: tc-text-editor-toolbar-item-start-group
shortcuts: ((heading-1)) shortcuts: ((heading-1))

View File

@ -3,7 +3,7 @@ tags: $:/tags/EditorToolbar
icon: $:/core/images/heading-2 icon: $:/core/images/heading-2
caption: {{$:/language/Buttons/Heading2/Caption}} caption: {{$:/language/Buttons/Heading2/Caption}}
description: {{$:/language/Buttons/Heading2/Hint}} description: {{$:/language/Buttons/Heading2/Hint}}
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]] condition: [<targetTiddler>!has[type]] [<targetTiddler>get[type]prefix[text/vnd.tiddlywiki]]
shortcuts: ((heading-2)) shortcuts: ((heading-2))
<$action-sendmessage <$action-sendmessage

View File

@ -3,7 +3,7 @@ tags: $:/tags/EditorToolbar
icon: $:/core/images/heading-3 icon: $:/core/images/heading-3
caption: {{$:/language/Buttons/Heading3/Caption}} caption: {{$:/language/Buttons/Heading3/Caption}}
description: {{$:/language/Buttons/Heading3/Hint}} description: {{$:/language/Buttons/Heading3/Hint}}
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]] condition: [<targetTiddler>!has[type]] [<targetTiddler>get[type]prefix[text/vnd.tiddlywiki]]
shortcuts: ((heading-3)) shortcuts: ((heading-3))
<$action-sendmessage <$action-sendmessage

View File

@ -3,7 +3,7 @@ tags: $:/tags/EditorToolbar
icon: $:/core/images/heading-4 icon: $:/core/images/heading-4
caption: {{$:/language/Buttons/Heading4/Caption}} caption: {{$:/language/Buttons/Heading4/Caption}}
description: {{$:/language/Buttons/Heading4/Hint}} description: {{$:/language/Buttons/Heading4/Hint}}
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]] condition: [<targetTiddler>!has[type]] [<targetTiddler>get[type]prefix[text/vnd.tiddlywiki]]
shortcuts: ((heading-4)) shortcuts: ((heading-4))
<$action-sendmessage <$action-sendmessage

View File

@ -3,7 +3,7 @@ tags: $:/tags/EditorToolbar
icon: $:/core/images/heading-5 icon: $:/core/images/heading-5
caption: {{$:/language/Buttons/Heading5/Caption}} caption: {{$:/language/Buttons/Heading5/Caption}}
description: {{$:/language/Buttons/Heading5/Hint}} description: {{$:/language/Buttons/Heading5/Hint}}
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]] condition: [<targetTiddler>!has[type]] [<targetTiddler>get[type]prefix[text/vnd.tiddlywiki]]
shortcuts: ((heading-5)) shortcuts: ((heading-5))
<$action-sendmessage <$action-sendmessage

View File

@ -3,7 +3,7 @@ tags: $:/tags/EditorToolbar
icon: $:/core/images/heading-6 icon: $:/core/images/heading-6
caption: {{$:/language/Buttons/Heading6/Caption}} caption: {{$:/language/Buttons/Heading6/Caption}}
description: {{$:/language/Buttons/Heading6/Hint}} description: {{$:/language/Buttons/Heading6/Hint}}
condition: [<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]] condition: [<targetTiddler>!has[type]] [<targetTiddler>get[type]prefix[text/vnd.tiddlywiki]]
shortcuts: ((heading-6)) shortcuts: ((heading-6))
<$action-sendmessage <$action-sendmessage

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