Compare commits
59 Commits
wikify-ope
...
survey-edi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4db4aaa94 | ||
|
|
33f6eb0ea1 | ||
|
|
5f941d63a9 | ||
|
|
af3d44c7fe | ||
|
|
873a352b0d | ||
|
|
dac12d9b2b | ||
|
|
02680b234e | ||
|
|
c092772422 | ||
|
|
cd480de280 | ||
|
|
2137444d5a | ||
|
|
ea3c601319 | ||
|
|
5d0d2b1369 | ||
|
|
413f14ea9d | ||
|
|
96dc7c7084 | ||
|
|
aa8aafb6ce | ||
|
|
7a1b39accb | ||
|
|
00493a2eed | ||
|
|
9a1e761ec0 | ||
|
|
a661b9a5de | ||
|
|
117e88e604 | ||
|
|
9ce649d96a | ||
|
|
c0f823cd1d | ||
|
|
1228a9db77 | ||
|
|
83bacbb5c6 | ||
|
|
856b95671e | ||
|
|
ca776c8a8b | ||
|
|
ca29a95b0e | ||
|
|
ca7dbe2261 | ||
|
|
d4e190cbbc | ||
|
|
294803862a | ||
|
|
7a93126b1e | ||
|
|
b789b3d80a | ||
|
|
ee55ab636b | ||
|
|
cc1a01c08f | ||
|
|
75e89a150d | ||
|
|
e1d6b4863c | ||
|
|
dae6ae85ca | ||
|
|
a3b8c7c586 | ||
|
|
c25df5ce50 | ||
|
|
29f0a91f4b | ||
|
|
7b9153122c | ||
|
|
867b129e0e | ||
|
|
2c5c9cf033 | ||
|
|
05e08cd63b | ||
|
|
bedf9eb56f | ||
|
|
45a3889164 | ||
|
|
f4979dcdfd | ||
|
|
e824f72591 | ||
|
|
f724d1df4f | ||
|
|
66bdd32db9 | ||
|
|
0cb7f0ead0 | ||
|
|
8837a0f405 | ||
|
|
05db1bcb2c | ||
|
|
ff9e92b1cc | ||
|
|
f1b33c02f7 | ||
|
|
2871bd543b | ||
|
|
c117bfd2c5 | ||
|
|
0b5ed7893f | ||
|
|
44617232a7 |
7
.github/workflows/pr-check-build-size.yml
vendored
@@ -2,6 +2,11 @@ name: Calculate PR build size
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, reopened, synchronize]
|
||||
paths:
|
||||
- 'boot/**'
|
||||
- 'core/**'
|
||||
- 'themes/snowwhite/**'
|
||||
- 'themes/vanilla/**'
|
||||
|
||||
jobs:
|
||||
calculate-build-size:
|
||||
@@ -19,7 +24,7 @@ jobs:
|
||||
with:
|
||||
pr_number: ${{ github.event.pull_request.number }}
|
||||
repo: ${{ github.repository }}
|
||||
base_ref: ${{ github.base_ref }}
|
||||
base_ref: ${{ github.event.pull_request.base.ref }}
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
mode: size:calc
|
||||
|
||||
|
||||
@@ -159,6 +159,13 @@ node $TW5_BUILD_TIDDLYWIKI \
|
||||
--rendertiddler $:/core/save/all-external-js tour.html text/plain \
|
||||
|| exit 1
|
||||
|
||||
# /surveys.html surveys edition
|
||||
node $TW5_BUILD_TIDDLYWIKI \
|
||||
./editions/tiddlywiki-surveys \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--build index \
|
||||
|| exit 1
|
||||
|
||||
# /share.html Custom edition for sharing via the URL
|
||||
node $TW5_BUILD_TIDDLYWIKI \
|
||||
./editions/share \
|
||||
|
||||
@@ -131,15 +131,14 @@ Saving/GitService/Gitea/Caption: Gitea Saver
|
||||
Saving/GitService/Gitea/Password: Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)
|
||||
Saving/TiddlySpot/Advanced/Heading: Advanced Settings
|
||||
Saving/TiddlySpot/BackupDir: Backup Directory
|
||||
Saving/TiddlySpot/ControlPanel: ~TiddlySpot Control Panel
|
||||
Saving/TiddlySpot/ControlPanel: ~TiddlyHost Control Panel
|
||||
Saving/TiddlySpot/Backups: Backups
|
||||
Saving/TiddlySpot/Caption: ~TiddlySpot Saver
|
||||
Saving/TiddlySpot/Description: These settings are only used when saving to [[TiddlySpot|http://tiddlyspot.com]], [[TiddlyHost|https://tiddlyhost.com]], or a compatible remote server. See [[here|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot]] for information on ~TiddlySpot and ~TiddlyHost saving configuration.
|
||||
Saving/TiddlySpot/Caption: ~TiddlyHost Saver
|
||||
Saving/TiddlySpot/Description: These settings are only used when saving to [[TiddlyHost|https://tiddlyhost.com]] or a compatible remote server. See [[here|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot]] for information on ~TiddlyHost saving configuration
|
||||
Saving/TiddlySpot/Filename: Upload Filename
|
||||
Saving/TiddlySpot/Heading: ~TiddlySpot
|
||||
Saving/TiddlySpot/Hint: //The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//
|
||||
Saving/TiddlySpot/Heading: ~TiddlyHost
|
||||
Saving/TiddlySpot/Hint: //The server URL defaults to `http://<wikiname>.tiddlyspot.com/` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//
|
||||
Saving/TiddlySpot/Password: Password
|
||||
Saving/TiddlySpot/ReadOnly: Note that [[TiddlySpot|http://tiddlyspot.com]] no longer allows the creation of new sites. For new sites, you can use [[TiddlyHost|https://tiddlyhost.com]], a new hosting service that replaces ~TiddlySpot.
|
||||
Saving/TiddlySpot/ServerURL: Server URL
|
||||
Saving/TiddlySpot/UploadDir: Upload Directory
|
||||
Saving/TiddlySpot/UserName: Wiki Name
|
||||
@@ -190,6 +189,8 @@ Settings/DefaultSidebarTab/Caption: Default Sidebar Tab
|
||||
Settings/DefaultSidebarTab/Hint: Specify which sidebar tab is displayed by default
|
||||
Settings/DefaultMoreSidebarTab/Caption: Default More Sidebar Tab
|
||||
Settings/DefaultMoreSidebarTab/Hint: Specify which More sidebar tab is displayed by default
|
||||
Settings/DefaultTiddlerInfoTab/Caption: Default Tiddler Info Tab
|
||||
Settings/DefaultTiddlerInfoTab/Hint: Specify which tab is displayed by default when tiddler info panel is opened
|
||||
Settings/LinkToBehaviour/Caption: Tiddler Opening Behaviour
|
||||
Settings/LinkToBehaviour/InsideRiver/Hint: Navigation from //within// the story river
|
||||
Settings/LinkToBehaviour/OutsideRiver/Hint: Navigation from //outside// the story river
|
||||
|
||||
@@ -248,8 +248,7 @@ exports.compileFilter = function(filterString) {
|
||||
// Create a function for the chain of operators in the operation
|
||||
var operationSubFunction = function(source,widget) {
|
||||
var accumulator = source,
|
||||
results = [],
|
||||
currTiddlerTitle = widget && widget.getVariable("currentTiddler");
|
||||
results = [];
|
||||
$tw.utils.each(operation.operators,function(operator) {
|
||||
var operands = [],
|
||||
operatorFunction;
|
||||
@@ -265,6 +264,7 @@ exports.compileFilter = function(filterString) {
|
||||
}
|
||||
$tw.utils.each(operator.operands,function(operand) {
|
||||
if(operand.indirect) {
|
||||
var currTiddlerTitle = widget && widget.getVariable("currentTiddler");
|
||||
operand.value = self.getTextReference(operand.text,"",currTiddlerTitle);
|
||||
} else if(operand.variable) {
|
||||
var varTree = $tw.utils.parseFilterVariable(operand.text);
|
||||
|
||||
@@ -44,7 +44,7 @@ UploadSaver.prototype.save = function(text,method,callback) {
|
||||
}
|
||||
// Construct the url if not provided
|
||||
if(!url) {
|
||||
url = "http://" + username + ".tiddlyspot.com/store.cgi";
|
||||
url = "http://" + username + ".tiddlyhost.com/";
|
||||
}
|
||||
// Assemble the header
|
||||
var boundary = "---------------------------" + "AaB03x";
|
||||
|
||||
@@ -74,9 +74,8 @@ exports.startup = function() {
|
||||
$tw.rootWidget.addEventListener("tm-copy-to-clipboard",function(event) {
|
||||
$tw.utils.copyToClipboard(event.param,{
|
||||
successNotification: event.paramObject && event.paramObject.successNotification,
|
||||
failureNotification: event.paramObject && event.paramObject.failureNotification,
|
||||
plainText: event.paramObject && event.paramObject.plainText
|
||||
},event.paramObject && event.paramObject.type);
|
||||
failureNotification: event.paramObject && event.paramObject.failureNotification
|
||||
});
|
||||
});
|
||||
// Install the tm-focus-selector message
|
||||
$tw.rootWidget.addEventListener("tm-focus-selector",function(event) {
|
||||
|
||||
@@ -265,10 +265,9 @@ exports.copyStyles = function(srcDomNode,dstDomNode) {
|
||||
/*
|
||||
Copy plain text to the clipboard on browsers that support it
|
||||
*/
|
||||
exports.copyToClipboard = function(text,options,type) {
|
||||
var text = text || "";
|
||||
var options = options || {};
|
||||
var type = type || "text/plain";
|
||||
exports.copyToClipboard = function(text,options) {
|
||||
options = options || {};
|
||||
text = text || "";
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.style.position = "fixed";
|
||||
textArea.style.top = 0;
|
||||
@@ -281,16 +280,10 @@ exports.copyToClipboard = function(text,options,type) {
|
||||
textArea.style.outline = "none";
|
||||
textArea.style.boxShadow = "none";
|
||||
textArea.style.background = "transparent";
|
||||
textArea.value = text;
|
||||
document.body.appendChild(textArea);
|
||||
textArea.select();
|
||||
textArea.setSelectionRange(0,text.length);
|
||||
textArea.addEventListener("copy",function(event) {
|
||||
event.preventDefault();
|
||||
if (options.plainText) {
|
||||
event.clipboardData.setData("text/plain",options.plainText);
|
||||
}
|
||||
event.clipboardData.setData(type,text);
|
||||
});
|
||||
var succeeded = false;
|
||||
try {
|
||||
succeeded = document.execCommand("copy");
|
||||
|
||||
@@ -143,6 +143,7 @@ Modal.prototype.display = function(title,options) {
|
||||
link.setAttribute("href",tiddler.fields.help);
|
||||
link.setAttribute("target","_blank");
|
||||
link.setAttribute("rel","noopener noreferrer");
|
||||
link.setAttribute("class","tc-tiddlylink-external");
|
||||
link.appendChild(this.srcDocument.createTextNode("Help"));
|
||||
modalFooterHelp.appendChild(link);
|
||||
modalFooterHelp.style.float = "left";
|
||||
|
||||
@@ -519,36 +519,3 @@ ListJoinWidget.prototype.render = function() {}
|
||||
ListJoinWidget.prototype.refresh = function() { return false; }
|
||||
|
||||
exports["list-join"] = ListJoinWidget;
|
||||
|
||||
/*
|
||||
Make <$list-template> and <$list-empty> widgets that do nothing
|
||||
*/
|
||||
var ListTemplateWidget = function(parseTreeNode,options) {
|
||||
// Main initialisation inherited from widget.js
|
||||
this.initialise(parseTreeNode,options);
|
||||
};
|
||||
ListTemplateWidget.prototype = new Widget();
|
||||
ListTemplateWidget.prototype.render = function() {}
|
||||
ListTemplateWidget.prototype.refresh = function() { return false; }
|
||||
|
||||
exports["list-template"] = ListTemplateWidget;
|
||||
|
||||
var ListEmptyWidget = function(parseTreeNode,options) {
|
||||
// Main initialisation inherited from widget.js
|
||||
this.initialise(parseTreeNode,options);
|
||||
};
|
||||
ListEmptyWidget.prototype = new Widget();
|
||||
ListEmptyWidget.prototype.render = function() {}
|
||||
ListEmptyWidget.prototype.refresh = function() { return false; }
|
||||
|
||||
exports["list-empty"] = ListEmptyWidget;
|
||||
|
||||
var ListJoinWidget = function(parseTreeNode,options) {
|
||||
// Main initialisation inherited from widget.js
|
||||
this.initialise(parseTreeNode,options);
|
||||
};
|
||||
ListJoinWidget.prototype = new Widget();
|
||||
ListJoinWidget.prototype.render = function() {}
|
||||
ListJoinWidget.prototype.refresh = function() { return false; }
|
||||
|
||||
exports["list-join"] = ListJoinWidget;
|
||||
|
||||
@@ -1173,7 +1173,7 @@ exports.getSubstitutedText = function(text,widget,options) {
|
||||
output = $tw.utils.replaceString(output,new RegExp("\\$" + $tw.utils.escapeRegExp(substitute.name) + "\\$","mg"),substitute.value);
|
||||
});
|
||||
// Substitute any variable references with their values
|
||||
return output.replace(/\$\(([^\)\$]+)\)\$/g, function(match,varname) {
|
||||
return output.replace(/\$\((.+?)\)\$/g, function(match,varname) {
|
||||
return widget.getVariable(varname,{defaultValue: ""})
|
||||
});
|
||||
};
|
||||
|
||||
@@ -18,7 +18,7 @@ code-background: #f7f7f9
|
||||
code-border: #e1e1e8
|
||||
code-foreground: #dd1144
|
||||
dirty-indicator: #ff0000
|
||||
download-background: #66cccc
|
||||
download-background: #3aafaf
|
||||
download-foreground: <<colour background>>
|
||||
dragger-background: <<colour foreground>>
|
||||
dragger-foreground: <<colour background>>
|
||||
@@ -26,7 +26,7 @@ dropdown-background: <<colour background>>
|
||||
dropdown-border: <<colour muted-foreground>>
|
||||
dropdown-tab-background-selected: #fff
|
||||
dropdown-tab-background: #ececec
|
||||
dropzone-background: rgba(0,200,0,0.7)
|
||||
dropzone-background: #00d900
|
||||
external-link-background-hover: inherit
|
||||
external-link-background-visited: inherit
|
||||
external-link-background: inherit
|
||||
@@ -52,26 +52,30 @@ notification-border: #999999
|
||||
page-background: #ffffff
|
||||
pre-background: #f5f5f5
|
||||
pre-border: #cccccc
|
||||
primary: #7897f3
|
||||
primary: #6387f1
|
||||
select-tag-background:
|
||||
select-tag-foreground:
|
||||
sidebar-button-foreground: <<colour foreground>>
|
||||
sidebar-controls-foreground-hover: #000000
|
||||
sidebar-controls-foreground: #ccc
|
||||
sidebar-foreground-shadow: rgba(255,255,255, 0.8)
|
||||
sidebar-controls-foreground: #aaaaaa
|
||||
sidebar-foreground-shadow: #ffffff
|
||||
sidebar-foreground: #acacac
|
||||
sidebar-muted-foreground-hover: #444444
|
||||
sidebar-muted-foreground: #c0c0c0
|
||||
sidebar-muted-foreground: #aaaaaa
|
||||
sidebar-tab-background-selected: #ffffff
|
||||
sidebar-tab-background: <<colour tab-background>>
|
||||
sidebar-tab-border-selected: <<colour tab-border-selected>>
|
||||
sidebar-tab-border: <<colour tab-border>>
|
||||
sidebar-tab-divider: <<colour tab-divider>>
|
||||
sidebar-tab-foreground-selected:
|
||||
sidebar-tab-foreground-selected: <<colour tab-foreground>>
|
||||
sidebar-tab-foreground: <<colour tab-foreground>>
|
||||
sidebar-tiddler-link-foreground-hover: #444444
|
||||
sidebar-tiddler-link-foreground: #7897f3
|
||||
sidebar-tiddler-link-foreground: <<colour primary>>
|
||||
site-title-foreground: <<colour tiddler-title-foreground>>
|
||||
stability-stable: #008000
|
||||
stability-experimental: #c07c00
|
||||
stability-deprecated: #ff0000
|
||||
stability-legacy: #0000ff
|
||||
static-alert-foreground: #aaaaaa
|
||||
tab-background-selected: #ffffff
|
||||
tab-background: #eeeeee
|
||||
@@ -83,10 +87,10 @@ tab-foreground: #666666
|
||||
table-border: #dddddd
|
||||
table-footer-background: #a8a8a8
|
||||
table-header-background: #f0f0f0
|
||||
tag-background: #ffeedd
|
||||
tag-foreground: #000
|
||||
tag-background: #ffd5aa
|
||||
tag-foreground: #000000
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: #eee
|
||||
tiddler-border: #eeeeee
|
||||
tiddler-controls-foreground-hover: #888888
|
||||
tiddler-controls-foreground-selected: #444444
|
||||
tiddler-controls-foreground: #cccccc
|
||||
@@ -97,7 +101,7 @@ tiddler-editor-fields-even: #e0e8e0
|
||||
tiddler-editor-fields-odd: #f0f4f0
|
||||
tiddler-info-background: #f8f8f8
|
||||
tiddler-info-border: #dddddd
|
||||
tiddler-info-tab-background: #f8f8f8
|
||||
tiddler-info-tab-background: <<colour tiddler-info-background>>
|
||||
tiddler-link-background: <<colour background>>
|
||||
tiddler-link-foreground: <<colour primary>>
|
||||
tiddler-subtitle-foreground: #c0c0c0
|
||||
@@ -111,5 +115,6 @@ toolbar-close-button:
|
||||
toolbar-delete-button:
|
||||
toolbar-cancel-button:
|
||||
toolbar-done-button:
|
||||
untagged-background: #999999
|
||||
untagged-background: #cccccc
|
||||
very-muted-foreground: #888888
|
||||
network-activity-foreground: <<colour primary>>
|
||||
@@ -85,6 +85,7 @@ table-footer-background: #a8a8a8
|
||||
table-header-background: #f0f0f0
|
||||
tag-background: #d5ad34
|
||||
tag-foreground: #ffffff
|
||||
testcase-accent-level-1: #b1b3e3
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: <<colour background>>
|
||||
tiddler-controls-foreground-hover: #888888
|
||||
|
||||
@@ -5,11 +5,11 @@ description: High contrast and unambiguous (dark version)
|
||||
tags: $:/tags/Palette
|
||||
type: application/x-tiddler-dictionary
|
||||
|
||||
alert-background: #f00
|
||||
alert-background: #ff0000
|
||||
alert-border: <<colour background>>
|
||||
alert-highlight: <<colour foreground>>
|
||||
alert-muted-foreground: #800
|
||||
background: #000
|
||||
alert-muted-foreground: #880000
|
||||
background: #000000
|
||||
blockquote-bar: <<colour muted-foreground>>
|
||||
button-background: <<colour background>>
|
||||
button-foreground: <<colour foreground>>
|
||||
@@ -17,24 +17,24 @@ button-border: <<colour foreground>>
|
||||
code-background: <<colour background>>
|
||||
code-border: <<colour foreground>>
|
||||
code-foreground: <<colour foreground>>
|
||||
dirty-indicator: #f00
|
||||
download-background: #080
|
||||
dirty-indicator: #ff0000
|
||||
download-background: #48ff48
|
||||
download-foreground: <<colour background>>
|
||||
dragger-background: <<colour foreground>>
|
||||
dragger-foreground: <<colour background>>
|
||||
dropdown-background: <<colour background>>
|
||||
dropdown-border: <<colour muted-foreground>>
|
||||
dropdown-tab-background-selected: <<colour foreground>>
|
||||
dropdown-tab-background: <<colour foreground>>
|
||||
dropzone-background: rgba(0,200,0,0.7)
|
||||
dropdown-tab-background-selected: #868686
|
||||
dropdown-tab-background: #515151
|
||||
dropzone-background: #1aff1a
|
||||
external-link-background-hover: inherit
|
||||
external-link-background-visited: inherit
|
||||
external-link-background: inherit
|
||||
external-link-foreground-hover: inherit
|
||||
external-link-foreground-visited: #00a
|
||||
external-link-foreground: #00e
|
||||
external-link-foreground-visited: #5353ff
|
||||
external-link-foreground: #9595ff
|
||||
footnote-target-background: #4c4c4c
|
||||
foreground: #fff
|
||||
foreground: #ffffff
|
||||
highlight-background: #ffff00
|
||||
highlight-foreground: #000000
|
||||
message-background: <<colour foreground>>
|
||||
@@ -52,11 +52,11 @@ notification-border: <<colour foreground>>
|
||||
page-background: <<colour background>>
|
||||
pre-background: <<colour background>>
|
||||
pre-border: <<colour foreground>>
|
||||
primary: #00f
|
||||
primary: #8a8aff
|
||||
select-tag-background:
|
||||
select-tag-foreground:
|
||||
sidebar-button-foreground: <<colour foreground>>
|
||||
sidebar-controls-foreground-hover: <<colour background>>
|
||||
sidebar-controls-foreground-hover: #ffff00
|
||||
sidebar-controls-foreground: <<colour foreground>>
|
||||
sidebar-foreground-shadow: rgba(0,0,0, 0)
|
||||
sidebar-foreground: <<colour foreground>>
|
||||
@@ -72,6 +72,10 @@ sidebar-tab-foreground: <<colour tab-foreground>>
|
||||
sidebar-tiddler-link-foreground-hover: <<colour foreground>>
|
||||
sidebar-tiddler-link-foreground: <<colour primary>>
|
||||
site-title-foreground: <<colour tiddler-title-foreground>>
|
||||
stability-stable: #00f400
|
||||
stability-experimental: #ffaf1c
|
||||
stability-deprecated: #ff2b2b
|
||||
stability-legacy: #ceceff
|
||||
static-alert-foreground: #aaaaaa
|
||||
tab-background-selected: <<colour background>>
|
||||
tab-background: <<colour foreground>>
|
||||
@@ -81,14 +85,15 @@ tab-divider: <<colour foreground>>
|
||||
tab-foreground-selected: <<colour foreground>>
|
||||
tab-foreground: <<colour background>>
|
||||
table-border: #dddddd
|
||||
table-footer-background: #a8a8a8
|
||||
table-header-background: #f0f0f0
|
||||
tag-background: #fff
|
||||
tag-foreground: #000
|
||||
table-footer-background: #444444
|
||||
table-header-background: #444444
|
||||
tag-background: #ffffff
|
||||
tag-foreground: #000000
|
||||
testcase-accent-level-1: #144a8c
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: <<colour foreground>>
|
||||
tiddler-controls-foreground-hover: #ddd
|
||||
tiddler-controls-foreground-selected: #fdd
|
||||
tiddler-controls-foreground-selected: #ae0000
|
||||
tiddler-controls-foreground: <<colour foreground>>
|
||||
tiddler-editor-background: <<colour background>>
|
||||
tiddler-editor-border-image: <<colour foreground>>
|
||||
@@ -102,14 +107,15 @@ tiddler-link-background: <<colour background>>
|
||||
tiddler-link-foreground: <<colour primary>>
|
||||
tiddler-subtitle-foreground: <<colour foreground>>
|
||||
tiddler-title-foreground: <<colour foreground>>
|
||||
toolbar-new-button:
|
||||
toolbar-options-button:
|
||||
toolbar-save-button:
|
||||
toolbar-info-button:
|
||||
toolbar-edit-button:
|
||||
toolbar-close-button:
|
||||
toolbar-delete-button:
|
||||
toolbar-cancel-button:
|
||||
toolbar-done-button:
|
||||
toolbar-new-button:
|
||||
toolbar-options-button:
|
||||
toolbar-save-button:
|
||||
toolbar-info-button:
|
||||
toolbar-edit-button:
|
||||
toolbar-close-button:
|
||||
toolbar-delete-button:
|
||||
toolbar-cancel-button:
|
||||
toolbar-done-button:
|
||||
untagged-background: <<colour foreground>>
|
||||
very-muted-foreground: #888888
|
||||
network-activity-foreground: <<colour primary>>
|
||||
@@ -5,7 +5,7 @@ description: High contrast and unambiguous (light version)
|
||||
tags: $:/tags/Palette
|
||||
type: application/x-tiddler-dictionary
|
||||
|
||||
alert-background: #f00
|
||||
alert-background: #ff4a4a
|
||||
alert-border: <<colour background>>
|
||||
alert-highlight: <<colour foreground>>
|
||||
alert-muted-foreground: #800
|
||||
@@ -18,13 +18,13 @@ code-background: <<colour background>>
|
||||
code-border: <<colour foreground>>
|
||||
code-foreground: <<colour foreground>>
|
||||
dirty-indicator: #f00
|
||||
download-background: #080
|
||||
download-background: #008200
|
||||
download-foreground: <<colour background>>
|
||||
dragger-background: <<colour foreground>>
|
||||
dragger-foreground: <<colour background>>
|
||||
dropdown-background: <<colour background>>
|
||||
dropdown-border: <<colour muted-foreground>>
|
||||
dropdown-tab-background-selected: <<colour foreground>>
|
||||
dropdown-tab-background-selected: <<colour background>>
|
||||
dropdown-tab-background: <<colour foreground>>
|
||||
dropzone-background: rgba(0,200,0,0.7)
|
||||
external-link-background-hover: inherit
|
||||
@@ -52,13 +52,13 @@ notification-border: <<colour foreground>>
|
||||
page-background: <<colour background>>
|
||||
pre-background: <<colour background>>
|
||||
pre-border: <<colour foreground>>
|
||||
primary: #00f
|
||||
primary: #0000ff
|
||||
select-tag-background:
|
||||
select-tag-foreground:
|
||||
sidebar-button-foreground: <<colour foreground>>
|
||||
sidebar-controls-foreground-hover: <<colour background>>
|
||||
sidebar-controls-foreground-hover: #606060
|
||||
sidebar-controls-foreground: <<colour foreground>>
|
||||
sidebar-foreground-shadow: rgba(0,0,0, 0)
|
||||
sidebar-foreground-shadow: #000000
|
||||
sidebar-foreground: <<colour foreground>>
|
||||
sidebar-muted-foreground-hover: #444444
|
||||
sidebar-muted-foreground: <<colour foreground>>
|
||||
@@ -72,6 +72,10 @@ sidebar-tab-foreground: <<colour tab-foreground>>
|
||||
sidebar-tiddler-link-foreground-hover: <<colour foreground>>
|
||||
sidebar-tiddler-link-foreground: <<colour primary>>
|
||||
site-title-foreground: <<colour tiddler-title-foreground>>
|
||||
stability-deprecated: #ff0000
|
||||
stability-experimental: #b37400
|
||||
stability-legacy: #000075
|
||||
stability-stable: #008000
|
||||
static-alert-foreground: #aaaaaa
|
||||
tab-background-selected: <<colour background>>
|
||||
tab-background: <<colour foreground>>
|
||||
@@ -88,7 +92,7 @@ tag-foreground: #fff
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: <<colour foreground>>
|
||||
tiddler-controls-foreground-hover: #ddd
|
||||
tiddler-controls-foreground-selected: #fdd
|
||||
tiddler-controls-foreground-selected: #c5abf3
|
||||
tiddler-controls-foreground: <<colour foreground>>
|
||||
tiddler-editor-background: <<colour background>>
|
||||
tiddler-editor-border-image: <<colour foreground>>
|
||||
@@ -113,3 +117,4 @@ toolbar-cancel-button:
|
||||
toolbar-done-button:
|
||||
untagged-background: <<colour foreground>>
|
||||
very-muted-foreground: #888888
|
||||
network-activity-foreground: <<colour primary>>
|
||||
@@ -5,30 +5,30 @@ name: Cupertino Dark
|
||||
description: A macOS inspired dark palette
|
||||
type: application/x-tiddler-dictionary
|
||||
|
||||
alert-background: #FF453A
|
||||
alert-border: #FF453A
|
||||
alert-background: #ff4b42
|
||||
alert-border: #950700
|
||||
alert-highlight: #FFD60A
|
||||
alert-muted-foreground: <<colour muted-foreground>>
|
||||
alert-muted-foreground: #323234
|
||||
background: #282828
|
||||
blockquote-bar: <<colour page-background>>
|
||||
blockquote-bar: #8d8d8d
|
||||
button-foreground: <<colour foreground>>
|
||||
code-background: <<colour pre-background>>
|
||||
code-border: <<colour pre-border>>
|
||||
code-foreground: rgba(255, 255, 255, 0.54)
|
||||
code-foreground: #c7c7c7
|
||||
dirty-indicator: #FF453A
|
||||
download-background: <<colour primary>>
|
||||
download-foreground: <<colour foreground>>
|
||||
download-foreground: <<colour background>>
|
||||
dragger-background: <<colour foreground>>
|
||||
dragger-foreground: <<colour background>>
|
||||
dropdown-background: <<colour tiddler-info-background>>
|
||||
dropdown-border: <<colour dropdown-background>>
|
||||
dropdown-tab-background-selected: #3F638B
|
||||
dropdown-tab-background: #323232
|
||||
dropdown-tab-background: #707070
|
||||
dropzone-background: #30D158
|
||||
external-link-background-hover: transparent
|
||||
external-link-background-visited: transparent
|
||||
external-link-background: transparent
|
||||
external-link-foreground-hover:
|
||||
external-link-foreground-hover: #9511d5
|
||||
external-link-foreground-visited: #BF5AF2
|
||||
external-link-foreground: #32D74B
|
||||
footnote-target-background: #747474
|
||||
@@ -60,31 +60,36 @@ sidebar-controls-foreground-hover: #FF9F0A
|
||||
sidebar-controls-foreground: #8E8E93
|
||||
sidebar-foreground-shadow: transparent
|
||||
sidebar-foreground: rgba(255, 255, 255, 0.54)
|
||||
sidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)
|
||||
sidebar-muted-foreground: rgba(255, 255, 255, 0.38)
|
||||
sidebar-muted-foreground-hover: #acacac
|
||||
sidebar-muted-foreground: #787878
|
||||
sidebar-tab-background-selected: #3F638B
|
||||
sidebar-tab-background: <<colour background>>
|
||||
sidebar-tab-border-selected: <<colour background>>
|
||||
sidebar-tab-border: <<colour background>>
|
||||
sidebar-tab-divider: <<colour background>>
|
||||
sidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)
|
||||
sidebar-tab-foreground: rgba(255, 255, 255, 0.54)
|
||||
sidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)
|
||||
sidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)
|
||||
sidebar-tab-border-selected: #313131
|
||||
sidebar-tab-border: #404040
|
||||
sidebar-tab-divider: #282828
|
||||
sidebar-tab-foreground-selected: #d2d2d2
|
||||
sidebar-tab-foreground: #d2d2d2
|
||||
sidebar-tiddler-link-foreground-hover: #535353
|
||||
sidebar-tiddler-link-foreground: #949494
|
||||
site-title-foreground: #ffffff
|
||||
stability-stable: #009f00
|
||||
stability-experimental: #c07c00
|
||||
stability-deprecated: #ff0000
|
||||
stability-legacy: #6c6cff
|
||||
static-alert-foreground: #B4B4B4
|
||||
tab-background-selected: #3F638B
|
||||
tab-background: <<colour page-background>>
|
||||
tab-border-selected: <<colour page-background>>
|
||||
tab-border: <<colour page-background>>
|
||||
tab-border: #4a4a4a
|
||||
tab-divider: <<colour page-background>>
|
||||
tab-foreground-selected: rgba(255, 255, 255, 0.87)
|
||||
tab-foreground: rgba(255, 255, 255, 0.54)
|
||||
tab-foreground-selected: #ffffff
|
||||
tab-foreground: #adadad
|
||||
table-border: #464646
|
||||
table-footer-background: <<colour tiddler-editor-fields-odd>>
|
||||
table-header-background: <<colour tiddler-editor-fields-even>>
|
||||
table-footer-background: #7f7f7f
|
||||
table-header-background: <<colour table-border>>
|
||||
tag-background: #48484A
|
||||
tag-foreground: #323232
|
||||
testcase-accent-level-1: #345173
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: transparent
|
||||
tiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>
|
||||
@@ -92,9 +97,9 @@ tiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover
|
||||
tiddler-controls-foreground: #48484A
|
||||
tiddler-editor-background: <<colour background>>
|
||||
tiddler-editor-border-image:
|
||||
tiddler-editor-border: rgba(255, 255, 255, 0.08)
|
||||
tiddler-editor-fields-even: rgba(255, 255, 255, 0.1)
|
||||
tiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)
|
||||
tiddler-editor-border: #444444
|
||||
tiddler-editor-fields-even: #1f1f1f
|
||||
tiddler-editor-fields-odd: #464646
|
||||
tiddler-info-background: #1E1E1E
|
||||
tiddler-info-border: #1E1E1E
|
||||
tiddler-info-tab-background: #3F638B
|
||||
@@ -111,8 +116,8 @@ toolbar-close-button:
|
||||
toolbar-delete-button:
|
||||
toolbar-cancel-button:
|
||||
toolbar-done-button:
|
||||
untagged-background: <<colour very-muted-foreground>>
|
||||
very-muted-foreground: #464646
|
||||
untagged-background: #5f5f5f
|
||||
very-muted-foreground: #3f3f3f
|
||||
selection-background: #3F638B
|
||||
selection-foreground: #ffffff
|
||||
wikilist-background: <<colour page-background>>
|
||||
@@ -131,3 +136,4 @@ wikilist-title: <<colour foreground>>
|
||||
wikilist-title-svg: <<colour foreground>>
|
||||
wikilist-toolbar-foreground: <<colour foreground>>
|
||||
wikilist-url: <<colour muted-foreground>>
|
||||
network-activity-foreground: <<colour primary>>
|
||||
@@ -20,7 +20,7 @@ code-background: #f7f7f9
|
||||
code-border: #e1e1e8
|
||||
code-foreground: #dd1144
|
||||
dirty-indicator: #ff0000
|
||||
download-background: #34c734
|
||||
download-background: #30b830
|
||||
download-foreground: <<colour background>>
|
||||
dragger-background: <<colour foreground>>
|
||||
dragger-foreground: <<colour background>>
|
||||
@@ -58,22 +58,26 @@ primary: #5778d8
|
||||
select-tag-background:
|
||||
select-tag-foreground:
|
||||
sidebar-button-foreground: <<colour foreground>>
|
||||
sidebar-controls-foreground-hover: #ccf
|
||||
sidebar-controls-foreground: #fff
|
||||
sidebar-foreground-shadow: rgba(0,0,0, 0.5)
|
||||
sidebar-foreground: #fff
|
||||
sidebar-muted-foreground-hover: #444444
|
||||
sidebar-muted-foreground: #eee
|
||||
sidebar-tab-background-selected: rgba(255,255,255, 0.8)
|
||||
sidebar-tab-background: rgba(255,255,255, 0.4)
|
||||
sidebar-controls-foreground-hover: #a6a6ff
|
||||
sidebar-controls-foreground: #eeeeee
|
||||
sidebar-foreground-shadow: transparent
|
||||
sidebar-foreground: #eeeeee
|
||||
sidebar-muted-foreground-hover: #999999
|
||||
sidebar-muted-foreground: #eeeeee
|
||||
sidebar-tab-background-selected: <<colour page-background>>
|
||||
sidebar-tab-background: #e0e0e0
|
||||
sidebar-tab-border-selected: <<colour tab-border-selected>>
|
||||
sidebar-tab-border: <<colour tab-border>>
|
||||
sidebar-tab-divider: rgba(255,255,255, 0.2)
|
||||
sidebar-tab-foreground-selected:
|
||||
sidebar-tab-divider: #e4e4e4
|
||||
sidebar-tab-foreground-selected: #ddddff
|
||||
sidebar-tab-foreground: <<colour tab-foreground>>
|
||||
sidebar-tiddler-link-foreground-hover: #aaf
|
||||
sidebar-tiddler-link-foreground: #ddf
|
||||
site-title-foreground: #fff
|
||||
sidebar-tiddler-link-foreground-hover: #aaaaff
|
||||
sidebar-tiddler-link-foreground: #ddddff
|
||||
site-title-foreground: #ffffff
|
||||
stability-stable: #008000
|
||||
stability-experimental: #c07c00
|
||||
stability-deprecated: #ff0000
|
||||
stability-legacy: #0000ff
|
||||
static-alert-foreground: #aaaaaa
|
||||
tab-background-selected: #ffffff
|
||||
tab-background: #d8d8d8
|
||||
@@ -90,7 +94,7 @@ tag-foreground: #ffffff
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: <<colour background>>
|
||||
tiddler-controls-foreground-hover: #888888
|
||||
tiddler-controls-foreground-selected: #444444
|
||||
tiddler-controls-foreground-selected: #6a6aff
|
||||
tiddler-controls-foreground: #cccccc
|
||||
tiddler-editor-background: #f8f8f8
|
||||
tiddler-editor-border-image: #ffffff
|
||||
@@ -115,3 +119,4 @@ toolbar-cancel-button:
|
||||
toolbar-done-button:
|
||||
untagged-background: #999999
|
||||
very-muted-foreground: #888888
|
||||
network-activity-foreground: #11ff23
|
||||
@@ -22,9 +22,9 @@ diff-equal-foreground: <<colour foreground>>
|
||||
diff-insert-background: #91c093
|
||||
diff-insert-foreground: <<colour foreground>>
|
||||
diff-invisible-background:
|
||||
diff-invisible-foreground: <<colour muted-foreground>>
|
||||
diff-invisible-foreground: #d3d2cb
|
||||
dirty-indicator: #ad3434
|
||||
download-background: #6ca16c
|
||||
download-background: #5eae62
|
||||
download-foreground: <<colour background>>
|
||||
dragger-background: <<colour foreground>>
|
||||
dragger-foreground: <<colour background>>
|
||||
@@ -32,14 +32,13 @@ dropdown-background: <<colour background>>
|
||||
dropdown-border: <<colour muted-foreground>>
|
||||
dropdown-tab-background-selected: #E9E0C7
|
||||
dropdown-tab-background: #BAB29C
|
||||
dropzone-background: rgba(0,200,0,0.7)
|
||||
dropzone-background: #00c600
|
||||
external-link-background-hover: inherit
|
||||
external-link-background-visited: inherit
|
||||
external-link-background: inherit
|
||||
external-link-foreground-hover: inherit
|
||||
external-link-foreground-hover: #7474ba
|
||||
external-link-foreground-visited: #313163
|
||||
external-link-foreground: #555592
|
||||
footnote-target-background: #fff7d9
|
||||
foreground: #2D2A23
|
||||
highlight-background: #ffff00
|
||||
highlight-foreground: #000000
|
||||
@@ -71,7 +70,7 @@ sidebar-controls-foreground: #867F69
|
||||
sidebar-foreground-shadow: transparent
|
||||
sidebar-foreground: #867F69
|
||||
sidebar-muted-foreground-hover: #706A58
|
||||
sidebar-muted-foreground: #B3A98C
|
||||
sidebar-muted-foreground: #aba081
|
||||
sidebar-tab-background-selected: #e0d3af
|
||||
sidebar-tab-background: #A6A193
|
||||
sidebar-tab-border-selected: #C3BAA1
|
||||
@@ -82,6 +81,10 @@ sidebar-tab-foreground: #2D2A23
|
||||
sidebar-tiddler-link-foreground-hover: #433F35
|
||||
sidebar-tiddler-link-foreground: #706A58
|
||||
site-title-foreground: <<colour tiddler-title-foreground>>
|
||||
stability-deprecated: #dc322f
|
||||
stability-experimental: #b58900
|
||||
stability-legacy: #268bd2
|
||||
stability-stable: #859900
|
||||
static-alert-foreground: #A6A193
|
||||
tab-background-selected: #E9E0C7
|
||||
tab-background: #A6A193
|
||||
@@ -95,6 +98,7 @@ table-footer-background: #8A8885
|
||||
table-header-background: #B0AA98
|
||||
tag-background: #706A58
|
||||
tag-foreground: #E3D7B7
|
||||
testcase-accent-level-1: #b3adc9
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: <<colour background>>
|
||||
tiddler-controls-foreground-hover: #9D947B
|
||||
@@ -140,3 +144,4 @@ wikilist-toolbar-foreground: #2D2A23
|
||||
wikilist-droplink-dragover: rgba(255,192,192,0.5)
|
||||
wikilist-button-background: #A6A193
|
||||
wikilist-button-foreground: #161512
|
||||
network-activity-foreground: <<colour primary>>
|
||||
@@ -9,13 +9,13 @@ license: https://github.com/morhetz/gruvbox
|
||||
alert-background: #cc241d
|
||||
alert-border: #cc241d
|
||||
alert-highlight: #d79921
|
||||
alert-muted-foreground: #504945
|
||||
alert-muted-foreground: #272321
|
||||
background: #3c3836
|
||||
blockquote-bar: <<colour muted-foreground>>
|
||||
button-foreground: <<colour foreground>>
|
||||
code-background: #504945
|
||||
code-border: #504945
|
||||
code-foreground: #fb4934
|
||||
code-foreground: #fc5e4b
|
||||
diff-delete-background: #fb4934
|
||||
diff-delete-foreground: <<colour foreground>>
|
||||
diff-equal-background:
|
||||
@@ -25,7 +25,7 @@ diff-insert-foreground: <<colour background>>
|
||||
diff-invisible-background: #ffff97
|
||||
diff-invisible-foreground: #444347
|
||||
dirty-indicator: #fb4934
|
||||
download-background: #b8bb26
|
||||
download-background: #1daf24
|
||||
download-foreground: <<colour background>>
|
||||
dragger-background: <<colour foreground>>
|
||||
dragger-foreground: <<colour background>>
|
||||
@@ -46,52 +46,53 @@ highlight-background: #ffff79
|
||||
highlight-foreground: #000000
|
||||
menubar-background: #504945
|
||||
menubar-foreground: <<colour foreground>>
|
||||
message-background: #83a598
|
||||
message-background: #b4c9c1
|
||||
message-border: #83a598
|
||||
message-foreground: #3c3836
|
||||
modal-backdrop: <<colour foreground>>
|
||||
modal-backdrop: #625a57
|
||||
modal-background: <<colour background>>
|
||||
modal-border: #504945
|
||||
modal-footer-background: #3c3836
|
||||
modal-footer-border: #3c3836
|
||||
modal-header-border: #3c3836
|
||||
muted-foreground: #d5c4a1
|
||||
network-activity-foreground: <<colour primary>>
|
||||
notification-background: <<colour primary>>
|
||||
notification-border: <<colour primary>>
|
||||
page-background: #282828
|
||||
pre-background: #504945
|
||||
pre-border: #504945
|
||||
primary: #d79921
|
||||
primary: #da9921
|
||||
select-tag-background: #665c54
|
||||
select-tag-foreground: <<colour foreground>>
|
||||
selection-background: #458588
|
||||
selection-foreground: <<colour foreground>>
|
||||
sidebar-button-foreground: <<colour foreground>>
|
||||
sidebar-controls-foreground-hover: #7c6f64
|
||||
sidebar-controls-foreground: #504945
|
||||
sidebar-controls-foreground-hover: #e3e0dd
|
||||
sidebar-controls-foreground: #978b84
|
||||
sidebar-foreground-shadow: transparent
|
||||
sidebar-foreground: #fbf1c7
|
||||
sidebar-muted-foreground-hover: #7c6f64
|
||||
sidebar-muted-foreground: #504945
|
||||
sidebar-muted-foreground-hover: <<colour sidebar-controls-foreground-hover>>
|
||||
sidebar-muted-foreground: <<colour sidebar-controls-foreground>>
|
||||
sidebar-tab-background-selected: #bdae93
|
||||
sidebar-tab-background: #3c3836
|
||||
sidebar-tab-border-selected: <<colour tab-border-selected>>
|
||||
sidebar-tab-border: #bdae93
|
||||
sidebar-tab-divider: <<colour page-background>>
|
||||
sidebar-tab-foreground-selected: #282828
|
||||
sidebar-tab-foreground-selected: <<colour page-background>>
|
||||
sidebar-tab-foreground: <<colour tab-foreground>>
|
||||
sidebar-tiddler-link-foreground-hover: #458588
|
||||
sidebar-tiddler-link-foreground: #98971a
|
||||
site-title-foreground: <<colour tiddler-title-foreground>>
|
||||
stability-deprecated: #cc241d
|
||||
stability-experimental: #d79921
|
||||
stability-legacy: #458588
|
||||
stability-stable: #98971a
|
||||
stability-experimental: #b37d1c
|
||||
stability-legacy: #529ca0
|
||||
stability-stable: #649618
|
||||
static-alert-foreground: #B48EAD
|
||||
tab-background-selected: #ebdbb2
|
||||
tab-background: #665c54
|
||||
tab-border-selected: #665c54
|
||||
tab-border: #665c54
|
||||
tab-border-selected: <<colour tab-background-selected>>
|
||||
tab-border: #82746a
|
||||
tab-divider: #bdae93
|
||||
tab-foreground-selected: #282828
|
||||
tab-foreground: #ebdbb2
|
||||
@@ -100,6 +101,7 @@ table-footer-background: #665c54
|
||||
table-header-background: #504945
|
||||
tag-background: #d3869b
|
||||
tag-foreground: #282828
|
||||
testcase-accent-level-1: #456d88
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: <<colour background>>
|
||||
tiddler-controls-foreground-hover: #7c6f64
|
||||
@@ -126,7 +128,7 @@ toolbar-close-button:
|
||||
toolbar-delete-button:
|
||||
toolbar-cancel-button:
|
||||
toolbar-done-button:
|
||||
untagged-background: #504945
|
||||
untagged-background: #887b75
|
||||
very-muted-foreground: #bdae93
|
||||
wikilist-background: <<colour page-background>>
|
||||
wikilist-button-background: #acacac
|
||||
|
||||
@@ -7,15 +7,15 @@ type: application/x-tiddler-dictionary
|
||||
license: MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md
|
||||
|
||||
alert-background: #D08770
|
||||
alert-border: #D08770
|
||||
alert-highlight: #B48EAD
|
||||
alert-muted-foreground: #4C566A
|
||||
alert-border: <<colour alert-background>>
|
||||
alert-highlight: #a3436f
|
||||
alert-muted-foreground: #495367
|
||||
background: #3b4252
|
||||
blockquote-bar: <<colour muted-foreground>>
|
||||
button-foreground: <<colour foreground>>
|
||||
code-background: #2E3440
|
||||
code-border: #2E3440
|
||||
code-foreground: #BF616A
|
||||
code-foreground: #c7747c
|
||||
diff-delete-background: #BF616A
|
||||
diff-delete-foreground: <<colour foreground>>
|
||||
diff-equal-background:
|
||||
@@ -48,31 +48,32 @@ menubar-background: #2E3440
|
||||
menubar-foreground: #d8dee9
|
||||
message-background: #2E3440
|
||||
message-border: #2E3440
|
||||
message-foreground: #547599
|
||||
modal-backdrop: <<colour foreground>>
|
||||
message-foreground: #6485aa
|
||||
modal-backdrop: #435678
|
||||
modal-background: <<colour background>>
|
||||
modal-border: #3b4252
|
||||
modal-footer-background: #3b4252
|
||||
modal-footer-border: #3b4252
|
||||
modal-header-border: #3b4252
|
||||
muted-foreground: #4C566A
|
||||
muted-foreground: #687693
|
||||
network-activity-foreground: <<colour primary>>
|
||||
notification-background: <<colour primary>>
|
||||
notification-border: #EBCB8B
|
||||
page-background: #2e3440
|
||||
pre-background: #2E3440
|
||||
pre-border: #2E3440
|
||||
primary: #5E81AC
|
||||
primary: #7b98bb
|
||||
select-tag-background: #3b4252
|
||||
select-tag-foreground: <<colour foreground>>
|
||||
selection-background: #5E81AC
|
||||
selection-background: #52749e
|
||||
selection-foreground: <<colour foreground>>
|
||||
sidebar-button-foreground: <<colour foreground>>
|
||||
sidebar-controls-foreground-hover: #D8DEE9
|
||||
sidebar-controls-foreground: #4C566A
|
||||
sidebar-controls-foreground: #5e6a84
|
||||
sidebar-foreground-shadow: transparent
|
||||
sidebar-foreground: #D8DEE9
|
||||
sidebar-muted-foreground-hover: #4C566A
|
||||
sidebar-muted-foreground: #4C566A
|
||||
sidebar-muted-foreground-hover: #9fa8bb
|
||||
sidebar-muted-foreground: #6c7b97
|
||||
sidebar-tab-background-selected: #ECEFF4
|
||||
sidebar-tab-background: #4C566A
|
||||
sidebar-tab-border-selected: <<colour tab-border-selected>>
|
||||
@@ -83,39 +84,40 @@ sidebar-tab-foreground: <<colour tab-foreground>>
|
||||
sidebar-tiddler-link-foreground-hover: #A3BE8C
|
||||
sidebar-tiddler-link-foreground: #81A1C1
|
||||
site-title-foreground: <<colour tiddler-title-foreground>>
|
||||
stability-deprecated: #bf616a
|
||||
stability-experimental: #d08770
|
||||
stability-legacy: #88c0d0
|
||||
stability-stable: #a3be8c
|
||||
stability-deprecated: #ff595e
|
||||
stability-experimental: #f29d00
|
||||
stability-legacy: #2ddbca
|
||||
stability-stable: #04ff04
|
||||
static-alert-foreground: #B48EAD
|
||||
tab-background-selected: #ECEFF4
|
||||
tab-background: #4C566A
|
||||
tab-border-selected: #4C566A
|
||||
tab-border: #4C566A
|
||||
tab-border: #5c6883
|
||||
tab-divider: #4C566A
|
||||
tab-foreground-selected: #4C566A
|
||||
tab-foreground-selected: #6c7a97
|
||||
tab-foreground: #D8DEE9
|
||||
table-border: #4C566A
|
||||
table-footer-background: #2e3440
|
||||
table-header-background: #2e3440
|
||||
tag-background: #A3BE8C
|
||||
tag-foreground: #4C566A
|
||||
testcase-accent-level-1: #455e7d
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: <<colour background>>
|
||||
tiddler-controls-foreground-hover:
|
||||
tiddler-controls-foreground-selected: #EBCB8B
|
||||
tiddler-controls-foreground: #4C566A
|
||||
tiddler-controls-foreground: #5e6a84
|
||||
tiddler-editor-background: #2e3440
|
||||
tiddler-editor-border-image: #2e3440
|
||||
tiddler-editor-border: #3b4252
|
||||
tiddler-editor-border: #232732
|
||||
tiddler-editor-fields-even: #2e3440
|
||||
tiddler-editor-fields-odd: #2e3440
|
||||
tiddler-editor-fields-odd: #424a5b
|
||||
tiddler-info-background: #2e3440
|
||||
tiddler-info-border: #2e3440
|
||||
tiddler-info-tab-background: #2e3440
|
||||
tiddler-link-background: <<colour background>>
|
||||
tiddler-link-foreground: <<colour primary>>
|
||||
tiddler-subtitle-foreground: #4C566A
|
||||
tiddler-subtitle-foreground: #5c6881
|
||||
tiddler-title-foreground: #81A1C1
|
||||
toolbar-new-button:
|
||||
toolbar-options-button:
|
||||
@@ -138,4 +140,4 @@ wikilist-button-open-hover: #A3BE8C
|
||||
wikilist-button-reveal: #81A1C1
|
||||
wikilist-button-reveal-hover: #81A1C1
|
||||
wikilist-button-remove: #B48EAD
|
||||
wikilist-button-remove-hover: #B48EAD
|
||||
wikilist-button-remove-hover: #B48EAD
|
||||
@@ -11,7 +11,7 @@ alert-highlight: #881122
|
||||
alert-muted-foreground: #b99e2f
|
||||
background: #ffffff
|
||||
blockquote-bar: <<colour muted-foreground>>
|
||||
button-background:
|
||||
button-background: #adadad
|
||||
button-foreground:
|
||||
button-border:
|
||||
code-background: #f7f7f9
|
||||
@@ -47,36 +47,41 @@ modal-footer-background: #f5f5f5
|
||||
modal-footer-border: #dddddd
|
||||
modal-header-border: #eeeeee
|
||||
muted-foreground: #999999
|
||||
network-activity-foreground: <<colour primary>>
|
||||
notification-background: #ffffdd
|
||||
notification-border: #999999
|
||||
page-background: #000
|
||||
pre-background: #f5f5f5
|
||||
pre-border: #cccccc
|
||||
primary: #cc0000
|
||||
select-tag-background:
|
||||
select-tag-foreground:
|
||||
select-tag-background: <<colour foreground>>
|
||||
select-tag-foreground: <<colour foreground>>
|
||||
sidebar-button-foreground: <<colour foreground>>
|
||||
sidebar-controls-foreground-hover: #000000
|
||||
sidebar-controls-foreground: #ffffff
|
||||
sidebar-controls-foreground-hover: #797979
|
||||
sidebar-controls-foreground: #cacaca
|
||||
sidebar-foreground-shadow: rgba(255,255,255, 0.0)
|
||||
sidebar-foreground: #acacac
|
||||
sidebar-muted-foreground-hover: #444444
|
||||
sidebar-muted-foreground: #c0c0c0
|
||||
sidebar-tab-background-selected: #000
|
||||
sidebar-tab-background-selected: #000000
|
||||
sidebar-tab-background: <<colour tab-background>>
|
||||
sidebar-tab-border-selected: <<colour tab-border-selected>>
|
||||
sidebar-tab-border-selected: #7c7c7c
|
||||
sidebar-tab-border: <<colour tab-border>>
|
||||
sidebar-tab-divider: <<colour tab-divider>>
|
||||
sidebar-tab-foreground-selected:
|
||||
sidebar-tab-foreground-selected: #ff0909
|
||||
sidebar-tab-foreground: <<colour tab-foreground>>
|
||||
sidebar-tiddler-link-foreground-hover: #ffbb99
|
||||
sidebar-tiddler-link-foreground: #cc0000
|
||||
site-title-foreground: <<colour tiddler-title-foreground>>
|
||||
stability-deprecated: #ff0000
|
||||
stability-experimental: #c07c00
|
||||
stability-legacy: #0000ff
|
||||
stability-stable: #008000
|
||||
static-alert-foreground: #aaaaaa
|
||||
tab-background-selected: #ffffff
|
||||
tab-background: #d8d8d8
|
||||
tab-border-selected: #d8d8d8
|
||||
tab-border: #cccccc
|
||||
tab-border: #bbbbbb
|
||||
tab-divider: #d8d8d8
|
||||
tab-foreground-selected: <<colour tab-foreground>>
|
||||
tab-foreground: #666666
|
||||
@@ -85,6 +90,7 @@ table-footer-background: #a8a8a8
|
||||
table-header-background: #f0f0f0
|
||||
tag-background: #ffbb99
|
||||
tag-foreground: #000
|
||||
testcase-accent-level-1: #9e9eff
|
||||
tiddler-background: <<colour background>>
|
||||
tiddler-border: <<colour background>>
|
||||
tiddler-controls-foreground-hover: #888888
|
||||
@@ -112,4 +118,4 @@ toolbar-delete-button:
|
||||
toolbar-cancel-button:
|
||||
toolbar-done-button:
|
||||
untagged-background: #999999
|
||||
very-muted-foreground: #888888
|
||||
very-muted-foreground: #888888
|
||||
@@ -5,24 +5,24 @@ description: Warm, relaxing earth colours
|
||||
tags: $:/tags/Palette
|
||||
type: application/x-tiddler-dictionary
|
||||
|
||||
: Background Tones
|
||||
# Background Tones
|
||||
|
||||
base03: #002b36
|
||||
base02: #073642
|
||||
|
||||
: Content Tones
|
||||
# Content Tones
|
||||
|
||||
base01: #586e75
|
||||
base00: #657b83
|
||||
base0: #839496
|
||||
base1: #93a1a1
|
||||
|
||||
: Background Tones
|
||||
# Background Tones
|
||||
|
||||
base2: #eee8d5
|
||||
base3: #fdf6e3
|
||||
|
||||
: Accent Colors
|
||||
# Accent Colors
|
||||
|
||||
yellow: #b58900
|
||||
orange: #cb4b16
|
||||
@@ -33,7 +33,7 @@ blue: #268bd2
|
||||
cyan: #2aa198
|
||||
green: #859900
|
||||
|
||||
: Additional Tones (RA)
|
||||
# Additional Tones (RA)
|
||||
|
||||
base10: #c0c4bb
|
||||
violet-muted: #7c81b0
|
||||
@@ -45,9 +45,9 @@ red-hot: #ff2222
|
||||
blue-hot: #2298ee
|
||||
green-hot: #98ee22
|
||||
|
||||
: Palette
|
||||
# Palette
|
||||
|
||||
: Do not use colour macro for background and foreground
|
||||
# Do not use colour macro for background and foreground
|
||||
background: #fdf6e3
|
||||
download-foreground: <<colour background>>
|
||||
dragger-foreground: <<colour background>>
|
||||
@@ -68,24 +68,28 @@ foreground: #657b83
|
||||
sidebar-button-foreground: <<colour foreground>>
|
||||
sidebar-controls-foreground: <<colour foreground>>
|
||||
sidebar-foreground: <<colour foreground>>
|
||||
: base03
|
||||
: base02
|
||||
: base01
|
||||
# base03
|
||||
# base02
|
||||
# base01
|
||||
alert-muted-foreground: <<colour base01>>
|
||||
: base00
|
||||
# base00
|
||||
code-foreground: <<colour base00>>
|
||||
message-foreground: <<colour base00>>
|
||||
tag-foreground: <<colour base00>>
|
||||
: base0
|
||||
# base0
|
||||
sidebar-tiddler-link-foreground: <<colour base0>>
|
||||
: base1
|
||||
# base1
|
||||
muted-foreground: <<colour base1>>
|
||||
blockquote-bar: <<colour muted-foreground>>
|
||||
dropdown-border: <<colour muted-foreground>>
|
||||
sidebar-muted-foreground: <<colour muted-foreground>>
|
||||
tiddler-title-foreground: <<colour muted-foreground>>
|
||||
site-title-foreground: <<colour tiddler-title-foreground>>
|
||||
: base2
|
||||
# base2
|
||||
stability-deprecated: <<colour red>>
|
||||
stability-experimental: <<colour yellow>>
|
||||
stability-legacy: <<colour blue-hot>>
|
||||
stability-stable: <<colour green>>
|
||||
modal-footer-background: <<colour base2>>
|
||||
page-background: <<colour base2>>
|
||||
modal-backdrop: <<colour page-background>>
|
||||
@@ -99,31 +103,31 @@ foreground: #657b83
|
||||
tag-background: <<colour base2>>
|
||||
tiddler-editor-background: <<colour base2>>
|
||||
tiddler-info-background: <<colour base2>>
|
||||
tiddler-info-tab-background: <<colour base2>>
|
||||
tiddler-info-tab-background: <<colour tiddler-info-border>>
|
||||
tab-background: <<colour base2>>
|
||||
dropdown-tab-background: <<colour tab-background>>
|
||||
: base3
|
||||
dropdown-tab-background: <<colour tab-background>>
|
||||
# base3
|
||||
alert-background: <<colour base3>>
|
||||
message-background: <<colour base3>>
|
||||
: yellow
|
||||
: orange
|
||||
: red
|
||||
: magenta
|
||||
# yellow
|
||||
# orange
|
||||
# red
|
||||
# magenta
|
||||
alert-highlight: <<colour magenta>>
|
||||
: violet
|
||||
# violet
|
||||
external-link-foreground: <<colour violet>>
|
||||
: blue
|
||||
: cyan
|
||||
: green
|
||||
: base10
|
||||
tiddler-controls-foreground: <<colour base10>>
|
||||
: violet-muted
|
||||
external-link-foreground-visited: <<colour violet-muted>>
|
||||
: blue-muted
|
||||
primary: <<colour blue-muted>>
|
||||
download-background: <<colour primary>>
|
||||
tiddler-link-foreground: <<colour primary>>
|
||||
|
||||
# blue
|
||||
# cyan
|
||||
# green
|
||||
# base10
|
||||
tiddler-controls-foreground: <<colour base10>>
|
||||
# violet-muted
|
||||
external-link-foreground-visited: <<colour violet-muted>>
|
||||
# blue-muted
|
||||
primary: <<colour blue-muted>>
|
||||
download-background: #5bb83d
|
||||
tiddler-link-foreground: <<colour primary>>
|
||||
alert-border: #b99e2f
|
||||
diff-delete-background: <<colour red>>
|
||||
diff-delete-foreground: <<colour background>>
|
||||
@@ -134,7 +138,7 @@ diff-insert-foreground: <<colour background>>
|
||||
diff-invisible-background: <<colour yellow>>
|
||||
diff-invisible-foreground: <<colour background>>
|
||||
dirty-indicator: #ff0000
|
||||
dropzone-background: rgba(0,200,0,0.7)
|
||||
dropzone-background: #008800
|
||||
external-link-background-hover: inherit
|
||||
external-link-background-visited: inherit
|
||||
external-link-background: inherit
|
||||
@@ -146,14 +150,10 @@ message-border: #cfd6e6
|
||||
modal-border: #999999
|
||||
select-tag-background:
|
||||
select-tag-foreground:
|
||||
sidebar-controls-foreground-hover:
|
||||
sidebar-controls-foreground-hover: #000000
|
||||
sidebar-muted-foreground-hover:
|
||||
sidebar-tab-background: #ded8c5
|
||||
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
|
||||
tab-border: #cccccc
|
||||
modal-footer-border: <<colour tab-border>>
|
||||
@@ -166,6 +166,7 @@ tab-divider: #d8d8d8
|
||||
sidebar-tab-divider: <<colour tab-divider>>
|
||||
table-border: #dddddd
|
||||
table-footer-background: #a8a8a8
|
||||
testcase-accent-level-1: #bec8cc
|
||||
tiddler-controls-foreground-hover: #888888
|
||||
tiddler-controls-foreground-selected: #444444
|
||||
tiddler-editor-border-image: #ffffff
|
||||
@@ -185,3 +186,4 @@ toolbar-cancel-button:
|
||||
toolbar-done-button:
|
||||
untagged-background: #999999
|
||||
very-muted-foreground: #888888
|
||||
network-activity-foreground: <<colour primary>>
|
||||
@@ -40,7 +40,7 @@ external-link-background: inherit
|
||||
external-link-background-hover: inherit
|
||||
external-link-background-visited: inherit
|
||||
external-link-foreground: #268bd2
|
||||
external-link-foreground-hover:
|
||||
external-link-foreground-hover: #1d669c
|
||||
external-link-foreground-visited: #268bd2
|
||||
footnote-target-background: #073642
|
||||
foreground: #839496
|
||||
@@ -56,6 +56,7 @@ modal-footer-background: #073642
|
||||
modal-footer-border: #586e75
|
||||
modal-header-border: #586e75
|
||||
muted-foreground: #93a1a1
|
||||
network-activity-foreground: <<colour primary>>
|
||||
notification-background: #002b36
|
||||
notification-border: #586e75
|
||||
page-background: #073642
|
||||
@@ -81,10 +82,10 @@ sidebar-tab-foreground-selected: #93a1a1
|
||||
sidebar-tiddler-link-foreground: #2aa198
|
||||
sidebar-tiddler-link-foreground-hover: #eee8d5
|
||||
site-title-foreground: #d33682
|
||||
stability-deprecated: #dc322f
|
||||
stability-experimental: #b58900
|
||||
stability-legacy: #268bd2
|
||||
stability-stable: #859900
|
||||
stability-deprecated: #aa1a9f
|
||||
stability-experimental: #806000
|
||||
stability-legacy: #1d669c
|
||||
stability-stable: #00df11
|
||||
static-alert-foreground: #93a1a1
|
||||
tab-background: #073642
|
||||
tab-background-selected: #002b36
|
||||
@@ -98,6 +99,7 @@ table-footer-background: #073642
|
||||
table-header-background: #073642
|
||||
tag-background: #b58900
|
||||
tag-foreground: #002b36
|
||||
testcase-accent-level-1: #073642
|
||||
tiddler-background: #002b36
|
||||
tiddler-border: #586e75
|
||||
tiddler-controls-foreground: inherit
|
||||
@@ -125,4 +127,4 @@ toolbar-new-button: #839496
|
||||
toolbar-options-button: #839496
|
||||
toolbar-save-button: inherit
|
||||
untagged-background: #586e75
|
||||
very-muted-foreground: #586e75
|
||||
very-muted-foreground: #586e75
|
||||
@@ -27,7 +27,7 @@ diff-insert-foreground: #eee8d5
|
||||
diff-invisible-background: #b58900
|
||||
diff-invisible-foreground: #eee8d5
|
||||
dirty-indicator: #dc322f
|
||||
download-background: #859900
|
||||
download-background: #00910b
|
||||
download-foreground: #eee8d5
|
||||
dragger-background: #eee8d5
|
||||
dragger-foreground: #657b83
|
||||
@@ -56,6 +56,7 @@ modal-footer-background: #eee8d5
|
||||
modal-footer-border: #93a1a1
|
||||
modal-header-border: #93a1a1
|
||||
muted-foreground: #586e75
|
||||
network-activity-foreground: <<colour primary>>
|
||||
notification-background: #fdf6e3
|
||||
notification-border: #93a1a1
|
||||
page-background: #eee8d5
|
||||
@@ -81,10 +82,10 @@ sidebar-tab-foreground-selected: #586e75
|
||||
sidebar-tiddler-link-foreground: #2aa198
|
||||
sidebar-tiddler-link-foreground-hover: #002b36
|
||||
site-title-foreground: #d33682
|
||||
stability-deprecated: #dc322f
|
||||
stability-experimental: #b58900
|
||||
stability-legacy: #268bd2
|
||||
stability-stable: #859900
|
||||
stability-deprecated: #d21a1a
|
||||
stability-experimental: #771e00
|
||||
stability-legacy: #227abb
|
||||
stability-stable: #576400
|
||||
static-alert-foreground: #586e75
|
||||
tab-background: #eee8d5
|
||||
tab-background-selected: #fdf6e3
|
||||
@@ -98,6 +99,7 @@ table-footer-background: #eee8d5
|
||||
table-header-background: #eee8d5
|
||||
tag-background: #b58900
|
||||
tag-foreground: #fdf6e3
|
||||
testcase-accent-level-1: #afc2db
|
||||
tiddler-background: #fdf6e3
|
||||
tiddler-border: #93a1a1
|
||||
tiddler-controls-foreground: inherit
|
||||
|
||||
@@ -94,6 +94,7 @@ table-footer-background: rgba(0,0,0,.4)
|
||||
table-header-background: rgba(0,0,0,.1)
|
||||
tag-background: rgb(255, 201, 102)
|
||||
tag-foreground: rgb(25, 25, 25)
|
||||
testcase-accent-level-1: rgb(13, 52, 99)
|
||||
tiddler-background: rgb(38, 38, 38)
|
||||
tiddler-border: rgba(240, 196, 117, 0.7)
|
||||
tiddler-controls-foreground: rgb(128, 128, 128)
|
||||
|
||||
@@ -69,7 +69,7 @@ select-tag-foreground:
|
||||
sidebar-button-foreground: <<colour foreground>>
|
||||
sidebar-controls-foreground-hover: #000000
|
||||
sidebar-controls-foreground: #aaaaaa
|
||||
sidebar-foreground-shadow: rgba(255,255,255, 0.8)
|
||||
sidebar-foreground-shadow: #ffffff
|
||||
sidebar-foreground: #acacac
|
||||
sidebar-muted-foreground-hover: #444444
|
||||
sidebar-muted-foreground: #c0c0c0
|
||||
@@ -83,7 +83,7 @@ sidebar-tab-foreground: <<colour tab-foreground>>
|
||||
sidebar-tiddler-link-foreground-hover: #444444
|
||||
sidebar-tiddler-link-foreground: #999999
|
||||
site-title-foreground: <<colour tiddler-title-foreground>>
|
||||
stability-stable: #008000
|
||||
stability-stable: #00b700
|
||||
stability-experimental: #c07c00
|
||||
stability-deprecated: #ff0000
|
||||
stability-legacy: #0000ff
|
||||
@@ -138,13 +138,13 @@ wikilist-title: #666666
|
||||
wikilist-title-svg: <<colour wikilist-title>>
|
||||
wikilist-url: #aaaaaa
|
||||
wikilist-button-open: #4fb82b
|
||||
wikilist-button-open-hover: green
|
||||
wikilist-button-open-hover: #009300
|
||||
wikilist-button-reveal: #5778d8
|
||||
wikilist-button-reveal-hover: blue
|
||||
wikilist-button-reveal-hover: #0000ff
|
||||
wikilist-button-remove: #d85778
|
||||
wikilist-button-remove-hover: red
|
||||
wikilist-button-remove-hover: #ff0000
|
||||
wikilist-toolbar-background: #d3d3d3
|
||||
wikilist-toolbar-foreground: #888888
|
||||
wikilist-droplink-dragover: rgba(255,192,192,0.5)
|
||||
wikilist-droplink-dragover: #ffc0c0
|
||||
wikilist-button-background: #acacac
|
||||
wikilist-button-foreground: #000000
|
||||
wikilist-button-foreground: #000000
|
||||
@@ -21,12 +21,6 @@ http://$(userName)$.tiddlyspot.com/$path$/
|
||||
</$reveal>
|
||||
\end
|
||||
|
||||
<div class="tc-message-box">
|
||||
|
||||
<<lingo ReadOnly>>
|
||||
|
||||
</div>
|
||||
|
||||
<<lingo Description>>
|
||||
|
||||
|<<lingo UserName>> |<$edit-text tiddler="$:/UploadName" default="" tag="input"/> |
|
||||
|
||||
@@ -3,7 +3,7 @@ tags: $:/tags/ControlPanel/Saving
|
||||
caption: {{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}
|
||||
|
||||
\define lingo-base() $:/language/ControlPanel/Saving/GitService/
|
||||
\define service-name() ~Gitea
|
||||
\define service-name() Gitea
|
||||
|
||||
<<lingo Description>>
|
||||
|
||||
|
||||
19
core/ui/ControlPanel/Settings/DefaultTiddlerInfoTab.tid
Normal file
@@ -0,0 +1,19 @@
|
||||
caption: {{$:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/Caption}}
|
||||
tags: $:/tags/ControlPanel/Settings
|
||||
title: $:/core/ui/ControlPanel/Settings/DefaultTiddlerInfoTab
|
||||
|
||||
\whitespace trim
|
||||
\define lingo-base() $:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/
|
||||
|
||||
<$link to="$:/config/TiddlerInfo/Default" class="tc-control-panel-item">
|
||||
<<lingo Hint>>
|
||||
</$link>
|
||||
|
||||
<$select tiddler="$:/config/TiddlerInfo/Default" class="tc-select">
|
||||
<$list filter="[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!is[draft]]">
|
||||
<option value=<<currentTiddler>>><$transclude field="caption">
|
||||
<$text text=<<currentTiddler>>/>
|
||||
</$transclude>
|
||||
</option>
|
||||
</$list>
|
||||
</$select>
|
||||
@@ -17,9 +17,7 @@ tags: $:/tags/EditTemplate
|
||||
<$let backgroundColor=<<colour>> >
|
||||
<span class="tc-tag-label tc-tag-list-item tc-small-gap-right"
|
||||
data-tag-title=<<currentTiddler>>
|
||||
style.color=<<foregroundColor>>
|
||||
style.fill=<<foregroundColor>>
|
||||
style.background-color=<<backgroundColor>>
|
||||
style=`color:$(foregroundColor)$; fill:$(foregroundColor)$; background-color:$(backgroundColor)$;`
|
||||
>
|
||||
<$transclude tiddler=<<icon>>/>
|
||||
<$view field="title" format="text"/>
|
||||
|
||||
@@ -51,6 +51,7 @@ title: $:/core/ui/ImportListing
|
||||
\end
|
||||
|
||||
\whitespace trim
|
||||
<div class="tc-table-wrapper">
|
||||
<table class="tc-import-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
@@ -129,3 +130,4 @@ title: $:/core/ui/ImportListing
|
||||
</$list>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -2,31 +2,26 @@ title: $:/core/ui/SideBar/Tools
|
||||
tags: $:/tags/SideBar
|
||||
caption: {{$:/language/SideBar/Tools/Caption}}
|
||||
|
||||
\define lingo-base() $:/language/ControlPanel/
|
||||
\define config-title()
|
||||
$:/config/PageControlButtons/Visibility/$(listItem)$
|
||||
\end
|
||||
\whitespace trim
|
||||
|
||||
\procedure lingo-base() $:/language/ControlPanel/
|
||||
\function config-title() [[$:/config/PageControlButtons/Visibility/$(listItem)$]substitute[]]
|
||||
|
||||
<<lingo Basics/Version/Prompt>> <<version>>
|
||||
|
||||
<$set name="tv-config-toolbar-icons" value="yes">
|
||||
|
||||
<$set name="tv-config-toolbar-text" value="yes">
|
||||
|
||||
<$set name="tv-config-toolbar-class" value="">
|
||||
|
||||
<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">
|
||||
|
||||
<div style="position:relative;" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>
|
||||
|
||||
<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show"/> <$transclude tiddler=<<listItem>>/> <i class="tc-muted"><$transclude tiddler=<<listItem>> field="description"/></i>
|
||||
|
||||
</div>
|
||||
|
||||
</$list>
|
||||
|
||||
</$set>
|
||||
|
||||
</$set>
|
||||
|
||||
</$set>
|
||||
<$let tv-config-toolbar-icons="yes"
|
||||
tv-config-toolbar-text="yes"
|
||||
tv-config-toolbar-class=""
|
||||
>
|
||||
<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">
|
||||
<div class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] tc-sidebar-tools-item +[join[ ]] }}}
|
||||
data-title=<<listItem>>
|
||||
>
|
||||
<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show" class="tc-tiny-gap-right"/>
|
||||
<$transclude $tiddler=<<listItem>>/>
|
||||
<i class="tc-tiny-gap-left tc-muted">
|
||||
<$transclude $tiddler=<<listItem>> $field="description"/>
|
||||
</i>
|
||||
</div>
|
||||
</$list>
|
||||
</$let>
|
||||
|
||||
@@ -3,11 +3,9 @@ tags: $:/tags/Macro
|
||||
|
||||
\whitespace trim
|
||||
|
||||
\procedure copy-to-clipboard(src,class:"tc-btn-invisible",style,type:"text/plain",plain)
|
||||
\procedure copy-to-clipboard-actions()
|
||||
<$action-sendmessage $message="tm-copy-to-clipboard" $param=<<src>> type=<<type>> plainText=<<plain>>/>
|
||||
\end copy-to-clipboard-actions
|
||||
<$button actions=<<copy-to-clipboard-actions>>
|
||||
\procedure copy-to-clipboard(src,class:"tc-btn-invisible",style)
|
||||
<$button message="tm-copy-to-clipboard"
|
||||
param=<<src>>
|
||||
class=<<class>>
|
||||
style=<<style>>
|
||||
tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}
|
||||
@@ -17,12 +15,12 @@ tags: $:/tags/Macro
|
||||
<$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>
|
||||
</span>
|
||||
</$button>
|
||||
\end copy-to-clipboard
|
||||
\end
|
||||
|
||||
\procedure copy-to-clipboard-above-right(src,class:"tc-btn-invisible",style,type:"text/plain")
|
||||
<div style.position="relative">
|
||||
<div style.position="absolute" style.bottom="0" style.right="0">
|
||||
<$transclude $variable="copy-to-clipboard" src=<<src>> class=<<class>> style=<<style>> type=<<type>> plain=<<plain>>/>
|
||||
\procedure copy-to-clipboard-above-right(src,class:"tc-btn-invisible",style)
|
||||
<div style="position: relative;">
|
||||
<div style="position: absolute; bottom: 0; right: 0;">
|
||||
<$macrocall $name="copy-to-clipboard" src=<<src>> class=<<class>> style=<<style>>/>
|
||||
</div>
|
||||
</div>
|
||||
\end
|
||||
|
||||
@@ -11,6 +11,7 @@ The ~CodeMirror plugin can be extended with ~AddOns for more functionality:
|
||||
* Keymaps in the style of Emacs, Sublime Text or Vim
|
||||
* Closing Brackets
|
||||
* Closing Tags
|
||||
* Display trailing whitespace
|
||||
|
||||
NOTE: This demo has the ''Sublime Text'' keymap installed.
|
||||
|
||||
|
||||
@@ -8,11 +8,16 @@
|
||||
"tiddlywiki/codemirror-search-replace",
|
||||
"tiddlywiki/codemirror-fullscreen-editing",
|
||||
"tiddlywiki/codemirror-mode-xml",
|
||||
"tiddlywiki/codemirror-mode-htmlembedded",
|
||||
"tiddlywiki/codemirror-mode-htmlmixed",
|
||||
"tiddlywiki/codemirror-mode-javascript",
|
||||
"tiddlywiki/codemirror-mode-css",
|
||||
"tiddlywiki/codemirror-mode-x-tiddlywiki",
|
||||
"tiddlywiki/codemirror-mode-markdown",
|
||||
"tiddlywiki/codemirror-keymap-sublime-text"
|
||||
"tiddlywiki/codemirror-trailingspace",
|
||||
"tiddlywiki/codemirror-keymap-emacs",
|
||||
"tiddlywiki/codemirror-keymap-sublime-text",
|
||||
"tiddlywiki/codemirror-keymap-vim"
|
||||
],
|
||||
"themes": [
|
||||
"tiddlywiki/vanilla",
|
||||
|
||||
30
editions/ja-JP/tiddlers/concepts/Filters.tid
Normal file
@@ -0,0 +1,30 @@
|
||||
created: 20130827080000000
|
||||
list: [[Introduction to filter notation]] [[Filter Syntax]]
|
||||
modified: 20250218103107943
|
||||
original-modified: 20230710074511095
|
||||
tags: Reference Concepts TableOfContents
|
||||
title: Filters
|
||||
ja-title: フィルタ
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\define openAdvancedSearch()
|
||||
<$action-setfield $tiddler="$:/state/tab--1498284803" text="$:/core/ui/AdvancedSearch/Filter"/>
|
||||
<$action-setfield $tiddler="$:/temp/advancedsearch/input" text="[tag[Filters]]"/>
|
||||
<$action-setfield $tiddler="$:/temp/advancedsearch" text="[tag[Filters]]"/>
|
||||
\end
|
||||
|
||||
TiddlyWikiは、レコードがTiddlerであるデータベースと考えることができます。データベースは通常、どのレコードが特定のパターンに一致するかを発見する方法を提供します。~TiddlyWikiでは、これはフィルタを使用して行われます
|
||||
|
||||
<<.def フィルタ>>は、その<<.def "アウトプット">>として特定の[[Tiddlerセット|Title Selection]]を選択するための簡潔な表記法です。~TiddlyWikiはフィルタに遭遇するたびにアウトプットを計算します。その後、それらのTiddlerを使って、[[数を数え|CountWidget]]たり、[[リストし|ListWidget]]たりするなど、さらなる処理を行うことができます
|
||||
|
||||
次の例では、フィルタを<<.mlink list-links>>マクロに渡します。<<.olink2 tag tag>> <<.word フィルタ>>であるTiddlerのリストを表示します:
|
||||
|
||||
<<wikitext-example-without-html """<<list-links "[tag[Filters]]">>""" >>
|
||||
|
||||
Wiki内でTiddlerが追加や削除されると、フィルタのアウトプットが変更される可能性があります。~TiddlyWikiは即再計算し、フィルタベースのカウントやリストも自動的に更新します
|
||||
|
||||
''さらに詳細:''
|
||||
|
||||
* <$linkcatcher message="tm-navigate" actions=<<openAdvancedSearch>> >[[高度な検索|$:/AdvancedSearch]]</$linkcatcher> -- フィルタを簡単に試すことができる<<.advancedsearch-tab Filter>>タブがあります
|
||||
|
||||
* [[WikiTextでのフィルタされたトランスクルージョン|Transclusion in WikiText]] -- テキスト内でフィルタ結果を使用したい場合
|
||||
19
editions/ja-JP/tiddlers/concepts/Selection Constructors.tid
Normal file
@@ -0,0 +1,19 @@
|
||||
created: 20150117204109000
|
||||
modified: 20250222112113766
|
||||
original-modified: 20240708201746542
|
||||
tags: Filters
|
||||
title: Selection Constructors
|
||||
ja-title: セレクションコンストラクタ
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
[[フィルタステップ|Filter Step]]のアウトプットはその[[オペレータ|Filter Operators]]によって異なります:
|
||||
|
||||
* ほとんどのオペレータは、インプットからアウトプットを派生します。たとえば、それらの多くはインプットのサブセットをアウトプットし、まさに<<.word フィルタ>>の名にふさわしく、含んでいる[[ラン|Filter Run]]の全体的なアウトプットを絞り込みます。これらのオペレータは<<.def "セレクションモディファイア">>と呼ばれます。
|
||||
|
||||
* いくつかのオペレータはインプットを無視し、代わりに独立したアウトプットを生成します。これらは<<.def "セレクションコンストラクタ">>と呼ばれ、完全に新しい[[セレクション|Title Selection]]を構築します。
|
||||
|
||||
コンストラクタの良い例は<<.olink title>>です。`[title[A]title[B]]`のアウトプットは<<.tid B>>です。しかし、<<.olink field>>オペレータはモディファイアなので、`[title[A]field:title[B]`は何もアウトプットしません。
|
||||
|
||||
次の[[フィルタオペレータ|filter Operator]]は<<tag>>でタグ付けされています:
|
||||
|
||||
<<list-links "[tag<currentTiddler>]" class:"multi-columns">>
|
||||
@@ -0,0 +1,20 @@
|
||||
created: 20230316150731234
|
||||
from-version: 5.1.23
|
||||
modified: 20250303102704427
|
||||
original-modified: 20230711084644541
|
||||
rp-input: 前回のフィルタランからのすべてのタイトル
|
||||
rp-output: アウトプットタイトルは、重複を排除せずに以前のフィルタランの出力に追加されます。
|
||||
rp-purpose: 重複を排除しない和集合
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: All Filter Run Prefix
|
||||
ja-title: allフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":all" | - )
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
このプレフィックスにはオプションの[[ショートカット構文|Shortcut Filter Run Prefix]]であるシンボル`=run`があります
|
||||
@@ -0,0 +1,20 @@
|
||||
created: 20230318142752854
|
||||
from-version: 5.1.23
|
||||
modified: 20250303103244036
|
||||
original-modified: 20230711084712170
|
||||
rp-purpose: フィルタステップの蓄積
|
||||
rp-input: これまでのすべてのランのフィルタアウトプット
|
||||
rp-output: アウトプットのタイトルは、以前のフィルターランのアウトプットを置換
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: And Filter Run Prefix
|
||||
ja-title: andフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":and" | - )
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
このプレフィックスにはオプションの[[ショートカット構文|Shortcut Filter Run Prefix]]であるシンボル+runがあります
|
||||
@@ -0,0 +1,48 @@
|
||||
created: 20211130114857532
|
||||
filter1: [prefix[ca]then[ca]]
|
||||
filter2: [suffix[at]then[at]]
|
||||
filter3: other
|
||||
modified: 20250310110107153
|
||||
original-modified: 20230305125250563
|
||||
tags: [[Cascade Filter Run Prefix]]
|
||||
title: Cascade Filter Run Prefix (Examples)
|
||||
ja-title: cascadeフィルタランプレフィックス (例)
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<.op ":cascade">>フィルタランプレフィックスは、タグマクロによって生成されるタグピルで使用される各Tiddlerの配色を選択するために、~TiddlyWikiコアによって使用されます。
|
||||
|
||||
`:cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]]`
|
||||
|
||||
上記の<<.op :cascade>>フィルタラン内のフィルタ式は、<<tag $:/tags/TiddlerColourFilter>>でタグ付けされたTiddlerのテキストフィールドからフィルタのリストを返します。以下を参照:
|
||||
|
||||
<ul>
|
||||
<$list filter="[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]]">
|
||||
<li><pre><$text text=<<currentTiddler>>/></pre></li>
|
||||
</$list>
|
||||
</ul>
|
||||
|
||||
インプットタイトルごとに、これらのフィルタが順番に適用され、空でないリストを返す最初のフィルタが見つかるまで続きます。この空でないリストの最初の結果がそのインプットタイトルに置き換えられ、そのTiddlerの色として使用されます。
|
||||
|
||||
<<.operator-example 1 """[all[shadows+tiddlers]] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]] +[!is[blank]limit[10]]""">>
|
||||
|
||||
!! 拡張例
|
||||
|
||||
この例では、<<.op :cascade>>フィルタランがどのように機能するかを段階的に説明します。
|
||||
|
||||
アウトプットがフィルタのリストを返すフィルタ式が必要です。通常、このようなフィルタ式は、一連のTiddler内のいくつかのフィールドを照会して(おそらくタグ経由で)フィルタのリストを作成します。この例を自己完結型にするために、このTiddlerの//filter1//、//filter2//、//filter3//フィールドに、3つのフィルタが格納されます。[[テキスト参照|TextReference]]と[[appendオペレータ|append Operator]]のインスタンスを使用して、フィールドをフィルタのリストに結合します。
|
||||
|
||||
フィルター`[{!!filter1}append{!!filter2}append{!!filter3}]`は、次のフィルタリストを生成します:
|
||||
|
||||
<ul>
|
||||
<$list filter="[{!!filter1}append{!!filter2}append{!!filter3}]">
|
||||
<li><pre><$text text=<<currentTiddler>>/></pre></li>
|
||||
</$list>
|
||||
</ul>
|
||||
|
||||
この例では、`cat can bat bug`がインプットタイトルとして使用されます。各インプットタイトルは、上記の各フィルタに対して順番に<<.op :cascade>>で評価されます。<<.op :cascade>>の内部で何が起こっているかを理解しやすくするために、次の表では、[[mapフィルタランプレフィックス|Map Filter Run Prefix]]を使用して、各フィルタの結果を示しています。
|
||||
|
||||
|^<<.operator-example c1.1 "cat can bat bug :map[prefix[ca]then[ca]]">>|^<<.operator-example c1.2 "cat can bat bug :map[suffix[at]then[at]]">>|^<<.operator-example c1.3 "cat can bat bug :map[[other]]">>|
|
||||
|
||||
上記の3つの例で"Try it"をクリックします。<<.op :cascade>>を使用すると、各行の左から右に読み取られた最初の空白以外の値が返されます。最終結果を確認するには、下の"Try it"をクリックします。
|
||||
|
||||
<<.operator-example c1.4 "cat can bat bug :cascade[{!!filter1}append{!!filter2}append{!!filter3}]">>
|
||||
@@ -0,0 +1,27 @@
|
||||
created: 20211130114043280
|
||||
from-version: 5.2.1
|
||||
modified: 20250305112707026
|
||||
original-modified: 20230710073343947
|
||||
rp-input: これまでのすべてのランのフィルタアウトプット
|
||||
rp-output: このフィルタランによって返されるフィルタによって変更されたインプットタイトル
|
||||
rp-purpose: フィルターのリストを順に評価し、最初の結果を適用してインプットタイトルを変更
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Cascade Filter Run Prefix
|
||||
ja-title: cascadeフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":cascade" | - )
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
この[[フィルタラン|Filter Run]]の[[フィルタ式|Filter Expression]]が評価され、フィルタのリストが返されます。次に、各インプットタイトルが各フィルタに対して順番に評価され、インプットタイトルは空でないリストを返す最初のフィルタの最初の結果に置き換えられます。どのフィルタもインプットタイトルの結果を返さない場合は、空の文字列に置き換えられます。
|
||||
|
||||
フィルタラン内では、次の変数を使用できます:
|
||||
|
||||
* <<.var currentTiddler>> - インプットタイトル
|
||||
* <<.var ..currentTiddler>> - フィルタラン外の変数<<.var currentTiddler>>の値。
|
||||
|
||||
[[cascadeフィルタランプレフィックス (例)|Cascade Filter Run Prefix (Examples)]]
|
||||
@@ -0,0 +1,22 @@
|
||||
created: 20230318142408662
|
||||
from-version: 5.1.23
|
||||
modified: 20250312102737003
|
||||
original-modified: 20230322140756821
|
||||
rp-input: 前のフィルタランからのすべてのタイトル
|
||||
rp-output: これまでのフィルタアウトプットが空のリストの場合、ランのアウトプットタイトルがフィルタアウトプットに[[追加|Dominant Append]]されます<br>これまでのフィルタアウトプットが空のリストでない場合、ランは無視されます
|
||||
rp-purpose: フィルタランは、これまでのすべてのランのフィルタアウトプットが空のリストである場合にのみ評価されます
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Else Filter Run Prefix
|
||||
ja-title: elseフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":else" | - )
|
||||
[[run|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
このプレフィックスには[[ショートカットフィルタランプレフィックス|Shortcut Filter Run Prefix]] シンボル`~run`があります
|
||||
|
||||
参照: [[thenフィルタランプレフィックス|Then Filter Run Prefix]] | [[thenオペレータ|then Operator]] と [[elseオペレータ|else Operator]]
|
||||
@@ -0,0 +1,20 @@
|
||||
created: 20230318142056008
|
||||
from-version: 5.1.23
|
||||
modified: 20250312104032308
|
||||
original-modified: 20230322140643066
|
||||
rp-input: 前のフィルタランからのすべてのタイトル
|
||||
rp-output: アウトプットタイトルはフィルタのアウトプットから取り除かれます(そのようなTiddlerが存在する場合)
|
||||
rp-purpose: このフィルタランのアウトプットタイトルが前のフィルタランのアウトプットに含まれている場合は取り除かれ、含まれていない場合は無視されます
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Except Filter Run Prefix
|
||||
ja-title: exceptフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":except" | - )
|
||||
[[run|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
このプレフィックスには[[ショートカットフィルタランプレフィックス|Shortcut Filter Run Prefix]]シンボル`-run`があります
|
||||
23
editions/ja-JP/tiddlers/filters/syntax/Filter Expression.tid
Normal file
@@ -0,0 +1,23 @@
|
||||
created: 20150124182421000
|
||||
modified: 20250219114110986
|
||||
original-modified: 20230710074507466
|
||||
tags: [[Filter Syntax]]
|
||||
title: Filter Expression
|
||||
ja-title: フィルタ式
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<.def "フィルタ式">>は、[[フィルタのシンタックス|Filter Syntax]]の最も外側のレベルです。これは、[[フィルタランプレフィックス|Filter Run Prefix]]を備えた [[フィルタラン|Filter Run]]で構成されます。複数のフィルタ実行は[[ホワイトスペース|Filter Whitespace]]で区切られます。
|
||||
|
||||
<$railroad text="""
|
||||
{ (
|
||||
- |
|
||||
: [[<"プレフィックス">|"Filter Run Prefix"]]
|
||||
)
|
||||
[["ラン"|"Filter Run"]]
|
||||
+ [["ホワイトスペース"|"Filter Whitespace"]]
|
||||
}
|
||||
"""/>
|
||||
|
||||
<<.tip """上に示したように、図に開始線と終了線が1つある場合は、リンクされた上位レベルにさらに情報があることを意味します。パンくずリストはナビゲーションに使用できます""">>
|
||||
|
||||
<<.tip """下位レベルで使用されているように、図に開始点と終了点がない場合は、読みやすさと単純さを高めるために、上位レベルのシンタックス要素が削除されていることを意味します。パンくずリストはナビゲーションに使用できます""">>
|
||||
@@ -0,0 +1,33 @@
|
||||
created: 20211129022707404
|
||||
modified: 20250314105437481
|
||||
original-modified: 20230305125338118
|
||||
tags: [[Filter Filter Run Prefix]]
|
||||
title: Filter Filter Run Prefix (Examples)
|
||||
ja-title: filterフィルタランプレフィックス(例)
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<.operator-example 1 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]]">>
|
||||
<<.operator-example 2 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:lteq[2000]]">>
|
||||
<<.operator-example 3 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]] :filter[get[text]length[]compare:integer:lteq[2000]]">>
|
||||
<<.operator-example 4 "[tag[Features]] :filter[links[]!is[shadow]is[missing]]">>
|
||||
|
||||
<<.operator-example 5 "A B C D E F :filter[<index>remainder[2]compare:integer:eq[0]]" "インプットリストの要素を1つおきに返す">>
|
||||
|
||||
|
||||
<<.operator-example 6 "[tag[shopping]] :filter[{!!quantity}compare:integer:gt[4]] :map[addprefix[ ]addprefix{!!quantity}]">>
|
||||
<<.operator-example 7 "[tag[shopping]] :filter[{!!quantity}compare:integer:lteq[4]] :map[addprefix[ ]addprefix{!!quantity}]">>
|
||||
|
||||
!! フィルタランプレフィックス`:filter`と`:and`/`+`の比較
|
||||
|
||||
<<.op :filter>>フィルタランプレフィックスの機能は、<<.op :and>>プレフィックス(エイリアス<<.op +>>)と一部重複しています。上記のフィルタ式にはすべて、次の2 つのプロパティがあることに注意してください:
|
||||
|
||||
# フィルタ式の先頭では、インプットタイトル(つまり、`get[text]length[]`、`links[]`、`<index>remainder[2]`、`{!!quantity}`)が変換されます。
|
||||
# フィルタ式の最後では、インプット項目が何らかの条件(つまり`compare`、`is`)を満たす場合にのみアウトプットに送信されます。
|
||||
|
||||
<<.op :filter>>プレフィックスの目的はプロパティ#1によってインプットタイトルが変換されるにもかかわらず、元のインプットタイトルを返すことです。こうすることで、"何らかの条件を満たす"チェックを元のインプット以外のものに対して実行できます。一部のフィルタ式でプロパティ#1が必要ない場合は、代わりに<<.op :and>>プレフィックスを使用できます。
|
||||
|
||||
| <<.op :filter>> | <<.op :and>> |
|
||||
|^<<.operator-example c1.1 "[tag[HelloThere]] :filter[get[text]length[]compare:integer:gteq[1000]]">>|^<<.operator-example c1.2 "[tag[HelloThere]] :and[get[text]length[]compare:integer:gteq[1000]]">>|
|
||||
|^<<.operator-example c2.1 "[tag[Features]] :filter[links[]!is[shadow]is[missing]]">>|^<<.operator-example c2.2 "[tag[Features]] :and[links[]!is[shadow]is[missing]]">>|
|
||||
|!結果は同じ|<|
|
||||
|^<<.operator-example c3.1 "cat can bat bug :filter[suffix[at]minlength[3]]">>|^<<.operator-example c3.2 "cat can bat bug :and[suffix[at]minlength[3]]">>|
|
||||
@@ -0,0 +1,34 @@
|
||||
created: 20211129022455873
|
||||
from-version: 5.1.23
|
||||
modified: 20250314105047035
|
||||
original-modified: 20230710073334078
|
||||
rp-input: これまでのすべてのランのフィルタアウトプット
|
||||
rp-output: フィルタランが空でないインプットタイトル
|
||||
rp-purpose: フィルタランアウトプットが空のリストであるすべてのインプットタイトルを除外
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Filter Filter Run Prefix
|
||||
ja-title: filterフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":filter" | - )
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
これまでのフィルタアウトプットをインプットとして受け取ります。次のランはインプットの各タイトルに対して評価され、アウトプットが空のリストであるすべてのインプットタイトルが除かれます。
|
||||
|
||||
フィルタラン内では、<<.var currentTiddler>>変数は処理中のTiddlerのタイトルに設定されていることに注意してください。これにより、`:filter[{!!price}multiply{!!cost}compare:integer:gteq[5]]`のようなフィルタランを計算に使用できるようになります。ラン外のcurrentTiddlerの値は、<<.var ..currentTiddler>>変数で使用できます。
|
||||
|
||||
フィルターラン内では、次の変数を使用できます:
|
||||
|
||||
* <<.var currentTiddler>> - インプットタイトル
|
||||
* <<.var ..currentTiddler>> - フィルタラン外の変数`currentTiddler`の値。
|
||||
* <<.var index>> - <<.from-version "5.2.1">> 現在のリスト項目の数値インデックス(リストの最初の項目はゼロです)。
|
||||
* <<.var revIndex>> - <<.from-version "5.2.1">> 現在のリスト項目の逆数値インデックス(リストの最後の項目はゼロです)。
|
||||
* <<.var length>> - <<.from-version "5.2.1">> インプットリストの長さの合計。
|
||||
|
||||
<<.tip "名前付きフィルタランプレフィックス`:filter`を、この演算子は、すべてのインプットタイトルにサブフィルタを適用し、サブフィルタから空の結果を返すタイトルを除外する[[filterオペレータ|filter Operator]]と比べてください。">>
|
||||
|
||||
[[filterフィルタランプレフィックス(例)|Filter Filter Run Prefix (Examples)]]
|
||||
40
editions/ja-JP/tiddlers/filters/syntax/Filter Parameter.tid
Normal file
@@ -0,0 +1,40 @@
|
||||
created: 20150220152540000
|
||||
modified: 20250223102930110
|
||||
original-modified: 20240708202234843
|
||||
tags: [[Filter Step]]
|
||||
title: Filter Parameter
|
||||
ja-title: フィルタパラメータ
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( "[" [: <-"ハード"-> /"]以外"/] "]"
|
||||
|
|
||||
"{" [: <-"間接"-> /"}以外"/] "}"
|
||||
|
|
||||
"<" [: <-"変数"-> /">以外"/] ">"
|
||||
)
|
||||
"""/>
|
||||
|
||||
[[フィルタオペレータ|Filter Operators]]のパラメーターは次のようになります:
|
||||
|
||||
;<<.def ハード>>
|
||||
: `[パラメータ例]`
|
||||
: パラメータは、角括弧内のテキストそのものです。
|
||||
;<<.def ソフト>>
|
||||
: <<.def 間接>>
|
||||
:: `{パラメータ例}`
|
||||
:: パラメータは、中括弧内の名前の[[テキスト参照|TextReference]]によって示されるテキスト、つまり、指定されたTiddlerの[[フィールド|TiddlerFields]]、または指定された[[データTiddler|DataTiddlers]]のプロパティの値です。
|
||||
: <<.def 変数>>
|
||||
:: `<パラメータ例>`
|
||||
:: パラメータは、山括弧内の[[変数|Variables]]の現在値です。マクロパラメータは、v5.2.0まではサポートされて<<.em いません>>。
|
||||
::<<.from-version "5.2.0">> リテラルマクロパラメータがサポートされています。例: `[<now [UTC]YYYY0MM0DD0hh0mm0ssXXX>]`。
|
||||
|
||||
<<.note """すべての[[フィルタオペレータ|filter Operator]]の後にはパラメータ式が続く必要があります。[[パラメータの無いオペレータ|Operators without parameters]]の場合、その式は空になります(`[<currentTiddler>links[]]`のフィルタオペレータ<<.olink links>>と同様)。""">>
|
||||
|
||||
---
|
||||
|
||||
<<.from-version "5.1.23">> [[フィルタステップ|Filter Step]]では、`,`文字で区切られた複数のパラメータがサポートされます。
|
||||
|
||||
例えば: `[param1],[param2]`や`<param1>,{param2}`
|
||||
21
editions/ja-JP/tiddlers/filters/syntax/Filter Run Prefix.tid
Normal file
@@ -0,0 +1,21 @@
|
||||
created: 20230305130600148
|
||||
modified: 20250223105142349
|
||||
original-modified: 20230711090913687
|
||||
tags: [[Filter Expression]]
|
||||
title: Filter Run Prefix
|
||||
ja-title: フィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
There are 2 types of filter run prefixes that are interchangeable; [[named prefixes|Named Filter Run Prefix]] and [[shortcut prefixes|Shortcut Filter Run Prefix]].
|
||||
交換可能なフィルタランプレフィックスには、[[名前付きプレフィックス|Named Filter Run Prefix]]と[[ショートカットプレフィックス|Shortcut Filter Run Prefix]]の2種類があります。
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
(
|
||||
- |
|
||||
: [[<":名前付きプレフィクス"> /"v5.1.23以降"/ |"Named Filter Run Prefix"]] |
|
||||
[[<"ショートカットプレフィックス"> /"v5.1.23以前"/ |"Shortcut Filter Run Prefix"]]
|
||||
)
|
||||
[[<"ラン">|"Filter Run"]]
|
||||
"""/>
|
||||
29
editions/ja-JP/tiddlers/filters/syntax/Filter Run.tid
Normal file
@@ -0,0 +1,29 @@
|
||||
created: 20150124182117000
|
||||
modified: 20250220111652831
|
||||
original-modified: 20230710074357002
|
||||
tags: [[Filter Expression]]
|
||||
title: Filter Run
|
||||
ja-title: フィルタラン
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( "[" { [[<"フィルタステップ">|"Filter Step"]] } "]"
|
||||
|
|
||||
[:{/"[ ]または空白以外の文字"/}]
|
||||
|
|
||||
'"' [:{/'"以外の文字'/}] '"'
|
||||
|
|
||||
"'" [:{/"'以外の文字"/}] "'"
|
||||
)
|
||||
"""/>
|
||||
|
||||
<<.def ラン>>は[[ステップ|Filter Step]]で構成され、より大きな[[フィルタ式|Filter Expression]]に貢献する[[選択|Title Selection]]を出力します。
|
||||
|
||||
ステップは左から右に処理されます。最初のステップへのインプットはランへのインプットと同じです。後続の各ステップのインプットは、前のステップのアウトプットです。
|
||||
|
||||
|
||||
図の下の3つのオプションは`HelloThere`、`"HelloThere"`、`'HelloThere'`と`"Filter Operators"`の構文と一致します。これらは`[title[...]]`の短縮形です。
|
||||
|
||||
引用符で囲まれたオプションは、`"An [[[[Unusual]]]] Tiddler"`のように角括弧を含むタイトルをサポートするために存在します。
|
||||
37
editions/ja-JP/tiddlers/filters/syntax/Filter Step.tid
Normal file
@@ -0,0 +1,37 @@
|
||||
created: 20150124182127000
|
||||
modified: 20250222110925130
|
||||
original-modified: 20230710074414361
|
||||
tags: [[Filter Run]]
|
||||
title: Filter Step
|
||||
ja-title: フィルタステップ
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<.def "フィルタステップ">>は、<<.def "フィルタラン">>内の単一の操作を表します。
|
||||
|
||||
プログラミング用語では、ステップのインプットがパラメータとして渡される関数呼び出しに似ています。ステップのアウトプットは、[[フィルタラン|Filter Run]]、つまりそれを含む[[フィルタ式|Filter Expression]]全体に貢献する[[タイトルセレクション|Title Selection]]です。
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
[:"!"]
|
||||
( / "省略の場合のデフォルト: title" /|:
|
||||
( - | :[[<"オペレータ">|"Filter Operators"]] )
|
||||
{ [:":" [[<"サフィックス">|"Filter Operators"]] ] } )
|
||||
{ [[<"パラメータ">|"Filter Parameter"]] + "," }
|
||||
"""/>
|
||||
|
||||
ステップの<<.def オペレータ>>は、[[フィルタオペレータ|Filter Operators]]として知られている定義済みキーワードのリストです。
|
||||
|
||||
多くのステップでは、ステップの実行内容をさらに定義する明示的な<<.def パラメータ>>が必要です。
|
||||
|
||||
<<.def サフィックス>>は、特定のオペレータの意味を拡張する追加テキスト(多くの場合、[[フィールド|TiddlerFields]]名)です。
|
||||
|
||||
ステップの<<.def オペレータ>>と<<.def サフィックス>>がすべて省略されている場合は、デフォルトで[[title|title Operator]]オペレータが使用されます。
|
||||
|
||||
<<.from-version "5.1.23">> いくつかのステップでは、`,`文字で区切られた複数の<<.def パラメータ>>を受け入れます。
|
||||
|
||||
認識されないオペレータは、<<.olink field>>オペレータのサフィックスであるかのように扱われます。
|
||||
|
||||
フィルタオペレータはプラグインによって拡張できます。
|
||||
|
||||
{{Selection Constructors}}
|
||||
26
editions/ja-JP/tiddlers/filters/syntax/Filter Syntax.tid
Normal file
@@ -0,0 +1,26 @@
|
||||
created: 20140210141217955
|
||||
list: [[Filter Expression]] [[Filter Run]] [[Filter Step]] [[Filter Parameter]] [[Filter Whitespace]]
|
||||
modified: 20250219112710650
|
||||
original-modified: 20230710074340943
|
||||
tags: Filters
|
||||
title: Filter Syntax
|
||||
ja-title: フィルタのシンタックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<.preamble """[[フィルタ|Filters]]は、正式な構文の説明が役立つと思われる人向けに、[[Railroadダイアグラム|Railroad Diagrams]]を使用して示されている文法に従います。ただし、このグループのTiddlerを理解していなくても、[[フィルタの書き方を学ぶ|Introduction to filter notation]]ことができます""">>
|
||||
|
||||
<<.def フィルタ>>は、<<.def インプット>>を<<.def アウトプット>>に変換するためのパイプラインです。インプットとアウトプットはどちらも、Tiddlerとフィールドの[[タイトルの順序付き集合|Title Selection]]です
|
||||
|
||||
フィルタは、''ラン''と呼ばれる小さな構成要素から構成される''式''であり、''ラン''は''ステップ''を使用して構築されます。それぞれがインプットをアウトプットに変換します
|
||||
|
||||
フィルタは空のアウトプットから始まります。その実行は左から右に処理され、アウトプットが徐々に修正されます。
|
||||
|
||||
"フィルタのシンタックス"の記述は次で始まります:
|
||||
|
||||
<$railroad text="""
|
||||
\start double
|
||||
\end double
|
||||
[[<"フィルタ式">|"Filter Expression"]]
|
||||
"""/>
|
||||
|
||||
<<.tip "上記のようなRailroadボックスを使用して移動できます。">>
|
||||
15
editions/ja-JP/tiddlers/filters/syntax/Filter Whitespace.tid
Normal file
@@ -0,0 +1,15 @@
|
||||
created: 20150124182304000
|
||||
modified: 20250510104756224
|
||||
original-modified: 20230710074447240
|
||||
tags: [[Filter Expression]]
|
||||
title: Filter Whitespace
|
||||
ja-title: フィルタホワイトスペース
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
{( "スペース" | "タブ" | "ラインフィード" | "リターン" | "垂直タブ" | "改ページ" )}
|
||||
"""/>
|
||||
|
||||
[[フィルタ式|Filter Expression]]の各ランの間にはホワイトスペース文字が出現します。
|
||||
@@ -0,0 +1,47 @@
|
||||
created: 20230316151518640
|
||||
modified: 20250225113139787
|
||||
original-modified: 20230327130626715
|
||||
tags: [[Filter Run Prefix]]
|
||||
title: Interchangeable Filter Run Prefixes
|
||||
ja-title: 交換可能なフィルターランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
!! 交換可能なフィルターランプレフィックス
|
||||
|
||||
技術的/論理的な用語で言えば:
|
||||
|
||||
|!ラン |!同等の名前付きプレフィックス |!解釈 |!アウトプット |
|
||||
|`[run]` |`:or[run]` |重複を排除した和集合 |... OR ラン |
|
||||
|`+[run]` |`:and[run]` |フィルタステップの蓄積 |... AND ラン |
|
||||
|`-[run]` |`:except[run]` |差集合 |... AND NOT ラン |
|
||||
|`~[run]` |`:else[run]` |それ以外 |... ELSE ラン |
|
||||
|`=[run]` |`:all[run]` |重複を排除しない和集合 |... OR ラン |
|
||||
|
||||
ランのインプットは通常、Wiki内の[[隠し|ShadowTiddlers]]Tiddler以外のすべてのTiddlerタイトルのリストです(順不同)。<br>ただし、`+`プレフィックスによってこれを変更できます:
|
||||
|
||||
|プレフィックス|インプット|h
|
||||
|`-`, `~`, `=`, `:intersection` あるいは、無し| 最初の[[フィルタオペレータ|Filter Operators]]によって特に指定されない限り、<$link to="all Operator">`[all[]]`</$link> Tiddlerのタイトル|
|
||||
|`+`, `:filter`, `:map`, `:reduce`,`:sort` |これまでのすべてのランのフィルタアウトプット|
|
||||
|
||||
インプットが変化するため、`-`と`+`の両方のプレフィックスが互いに逆の動作をしないことに注意してください。
|
||||
|
||||
たとえば、次の2つの例では、`$:/baz`は実際に存在する場合にのみ削除されます:
|
||||
|
||||
* <$link to="is Operator"> `foo bar $:/baz -[is[system]]`</$link>
|
||||
* <$link to="prefix Operator">`foo bar $:/baz -[prefix[$:/]]`</$link>
|
||||
|
||||
理由を理解するには、両方の最後のランのインプットとその`-`プレフィックスを考慮してください。
|
||||
|
||||
存在するかどうかに関係なく、`$:/baz`を削除するには、[[否定のフィルタオペレータ|Filter Operators]]とともに`+`プレフィックスを使用するだけです:
|
||||
|
||||
* <$link to="is Operator">`foo bar $:/baz +[!is[system]]`</$link>
|
||||
* <$link to="prefix Operator">`foo bar $:/baz +[!prefix[$:/]]`</$link>
|
||||
|
||||
!! +と和集合の違い
|
||||
|
||||
`+`と`:intersection`の違いについては[[和集合フィルタランプレフィックス(例)|Intersection Filter Run Prefix (Examples)]]を参照してください。
|
||||
|
||||
!! 開発者向け
|
||||
|
||||
新しいフィルタランプレフィックスを作成するには、`filterrunprefix`の[[モジュールタイプ|ModuleType]]で
|
||||
[[Javascriptモジュール|Modules]]を作成します。
|
||||
@@ -0,0 +1,38 @@
|
||||
created: 20211128212902292
|
||||
modified: 20250319104544220
|
||||
original-modified: 20230305125354209
|
||||
tags: [[Intersection Filter Run Prefix]]
|
||||
title: Intersection Filter Run Prefix (Examples)
|
||||
ja-title: intersectionフィルタランプレフィックス(例)
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<.operator-example 1 "A B C D :intersection[enlist[C D E F]]">>
|
||||
|
||||
<<.operator-example 2 "A B C D :intersection[enlist[A B C D]]">>
|
||||
|
||||
<<.operator-example 3 "A B C D :intersection[enlist[E F G H]]">>
|
||||
|
||||
<<.operator-example 4 ":intersection[enlist[A B C D]]" "最初のフィルタランでintersectionを使用することはあまり役に立ちません。結果は常に空になります。">>
|
||||
|
||||
!! `+`と`:intersection`の違い
|
||||
|
||||
プレフィックス`+`は、形式論理における"AND"として考えてください。たとえば、"条件A ''かつ'' 条件Bを満たすすべてのタイトルを取得する"などです。ただし、すべてのケースに適しているわけではありません。条件Bがインプットを置き換えるフィルタオペレータを使用する場合、プレフィックス`+`の使用は難しくなります。たとえば、2つのTiddlerに共通するタグを見つけたい場合は、次のようなフィルタ式を記述します:
|
||||
|
||||
* <$link to="tags Operator">`[[field Operator]tags[]] +[[compare Operator]tags[]]`</$link>
|
||||
|
||||
しかし、これは機能しません。2回目のフィルタランでインプットが破棄され、単一のtitle`[[compare Operator]]`で構成されるインプットに置き換えられるからです。そのため、このフィルタ式から得られる結果は、`compare Operator`Tiddlerのタグだけになります。
|
||||
|
||||
このような場合、必要なのは`:intersection`プレフィックスです。これまでのフィルタアウトプットを取得して、//保留し//、すべてのTiddlerタイトルをインプットとして次のフィルタランを開始します。その後、最新のフィルタランが完了すると、最新のアウトプットを取得して保留していたアウトプットと比較し、保留していたアウトプットと最新のアウトプットの両方に表示されたタイトルのみを含む新しいアウトプットを生成します。したがって、`field Operator`と`compare Operator`に共通するタグのみを取得するには、次のようなフィルタ式を記述します。
|
||||
|
||||
* <$link to="tags Operator">`[[field Operator]tags[]] :intersection[[compare Operator]tags[]]`</$link>
|
||||
|
||||
次の例では、[[field Operator]]と[[compare Operator]]を使用して、Tiddlerとそれぞれのタグを比較します。
|
||||
|
||||
<<.operator-example 5 "[[field Operator]tags[]]">>
|
||||
<<.operator-example 6 "[[compare Operator]tags[]]">>
|
||||
|
||||
<<.operator-example 7 "[[field Operator]tags[]] +[[compare Operator]tags[]]" """"field Operator"Tiddlerのタグは失われるため、"compare Operator"Tiddlerのタグのみが返されます""">>
|
||||
|
||||
<<.operator-example 8 "[[field Operator]tags[]] :intersection[[compare Operator]tags[]]" """両方のTiddlerに共通するタグを返します""">>
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
created: 20211128212902292
|
||||
from-version: 5.1.23
|
||||
modified: 20250317105829721
|
||||
original-modified: 20230710073322863
|
||||
rp-input: 前のフィルタランからのすべてのタイトル
|
||||
rp-output: このフィルタランの結果と前のランのアウトプットの両方に存在するタイトル
|
||||
rp-purpose: 前のランからのタイトルとこのフィルタのタイトルの共通部分を見つける
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Intersection Filter Run Prefix
|
||||
ja-title: intersectionフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":intersection" | - )
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
前のランからのフィルタアウトプットは保留されます。`:intersection`フィルタランは、すべてのTiddlerタイトルをインプットとして開始されます。この最後のフィルタランが完了すると、最後のアウトプットが保留アウトプットと比較されます。保留アウトプットと最新アウトプットの両方に表われるタイトルのみを含む新しいアウトプットが生成されます。
|
||||
|
||||
[[intersectionフィルタランプレフィックス(例)|Intersection Filter Run Prefix (Examples)]]
|
||||
@@ -0,0 +1,60 @@
|
||||
created: 20210618134753828
|
||||
modified: 20250416110748088
|
||||
original-modified: 20230305125405422
|
||||
tags: [[Map Filter Run Prefix]]
|
||||
title: Map Filter Run Prefix (Examples)
|
||||
ja-title: mapフィルタランプレフィックス(例)
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
インプットタイトルが存在する場合はキャプションフィールドで置き換え、存在しない場合はインプットタイトルを保持します:
|
||||
|
||||
<<.operator-example 1 "[tag[Widgets]] :map[get[caption]else{!!title}]">>
|
||||
|
||||
<<.tip "上記の例は`[tag[Widgets]] :map[{!!caption}!is[blank]else{!!title}]`と同等です。フィールドを`{!!caption}`のようにテキスト参照として参照する場合、存在しない、または空のキャプションフィールドに対しては空文字列が返されることに注意してください。したがって、`else`オペレータの前に`is[blank]`のチェックが必要です。">>
|
||||
|
||||
買い物リストの各タイトルについて、各アイテムの購入にかかる合計コストを計算します:
|
||||
|
||||
<<.operator-example 2 "[tag[shopping]] :map[get[quantity]else[0]multiply{!!price}]">>
|
||||
|
||||
`Widget:`でタグ付けされたすべてのTiddlerのタグを取得します:
|
||||
|
||||
<<.operator-example 3 "[tag[Widgets]] :map:flat[tagging[]] :and[!is[blank]unique[]]">>
|
||||
<<.tip "`flat`サフィックスがない場合、`:map`フィルタランは各インプットタイトルの最初の結果のみを返します">>
|
||||
|
||||
!! `:map`の`flat`サフィックスの有無の比較
|
||||
|
||||
`:map`フィルタランは、少なくともインプットと同じ数のアウトプットを返します。デフォルトでは、1つのインプット項目に対して1つのアウトプット項目が生成されます。フィルタランによってインプット項目が空の結果に変換された場合、その項目のアウトプットは空の文字列になります。フィルタランによってインプット項目が複数の項目に変換された場合、アウトプットには最初の項目のみが表われます。この動作は、`flat`サフィックスを指定することで上書きできます。`flat`サフィックスを指定すると、すべての項目がアウトプットに表れます。
|
||||
|
||||
| `:map` | `:map:flat` |
|
||||
|^<<.operator-example m0.1 "[range[4]] :map[match[this matches nothing]]">>|^<<.operator-example m0.2 "[range[4]] :map:flat[match[this matches nothing]]">>|
|
||||
|^<<.operator-example m1.1 "[range[4]] :map[range<currentTiddler>]">>|^<<.operator-example m1.2 "[range[4]] :map:flat[range<currentTiddler>]">>|
|
||||
|^<<.operator-example m2.1 "[range[4]] :map[range<currentTiddler>]">>|^<<.operator-example m2.2 "[range[4]] :map:flat[range<currentTiddler>first[]]">>|
|
||||
|^<<.operator-example m3.1 "[range[4]] :map[range<currentTiddler>sum[]]">>|^<<.operator-example m3.2 "[range[4]] :map:flat[range<currentTiddler>sum[]]">>|
|
||||
|^<<.operator-example m4.1 "[[1,2,3]] [[4,5]] :map[split[,]]">>|^<<.operator-example m4.2 "[[1,2,3]] [[4,5]] :map:flat[split[,]]">>|
|
||||
|^<<.operator-example m5.1 "[[1,2,3]] [[4,5]] :map[split[,]]">>|^<<.operator-example m5.2 "[[1,2,3]] [[4,5]] :map:flat[split[,]first[]]">>|
|
||||
|
||||
|
||||
!! `:map`と`:and`/`+`フィルタランプレフィックスの比較
|
||||
|
||||
`:map`フィルタランプレフィックスの機能は、`:and` プレフィックス(別名`+`)と一部重複しています。これらは同じ結果を返す場合もありますが、少なくとも以下の場合には結果が異なります:
|
||||
|
||||
# `:and`フィルタランによってアイテム数が変更される(増加や減少)場合があります。`:map`フィルタランによってアイテム数が変更されることはありません。
|
||||
# `:and`フィルタランのアイテム数は、[[重複排除|Dominant Append]]により減少します。`:map`ランは[[重複排除|Dominant Append]]は行われません。
|
||||
# "currentTiddler"変数への明示的な参照は異なる動作をします
|
||||
# TextReferenceを使用した"currentTiddler"への暗黙的な参照は異なる動作をします。
|
||||
|
||||
| `:map` | `:and` |
|
||||
|!結果は同じ|<|
|
||||
|^<<.operator-example 1.1 "[range[5]] :map[add[1]]">>|^<<.operator-example 1.2 "[range[5]] :and[add[1]]">>|
|
||||
|^<<.operator-example 2.1 "[range[5]] :map[addsuffix[ hello]]">>|^<<.operator-example 2.2 "[range[5]] :and[addsuffix[ hello]]">>|
|
||||
|^<<.operator-example 3.1 "[tag[shopping]] :map[get[quantity]]">>|^<<.operator-example 3.2 "[tag[shopping]] :and[get[quantity]]">>|
|
||||
|!項目数が減少|<|
|
||||
|^<<.operator-example 4.1 "[range[5]] :map[sum[]]">>|^<<.operator-example 4.2 "[range[5]] :and[sum[]]">>|
|
||||
|^<<.operator-example 5.1 "[range[5]] :map[join[,]]">>|^<<.operator-example 5.2 "[range[5]] :and[join[,]]">>|
|
||||
|!項目数が増加|<|
|
||||
|^<<.operator-example 6.1 "[[1,2,3]] [[4,5]] :map[split[,]]">>|^<<.operator-example 6.2 "[[1,2,3]] [[4,5]] :and[split[,]]">>|
|
||||
|!重複排除|<|
|
||||
|^<<.operator-example 7.1 "[range[5]] :map[[hello]]">>|^<<.operator-example 7.2 "[range[5]] :and[[hello]]">>|
|
||||
|!currentTiddler|<|
|
||||
|^<<.operator-example 8.1 "[tag[shopping]] :map[<currentTiddler>]">>|^<<.operator-example 8.2 "[tag[shopping]] :and[<currentTiddler>]">>|
|
||||
|^<<.operator-example 9.1 "[tag[shopping]] :map[{!!quantity}]">>|^<<.operator-example 9.2 "[tag[shopping]] :and[{!!quantity}]">>|
|
||||
@@ -0,0 +1,35 @@
|
||||
created: 20210618133745003
|
||||
from-version: 5.2.0
|
||||
modified: 20250319105451115
|
||||
original-modified: 20240312202834547
|
||||
rp-input: 前回までのすべてのランのフィルタアウトプット
|
||||
rp-output: このフィルタランの結果によって変更されたインプットタイトル
|
||||
rp-purpose: 各項目に対してこのフィルタを実行した結果に基づいてインプットタイトルを変更
|
||||
rp-suffix: <<.from-version "5.2.3">> フィルタランからすべての結果を返す場合は<<.value flat>>、最初の結果のみを返す場合は省略(デフォルト)
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Map Filter Run Prefix
|
||||
ja-title: mapフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":map" (: ":flat" | - ) | - )
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
以前のランからの各インプットタイトルは、順番にこのランに渡されます。フィルタランはインプットタイトルを変換し、このランのアウトプットはインプットタイトルを置き換えます。たとえば、フィルタラン`[get[caption]else{!!title}]`は、タイトルが保持されるフィールドが存在しない場合以外、各インプットタイトルをそのキャプションフィールドに置き換えます。
|
||||
|
||||
フィルタラン内では、<<.var currentTiddler>>変数は処理中のTiddlerのタイトルに設定されていることに注意してください。これにより、`:map[{!!price}multiply{!!cost}]`のようなフィルタランが計算に使用できるようになります。
|
||||
|
||||
フィルタラン内では、次の変数を使用できます:
|
||||
|
||||
* <<.var currentTiddler>> - インプットタイトル
|
||||
* <<.var ..currentTiddler>> - フィルタランの外での変数`currentTiddler`の値。
|
||||
* <<.var index>> - <<.from-version "5.2.1">> 現在のリスト項目の数値インデックス(リストの最初の項目はゼロ)。
|
||||
* <<.var revIndex>> - <<.from-version "5.2.1">> 現在のリスト項目の逆数値インデックス(リストの最後の項目はゼロ)。
|
||||
* <<.var length>> - <<.from-version "5.2.1">> インプットリストの合計の長さ。
|
||||
|
||||
`:map`プレフィックス付きで使用されるフィルタランは、渡された項目と少なくとも同じ数の項目を返す必要があります。フィルタランがアウトプットを返さないインプットタイトルは、空の文字列に置き換えられます。特に、[[getオペレータ|get Operator]]を使用してフィールドの値を取得する場合は、[[elseオペレータ|else Operator]] を使用してフィールド値が欠落しないようにすると役立ちます。たとえば、`[get[myfield]else[default-value]...`のようにします。
|
||||
|
||||
[[mapフィルタランプレフィックス(例)|Map Filter Run Prefix (Examples)]]
|
||||
@@ -0,0 +1,38 @@
|
||||
created: 20201214044413473
|
||||
modified: 20250227102948619
|
||||
original-modified: 20230711090833212
|
||||
tags: [[Filter Run Prefix]]
|
||||
title: Named Filter Run Prefix
|
||||
ja-title: 名前付きフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<.from-version "5.1.23">>で、名前付きフィルタランプレフィックスが実装されました。図に示すように、`:cascade`、`:map`、`:sort`が後から追加されました。
|
||||
|
||||
名前付きフィルタランプレフィックスは、[[ショートカットランプレフィックス|Shortcut Filter Run Prefix]]の代わりに、[[フィルタ式|Filter Expression]]の[[ラン|Filter Run]]の前に置くことができます。
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
(
|
||||
[[<":all"> |"All Filter Run Prefix"]] |
|
||||
[[<":and"> |"And Filter Run Prefix"]] |
|
||||
[[<":cascade"> /"v5.2.1"/ |"Cascade Filter Run Prefix"]] |
|
||||
[[<":else"> |"Else Filter Run Prefix"]] |
|
||||
[[<":except"> |"Except Filter Run Prefix"]] |
|
||||
[[<":filter"> |"Filter Filter Run Prefix"]] |
|
||||
[[<":intersection"> |"Intersection Filter Run Prefix"]] |
|
||||
[[<":map"> /"v5.2.0"/ |"Map Filter Run Prefix"]] |
|
||||
[[<":or"> |"Or Filter Run Prefix"]] |
|
||||
[[<":reduce"> |"Reduce Filter Run Prefix"]] |
|
||||
[[<":sort"> /"v5.2.0"/ |"Sort Filter Run Prefix"]] |
|
||||
[[<":then"> /"v5.3.0"/ |"Then Filter Run Prefix"]]) [[run|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
|
||||
<<.tip "名前付きフィルタランプレフィックス`:filter`を、すべてのインプットタイトルにサブフィルタを適用し、サブフィルタから空の結果を返すタイトルを除外する[[filterオペレータ|filter Operator]]と比較します">>
|
||||
|
||||
<<.tip "名前付きフィルタランプレフィックス`:reduce`を、サブフィルタを繰り返し適用してアイテムのリストを単一のアイテムに平坦化するために使用される[[reduceオペレータ|reduce Operator]]と比較します">>
|
||||
|
||||
<<.tip """フィルタランプレフィックス`:reduce`、`:sort`、`:map`、`:filter`内では、変数<<.var currentTiddler>>は処理中のTiddlerのタイトルに設定されます。<br>サブフィルタ外のcurrentTiddlerの値は、変数<<.var "..currentTiddler">>で使用できます <<.from-version "5.2.0">>""" >>
|
||||
|
||||
参照: [[交換可能なフィルターランプレフィックス|Interchangeable Filter Run Prefixes]]
|
||||
@@ -0,0 +1,20 @@
|
||||
created: 20230318135743766
|
||||
from-version: 5.1.23
|
||||
modified: 20250417105150020
|
||||
original-modified: 20230322140708372
|
||||
rp-input: 前回のフィルタランからのすべてのタイトル
|
||||
rp-output: アウトプットタイトルは主に、前回のフィルタランのアウトプットに[[重複排除して追加|Dominant Append]]されます。
|
||||
rp-purpose: Tiddlerセットの重複排除した結合
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Or Filter Run Prefix
|
||||
ja-title: orフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":or" | - )
|
||||
[["ラン"|"Filter Run Prefix"]]
|
||||
"""/>
|
||||
|
||||
:or プレフィックスはプレフィックスを全く使用しないのと同じです。[[フィルタランプレフィックスのショートカット|Shortcut Filter Run Prefix]]で`run`を参照してください
|
||||
@@ -0,0 +1,29 @@
|
||||
created: 20211124151912931
|
||||
modified: 20250419111355942
|
||||
original-modified: 20230305125430544
|
||||
tags: [[Reduce Filter Run Prefix]]
|
||||
title: Reduce Filter Run Prefix (Examples)
|
||||
ja-title: reduceフィルタランプレフィックス(例)
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\define multiply-input() [multiply<accumulator>]
|
||||
|
||||
次の例では、これらのデータTiddlerを使用します:
|
||||
|
||||
<ul>
|
||||
<$list filter="[tag[shopping]!has[draft.of]]">
|
||||
<li>
|
||||
''<$link><$text text=<<currentTiddler>>/></$link>'' quantity: <$text text={{!!quantity}}/>, price: <$text text={{!!price}}/>
|
||||
</li>
|
||||
</$list>
|
||||
</ul>
|
||||
|
||||
<<.operator-example 1 "[tag[shopping]] :reduce[get[quantity]add<accumulator>]">>
|
||||
<<.operator-example 2 "[tag[shopping]] :reduce[get[price]multiply{!!quantity}add<accumulator>]">>
|
||||
<<.operator-example 3 "[tag[shopping]] :reduce[<index>compare:number:gt[0]then<accumulator>addsuffix[, ]addsuffix<currentTiddler>else<currentTiddler>]" "最初の項目に対して他の項目とは異なる動作をさせるために`<index>`を使用します。これはあくまでもデモンストレーションです。このタスクを実行するには、[[joinオペレータ|join Operator]]を使うのがよいです">>
|
||||
<<.operator-example 4 "[tag[non-existent]] :reduce[get[price]multiply{!!quantity}add<accumulator>]" "空のインプットは空のアウトプットを生成します">>
|
||||
<<.operator-example 5 "[tag[non-existent]] :reduce[get[price]multiply{!!quantity}add<accumulator>] :else[[0]]" "インプットが空の場合に確実にアウトプットするために`:else`使用します">>
|
||||
|
||||
<$macrocall $name=".tip" _="""[[reduceオペレータ|reduce Operator]]とは異なり、`:reduce`プレフィックスはaccumulatorの初期値を指定できないため、初期値は常に空(数学オペレータでは0として扱われます)になります。したがって`=1 =2 =3 :reduce[multiply<accumulator>]`は、6ではなく0が生成されます。accumulatorの初期値を指定する必要がある場合は、[[reduceオペレータ|reduce Operator]]を使用します。"""/>
|
||||
<<.operator-example 6 "=1 =2 =3 :reduce[multiply<accumulator>]" "空の初期値は数学オペレータによって0として扱われます">>
|
||||
<<.operator-example 7 "=1 =2 =3 +[reduce<multiply-input>,[1]]" "正しい結果を得るためには初期値の設定が必要な場合があります">>
|
||||
@@ -0,0 +1,49 @@
|
||||
created: 20211124151912931
|
||||
from-version: 5.1.23
|
||||
modified: 20250417105804821
|
||||
original-modified: 20230710073305239
|
||||
rp-input: 前回のフィルタランからのすべてのフィルタアウトプット
|
||||
rp-output: 累積された単一アイテム
|
||||
rp-purpose: 各インプットタイトルにフィルタランを繰り返し適用して、前回までのすべてのフィルタアウトプットを単一の項目に置き換え
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Reduce Filter Run Prefix
|
||||
ja-title: reduceフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":reduce" | - )
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
|
||||
前回のランからの各インプットタイトルは、順番にこのランに渡されます。このランへの以前の呼び出しの結果は、変数<<.var accumulator>>を介して次の呼び出しで使用できます。このランへの最後の呼び出しの結果がアウトプットとして返されます。典型的な使用法は、各インプットタイトルの特定のフィールドの値を合計することです。
|
||||
|
||||
上記のように、数式を各インプットタイトルに繰り返し適用して、これまでのすべてのフィルタアウトプットを1つの項目に置き換えます。
|
||||
|
||||
フィルタラン内では、次の変数を使用できます:
|
||||
|
||||
* <<.var accumulator>> - 前回のフィルタランの結果
|
||||
* <<.var currentTiddler>> - インプットタイトル
|
||||
* <<.var ..currentTiddler>> - フィルタラン外での変数`currentTiddler`の値。 <<.from-version "5.2.0">>
|
||||
* <<.var index>> - 現在のリスト項目の数値インデックス(リストの最初の項目は0)
|
||||
* <<.var revIndex>> - 現在のリスト項目の逆の数値インデックス(リストの最後の項目は0)
|
||||
* <<.var length>> - インプットリストの長さの合計
|
||||
|
||||
<<.tip "名前付きフィルタランプレフィックス`:reduce`を、サブフィルタを繰り返し適用して項目リストを1つの項目に平坦化するために使用される[[reduceオペレータ|reduce Operator]]`:reduce`と比べてください。">>
|
||||
|
||||
```
|
||||
[tag[shopping]] :reduce[get[quantity]add<accumulator>]
|
||||
```
|
||||
|
||||
は以下と同等です:
|
||||
|
||||
```
|
||||
\define num-items() [get[quantity]add<accumulator>]
|
||||
|
||||
[tag[shopping]reduce<num-items>]
|
||||
```
|
||||
|
||||
[[reduceフィルタランプレフィックス(例)|Reduce Filter Run Prefix (Examples)]]
|
||||
@@ -0,0 +1,30 @@
|
||||
created: 20230305131705188
|
||||
modified: 20250510102220175
|
||||
original-modified: 20230710074438655
|
||||
tags: [[Filter Run Prefix]]
|
||||
title: Shortcut Filter Run Prefix
|
||||
ja-title: ショートカットフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
ショートカットのプレフィックスはタイピングが速いため、上級ユーザーによく使用されますが、経験の浅いユーザーには読みにくいという欠点があります。そのため、より詳細な情報を持つ[[名前付きプレフィックス|Named Filter Run Prefix]]が作成されました。ショートカットと名前付きフィルタランプレフィックスは、以下の表に示すように互換性があります。
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
(-|:"+"|"-"|"~"|"=")
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
ランに次の内容が含まれている場合:
|
||||
|
||||
* プレフィックスが無い場合、アウトプットタイトルはフィルタのアウトプットに[[優先的に追加|Dominant Append]]されます
|
||||
|
||||
* プレフィックス`+`は、前回までのフィルタアウトプットをインプットとして受け取り、そのアウトプットはこれまでのすべてのフィルタアウトプットを<<.em "置き換え">>、次のランのインプットを形成します
|
||||
|
||||
* プレフィックス`-`は、アウトプットタイトルがフィルタのアウトプットから<<.em 取り除か>>れます(そのようなTiddlerが存在する場合)
|
||||
|
||||
* プレフィックス`~`は、フィルタアウトプットが空リストの場合、ランの結果のタイトルがフィルタアウトプットに[[優先的に追加|Dominant Append]]されます。フィルタアウトプットが空リストでない場合、ランは無視されます。<<.from-version "5.1.18">>
|
||||
|
||||
* プレフィックス`=`は、アウトプットタイトルが重複排除されずにフィルタのアウトプットに追加されます。<<.from-version "5.1.20">>
|
||||
|
||||
{{Interchangeable Filter Run Prefixes}}
|
||||
@@ -0,0 +1,35 @@
|
||||
created: 20210428074912172
|
||||
modified: 20250420104606860
|
||||
original-modified: 20230315165343329
|
||||
tags: [[Sort Filter Run Prefix]]
|
||||
title: Sort Filter Run Prefix (Examples)
|
||||
ja-title: sortフィルタランプレフィックス(例)
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
タイトルの長さで並べ替え:
|
||||
|
||||
<<.operator-example 1 "[all[tiddlers]] :sort:number[length[]] +[limit[10]]">>
|
||||
|
||||
タイトルの長さを逆順に並べ替え:
|
||||
|
||||
<<.operator-example 2 "[all[tiddlers]] :sort:number:reverse[length[]] +[limit[10]]">>
|
||||
|
||||
テキストの長さで並べ替え:
|
||||
|
||||
<<.operator-example 3 "[all[tiddlers]] :sort:number[get[text]length[]] +[limit[10]]">>
|
||||
|
||||
修正日の新しい順に並べ替え:
|
||||
|
||||
<<.operator-example 4 "[tag[Field Operators]] :sort:date[get[modified]else[19700101]] +[limit[10]]">>
|
||||
|
||||
タイトルで並べ替え:
|
||||
<<.operator-example 5 "[tag[Field Operators]] :sort:string:casesensitive[get[caption]] +[limit[10]]">>
|
||||
|
||||
タイトルの逆順に並べ替え:
|
||||
<<.operator-example 6 "[tag[Field Operators]] :sort:string:casesensitive,reverse[get[caption]] +[limit[10]]">>
|
||||
|
||||
大文字と小文字を区別してテキストとして並べ替え:
|
||||
<<.operator-example 7 "Apple Banana Orange Grapefruit guava DragonFruit Kiwi apple orange :sort:string:casesensitive[{!!title}]">>
|
||||
|
||||
大文字と小文字を区別せずにテキストとして並べ替え:
|
||||
<<.operator-example 8 "Apple Banana Orange Grapefruit guava DragonFruit Kiwi apple orange :sort:string:caseinsensitive[{!!title}]">>
|
||||
@@ -0,0 +1,61 @@
|
||||
created: 20210428083929749
|
||||
from-version: 5.2.0
|
||||
modified: 20250419111702297
|
||||
original-modified: 20240717120111427
|
||||
rp-input: 前回までのすべてのランのフィルタアウトプット
|
||||
rp-output: アウトプットタイトルは、以前のフィルタランのアウトプットを置き換え
|
||||
rp-purpose: 各項目に対して実行されたこのフィルタの評価結果によってインプットタイトルを並べ替え
|
||||
rp-suffix: :sortフィルタランプレフィックスはリッチサフィックスを使用します。詳細については以下を参照
|
||||
rp-suffix-name: S
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Sort Filter Run Prefix
|
||||
ja-title: sortフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
( ":sort" )
|
||||
( ":" )
|
||||
( : "string" | "alphanumeric" | "number" | "integer" | "version" | "date" )
|
||||
( ":" )
|
||||
{
|
||||
(
|
||||
(
|
||||
( : "caseinsensitive" /"stringとalphanumericには必須"/ | "casesensitive" /"stringとalphanumericには必須"/)
|
||||
| "reverse" /"オプション"/
|
||||
)
|
||||
)
|
||||
+","
|
||||
}
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
前回のランからインプットされた各タイトルは、今回のランに順番に渡されます。フィルタランは、インプットタイトルをソートに必要な形式に変換します。例えば、フィルタラン`[length[]]`は各インプットタイトルをその長さを表す数値に変換し、インプットタイトルを長さに基づいてソートします。
|
||||
|
||||
フィルタラン内では、<<.var currentTiddler>>変数が処理中のTiddlerのタイトルに設定されていることに注意してください。これにより、`:sort:number[{!!value}divide{!!cost}]`のようなフィルタランを計算に使用できます。ラン外の<<.var currentTiddler>>の値は、<<.var "..currentTiddler">>変数で使用できます。
|
||||
|
||||
`:sort` <<.place S>>フィルタランプレフィックスでは、複数のサフィックスを許可する拡張構文が使用されます。その一部は必須です:
|
||||
|
||||
```
|
||||
:sort:<type>:<flaglist>[...filter run...]
|
||||
|
||||
```
|
||||
|
||||
* ''type'': 必須。項目の比較方法を決定し、''string''、''alphanumeric''、''number''、''integer''、''version''、''date''のいずれかになります。
|
||||
|
||||
* ''flaglist'': 次のフラグのコンマ区切りリスト:
|
||||
|
||||
** ''casesensitive'' または ''caseinsensitive'' (typeが`string`や`alphanumeric`のとき必須)。
|
||||
*** フラグがない場合、デフォルトは: //caseinsensitive// です。
|
||||
*** 明確にするために、このパラメータは常に定義する必要があります。
|
||||
|
||||
** フィルター実行の順序を反転するには、''reverse''を使用します(オプション)。
|
||||
|
||||
<<.tip """`:sort`プレフィックス付きのフィルタランは、''渡された項目と同じ数の項目が返される''ことに注意してください。特に、[[getオペレータ|get Operator]]を使用してフィールドの値を取得する場合は、[[elseオペレータ|else Operator]]を使用してフィールド値が欠落するのを防ぐと便利です。例えば`...[get[myfield]else[default-value]]`。<br><br>
|
||||
|
||||
''missing''エントリは''ゼロ''または''空文字列''として扱われます。
|
||||
|
||||
参照: <<.olink sortsub>>オペレータ
|
||||
|
||||
[[例|Sort Filter Run Prefix (Examples)]]
|
||||
@@ -0,0 +1,53 @@
|
||||
created: 20230617183745774
|
||||
modified: 20250504103912315
|
||||
original-modified: 20230617183745774
|
||||
tags: [[Then Filter Run Prefix]]
|
||||
title: Then Filter Run Prefix (Examples)
|
||||
ja-title: thenフィルタランプレフィックス(例)
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
|
||||
!! 条件実行
|
||||
|
||||
<<.op :then>>フィルタランプレフィックスを使用すると、ネストした[[ListWidget]]や[[WikiText内のマクロ定義|Macro Definitions in WikiText]]の必要性を回避できます。
|
||||
|
||||
<$macrocall $name='wikitext-example-without-html'
|
||||
src="""<$edit-text field="search" placeholder="Search title"/>
|
||||
|
||||
<$let searchTerm={{!!search}}>
|
||||
<$list filter="[<searchTerm>minlength[3]] :then[!is[system]search:title<searchTerm>]" template="$:/core/ui/ListItemTemplate"/>
|
||||
</$let>"""/>
|
||||
|
||||
|
||||
!! 条件(サブ)フィルタ
|
||||
|
||||
<<.op :then>>フィルターランプレフィックスを<<.op :else>>プレフィックスと組み合わせて条件フィルタを作成できます。この例では、<<.var searchSubfilter>>内の検索に使用されるフィールドは[[$:/temp/searchFields]]の値に依存し、<<.var sortSubfilter>>による並べ替え順序は[[$:/temp/searchSort]]の値に依存します。これらのTiddlerの値を設定するには、チェックボックスを使用します。
|
||||
|
||||
<<.tip "サブフィルタ内の各フィルタランは、<<.olink subfilter>>オペレータのインプットをインプットとして受け取ることに注意してください">>
|
||||
|
||||
<<.olink then>>と<<.olink else>>オペレータはサブフィルタを呼び出したり追加のフィルタステップを実行できないため、このようなアプリケーションには使用できません。
|
||||
|
||||
<$macrocall $name='wikitext-example-without-html'
|
||||
src="""<$checkbox tiddler="$:/temp/searchSort"
|
||||
field="text"
|
||||
checked="chrono" unchecked="alpha" default="alpha">
|
||||
時系列順に並べ替え(新しい順)
|
||||
</$checkbox><br/>
|
||||
<$checkbox tiddler="$:/temp/searchFields"
|
||||
field="text"
|
||||
checked="title" unchecked="default" default="title">
|
||||
<<.field title>>のみを検索
|
||||
</$checkbox><p/>
|
||||
<$let searchSubfilter="[{$:/temp/searchFields}match[default]] :then[search[prefix]] :else[search:title[prefix]]"
|
||||
sortSubfilter="[{$:/temp/searchSort}match[chrono]] :then[!nsort[modified]] :else[sort[title]]"
|
||||
limit=10 >
|
||||
<$list filter="[all[tiddlers]!is[system]subfilter<searchSubfilter>subfilter<sortSubfilter>first<limit>]">
|
||||
<$link/> (<$text text={{{ [{!!modified}format:date[YYYY-0MM-0DD]] }}} />)<br/>
|
||||
</$list>
|
||||
<$list filter="[all[tiddlers]!is[system]subfilter<searchSubfilter>rest<limit>count[]]">
|
||||
... and <<currentTiddler>> more.
|
||||
</$list>
|
||||
</$let>"""/>
|
||||
|
||||
時系列順に並べ替える(新しい順)
|
||||
検索titleのみ
|
||||
@@ -0,0 +1,41 @@
|
||||
created: 20210618133745003
|
||||
from-version: 5.3.0
|
||||
modified: 20250423104147235
|
||||
original-modified: 20230710074225410
|
||||
rp-input: <<.olink すべて>>のTiddlerタイトル
|
||||
rp-output: フィルタランのアウトプットは、空のリストでない限り、前回までのランのアウトプットを置き換えます(以下を参照)。
|
||||
rp-purpose: フィルタランへのインプットをそのアウトプットで置き換え、インプットがある場合にのみランを評価
|
||||
search:
|
||||
tags: [[Named Filter Run Prefix]]
|
||||
title: Then Filter Run Prefix
|
||||
ja-title: thenフィルタランプレフィックス
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<$railroad text="""
|
||||
\start none
|
||||
\end none
|
||||
":then"
|
||||
[["ラン"|"Filter Run"]]
|
||||
"""/>
|
||||
|
||||
<<.op :then>>フィルターランプレフィックスは、前回までのすべてのフィルタランの結果をそのアウトプットに置き換えるために使用されます。
|
||||
|
||||
前回までのすべてのランの結果が空のリストの場合、<<.op :then>>プレフィックス付きフィルタランは評価されません。
|
||||
|
||||
<<.op :then>>プレフィックス付きフィルタランのアウトプット自体が空のリストである場合、前回までのすべてのフィルタランの結果は変更されずに渡されます。
|
||||
|
||||
<<.tip "空の文字列項目が1つ含まれるリストは空のリストではないことに注意してください。">>
|
||||
|
||||
!! <<.op :then>>ランプレフィックスと<<.olink then>>オペレータの比較
|
||||
|
||||
<<.op then>>オペレータと<<.op :then>>プレフィックス付きフィルタランの主な違いは、オペレータはインプット[[タイトルリスト|Title List]]の//各項目//をそのパラメータで置き換えるのに対し、<<.op :then>>オペレータは//インプットリスト全体//をそのラン結果で置き換える点です。
|
||||
|
||||
|doc-op-comparison tc-center|k
|
||||
| !<<.op :then>>フィルタランプレフィックス | !<<.op then>>オペレータ |
|
||||
|^<<.operator-example m1-1 "[tag[WikiText]] :then[[true]]">>|^<<.operator-example m1-2 "[tag[WikiText]then[true]]">><p>これらを同等にするには、追加のフィルタステップを追加します:</p> <<.operator-example m1-3 "[tag[WikiText]count[]compare:number:gt[0]then[true]]">>|
|
||||
|
||||
|
||||
[[thenフィルタランプレフィックス(例)|Then Filter Run Prefix (Examples)]]
|
||||
|
||||
参照: [[elseフィルタランプレフィックス|Else Filter Run Prefix]] | [[thenオペレータ|then Operator]] と [[elseオペレータ|else Operator]]
|
||||
|
||||
@@ -8,42 +8,53 @@ description: Under development
|
||||
|
||||
//[[See GitHub for detailed change history of this release|https://github.com/TiddlyWiki/TiddlyWiki5/compare/v5.3.6...master]]//
|
||||
|
||||
|
||||
! Major Improvements
|
||||
This is a minor bug fix release before introducing the major changes planned for v5.4.0. Those changes do involve some minor breaks in backwards compatibility so this release is intended to be a stable point for users before they upgrade.
|
||||
|
||||
! Translation improvements
|
||||
|
||||
* Chinese
|
||||
* French
|
||||
* German
|
||||
* Japanese
|
||||
|
||||
! Plugin Improvements
|
||||
|
||||
|
||||
! Widget Improvements
|
||||
|
||||
*
|
||||
|
||||
! Filter Improvements
|
||||
|
||||
*
|
||||
* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8816">> 'disabled' attribute to SelectWidget and BrowseWidget
|
||||
* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8819">> 'tabindex' attribute to BrowseWidget, RangeWidget, CheckboxWidget and RadioWidget
|
||||
|
||||
! Usability Improvements
|
||||
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8783"> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/commit/028c80782d105beb90f5d58a7f22e865c7e8c6f4">>) [[Hidden Setting: Default Type for Missing Tiddlers]]
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8783">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/commit/028c80782d105beb90f5d58a7f22e865c7e8c6f4">>) [[Hidden Setting: Default Type for Missing Tiddlers]]
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8837">> [[incorrect|https://localizejs.com/articles/why-using-flag-icons-can-confuse-your-users/]] use of national flags to represent languages
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8078">> vertical spacing of sidebar "Tools" tab when displayed in the story river, and add some utility CSS classes
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9102">> control panel setting to specify the default tiddler info tab
|
||||
|
||||
! Palette Improvements
|
||||
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8661">> DiffTextWidget colours to several core palettes
|
||||
* <<.link-badge-improved "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8807">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8911">>) Flexoki palette with additional colours
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8837">> [[incorrect|https://localizejs.com/articles/why-using-flag-icons-can-confuse-your-users/]] use of national flags to represent languages
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9007">> Vanilla palette with resolvable #RRGGBB values
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9053">> test case palette entries to the remaining core palettes
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9020">> (and <<.link-badge-here "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9020">>) ~SolarizedLight and ~SolarizedDark palettes to improve readability of stability badges and the download button
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9016">> Nord palette to improve accessibility and make the editor border visible
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9009">> ~ContrastDark palette to improve accessibility
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9018">> ~SolarFlare palette, fix plugin button hover and sidebar icon hover
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9017">> Rocker palette, make toolbar buttons visible, sidebar tabs adjusted
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9014">> ~GruvboxDark palette, improve accessibility contrast, add network activity
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9013">> ~DesertSand palette, fix some errors, make values resolvable
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9012">> ~DarkPhotos palette, make colours resolvable
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9011">> Cupertino dark palette
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9010">> ~ContrastLight palette, slightly improved contrast
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9008">> Blanca palette with resolvable values, add missing indices, slight colour adjustments
|
||||
|
||||
! Hackability Improvements
|
||||
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8768">> several macros such as [[colour-picker Macro]], [[dumpvariables Macro]], [[image-picker Macro]], [[translink Macro]], [[tree Macro]] and [[list-links-draggable Macro]] to use the newer syntax
|
||||
* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8780">> rendered plain text template to support more languages
|
||||
* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8816">> 'disabled' attribute to SelectWidget and BrowseWidget
|
||||
* <<.link-badge-extended "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8819">> 'tabindex' attribute to BrowseWidget, RangeWidget, CheckboxWidget and RadioWidget
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8821">> the editor link dropdown to use newer syntax
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8911">> support for images in AVIF format
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8912">> support for custom MIME types to the [[WidgetMessage: tm-copy-to-clipboard]]
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9076">> a CSS class to the import table
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9098">> a CSS class to help style links in modals
|
||||
|
||||
! Bug Fixes
|
||||
|
||||
@@ -63,31 +74,49 @@ description: Under development
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8955">> refresh problem with "save" button
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8721">> [[list-tagged-draggable Macro]] to use the "caption" field if available
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8959">> problem with missing expandable arrow in [[toc-selective-expandable|Table-of-Contents Macros]]
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/5930">> the default value does not working for the CheckboxWidget if it is bound to an index in a data tiddler
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/5930">> the default value does not work for the CheckboxWidget if it is bound to an index in a data tiddler
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8970">> [[median Operator]] to order values as numbers, not strings
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8958">> red screen of embarrassment error with moduleproperty filter operator
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8946">> red screen of embarrassment when using a [[startup action|StartupActions]] with the [[now Macro]]
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9026">> some download file types not being specified
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9032">> configuration filter in $:/AdvancedSearch "Standard" tab
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9025">> stringification of derived fields for [[tiddlywiki.files Files]]
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8739">> broken tag pill styling in edit mode after v5.3.3
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/9105">> adding external themes to the [[Highlight Plugin]]
|
||||
|
||||
! Node.js Improvements
|
||||
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8789">> incorrect redirect when combining a custom [[path-prefix|WebServer Parameter: path-prefix]] with manual HTTP Basic Authentication via the [[/login-basic|WebServer API: Force Basic Authentication Login]] endpoint
|
||||
* <<.link-badge-fixed "https://github.com/TiddlyWiki/TiddlyWiki5/commit/55dbce10f461c41240d2c6ee5a49bd6ed0edc15b">> crash loading large files
|
||||
|
||||
! Performance Improvements
|
||||
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/issues/8952">> plugin editions to use the external core
|
||||
|
||||
! Developer Improvements
|
||||
|
||||
*
|
||||
* <<.link-badge-updated "https://github.com/TiddlyWiki/TiddlyWiki5/pull/8978">> Widget.prototype.addEventListener not overwriting old listeners
|
||||
* <<.link-badge-added "https://github.com/TiddlyWiki/TiddlyWiki5/pull/7596">> configurations for [[dprint|https://dprint.dev/]] and [[eslint|https://eslint.org/]] (partially reverted in [[#8987|https://github.com/TiddlyWiki/TiddlyWiki5/pull/8987]])
|
||||
|
||||
! Acknowledgements
|
||||
|
||||
[[@Jermolene|https://github.com/Jermolene]] would like to thank the contributors to this release who have generously given their time to help improve TiddlyWiki:
|
||||
|
||||
<<.contributors """
|
||||
bobjtls
|
||||
DesignThinkerer
|
||||
flibbles
|
||||
galenhuntington
|
||||
hoelzro
|
||||
IchijikuIchigo
|
||||
jbaldus
|
||||
jeremyredhead
|
||||
jrbntt
|
||||
jryans
|
||||
kookma
|
||||
Leilei332
|
||||
linonetwo
|
||||
matthewsalmon
|
||||
michaeljmcd
|
||||
opn
|
||||
pmario
|
||||
@@ -95,4 +124,5 @@ Rhys-T
|
||||
saqimtiaz
|
||||
well-noted
|
||||
xcazin
|
||||
yaisog
|
||||
""">>
|
||||
|
||||
@@ -3,20 +3,16 @@
|
||||
"plugins": [
|
||||
"tiddlywiki/browser-sniff",
|
||||
"tiddlywiki/help",
|
||||
"tiddlywiki/stacked-view",
|
||||
"tiddlywiki/powered-by-tiddlywiki",
|
||||
"tiddlywiki/internals",
|
||||
"tiddlywiki/highlight",
|
||||
"tiddlywiki/bibtex",
|
||||
"tiddlywiki/savetrail",
|
||||
"tiddlywiki/external-attachments",
|
||||
"tiddlywiki/dynaview",
|
||||
"tiddlywiki/dynannotate",
|
||||
"tiddlywiki/codemirror",
|
||||
"tiddlywiki/menubar",
|
||||
"tiddlywiki/jszip",
|
||||
"tiddlywiki/confetti",
|
||||
"tiddlywiki/dynannotate",
|
||||
"tiddlywiki/tour"
|
||||
],
|
||||
"themes": [
|
||||
|
||||
@@ -7,9 +7,9 @@ title: Output
|
||||
|
||||
\whitespace trim
|
||||
<$set name="var with spaces" value="spaces">
|
||||
<$let project="TiddlyWiki" disabled="true" var-with-dashes="dashes">
|
||||
<$let project="TiddlyWiki" disabled="true" $tiddler="Getting Started" var-with-dashes="dashes">
|
||||
<div class=`$(project)$
|
||||
${ [[Hello]addsuffix[There]] }$` attrib=`myvalue` otherattrib=`$(1)$` blankattrib=`` quoted="here" disabled=```$(disabled)$``` dashes=`$(var-with-dashes)$` spaces=`$(var with spaces)$`>
|
||||
${ [[Hello]addsuffix[There]] }$` attrib=`myvalue` otherattrib=`$(1)$` blankattrib=`` quoted="here" disabled=```$(disabled)$``` dollar=`p-$($tiddler)$-s` dashes=`$(var-with-dashes)$` spaces=`$(var with spaces)$`>
|
||||
</div>
|
||||
</$let>
|
||||
</$set>
|
||||
@@ -18,4 +18,4 @@ ${ [[Hello]addsuffix[There]] }$` attrib=`myvalue` otherattrib=`$(1)$` blankattri
|
||||
title: ExpectedResult
|
||||
|
||||
<p><div attrib="myvalue" blankattrib="" class="TiddlyWiki
|
||||
HelloThere" dashes="dashes" disabled="true" otherattrib="" quoted="here" spaces="spaces"></div></p>
|
||||
HelloThere" dashes="dashes" disabled="true" dollar="p-Getting Started-s" otherattrib="" quoted="here" spaces="spaces"></div></p>
|
||||
@@ -1139,6 +1139,15 @@ Tests the filtering mechanism.
|
||||
// Non string properties should get toStringed.
|
||||
expect(wiki.filterTiddlers("[[$:/core/modules/commands/init.js]moduleproperty[info]]").join(" ")).toBe('{"name":"init","synchronous":true}');
|
||||
});
|
||||
|
||||
it("should minimize unnecessary variable lookup", function() {
|
||||
var widget = wiki.makeWidget();
|
||||
var getVar = spyOn(widget, "getVariableInfo").and.callThrough();
|
||||
expect(wiki.filterTiddlers("[all[]prefix[anything]]", widget).length).toBe(0);
|
||||
// We didn't use any indirect operands or variables.
|
||||
// No variable lookup should have occurred.
|
||||
expect(getVar).not.toHaveBeenCalled();
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 826 B |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 577 B |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
@@ -0,0 +1,191 @@
|
||||
body {
|
||||
font-size: 62.5%;
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #BC4378;
|
||||
}
|
||||
|
||||
.ts-loggedin .ts-openidlogin,
|
||||
.ts-loggedin .ts-login {
|
||||
display: none;
|
||||
}
|
||||
|
||||
form input {
|
||||
width: 90px;
|
||||
border: solid 1px #CCC;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.ts-login input,
|
||||
.ts-logout input {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
form input[type=text],
|
||||
form input[type=password] {
|
||||
border-radius: 2px;
|
||||
padding: 0.1em 0.5em;
|
||||
}
|
||||
|
||||
form input[type=submit] {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.ts-logout,
|
||||
.ts-logout form {
|
||||
font-size: 1.6em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.ts-logout form {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#app-list {
|
||||
background: #F0F4F8;
|
||||
list-style: none;
|
||||
padding: 0; margin: 0;
|
||||
}
|
||||
|
||||
#app-list li {
|
||||
height: 4.5em;
|
||||
line-height: 4.5em;
|
||||
background: url(/bags/common/tiddlers/double_angle_lightblue_42x42.png) no-repeat 90% #F0F4F8;
|
||||
background-size: 24px 24px;
|
||||
}
|
||||
|
||||
#app-list li:hover {
|
||||
cursor: pointer;
|
||||
background: url(/bags/common/tiddlers/double_angle_lightblue_42x42.png) no-repeat 90% #0082AF;
|
||||
background-size: 24px 24px;
|
||||
}
|
||||
|
||||
#app-list li form,
|
||||
#app-list li a {
|
||||
display: block;
|
||||
height: 100%;
|
||||
font-size: 2em;
|
||||
text-decoration: none;
|
||||
color: #8C9DA7;
|
||||
width: 100%;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
#app-list li input {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
#app-list li:hover a {
|
||||
color: #E56AA0;
|
||||
}
|
||||
|
||||
.tsbackstage #app-list li:hover a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#app-list .app-img {
|
||||
position: relative;
|
||||
top: 0.2125em;
|
||||
margin: 0 1.25em 0 1em;
|
||||
height: 1.25em;
|
||||
width: 1.25em;
|
||||
}
|
||||
|
||||
#app-list .search .app-img {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.ts-loggedin .login-method:target,
|
||||
.login-method {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.login-method {
|
||||
display: block;
|
||||
}
|
||||
.login-method-hide {
|
||||
display: none;
|
||||
}
|
||||
.login-method p {
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
.tsbackstage .message {
|
||||
color: #4C4A54;
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.tsbackstage .message a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.btn {
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.btn-action {
|
||||
background: #0082AF;
|
||||
color: #fff;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.btn-action:hover {
|
||||
box-shadow: 0 0 3px rgba(0,0,0,.5);
|
||||
}
|
||||
|
||||
form input.btn-system {
|
||||
background: #F8F9F9;
|
||||
color: #4C4A54;
|
||||
border: 1px solid rgba(0,0,0,.2);
|
||||
}
|
||||
|
||||
.btn-system:hover {
|
||||
color: #000;
|
||||
cursor: pointer;
|
||||
box-shadow: 0 0 3px rgba(0,0,0,.25);
|
||||
}
|
||||
|
||||
.search form {
|
||||
height: 4.5em;
|
||||
}
|
||||
|
||||
.search input {
|
||||
font-size: 1em;
|
||||
border: none;
|
||||
outline: none;
|
||||
padding: 0.2em 0.5em;
|
||||
background: transparent;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.search:hover input {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.search input:focus {
|
||||
-webkit-box-shadow: inset 0 0 8px rgba(140,157,167,0.75);
|
||||
-moz-box-shadow: inset 0 0 8px rgba(140,157,167,0.75);
|
||||
box-shadow: inset 0 0 8px rgba(140,157,167,0.75);
|
||||
}
|
||||
|
||||
.search:hover input:focus {
|
||||
-webkit-box-shadow: inset 0 0 8px rgba(255,255,255,0.5);
|
||||
-moz-box-shadow: inset 0 0 8px rgba(255,255,255,0.5);
|
||||
box-shadow: inset 0 0 8px rgba(255,255,255,0.5);
|
||||
}
|
||||
|
||||
.logindetails {
|
||||
background: #fff;
|
||||
padding: 1em 1em 2em;
|
||||
box-shadow: 0 0 6px 0px rgba(0, 0, 0, 0.25);
|
||||
z-index: 1;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.logindetails p {
|
||||
margin: 0;
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
<!DOCTYPE html>
|
||||
<!-- saved from url=(0078)http://interview.tiddlyspace.com/bags/common/tiddlers/backstage#userpass-login -->
|
||||
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<link rel="stylesheet" href="./normalize.css">
|
||||
<link rel="stylesheet" href="./app.css">
|
||||
</head>
|
||||
<body class="tsbackstage ts-loggedin ts-member">
|
||||
<div class="logindetails">
|
||||
<form class="ts-login login login-method" action="http://interview.tiddlyspace.com/bags/common/tiddlers/backstage" autocomplete="off" id="userpass-login">
|
||||
<p>login via <a class="toggle-form" href="http://interview.tiddlyspace.com/bags/common/tiddlers/backstage#openid-login">openid</a></p>
|
||||
<input autocapitalize="off" autocorrect="off" type="text" name="username" placeholder="username">
|
||||
<input autocapitalize="off" autocorrect="off" type="password" name="password" placeholder="password">
|
||||
<input type="hidden" name="redirect" value="/bags/common/tiddlers/backstage?action=login#refreshParent">
|
||||
<input type="submit" class="btn btn-action" value="Log In">
|
||||
</form>
|
||||
<form class="ts-openidlogin login-method login-method-hide" id="openid-login" method="post" action="http://interview.tiddlyspace.com/challenge/tiddlywebplugins.tiddlyspace.openid">
|
||||
<p>login with <a class="toggle-form" href="http://interview.tiddlyspace.com/bags/common/tiddlers/backstage#userpass-login">username and password</a></p>
|
||||
<input name="tiddlyweb_redirect" type="hidden" value="/bags/common/tiddlers/backstage">
|
||||
<input class="openid" autocapitalize="off" autocorrect="off" type="text" name="openid" placeholder="your openid">
|
||||
<input class="button btn btn-action" type="submit" value="Sign In">
|
||||
<a class="openid-help" href="http://openid.net/get-an-openid/">What is an open id?</a>
|
||||
</form>
|
||||
<div class="ts-logout logout"><span class="message">Welcome back <a href="http://jermolene.tiddlyspace.com/" target="_parent">jermolene</a><span>!</span></span>
|
||||
<form method="post" action="http://interview.tiddlyspace.com/logout">
|
||||
<input type="hidden" name="tiddlyweb_redirect" value="/bags/common/tiddlers/backstage?action=login#refreshParent">
|
||||
<input type="submit" class="btn btn-system" value="Log out">
|
||||
<input type="hidden" name="csrf_token" value="2016120917:jermolene:8cef480d1bd2bf774327ae085b2efa8bb7937fd1"></form>
|
||||
</div>
|
||||
</div>
|
||||
<div><ul id="app-list">
|
||||
<li class="search">
|
||||
<form method="GET" target="_blank" action="http://interview.tiddlyspace.com/hsearch">
|
||||
<img src="./search.png" alt="Search Icon" class="app-img">
|
||||
<input type="text" name="q" placeholder="Search">
|
||||
|
||||
</form></li>
|
||||
<li class="help">
|
||||
<a href="http://help.tiddlyspace.com/" target="_blank">
|
||||
<img src="./help.png" alt="Help SiteIcon" class="app-img">Help
|
||||
</a>
|
||||
</li>
|
||||
<li class="space">
|
||||
<a href="http://interview.tiddlyspace.com/_space" target="_blank">
|
||||
<img src="./SiteIcon(24)" alt="Space SiteIcon" class="app-img">This space
|
||||
</a>
|
||||
</li>
|
||||
<li class="account"><a target="_blank" href="http://jermolene.tiddlyspace.com/_account"><img class="app-img" alt="SiteIcon for jermolene" src="./SiteIcon">Your account</a></li></ul></div>
|
||||
<script type="text/javascript" src="./jquery.js"></script>
|
||||
<script type="text/javascript" src="./chrjs"></script>
|
||||
<script type="text/javascript" src="./chrjs.users"></script>
|
||||
<script type="text/javascript" src="./chrjs.space"></script>
|
||||
<script type="text/javascript" src="./chrjs.identities"></script>
|
||||
<script type="text/javascript" src="./ts.js"></script>
|
||||
<script src="./status.js"></script>
|
||||
<script type="text/javascript">
|
||||
if(window.location.hash === "#refreshParent") {
|
||||
window.location.hash = "";
|
||||
window.parent.location.reload();
|
||||
}
|
||||
var li, siteiconurl, link, host;
|
||||
ts.init(function(ts) {
|
||||
host = ts.getHost(ts.user.name);
|
||||
$(document.body).show();
|
||||
window.location.hash = "#userpass-login";
|
||||
if (ts.user.anon) {
|
||||
$('.toggle-form').click(function(ev) {
|
||||
$(this).closest('form').addClass('login-method-hide')
|
||||
.siblings('form').removeClass('login-method-hide');
|
||||
ev.preventDefault();
|
||||
});
|
||||
}
|
||||
if ($(document.body).hasClass('ts-nonmember')) {
|
||||
$('.write').remove();
|
||||
}
|
||||
if(!ts.user.anon) {
|
||||
li = $('<li class="account" />').appendTo("#app-list")[0];
|
||||
siteiconurl = host + '/bags/' + ts.user.name + '_public/tiddlers/SiteIcon';
|
||||
link = $('<a target="_blank" />').attr("href", host + "/_account").
|
||||
text("Your account").appendTo(li);
|
||||
$('<img class="app-img">').attr("alt", 'SiteIcon for ' + ts.user.name).
|
||||
attr("src", siteiconurl).prependTo(link);
|
||||
}
|
||||
}, {});
|
||||
(function($) {
|
||||
$(function() {
|
||||
// send doc height to parent window
|
||||
var totalHeight = $("html").height();
|
||||
if(self !== top && !!window.postMessage) {
|
||||
parent.postMessage(totalHeight, "*");
|
||||
}
|
||||
});
|
||||
}(jQuery));
|
||||
</script>
|
||||
|
||||
</body></html>
|
||||
@@ -0,0 +1,360 @@
|
||||
/***
|
||||
Adds the app switcher to a TiddlySpace app.
|
||||
|
||||
Makes use of tw.Stylesheet
|
||||
Triple licensed under the BSD, MIT and GPL licenses:
|
||||
http://www.opensource.org/licenses/bsd-license.php
|
||||
http://www.opensource.org/licenses/mit-license.php
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
***/
|
||||
(function() {
|
||||
|
||||
// Add or replace a style sheet
|
||||
// css argument is a string of CSS rule sets
|
||||
// options.id is an optional name identifying the style sheet
|
||||
// options.doc is an optional document reference
|
||||
// N.B.: Uses DOM methods instead of jQuery to ensure cross-browser comaptibility.
|
||||
var twStylesheet = function(css, options) {
|
||||
options = options || {};
|
||||
var id = options.id || "backstageStyleSheet";
|
||||
var doc = options.doc || document;
|
||||
var el = doc.getElementById(id);
|
||||
if(doc.createStyleSheet) { // IE-specific handling
|
||||
if(el) {
|
||||
el.parentNode.removeChild(el);
|
||||
}
|
||||
doc.getElementsByTagName("head")[0].insertAdjacentHTML("beforeEnd",
|
||||
' <style id="' + id + '" type="text/css">' + css + '</style>'); // fails without
|
||||
} else { // modern browsers
|
||||
if(el) {
|
||||
el.replaceChild(doc.createTextNode(css), el.firstChild);
|
||||
} else {
|
||||
el = doc.createElement("style");
|
||||
el.type = "text/css";
|
||||
el.id = id;
|
||||
el.appendChild(doc.createTextNode(css));
|
||||
doc.getElementsByTagName("head")[0].appendChild(el);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// detect background-size support
|
||||
// in <IE9 need to fallback to msfilter property
|
||||
function hasBgSizing() {
|
||||
var supported,
|
||||
elem = document.createElement('div');
|
||||
|
||||
document.body.appendChild(elem);
|
||||
elem.style.cssText = "background-size: cover;";
|
||||
supported = (elem.style.backgroundSize === undefined || elem.style.backgroundSize === null) ? false : true;
|
||||
// clean up
|
||||
elem.parentNode.removeChild(elem);
|
||||
return supported;
|
||||
}
|
||||
|
||||
// ms filters as fix for not supporting background-size property
|
||||
var msfilter_in = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/bags/tiddlyspace/tiddlers/privateAndPublicIcon', sizingMethod='scale')",
|
||||
msfilter_out = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/bags/tiddlyspace/tiddlers/publicIcon', sizingMethod='scale')";
|
||||
|
||||
var stylesheet = ["#tsbackstage {",
|
||||
" height: 256px; /* default value unless changed */",
|
||||
" z-index: 1000;",
|
||||
" position: relative;",
|
||||
"}",
|
||||
"",
|
||||
"#app-picker {",
|
||||
" cursor: pointer;",
|
||||
" position: absolute;",
|
||||
" right: 24px;",
|
||||
" top: 0px;",
|
||||
" width: 24px;",
|
||||
" height: 24px;",
|
||||
" background-size: 24px 24px;",
|
||||
" text-indent: -999px;",
|
||||
" overflow: hidden;",
|
||||
" z-index: 2000;",
|
||||
" border: none;",
|
||||
" opacity: 0.5;",
|
||||
"}",
|
||||
"",
|
||||
"#app-picker:hover {",
|
||||
" background-color: none !important;",
|
||||
" opacity: 1;",
|
||||
"}",
|
||||
"",
|
||||
".bs-popup {",
|
||||
" width: 100%;",
|
||||
" position: absolute;",
|
||||
" z-index: 1000;",
|
||||
" right: 10px;",
|
||||
" top: 36px;",
|
||||
"}",
|
||||
"",
|
||||
".bubble .description {",
|
||||
" margin-left: 70px;",
|
||||
" margin-top: 2px;",
|
||||
"}",
|
||||
"",
|
||||
".bubble {",
|
||||
" float: right;",
|
||||
" font-size: 0.9em;",
|
||||
" font-family: Georgia;",
|
||||
" position: relative;",
|
||||
" width: 300px;",
|
||||
" margin: 0px auto 0px auto;",
|
||||
" margin: top right bottom left;",
|
||||
" border: solid 1px rgb(200, 200, 200);",
|
||||
" border-radius: 4px;",
|
||||
" -webkit-box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
|
||||
" -moz-box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
|
||||
" -o-box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
|
||||
" -ms-box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
|
||||
" box-shadow: 0px 0px 4px rgba(0,0,0,.2);",
|
||||
" background-color: #F0F4F8;",
|
||||
"}",
|
||||
"",
|
||||
".ts-logout {",
|
||||
" display: none;",
|
||||
"}",
|
||||
".ts-loggedin .ts-logout {",
|
||||
" display: block;",
|
||||
"}",
|
||||
".arrow {",
|
||||
" border-width: 0 10px 10px;",
|
||||
" border-style: dashed dashed solid;",
|
||||
" width: 0;",
|
||||
" height: 0;",
|
||||
" border-color: transparent;",
|
||||
" display: inline-block;",
|
||||
" position: absolute;",
|
||||
" top: -10px;",
|
||||
" right: 16px;",
|
||||
" border-bottom-color: #fff;",
|
||||
"}",
|
||||
".bubble div.whitearrow {",
|
||||
" top: -11px;",
|
||||
" border-bottom-color: rgba(0,0,0,0.25);",
|
||||
"}",
|
||||
".ts-terms {",
|
||||
" color: #999;",
|
||||
" display: block;",
|
||||
" font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', Garuda, Verdana, Tahoma, sans-serif;",
|
||||
" font-size: 12px;",
|
||||
" font-style: normal;",
|
||||
" font-variant: normal;",
|
||||
" font-weight: normal;",
|
||||
" height: 46px;",
|
||||
" line-height: 16.7999992370605px;",
|
||||
" z-index: 800;",
|
||||
" background-color: rgb(218, 218, 218);",
|
||||
" padding-right: 50px;",
|
||||
" padding-top: 10px;",
|
||||
" padding-left: 10px;",
|
||||
" padding-bottom: 10px;",
|
||||
"}",
|
||||
".ts-terms a {",
|
||||
" color: #333;",
|
||||
"}",
|
||||
".ts-service-update {",
|
||||
" padding: 10px;",
|
||||
" background-color: red;",
|
||||
" font-family: Arial;",
|
||||
" color: #ffffff;",
|
||||
" font-size: 15px;",
|
||||
" text-align: center;",
|
||||
"}",
|
||||
".ts-service-update a {",
|
||||
" color: #ffffff;",
|
||||
" font-weight: bold;",
|
||||
" text-decoration: underline;",
|
||||
"}",
|
||||
".ts-service-update a:hover {",
|
||||
" background-color: #cc0000;",
|
||||
" text-decoration: none;",
|
||||
"}"
|
||||
].join("\n");
|
||||
|
||||
function addEventListener(node, event, handler, bubble) {
|
||||
if (node.addEventListener){
|
||||
node.addEventListener(event, handler, bubble);
|
||||
} else if (node.attachEvent){
|
||||
event = event == "click" ? "onclick" : event;
|
||||
event = event == "load" ? "onload" : event;
|
||||
node.attachEvent(event, handler);
|
||||
}
|
||||
}
|
||||
|
||||
function setCookie(cname, cvalue, exdays) {
|
||||
var d = new Date();
|
||||
d.setTime(d.getTime() + (exdays*24*60*60*1000));
|
||||
var expires = "expires="+d.toUTCString();
|
||||
document.cookie = cname + "=" + cvalue + "; " + expires;
|
||||
}
|
||||
|
||||
function getCookie(cname) {
|
||||
var name = cname + "=";
|
||||
var ca = document.cookie.split(';');
|
||||
for(var i=0; i<ca.length; i++) {
|
||||
var c = ca[i];
|
||||
while (c.charAt(0)==' ') c = c.substring(1);
|
||||
if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
var loadEvent = function() {
|
||||
var link = document.createElement("a");
|
||||
link.setAttribute("id", "app-picker");
|
||||
link.setAttribute("class", "app-picker");
|
||||
link.setAttribute("title", "Click to navigate around tiddlyspace");
|
||||
link.appendChild(document.createTextNode("tiddlyspace"));
|
||||
var backgroundSizeSupported = hasBgSizing();
|
||||
|
||||
// Quite a hack. GUEST does not have a csrf token.
|
||||
if (/csrf_token=\d+:\w+:\w+/.test(document.cookie)) {
|
||||
if( backgroundSizeSupported ) {
|
||||
link.style.backgroundImage = 'url(/bags/tiddlyspace/tiddlers/privateAndPublicIcon)';
|
||||
} else {
|
||||
link.style.filter = msfilter_in;
|
||||
}
|
||||
} else {
|
||||
if( backgroundSizeSupported ) {
|
||||
link.style.backgroundImage = 'url(/bags/tiddlyspace/tiddlers/publicIcon)';
|
||||
} else {
|
||||
link.style.filter = msfilter_out;
|
||||
}
|
||||
stylesheet = stylesheet.replace('height: 180px;', 'height: 156px;');
|
||||
}
|
||||
|
||||
var body = document.getElementsByTagName("BODY")[0];
|
||||
body.insertBefore(link, body.firstChild);
|
||||
var html = [
|
||||
'<div class="bubble">',
|
||||
'<iframe src="/bags/common/tiddlers/backstage#userpass-login" name="tsbackstage" id="tsbackstage" width="auto" frameborder=0 border=0></iframe>',
|
||||
'<div class="arrow whitearrow"></div>',
|
||||
'<div class="arrow"></div>',
|
||||
'</div>'].join("");
|
||||
var bubble = document.createElement("div");
|
||||
bubble.setAttribute("id", "bs-popup");
|
||||
bubble.style.cssText = "visibility:hidden;";
|
||||
bubble.className = "bs-popup";
|
||||
bubble.innerHTML = html;
|
||||
body.insertBefore(bubble, link);
|
||||
|
||||
//Terms and Conditions
|
||||
if (document.getElementById("backstageButton")) {
|
||||
//backstage area is displayed, so also check for terms acceptance;
|
||||
var acceptedTermsVersion,
|
||||
latestTermsVersion = 'v1.0-dec2014',
|
||||
privacyPolicyOpen = false,
|
||||
cookiePolicyOpen = false;
|
||||
|
||||
acceptedTermsVersion = getCookie('termsAccepted');
|
||||
|
||||
if (acceptedTermsVersion !== latestTermsVersion) {
|
||||
html = 'The tiddlyspace service uses cookies. By using the service, you are agreeing to the <a href="http://osmo-terms.tiddlyspace.com/Cookies20141205" target="_blank">Cookie Policy</a>. We have updated tiddlyspace <a href="http://osmo-terms.tiddlyspace.com/TermsOfService20141205" target="_blank">Terms of Service</a>, effective as of 05 December 2014. By using the service you\'re agreeing to the updated terms. <a id="acceptTermsId" href="#">OK, got it</a>.';
|
||||
var terms = document.createElement('div');
|
||||
terms.setAttribute('id', 'bs-terms');
|
||||
terms.className = 'ts-terms';
|
||||
terms.innerHTML = html;
|
||||
contentWrapper = document.getElementById('contentWrapper');
|
||||
body.insertBefore(terms, contentWrapper);
|
||||
|
||||
addEventListener(document.getElementById("acceptTermsId"), "click", function(ev) {
|
||||
setCookie('termsAccepted', latestTermsVersion, 365);
|
||||
terms.style.cssText = "display:none;";
|
||||
});
|
||||
}
|
||||
|
||||
//Add Service Update Message
|
||||
html = 'Service Update: <a href="http://osmo-service.tiddlyspace.com/ServiceUpdate20161205">***Please read this important Tiddlyspace service announcement December 5th 2016 ***</a>';
|
||||
var serviceUpdate = document.createElement('div');
|
||||
serviceUpdate.setAttribute('id', 'bs-serviceUpdate');
|
||||
serviceUpdate.className = 'ts-service-update';
|
||||
serviceUpdate.innerHTML = html;
|
||||
contentWrapper = document.getElementById('contentWrapper');
|
||||
body.insertBefore(serviceUpdate, contentWrapper);
|
||||
//End of Service Update Message
|
||||
|
||||
}
|
||||
//End of Terms and Conditions
|
||||
|
||||
twStylesheet(stylesheet);
|
||||
|
||||
var bubbleFadeInterval;
|
||||
function fade(el, fadeIn) {
|
||||
var opacity = fadeIn ? 0 : 1;
|
||||
if(bubbleFadeInterval) {
|
||||
clearInterval(bubbleFadeInterval);
|
||||
}
|
||||
bubbleFadeInterval = setInterval(function() {
|
||||
// TODO: IE does not support opacity
|
||||
el.style.cssText = "opacity:" + opacity;
|
||||
opacity = fadeIn ? opacity + 0.1 : opacity - 0.1;
|
||||
if(opacity < 0 || opacity > 1) {
|
||||
clearInterval(bubbleFadeInterval);
|
||||
el.style.cssText = fadeIn ? "" : "visibility:hidden;";
|
||||
}
|
||||
}, 25);
|
||||
}
|
||||
|
||||
addEventListener(link, "mousedown", function(ev) {
|
||||
ev.preventDefault();
|
||||
}, false);
|
||||
|
||||
var bubbleOpen = false;
|
||||
var toggleBubble = function(ev) {
|
||||
if(ev.stopPropagation) {
|
||||
ev.stopPropagation();
|
||||
} else {
|
||||
ev.cancelBubble = false;
|
||||
}
|
||||
if(bubbleOpen) {
|
||||
fade(bubble, false);
|
||||
} else {
|
||||
fade(bubble, true);
|
||||
}
|
||||
bubbleOpen = !bubbleOpen;
|
||||
};
|
||||
|
||||
addEventListener(link, "click", toggleBubble);
|
||||
|
||||
addEventListener(window.document.body, "click",
|
||||
function(ev) {
|
||||
var targ,
|
||||
ev = ev || window.event;
|
||||
|
||||
if (ev.target) targ = ev.target;
|
||||
else if (ev.srcElement) targ = ev.srcElement;
|
||||
if(targ == link) {
|
||||
return;
|
||||
}
|
||||
if(bubbleOpen) {
|
||||
toggleBubble(ev);
|
||||
}
|
||||
}, true);
|
||||
|
||||
addEventListener(bubble, "click", function(ev) {
|
||||
if(ev.stopPropagation) {
|
||||
ev.stopPropagation();
|
||||
} else {
|
||||
ev.cancelBubble = false;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
if(window.top == window) { // only add the backstage when NOT in an iframe (top window)
|
||||
addEventListener(window, "load", loadEvent);
|
||||
// check if postMessage is supported
|
||||
// best test: https://github.com/ternarylabs/porthole/pull/10
|
||||
if(!!window.postMessage) {
|
||||
addEventListener(window, "message", function(e) {
|
||||
var iframe = document.getElementById('tsbackstage');
|
||||
if(e.data) {
|
||||
iframe.style.height = e.data + "px";
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
@@ -0,0 +1,373 @@
|
||||
/***
|
||||
https://raw.github.com/tiddlyweb/chrjs/master/main.js
|
||||
***/
|
||||
//{{{
|
||||
// TiddlyWeb adaptor
|
||||
// v0.14.3
|
||||
|
||||
/*jslint vars: true, unparam: true, nomen: true, white: true */
|
||||
/*global jQuery */
|
||||
|
||||
var tiddlyweb = (function($) {
|
||||
|
||||
"use strict";
|
||||
|
||||
var tw = {
|
||||
routes: {
|
||||
// host is the TiddlyWeb instance's URI (including server_prefix)
|
||||
// placeholders "_type" & "name" refer to the respective bag/recipe
|
||||
root : "{host}/",
|
||||
bags : "{host}/bags",
|
||||
bag : "{host}/bags/{name}",
|
||||
recipes : "{host}/recipes",
|
||||
recipe : "{host}/recipes/{name}",
|
||||
tiddlers : "{host}/{_type}s/{name}/tiddlers",
|
||||
tiddler : "{host}/{_type}s/{name}/tiddlers/{title}",
|
||||
revisions: "{host}/{_type}s/{name}/tiddlers/{title}/revisions",
|
||||
revision : "{host}/{_type}s/{name}/tiddlers/{title}/revisions/{revision}",
|
||||
search : "{host}/search?q={query}"
|
||||
}
|
||||
};
|
||||
|
||||
var convertTimestamp, supplant;
|
||||
|
||||
// host (optional) is the URI of the originating TiddlyWeb instance
|
||||
tw.Resource = function(type, host) {
|
||||
if(arguments.length) { // initialization
|
||||
this._type = type;
|
||||
if(host !== false) {
|
||||
this.host = host !== undefined ? host.replace(/\/$/, "") : null;
|
||||
}
|
||||
}
|
||||
};
|
||||
$.extend(tw.Resource.prototype, {
|
||||
// retrieves resource from server
|
||||
// callback is passed resource, status, XHR (cf. jQuery.ajax success)
|
||||
// errback is passed XHR, error, exception, resource (cf. jQuery.ajax error)
|
||||
// filters is an optional filter string (e.g. "select=tag:foo;limit=5")
|
||||
get: function(callback, errback, filters) {
|
||||
var uri = this.route();
|
||||
if(filters) {
|
||||
var separator = uri.indexOf("?") === -1 ? "?" : ";";
|
||||
uri += separator + filters;
|
||||
}
|
||||
var self = this;
|
||||
return $.ajax({
|
||||
url: uri,
|
||||
type: "GET",
|
||||
dataType: "json",
|
||||
success: function(data, status, xhr) {
|
||||
var resource = self.parse(data);
|
||||
resource.etag = xhr.getResponseHeader("Etag");
|
||||
callback(resource, status, xhr);
|
||||
},
|
||||
error: function(xhr, error, exc) {
|
||||
errback(xhr, error, exc, self);
|
||||
}
|
||||
});
|
||||
},
|
||||
// sends resource to server
|
||||
// callback is passed data, status, XHR (cf. jQuery.ajax success)
|
||||
// errback is passed XHR, error, exception, resource (cf. jQuery.ajax error)
|
||||
put: function(callback, errback) {
|
||||
var self = this;
|
||||
var options = {
|
||||
url: this.route(),
|
||||
type: "PUT",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify(this.baseData()),
|
||||
success: function(data, status, xhr) {
|
||||
callback(self, status, xhr);
|
||||
},
|
||||
error: function(xhr, error, exc) {
|
||||
errback(xhr, error, exc, self);
|
||||
}
|
||||
};
|
||||
if(this.ajaxSetup) {
|
||||
this.ajaxSetup(options);
|
||||
}
|
||||
return $.ajax(options);
|
||||
},
|
||||
// deletes resource on server
|
||||
// callback is passed data, status, XHR (cf. jQuery.ajax success)
|
||||
// errback is passed XHR, error, exception, resource (cf. jQuery.ajax error)
|
||||
"delete": function(callback, errback) {
|
||||
var self = this;
|
||||
var options = {
|
||||
url: this.route(),
|
||||
type: "DELETE",
|
||||
success: function(data, status, xhr) {
|
||||
callback(self, status, xhr);
|
||||
},
|
||||
error: function(xhr, error, exc) {
|
||||
errback(xhr, error, exc, self);
|
||||
}
|
||||
};
|
||||
if(this.ajaxSetup) {
|
||||
this.ajaxSetup(options);
|
||||
}
|
||||
return $.ajax(options);
|
||||
},
|
||||
// returns an object carrying only the essential information of the resource
|
||||
baseData: function() {
|
||||
var data = {},
|
||||
self = this;
|
||||
$.each(this.data, function(i, item) {
|
||||
var value = self[item];
|
||||
if(value !== undefined) {
|
||||
data[item] = value;
|
||||
}
|
||||
});
|
||||
return data;
|
||||
},
|
||||
// returns corresponding instance from a raw object (if applicable)
|
||||
parse: function(data) {
|
||||
return data;
|
||||
},
|
||||
// list of accepted keys in serialization
|
||||
data: [],
|
||||
// returns resource's URI
|
||||
route: function() {
|
||||
return supplant(tw.routes[this._type], this);
|
||||
}
|
||||
});
|
||||
|
||||
var Container = function(type, name, host) {
|
||||
if(arguments.length) { // initialization
|
||||
tw.Resource.apply(this, [type, host]);
|
||||
this.name = name;
|
||||
this.desc = "";
|
||||
this.policy = new tw.Policy({});
|
||||
}
|
||||
};
|
||||
Container.prototype = new tw.Resource();
|
||||
$.extend(Container.prototype, {
|
||||
tiddlers: function() {
|
||||
return new tw.TiddlerCollection(this);
|
||||
},
|
||||
parse: function(data) {
|
||||
var type = tw._capitalize(this._type),
|
||||
container = new tw[type](this.name, this.host);
|
||||
data.policy = new tw.Policy(data.policy);
|
||||
return $.extend(container, data);
|
||||
},
|
||||
data: ["desc", "policy"]
|
||||
});
|
||||
|
||||
// attribs is an object whose members are merged into the instance (e.g. query)
|
||||
tw.Collection = function(type, host, attribs) {
|
||||
if(arguments.length) { // initialization
|
||||
tw.Resource.apply(this, [type, host]);
|
||||
$.extend(this, attribs);
|
||||
}
|
||||
};
|
||||
tw.Collection.prototype = new tw.Resource();
|
||||
|
||||
tw.TiddlerCollection = function(container, tiddler) {
|
||||
if(arguments.length) { // initialization
|
||||
tw.Collection.apply(this, [tiddler ? "revisions" : "tiddlers"]);
|
||||
this.container = container || null;
|
||||
this.tiddler = tiddler || null;
|
||||
}
|
||||
};
|
||||
tw.TiddlerCollection.prototype = new tw.Collection();
|
||||
$.extend(tw.TiddlerCollection.prototype, {
|
||||
parse: function(data) {
|
||||
var container = this.container;
|
||||
return $.map(data, function(item, i) {
|
||||
var tiddler = new tw.Tiddler(item.title, container),
|
||||
bag = item.bag;
|
||||
tiddler = tw.Tiddler.prototype.parse.apply(tiddler, [item]);
|
||||
if(!tiddler.bag && bag) { // XXX: bag always present!?
|
||||
tiddler.bag = new tw.Bag(bag, container.host);
|
||||
}
|
||||
if(!tiddler.recipe && item.recipe) {
|
||||
tiddler.recipe = new tw.Recipe(item.recipe, container.host);
|
||||
}
|
||||
delete item.recipe;
|
||||
return $.extend(tiddler, item);
|
||||
});
|
||||
},
|
||||
route: function() {
|
||||
var params = this.container;
|
||||
if(this.tiddler) {
|
||||
var container = this.tiddler.bag || this.tiddler.recipe;
|
||||
params = {
|
||||
_type: container._type,
|
||||
host: container.host,
|
||||
name: container.name,
|
||||
title: this.tiddler.title
|
||||
};
|
||||
}
|
||||
return supplant(tw.routes[this._type], params);
|
||||
}
|
||||
});
|
||||
|
||||
tw.Search = function(query, host) {
|
||||
tw.Collection.apply(this, ["search", host]);
|
||||
this.query = query;
|
||||
};
|
||||
tw.Search.prototype = new tw.Collection();
|
||||
$.extend(tw.Search.prototype, {
|
||||
parse: function(data) {
|
||||
this.container = { // XXX: hacky
|
||||
_type: "bag",
|
||||
host: this.host
|
||||
};
|
||||
var tiddlers = tw.TiddlerCollection.prototype.parse.apply(this, arguments);
|
||||
delete this.container;
|
||||
return tiddlers;
|
||||
}
|
||||
});
|
||||
|
||||
// title is the name of the tiddler
|
||||
// container (optional) is an instance of either Bag or Recipe
|
||||
// optionally accepts a single object representing tiddler attributes
|
||||
tw.Tiddler = function(title, container) {
|
||||
tw.Resource.apply(this, ["tiddler", false]);
|
||||
this.title = title;
|
||||
this.bag = container && container._type === "bag" ? container : null;
|
||||
this.recipe = container && container._type === "recipe" ? container : null;
|
||||
var self = this;
|
||||
$.each(this.data, function(i, item) {
|
||||
self[item] = undefined; // exposes list of standard attributes for inspectability
|
||||
});
|
||||
if(title && title.title) { // title is an object of tiddler attributes
|
||||
$.extend(this, title);
|
||||
}
|
||||
};
|
||||
tw.Tiddler.prototype = new tw.Resource();
|
||||
$.extend(tw.Tiddler.prototype, {
|
||||
revisions: function() {
|
||||
return new tw.TiddlerCollection(this.bag || this.recipe, this);
|
||||
},
|
||||
route: function() {
|
||||
var container = this.bag || this.recipe;
|
||||
var params = $.extend({}, this, {
|
||||
host: container ? container.host : null,
|
||||
_type: this.bag ? "bag" : (this.recipe ? "recipe" : null),
|
||||
name: container ? container.name : null
|
||||
});
|
||||
return supplant(tw.routes[this._type], params);
|
||||
},
|
||||
parse: function(data) {
|
||||
var tiddler = new tw.Tiddler(this.title),
|
||||
container = this.bag || this.recipe;
|
||||
if(data.bag) {
|
||||
tiddler.bag = new tw.Bag(data.bag, container.host);
|
||||
delete data.bag;
|
||||
}
|
||||
delete data.recipe;
|
||||
tiddler.created = data.created ? convertTimestamp(data.created) : new Date();
|
||||
delete data.created;
|
||||
tiddler.modified = data.modified ? convertTimestamp(data.modified) : new Date();
|
||||
delete data.modified;
|
||||
if(this.recipe) {
|
||||
tiddler.recipe = this.recipe;
|
||||
}
|
||||
return $.extend(tiddler, data);
|
||||
},
|
||||
data: ["created", "creator", "modifier", "modified", "tags", "type", "text",
|
||||
"fields"],
|
||||
ajaxSetup: function(options) {
|
||||
var self = this;
|
||||
if(this.etag && (options.type === "PUT" || options.type === "DELETE")) {
|
||||
options.beforeSend = function(xhr) {
|
||||
xhr.setRequestHeader("If-Match", self.etag);
|
||||
};
|
||||
}
|
||||
if(options.type === "PUT") {
|
||||
var callback = options.success;
|
||||
options.success = function(data, status, xhr) {
|
||||
var loc = xhr.getResponseHeader("Location"),
|
||||
etag = xhr.getResponseHeader("Etag");
|
||||
if(loc && etag) {
|
||||
self.etag = etag;
|
||||
if(!self.bag) {
|
||||
var bag = loc.split("/bags/").pop().split("/")[0];
|
||||
self.bag = new tw.Bag(bag, self.recipe.host);
|
||||
}
|
||||
callback(self, status, xhr);
|
||||
} else { // IE
|
||||
self.get(callback, options.error);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
tw.Revision = function(id, tiddler) {
|
||||
var container = tiddler.bag || tiddler.recipe;
|
||||
tw.Tiddler.apply(this, [tiddler.title, container]);
|
||||
this._type = "revision";
|
||||
this.revision = id;
|
||||
};
|
||||
tw.Revision.prototype = new tw.Tiddler();
|
||||
$.extend(tw.Revision.prototype, {
|
||||
revisions: false,
|
||||
data: false,
|
||||
put: false,
|
||||
"delete": false
|
||||
});
|
||||
|
||||
tw.Bag = function(name, host) {
|
||||
Container.apply(this, ["bag", name, host]);
|
||||
};
|
||||
tw.Bag.prototype = new Container();
|
||||
|
||||
tw.Recipe = function(name, host) {
|
||||
Container.apply(this, ["recipe", name, host]);
|
||||
this.recipe = [];
|
||||
};
|
||||
tw.Recipe.prototype = new Container();
|
||||
$.extend(tw.Recipe.prototype, {
|
||||
data: ["recipe"].concat(Container.prototype.data)
|
||||
});
|
||||
|
||||
tw.Policy = function(constraints) { // TODO: validation?
|
||||
var self = this;
|
||||
$.each(this.constraints, function(i, item) {
|
||||
self[item] = constraints[item];
|
||||
});
|
||||
};
|
||||
tw.Policy.prototype.constraints = ["read", "write", "create", "delete",
|
||||
"manage", "accept", "owner"];
|
||||
|
||||
/*
|
||||
* utilities
|
||||
*/
|
||||
|
||||
tw._capitalize = function(str) {
|
||||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||||
};
|
||||
|
||||
// convert YYYYMMDDhhmmss timestamp to Date instance
|
||||
convertTimestamp = function(t) {
|
||||
if (t.match(/^\d{12,17}$/)) {
|
||||
return new Date(Date.UTC(
|
||||
parseInt(t.substr(0, 4), 10),
|
||||
parseInt(t.substr(4, 2), 10) - 1,
|
||||
parseInt(t.substr(6, 2), 10),
|
||||
parseInt(t.substr(8, 2), 10),
|
||||
parseInt(t.substr(10, 2), 10),
|
||||
parseInt(t.substr(12, 2) || "0", 10),
|
||||
parseInt(t.substr(14, 3) || "0", 10)
|
||||
));
|
||||
} else {
|
||||
return new Date(Date.parse(t));
|
||||
}
|
||||
};
|
||||
|
||||
// adapted from Crockford (http://javascript.crockford.com/remedial.html)
|
||||
supplant = function(str, obj) {
|
||||
return str.replace(/{([^{}]*)}/g, function (a, b) {
|
||||
var r = obj[b];
|
||||
r = typeof r === "string" || typeof r === "number" ? r : a;
|
||||
return $.inArray(b, ["host", "query"]) !== -1 ? r : encodeURIComponent(r); // XXX: special-casing
|
||||
});
|
||||
};
|
||||
|
||||
return tw;
|
||||
|
||||
}(jQuery));
|
||||
//}}}
|
||||
@@ -0,0 +1,42 @@
|
||||
/***
|
||||
TiddlySpace extensions for [[chrjs]]
|
||||
|''Requires''|chrjs.users|
|
||||
***/
|
||||
//{{{
|
||||
(function($) {
|
||||
|
||||
tiddlyweb.routes.identities = "{host}/users/{username}/identities";
|
||||
var IdentitiesCollection = function(user) {
|
||||
tiddlyweb.Collection.apply(this, ["identities", user.host, {
|
||||
username: user.username
|
||||
}]);
|
||||
};
|
||||
IdentitiesCollection.prototype = new tiddlyweb.Collection();
|
||||
jQuery.extend(IdentitiesCollection.prototype, {
|
||||
add: function(identity, callback, errback) {
|
||||
var tiddler = new tiddlyweb.Tiddler(identity);
|
||||
tiddler.bag = new tiddlyweb.Bag("MAPUSER", this.host);
|
||||
tiddler.put(callback, errback);
|
||||
},
|
||||
get: function(callback, errback) {
|
||||
var uri = this.route();
|
||||
$.ajax({
|
||||
type: "get",
|
||||
dataType: "json",
|
||||
url: uri,
|
||||
success: function(uris, status, xhr) {
|
||||
callback(uris, status, xhr);
|
||||
},
|
||||
error: function(xhr, error, exc) {
|
||||
errback(xhr, error, exc, self);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
tiddlyweb.User.prototype.identities = function() {
|
||||
return new IdentitiesCollection(this);
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
//}}}
|
||||