mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2026-02-13 13:39:50 +00:00
Compare commits
79 Commits
media-quer
...
feat-ai-to
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53edb20da5 | ||
|
|
ce9209f00e | ||
|
|
4822919aa4 | ||
|
|
a6f7c05203 | ||
|
|
0dda07e3f1 | ||
|
|
2ae1e5aa09 | ||
|
|
378b9b3627 | ||
|
|
0f79f88f58 | ||
|
|
2cb5f57c69 | ||
|
|
d3f441cbb5 | ||
|
|
361a9668a2 | ||
|
|
b0d950faec | ||
|
|
8a92c4632d | ||
|
|
a1053ddc3d | ||
|
|
7ea788ca83 | ||
|
|
614ba8432f | ||
|
|
c84de85ed2 | ||
|
|
cd89415461 | ||
|
|
fbe5a2f908 | ||
|
|
ae9623ab2d | ||
|
|
2a2d998bef | ||
|
|
867fad030e | ||
|
|
4425a891bc | ||
|
|
0ac2b6ce31 | ||
|
|
697171a30d | ||
|
|
0b758190d1 | ||
|
|
4f0bdac77b | ||
|
|
3051e8dddc | ||
|
|
f5a6ac9446 | ||
|
|
2ebf452abb | ||
|
|
d4bc3fcd99 | ||
|
|
d770d98aff | ||
|
|
f7043f6d43 | ||
|
|
76f40208af | ||
|
|
67e8670c73 | ||
|
|
b1843837ea | ||
|
|
42c22acba6 | ||
|
|
f02c9ebba3 | ||
|
|
94b325f41f | ||
|
|
0219af604b | ||
|
|
843f133f5e | ||
|
|
903d0fb8e1 | ||
|
|
53edea9256 | ||
|
|
b04af8bf7a | ||
|
|
e9fb63affc | ||
|
|
ceddef7b51 | ||
|
|
db692738fe | ||
|
|
8efec8920d | ||
|
|
904155043a | ||
|
|
97c9456f21 | ||
|
|
a1a6b6fa25 | ||
|
|
422df10841 | ||
|
|
ea595dfe2f | ||
|
|
58f96e779a | ||
|
|
a32a1a3802 | ||
|
|
28d262e371 | ||
|
|
cd58622c06 | ||
|
|
d39a3d61e3 | ||
|
|
80fdaae6de | ||
|
|
4a79af9eea | ||
|
|
370ff3057e | ||
|
|
fb641d340c | ||
|
|
3bdd449b3e | ||
|
|
0037935af5 | ||
|
|
dbb7e1c300 | ||
|
|
0e5955397b | ||
|
|
638bd78059 | ||
|
|
d56958331b | ||
|
|
a2cff69fee | ||
|
|
837374b5ab | ||
|
|
d6f3058e9d | ||
|
|
95f3e224b0 | ||
|
|
a1782b1e4e | ||
|
|
a921034561 | ||
|
|
d652f820b8 | ||
|
|
e00c761088 | ||
|
|
cb9deaa9b5 | ||
|
|
3b07607d1b | ||
|
|
2faba2e820 |
@@ -105,6 +105,7 @@ node $TW5_BUILD_TIDDLYWIKI \
|
||||
fi
|
||||
|
||||
# /index.html Main site
|
||||
# /external-(version).html External core version of main site
|
||||
# /favicon.ico Favicon for main site
|
||||
# /static.html Static rendering of default tiddlers
|
||||
# /alltiddlers.html Static rendering of all tiddlers
|
||||
@@ -117,7 +118,7 @@ node $TW5_BUILD_TIDDLYWIKI \
|
||||
--version \
|
||||
--load $TW5_BUILD_OUTPUT/build.tid \
|
||||
--output $TW5_BUILD_OUTPUT \
|
||||
--build favicon static index \
|
||||
--build favicon static index external-js \
|
||||
|| exit 1
|
||||
|
||||
# /empty.html Empty
|
||||
|
||||
12
boot/boot.js
12
boot/boot.js
@@ -232,10 +232,10 @@ $tw.utils.error = function(err) {
|
||||
var link = dm("a"),
|
||||
text = JSON.stringify(tiddlers);
|
||||
if(Blob !== undefined) {
|
||||
var blob = new Blob([text], {type: "text/html"});
|
||||
var blob = new Blob([text], {type: "application/json"});
|
||||
link.setAttribute("href", URL.createObjectURL(blob));
|
||||
} else {
|
||||
link.setAttribute("href","data:text/html," + encodeURIComponent(text));
|
||||
link.setAttribute("href","data:application/json," + encodeURIComponent(text));
|
||||
}
|
||||
link.setAttribute("download","emergency-tiddlers-" + (new Date()) + ".json");
|
||||
document.body.appendChild(link);
|
||||
@@ -2463,13 +2463,15 @@ $tw.boot.initStartup = function(options) {
|
||||
$tw.utils.registerFileType("image/webp","base64",".webp",{flags:["image"]});
|
||||
$tw.utils.registerFileType("image/heic","base64",".heic",{flags:["image"]});
|
||||
$tw.utils.registerFileType("image/heif","base64",".heif",{flags:["image"]});
|
||||
$tw.utils.registerFileType("image/avif","base64",".avif",{flags:["image"]});
|
||||
$tw.utils.registerFileType("image/svg+xml","utf8",".svg",{flags:["image"]});
|
||||
$tw.utils.registerFileType("image/vnd.microsoft.icon","base64",".ico",{flags:["image"]});
|
||||
$tw.utils.registerFileType("image/x-icon","base64",".ico",{flags:["image"]});
|
||||
$tw.utils.registerFileType("application/wasm","base64",".wasm");
|
||||
$tw.utils.registerFileType("application/font-woff","base64",".woff");
|
||||
$tw.utils.registerFileType("application/x-font-ttf","base64",".woff");
|
||||
$tw.utils.registerFileType("application/font-woff2","base64",".woff2");
|
||||
$tw.utils.registerFileType("font/woff","base64",".woff");
|
||||
$tw.utils.registerFileType("font/woff2","base64",".woff2");
|
||||
$tw.utils.registerFileType("font/ttf","base64",".ttf");
|
||||
$tw.utils.registerFileType("font/otf","base64",".otf");
|
||||
$tw.utils.registerFileType("audio/ogg","base64",".ogg");
|
||||
$tw.utils.registerFileType("audio/mp4","base64",[".mp4",".m4a"]);
|
||||
$tw.utils.registerFileType("video/ogg","base64",[".ogm",".ogv",".ogg"]);
|
||||
|
||||
@@ -5,7 +5,3 @@ TiddlyWiki incorporates code from these fine OpenSource projects:
|
||||
* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]
|
||||
* [[The Jasmine JavaScript Test Framework|https://jasmine.github.io/]]
|
||||
* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]
|
||||
|
||||
And media from these projects:
|
||||
|
||||
* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]
|
||||
|
||||
5
core/images/language.tid
Normal file
5
core/images/language.tid
Normal file
@@ -0,0 +1,5 @@
|
||||
title: $:/core/images/language
|
||||
tags: $:/tags/Image
|
||||
|
||||
\parameters (size:"22pt")
|
||||
<svg width=<<size>> height=<<size>> class="tc-image-language tc-image-button" viewBox="0 0 92 92"><path d="M0 0h2480.32v3507.87H0z" style="fill:none" transform="scale(.03696 .02613)"/><path d="M71.508 62.298c-1.243 15.83-16.758 28.344-35.714 28.344-5.713 0-11.113-1.136-15.905-3.158-2.977 2.498-8.618 4.183-15.088 4.183-.929 0-1.84-.034-2.73-.102 4.499-1.5 7.989-4.886 9.298-9.099C4.373 76.918 0 69.016 0 60.246 0 49.773 6.237 40.537 15.729 35.07c1.235 7.764 5.492 14.713 11.724 19.953l-7.269 18.453c-.393.976-.676 1.737-.847 2.285a5.326 5.326 0 0 0-.256 1.591c0 .89.368 1.686 1.103 2.388.736.702 1.583 1.052 2.542 1.052 1.13 0 1.942-.33 2.438-.988.497-.659 1.096-1.93 1.797-3.812l1.797-4.826h15.3l1.797 4.723c.239.582.526 1.254.86 2.015.333.762.646 1.327.936 1.695.291.368.65.659 1.078.873.428.213.942.32 1.54.32a3.586 3.586 0 0 0 2.632-1.09c.727-.728 1.09-1.528 1.09-2.4 0-.84-.384-2.183-1.154-4.031l-3.545-8.755c2.142.3 4.34.455 6.58.455 5.541 0 10.824-.951 15.636-2.674Zm-30.563.247 1.059 2.898H30.76l2.32-6.467a43.152 43.152 0 0 0 7.865 3.569Z"/><path d="M71.778 57.635c-4.793 2.023-10.191 3.157-15.907 3.157-19.767 0-35.793-13.61-35.793-30.396S36.104.001 55.87.001c19.772 0 35.797 13.61 35.797 30.395 0 8.77-4.373 16.674-11.371 22.221 1.309 4.211 4.8 7.6 9.299 9.1-.89.067-1.802.1-2.73.1-6.47 0-12.11-1.686-15.088-4.182Zm-15.59-15.887a44.237 44.237 0 0 0 3.3 2.496c4.284 2.942 9.06 5.381 14.33 7.315l2.334-3.517c-5.134-1.871-9.696-4.125-13.69-6.763a42.558 42.558 0 0 1-3.37-2.483c4.247-4.806 7.374-10.43 9.38-16.869h6.698V17.78h-16.7a47.226 47.226 0 0 0-1.528-2.959 52.943 52.943 0 0 0-2.885-4.562l-4.218 1.554a36.467 36.467 0 0 1 2.971 3.983c.427.661.833 1.323 1.217 1.984H36.394v4.148h6.77a36.878 36.878 0 0 0 5.422 11.56 42.918 42.918 0 0 0 4.591 5.497c-4.687 4.017-10.548 6.932-17.582 8.744l2.247 3.709c7.746-2.44 13.861-5.67 18.347-9.689Zm-9.047-19.82h16.991c-1.86 5.668-4.528 10.402-8 14.204a42.526 42.526 0 0 1-4.247-4.922c-2.126-2.883-3.71-5.977-4.744-9.283Z"/></svg>
|
||||
@@ -1,13 +0,0 @@
|
||||
title: $:/languages/en-GB/icon
|
||||
type: image/svg+xml
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 30" width="1200" height="600">
|
||||
<clipPath id="t">
|
||||
<path d="M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z"/>
|
||||
</clipPath>
|
||||
<path d="M0,0 v30 h60 v-30 z" fill="#00247d"/>
|
||||
<path d="M0,0 L60,30 M60,0 L0,30" stroke="#fff" stroke-width="6"/>
|
||||
<path d="M0,0 L60,30 M60,0 L0,30" clip-path="url(#t)" stroke="#cf142b" stroke-width="4"/>
|
||||
<path d="M30,0 v30 M0,15 h60" stroke="#fff" stroke-width="10"/>
|
||||
<path d="M30,0 v30 M0,15 h60" stroke="#cf142b" stroke-width="6"/>
|
||||
</svg>
|
||||
@@ -1,117 +0,0 @@
|
||||
/*\
|
||||
title: $:/core/modules/background-actions.js
|
||||
type: application/javascript
|
||||
module-type: global
|
||||
|
||||
Class to dispatch actions when filters change
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
function BackgroundActionDispatcher(filterTracker,wiki) {
|
||||
var self = this;
|
||||
this.filterTracker = filterTracker;
|
||||
this.wiki = wiki;
|
||||
this.nextTrackedFilterId = 1;
|
||||
this.trackedFilters = Object.create(null); // Hashmap by id
|
||||
// Track the filter for the background actions
|
||||
this.filterTracker.track({
|
||||
filterString: "[all[tiddlers+shadows]tag[$:/tags/BackgroundAction]!is[draft]]",
|
||||
fnEnter: function fnEnter(title) {
|
||||
return self.trackFilter(title);
|
||||
},
|
||||
fnLeave: function fnLeave(title,enterValue) {
|
||||
self.untrackFilter(enterValue);
|
||||
},
|
||||
fnChange: function fnChange(title,enterValue) {
|
||||
self.untrackFilter(enterValue);
|
||||
return self.trackFilter(title);
|
||||
},
|
||||
fnProcess: function fnProcess(changes) {
|
||||
self.process(changes);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
BackgroundActionDispatcher.prototype.trackFilter = function(title) {
|
||||
var tiddler = this.wiki.getTiddler(title),
|
||||
id = this.nextTrackedFilterId++,
|
||||
tracker = new BackgroundActionTracker({
|
||||
wiki: this.wiki,
|
||||
title: title,
|
||||
trackFilter: tiddler.fields["track-filter"],
|
||||
actions: tiddler.fields.text
|
||||
});
|
||||
this.trackedFilters[id] = tracker;
|
||||
return id;
|
||||
};
|
||||
|
||||
BackgroundActionDispatcher.prototype.untrackFilter = function(enterValue) {
|
||||
var tracker = this.trackedFilters[enterValue];
|
||||
if(tracker) {
|
||||
tracker.destroy();
|
||||
}
|
||||
delete this.trackedFilters[enterValue];
|
||||
};
|
||||
|
||||
BackgroundActionDispatcher.prototype.process = function(changes) {
|
||||
for(var id in this.trackedFilters) {
|
||||
this.trackedFilters[id].process(changes);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
Represents an individual tracked filter. Options include:
|
||||
wiki: wiki to use
|
||||
title: title of the tiddler being tracked
|
||||
trackFilter: filter string to track changes
|
||||
actions: actions to be executed when the filter changes
|
||||
*/
|
||||
function BackgroundActionTracker(options) {
|
||||
var self = this;
|
||||
this.wiki = options.wiki;
|
||||
this.title = options.title;
|
||||
this.trackFilter = options.trackFilter;
|
||||
this.actions = options.actions
|
||||
this.filterTracker = new $tw.FilterTracker(this.wiki);
|
||||
this.hasChanged = false;
|
||||
this.trackerID = this.filterTracker.track({
|
||||
filterString: this.trackFilter,
|
||||
fnEnter: function(title) {
|
||||
self.hasChanged = true;
|
||||
},
|
||||
fnLeave: function(title,enterValue) {
|
||||
self.hasChanged = true;
|
||||
},
|
||||
fnProcess: function(changes) {
|
||||
if(self.hasChanged) {
|
||||
self.hasChanged = false;
|
||||
self.wiki.invokeActionString(
|
||||
self.actions,
|
||||
null,
|
||||
{
|
||||
title: self.title
|
||||
},{
|
||||
parentWidget: $tw.rootWidget
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
BackgroundActionTracker.prototype.process = function(changes) {
|
||||
this.filterTracker.handleChangeEvent(changes);
|
||||
};
|
||||
|
||||
BackgroundActionTracker.prototype.destroy = function() {
|
||||
this.filterTracker.untrack(this.trackerID);
|
||||
};
|
||||
|
||||
exports.BackgroundActionDispatcher = BackgroundActionDispatcher;
|
||||
|
||||
})();
|
||||
@@ -1,108 +0,0 @@
|
||||
/*\
|
||||
title: $:/core/modules/filter-tracker.js
|
||||
type: application/javascript
|
||||
module-type: global
|
||||
|
||||
Class to track the results of a filter string
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
function FilterTracker(wiki) {
|
||||
this.wiki = wiki;
|
||||
this.trackers = [];
|
||||
this.nextTrackerId = 1;
|
||||
}
|
||||
|
||||
FilterTracker.prototype.handleChangeEvent = function(changes) {
|
||||
this.processTrackers();
|
||||
this.processChanges(changes);
|
||||
};
|
||||
|
||||
/*
|
||||
Add a tracker to the filter tracker. Returns null if any of the parameters are invalid, or a tracker id if the tracker was added successfully. Options include:
|
||||
filterString: the filter string to track
|
||||
fnEnter: function to call when a title enters the filter results. Called even if the tiddler does not actually exist. Called as (title), and should return a truthy value that is stored in the tracker as the "enterValue"
|
||||
fnLeave: function to call when a title leaves the filter results. Called as (title,enterValue)
|
||||
fnChange: function to call when a tiddler changes in the filter results. Only called for filter results that identify a tiddler or shadow tiddler. Called as (title,enterValue), and may optionally return a replacement enterValue
|
||||
fnProcess: function to call each time the tracker is processed, after any enter, leave or change functions are called. Called as (changes)
|
||||
*/
|
||||
FilterTracker.prototype.track = function(options) {
|
||||
// Add the tracker details
|
||||
var tracker = {
|
||||
id: this.nextTrackerId++,
|
||||
filterString: options.filterString,
|
||||
fnEnter: options.fnEnter,
|
||||
fnLeave: options.fnLeave,
|
||||
fnChange: options.fnChange,
|
||||
fnProcess: options.fnProcess,
|
||||
previousResults: [], // Results from the previous time the tracker was processed
|
||||
resultValues: {} // Map by title to the value returned by fnEnter
|
||||
};
|
||||
this.trackers.push(tracker);
|
||||
// Process the tracker
|
||||
this.processTracker(this.trackers.length - 1);
|
||||
return tracker.id;
|
||||
};
|
||||
|
||||
FilterTracker.prototype.untrack = function(id) {
|
||||
for(var t=0; t<this.trackers.length; t++) {
|
||||
if(this.trackers[t].id === id) {
|
||||
this.trackers.splice(t,1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
FilterTracker.prototype.processTrackers = function() {
|
||||
for(var t=0; t<this.trackers.length; t++) {
|
||||
this.processTracker(t);
|
||||
}
|
||||
};
|
||||
|
||||
FilterTracker.prototype.processTracker = function(index) {
|
||||
var tracker = this.trackers[index];
|
||||
var results = [];
|
||||
// Evaluate the filter and remove duplicate results
|
||||
$tw.utils.each(this.wiki.filterTiddlers(tracker.filterString),function(title) {
|
||||
$tw.utils.pushTop(results,title);
|
||||
});
|
||||
// Process the newly entered results
|
||||
$tw.utils.each(results,function(title) {
|
||||
if(tracker.previousResults.indexOf(title) === -1 && !tracker.resultValues[title] && tracker.fnEnter) {
|
||||
tracker.resultValues[title] = tracker.fnEnter(title) || true;
|
||||
}
|
||||
});
|
||||
// Process the results that have just left
|
||||
$tw.utils.each(tracker.previousResults,function(title) {
|
||||
if(results.indexOf(title) === -1 && tracker.resultValues[title] && tracker.fnLeave) {
|
||||
tracker.fnLeave(title,tracker.resultValues[title]);
|
||||
delete tracker.resultValues[title];
|
||||
}
|
||||
});
|
||||
// Update the previous results
|
||||
tracker.previousResults = results;
|
||||
};
|
||||
|
||||
FilterTracker.prototype.processChanges = function(changes) {
|
||||
for(var t=0; t<this.trackers.length; t++) {
|
||||
var tracker = this.trackers[t];
|
||||
$tw.utils.each(changes,function(change,title) {
|
||||
if(title && tracker.previousResults.indexOf(title) !== -1 && tracker.fnChange) {
|
||||
// Call the change function and if it doesn't return a value then keep the old value
|
||||
tracker.resultValues[title] = tracker.fnChange(title,tracker.resultValues[title]) || tracker.resultValues[title];
|
||||
}
|
||||
});
|
||||
if(tracker.fnProcess) {
|
||||
tracker.fnProcess(changes);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
exports.FilterTracker = FilterTracker;
|
||||
|
||||
})();
|
||||
@@ -17,19 +17,24 @@ Export our filter function
|
||||
*/
|
||||
exports.function = function(source,operator,options) {
|
||||
var functionName = operator.operands[0],
|
||||
params = [];
|
||||
params = [],
|
||||
results;
|
||||
$tw.utils.each(operator.operands.slice(1),function(param) {
|
||||
params.push({value: param});
|
||||
});
|
||||
// console.log(`Calling ${functionName} with params ${JSON.stringify(params)}`);
|
||||
var variableInfo = options.widget && options.widget.getVariableInfo && options.widget.getVariableInfo(functionName,{params: params, source: source});
|
||||
if(variableInfo && variableInfo.srcVariable && variableInfo.srcVariable.isFunctionDefinition) {
|
||||
return variableInfo.resultList ? variableInfo.resultList : [variableInfo.text];
|
||||
results = variableInfo.resultList ? variableInfo.resultList : [variableInfo.text];
|
||||
}
|
||||
// Return the input list if the function wasn't found
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
results.push(title);
|
||||
});
|
||||
if(!results) {
|
||||
results = [];
|
||||
source(function(tiddler,title) {
|
||||
results.push(title);
|
||||
});
|
||||
}
|
||||
// console.log(`function ${functionName} with params ${JSON.stringify(params)} results: ${JSON.stringify(results)}`);
|
||||
return results;
|
||||
};
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ exports.minall = makeNumericReducingOperator(
|
||||
exports.median = makeNumericArrayOperator(
|
||||
function(values) {
|
||||
var len = values.length, median;
|
||||
values.sort();
|
||||
values.sort(function(a,b) {return a-b});
|
||||
if(len % 2) {
|
||||
// Odd, return the middle number
|
||||
median = values[(len - 1) / 2];
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
/*\
|
||||
title: $:/core/modules/info/mediaquerytracker.js
|
||||
type: application/javascript
|
||||
module-type: info
|
||||
|
||||
Initialise $:/info/ tiddlers derived from media queries via
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) {
|
||||
if($tw.browser) {
|
||||
// Functions to start and stop tracking a particular media query tracker tiddler
|
||||
function track(title) {
|
||||
var result = {},
|
||||
tiddler = $tw.wiki.getTiddler(title);
|
||||
if(tiddler) {
|
||||
var mediaQuery = tiddler.fields["media-query"],
|
||||
infoTiddler = tiddler.fields["info-tiddler"],
|
||||
infoTiddlerAlt = tiddler.fields["info-tiddler-alt"];
|
||||
if(mediaQuery && infoTiddler) {
|
||||
// Evaluate and track the media query
|
||||
result.mqList = window.matchMedia(mediaQuery);
|
||||
function getResultTiddlers() {
|
||||
var value = result.mqList.matches ? "yes" : "no",
|
||||
tiddlers = [];
|
||||
tiddlers.push({title: infoTiddler, text: value});
|
||||
if(infoTiddlerAlt) {
|
||||
tiddlers.push({title: infoTiddlerAlt, text: value})
|
||||
}
|
||||
return tiddlers;
|
||||
};
|
||||
updateInfoTiddlersCallback(getResultTiddlers());
|
||||
result.handler = function(event) {
|
||||
updateInfoTiddlersCallback(getResultTiddlers());
|
||||
};
|
||||
result.mqList.addEventListener("change",result.handler);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function untrack(enterValue) {
|
||||
if(enterValue.mqList && enterValue.handler) {
|
||||
enterValue.mqList.removeEventListener("change",enterValue.handler);
|
||||
}
|
||||
}
|
||||
// Track media query tracker tiddlers
|
||||
function fnEnter(title) {
|
||||
return track(title);
|
||||
}
|
||||
function fnLeave(title,enterValue) {
|
||||
untrack(enterValue);
|
||||
}
|
||||
function fnChange(title,enterValue) {
|
||||
untrack(enterValue);
|
||||
return track(title);
|
||||
}
|
||||
$tw.filterTracker.track({
|
||||
filterString: "[all[tiddlers+shadows]tag[$:/tags/MediaQueryTracker]!is[draft]]",
|
||||
fnEnter: fnEnter,
|
||||
fnLeave: fnLeave,
|
||||
fnChange: fnChange
|
||||
});
|
||||
}
|
||||
return [];
|
||||
};
|
||||
|
||||
})();
|
||||
@@ -36,6 +36,13 @@ exports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) {
|
||||
// Screen size
|
||||
infoTiddlerFields.push({title: "$:/info/browser/screen/width", text: window.screen.width.toString()});
|
||||
infoTiddlerFields.push({title: "$:/info/browser/screen/height", text: window.screen.height.toString()});
|
||||
// Dark mode through event listener on MediaQueryList
|
||||
var mqList = window.matchMedia("(prefers-color-scheme: dark)"),
|
||||
getDarkModeTiddler = function() {return {title: "$:/info/darkmode", text: mqList.matches ? "yes" : "no"};};
|
||||
infoTiddlerFields.push(getDarkModeTiddler());
|
||||
mqList.addListener(function(event) {
|
||||
updateInfoTiddlersCallback([getDarkModeTiddler()]);
|
||||
});
|
||||
// Language
|
||||
infoTiddlerFields.push({title: "$:/info/browser/language", text: navigator.language || ""});
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ exports["image/gif"] = ImageParser;
|
||||
exports["image/webp"] = ImageParser;
|
||||
exports["image/heic"] = ImageParser;
|
||||
exports["image/heif"] = ImageParser;
|
||||
exports["image/avif"] = ImageParser;
|
||||
exports["image/x-icon"] = ImageParser;
|
||||
exports["image/vnd.microsoft.icon"] = ImageParser;
|
||||
|
||||
|
||||
@@ -46,8 +46,10 @@ function SaverHandler(options) {
|
||||
// Filter the changes so that we only count changes to tiddlers that we care about
|
||||
var filteredChanges = self.filterFn.call(self.wiki,function(iterator) {
|
||||
$tw.utils.each(changes,function(change,title) {
|
||||
var tiddler = self.wiki.getTiddler(title);
|
||||
iterator(tiddler,title);
|
||||
if(change.normal) {
|
||||
var tiddler = self.wiki.getTiddler(title);
|
||||
iterator(tiddler,title);
|
||||
}
|
||||
});
|
||||
});
|
||||
// Adjust the number of changes
|
||||
@@ -183,7 +185,7 @@ SaverHandler.prototype.saveWiki = function(options) {
|
||||
// Call the highest priority saver that supports this method
|
||||
for(var t=this.savers.length-1; t>=0; t--) {
|
||||
var saver = this.savers[t];
|
||||
if(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {
|
||||
if(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename, type: variables.type}})) {
|
||||
this.logger.log("Saving wiki with method",method,"through saver",saver.info.name);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ DownloadSaver.prototype.save = function(text,method,callback,options) {
|
||||
options = options || {};
|
||||
// Get the current filename
|
||||
var filename = options.variables.filename;
|
||||
var type = options.variables.type;
|
||||
if(!filename) {
|
||||
var p = document.location.pathname.lastIndexOf("/");
|
||||
if(p !== -1) {
|
||||
@@ -32,13 +33,16 @@ DownloadSaver.prototype.save = function(text,method,callback,options) {
|
||||
if(!filename) {
|
||||
filename = "tiddlywiki.html";
|
||||
}
|
||||
if(!type) {
|
||||
type = "text/html";
|
||||
}
|
||||
// Set up the link
|
||||
var link = document.createElement("a");
|
||||
if(Blob !== undefined) {
|
||||
var blob = new Blob([text], {type: "text/html"});
|
||||
var blob = new Blob([text], {type: type});
|
||||
link.setAttribute("href", URL.createObjectURL(blob));
|
||||
} else {
|
||||
link.setAttribute("href","data:text/html," + encodeURIComponent(text));
|
||||
link.setAttribute("href","data:" + type + "," + encodeURIComponent(text));
|
||||
}
|
||||
link.setAttribute("download",filename);
|
||||
document.body.appendChild(link);
|
||||
|
||||
@@ -16,9 +16,6 @@ Load core modules
|
||||
exports.name = "load-modules";
|
||||
exports.synchronous = true;
|
||||
|
||||
// Set to `true` to enable performance instrumentation
|
||||
var PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = "$:/config/Performance/Instrumentation";
|
||||
|
||||
exports.startup = function() {
|
||||
// Load modules
|
||||
$tw.modules.applyMethods("utils",$tw.utils);
|
||||
@@ -38,19 +35,6 @@ exports.startup = function() {
|
||||
$tw.macros = $tw.modules.getModulesByTypeAsHashmap("macro");
|
||||
$tw.wiki.initParsers();
|
||||
$tw.Commander.initCommands();
|
||||
// --------------------------
|
||||
// The rest of the startup process here is not strictly to do with loading modules, but are needed before other startup
|
||||
// modules are executed. It is easier to put them here than to introduce a new startup module
|
||||
// --------------------------
|
||||
// Set up the performance framework
|
||||
$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,"no") === "yes");
|
||||
// Kick off the filter tracker
|
||||
$tw.filterTracker = new $tw.FilterTracker($tw.wiki);
|
||||
$tw.wiki.addEventListener("change",function(changes) {
|
||||
$tw.filterTracker.handleChangeEvent(changes);
|
||||
});
|
||||
// Kick off the background action dispatcher
|
||||
$tw.backgroundActionDispatcher = new $tw.BackgroundActionDispatcher($tw.filterTracker,$tw.wiki);
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
@@ -75,7 +75,7 @@ exports.startup = function() {
|
||||
$tw.wiki.unpackPluginTiddlers();
|
||||
// Queue change events for the changed shadow tiddlers
|
||||
$tw.utils.each(Object.keys(changedShadowTiddlers),function(title) {
|
||||
$tw.wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title]);
|
||||
$tw.wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title], true);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,8 +77,9 @@ 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
|
||||
});
|
||||
failureNotification: event.paramObject && event.paramObject.failureNotification,
|
||||
plainText: event.paramObject && event.paramObject.plainText
|
||||
},event.paramObject && event.paramObject.type);
|
||||
});
|
||||
// Install the tm-focus-selector message
|
||||
$tw.rootWidget.addEventListener("tm-focus-selector",function(event) {
|
||||
|
||||
@@ -17,6 +17,9 @@ exports.name = "startup";
|
||||
exports.after = ["load-modules"];
|
||||
exports.synchronous = true;
|
||||
|
||||
// Set to `true` to enable performance instrumentation
|
||||
var PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = "$:/config/Performance/Instrumentation";
|
||||
|
||||
var widget = require("$:/core/modules/widgets/widget.js");
|
||||
|
||||
exports.startup = function() {
|
||||
@@ -54,6 +57,8 @@ exports.startup = function() {
|
||||
}
|
||||
// Initialise version
|
||||
$tw.version = $tw.utils.extractVersionInfo();
|
||||
// Set up the performance framework
|
||||
$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,"no") === "yes");
|
||||
// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers
|
||||
$tw.rootWidget = new widget.widget({
|
||||
type: "widget",
|
||||
|
||||
@@ -40,10 +40,10 @@ exports.getFieldString = function(field,defaultValue) {
|
||||
};
|
||||
|
||||
/*
|
||||
Get the value of a field as a list
|
||||
Get the value of a field as an array / list
|
||||
*/
|
||||
exports.getFieldList = function(field) {
|
||||
var value = this.fields[field];
|
||||
var value = this.getFieldString(field,null);
|
||||
// Check for a missing field
|
||||
if(value === undefined || value === null) {
|
||||
return [];
|
||||
|
||||
@@ -268,9 +268,10 @@ exports.copyStyles = function(srcDomNode,dstDomNode) {
|
||||
/*
|
||||
Copy plain text to the clipboard on browsers that support it
|
||||
*/
|
||||
exports.copyToClipboard = function(text,options) {
|
||||
options = options || {};
|
||||
text = text || "";
|
||||
exports.copyToClipboard = function(text,options,type) {
|
||||
var text = text || "";
|
||||
var options = options || {};
|
||||
var type = type || "text/plain";
|
||||
var textArea = document.createElement("textarea");
|
||||
textArea.style.position = "fixed";
|
||||
textArea.style.top = 0;
|
||||
@@ -283,10 +284,16 @@ exports.copyToClipboard = function(text,options) {
|
||||
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");
|
||||
|
||||
@@ -216,11 +216,11 @@ HttpClientRequest.prototype.send = function(callback) {
|
||||
if(lengthComputable) {
|
||||
setBinding(self.bindProgress,"" + Math.floor((loaded/total) * 100))
|
||||
}
|
||||
self.wiki.invokeActionString(self.progressActions,undefined,{
|
||||
self.wiki.invokeActionString(self.progressActions,undefined,$tw.utils.extend({},self.variables,{
|
||||
lengthComputable: lengthComputable ? "yes" : "no",
|
||||
loaded: loaded,
|
||||
total: total
|
||||
},{parentWidget: $tw.rootWidget});
|
||||
}),{parentWidget: $tw.rootWidget});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ CreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {
|
||||
}
|
||||
this.setVariable("createTiddler-title",title);
|
||||
this.setVariable("createTiddler-draftTitle",draftTitle);
|
||||
this.refreshChildren();
|
||||
this.refreshChildren([]);
|
||||
return true; // Action was invoked
|
||||
};
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ CheckboxWidget.prototype.getValue = function() {
|
||||
if(this.checkboxTag) {
|
||||
return false;
|
||||
}
|
||||
if(this.checkboxField) {
|
||||
if(this.checkboxField || this.checkboxIndex) {
|
||||
if(this.checkboxDefault === this.checkboxChecked) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -43,15 +43,6 @@ EditWidget.prototype.execute = function() {
|
||||
// Get our parameters
|
||||
this.editTitle = this.getAttribute("tiddler",this.getVariable("currentTiddler"));
|
||||
this.editField = this.getAttribute("field","text");
|
||||
this.editIndex = this.getAttribute("index");
|
||||
this.editClass = this.getAttribute("class");
|
||||
this.editPlaceholder = this.getAttribute("placeholder");
|
||||
this.editTabIndex = this.getAttribute("tabindex");
|
||||
this.editFocus = this.getAttribute("focus","");
|
||||
this.editCancelPopups = this.getAttribute("cancelPopups","");
|
||||
this.editInputActions = this.getAttribute("inputActions");
|
||||
this.editRefreshTitle = this.getAttribute("refreshTitle");
|
||||
this.editAutoComplete = this.getAttribute("autocomplete");
|
||||
// Choose the appropriate edit widget
|
||||
this.editorType = this.getEditorType();
|
||||
// Make the child widgets
|
||||
@@ -89,8 +80,8 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
|
||||
*/
|
||||
EditWidget.prototype.refresh = function(changedTiddlers) {
|
||||
var changedAttributes = this.computeAttributes();
|
||||
// Refresh if an attribute has changed, or the type associated with the target tiddler has changed
|
||||
if(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || (this.getEditorType() !== this.editorType)) {
|
||||
// Refresh if the editor type has changed
|
||||
if(changedAttributes.tiddler || changedAttributes.field || (this.getEditorType() !== this.editorType)) {
|
||||
this.refreshSelf();
|
||||
return true;
|
||||
} else {
|
||||
|
||||
@@ -24,6 +24,10 @@ Inherit from the base widget class
|
||||
*/
|
||||
FillWidget.prototype = new Widget();
|
||||
|
||||
FillWidget.prototype.execute = function() {
|
||||
// Do nothing. Make no child widgets. $Fill widgets should be invisible when naturally encountered. Instead, their parseTreeNodes are made available to $slot widgets that want it.
|
||||
};
|
||||
|
||||
exports.fill = FillWidget;
|
||||
|
||||
})();
|
||||
|
||||
@@ -23,15 +23,21 @@ Inherit from the base widget class
|
||||
*/
|
||||
GenesisWidget.prototype = new Widget();
|
||||
|
||||
GenesisWidget.prototype.computeAttributes = function(options) {
|
||||
options = options || Object.create(null);
|
||||
options.filterFn = function(name) {
|
||||
// Only compute our own attributes which start with a single dollar
|
||||
return name.charAt(0) === "$" && name.charAt(1) !== "$";
|
||||
}
|
||||
return Widget.prototype.computeAttributes.call(this,options);
|
||||
};
|
||||
|
||||
/*
|
||||
Render this widget into the DOM
|
||||
*/
|
||||
GenesisWidget.prototype.render = function(parent,nextSibling) {
|
||||
this.parentDomNode = parent;
|
||||
this.computeAttributes({filterFn: function(name) {
|
||||
// Only compute our own attributes which start with a single dollar
|
||||
return name.charAt(0) === "$" && name.charAt(1) !== "$";
|
||||
}});
|
||||
this.computeAttributes();
|
||||
this.execute();
|
||||
this.renderChildren(parent,nextSibling);
|
||||
};
|
||||
|
||||
@@ -107,6 +107,7 @@ ImportVariablesWidget.prototype.execute = function(tiddlerList) {
|
||||
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
|
||||
*/
|
||||
ImportVariablesWidget.prototype.refresh = function(changedTiddlers) {
|
||||
changedTiddlers = changedTiddlers || {};
|
||||
// Recompute our attributes and the filter list
|
||||
var changedAttributes = this.computeAttributes(),
|
||||
tiddlerList = this.wiki.filterTiddlers(this.getAttribute("filter"),this);
|
||||
|
||||
@@ -141,12 +141,15 @@ This method should be called after the changes it describes have been made to th
|
||||
title: Title of tiddler
|
||||
isDeleted: defaults to false (meaning the tiddler has been created or modified),
|
||||
true if the tiddler has been deleted
|
||||
isShadow: defaults to false (meaning the change applies to the normal tiddler),
|
||||
true if the tiddler being changed is a shadow tiddler
|
||||
*/
|
||||
exports.enqueueTiddlerEvent = function(title,isDeleted) {
|
||||
exports.enqueueTiddlerEvent = function(title,isDeleted,isShadow) {
|
||||
// Record the touch in the list of changed tiddlers
|
||||
this.changedTiddlers = this.changedTiddlers || Object.create(null);
|
||||
this.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);
|
||||
this.changedTiddlers[title][isDeleted ? "deleted" : "modified"] = true;
|
||||
this.changedTiddlers[title][isShadow ? "shadow" : "normal"] = true;
|
||||
// Increment the change count
|
||||
this.changeCount = this.changeCount || Object.create(null);
|
||||
if($tw.utils.hop(this.changeCount,title)) {
|
||||
|
||||
@@ -78,13 +78,13 @@ code-background: <<colour background>>
|
||||
code-border: <<colour flexoki-tx>>
|
||||
code-foreground: <<colour flexoki-tx>>
|
||||
diff-delete-background: <<colour flexoki-re>>
|
||||
diff-delete-foreground: <<colour flexoki-paper>>
|
||||
diff-delete-foreground: <<colour flexoki-bg-2>>
|
||||
diff-equal-background:
|
||||
diff-equal-foreground: inherit
|
||||
diff-insert-background: <<colour flexoki-gr>>
|
||||
diff-insert-foreground: <<colour flexoki-paper>>
|
||||
diff-insert-foreground: <<colour flexoki-bg-2>>
|
||||
diff-invisible-background: <<colour flexoki-ye>>
|
||||
diff-invisible-foreground: <<colour flexoki-paper>>
|
||||
diff-invisible-foreground: <<colour flexoki-bg-2>>
|
||||
dirty-indicator: <<colour flexoki-re>>
|
||||
download-background: <<colour flexoki-cy-2>>
|
||||
download-foreground: <<colour background>>
|
||||
@@ -103,8 +103,8 @@ external-link-foreground-visited: <<colour flexoki-bl>>
|
||||
external-link-foreground: <<colour flexoki-bl>>
|
||||
footnote-target-background: <<colour flexoki-bg-2>>
|
||||
foreground: #CECDC3
|
||||
highlight-background: <<colour flexoki-cyan-950>>
|
||||
highlight-foreground: <<colour flexoki-cyan-400>>
|
||||
highlight-background: <<colour flexoki-yellow-900>>
|
||||
highlight-foreground: inherit
|
||||
menubar-background: <<colour primary>>
|
||||
menubar-foreground: <<colour flexoki-paper>>
|
||||
message-background: <<colour background>>
|
||||
|
||||
@@ -105,7 +105,7 @@ external-link-foreground-visited: <<colour flexoki-bl>>
|
||||
external-link-foreground: <<colour flexoki-bl>>
|
||||
footnote-target-background: <<colour flexoki-bg-2>>
|
||||
foreground: #100F0F
|
||||
highlight-background: <<colour flexoki-cyan-050>>
|
||||
highlight-background: <<colour flexoki-yellow-100>>
|
||||
highlight-foreground: inherit
|
||||
menubar-background: <<colour primary>>
|
||||
menubar-foreground: <<colour flexoki-paper>>
|
||||
|
||||
@@ -2,5 +2,6 @@ title: $:/core/templates/exporters/CsvFile
|
||||
tags: $:/tags/Exporter
|
||||
description: {{$:/language/Exporters/CsvFile}}
|
||||
extension: .csv
|
||||
file-type: text/csv
|
||||
|
||||
<$macrocall $name="csvtiddlers" filter=<<exportFilter>> format="quoted-comma-sep" $output="text/raw"/>
|
||||
|
||||
@@ -2,5 +2,6 @@ title: $:/core/templates/exporters/JsonFile
|
||||
tags: $:/tags/Exporter
|
||||
description: {{$:/language/Exporters/JsonFile}}
|
||||
extension: .json
|
||||
file-type: application/json
|
||||
|
||||
<$macrocall $name="jsontiddlers" filter=<<exportFilter>> $output="text/raw"/>
|
||||
|
||||
@@ -2,6 +2,7 @@ title: $:/core/templates/exporters/TidFile
|
||||
tags: $:/tags/Exporter
|
||||
description: {{$:/language/Exporters/TidFile}}
|
||||
extension: .tid
|
||||
file-type: text/vnd.tiddlywiki
|
||||
condition: [<count>compare:lte[1]]
|
||||
|
||||
\define renderContent()
|
||||
|
||||
@@ -5,6 +5,7 @@ description: {{$:/language/Buttons/AdvancedSearch/Hint}}
|
||||
|
||||
\whitespace trim
|
||||
\procedure advanced-search-button(class)
|
||||
\whitespace trim
|
||||
<$button to="$:/AdvancedSearch" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=`$(tv-config-toolbar-class)$ $(class)$`>
|
||||
<%if [<tv-config-toolbar-icons>match[yes]] %>
|
||||
{{$:/core/images/advanced-search-button}}
|
||||
|
||||
@@ -5,6 +5,7 @@ description: {{$:/language/Buttons/ControlPanel/Hint}}
|
||||
|
||||
\whitespace trim
|
||||
\procedure control-panel-button(class)
|
||||
\whitespace trim
|
||||
<$button to="$:/ControlPanel" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=`$(tv-config-toolbar-class)$ $(class)$`>
|
||||
<%if [<tv-config-toolbar-icons>match[yes]] %>
|
||||
{{$:/core/images/options-button}}
|
||||
|
||||
@@ -7,11 +7,7 @@ description: {{$:/language/Buttons/Language/Hint}}
|
||||
<span class="tc-popup-keep">
|
||||
<$button popup=<<qualify "$:/state/popup/language">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass="tc-selected">
|
||||
<%if [<tv-config-toolbar-icons>match[yes]] %>
|
||||
<span class="tc-image-button">
|
||||
<$set name="languagePluginTitle" value={{$:/language}}>
|
||||
<$image source=`$(languagePluginTitle)$/icon`/>
|
||||
</$set>
|
||||
</span>
|
||||
{{$:/core/images/language}}
|
||||
<%endif%>
|
||||
<%if [<tv-config-toolbar-text>match[yes]] %>
|
||||
<span class="tc-btn-text"><$text text={{$:/language/Buttons/Language/Caption}}/></span>
|
||||
|
||||
@@ -5,6 +5,7 @@ description: {{$:/language/Buttons/Manager/Hint}}
|
||||
|
||||
\whitespace trim
|
||||
\procedure manager-button(class)
|
||||
\whitespace trim
|
||||
<$button to="$:/Manager" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=`$(tv-config-toolbar-class)$ $(class)$`>
|
||||
<%if [<tv-config-toolbar-icons>match[yes]] %>
|
||||
{{$:/core/images/list}}
|
||||
|
||||
@@ -4,10 +4,17 @@ caption: {{$:/core/images/save-button-dynamic}} {{$:/language/Buttons/SaveWiki/C
|
||||
description: {{$:/language/Buttons/SaveWiki/Hint}}
|
||||
|
||||
\whitespace trim
|
||||
<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>
|
||||
\procedure saveActions()
|
||||
<$wikify name="site-title" text={{$:/config/SaveWikiButton/Filename}}>
|
||||
<$action-sendmessage $message="tm-save-wiki" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>
|
||||
<$action-sendmessage $message="tm-save-wiki" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>
|
||||
</$wikify>
|
||||
\end
|
||||
|
||||
<$button actions=<<saveActions>>
|
||||
tooltip={{$:/language/Buttons/SaveWiki/Hint}}
|
||||
aria-label={{$:/language/Buttons/SaveWiki/Caption}}
|
||||
class=<<tv-config-toolbar-class>>
|
||||
>
|
||||
<span class="tc-dirty-indicator">
|
||||
<%if [<tv-config-toolbar-icons>match[yes]] %>
|
||||
{{$:/core/images/save-button-dynamic}}
|
||||
|
||||
@@ -5,6 +5,7 @@ description: {{$:/language/Buttons/TagManager/Hint}}
|
||||
|
||||
\whitespace trim
|
||||
\procedure control-panel-button(class)
|
||||
\whitespace trim
|
||||
<$button to="$:/TagManager" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=`$(tv-config-toolbar-class)$ $(class)$`>
|
||||
<%if [<tv-config-toolbar-icons>match[yes]] %>
|
||||
{{$:/core/images/tag-button}}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
title: SampleBackgroundAction: Dark Mode
|
||||
tags: $:/tags/BackgroundAction
|
||||
track-filter: [{$:/info/browser/darkmode}]
|
||||
|
||||
<%if [{$:/info/browser/darkmode}match[no]] %>
|
||||
<$action-setfield $tiddler="$:/palette" text="$:/palettes/Vanilla"/>
|
||||
<%else%>
|
||||
<$action-setfield $tiddler="$:/palette" text="$:/palettes/SolarizedDark"/>
|
||||
<%endif%>
|
||||
@@ -1,15 +0,0 @@
|
||||
title: SampleBackgroundAction: Story Change
|
||||
tags: $:/tags/BackgroundAction
|
||||
track-filter: [list[$:/StoryList]]
|
||||
|
||||
<$action-sendmessage $message="tm-notify" $param="SampleBackgroundAction: Story Change" list={{$:/StoryList!!list}}/>
|
||||
|
||||
Story List:
|
||||
|
||||
<ol>
|
||||
<$list filter="[enlist<list>]">
|
||||
<li>
|
||||
<$text text=<<currentTiddler>>/>
|
||||
</li>
|
||||
</$list>
|
||||
</ol>
|
||||
@@ -1,5 +0,0 @@
|
||||
title: $:/core/wiki/config/MediaQueryTrackers/DarkLightPreferred
|
||||
tags: $:/tags/MediaQueryTracker
|
||||
media-query: (prefers-color-scheme: dark)
|
||||
info-tiddler: $:/info/browser/darkmode
|
||||
info-tiddler-alt: $:/info/darkmode
|
||||
@@ -1,25 +1,12 @@
|
||||
title: $:/snippets/languageswitcher
|
||||
|
||||
\define flag-title()
|
||||
$(languagePluginTitle)$/icon
|
||||
\end
|
||||
\whitespace trim
|
||||
|
||||
<$linkcatcher to="$:/language">
|
||||
<div class="tc-chooser tc-language-chooser">
|
||||
<$list filter="[[$:/languages/en-GB]] [plugin-type[language]sort[description]]">
|
||||
<$set name="cls" filter="[all[current]field:title{$:/language}]" value="tc-chooser-item tc-chosen" emptyValue="tc-chooser-item"><div class=<<cls>>>
|
||||
<$set name="cls" filter="[all[current]field:title{$:/language}]" value="tc-chooser-item tc-chosen" emptyValue="tc-chooser-item">
|
||||
<div class=<<cls>> lang={{!!name}}>
|
||||
<$link>
|
||||
<span class="tc-image-button">
|
||||
<$set name="languagePluginTitle" value=<<currentTiddler>>>
|
||||
<$transclude subtiddler=<<flag-title>>>
|
||||
<$list filter="[all[current]field:title[$:/languages/en-GB]]">
|
||||
<$transclude tiddler="$:/languages/en-GB/icon"/>
|
||||
</$list>
|
||||
</$transclude>
|
||||
</$set>
|
||||
</span>
|
||||
 
|
||||
<$view field="description">
|
||||
<$view field="name">
|
||||
<$view field="title"/>
|
||||
|
||||
@@ -3,9 +3,11 @@ tags: $:/tags/Macro
|
||||
|
||||
\whitespace trim
|
||||
|
||||
\procedure copy-to-clipboard(src,class:"tc-btn-invisible",style)
|
||||
<$button message="tm-copy-to-clipboard"
|
||||
param=<<src>>
|
||||
\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>>
|
||||
class=<<class>>
|
||||
style=<<style>>
|
||||
tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}
|
||||
@@ -15,12 +17,12 @@ tags: $:/tags/Macro
|
||||
<$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>
|
||||
</span>
|
||||
</$button>
|
||||
\end
|
||||
\end copy-to-clipboard
|
||||
|
||||
\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>>/>
|
||||
\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>>/>
|
||||
</div>
|
||||
</div>
|
||||
\end
|
||||
|
||||
@@ -39,6 +39,7 @@ tags: $:/tags/Macro
|
||||
$param=<<currentTiddler>>
|
||||
exportFilter=<<exportFilter>>
|
||||
filename={{{ [<baseFilename>addsuffix{!!extension}] }}}
|
||||
type={{!!file-type}}
|
||||
/>
|
||||
<$action-deletetiddler $tiddler=<<qualify "$:/state/popup/export">>/>
|
||||
<$transclude field="description"/>
|
||||
|
||||
@@ -102,7 +102,11 @@ tags: $:/tags/Macro
|
||||
<$genesis $type=<<elementTag>>>
|
||||
<$transclude tiddler=<<itemTemplate>>>
|
||||
<$link to={{!!title}}>
|
||||
<$view field="title"/>
|
||||
<$let tv-wikilinks="no">
|
||||
<$transclude field="caption">
|
||||
<$view field="title"/>
|
||||
</$transclude>
|
||||
</$let>
|
||||
</$link>
|
||||
</$transclude>
|
||||
</$genesis>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
title: $:/core/macros/toc
|
||||
tags: $:/tags/Macro
|
||||
|
||||
|
||||
\define toc-open-icon() $:/core/images/down-arrow
|
||||
\define toc-closed-icon() $:/core/images/right-arrow
|
||||
|
||||
@@ -121,7 +120,7 @@ tags: $:/tags/Macro
|
||||
<$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item-selected" value="toc-item" >
|
||||
<li class=<<toc-item-class>>>
|
||||
<$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}>
|
||||
<$list filter="[all[current]tagging[]$sort$limit[1]] -[subfilter<__exclude__>]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>">
|
||||
<$list filter="[all[current]tagging[]$sort$] -[subfilter<__exclude__>] +[limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>">
|
||||
<$reveal type="nomatch" stateTitle=<<toc-state>> text="open">
|
||||
<$button setTitle=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
|
||||
<$transclude tiddler=<<toc-closed-icon>> />
|
||||
@@ -148,7 +147,7 @@ tags: $:/tags/Macro
|
||||
<$qualify name="toc-state" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>
|
||||
<$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item-selected" value="toc-item">
|
||||
<li class=<<toc-item-class>>>
|
||||
<$list filter="[all[current]tagging[]$sort$limit[1]] -[subfilter<__exclude__>]" variable="ignore" emptyMessage="""<$button class="tc-btn-invisible">{{$:/core/images/blank}}</$button><span class="toc-item-muted"><<toc-caption>></span>""">
|
||||
<$list filter="[all[current]tagging[]$sort$] -[subfilter<__exclude__>] +[limit[1]]" variable="ignore" emptyMessage="""<$button class="tc-btn-invisible">{{$:/core/images/blank}}</$button><span class="toc-item-muted"><<toc-caption>></span>""">
|
||||
<$reveal type="nomatch" stateTitle=<<toc-state>> text="open">
|
||||
<$button setTitle=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
|
||||
<$transclude tiddler=<<toc-closed-icon>> />
|
||||
|
||||
@@ -3,7 +3,7 @@ title: $:/snippets/paletteswitcher
|
||||
\whitespace trim
|
||||
<$linkcatcher to="$:/palette">
|
||||
<div class="tc-chooser">
|
||||
<$list filter="[all[shadows+tiddlers]tag[$:/tags/Palette]sort[name]]">
|
||||
<$list filter="[all[shadows+tiddlers]tag[$:/tags/Palette]!is[draft]sort[name]]">
|
||||
<$set name="cls" filter="[all[current]prefix{$:/palette}]" value="tc-chooser-item tc-chosen" emptyValue="tc-chooser-item">
|
||||
<div class=<<cls>>>
|
||||
<$link to={{!!title}}>
|
||||
|
||||
@@ -1,33 +1,9 @@
|
||||
title: Translations
|
||||
|
||||
\define flag-title()
|
||||
$(languagePluginTitle)$/icon
|
||||
\end
|
||||
|
||||
TiddlyWiki is currently available in <$count filter="[[$:/languages/en-GB]] [plugin-type[language]sort[title]] -[[$:/languages/de-AT]]"/> languages:
|
||||
|
||||
<div class="tc-drop-down-language-chooser" style="font-size: 7px; line-height: 8px; -moz-columns:6; -webkit-columns:6; columns:6;">
|
||||
<$list filter="[[$:/languages/en-GB]] [plugin-type[language]sort[title]] -[[$:/languages/de-AT]]">
|
||||
<div class="tc-language-list">
|
||||
<span class="tc-language-list-name tc-image-button">
|
||||
<$set name="languagePluginTitle" value=<<currentTiddler>>>
|
||||
<$transclude subtiddler=<<flag-title>>>
|
||||
<$list filter="[all[current]field:title[$:/languages/en-GB]]">
|
||||
<$transclude tiddler="$:/languages/en-GB/icon"/>
|
||||
</$list>
|
||||
</$transclude>
|
||||
</$set>
|
||||
<$view field="description">
|
||||
<$view field="name">
|
||||
<$view field="title"/>
|
||||
</$view>
|
||||
</$view>
|
||||
<$view subtiddler="$:/language/ControlPanel/Basics/Language/Prompt">
|
||||
<$view tiddler="$:/language/ControlPanel/Basics/Language/Prompt"/>
|
||||
</$view>
|
||||
</span>
|
||||
</div>
|
||||
</$list>
|
||||
<div style.height="400px" style.overflowY="auto">
|
||||
{{$:/snippets/languageswitcher}}
|
||||
</div>
|
||||
|
||||
Find out how to [[Get Started]].
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
"de-DE",
|
||||
"el-GR",
|
||||
"en-US",
|
||||
"en-PH",
|
||||
"es-ES",
|
||||
"fa-IR",
|
||||
"fr-FR",
|
||||
@@ -34,12 +35,15 @@
|
||||
"it-IT",
|
||||
"ja-JP",
|
||||
"ko-KR",
|
||||
"mk-MK",
|
||||
"nl-NL",
|
||||
"pa-IN",
|
||||
"pl-PL",
|
||||
"pt-BR",
|
||||
"pt-PT",
|
||||
"ru-RU",
|
||||
"sk-SK",
|
||||
"sl-SI",
|
||||
"sv-SE",
|
||||
"zh-CN",
|
||||
"zh-Hans",
|
||||
|
||||
24
editions/ja-JP/tiddlers/commands/NamedCommandParameters.tid
Normal file
24
editions/ja-JP/tiddlers/commands/NamedCommandParameters.tid
Normal file
@@ -0,0 +1,24 @@
|
||||
created: 20180626122427188
|
||||
modified: 20241228111603066
|
||||
original-modified: 20211117234223960
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: NamedCommandParameters
|
||||
ja-title: 名前付きコマンドパラメータ
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<.from-version "5.1.18">> ほとんどのTiddlyWiki[[コマンド|Commands]]は、パラメータに位置に基づくシステムを使用しており、各パラメータはコマンドで定義された正確な順序でリストされる必要があります。より複雑なコマンドの中には、名前付きコマンドパラメータの代替スキームを提供するものもあります。たとえば、ここでは"port"と"host"という2つのパラメータを提供します:
|
||||
|
||||
```
|
||||
--listen port=8090 host=0.0.0.0
|
||||
```
|
||||
|
||||
パラメータの順序は重要ではないことに注意してください。
|
||||
|
||||
パラメータ内で特殊文字を使用するには引用符が必要です。Unix、Linux、Macではシングルクォートが使用され、Windowsではダブルクォートが使用されます:
|
||||
|
||||
```
|
||||
--listen port=8090 username=joe 'password=s3cret(!'
|
||||
--listen port=8090 username=joe "password=s3cret(!"
|
||||
```
|
||||
|
||||
引用符は値の部分だけでなく、名前=値のペア全体を括ることに注意してください。
|
||||
42
editions/ja-JP/tiddlers/concepts/TiddlyWikiFolders.tid
Normal file
42
editions/ja-JP/tiddlers/concepts/TiddlyWikiFolders.tid
Normal file
@@ -0,0 +1,42 @@
|
||||
created: 20130825214200000
|
||||
modified: 20250203103623306
|
||||
original-modified: 20161015134454785
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: TiddlyWikiFolders
|
||||
ja-title: TiddlyWikiフォルダ
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
[[Node.js上のTiddlyWiki|TiddlyWiki on Node.js]]は、従来の単一ファイルWikiと同様に、フォルダーに保存される個々のTiddlerファイルのWikiもサポートします。
|
||||
|
||||
! Wikiフォルダ構造
|
||||
|
||||
Wikiフォルダーには、次のファイルとフォルダーを含めることができます:
|
||||
|
||||
* ''tiddlywiki.info'' - Wikiのメタデータを含むJSONファイル -- [[tiddlywiki.infoファイル|tiddlywiki.info Files]]を参照
|
||||
* ''\tiddlers'' - Wikiを構成するTiddlerファイルを含むフォルダ
|
||||
* ''\plugins'' - Wikiに含める[[プラグインフォルダ|PluginFolders]]を含むフォルダ
|
||||
* ''\languages'' - Wikiに含める言語プラグインの[[プラグインフォルダ|PluginFolders]]を含むフォルダ
|
||||
* ''\themes'' - Wikiに含めるテーマプラグインの[[プラグインフォルダ|PluginFolders]]を含むフォルダ
|
||||
|
||||
''tiddlywiki.info''ファイルのみが必須で、その他はすべてオプションです。上記にリストされていないファイルとフォルダーは無視されます。
|
||||
|
||||
!! プラグイン処理
|
||||
|
||||
ブラウザで使用できるようにするには、プラグインをWikiに含める必要があります。サーバー上で生成されるWikiの場合、[[TiddlyWikiフォルダ|TiddlyWikiFolders]]には、このWikiに含めるプラグインの識別を[[tiddlywiki.infoファイル|tiddlywiki.info Files]]に含めることができます:
|
||||
|
||||
```
|
||||
{
|
||||
"plugins": [
|
||||
"tiddlywiki/slider",
|
||||
"tiddlytools/chooser"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
プラグイン名は、TiddlyWiki5のルート`plugins`フォルダーにリストされているプラグインフォルダーを参照します。プラグインは、Wikiの`plugins`サブフォルダーにコピーして手動で含めることもできます。
|
||||
|
||||
!! `tiddlers`フォルダの処理
|
||||
|
||||
`tiddlers`フォルダー内のすべての[[Tiddlerファイル|TiddlerFiles]]は、起動時にWikiに読み込まれます。サブフォルダーは[[Tiddlerファイル|TiddlerFiles]]の再帰スキャンの対象となります。新しく作成されたTiddlerは、[[特に設定されて|Customising Tiddler File Naming]]いない限り、`tiddlers`フォルダーの直下の[[Tiddlerファイル|TiddlerFiles]]に保存されます。
|
||||
|
||||
`tiddlers`フォルダー内のサブフォルダーのデフォルトの処理は、`tiddlywiki.files`と呼ばれるJSONファイルを提供することで上書きできます -- [[tiddlywiki.filesファイル|tiddlywiki.files Files]]を参照。
|
||||
21
editions/ja-JP/tiddlers/definitions/TiddlyDesktop.tid
Normal file
21
editions/ja-JP/tiddlers/definitions/TiddlyDesktop.tid
Normal file
@@ -0,0 +1,21 @@
|
||||
created: 20140126125259638
|
||||
modified: 20241227104451970
|
||||
original-modified: 20171118195316103
|
||||
tags: Definitions Platforms
|
||||
title: TiddlyDesktop
|
||||
ja-title: TiddlyDesktop
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
TiddlyDesktopは、TiddlyWikiファイル(TiddlyWikiClassicとTiddlyWikiバージョン5の両方)を操作するためのアプリです。Windowsや、Mac OS X、Linuxにインストールできます。TiddlyWikiバージョン5と古いTiddlyWikiClassicと互換性があります
|
||||
|
||||
{{Saving on TiddlyDesktop}}
|
||||
|
||||
{{Introducing TiddlyDesktop Video}}
|
||||
|
||||
! ソース
|
||||
|
||||
TiddlyDesktopは、[[オープンソース|OpenSource]]プロジェクト[[NW.js]]をベースにしています。ソースはGitHubにあります:
|
||||
|
||||
https://github.com/TiddlyWiki/TiddlyDesktop/
|
||||
|
||||
[[TiddlyDesktopのリリース|TiddlyDesktop Releases]]と[[TiddlyDesktopのカスタマイズ方法|How to Customize TiddlyDesktop]]を参照してください
|
||||
@@ -0,0 +1,31 @@
|
||||
created: 20150621181334837
|
||||
modified: 20250124111732489
|
||||
original-modified: 20150621181400844
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: MultiTiddlerFileSyntax
|
||||
ja-title: マルチTiddlerファイル構文
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
!!! [[マルチTiddlerファイル|MultiTiddlerFiles]]
|
||||
|
||||
<$railroad text="""
|
||||
{<"ヘッダー行">} "空行" {(<"Tiddler記述行"> | <"コメント行">)}
|
||||
"""/>
|
||||
|
||||
!!! ヘッダー行
|
||||
|
||||
<$railroad text="""
|
||||
<"識別子"> ":" {"ホワイトスペース"} <"値"> "改行"
|
||||
"""/>
|
||||
|
||||
!!! Tiddler記述行
|
||||
|
||||
<$railroad text="""
|
||||
<"ファイルパス"> ":" {"ホワイトスペース"} <"Tiddlerタイトル"> "改行"
|
||||
"""/>
|
||||
|
||||
!!! コメント行
|
||||
|
||||
<$railroad text="""
|
||||
"#" {("テキスト" | "ホワイトスペース")} "改行"
|
||||
"""/>
|
||||
38
editions/ja-JP/tiddlers/fileformats/MultiTiddlerFiles.tid
Normal file
38
editions/ja-JP/tiddlers/fileformats/MultiTiddlerFiles.tid
Normal file
@@ -0,0 +1,38 @@
|
||||
created: 20140209143652456
|
||||
modified: 20250123115055695
|
||||
original-modified: 20150621182140407
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: MultiTiddlerFiles
|
||||
ja-title: マルチTiddlerファイル
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
MultiTiddlerFilesを使用すると、複数のTiddlerを1つのテキストファイルに簡潔に表現できます。
|
||||
|
||||
この形式の目標は次のとおりです:
|
||||
|
||||
* 入力しやすく、読みやすい
|
||||
* 単一行の文字列に最適化
|
||||
* Tiddlerのグループ内で共通のフィールドやタグを共有できるようにする
|
||||
* 外部ツールで簡単に処理できるようにする
|
||||
|
||||
MultiTiddlerFilesの拡張子は`multids`です。ファイルは、共有フィールドのブロックとそれに続く空白行で構成されます。ファイルの残りの部分は、コメントとTiddlerのシーケンスです。Tiddlerはタイトルで指定され、その後にコロン、少なくとも1つのスペース文字が続き、行の残りの部分はTiddlerのテキストフィールドになります。
|
||||
|
||||
例:
|
||||
|
||||
```
|
||||
title: $:/language/ControlPanel/
|
||||
tags: strings
|
||||
modifier: JoeBloggs
|
||||
|
||||
Basics/Caption: Basics
|
||||
# This is a comment
|
||||
Basics/Version: ~TiddlyWiki Version
|
||||
```
|
||||
|
||||
この例では、[[$:/language/ControlPanel/Basics/Caption]]と[[$:/language/ControlPanel/Basics/Version]]の2つのTiddlerを定義します。
|
||||
|
||||
ヘッダーで`title`フィールドが指定されている場合、タイトルで定義された個々のTiddlerのプレフィックスとして扱われます。
|
||||
|
||||
!! 構文の仕様
|
||||
|
||||
{{MultiTiddlerFileSyntax}}
|
||||
112
editions/ja-JP/tiddlers/fileformats/TiddlerFiles.tid
Normal file
112
editions/ja-JP/tiddlers/fileformats/TiddlerFiles.tid
Normal file
@@ -0,0 +1,112 @@
|
||||
created: 20130825150000000
|
||||
modified: 20250125105846987
|
||||
original-modified: 20210714130751701
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: TiddlerFiles
|
||||
ja-title: Tiddlerファイル
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Tiddlerは、さまざまな形式でテキストファイルに保存できます。単一のTiddlerを含むファイルには、名前:値のペアのシーケンスとしてフォーマットされた`.meta`補助ファイルを持つこともできます。
|
||||
|
||||
```
|
||||
title: TheTitle
|
||||
modifier: someone
|
||||
```
|
||||
|
||||
!! ~TiddlyWebスタイルの.tidファイル
|
||||
|
||||
これらのファイルは、名前:値のペア、空白行、そしてTiddlerのテキストを含む一連の行で構成されます。例:
|
||||
|
||||
```
|
||||
title: MyTiddler
|
||||
modifier: Jeremy
|
||||
|
||||
This is the text of my tiddler.
|
||||
```
|
||||
|
||||
多くのテキストエディターでは、ファイルに終了改行が含まれている必要があることに注意してください。Tiddlerのテキストに終了改行を含めたくない場合は、次の代替構文を使用できます:
|
||||
|
||||
```
|
||||
title: MyTiddler
|
||||
modifier: Jeremy
|
||||
text: This is the text of my tiddler.
|
||||
```
|
||||
|
||||
//`application/x-tiddler` ContentTypeはこれらのファイルの内部で使用されます//
|
||||
|
||||
!! TiddlyWiki `<DIV>` .tiddlerファイル
|
||||
|
||||
TiddlyWiki 5では、`*.tiddler`ファイルは次のようになります。
|
||||
|
||||
```
|
||||
<div title="AnotherExampleStyleSheet" modifier="blaine" created="201102111106" modified="201102111310" tags="examples" creator="psd">
|
||||
<pre>Note that there is an embedded <pre> tag, and line feeds are not escaped.
|
||||
|
||||
And, weirdly, there is no HTML encoding of the body.</pre>
|
||||
</div>
|
||||
```
|
||||
|
||||
これらの`*.tiddler`ファイルは、HTML エンコードされたTiddlyWiki HTMLファイル内のTiddlerとまったく同じではありません。
|
||||
|
||||
Older `*.tiddler` files more closely matched the store format used by TiddlyWiki at the time:
|
||||
古い`*.tiddler`ファイルは、当時TiddlyWikiで使用されていたストア形式に似ています:
|
||||
|
||||
```
|
||||
<div tiddler="AnotherExampleStyleSheet" modifier="JeremyRuston" modified="200508181432" created="200508181432" tags="examples">This is an old-school .tiddler file, without an embedded <pre> tag.\nNote how the body is "HTML encoded" and new lines are escaped to \\n</div>
|
||||
```
|
||||
|
||||
//`application/x-tiddler-html-div` ContentTypeはこれらのファイルの内部で使用されます//
|
||||
|
||||
!! ~TiddlyWebスタイルのJSONファイル
|
||||
|
||||
これらのファイルは、`name:value`プロパティのハッシュマップの単純な配列です。すべてのフィールド値は文字列として指定する必要があります。
|
||||
|
||||
例:
|
||||
|
||||
```
|
||||
[
|
||||
{
|
||||
"title": "First Tiddler",
|
||||
"text": "Text of first tiddler",
|
||||
"tags": "one two [[t h r e e]]"
|
||||
},{
|
||||
"title": "Second Tiddler",
|
||||
"text": "Text of second tiddler",
|
||||
"modified": "20150216171751154"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
`application/json` ContentTypeはこれらのファイルに対して内部で使用されます。
|
||||
|
||||
Tiddler構造に準拠していないJSONファイルは、代わりにJSONデータを含む単一のTiddlerとしてインポートされることに注意してください。
|
||||
|
||||
!! TiddlyWiki HTMLファイル用の新しいJSONベースの形式
|
||||
|
||||
TiddlyWiki HTMLファイルの新しい形式では、スクリプトタグ内にJSON形式のTiddlerが埋め込まれます:
|
||||
|
||||
```json
|
||||
<script class="tiddlywiki-tiddler-store" type="application/json">[
|
||||
{"title": "A","text": "One"},
|
||||
{"title": "B","text": "Two"}
|
||||
]</script>
|
||||
```
|
||||
|
||||
!! TiddlyWiki HTMLファイル用の古いDIVベースの形式
|
||||
|
||||
TiddlyWikiクラシックおよびバージョンv5.2.0より前のTiddlyWiki 5では、Tiddlerは`<DIV>`形式でエンコードされて保存されていました。
|
||||
|
||||
TiddlyWikiが暗号化されていないDIVベースのHTMLファイルをインポートするには、上で説明したようにTiddler DIVを含んだ`<div id="storeArea">`が必要です。例:
|
||||
|
||||
```
|
||||
<div id="storeArea">
|
||||
<div created="20130302085406905" modified="20130302084548184" tags="Examples" title="A tiddler title">
|
||||
<pre>HTML encoded text of tiddler
|
||||
</pre>
|
||||
</div>
|
||||
<div created="20140315085406905" modified="20140321084548184" tags="One Two [[Three with Space]]" title="Another title" customfield="field value">
|
||||
<pre>Text of this tiddler
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
@@ -0,0 +1,37 @@
|
||||
created: 20130828190200000
|
||||
modified: 20250120105549696
|
||||
original-modified: 20241008031135403
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Generating Static Sites with TiddlyWiki
|
||||
ja-title: TiddlyWikiで静的サイトを生成する
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
TiddlyWiki5は、JavaScriptを必要としないTiddlyWikiの静的HTML表現を生成できます。このプロセスでは、ローカルシステムのNode.jsにTiddlyWikiがインストールされている必要があります。詳細については、[[Node.jsにTiddlyWikiをインストールする|Installing TiddlyWiki on Node.js]]を参照してください。
|
||||
|
||||
静的HTMLの生成方法には多くの柔軟性があります。次のシナリオはすべて https://tiddlywiki.com で説明されています。
|
||||
|
||||
! WikiスナップショットとTiddlerスナップショット
|
||||
|
||||
https://tiddlywiki.com/static.html で、メインのTiddlyWikiサイトの静的な表現を見ることができます。このファイルは、現在のDefaultTiddlersの静的スナップショットです。このファイルにリンクされているすべてのTiddlerは、個々のTiddlerの静的スナップショットを指す`/static/HelloThere.html`形式のURLによって参照されます。TiddlerのHTMLファイルは、`static.css`スタイルシートファイルを参照します。
|
||||
|
||||
次のコマンドは、TiddlyWiki5サイトの静的バージョンのサンプルを生成するために使用されます:
|
||||
|
||||
```sh
|
||||
tiddlywiki wikipath --render '[!is[system]]' '[encodeuricomponent[]addprefix[static/]addsuffix[.html]]' text/plain $:/core/templates/static.tiddler.html
|
||||
tiddlywiki wikipath --render $:/core/templates/static.template.html static.html text/plain
|
||||
tiddlywiki wikipath --render $:/core/templates/static.template.css static/static.css text/plain
|
||||
```
|
||||
|
||||
最初のRenderCommandは、フィルタ`[!is[system]]`を使用してすべての個別の非システムTiddlerのHTML表現を生成し、次のフィルタ`[encodeuricomponent[]addprefix[static/]addsufixx[.html]]`は各タイトルにURIエンコーディングを適用し、プレフィックス`static/`を追加して、最後にサフィックス`.html`を追加します。2番目のRenderCommandは、DefaultTiddlersの静的バージョンを`static.html`に保存し、最後のRenderCommandはスタイルシートを保存します。(すべてのファイルは、Wikiフォルダの`output`フォルダに配置されます)。
|
||||
|
||||
! 内部リンク付きWikiスナップショット
|
||||
|
||||
Tiddlerの静的表現を含み、標準のHTMLアンカーリンクを使用してそれらの間を移動する単一のHTMLファイルを作成することも可能です。
|
||||
|
||||
例: https://tiddlywiki.com/alltiddlers.html
|
||||
|
||||
この例は次のコマンドによって構築できます:
|
||||
|
||||
```
|
||||
--render $:/core/templates/alltiddlers.template.html alltiddlers.html text/plain
|
||||
```
|
||||
@@ -0,0 +1,19 @@
|
||||
created: 20131124220600000
|
||||
modified: 20250121112457196
|
||||
original-modified: 20241025051111864
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: How to build a TiddlyWiki5 from individual tiddlers
|
||||
ja-title: 個々のTiddlerからTiddlyWiki5を構築する方法
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
まず、[[Node.jsにTiddlyWikiをインストール|Installing TiddlyWiki on Node.js]]の説明に従ってTiddlyWikiをインストールします。
|
||||
|
||||
# 空の[[TiddlyWikiFolder|TiddlyWikiFolders]]を作成します
|
||||
## 適当な場所に新しいフォルダを作成します (例: `~/MyWiki`)
|
||||
## 次のテキストを含む`tiddlywiki.info`というファイルを作成します:
|
||||
##* `{"themes": ["tiddlywiki/vanilla","tiddlywiki/snowwhite"]}`
|
||||
## `tiddlers`というサブフォルダを作成します
|
||||
##* あるいは、TiddlyWiki5リポジトリから、`editions/empty`フォルダをコピーします
|
||||
# `~/MyWiki/tiddlers`ディレクトリ内に個々のTiddlerFilesを作成します
|
||||
# TiddlyWiki5ルートディレクトリから次のコマンドを実行して、TiddlerからTiddlyWiki5ファイルを構築します:
|
||||
## `tiddlywiki ~/MyWiki --render $:/core/save/all index.html text/plain`
|
||||
@@ -0,0 +1,31 @@
|
||||
created: 20130825150100000
|
||||
modified: 20250204104525288
|
||||
original-modified: 20140912141559011
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Using TiddlyWiki for GitHub project documentation
|
||||
ja-title: GitHubプロジェクトのドキュメントにTiddlyWikiを使用する
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
TiddlyWiki5は、GitHubプロジェクトのドキュメントを作成するために使用できます。ソースコード管理下にある個別のTiddlerファイルを含む[[TiddlyWikiフォルダ|TiddlyWikiFolders]]として単一のドキュメントセットを維持し、それを使用してプロジェクトフォルダーに含める`readme.md`ファイルや[[GitHub Pages|http://pages.github.com/]]に保存するHTMLファイルを作成できます。両方の機能は、TiddlyWiki5自身によって実証されています。
|
||||
|
||||
! `readme.md`ファイルの生成
|
||||
|
||||
フォルダーの内容を表示する際、GitHubは`readme.md`ファイルを探して表示します。この方法では完全なHTMLファイルではなく、静的なMarkDownファイルのみが表示されることに注意してください(これはセキュリティ対策です)。幸いなことに、MarkDownはHTMLの安全なサブセットを許可しているため、GitHubに適した`readme.md`ファイルを生成するには、TiddlyWiki5がHTMLドキュメントの`<body>`要素の内容を生成し、適切なファイル名を付けるだけで済みます。
|
||||
|
||||
これは次のコマンドで実行できます:
|
||||
|
||||
```
|
||||
--rendertiddler ReadMe ./readme.md text/html
|
||||
```
|
||||
|
||||
ReadMe Tiddlerを`text/html`形式でファイル`./readme.md`に保存します。
|
||||
|
||||
デフォルトでは、Tiddlerのリンクは、Tiddlerのタイトルで構成される相対URIへのリンクとしてレンダリングされます。この動作は、ReadMe Tiddlerの先頭で行われているように、マクロ`tv-wikilink-template`を定義することで上書きできます
|
||||
|
||||
```
|
||||
\define tv-wikilink-template() https://tiddlywiki.com/static/$uri_doubleencoded$.html
|
||||
```
|
||||
|
||||
詳細については、LinkWidgetを参照してください。
|
||||
|
||||
この例では、Tiddlerのリンクはtw5.comの静的レンダリングへのリンクとしてレンダリングされます。
|
||||
@@ -0,0 +1,16 @@
|
||||
created: 20140613133627669
|
||||
modified: 20241230102718926
|
||||
original-modified: 20140912141613393
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Using a custom path prefix with the client-server edition
|
||||
ja-title: クライアント-サーバーエディションでカスタムのパスプレフィックスを使用する
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
デフォルトでは、[[Node.js上のTiddlyWiki|TiddlyWiki on Node.js]]を実行すると、サーバーはプロトコル、ホスト、ポートから形成されたURI - 例えば、`http://127.0.0.1:8080/`でWikiを公開します。
|
||||
|
||||
`http://127.0.0.1:8080/path/to/my/wiki/`のようなカスタムパスでWikiを実行するには、2つの手順があります:
|
||||
|
||||
# ServerCommandの''pathprefix''属性として`/path/to/my/wiki`を渡してサーバーを設定します
|
||||
# `$protocol$//$host$/path/to/my/wiki/`を含む、`$:/config/tiddlyweb/host`というTiddlerを作成してクライアントを設定します
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
created: 20151231083708980
|
||||
modified: 20241221105811581
|
||||
original-modified: 20211117212723856
|
||||
tags: Languages
|
||||
title: LanguageGallery Example
|
||||
ja-title: 言語ギャラリー
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
これは、ListWidgetとTranscludeWidgetを使用して、<<tag Language>>と<<tag Icon>>の[[タグ付け|Tagging]]された言語アイコンすべてをグリッド表示する例です。
|
||||
|
||||
<style>
|
||||
.language-gallery img {
|
||||
width: 5em;
|
||||
height: auto;
|
||||
margin: 0.5em;
|
||||
-webkit-box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
|
||||
box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
|
||||
}
|
||||
</style>
|
||||
<div class="language-gallery">
|
||||
<$list filter="[all[tiddlers+shadows]tag[Language]tag[Icon]]">
|
||||
<span title=<<currentTiddler>>>
|
||||
<$transclude/>
|
||||
</span>
|
||||
</$list>
|
||||
</div>
|
||||
@@ -0,0 +1,27 @@
|
||||
created: 20131129094452285
|
||||
modified: 20241227110457591
|
||||
original-modified: 20140912141658212
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Building TiddlyWikiClassic
|
||||
ja-title: TiddlyWikiClassicの構築
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
TiddlyWiki5を使用すれば、TiddlyWikiClassicの古いバージョン2.xxをその構成コンポーネントから構築できます。これには次の機能が含まれます:
|
||||
|
||||
* `tiddlywiki/classictools`プラグインには、TiddlyWiki 2.xxの`.recipe`ファイルからTiddlerをロードできるようにするデシリアライザモジュールが含まれています
|
||||
* ViewWidgetのための`stripcomments`フォーマットは、`//#`で始まる1行のJavaScriptコメントを削除します
|
||||
* FieldsWidgetの`stripTitlePrefix='yes'`属性は、`title`属性から中括弧で囲まれたプレフィックスを削除します
|
||||
** 例えば、`{tiddler}HelloThere`は、`HelloThere`に変換されます
|
||||
|
||||
! 使用法
|
||||
|
||||
TiddlyWikiClassicは、[[Node.js上のTiddlyWiki|TiddlyWiki on Node.js]]を実行することによってコマンドラインから構築されます。一般的な使用法は次のようになります:
|
||||
|
||||
```
|
||||
node ../../tiddlywiki.js \
|
||||
--verbose \
|
||||
--load <path_to_recipe_file> \
|
||||
--rendertiddler $:/core/templates/tiddlywiki2.template.html <path_to_write_index_file> text/plain \
|
||||
|| exit 1
|
||||
```
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
created: 20160424181300000
|
||||
modified: 20241230104855826
|
||||
original-modified: 20210803204659026
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Customising Tiddler File Naming
|
||||
ja-title: Tiddlerファイル名のカスタマイズ
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
デフォルトでは、[[Wikiフォルダー|TiddlyWikiFolders]]を使用する[[Node.js上のTiddlyWiki|TiddlyWiki on Node.js]]インスタンスは、サニタイズされ、曖昧さが解消されたタイトルをファイル名として使用して、新しいTiddlerファイルを作成します。すべてのファイルパス操作は、`default-tiddler-location`からの相対で、デフォルトではWikiフォルダーの`tiddlers/`ディレクトリです。`config`オブジェクトの`default-tiddler-location`プロパティを使用して、Wikiのtiddlywiki.infoファイル内のパスをマッピングすることで、これを上書きできます。
|
||||
|
||||
デフォルトのファイル拡張子`.tid`は、`type`フィールドが欠落しているTiddlerや、"text/vnd.tiddlywiki"タイプが"text/vnd.tiddlywiki"のTiddlerに使用されます。他のタイプのTiddlerは、(ブートスタートアップ時に定義される)MIMEタイプに従って保存されます。
|
||||
|
||||
オプションのTiddler[[$:/config/FileSystemPaths]]と[[$:/config/FileSystemExtensions]]を作成することにより、論理パス(ディレクトリとファイル名)とファイル拡張子を個別にカスタマイズできます。
|
||||
|
||||
! ファイルシステムパス
|
||||
|
||||
論理パスは、1つ以上の[[フィルター式|Filter Syntax]](各フィルター式は1行に1つずつ)を含む[[$:/config/FileSystemPaths]] Tiddlerを作成することでカスタマイズできます。Tiddlerがディスクに保存されるたびに、各フィルターが順番にテストされ、出力を生成する最初のフィルターの最初の出力が、Tiddlerファイルに使用される論理パスとして取得されます。論理パスが変更された場合は、新しいファイルが作成され、古いファイルは削除されます。
|
||||
|
||||
Tiddlerは、[[Wikiフォルダ|TiddlyWikiFolders]]、`default-tiddler-location`設定で定義されたパス、または $:/config/OriginalTiddlerPaths Tiddlerに保存された特定のパス([[tiddlywiki.filesファイル|tiddlywiki.files Files]]を参照)にのみ書き込むことができます。Tiddlerをディスクに保存するときに、論理パスがWikiフォルダのパスで始まらない(最も一般的なエラー)と、ファイルパスがJavascriptの`encodeURIComponent()`メソッドによってエンコードされ、Wikiフォルダの`default-tiddler-location`にTiddlerがファイルとして保存されます。
|
||||
|
||||
論理パスにはディスク上のファイルの拡張子は含まれません(下記参照)。また、ディレクトリ区切り文字として`/`や`\`を使用できます(物理パスを生成するときに、~TiddlyWikiが動作しているプラットフォームの正しい区切り文字に置き換えられます)。フィルターがどれも一致しない場合、論理パスは、結果のパスがすべてのサポートされているプラットフォームで有効であることを保証するため、すべての`/\<>~:"|?*^`文字が`_`に置き換えられたタイトルになります。論理パスも200文字に制限されています。この名前のファイルがすでに存在する場合、スペースと数字が最終的なファイルパスに追加され、未使用のパスが見つかるまで数字が増加していきます。
|
||||
|
||||
!! 例
|
||||
|
||||
```
|
||||
[is[system]!has[draft.of]removeprefix[$:/]addprefix[_system/]]
|
||||
[is[draft]search-replace:g:regexp[/|\\],[_]addprefix[drafts/]]
|
||||
[tag[task]addprefix[mytasks/]]
|
||||
[!tag[externalnote]addprefix[wiki/]]
|
||||
```
|
||||
|
||||
<<.note "すべてのパスはWikiの`default-tiddler-location`からの相対パスです。">>
|
||||
|
||||
これにより、他のTiddlerの下書きではない、新しく作成されたシステムTiddlerが`./_system/`(`$:/`プレフィックスの削除後)に保存されます。次に、すべての下書きのタイトルのパス区切り文字が"_"に置き換えられ、`./drafts/`に保存されます。そして、[[task]]タグが付けられたTiddlerがサブディレクトリ`./mytasks/`に保存されます。最後に、"externalnote"タグが付けられていないすべてのTiddlerが最終的に`[!tag[externalnote]addprefix[wiki/]]`に一致し、これらが`./wiki/`に保存されます。この例では、"externalnote"タグが付けられたTiddlerが[[tiddlywiki.filesファイル|tiddlywiki.files Files]]を使用してインポートされています。"isEditableFile"フラグがtrueに設定されているファイルにより、サーバーは$:/config/OriginalTiddlerPaths Tiddlerに元のファイルパスを記憶します。
|
||||
|
||||
Tiddlerが $:/config/FileSystemPaths フィルターのマッチを生成するたびに、Tiddlerのタイトル内の`/`や`\`がパス区切り文字にマップされます。上記のフィルターを使用すると、非システム、非ドラフトのTillder(タグなし)`some/thing/entirely/new`が`./wiki/some/thing/entirely/new.tid`に保存されます(つまり、`entirely/`というディレクトリ内の`new.tid`ファイル)。したがって、プラットフォームに応じて、 $:/config/FileSystemPaths 自体は`./_system/config/FileSystemPaths.tid`や`.\_system\config\FileSystemPaths.tid`に保存されます。
|
||||
|
||||
! ファイルシステム拡張子
|
||||
|
||||
通常、ディスク上のTiddlerのファイルシステム拡張子は、改行を含むフィールド値や空白で始まるか終わる(テキストフィールド以外の)フィールド値の存在によって決定されます。この場合、単一ファイル".json" Tiddlerファイル形式が使用されます。
|
||||
|
||||
Tiddlerにこのようなフィールド値がない場合、`type`フィールドが参照され、一致するファイルタイプが検索されます。タイプ値のないTiddlerの場合は`.tid`が使用されます。ブートエンジンは、[[$:/boot/boot.js]] Tiddlerで、Tiddlerタイプとファイルタイプの関係のセットを定義します。これらの関係を定義するコードのセクションを見つけるには、`// Add file extension information`を検索してください。
|
||||
|
||||
個々のTiddlerのファイル拡張子は、1つ以上の[[フィルタ式|Filter Syntax]](各行に1つずつ)を含むTiddler[[$:/config/FileSystemExtensions]]を作成することでカスタマイズできます。Tiddlerがディスクに保存されるたびに、これらのフィルタに対してテストされ、出力を生成する最初のフィルタの最初の出力が、Tiddlerファイルに使用されるファイル拡張子として使用されます。拡張子は常に先頭にドットを付ける必要があります(例を参照)。一致するフィルタがない場合は、デフォルトの拡張子が使用されます。拡張子が変更された場合は、新しいファイルが作成され、古いファイルは削除されます。
|
||||
|
||||
<<.note """".tid"の結果は、Tiddlerを単一ファイルのテキストTiddlerとしてディスクに書き込むことを強制します。".json"の結果は、Tiddlerをjson形式(配列内の単一のTiddler フィールドオブジェクト)の単一ファイルTiddlerとしてディスクに書き込むことを強制します。"application/json"タイプのTiddlerとしては書き込まれません。認識されるその他のすべてのファイルタイプは、定義された拡張子を使用して保存され、"text"フィールド以外のすべてのフィールドを説明する同じ名前の *.meta ファイルが付随します。""">>
|
||||
|
||||
!! 例
|
||||
|
||||
```
|
||||
[tag[.txt]then[.txt]]
|
||||
[tag[.json]then[.json]]
|
||||
[tag[.tid]then[.tid]]
|
||||
```
|
||||
|
||||
これにより、タグ".txt"を持つすべてのTiddlerが、ファイルシステムのパスフィルターによって決定されたファイルパスに保存されますが、テキストフィールドは *.txt ファイルとして保存され、その他のすべてのフィールドは *.txt.meta ファイルとして保存されます。
|
||||
|
||||
次に、".json"タグを持つすべてのTiddlerが *.json ファイルとして保存されます。最後に、タグ".tid"を持つすべてのTiddlerが単一のファイルとして保存されます。Tiddlerがどのフィルターにも一致しない場合は、Tiddlerの`type`フィールドによって決定されるデフォルトの拡張子が使用されます。
|
||||
@@ -0,0 +1,27 @@
|
||||
created: 20140617211749290
|
||||
modified: 20250120104354585
|
||||
original-modified: 20220613114121229
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Environment Variables on Node.js
|
||||
ja-title: Node.jsの環境変数
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
[[Node.js上のTiddlyWiki|TiddlyWiki on Node.js]]は、プラグインとエディションを検索するためのパスの区切りリストを指定するために、次のOS環境変数をサポートしています:
|
||||
|
||||
* `TIDDLYWIKI_PLUGIN_PATH` - 通常のプラグインの検索パス
|
||||
* `TIDDLYWIKI_THEME_PATH` - テーマの検索パス
|
||||
* `TIDDLYWIKI_LANGUAGE_PATH` - 言語の検索パス
|
||||
* `TIDDLYWIKI_EDITION_PATH` - エディションの検索パス (InitCommandによって使用される)
|
||||
|
||||
|
||||
<$macrocall $name=".note" _="""''1.'' 区切り文字はオペレーティングシステムによって異なる場合があります。Windowsではセミコロン`;`が使用されますが、Linux ではコロン`:`が使用されます。<br><br>''2.'' Linuxシステムでは、変数を定義するだけでなく//''export''//する必要もあります。
|
||||
"""/>
|
||||
|
||||
追加のパスはそれぞれ、~TiddlyWiki5 GitHubリポジトリの同等のディレクトリのように、構造化されたフォルダを指す必要があります: プラグイン、テーマ、言語のディレクトリには`publisher/pluginname/<files>`が含まれ、エディションのディレクトリには`editionname/<files>`が含まれます
|
||||
|
||||
例:
|
||||
|
||||
```
|
||||
export TIDDLYWIKI_PLUGIN_PATH=~/MyPluginStore
|
||||
tiddlywiki mywiki --build index
|
||||
```
|
||||
@@ -0,0 +1,16 @@
|
||||
created: 20150926162849519
|
||||
modified: 20241228110350676
|
||||
original-modified: 20191022095509822
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Installing TiddlyWiki Prerelease on Node.js
|
||||
ja-title: Node.jsにTiddlyWikiプレリリースをインストールする
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
# https://github.com/TiddlyWiki/TiddlyWiki5 からTiddlyWiki5 GitHubリポジトリのローカルコピーをクローンします
|
||||
# コマンドラインターミナルを開き、現在の作業ディレクトリをTiddlyWiki5リポジトリのルートに変更します
|
||||
# `npm link` (Windows) または `sudo npm link` (Mac/Linux) と入力して、[[npm]]にこのリポジトリのコピーをグローバルにインストールされたものとして使用するように指示します
|
||||
# ルート内で、次のようにして~TiddlyWikiを起動できます: <br/>``tiddlywiki editions/tw5.com-server --listen``
|
||||
|
||||
この手順を実行すると、通常の方法`npm install -g tiddlywiki`でインストールした場合と同じように、[[npm]]経由でTiddlyWiki5を操作できるようになります。
|
||||
|
||||
最新のコードを確実に取得するために、クローンを定期的に更新してください。
|
||||
@@ -0,0 +1,23 @@
|
||||
created: 20191022095653896
|
||||
modified: 20250122105447127
|
||||
original-modified: 20220617130125173
|
||||
tags: [[TiddlyWiki on Node.js]] PluginsCS
|
||||
title: Installing custom plugins on Node.js
|
||||
ja-title: Node.jsにカスタムプラグインをインストールする
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\rules except wikilink
|
||||
|
||||
! 紹介
|
||||
|
||||
Node.jsクライアントサーバー構成でTiddlyWikiを使用する場合、公式プラグインとカスタムプラグインをインストールするにはいくつかの方法があります。
|
||||
|
||||
注記
|
||||
<$macrocall $name=".note" _="""ライブラリから単一ファイルWikiにプラグインをインストールする手順については、[[プラグイン|Plugins]]で詳細を確認してください。
|
||||
"""/>
|
||||
|
||||
|
||||
!! プラグインのロード順序
|
||||
|
||||
{{Plugin Ordering}}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
created: 20220611123344385
|
||||
modified: 20250123113223702
|
||||
original-modified: 20220617132351460
|
||||
tags: [[TiddlyWiki on Node.js]] PluginsCS
|
||||
title: Installing official plugins on Node.js
|
||||
ja-title: Node.jsに公式プラグインをインストールする
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
クライアント-サーバーNode.js構成でTiddlyWikiを使用する場合は、次の手順に従ってください:
|
||||
|
||||
# <<controlPanel-plugin-link>>の''プラグイン''タブを使用してインストールするプラグインを特定します。(ただし、ここからプラグインをインストール''しないで''ください)
|
||||
#* プラグインは、その種類(言語、テーマ、プラグイン)と発行元、タイトルによって識別されます。たとえば、`$:/plugins/tiddlywiki/internals`プラグインは''tiddlywiki/internals''として参照されます
|
||||
|
||||
# サーバーが実行中の場合は終了します
|
||||
|
||||
# `tiddlywiki.info`ファイル(JSON形式)を編集し、`plugins`、`themes`、`languages`セクションを見つけます(下記参照)
|
||||
|
||||
# 追加したいプラグインに対応するエントリを追加します
|
||||
#* 項目を区切る''カンマ''を残すように注意してください
|
||||
#* リストの最後の項目をコンマで終わらせ''ないで''ください
|
||||
|
||||
# サーバーを再起動します
|
||||
|
||||
```
|
||||
{
|
||||
"plugins": [
|
||||
"tiddlywiki/codemirror"
|
||||
],
|
||||
"themes": [
|
||||
"tiddlywiki/vanilla",
|
||||
"tiddlywiki/snowwhite"
|
||||
],
|
||||
"languages": [
|
||||
"es-ES",
|
||||
"fr-FR",
|
||||
"en-EN"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
<$macrocall $name=".note" _="プラグインの操作の概要については、[[プラグイン|Plugins]]を参照してください。<br>また、[[Node.jsにカスタムプラグインをインストールする|Installing custom plugins on Node.js]]も参照してください。"/>
|
||||
@@ -0,0 +1,52 @@
|
||||
created: 20131219100637788
|
||||
modified: 20250124112753177
|
||||
original-modified: 20141015165343893
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Scripts for TiddlyWiki on Node.js
|
||||
ja-title: Node.js上のTiddlyWiki用スクリプト
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! スクリプトファイル
|
||||
|
||||
TiddlyWiki5リポジトリの`bin`フォルダーには、共通のタスクを自動化したり、独自のスクリプトの便利な開始点として使用したりできるスクリプトがいくつか含まれています。https://tiddlywiki.com/ の構築とリリースに使用されるスクリプトの詳細については、[[Scripts for building tiddlywiki.com]]を参照してください。
|
||||
|
||||
すべてのスクリプトは、リポジトリのルートフォルダーから実行されることを想定しています。
|
||||
|
||||
!! `serve`: tw5.comを提供する
|
||||
|
||||
```
|
||||
./bin/serve.sh -h
|
||||
./bin/serve.sh [edition dir] [username] [password] [host] [port]
|
||||
```
|
||||
|
||||
または:
|
||||
|
||||
```
|
||||
./bin/serve.cmd -h
|
||||
./bin/serve.cmd [edition dir] [username] [password] [host] [port]
|
||||
```
|
||||
|
||||
このスクリプトは、TiddlyWiki5をHTTPサーバーとして実行し、`tw5.com-server`エディションのコンテンツをデフォルトにします。デフォルトでは、Node.jsは8080ポート でサービスを提供します。オプションの`username`パラメータが指定されている場合は、編集の署名に使用されます。`password`が指定されている場合は、HTTP基本認証が使用されます。`-h`パラメータを指定してスクリプトを実行すると、オンラインヘルプが表示されます。
|
||||
|
||||
この構成を試すには、スクリプトを実行してからブラウザで`http://127.0.0.1:8080`にアクセスしてください。
|
||||
|
||||
ブラウザで行われた変更は、HTTP経由でサーバーに伝えられます(これらのリクエストを確認するには、ブラウザ開発者コンソールを使用します)。その後、サーバーは変更をファイルシステムに同期します(各変更をスクリーンに記録します)。
|
||||
|
||||
!! `test`: テストをビルドして実行する
|
||||
|
||||
This script runs the `test` edition of TiddlyWiki on the server to perform the server-side tests and to build `test.html` for running the tests in the browser.
|
||||
このスクリプトは、サーバー側のテストを実行し、ブラウザでテストを実行するために、`test.html`をビルドし、サーバー上でTiddlyWikiの`test`のエディションを実行します。
|
||||
|
||||
!! `lazy`: tw5.comを遅延読み込み画像で提供する
|
||||
|
||||
```
|
||||
./bin/lazy.sh <username> [<password>]
|
||||
```
|
||||
|
||||
または:
|
||||
|
||||
```
|
||||
./bin/lazy.cmd <username> [<password>]
|
||||
```
|
||||
|
||||
このスクリプトは、画像に[[遅延読み込み|LazyLoading]]を適用して`tw5.com-server`エディションコンテンツを提供します。
|
||||
24
editions/ja-JP/tiddlers/nodejs/TiddlyWiki on Node.js.tid
Normal file
24
editions/ja-JP/tiddlers/nodejs/TiddlyWiki on Node.js.tid
Normal file
@@ -0,0 +1,24 @@
|
||||
created: 20131129094353704
|
||||
modified: 20241227105025118
|
||||
original-modified: 20220617114433107
|
||||
tags: Platforms
|
||||
title: TiddlyWiki on Node.js
|
||||
ja-title: Node.js上のTiddlyWiki
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\rules except wikilink
|
||||
|
||||
[[Node.js]]でTiddlyWikiを実行すると、単一ファイルバージョンに比べていくつかの重要な利点が得られます:
|
||||
|
||||
* 個々のTiddlerは別々のファイルに保存され、必要に応じて整理できます。
|
||||
|
||||
* 共有コンテンツと独自コンテンツのさまざまな組み合わせをブレンドした複数のWikiを構築する機能
|
||||
|
||||
* スマートフォンやタブレットを含むあらゆる最新ブラウザでコンテンツを編集できます
|
||||
|
||||
<<.warning """Node.js上のTiddlyWikiは現在、実行中にファイルシステム経由でTiddlerファイルを直接変更することをサポートしていないことに注意してください。変更を有効にするには、サーバーを再起動する必要があります。実行中の Wikiを編集するには、HTTPやJavaScript APIを使用することをお勧めします。""">>
|
||||
|
||||
|
||||
詳細については、以下を参照してください:
|
||||
|
||||
<<list-links "[tag[TiddlyWiki on Node.js]]">>
|
||||
@@ -0,0 +1,33 @@
|
||||
created: 20220611125113040
|
||||
modified: 20250204103637098
|
||||
original-modified: 20220617133704286
|
||||
tags: [[TiddlyWiki on Node.js]] PluginsCS
|
||||
title: Uninstalling a plugin with Node.js
|
||||
ja-title: Node.jsでプラグインをアンインストールする
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
クライアント-サーバー Node.js構成でTiddlyWikiを使用する場合は、次の手順に従ってください:
|
||||
|
||||
# サーバーが実行中の場合は終了します
|
||||
|
||||
# `tiddlywiki.info`ファイル(JSON形式)を編集し、`plugins`と`themes`セクションを見つけます(下記参照)
|
||||
|
||||
# 削除したいプラグインに対応するエントリを削除します
|
||||
#* 項目を区切る''カンマ''を残すように注意してください
|
||||
#* リストの最後の項目をコンマで終わらせ''ない''でください
|
||||
|
||||
# サーバーを再起動します
|
||||
|
||||
```
|
||||
{
|
||||
"plugins": [
|
||||
"tiddlywiki/codemirror"
|
||||
],
|
||||
"themes": [
|
||||
"tiddlywiki/vanilla",
|
||||
"tiddlywiki/snowwhite"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
<$macrocall $name=".note" _="プラグインの操作方法の概要については、[[プラグイン|Plugins]]で確認できます"/>
|
||||
@@ -0,0 +1,19 @@
|
||||
created: 20131219100544073
|
||||
modified: 20241228112745930
|
||||
original-modified: 20140912141800426
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Upgrading TiddlyWiki on Node.js
|
||||
ja-title: Node.js上のTiddlyWikiのアップグレード
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
通常の方法で[[Node.js上のTiddlyWiki|TiddlyWiki on Node.js]]をインストールした場合、新しいバージョンがリリースされたときに、次のコマンドでアップグレードできます:
|
||||
|
||||
```
|
||||
npm update -g tiddlywiki
|
||||
```
|
||||
|
||||
MacやLinuxでは、次のように''sudo''を追加する必要があります:
|
||||
|
||||
```
|
||||
sudo npm update -g tiddlywiki
|
||||
```
|
||||
@@ -0,0 +1,43 @@
|
||||
created: 20131219100520659
|
||||
modified: 20250206101730728
|
||||
original-modified: 20241025051303991
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Using TiddlyWiki on Node.js
|
||||
ja-title: Node.jsでTiddlyWikiを使用する
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
~TiddlyWiki5には、[[TiddlyWikiフォルダ|TiddlyWikiFolders]]、[[Tiddlerファイル|TiddlerFiles]]に基づいて広範な操作を実行するためにコマンドラインで使用するコマンドセットが含まれています。
|
||||
|
||||
たとえば、次のコマンドは、~TiddlyWiki HTMLファイルからTiddlerを読み込み、そのうちの1つを静的HTMLに保存します:
|
||||
|
||||
```
|
||||
tiddlywiki --verbose --load mywiki.html --render ReadMe ./readme.html
|
||||
```
|
||||
|
||||
コマンドラインから`tiddlywiki`を実行すると、~TiddlyWikiカーネルが起動し、コアプラグインがロードされ、空のWikiストアが確立されます。次に、コマンドライン引数を左から右に順番に処理します。引数はスペースで区切られます。
|
||||
|
||||
<<.from-version "5.1.20">> まず、プレフィックス`+`で始まるプラグイン名や、`++`で始まるプラグインフォルダーへのパスによって識別される0個以上のプラグイン参照が存在する可能性があります。これらのプラグインは、[[TiddlyWikiフォルダ|TiddlyWikiFolders]]で指定されたプラグインに加えてロードされます。
|
||||
|
||||
次の引数は、ロードする[[TiddlyWikiフォルダ|TiddlyWikiFolders]]へのオプションのパスです。存在しない場合は、現在のディレクトリが使用されます。
|
||||
|
||||
コマンドとそれぞれの引数は以下のように示されます。各コマンドはプレフィックス`--`で識別されます。
|
||||
|
||||
```
|
||||
tiddlywiki [+<pluginname> | ++<pluginpath>] [<wikipath>] [--<command> [<arg>[,<arg>]]]
|
||||
```
|
||||
|
||||
例えば:
|
||||
|
||||
```
|
||||
tiddlywiki --version
|
||||
tiddlywiki +plugins/tiddlywiki/filesystem +plugins/tiddlywiki/tiddlyweb mywiki --listen
|
||||
tiddlywiki ++./mygreatplugin mywiki --listen
|
||||
```
|
||||
|
||||
<<.from-version "5.1.18">> 多数のパラメータをサポートするListenCommandなどのコマンドでは、[[名前付きコマンドパラメータ|NamedCommandParameters]]を使用して扱いやすくすることができます。例:
|
||||
|
||||
```
|
||||
tiddlywiki wikipath --listen username=jeremy port=8090
|
||||
```
|
||||
|
||||
使用可能なコマンドの完全なリストについては、[[コマンド|Commands]]を参照してください。
|
||||
@@ -0,0 +1,25 @@
|
||||
created: 20131219100444289
|
||||
modified: 20250206103847601
|
||||
original-modified: 20140920134404247
|
||||
tags: [[TiddlyWiki on Node.js]]
|
||||
title: Working with the TiddlyWiki5 repository
|
||||
ja-title: TiddlyWiki5リポジトリの操作
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! 紹介
|
||||
|
||||
TiddlyWikiの開発に[[貢献|Contributing]]したい場合は、[[通常の方法でTiddlyWikiをインストールする|Installing TiddlyWiki on Node.js]]のではなく、GitHubリポジトリを直接動かすことができます。
|
||||
|
||||
Mario Pietschが[[短い紹介動画|Working with the TiddlyWiki5 repository video]]を作成しました。
|
||||
|
||||
! セットアップ
|
||||
|
||||
# GitHubのアカウントをお持ちでない場合は、アカウントを作成してください
|
||||
# https://github.com/TiddlyWiki/TiddlyWiki5 からTiddlyWiki5 GitHubリポジトリをフォークします
|
||||
# フォークのローカルコピーをクローンします
|
||||
# コマンドラインターミナルを開き、現在の作業ディレクトリをリポジトリのルートに変更します
|
||||
# `npm link` (Windows)か`sudo npm link` (Mac/Linux)と入力して、[[npm]]にこのリポジトリのコピーをグローバルにインストールされたものとして使用するように指示します
|
||||
|
||||
この手順を実行すると、`npm install -g tiddlywiki`による通常の方法でインストールした場合と同じように、[[npm]]経由でTiddlyWiki5を操作できるようになります。
|
||||
|
||||
[[Node.js上のTiddlyWiki用スクリプト|Scripts for TiddlyWiki on Node.js]]も参照してください。
|
||||
172
editions/ja-JP/tiddlers/nodejs/tiddlywiki.files_Files.tid
Normal file
172
editions/ja-JP/tiddlers/nodejs/tiddlywiki.files_Files.tid
Normal file
@@ -0,0 +1,172 @@
|
||||
created: 20161015114118243
|
||||
modified: 20250201104758596
|
||||
original-modified: 20211114101256212
|
||||
tags: TiddlyWikiFolders [[TiddlyWiki on Node.js]]
|
||||
title: tiddlywiki.files Files
|
||||
ja-title: tiddlywiki.filesファイル
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! 紹介
|
||||
|
||||
[[TiddlyWikiフォルダ|TiddlyWikiFolders]]内のサブフォルダーにあるJSONファイル`tiddlywiki.files`は、フォルダーを再帰的にスキャンしてTiddlerファイルを探す通常のロジックをオーバーライドします。代わりに、`tiddlywiki.files`ファイルは特定のファイルとフォルダーからTiddlerをロードするための指示を指定します。
|
||||
|
||||
ファイルの形式は、2つのオプションプロパティを持つオブジェクトです:
|
||||
|
||||
* ''tiddlers'' - ファイルから読み取ったフィールドを上書きや変更する機能を持つ外部ファイルを記述するオブジェクトの配列
|
||||
* ''directories'' - 外部ディレクトリを記述するオブジェクトの配列、それらのディレクトリ内のどのファイルを処理すべきかを決定するフィルターと、ファイルから読み取ったフィールドのいずれかを上書きや変更する機能
|
||||
|
||||
`tiddlywiki.files`の処理に大幅な機能強化が[[リリース 5.1.14|Release 5.1.14]]で導入されたことに注意してください。
|
||||
|
||||
!! フィールドのオーバーライド
|
||||
|
||||
`tiddlywiki.files`ファイルの''tiddlers''セクションと''directories''セクションの両方に、`fields`オブジェクトを使用してフィールドの値を上書きやカスタマイズする機能が含まれています。
|
||||
|
||||
各フィールドは、フィールドに直接割り当てられる''文字列''や''配列''値として指定することも、<<.from-version "5.1.14">>フィールドの値を生成する方法を説明する''オブジェクト''として指定することもできます。オブジェクトには次のプロパティが含まれます:
|
||||
|
||||
* ''source'' - (オプション) フィールドのソース値を指定する文字列。指定しない場合は、既存の値が使用されます
|
||||
** //filename// Tiddlerを含むファイルのファイル名
|
||||
** //filename-uri-decoded// [[URIデコード|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent]]を適用した、Tiddlerを含むファイルのファイル名
|
||||
** //basename// 拡張子なしのTiddlerを含むファイルのファイル名
|
||||
** //basename-uri-decoded// [[URIデコード|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent]]を適用した、拡張子なしのTiddlerを含むファイルのファイル名
|
||||
** //extname// Tiddlerを含むファイル名の拡張子
|
||||
** //created// Tiddlerを含むファイルの作成日時
|
||||
** //modified// Tiddlerを含むファイルの更新日時
|
||||
** <<.from-version "5.3.0">> //filepath// ディレクトリの''path''プロパティを基準とした、Tiddlerを含むファイルのパス(''directories''宣言でのみ使用可能)
|
||||
** <<.from-version "5.3.0">> //subdirectories// ディレクトリの''path''プロパティを基準とした、ファイルの相対パス内のサブディレクトリの配列(''directories''宣言でのみ使用可能)
|
||||
* ''prefix'' - (オプション) フィールドの値の先頭に追加する文字列
|
||||
* ''suffix'' - (オプション) フィールドの値の末尾に追加する文字列
|
||||
|
||||
! Tiddlersセクション
|
||||
|
||||
`tiddlers`配列内のファイルの仕様は、次のプロパティをサポートします:
|
||||
|
||||
* ''file'': (必須) Tiddlerデータを含むファイルへの絶対パスまたは相対パス (相対パスは`tiddlywiki.files`ファイルのパスを基準とします)
|
||||
* ''isTiddlerFile'': (オプション) `true`の場合、ファイルは[[tiddlerファイル|TiddlerFiles]]として扱われ、Tiddlerを抽出するためにデシリアライズされます。それ以外の場合は、ファイルの生のコンテンツが解析されずに`text`フィールドに割り当てられます
|
||||
* ''fields'': (オプション) Tiddlerファイルで提供されるフィールドを上書きやカスタマイズする値を含むオブジェクト (上記を参照)
|
||||
* ''prefix''と''suffix'': (オプション) Tiddlerの`text`フィールドにプレフィックスとサフィックスとして付加される文字列
|
||||
*> ''prefix''を指定することは、''fields''オブジェクトの`text`のフィールドを`{"prefix":"<prefixvalue>"}`に設定することと同じであることに注意してください。
|
||||
|
||||
! Directoriesセクション
|
||||
|
||||
`directories`配列内のディレクトリの仕様は次の形式を取ることができます:
|
||||
|
||||
* Tiddlerファイルを含むディレクトリへの絶対パスか相対パスを指定する、''string''リテラル(相対パスは`tiddlywiki.files`ファイルのパスを基準として解釈されます)。Tiddlerファイルはディレクトリを再帰的に検索されます
|
||||
* <<.from-version "5.1.14">> 次のプロパティを持つ''object'':
|
||||
** ''path'' - (必須) Tiddlerファイルを含むディレクトリへの絶対パスか相対パス(相対パスは`tiddlywiki.files`ファイルのパスを基準として解釈されます)。デフォルトではディレクトリは再帰的に検索されないことに注意してください。//searchSubdirectories//フラグが`true`に設定されていない限り、サブディレクトリは無視されます(以下を参照)。
|
||||
** ''filesRegExp'' - (オプション) ディレクトリ内で処理するファイルのファイル名に一致する[[正規表現|https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions]]
|
||||
** ''isTiddlerFile'' - (必須) `true`の場合、ファイルは[[Tiddlerファイル|TiddlerFiles]]として扱われ、Tiddlerを抽出するためにデシリアライズされます。それ以外の場合、ファイルの生のコンテンツが解析されずに`text`フィールドに割り当てられます
|
||||
** ''isEditableFile'' - <<.from-version "5.1.23">> (オプション) `true`の場合、Tiddlerへの変更は元のファイルに保存されます。Tiddlerは、$:/config/FileSystemPathフィルターから結果が生成されない限り、元のファイルパスに保存されます。フィルターから結果が返された場合、生成された最終的なファイルパスが上書きされます。
|
||||
** ''searchSubdirectories'' - <<.from-version "5.1.23">> (オプション) `true`の場合、//path//のすべてのサブディレクトリで(オプションの)//filesRegExp//に一致するファイルが再帰的に検索されます。//filesRegExp//が指定されていない場合は、//path//のすべてのサブディレクトリ内のすべてのファイルがロードされます。//source//属性の//filename//(上記を参照)によって生成されたTiddlerタイトルにはファイル名のみが含まれ、パスのサブディレクトリは含まれません。この結果、同じTiddlerタイトルでロードされた複数のファイルが存在する場合、そのTiddlerタイトルでロードされた最後のファイルのみがメモリに格納されます。これを防ぐには、//filename//の代わりに//filepath//属性を使用できます。または、複数のディレクトリオブジェクトを含め、//source//属性とともに//prefix//または//suffix//を使用してタイトルフィールドをカスタマイズすることもできます。
|
||||
** ''fields'' - (必須) Tiddlerファイルで提供されるフィールドを上書きやカスタマイズする値を含むオブジェクト(上記を参照)
|
||||
|
||||
同じ名前にサフィックス`.meta`を加えたファイルを作成することで、特定のファイルのフィールドを上書きすることもできます。 -- TiddlerFilesを参照してください。
|
||||
|
||||
! 例
|
||||
|
||||
これらの`tiddlywiki.files`の例は、[[Wikiフォルダ|TiddlyWikiFolders]]の独自のサブディレクトリに配置する必要があります。
|
||||
|
||||
メインの[[TiddlyWiki 5 GitHub リポジトリ|https://github.com/TiddlyWiki/TiddlyWiki5]]にも`tiddlywiki.files`ファイルの例がいくつかあります。
|
||||
|
||||
!! PDFのフォルダをインポートする
|
||||
|
||||
この例では、相対パスで指定されたフォルダーから拡張子`.pdf`を持つすべてのファイルを取得します。このパスは"../../../"で始まり、この構成ファイルが格納されているフォルダーの3ディレクトリ階層上を示します。各Tiddlerは、次のフィールドを使用してLazyLoading用にセットアップされています:
|
||||
|
||||
* ''title'' - PDFファイルのURIデコードされたベースファイル名を設定。[[URIデコード|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent]]により、"/"などの文字をURIエンコードして"%2F"としてタイトルに含めることができます
|
||||
* ''created'' - PDFファイルの作成日時を設定
|
||||
* ''modified'' - PDFファイルの変更日時を設定
|
||||
* ''type'' - `application/pdf`を設定
|
||||
* ''tags'' - `$:/tags/AttachedFile`を設定
|
||||
* ''text'' - 空の文字列を設定
|
||||
* ''_canonical_uri'' - ファイル名と文字列"pdfs/"を連結した値を設定
|
||||
|
||||
```
|
||||
{
|
||||
"directories": [
|
||||
{
|
||||
"path": "../../../input/pdfs",
|
||||
"filesRegExp": "^.*\\.pdf$",
|
||||
"isTiddlerFile": false,
|
||||
"fields": {
|
||||
"title": {"source": "basename-uri-decoded"},
|
||||
"created": {"source": "created"},
|
||||
"modified": {"source": "modified"},
|
||||
"type": "application/pdf",
|
||||
"tags": ["$:/tags/AttachedFile"],
|
||||
"text": "",
|
||||
"_canonical_uri": {"source": "filename", "prefix": "pdfs/"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
!! テキストファイルのフォルダをインポートする
|
||||
|
||||
この例では、相対パスで指定されたフォルダから拡張子`.txt`を持つすべてのファイルを取得します。このフォルダはWikiのベースディレクトリ内にあり、現在の構成ファイルはWikiの"tiddlers/"ディレクトリ内のディレクトリにあります。したがって、この場合、パスは"../../"で始まり、2つのディレクトリ階層上に移動し、次に "externalnotes/"ディレクトリまで下ります。各Tiddlerは次のフィールドで設定されます:
|
||||
|
||||
* ''title'' - テキストファイルのURIデコードされたベースファイル名を設定します。[[URIデコード|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent]]により、"/"などの文字をURIエンコードして"%2F"としてタイトルに含めることができます
|
||||
* ''created'' - テキストファイルの作成日時を設定
|
||||
* ''modified'' - テキストファイルの変更日時を設定
|
||||
* ''type'' - `text/plain`を設定
|
||||
* ''tags'' - `[[note]] [[externalnote]] [[.txt]]`を設定(配列表記を使用)
|
||||
* ''text'' - 設定されないため、ファイルの内容がテキストフィールドとして読み込まれます
|
||||
|
||||
```
|
||||
{
|
||||
"directories": [
|
||||
{
|
||||
"path": "../../externalnotes",
|
||||
"filesRegExp": ".+\\.txt",
|
||||
"isTiddlerFile": false,
|
||||
"isEditableFile": true,
|
||||
"fields": {
|
||||
"title": {"source": "basename-uri-decoded"},
|
||||
"created": {"source": "created"},
|
||||
"modified": {"source": "modified"},
|
||||
"type": "text/plain",
|
||||
"tags": ["note", "externalnote", ".txt"]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
これにより、`../../externalnotes/`ディレクトリ内のすべてのテキストファイルが個別のTiddlerとしてWikiに読み込まれます。これらは、さまざまなマークアップ言語のスニペットコレクションである可能性があります。次に、これらの各Tiddlerの`type`フィールドを、言語に合わせて変更できます。たとえば、Wikitextの場合は"text/vnd.tiddlywiki"、マークダウンファイルの場合は"text/markdown"です。次に、次の行で$:/config/FileSystemPathsと$:/config/FileSystemExtentions Tiddlerを使用すると、これらのTiddlerへの変更が、開始元のディレクトリに保存され、"*.txt"ファイルとして、"*.txt.meta"ファイルとともに保存されます。これらのメタファイルは必要に応じて生成され、サーバーの再起動時に、`tiddlywiki.files`構成ファイルから生成されたフィールド(Tiddlerの`type`フィールドなど)が上書きされます。
|
||||
|
||||
[[Tiddlerファイル名のカスタマイズ|Customising Tiddler File Naming]]の例から、$:/config/FileSystemPaths Tiddler内の最後のフィルター`[!tag[externalnote]addprefix[wiki/]]`は、`externalnotes`でタグ付けされたすべてのTiddler(以前のフィルターに一致しなかったもの)を除外することがわかります。これらのTiddlerのファイルパスは、ブート起動時に生成された$:/config/OriginalTiddlerPathsから取得されます。
|
||||
|
||||
次に、$:/config/FileSystemExtensions Tiddler内のフィルター`[tag[.txt]then[.txt]]`により、これらすべてのTiddlerが*.txtおよび付随する*.txt.metaファイルとしてディスクに保存されます(通常のTiddlerタイプとファイルタイプのマッピングを上書きします)。この場合、Tiddlywiki Wikitextやマークダウンテキストのスニペットを"テキスト"(*.txtファイル)に保存できるようになります。
|
||||
|
||||
!! 画像のインポートと自動タグ付け
|
||||
|
||||
この例では、`files`ディレクトリとそのすべてのサブディレクトリ内のすべての画像ファイルを外部画像Tiddlerとしてインポートし、ファイルパスに基づいてタグ付けします。各Tiddlerには、次のフィールドが設定されます:
|
||||
|
||||
* ''title'' - テキストファイルのURIデコードされたベースファイル名を設定
|
||||
* ''created'' - テキストファイルの作成日時を設定
|
||||
* ''modified'' - テキストファイルの更新日時を設定
|
||||
* ''type'' - `image/jpeg`に設定します。現在、ファイルから画像Tiddlerの正しいContentTypeを推測する方法はありませんが、`image/jpeg`Tiddlerはpngやgif画像でも正しくレンダリングされるはずです。代わりに、jpg、png、gifファイルの個別の定義を、`image/jpeg`、`image/png`、`image/gif`タイプをそれぞれ使用して作成することもできます。
|
||||
* ''tags'' - 親ディレクトリ(この場合は`files`)を基準とした画像の相対パスに基づいて生成されます。たとえば、`files/photos`内の画像には`photos`のタグが付けられ、 `files/photos/family`内の画像には`photos`と`family`両方のタグが付けられ、ルート`files`ディレクトリ内の画像にはタグが付けられません。
|
||||
* ''text'' - 空の文字列に設定
|
||||
* ''_canonical_uri'' - Wikiルートを基準とした画像の完全な相対ファイルパスを設定
|
||||
|
||||
```
|
||||
{
|
||||
"directories": [
|
||||
{
|
||||
"path": "../../files/",
|
||||
"filesRegExp": "^.*\\.(?:jpg|jpeg|png|gif)$",
|
||||
"isTiddlerFile": false,
|
||||
"searchSubdirectories": true,
|
||||
"fields": {
|
||||
"title": {"source": "basename-uri-decoded"},
|
||||
"created": {"source": "created"},
|
||||
"modified": {"source": "modified"},
|
||||
"type": "image/jpeg",
|
||||
"tags": { "source": "subdirectories" },
|
||||
"text": "",
|
||||
"_canonical_uri": { "source": "filepath", "prefix": "files/" }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
60
editions/ja-JP/tiddlers/nodejs/tiddlywiki.info_Files.tid
Normal file
60
editions/ja-JP/tiddlers/nodejs/tiddlywiki.info_Files.tid
Normal file
@@ -0,0 +1,60 @@
|
||||
created: 20161015114042793
|
||||
modified: 20250201105445142
|
||||
original-modified: 20241030132156792
|
||||
tags: TiddlyWikiFolders [[TiddlyWiki on Node.js]]
|
||||
title: tiddlywiki.info Files
|
||||
ja-title: tiddlywiki.infoファイル
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
[[TiddlyWikiフォルダ|TiddlyWikiFolders]]はWikiフォルダーのルートにある1つの`tiddlywiki.info`ファイルで構成されます。このファイルには、次のプロパティを含むJSONオブジェクトが含まれている必要があります:
|
||||
|
||||
* ''plugins'' - Wikiに含めるプラグインの配列
|
||||
* ''themes'' - Wikiに含めるテーマの配列
|
||||
* ''languages'' - Wikiに含める言語の配列
|
||||
* ''includeWikis'' - Wikiに含める外部Wikiフォルダへの参照の配列
|
||||
* ''build'' - 名前付きビルドターゲットのハッシュマップ。それぞれはコマンドトークンの配列で定義されます(BuildCommandを参照)
|
||||
* ''config'' - 設定オプションのオプションのハッシュマップ(下記参照)
|
||||
|
||||
!!! ''includeWikis''
|
||||
|
||||
''includeWikis''配列のエントリは、Wikiへの相対パスを指定する文字列か、次のフィールドを持つオブジェクトのいずれかになります:
|
||||
|
||||
* ''path'' - Wikiフォルダへの相対パス
|
||||
* ''read-only'' - //true//に設定すると、含まれているWiki内のTiddlerが変更されるのを防ぎます。変更は、以下で説明する''default-tiddler-location''で指定されたディレクトリに書き込まれます
|
||||
|
||||
!!! ''build''
|
||||
|
||||
現在の`tiddlywiki.info`ファイルでその名前のターゲットが定義されていない場合、含まれているWikiのビルドターゲットはマージされることに注意してください。
|
||||
|
||||
!!! ''config''
|
||||
|
||||
構成オプションには以下が含まれます:
|
||||
|
||||
* ''default-tiddler-location'' - ファイルシステムアダプタが新しいTiddlerを保存するためのデフォルトの場所への文字列パス(Wikiフォルダを基準に解決)
|
||||
* ''retain-original-tiddler-path'' - trueの場合、サーバーはWiki内の各Tiddlerの元のファイルパスを含むティドラー[[$:/config/OriginalTiddlerPaths]]を生成します
|
||||
|
||||
!!! 例
|
||||
|
||||
例:
|
||||
|
||||
```
|
||||
{
|
||||
"plugins": [
|
||||
"tiddlywiki/tiddlyweb",
|
||||
"tiddlywiki/filesystem"
|
||||
],
|
||||
"includeWikis": [
|
||||
{"path": "../tw5.com", "read-only": true}
|
||||
],
|
||||
"build": {
|
||||
"index": [
|
||||
"--render","$:/core/save/all","index.html","text/plain"],
|
||||
"favicon": [
|
||||
"--save", "$:/favicon.ico", "favicon.ico",
|
||||
"--save", "$:/green_favicon.ico", "static/favicon.ico"]
|
||||
},
|
||||
"config": {
|
||||
"retain-original-tiddler-path": true
|
||||
}
|
||||
}
|
||||
```
|
||||
12
editions/ja-JP/tiddlers/platforms/Platforms.tid
Normal file
12
editions/ja-JP/tiddlers/platforms/Platforms.tid
Normal file
@@ -0,0 +1,12 @@
|
||||
created: 20150412185300152
|
||||
modified: 20241227104147434
|
||||
original-modified: 20150412185427211
|
||||
tags: TableOfContents
|
||||
title: Platforms
|
||||
ja-title: プラットフォーム
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
|
||||
TiddlyWikiはいくつかのプラットフォームで使用できます:
|
||||
|
||||
<<list-links "[tag[Platforms]]">>
|
||||
49
editions/ja-JP/tiddlers/plugins/Plugin Ordering.tid
Normal file
49
editions/ja-JP/tiddlers/plugins/Plugin Ordering.tid
Normal file
@@ -0,0 +1,49 @@
|
||||
created: 20220613115453346
|
||||
modified: 20250207104327815
|
||||
original-modified: 20220628160136158
|
||||
tags: PluginMechanism
|
||||
title: Plugin Ordering
|
||||
ja-title: プラグインの順序
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Node.jsクライアント-サーバー構成を使用すると、プラグインは次の順序でアクティブになります:
|
||||
|
||||
# OS環境変数を使用して見つかったプラグイン
|
||||
#* 参照: [[PluginFolders]]
|
||||
#* および: [[Node.jsの環境変数|Environment Variables on Node.js]]
|
||||
|
||||
# Wiki`/plugins`パスに保存されたプラグイン
|
||||
#* 参照: [[PluginFolders]]
|
||||
|
||||
# コマンドラインで指定されたプラグイン
|
||||
#* 参照: [[Node.jsでTiddlyWikiを使用する|Using TiddlyWiki on Node.js]] ... <<.from-version "5.1.20">>に関する注記
|
||||
|
||||
# ドラッグアンドドロップでWikiコンテンツとしてインポートされたプラグイン
|
||||
#* 参照: [[プラグインライブラリからプラグインをインストールする|Installing a plugin from the plugin library]]や[[プラグインを手動でインストールする|Manually installing a plugin]]
|
||||
|
||||
''重要:''
|
||||
|
||||
* ''リストの下位の要素が優先されます''
|
||||
|
||||
*ブラウザにドラッグアンドドロップして通常のTiddlerとしてプラグインを追加すると、プラグインはブラウザ内でのみアクティブになります
|
||||
** Node.js下では利用できません
|
||||
|
||||
オプション 1:
|
||||
|
||||
* Node.js構成を使用する場合、オプション1が最も一般的な方法です
|
||||
* すべてのプラグインを一度に更新できるため、メンテナンスの手間が軽減されます
|
||||
|
||||
オプション 2:
|
||||
|
||||
* 構成を固定して作業したい場合はオプション2が推奨されます
|
||||
* プラグインの更新は対応するWikiにのみ影響します
|
||||
|
||||
オプション 3:
|
||||
|
||||
* このオプションを使用すると、既存の`tiddlywiki.info`ファイルを上書きすることなくエディションを''追加して開始''できます
|
||||
* tiddlywiki.infoファイルで指定されていない場合でも、任意のエディションをクライアント-サーバーエディションとして起動できます。
|
||||
|
||||
オプション 4:
|
||||
|
||||
* 単一ファイルのWikiで使用されるのと全く同じメカニズムです
|
||||
* このメカニズムは、プラグインが`tiddlers/`ディレクトリに保存されるため、Node.js構成では''テストとデバッグ''の目的でのみ使用する必要があります
|
||||
@@ -0,0 +1,2 @@
|
||||
title: $:/config/tiddlyweb/host
|
||||
text: $protocol$//$host$/MyApp/
|
||||
@@ -0,0 +1,7 @@
|
||||
title: Example config-tiddlyweb-host for IIS
|
||||
ja-title: IISのconfig-tiddlyweb-hostの例
|
||||
created: 20180328145039530
|
||||
modified: 20250123113649343
|
||||
original-modified: 20180328145234871
|
||||
tags: [[Installing TiddlyWiki on Microsoft Internet Information Server]]
|
||||
type: text/plain
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "MyStuff",
|
||||
"description": "A description of this wiki",
|
||||
"dependencies": {
|
||||
"sax": "1.2.4",
|
||||
"tiddlywiki": "*"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
created: 20180328145039530
|
||||
modified: 20250123114135455
|
||||
original-modified: 20180328145234871
|
||||
tags: [[Installing TiddlyWiki on Microsoft Internet Information Server]]
|
||||
title: Example package.json for IIS
|
||||
ja-title: IISのpackage.jsonの例
|
||||
type: text/plain
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"description": "My wiki",
|
||||
"plugins": [
|
||||
"tiddlywiki/tiddlyweb",
|
||||
"tiddlywiki/filesystem"
|
||||
],
|
||||
"themes": [
|
||||
"tiddlywiki/vanilla",
|
||||
"tiddlywiki/snowwhite"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
created: 20180328151124878
|
||||
modified: 20250123114435480
|
||||
original-modified: 20180328151214616
|
||||
tags: [[Installing TiddlyWiki on Microsoft Internet Information Server]]
|
||||
title: Example tiddlywiki.info for IIS
|
||||
ja-title: IISのtiddlywiki.infoの例
|
||||
type: text/plain
|
||||
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<system.webServer>
|
||||
<handlers>
|
||||
<add
|
||||
name="httpplatformhandler"
|
||||
path="*"
|
||||
verb="*"
|
||||
modules="httpPlatformHandler"
|
||||
resourceType="Unspecified"
|
||||
requireAccess="Script" />
|
||||
</handlers>
|
||||
<httpPlatform
|
||||
stdoutLogEnabled="true"
|
||||
stdoutLogFile=".\node.log"
|
||||
startupTimeLimit="20"
|
||||
processPath="C:\Program Files\nodejs\node.exe"
|
||||
arguments=".\node_modules\tiddlywiki\tiddlywiki.js ./wiki --listen port=PORT path-prefix=/MyApp">
|
||||
<environmentVariables>
|
||||
<environmentVariable name="PORT" value="%HTTP_PLATFORM_PORT%" />
|
||||
<environmentVariable name="NODE_ENV" value="Production" />
|
||||
</environmentVariables>
|
||||
</httpPlatform>
|
||||
</system.webServer>
|
||||
</configuration>
|
||||
@@ -0,0 +1,7 @@
|
||||
created: 20180328145259455
|
||||
modified: 20250123114732207
|
||||
original-modified: 20180701185215523
|
||||
tags: [[Installing TiddlyWiki on Microsoft Internet Information Server]]
|
||||
title: Example web.config for IIS
|
||||
ja-title: IISのweb.configの例
|
||||
type: text/plain
|
||||
@@ -2,11 +2,4 @@ created: 20131127215321439
|
||||
modified: 20140912135951542
|
||||
title: $:/DefaultTiddlers
|
||||
|
||||
[[TiddlyWiki Pre-release]]
|
||||
HelloThere
|
||||
[[Quick Start]]
|
||||
[[Find Out More]]
|
||||
[[TiddlyWiki on the Web]]
|
||||
[[Testimonials and Reviews]]
|
||||
GettingStarted
|
||||
Community
|
||||
$:/plugins/tiddlywiki/ai-tools
|
||||
|
||||
@@ -17,7 +17,9 @@
|
||||
"tiddlywiki/jszip",
|
||||
"tiddlywiki/confetti",
|
||||
"tiddlywiki/dynannotate",
|
||||
"tiddlywiki/tour"
|
||||
"tiddlywiki/tour",
|
||||
"tiddlywiki/markdown",
|
||||
"tiddlywiki/ai-tools"
|
||||
],
|
||||
"themes": [
|
||||
"tiddlywiki/vanilla",
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
title: Transclude/CustomWidget/RawAndSlotted
|
||||
description: Custom widget can mix ts-raw and custom slots
|
||||
type: text/vnd.tiddlywiki-multiple
|
||||
tags: [[$:/tags/wiki-test-spec]]
|
||||
|
||||
title: Output
|
||||
|
||||
\whitespace trim
|
||||
\widget $my.widget()
|
||||
\whitespace trim
|
||||
<$slot $name="ts-header">
|
||||
Default Header
|
||||
</$slot>
|
||||
-
|
||||
<$slot $name="ts-raw"/>
|
||||
\end
|
||||
<$my.widget>
|
||||
First Body
|
||||
</$my.widget>
|
||||
|
||||
|
||||
<$my.widget>
|
||||
<$fill $name="ts-header">
|
||||
Custom Header
|
||||
</$fill>
|
||||
<$fill $name="ts-never">
|
||||
<$log RawAndSlotted="Transclude/CustomWidget/RawAndSlotted is actually failing. $fill slots are executing silently when they weren't invoked." />
|
||||
</$fill>
|
||||
Second Body
|
||||
</$my.widget>
|
||||
+
|
||||
title: ExpectedResult
|
||||
|
||||
<p>Default Header-First Body</p><p>Custom Header-Second Body</p>
|
||||
@@ -78,6 +78,13 @@ Tests the checkbox widget thoroughly.
|
||||
startsOutChecked: false,
|
||||
expectedChange: { "TiddlerOne": { expand: "yes" } }
|
||||
},
|
||||
{
|
||||
testName: "field mode default when missing -> true",
|
||||
tiddlers: [],
|
||||
widgetText: "<$checkbox tiddler='TiddlerOne' field='expand' default='yes' checked='yes' unchecked='no' />",
|
||||
startsOutChecked: true,
|
||||
expectedChange: { "TiddlerOne": { expand: "no" } }
|
||||
},
|
||||
{
|
||||
testName: "field mode indeterminate -> true",
|
||||
tiddlers: [{title: "TiddlerOne", text: "Jolly Old World", expand: "some other value"}],
|
||||
@@ -98,19 +105,28 @@ Tests the checkbox widget thoroughly.
|
||||
var indexModeTests = fieldModeTests.map(data => {
|
||||
var newData = {...data};
|
||||
var newName = data.testName.replace('field mode', 'index mode');
|
||||
var tiddlerOneAlreadyExists = false;
|
||||
var newTiddlers = data.tiddlers.map(tiddler => {
|
||||
if(tiddler.title === "TiddlerOne") {
|
||||
tiddlerOneAlreadyExists = true;
|
||||
}
|
||||
return {title: tiddler.title, type: "application/x-tiddler-dictionary", text: `one: a\nexpand: ${tiddler.expand}\ntwo: b`}
|
||||
});
|
||||
var newWidgetText = data.widgetText.replace("field='expand'", "index='expand'");
|
||||
var newChange = {};
|
||||
for (var key of Object.keys(data.expectedChange)) {
|
||||
var oldChange = data.expectedChange[key];
|
||||
if (oldChange.expand) {
|
||||
newChange[key] = { text: `one: a\nexpand: ${oldChange.expand}\ntwo: b` }
|
||||
var text;
|
||||
if (!tiddlerOneAlreadyExists) {
|
||||
// If it wasn't there, the created one will be JSON
|
||||
text = `{\n "expand": "${oldChange.expand}"\n}`;
|
||||
} else if (oldChange.expand) {
|
||||
text = `one: a\nexpand: ${oldChange.expand}\ntwo: b`;
|
||||
} else {
|
||||
// In index tiddlers, the "expand" field gets completely removed, not turned into "expand: (undefined)"
|
||||
newChange[key] = { text: `one: a\ntwo: b` }
|
||||
text = `one: a\ntwo: b`;
|
||||
}
|
||||
newChange[key] = { text: text };
|
||||
}
|
||||
newData.testName = newName;
|
||||
newData.tiddlers = newTiddlers;
|
||||
@@ -514,7 +530,9 @@ Tests the checkbox widget thoroughly.
|
||||
/*
|
||||
* Checkbox widget tests using the test data above
|
||||
*/
|
||||
for (var data of checkboxTestData) {
|
||||
// MAKE SURE TO USE $tw.utils.each HERE!!!
|
||||
// If you use a forloop, the closure of the tests will all use the last value "data" was assigned to, and thus all run the same test.
|
||||
$tw.utils.each(checkboxTestData, function(data) {
|
||||
it('checkbox widget test: ' + data.testName, function() {
|
||||
// Setup
|
||||
|
||||
@@ -553,7 +571,7 @@ Tests the checkbox widget thoroughly.
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ Use this procedure if the language being submitted is not already present in the
|
||||
# Create the new language folder `languages/xx-XX`
|
||||
# Copy the language files into the language folder
|
||||
# Create a `plugin.info` file for the translation
|
||||
# Create an appropriate flag image in `icon.tid`
|
||||
# Add the new language to tw5.com
|
||||
# Submit a pull request
|
||||
|
||||
|
||||
8
editions/tw5.com/tiddlers/Tags.tid
Normal file
8
editions/tw5.com/tiddlers/Tags.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
created: 20250211093401937
|
||||
modified: 20250211093527189
|
||||
tags: Concepts
|
||||
title: Tags
|
||||
|
||||
Tags are used to organise tiddlers into categories.
|
||||
|
||||
For more details see: [[Tagging]]
|
||||
8
editions/tw5.com/tiddlers/Title.tid
Normal file
8
editions/tw5.com/tiddlers/Title.tid
Normal file
@@ -0,0 +1,8 @@
|
||||
created: 20250211094052630
|
||||
modified: 20250211094419548
|
||||
tags: Concepts
|
||||
title: Title
|
||||
|
||||
The minimum requirement for a valid tiddler is a ''unique'' title.
|
||||
|
||||
Learn more at: [[Tiddlers]]
|
||||
@@ -22,8 +22,3 @@ There are several resources for developers to learn more about TiddlyWiki and to
|
||||
*** An enhanced group search facility is available on [[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]]
|
||||
|
||||
* Chat at https://gitter.im/TiddlyWiki/public (development room coming soon)
|
||||
|
||||
! Twitter
|
||||
|
||||
* Follow [[@TiddlyWiki on Twitter|http://twitter.com/#!/TiddlyWiki]] for the latest news
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ tags: Community
|
||||
title: Articles
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Here are some recent articles written about ~TiddlyWiki. Submit new articles via GitHub, Twitter or by posting in the [[TiddlyWiki Groups|Forums]].
|
||||
Here are some recent articles written about ~TiddlyWiki. Submit new articles via GitHub or by posting in the [[TiddlyWiki Groups|Forums]].
|
||||
|
||||
<div class="tc-link-info">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ tags: HelloThere Community
|
||||
title: Examples
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
This collection showcases inspiring and interesting examples of ~TiddlyWiki being used in the wild. Submit new entries to this collection via GitHub, Twitter or by posting in the [[TiddlyWiki Groups|Forums]].
|
||||
This collection showcases inspiring and interesting examples of ~TiddlyWiki being used in the wild. Submit new entries to this collection via GitHub or by posting in the [[TiddlyWiki Groups|Forums]].
|
||||
|
||||
<div class="tc-link-info">
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@ If you find TiddlyWiki useful, there are lots of ways you can help assure its fu
|
||||
|
||||
OpenSource projects like ~TiddlyWiki thrive on the feedback and engagement of users. ~TiddlyWiki becomes more useful to everyone as more and more people use it. So, if you find ~TiddlyWiki useful, spread the word. The best possible way to assure its future is for it to become a hundred times more popular than before.
|
||||
|
||||
* [img[https://img.shields.io/twitter/url/http/tiddlywiki.com.svg?style=social]]
|
||||
* Tweet about ~TiddlyWiki: [[I love TiddlyWiki because...|https://twitter.com/intent/tweet?text=I+love+TiddlyWiki+because...&source=tiddlywiki5]]
|
||||
* [img[https://img.shields.io/github/stars/jermolene/tiddlywiki5.svg?style=social&label=Star]]
|
||||
* [[Star the TiddlyWiki5 GitHub Repository|https://github.com/TiddlyWiki/TiddlyWiki5]]
|
||||
* [[Display the TiddlyWiki Poster|https://tiddlywiki.com/poster]]
|
||||
|
||||
@@ -4,7 +4,7 @@ tags: Community Videos
|
||||
title: TiddlyWiki Hangouts
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
The TiddlyWiki community has held many Google Hangouts over the years. They are announced in the [[TiddlyWiki Google group|https://groups.google.com/d/forum/tiddlywiki]] and on the [[TiddlyWiki Twitter account|https://twitter.com/TiddlyWiki]].
|
||||
The TiddlyWiki community has held many Google Hangouts over the years. They are announced in the [[TiddlyWiki Google group|https://groups.google.com/d/forum/tiddlywiki]].
|
||||
|
||||
Past Hangouts are archived in this ~YouTube playlist:
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
color: #808
|
||||
created: 20241009150445080
|
||||
icon: $:/core/images/link
|
||||
list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Twitter]] [[TiddlyWiki on Gitter]] [[TiddlyWiki on Open Collective]]
|
||||
list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Gitter]] [[TiddlyWiki on Open Collective]]
|
||||
modified: 20241115170824144
|
||||
tags: Welcome
|
||||
title: TiddlyWiki on the Web
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
title: TiddlyWiki on Twitter
|
||||
caption: Twitter
|
||||
tags: [[TiddlyWiki on the Web]]
|
||||
url: https://twitter.com/TiddlyWiki
|
||||
icon: $:/core/images/twitter
|
||||
background-color: #1DA1F2
|
||||
text-color: #fff
|
||||
@@ -8,4 +8,4 @@ type: text/vnd.tiddlywiki
|
||||
|
||||
These are the concepts underlying TiddlyWiki. Understanding how these ideas fit together is the key to getting the most from TiddlyWiki.
|
||||
|
||||
<<list-links "[tag[Concepts]]" class:"multi-columns">>
|
||||
<<list-links "[tag[Concepts]sort[title]]" class:"multi-columns">>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user