diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..d5bce4e9b1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +boot/** -linguist-generated +**/tiddlywiki.files linguist-language=JSON +**/tiddlywiki.info linguist-language=JSON +**/plugin.info linguist-language=JSON \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 286a842bcb..e0334e007b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,6 +1,7 @@ name: Bug report description: Create a report to help us improve TiddlyWiki 5 title: "[BUG] " +type: bug body: - type: textarea id: Describe diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 6eb55dd6b5..59f3dfcb21 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -4,6 +4,7 @@ about: Suggest an idea for TiddlyWiki 5 title: "[IDEA]" labels: '' assignees: '' +type: feature --- diff --git a/boot/boot.js b/boot/boot.js index 6ac64c5868..ce713916de 100644 --- a/boot/boot.js +++ b/boot/boot.js @@ -8,6 +8,8 @@ On the server this file is executed directly to boot TiddlyWiki. In the browser, \*/ +/* eslint-disable @stylistic/indent */ + var _boot = (function($tw) { /*jslint node: true, browser: true */ @@ -44,12 +46,8 @@ $tw.utils.hop = function(object,property) { return object ? Object.prototype.hasOwnProperty.call(object,property) : false; }; -/* -Determine if a value is an array -*/ -$tw.utils.isArray = function(value) { - return Object.prototype.toString.call(value) == "[object Array]"; -}; +/** @deprecated Use Array.isArray instead */ +$tw.utils.isArray = value => Array.isArray(value); /* Check if an array is equal by value and by reference. @@ -128,35 +126,22 @@ $tw.utils.pushTop = function(array,value) { return array; }; -/* -Determine if a value is a date -*/ -$tw.utils.isDate = function(value) { - return Object.prototype.toString.call(value) === "[object Date]"; -}; +/** @deprecated Use instanceof Date instead */ +$tw.utils.isDate = value => value instanceof Date; -/* -Iterate through all the own properties of an object or array. Callback is invoked with (element,title,object) -*/ +/** @deprecated Use array iterative methods instead */ $tw.utils.each = function(object,callback) { - var next,f,length; if(object) { - if(Object.prototype.toString.call(object) == "[object Array]") { - for(f=0, length=object.length; f { + const next = callback(element,index,array); + return next !== false; + }); } else { - var keys = Object.keys(object); - for(f=0, length=keys.length; f { + const next = callback(entry[1], entry[0], object); + return next !== false; + }); } } }; @@ -331,32 +316,13 @@ $tw.utils.htmlDecode = function(s) { return s.toString().replace(/</mg,"<").replace(/ /mg,"\xA0").replace(/>/mg,">").replace(/"/mg,"\"").replace(/&/mg,"&"); }; -/* -Get the browser location.hash. We don't use location.hash because of the way that Firefox auto-urldecodes it (see http://stackoverflow.com/questions/1703552/encoding-of-window-location-hash) -*/ -$tw.utils.getLocationHash = function() { - var href = window.location.href; - var idx = href.indexOf('#'); - if(idx === -1) { - return "#"; - } else if(href.substr(idx + 1,1) === "#" || href.substr(idx + 1,3) === "%23") { - // Special case: ignore location hash if it itself starts with a # - return "#"; - } else { - return href.substring(idx); - } -}; +/** @deprecated Use window.location.hash instead. */ +$tw.utils.getLocationHash = () => window.location.hash; -/* -Pad a string to a given length with "0"s. Length defaults to 2 -*/ -$tw.utils.pad = function(value,length) { - length = length || 2; - var s = value.toString(); - if(s.length < length) { - s = "000000000000000000000000000".substr(0,length - s.length) + s; - } - return s; +/** @deprecated Pad a string to a given length with "0"s. Length defaults to 2 */ +$tw.utils.pad = function(value,length = 2) { + const s = value.toString(); + return s.padStart(length, "0"); }; // Convert a date into UTC YYYYMMDDHHMMSSmmm format @@ -630,7 +596,7 @@ $tw.utils.evalGlobal = function(code,context,filename,sandbox,allowGlobals) { // Compile the code into a function var fn; if($tw.browser) { - fn = window["eval"](code + "\n\n//# sourceURL=" + filename); + fn = window["eval"](code + "\n\n//# sourceURL=" + filename); // eslint-disable-line no-eval -- See https://github.com/TiddlyWiki/TiddlyWiki5/issues/6839 } else { if(sandbox){ fn = vm.runInContext(code,sandbox,filename) @@ -2801,6 +2767,8 @@ return $tw; }); +/* eslint-enable @stylistic/indent */ + if(typeof(exports) !== "undefined") { exports.TiddlyWiki = _boot; } else { diff --git a/boot/bootprefix.js b/boot/bootprefix.js index 92785d8235..c4ebc61727 100644 --- a/boot/bootprefix.js +++ b/boot/bootprefix.js @@ -12,6 +12,8 @@ See Boot.js for further details of the boot process. \*/ +/* eslint-disable @stylistic/indent */ + var _bootprefix = (function($tw) { "use strict"; @@ -114,6 +116,8 @@ return $tw; }); +/* eslint-enable @stylistic/indent */ + if(typeof(exports) === "undefined") { // Set up $tw global for the browser window.$tw = _bootprefix(window.$tw); diff --git a/community/people/ChristianByron.tid b/community/people/ChristianByron.tid new file mode 100644 index 0000000000..5d8ffb7be3 --- /dev/null +++ b/community/people/ChristianByron.tid @@ -0,0 +1,14 @@ +title: @Christian_Byron +tags: Community/Person +fullname: Christian Byron +talk.tiddlywiki.org: Christian_Byron +github: ceebeetree +linkedin: www.linkedin.com/in/christian-byron-b84a594/ +avatar: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAgICAgJCAkKCgkNDgwODRMREBARExwUFhQWFBwrGx8bGx8bKyYuJSMlLiZENS8vNUROQj5CTl9VVV93cXecnNEBCAgICAkICQoKCQ0ODA4NExEQEBETHBQWFBYUHCsbHxsbHxsrJi4lIyUuJkQ1Ly81RE5CPkJOX1VVX3dxd5yc0f/CABEIACAAIAMBIgACEQEDEQH/xAAuAAEBAAMBAAAAAAAAAAAAAAAHBgEDBQQBAAMBAAAAAAAAAAAAAAAAAAABAwX/2gAMAwEAAhADEAAAADv2xtJlY03sqePW3ARS1RSydIhcH//EACcQAAICAgIBAgYDAAAAAAAAAAECAwQFEQASMRMhBhBBk8HRIzJx/9oACAEBAAE/AMFQxs+NExqJLMCwYE+SOT4bF3qr+hAIpRsDQ6lWH0Yco4S/eVniRVQHXZzrZ5dwGQpQtNII2RfJVvHMRl5cbKxC94n/ALp+RxfiKpNcgMMUqPIwjcnWip/I5XtUowaL3Ujir/xt79Glb6/4OZ7MV5oEpUzuIa7MPB14A5jpoYLsEsydo1bbLre+CWEEEYab7Uf74ZYSSThpvtR/vmRmhnuzywp1jZtquta+VPM49qlcy24lf017At7g8uZnHrUsGK3Ez+m3UBvcnXy//8QAHhEAAgEFAAMAAAAAAAAAAAAAAQIDAAQRIkEyUaH/2gAIAQIBAT8AmiuVlZkLEeQOflJPcvMAF0z65V+h0YIW52rBDuxUrztf/8QAIxEBAAEDAwMFAAAAAAAAAAAAAgEAAxEEBSMSQcEiMVJxof/aAAgBAwEBPwC/Z1ZvNBOYz1Gc/lDUat3ySPRM/H2P3W4hcbIldpxnxW3BcjQk9oznzX//2Q== + +Hello ~TiddlyWikiers - I have been a long time fan, recent contributor to the TW community. +Recently I have volunteered to run the [[TiddlyWiki Newsletter|https://tiddlywiki.substack.com/]] to spread the great news about TW. + +I have been in the IT industry for about thirty years, mostly as a consultant and technical arcitect. +More recently I went back to study a masters in IT focussing on AI and data science. +Now my partner and I have started our own business ([[Sphere Innovations|https://sphere-innovations.com.au]]) - in consulting and building web applications for small to medium size businesses here in Australia. diff --git a/community/project/teams/Newsletter Team.tid b/community/project/teams/Newsletter Team.tid index 2c20fd219b..353c259f5e 100644 --- a/community/project/teams/Newsletter Team.tid +++ b/community/project/teams/Newsletter Team.tid @@ -2,5 +2,6 @@ title: Newsletter Team tags: Community/Team modified: 20250909171928024 created: 20250909171928024 +leader: @Christian_Byron The Newsletter Team is responsible for producing the TiddlyWiki Newsletter, a monthly email newsletter that highlights news, updates, and community contributions related to TiddlyWiki. \ No newline at end of file diff --git a/core/modules/editor/engines/framed.js b/core/modules/editor/engines/framed.js index 1a4b11c458..01e7045374 100644 --- a/core/modules/editor/engines/framed.js +++ b/core/modules/editor/engines/framed.js @@ -156,8 +156,8 @@ Fix the height of textarea to fit content FramedEngine.prototype.fixHeight = function() { // Make sure styles are updated this.copyStyles(); - // Adjust height - if(this.widget.editTag === "textarea") { + // If .editRows is initialised, it takes precedence + if(this.widget.editTag === "textarea" && !this.widget.editRows) { if(this.widget.editAutoHeight) { if(this.domNode && !this.domNode.isTiddlyWikiFakeDom) { var newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight); diff --git a/core/modules/editor/engines/simple.js b/core/modules/editor/engines/simple.js index 93f0215222..6260021274 100644 --- a/core/modules/editor/engines/simple.js +++ b/core/modules/editor/engines/simple.js @@ -100,7 +100,8 @@ SimpleEngine.prototype.getText = function() { Fix the height of textarea to fit content */ SimpleEngine.prototype.fixHeight = function() { - if(this.widget.editTag === "textarea") { + // If .editRows is initialised, it takes precedence + if((this.widget.editTag === "textarea") && !this.widget.editRows) { if(this.widget.editAutoHeight) { if(this.domNode && !this.domNode.isTiddlyWikiFakeDom) { $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight); diff --git a/core/modules/filters.js b/core/modules/filters.js index 56bc533ccc..7c8cb21ba7 100644 --- a/core/modules/filters.js +++ b/core/modules/filters.js @@ -88,8 +88,8 @@ function parseFilterOperation(operators,filterString,p) { rexMatch = rex.exec(filterString.substring(p)); if(rexMatch) { operator.regexp = new RegExp(rexMatch[1], rexMatch[2]); - // DEPRECATION WARNING - console.log("WARNING: Filter",operator.operator,"has a deprecated regexp operand",operator.regexp); + // DEPRECATION WARNING + console.log("WARNING: Filter",operator.operator,"has a deprecated regexp operand",operator.regexp); nextBracketPos = p + rex.lastIndex - 1; } else { @@ -232,7 +232,12 @@ exports.getFilterRunPrefixes = function() { exports.filterTiddlers = function(filterString,widget,source) { var fn = this.compileFilter(filterString); - return fn.call(this,source,widget); + try { + const fnResult = fn.call(this,source,widget); + return fnResult; + } catch(e) { + return [`${$tw.language.getString("Error/Filter")}: ${e}`]; + } }; /* @@ -314,19 +319,19 @@ exports.compileFilter = function(filterString) { // Invoke the appropriate filteroperator module results = operatorFunction(accumulator,{ - operator: operator.operator, - operand: operands.length > 0 ? operands[0] : undefined, - operands: operands, - multiValueOperands: multiValueOperands, - isMultiValueOperand: isMultiValueOperand, - prefix: operator.prefix, - suffix: operator.suffix, - suffixes: operator.suffixes, - regexp: operator.regexp - },{ - wiki: self, - widget: widget - }); + operator: operator.operator, + operand: operands.length > 0 ? operands[0] : undefined, + operands: operands, + multiValueOperands: multiValueOperands, + isMultiValueOperand: isMultiValueOperand, + prefix: operator.prefix, + suffix: operator.suffix, + suffixes: operator.suffixes, + regexp: operator.regexp + },{ + wiki: self, + widget: widget + }); if($tw.utils.isArray(results)) { accumulator = self.makeTiddlerIterator(results); } else { diff --git a/core/modules/startup/render.js b/core/modules/startup/render.js index 43ef48207a..c97b87daea 100644 --- a/core/modules/startup/render.js +++ b/core/modules/startup/render.js @@ -18,6 +18,7 @@ exports.synchronous = true; // Default story and history lists var PAGE_TITLE_TITLE = "$:/core/wiki/title"; var PAGE_STYLESHEET_TITLE = "$:/core/ui/PageStylesheet"; +var ROOT_STYLESHEET_TITLE = "$:/core/ui/RootStylesheet"; var PAGE_TEMPLATE_TITLE = "$:/core/ui/RootTemplate"; // Time (in ms) that we defer refreshing changes to draft tiddlers @@ -44,22 +45,13 @@ exports.startup = function() { publishTitle(); } }); - // Set up the styles - $tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument}); - $tw.styleContainer = $tw.fakeDocument.createElement("style"); - $tw.styleWidgetNode.render($tw.styleContainer,null); - $tw.styleWidgetNode.assignedStyles = $tw.styleContainer.textContent; - $tw.styleElement = document.createElement("style"); - $tw.styleElement.innerHTML = $tw.styleWidgetNode.assignedStyles; - document.head.insertBefore($tw.styleElement,document.head.firstChild); + + var styleParser = $tw.wiki.parseTiddler(ROOT_STYLESHEET_TITLE,{parseAsInline: true}), + styleWidgetNode = $tw.wiki.makeWidget(styleParser,{document: document}); + styleWidgetNode.render(document.head,null); + $tw.wiki.addEventListener("change",$tw.perf.report("styleRefresh",function(changes) { - if($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) { - var newStyles = $tw.styleContainer.textContent; - if(newStyles !== $tw.styleWidgetNode.assignedStyles) { - $tw.styleWidgetNode.assignedStyles = newStyles; - $tw.styleElement.innerHTML = $tw.styleWidgetNode.assignedStyles; - } - } + styleWidgetNode.refresh(changes,document.head,null); })); // Display the $:/core/ui/PageTemplate tiddler to kick off the display $tw.perf.report("mainRender",function() { @@ -68,7 +60,7 @@ exports.startup = function() { $tw.utils.addClass($tw.pageContainer,"tc-page-container-wrapper"); document.body.insertBefore($tw.pageContainer,document.body.firstChild); $tw.pageWidgetNode.render($tw.pageContainer,null); - $tw.hooks.invokeHook("th-page-refreshed"); + $tw.hooks.invokeHook("th-page-refreshed"); })(); // Remove any splash screen elements var removeList = document.querySelectorAll(".tc-remove-when-wiki-loaded"); diff --git a/core/modules/startup/windows.js b/core/modules/startup/windows.js index 39a2f59d62..3fa70d1278 100644 --- a/core/modules/startup/windows.js +++ b/core/modules/startup/windows.js @@ -63,24 +63,16 @@ exports.startup = function() { $tw.eventBus.emit("window:closed",{windowID}); },false); // Set up the styles - var styleWidgetNode = $tw.wiki.makeTranscludeWidget("$:/core/ui/PageStylesheet",{ - document: $tw.fakeDocument, - variables: variables, - importPageMacros: true}), - styleContainer = $tw.fakeDocument.createElement("style"); - styleWidgetNode.render(styleContainer,null); - var styleElement = srcDocument.createElement("style"); - styleElement.innerHTML = styleContainer.textContent; - srcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild); + var styleParser = $tw.wiki.parseTiddler("$:/core/ui/RootStylesheet",{parseAsInline: true}), + styleWidgetNode = $tw.wiki.makeWidget(styleParser,{document: srcDocument}); + styleWidgetNode.render(srcDocument.head,null); // Render the text of the tiddler var parser = $tw.wiki.parseTiddler(template), widgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables}); widgetNode.render(srcDocument.body,srcDocument.body.firstChild); // Function to handle refreshes refreshHandler = function(changes) { - if(styleWidgetNode.refresh(changes,styleContainer,null)) { - styleElement.innerHTML = styleContainer.textContent; - } + styleWidgetNode.refresh(changes); widgetNode.refresh(changes); }; $tw.wiki.addEventListener("change",refreshHandler); diff --git a/core/modules/utils/deprecated.js b/core/modules/utils/deprecated.js new file mode 100644 index 0000000000..ecf14e9b06 --- /dev/null +++ b/core/modules/utils/deprecated.js @@ -0,0 +1,58 @@ +/*\ +title: $:/core/modules/utils/deprecated.js +type: application/javascript +module-type: utils + +Deprecated util functions + +\*/ + +exports.logTable = data => console.table(data); + +exports.repeat = (str,count) => str.repeat(count); + +exports.startsWith = (str,search) => str.startsWith(search); + +exports.endsWith = (str,search) => str.endsWith(search); + +exports.trim = function(str) { + if(typeof str === "string") { + return str.trim(); + } else { + return str; + } +}; + +exports.hopArray = (object,array) => array.some(element => $tw.utils.hop(object,element)); + +exports.sign = Math.sign; + +exports.strEndsWith = (str,ending,position) => str.endsWith(ending,position); + +exports.stringifyNumber = num => num.toString(); + +exports.tagToCssSelector = function(tagName) { + return "tc-tagged-" + encodeURIComponent(tagName).replace(/[!"#$%&'()*+,\-./:;<=>?@[\\\]^`{\|}~,]/mg,function(c) { + return "\\" + c; + }); +}; + +exports.domContains = (a,b) => a.compareDocumentPosition(b) & 16; + +exports.domMatchesSelector = (node,selector) => node.matches(selector); + +exports.hasClass = (el,className) => el.classList && el.classList.contains(className); + +exports.addClass = function(el,className) { + el.classList && el.classList.add(className); +}; + +exports.removeClass = function(el,className) { + el.classList && el.classList.remove(className); +}; + +exports.toggleClass = function(el,className,status) { + el.classList && el.classList.toggle(className, status); +}; + +exports.getLocationPath = () => window.location.origin + window.location.pathname; \ No newline at end of file diff --git a/core/modules/utils/dom/dom.js b/core/modules/utils/dom/dom.js index 849c5a88b6..22bee6b397 100644 --- a/core/modules/utils/dom/dom.js +++ b/core/modules/utils/dom/dom.js @@ -11,19 +11,6 @@ Various static DOM-related utility functions. var Popup = require("$:/core/modules/utils/dom/popup.js"); -/* -Determines whether element 'a' contains element 'b' -Code thanks to John Resig, http://ejohn.org/blog/comparing-document-position/ -*/ -exports.domContains = function(a,b) { - return a.contains ? - a !== b && a.contains(b) : - !!(a.compareDocumentPosition(b) & 16); -}; - -exports.domMatchesSelector = function(node,selector) { - return node.matches ? node.matches(selector) : node.msMatchesSelector(selector); -}; /* Select text in a an input or textarea (setSelectionRange crashes on certain input types) @@ -49,38 +36,6 @@ exports.removeChildren = function(node) { } }; -exports.hasClass = function(el,className) { - return el && el.hasAttribute && el.hasAttribute("class") && el.getAttribute("class").split(" ").indexOf(className) !== -1; -}; - -exports.addClass = function(el,className) { - var c = (el.getAttribute("class") || "").split(" "); - if(c.indexOf(className) === -1) { - c.push(className); - el.setAttribute("class",c.join(" ")); - } -}; - -exports.removeClass = function(el,className) { - var c = (el.getAttribute("class") || "").split(" "), - p = c.indexOf(className); - if(p !== -1) { - c.splice(p,1); - el.setAttribute("class",c.join(" ")); - } -}; - -exports.toggleClass = function(el,className,status) { - if(status === undefined) { - status = !exports.hasClass(el,className); - } - if(status) { - exports.addClass(el,className); - } else { - exports.removeClass(el,className); - } -}; - /* Get the first parent element that has scrollbars or use the body as fallback. */ @@ -297,10 +252,6 @@ exports.copyToClipboard = function(text,options) { document.body.removeChild(textArea); }; -exports.getLocationPath = function() { - return window.location.toString().split("#")[0]; -}; - /* Collect DOM variables */ diff --git a/core/modules/utils/utils.js b/core/modules/utils/utils.js index a9c05975d0..1e754e7a32 100644 --- a/core/modules/utils/utils.js +++ b/core/modules/utils/utils.js @@ -48,31 +48,6 @@ exports.warning = function(text) { exports.log(text,"brown/orange"); }; -/* -Log a table of name: value or name: [values...] pairs -*/ -exports.logTable = function(data) { - var hasArrays = false; - $tw.utils.each(data,function(value,name) { - if($tw.utils.isArray(value)) { - hasArrays = true; - } - }); - if(console.table && !hasArrays) { - console.table(data); - } else { - $tw.utils.each(data,function(value,name) { - if($tw.utils.isArray(value)) { - for(var t=0; t tc-tagged-\%24\%3A\%2Ftags\%2FStylesheet -*/ -exports.tagToCssSelector = function(tagName) { - return "tc-tagged-" + encodeURIComponent(tagName).replace(/[!"#$%&'()*+,\-./:;<=>?@[\\\]^`{\|}~,]/mg,function(c) { - return "\\" + c; - }); -}; - -/* -IE does not have sign function -*/ -exports.sign = Math.sign || function(x) { - x = +x; // convert to a number - if(x === 0 || isNaN(x)) { - return x; - } - return x > 0 ? 1 : -1; -}; - -/* -IE does not have an endsWith function -*/ -exports.strEndsWith = function(str,ending,position) { - if(str.endsWith) { - return str.endsWith(ending,position); - } else { - if(typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) { - position = str.length; - } - position -= ending.length; - var lastIndex = str.indexOf(ending, position); - return lastIndex !== -1 && lastIndex === position; - } -}; - /* Return system information useful for debugging */ @@ -1016,10 +904,6 @@ exports.parseInt = function(str) { return parseInt(str,10) || 0; }; -exports.stringifyNumber = function(num) { - return num + ""; -}; - exports.makeCompareFunction = function(type,options) { options = options || {}; // set isCaseSensitive to true if not defined in options diff --git a/core/modules/widgets/action-log.js b/core/modules/widgets/action-log.js index e689211056..5f9198e3c2 100644 --- a/core/modules/widgets/action-log.js +++ b/core/modules/widgets/action-log.js @@ -1,3 +1,4 @@ +/* eslint-disable no-unused-vars */ /*\ title: $:/core/modules/widgets/action-log.js type: application/javascript @@ -32,7 +33,7 @@ LogWidget.prototype.execute = function(){ this.message = this.getAttribute("$$message","debug"); this.logAll = this.getAttribute("$$all","no") === "yes" ? true : false; this.filter = this.getAttribute("$$filter"); -} +}; /* Refresh the widget by ensuring our attributes are up to date @@ -69,10 +70,11 @@ LogWidget.prototype.log = function() { }); // Collect values of all variables, using the source text for functions for(var v in this.variables) { - var variableInfo = this.getVariableInfo(v); - if(variableInfo && variableInfo.srcVariable && variableInfo.srcVariable.isFunctionDefinition) { - allVars[v] = variableInfo.text; + var variable = this.parentWidget && this.parentWidget.variables[v]; + if(variable && variable.isFunctionDefinition) { + allVars[v] = variable.value; } else { + var variableInfo = this.getVariableInfo(v); allVars[v] = variableInfo.resultList.length > 1 ? variableInfo.resultList : variableInfo.text; } } @@ -94,6 +96,6 @@ LogWidget.prototype.log = function() { console.groupEnd(); } console.groupEnd(); -} +}; exports["action-log"] = LogWidget; diff --git a/core/modules/widgets/diff-text.js b/core/modules/widgets/diff-text.js index 32cc4f1d82..88175b17a1 100644 --- a/core/modules/widgets/diff-text.js +++ b/core/modules/widgets/diff-text.js @@ -34,9 +34,10 @@ DiffTextWidget.prototype.render = function(parent,nextSibling) { this.parentDomNode = parent; this.computeAttributes(); this.execute(); - // Create the diff - var dmpObject = new dmp.diff_match_patch(), - diffs = dmpObject.diff_main(this.getAttribute("source",""),this.getAttribute("dest","")); + // Create the diff object + var dmpObject = new dmp.diff_match_patch(); + dmpObject.Diff_EditCost = $tw.utils.parseNumber(this.getAttribute("editcost","4")); + var diffs = dmpObject.diff_main(this.getAttribute("source",""),this.getAttribute("dest","")); // Apply required cleanup switch(this.getAttribute("cleanup","semantic")) { case "none": @@ -132,7 +133,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of */ DiffTextWidget.prototype.refresh = function(changedTiddlers) { var changedAttributes = this.computeAttributes(); - if(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) { + if(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup || changedAttributes.editcost) { this.refreshSelf(); return true; } else { diff --git a/core/modules/widgets/reveal.js b/core/modules/widgets/reveal.js index 14d5ff0d72..b391e07e3b 100755 --- a/core/modules/widgets/reveal.js +++ b/core/modules/widgets/reveal.js @@ -252,14 +252,14 @@ RevealWidget.prototype.updateState = function() { this.renderChildren(domNode,null); } // Animate our DOM node - if(!domNode.isTiddlyWikiFakeDom && this.type === "popup" && this.isOpen) { - this.positionPopup(domNode); - $tw.utils.addClass(domNode,"tc-popup"); // Make sure that clicks don't dismiss popups within the revealed content - - } if(this.isOpen) { domNode.removeAttribute("hidden"); - $tw.anim.perform(this.openAnimation,domNode); + // Position popup after making it visible to ensure correct dimensions + if(!domNode.isTiddlyWikiFakeDom && this.type === "popup") { + this.positionPopup(domNode); + $tw.utils.addClass(domNode,"tc-popup"); // Make sure that clicks don't dismiss popups within the revealed content + } + $tw.anim.perform(this.openAnimation,domNode); } else { $tw.anim.perform(this.closeAnimation,domNode,{callback: function() { //make sure that the state hasn't changed during the close animation diff --git a/core/modules/widgets/view.js b/core/modules/widgets/view.js index e7c808645a..e20c4f07a6 100755 --- a/core/modules/widgets/view.js +++ b/core/modules/widgets/view.js @@ -9,215 +9,376 @@ View widget "use strict"; -var Widget = require("$:/core/modules/widgets/widget.js").widget; - -var ViewWidget = function(parseTreeNode,options) { - this.initialise(parseTreeNode,options); -}; +const Widget = require("$:/core/modules/widgets/widget.js").widget; /* -Inherit from the base widget class +========================================== +ViewHandler Base Class +========================================== +Base class for all view format handlers. +Provides common functionality and defines the interface for subclasses. */ -ViewWidget.prototype = new Widget(); - -/* -Render this widget into the DOM -*/ -ViewWidget.prototype.render = function(parent,nextSibling) { - this.parentDomNode = parent; - this.computeAttributes(); - this.execute(); - if(this.text) { - var textNode = this.document.createTextNode(this.text); - parent.insertBefore(textNode,nextSibling); - this.domNodes.push(textNode); - } else { - this.makeChildWidgets(); - this.renderChildren(parent,nextSibling); +class ViewHandler { + constructor(widget) { + this.widget = widget; + this.wiki = widget.wiki; + this.document = widget.document; + this.viewTitle = widget.viewTitle; + this.viewField = widget.viewField; + this.viewIndex = widget.viewIndex; + this.viewSubtiddler = widget.viewSubtiddler; + this.viewTemplate = widget.viewTemplate; + this.viewMode = widget.viewMode; } -}; -/* -Compute the internal state of the widget -*/ -ViewWidget.prototype.execute = function() { - // Get parameters from our attributes - this.viewTitle = this.getAttribute("tiddler",this.getVariable("currentTiddler")); - this.viewSubtiddler = this.getAttribute("subtiddler"); - this.viewField = this.getAttribute("field","text"); - this.viewIndex = this.getAttribute("index"); - this.viewFormat = this.getAttribute("format","text"); - this.viewTemplate = this.getAttribute("template",""); - this.viewMode = this.getAttribute("mode","block"); - switch(this.viewFormat) { - case "htmlwikified": - this.text = this.getValueAsHtmlWikified(this.viewMode); - break; - case "plainwikified": - this.text = this.getValueAsPlainWikified(this.viewMode); - break; - case "htmlencodedplainwikified": - this.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode); - break; - case "htmlencoded": - this.text = this.getValueAsHtmlEncoded(); - break; - case "htmltextencoded": - this.text = this.getValueAsHtmlTextEncoded(); - break; - case "urlencoded": - this.text = this.getValueAsUrlEncoded(); - break; - case "doubleurlencoded": - this.text = this.getValueAsDoubleUrlEncoded(); - break; - case "date": - this.text = this.getValueAsDate(this.viewTemplate); - break; - case "relativedate": - this.text = this.getValueAsRelativeDate(); - break; - case "stripcomments": - this.text = this.getValueAsStrippedComments(); - break; - case "jsencoded": - this.text = this.getValueAsJsEncoded(); - break; - default: // "text" - this.text = this.getValueAsText(); - break; + render(parent, nextSibling) { + this.text = this.getValue(); + this.createTextNode(parent, nextSibling); } -}; -/* -The various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions -*/ + getValue() { + return this.widget.getValueAsText(); + } -/* -Retrieve the value of the widget. Options are: -asString: Optionally return the value as a string -*/ -ViewWidget.prototype.getValue = function(options) { - options = options || {}; - var value = options.asString ? "" : undefined; - if(this.viewIndex) { - value = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex); - } else { - var tiddler; - if(this.viewSubtiddler) { - tiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler); + createTextNode(parent, nextSibling) { + if(this.text) { + const textNode = this.document.createTextNode(this.text); + parent.insertBefore(textNode, nextSibling); + this.widget.domNodes.push(textNode); } else { - tiddler = this.wiki.getTiddler(this.viewTitle); - } - if(tiddler) { - if(this.viewField === "text" && !this.viewSubtiddler) { - // Calling getTiddlerText() triggers lazy loading of skinny tiddlers - value = this.wiki.getTiddlerText(this.viewTitle); - } else { - if($tw.utils.hop(tiddler.fields,this.viewField)) { - if(options.asString) { - value = tiddler.getFieldString(this.viewField); - } else { - value = tiddler.fields[this.viewField]; - } - } - } - } else { - if(this.viewField === "title") { - value = this.viewTitle; - } + this.widget.makeChildWidgets(); + this.widget.renderChildren(parent, nextSibling); } } - return value; -}; -ViewWidget.prototype.getValueAsText = function() { - return this.getValue({asString: true}); -}; - -ViewWidget.prototype.getValueAsHtmlWikified = function(mode) { - return this.wiki.renderText("text/html","text/vnd.tiddlywiki",this.getValueAsText(),{ - parseAsInline: mode !== "block", - parentWidget: this - }); -}; - -ViewWidget.prototype.getValueAsPlainWikified = function(mode) { - return this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{ - parseAsInline: mode !== "block", - parentWidget: this - }); -}; - -ViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) { - return $tw.utils.htmlEncode(this.wiki.renderText("text/plain","text/vnd.tiddlywiki",this.getValueAsText(),{ - parseAsInline: mode !== "block", - parentWidget: this - })); -}; - -ViewWidget.prototype.getValueAsHtmlEncoded = function() { - return $tw.utils.htmlEncode(this.getValueAsText()); -}; - -ViewWidget.prototype.getValueAsHtmlTextEncoded = function() { - return $tw.utils.htmlTextEncode(this.getValueAsText()); -}; - -ViewWidget.prototype.getValueAsUrlEncoded = function() { - return $tw.utils.encodeURIComponentExtended(this.getValueAsText()); -}; - -ViewWidget.prototype.getValueAsDoubleUrlEncoded = function() { - return $tw.utils.encodeURIComponentExtended($tw.utils.encodeURIComponentExtended(this.getValueAsText())); -}; - -ViewWidget.prototype.getValueAsDate = function(format) { - format = format || "YYYY MM DD 0hh:0mm"; - var value = $tw.utils.parseDate(this.getValue()); - if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { - return $tw.utils.formatDateString(value,format); - } else { - return ""; - } -}; - -ViewWidget.prototype.getValueAsRelativeDate = function(format) { - var value = $tw.utils.parseDate(this.getValue()); - if(value && $tw.utils.isDate(value) && value.toString() !== "Invalid Date") { - return $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description; - } else { - return ""; - } -}; - -ViewWidget.prototype.getValueAsStrippedComments = function() { - var lines = this.getValueAsText().split("\n"), - out = []; - for(var line=0; line 0) ? parseInt(options.startCount,10) : 0, prefix = (typeof(options.prefix) === "string") ? options.prefix : " "; - if (template) { + if(template) { // "count" is important to avoid an endless loop in while(...)!! template = (/\$count:?(\d+)?\$/i.test(template)) ? template : template + "$count$"; // .formatTitleString() expects strings as input @@ -209,7 +209,7 @@ exports.generateNewTitle = function(baseTitle,options) { title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":(++c)+""}); } } else { - if (c > 0) { + if(c > 0) { title = baseTitle + prefix + c; } while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) { @@ -532,7 +532,7 @@ exports.getTiddlerLinks = function(title) { return self.extractLinks(parser.tree); } return []; - }); + }).slice(0); }; /* @@ -551,8 +551,9 @@ exports.getTiddlerBacklinks = function(targetTitle) { backlinks.push(title); } }); + return backlinks; } - return backlinks; + return backlinks.slice(0); }; @@ -578,7 +579,7 @@ exports.extractTranscludes = function(parseTreeRoot, title) { } } } else if(parseTreeNode.attributes.tiddler) { - if (parseTreeNode.attributes.tiddler.type === "string") { + if(parseTreeNode.attributes.tiddler.type === "string") { // Old transclude widget usage value = parseTreeNode.attributes.tiddler.value; } @@ -618,7 +619,7 @@ exports.getTiddlerTranscludes = function(title) { return self.extractTranscludes(parser.tree,title); } return []; - }); + }).slice(0); }; /* @@ -630,9 +631,9 @@ exports.getTiddlerBacktranscludes = function(targetTitle) { backtranscludes = backIndexer && backIndexer.subIndexers.transclude.lookup(targetTitle); if(!backtranscludes) { - backtranscludes = []; + return []; } - return backtranscludes; + return backtranscludes.slice(0); }; /* @@ -641,7 +642,7 @@ Return a hashmap of tiddler titles that are referenced but not defined. Each val exports.getMissingTitles = function() { var self = this, missing = []; -// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified + // We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified this.forEachTiddler(function(title,tiddler) { var links = self.getTiddlerLinks(title); $tw.utils.each(links,function(link) { @@ -683,7 +684,7 @@ exports.getTiddlersWithTag = function(tag) { return self.sortByList(tagmap[tag],tag); }); } - return results; + return results.slice(0); }; /* @@ -734,7 +735,7 @@ exports.findListingsOfTiddler = function(targetTitle,fieldName) { for(var i = 0; i < list.length; i++) { var listItem = list[i], listing = listings[listItem] || []; - if (listing.indexOf(title) === -1) { + if(listing.indexOf(title) === -1) { listing.push(title); } listings[listItem] = listing; @@ -743,7 +744,7 @@ exports.findListingsOfTiddler = function(targetTitle,fieldName) { }); return listings; }); - return listings[targetTitle] || []; + return (listings[targetTitle] || []).slice(0); }; /* @@ -782,7 +783,7 @@ exports.sortByList = function(array,listTitle) { } } // If a new position is specified, let's move it - if (newPos !== -1) { + if(newPos !== -1) { // get its current Pos, and make sure // sure that it's _actually_ in the list // and that it would _actually_ move @@ -1059,7 +1060,7 @@ Options include: exports.parseText = function(type,text,options) { text = text || ""; options = options || {}; - var Parser = $tw.utils.getParser(type,options) + var Parser = $tw.utils.getParser(type,options); // Return the parser instance return new Parser(type,text,{ parseAsInline: options.parseAsInline, @@ -1078,11 +1079,11 @@ exports.parseTiddler = function(title,options) { tiddler = this.getTiddler(title), self = this; return tiddler ? this.getCacheForTiddler(title,cacheType,function() { - if(tiddler.hasField("_canonical_uri")) { - options._canonical_uri = tiddler.fields._canonical_uri; - } - return self.parseText(tiddler.fields.type,tiddler.fields.text,options); - }) : null; + if(tiddler.hasField("_canonical_uri")) { + options._canonical_uri = tiddler.fields._canonical_uri; + } + return self.parseText(tiddler.fields.type,tiddler.fields.text,options); + }) : null; }; exports.parseTextReference = function(title,field,index,options) { @@ -1138,7 +1139,7 @@ exports.getTextReferenceParserInfo = function(title,field,index,options) { parserInfo.parserType = null; } return parserInfo; -} +}; /* Parse a block of text of a specified MIME type @@ -1164,7 +1165,7 @@ exports.getSubstitutedText = function(text,widget,options) { }); // Substitute any variable references with their values return output.replace(/\$\((.+?)\)\$/g, function(match,varname) { - return widget.getVariable(varname,{defaultValue: ""}) + return widget.getVariable(varname,{defaultValue: ""}); }); }; @@ -1242,7 +1243,7 @@ exports.makeTranscludeWidget = function(title,options) { name: "recursionMarker", type: "string", value: options.recursionMarker || "yes" - }, + }, tiddler: { name: "tiddler", type: "string", @@ -1385,7 +1386,7 @@ exports.search = function(text,options) { } } } -// Accumulate the array of fields to be searched or excluded from the search + // Accumulate the array of fields to be searched or excluded from the search var fields = []; if(options.field) { if($tw.utils.isArray(options.field)) { @@ -1518,7 +1519,7 @@ exports.checkTiddlerText = function(title,targetText,options) { targetText = targetText.toLowerCase(); } return text === targetText; -} +}; /* Execute an action string without an associated context widget @@ -1642,7 +1643,7 @@ exports.findDraft = function(targetTitle) { } }); return draftTitle; -} +}; /* Check whether the specified draft tiddler has been modified. @@ -1669,7 +1670,7 @@ historyTitle: title of history tiddler (defaults to $:/HistoryList) exports.addToHistory = function(title,fromPageRect,historyTitle) { var story = new $tw.Story({wiki: this, historyTitle: historyTitle}); story.addToHistory(title,fromPageRect); - console.log("$tw.wiki.addToHistory() is deprecated since V5.1.23! Use the this.story.addToHistory() from the story-object!") + console.log("$tw.wiki.addToHistory() is deprecated since V5.1.23! Use the this.story.addToHistory() from the story-object!"); }; /* @@ -1682,7 +1683,7 @@ options: see story.js exports.addToStory = function(title,fromTitle,storyTitle,options) { var story = new $tw.Story({wiki: this, storyTitle: storyTitle}); story.addToStory(title,fromTitle,options); - console.log("$tw.wiki.addToStory() is deprecated since V5.1.23! Use the this.story.addToStory() from the story-object!") + console.log("$tw.wiki.addToStory() is deprecated since V5.1.23! Use the this.story.addToStory() from the story-object!"); }; /* diff --git a/core/templates/tiddlywiki5.html.tid b/core/templates/tiddlywiki5.html.tid index 721b3d9cec..c38cde9601 100644 --- a/core/templates/tiddlywiki5.html.tid +++ b/core/templates/tiddlywiki5.html.tid @@ -25,6 +25,7 @@ title: $:/core/templates/tiddlywiki5.html `{{{ [enlisttag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}} {{{ [enlisttag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}} {{{ [enlisttag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}` + diff --git a/core/ui/ImportListing.tid b/core/ui/ImportListing.tid index 5bd89ba2b5..76b95c7c40 100644 --- a/core/ui/ImportListing.tid +++ b/core/ui/ImportListing.tid @@ -49,6 +49,27 @@ title: $:/core/ui/ImportListing \end \whitespace trim +<$let importJson={{{ [{$:/Import}] }}}> + <$let importTitles={{{ [jsonindexes[tiddlers]] }}}> + <$let importTypes={{{ [(importTitles)] :map[jsonget[tiddlers],,[type]] }}}> + <$let anyMatch={{{ [all[shadows+tiddlers]tag[$:/tags/ImportOptions]get[condition]] :map[(importTypes)subfilter] +[!is[blank]limit[1]] }}}> + <%if [!is[blank]] %> +
+ <$list filter="[all[shadows+tiddlers]tag[$:/tags/ImportOptions]]" variable="importOption"> + <$let condition={{{ [get[condition]] }}}> + <$let hasMatch={{{ [(importTypes)subfilterlimit[1]] }}}> + <%if [!is[blank]] %> + <$transclude tiddler=<>/> + <%endif%> + + + +
+ <%endif%> + + + +
diff --git a/core/ui/RootStylesheet.tid b/core/ui/RootStylesheet.tid new file mode 100644 index 0000000000..aca3b3ac96 --- /dev/null +++ b/core/ui/RootStylesheet.tid @@ -0,0 +1,15 @@ +title: $:/core/ui/RootStylesheet +code-body: yes + +\import [subfilter{$:/core/config/GlobalImportFilter}] +\whitespace trim +<$let currentTiddler={{$:/language}} languageTitle={{!!name}}> + + <$list filter="[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!is[draft]] -[[$:/themes/tiddlywiki/vanilla/reset]]"> + + + diff --git a/editions/ja-JP/tiddlers/TiddlyWiki Docs PR Maker.tid b/editions/ja-JP/tiddlers/TiddlyWiki Docs PR Maker.tid index 0e1e506d76..061f99f794 100644 --- a/editions/ja-JP/tiddlers/TiddlyWiki Docs PR Maker.tid +++ b/editions/ja-JP/tiddlers/TiddlyWiki Docs PR Maker.tid @@ -1,13 +1,12 @@ created: 20240313100515958 -modified: 20241222104855231 -original-modified: 20240313103959789 +modified: 20251214111324789 +original-modified: 20251023154747366 tags: Editions title: TiddlyWiki Docs PR Maker ja-title: TiddlyWikiドキュメントPRメーカー -[[@saqimtiaz|https://github.com/saqimtiaz/]]が作成した''~TiddlyWikiドキュメントPRメーカー''は、ドキュメントへの貢献と改善を支援するために設計された、tiddlywiki.comの特別エディションです。 - -https://saqimtiaz.github.io/tw5-docs-pr-maker/ +''~TiddlyWikiドキュメントPRメーカー''は、ドキュメントへの貢献と改善を支援するために設計された、tiddlywiki.comの特別エディションです。 +https://edit.tiddlywiki.com ドキュメントに加えられたすべての変更は、GitHubに簡単に送信できます。 -- プルリクエストは自動的に作成されるため、エディションの名前は"PRメーカー"になります。 diff --git a/editions/ja-JP/tiddlers/hellothere/Welcome.tid b/editions/ja-JP/tiddlers/Welcome.tid similarity index 54% rename from editions/ja-JP/tiddlers/hellothere/Welcome.tid rename to editions/ja-JP/tiddlers/Welcome.tid index b6ecf55019..cd26c376b6 100644 --- a/editions/ja-JP/tiddlers/hellothere/Welcome.tid +++ b/editions/ja-JP/tiddlers/Welcome.tid @@ -1,8 +1,10 @@ list: HelloThere [[Quick Start]] [[Find Out More]] [[TiddlyWiki on the Web]] [[Testimonials and Reviews]] GettingStarted Community tags: TableOfContents -list-before: title: Welcome ja-title: ようこそ type: text/vnd.tiddlywiki -<]" >> \ No newline at end of file +<$transclude $tiddler="HelloThere"/> + +''詳細については、トピックを選択してください:'' +
<>
\ No newline at end of file diff --git a/editions/ja-JP/tiddlers/about/Archive.tid b/editions/ja-JP/tiddlers/about/Archive.tid index 6965067ad2..5e1f38ccb4 100644 --- a/editions/ja-JP/tiddlers/about/Archive.tid +++ b/editions/ja-JP/tiddlers/about/Archive.tid @@ -1,6 +1,6 @@ created: 20231005205623086 -modified: 20241226114558500 -original-modified: 20241115193649399 +modified: 20251208113045167 +original-modified: 20250807100434131 tags: About title: TiddlyWiki Archive ja-title: TiddlyWikiアーカイブ @@ -10,7 +10,7 @@ ja-title: TiddlyWikiアーカイブ 5.1.10 5.1.11 5.1.12 5.1.13 5.1.14 5.1.15 5.1.16 5.1.17 5.1.18 5.1.19 5.1.20 5.1.21 5.1.22 5.1.23 5.2.0 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 -5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 +5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.3.8 \end TiddlyWikiの古いバージョンは[[アーカイブ|https://github.com/TiddlyWiki/tiddlywiki.com-gh-pages/tree/master/archive]]で入手できます: diff --git a/editions/ja-JP/tiddlers/about/Developers.tid b/editions/ja-JP/tiddlers/about/Developers.tid index 56aec49495..e159ed556e 100644 --- a/editions/ja-JP/tiddlers/about/Developers.tid +++ b/editions/ja-JP/tiddlers/about/Developers.tid @@ -1,31 +1,13 @@ created: 20150412191004348 -modified: -original-modified: 20240925114810504 +modified: 20251208113458455 +original-modified: 20251022153208584 tags: Community Reference title: Developers ja-title: 開発者 type: text/vnd.tiddlywiki -! [[GitHubの統計|https://github.com/TiddlyWiki/TiddlyWiki5/graphs/contributors]] - -開発者がTiddlyWikiについて学び、開発について議論し、貢献するためのリソースがあります。 - -> [img[https://repobeats.axiom.co/api/embed/b92b1b363e2b5f26837ae573a60d39b4248b50a0.svg]] - * [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]]は公式の開発者ドキュメントです - * [[GitHubでの開発|https://github.com/TiddlyWiki/TiddlyWiki5]]に参加する - * [[GitHubディスカッション|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]]はQ&Aとオープンな形式のディスカッションです * [[GitHubイシュー|https://github.com/TiddlyWiki/TiddlyWiki5/issues]]は、バグレポートを作成し、具体的で実現可能な新しいアイデアを提案するためのものです - -* 古い~TiddlyWikiDevGoogleグループは閉鎖され、[[TiddlyWikiトーク|https://talk.tiddlywiki.org/]]と[[GitHubディスカッション|https://github.com/TiddlyWiki/TiddlyWiki5/discussions]]に代わりました -** 有用なアーカイブとして残っています: https://groups.google.com/group/TiddlyWikiDev -*** 強化されたグループ検索機能は[[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]]で利用できます - -* https://gitter.im/TiddlyWiki/public でチャットしてください(開発ルームは近日公開予定) - -! Twitter - -* 最新ニュースは[[Twitterで@TiddlyWiki|http://twitter.com/#!/TiddlyWiki]]をフォローしてください - +* プロジェクトに貢献する方法についてのガイドラインについては、[[貢献|Contributing]]を参照してください diff --git a/editions/ja-JP/tiddlers/about/History of TiddlyWiki.tid b/editions/ja-JP/tiddlers/about/History of TiddlyWiki.tid index f4068b3bea..df0b1ca1c1 100644 --- a/editions/ja-JP/tiddlers/about/History of TiddlyWiki.tid +++ b/editions/ja-JP/tiddlers/about/History of TiddlyWiki.tid @@ -1,88 +1,14 @@ created: 20140908114400000 -modified: 20241225112134741 -original-modified: 20241016125145988 +modified: 20251208115007037 +original-modified: 20251122174540932 tags: About title: History of TiddlyWiki ja-title: TiddlyWikiの歴史 type: text/vnd.tiddlywiki -! ~TiddlyWikiの20年 - -~TiddlyWikiの20周年を祝うために、いくつかのライブストリームを開催しました。録画はここで視聴できます: - -* 2024年9月19日 - https://youtube.com/live/z9slx92TyrU -* 2024年9月20日 - https://youtube.com/live/puFdN-FgOjg -* 2024年9月21日 - https://youtube.com/live/0SjsHvwjHGE -* 2024年9月22日 - https://youtube.com/live/oD7Jtq2D4lg - -GitHubでは、TiddlyWikiの貢献者に記念日の感想を[[聞いて|https://github.com/TiddlyWiki/TiddlyWiki5/discussions/7983]]お祝いしました。興味深く思慮深い回答がいくつか寄せられました。たとえば、[[@FND|https://github.com/FND]]からの回答は次の通りです: - -> TiddlyWikiは、私のキャリアだけでなく、価値観にも計り知れないほどの永続的な影響を与えました。今日に至るまで、私はTiddlyWikiから学んだ[[基本的なコンセプト|https://prepitaph.org/articles/creative-privacy/]] - その多くは、他では忘れられたり無視されたりしています - を頻繁に参照しています。このバックグラウンドがあることで、技術的な複雑さを崇拝したり、テクノロジーの世界に人間が存在することを思い出したりする場合でも、この業界で仕事をする上で自分の方向性を保つことができます。 - -> TiddlyWikiとは、人々のことです。このコミュニティや、Jeremyがその周りに築いたグループと交流し、そこから学ぶことができたのは、私にとって計り知れない特権でした。また、この特権がまったくの偶然によって私に与えられたものだということを思い出すのにも役立ちます。この恩返しをしていきたいと思います。 - -~TiddlyWikiを特集した最近のポッドキャスト: - -* 2016年のチェンジログ ポッドキャスト - https://changelog.com/podcast/196 ~TiddlyWikiの背景について議論しています -* 2021年のFloss Weeklyの録画 - https://twit.tv/shows/floss-weekly/episodes/620 - -! TiddlyWikiの起源 - -遡ること1997年に、同僚が私に[[Ward Cunningham のオリジナル wiki|http://c2.com/cgi/wiki]]を紹介してくれました。これほど強力なものがわずか700行のPerlに収まることに感銘を受け、セキュリティとパーミッションの根本的な再考に魅了されました。他の多くの開発者と同様に、私もあらゆる機会を利用してさまざまなWikiを試し、仕事での使用法を模索しました - -私にとってWikiの魅力は、印刷物中心のドキュメントやEメールの一般的なパラダイムを最終的に破壊する可能性があるという感覚でした - -人々がWikiを使用する様子を数年間観察した結果、パワーユーザーは複数のブラウザタブで複数のWikiページを同時に開く機能を多用しており、ページの比較やレビュー、ページ間でのテキストのコピー、未読ページの一種のキューとして用いることが容易になっていることに気づきました - -一度に複数のページを操作するこの機能がWikiをリファクタリングする機能の中心であると感じました。また、愛情を込めてリファクタリングされたWikiはより便利になる傾向があると一般に認められています。それでも、標準のWikiユーザーインターフェイスは常に、単一ページを一度に表示し操作すること専用にデザインされてきました - -2004年4月にGMailを見たとき、すべての考えがまとまりました。GMailは、Ajaxを巧みに使用して個々のメールをスレッド化された会話に融合させました。 - -このアイデアをさらに探求するために、HTMLとJavaScriptを試し始めました。私にはどちらの経験もなく、以前の活動で、いくつかの静的ページと単純なASPサイトをまとめただけでした。これらのクライアント側テクノロジーについて理解するのは大変でした。他の皆さんと同じように、私もWebプログラミングの非互換性と矛盾がどれほど恐ろしいものであるかを知り、愕然としました - -! TiddlyWikiのラウンチ - -そうして、2004年9月に、私は原始的な[[TiddlyWikiの最初のバージョン|https://classic.tiddlywiki.com/firstversion.html]]をリリースしました。これは、アイデアを実証するための最小のもので、シンプルで自己完結型の静的な48KB HTMLファイルでした - -TiddlyWikiの最初のバージョンをこの方法で作成することの欠点は、編集に使用するのが完全に非現実的になることでした。'変更を保存'をクリックすると、ファイルシステムにHTMLページを書き込むために、保存されるデータを示すウィンドウがポップアップ表示されるだけでした - -初期のフィードバックの多くは、TiddlyWikiは優れているが、変更を適切に保存できればさらに便利になるというものでした。ブラウザで実行されているHTMLファイルがローカルファイルシステムに変更を保存することは不可能であることはわかっていると思っていたので、少しイライラしました - -数か月以内に、TiddlyWikiがブラウザに変更を保存できるようにする実験的なFirefox拡張機能を目にしました。コードを調べてみると、ファイルシステムへの書き込みに使用されていたAPIは、`file://` URI経由でロードされている場合に限り、実際には通常のHTMLファイルで利用できることがわかりました - -私はFirefoxコードをTiddlyWikiのコアに適合させ、すぐにInternet Explorerにも同様の機能を追加しました(MicrosoftがInternet Explorerとともに配布した古い[[ActiveX|https://en.wikipedia.org/wiki/ActiveX]]コントロールを利用しています) - -! TiddlyWikiの成長 - -TiddlyWikiの成長における大きなマイルストーンは、Nathan Bowersによる"GTDTiddlyWiki"の作成でした。彼はバニラのTiddlyWiki製品を採用し、一般的なGetting Things Done方法論を使用してタスクをトラックするという特定のアプリケーションに適応させました。GTDTiddlyWikiはすぐに人気を博し、[[LifeHacker|https://lifehacker.com/]]などのWebサイトで熱狂的に歓迎されました - -その後数年間にわたって、TiddlyWikiの人気は高まり続け、新しい機能や能力も獲得しました。1年以内に、私はTiddlyWikiでオーダーメイドの開発作業を行うことで自活できるようになり、特にWikiパイオニアである[[SocialText|https://en.wikipedia.org/wiki/Socialtext]]と協力して変更をオンラインサーバと同期する機能に取り組みました - -! BTの獲得 - -2007年5月に、[[BT]]は私のコンサルティング会社である[[Osmosoft]]を買収しました。従業員が1人で、収益がほんの少ししかない会社を買収するというのは、異例の決断でした。[[Osmosoft]]は、コミュニティの将来を保証するために私がTiddlyWikiの知的財産をUnaMesaに譲渡したため、TiddlyWikiの知的財産さえ所有していませんでした - -[[BT]]の動機は、コミュニティベースのエコシステムを理解することでした。私は"オープンソースイノベーション責任者"として組織に加わり、オープンソースガバナンスの責任を負い、オープンソースコミュニティへの参加方法に関するアドバイスと専門知識を提供しました - -! [[Osmosoft]]とTiddlySpace - -私はBTに[[Osmosoft]]という名前でチームを作りました。私たちの目的は、オープンソースのメリットを広め、他のチームが実際にそのメリットを実感できるよう支援することでした。また、Webの使用全般、特にWeb標準の使用を普及する必要があることもわかりました - -私たちのアプローチは、話すことよりも見せることに重点を置くことでした。私たちはTiddlyWikiコミュニティと協力してエコシステムを拡張し、BT用の多数の内部システムを構築しました(TiddlyWikiに基づくものもあれば、そうでないものもあります) - -TiddlyWikiコミュニティへの[[Osmosoft]]の主な貢献は、TiddlyWebとTiddlySpaceの作成でした。TiddlyWebは、Tiddlerのための堅牢なインターネット規模のサーバであり、TiddlerのTiddlyWikiビューを構成することもできました。TiddlySpaceは、TiddlyWebをより直接的に使用可能な形式にパッケージ化する試みでした - -! BTを離れる - -2011年の終わりまでに、私はBTという企業の枠外でTiddlyWikiの可能性を実現するのがより適切な立場にあると感じるようになりました。そうして、私は退職して独立した開発者として働き始め、主にTiddlyWiki5という形でTiddlyWikiを新しくリブートすることに取り組みました - -! TiddlyWiki5の開発 - -私は2011年11月からTiddlyWikiの新しいリリースに取り組みました。プログラマーとして、すでに書いたものの"バージョン 2.0"に取り組むことは非常に魅力的な提案です。これは、要件が完全に理解され、目的の機能をサポートするために必要なアーキテクチャの進化に集中できることを意味します - -! 将来 - -TiddlyWiki5がついに"ベータ"ステータスを脱した今、私の希望は、それが長く存続することです。HTML5とNode.jsの標準機能のみを使用しているため、今後何年にもわたって完全に動作しない理由はありません。私の目標は、少なくとも25年は続けることです - -//Jeremy Ruston, 2014年9月20日// +~TiddlyWikiの歴史をまとめています。このプロジェクトは現在進行中です。寄稿や思い出話など、ぜひお寄せください。 +* [[TiddlyWiki物語|The Story of TiddlyWiki]] – [[@Jermolene]]によるTiddlyWikiの物語、その起源と進化に関する個人的な記録 +* https://github.com/TiddlyWiki/LaunchArchive – 2004年のTiddlyWiki立ち上げ時からのブログとツイート +* [[TiddlyWiki記念日|TiddlyWiki Anniversaries]] – TiddlyWikiの主要な記念日のお祝いイベントの記録 +* [[フィルタシンタックスの歴史|Filter Syntax History]] – TiddlyWiki5におけるフィルタシンタックスの進化の簡単な歴史 \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/about/The Story of TiddlyWiki.tid b/editions/ja-JP/tiddlers/about/The Story of TiddlyWiki.tid new file mode 100644 index 0000000000..f60acc2784 --- /dev/null +++ b/editions/ja-JP/tiddlers/about/The Story of TiddlyWiki.tid @@ -0,0 +1,71 @@ +title: The Story of TiddlyWiki +ja-title: TiddlyWiki物語 +tags: [[History of TiddlyWiki]] +modifier: Jeremy Ruston +created: 20140908114400000 +modified: 20251215111120830 +original-modified: 20250730154331065 + +これは、2004年9月20日の最初のリリース以来のTiddlyWikiの起源と進化のストーリーについての個人的な記録です。 + +! TiddlyWikiの起源 + +遡ること1997年に、同僚が私に[[Ward Cunningham のオリジナル wiki|http://c2.com/cgi/wiki]]を紹介してくれました。これほど強力なものがわずか700行のPerlに収まることに感銘を受け、セキュリティとパーミッションの根本的な再考に魅了されました。他の多くの開発者と同様に、私もあらゆる機会を利用してさまざまなWikiを試し、仕事での使用法を模索しました + +私にとってWikiの魅力は、印刷物中心のドキュメントやEメールの一般的なパラダイムを最終的に破壊する可能性があるという感覚でした + +人々がWikiを使用する様子を数年間観察した結果、パワーユーザーは複数のブラウザタブで複数のWikiページを同時に開く機能を多用しており、ページの比較やレビュー、ページ間でのテキストのコピー、未読ページの一種のキューとして用いることが容易になっていることに気づきました + +一度に複数のページを操作するこの機能がWikiをリファクタリングする機能の中心であると感じました。また、愛情を込めてリファクタリングされたWikiはより便利になる傾向があると一般に認められています。それでも、標準のWikiユーザーインターフェイスは常に、単一ページを一度に表示し操作すること専用にデザインされてきました + +2004年4月にGMailを見たとき、すべての考えがまとまりました。GMailは、Ajaxを巧みに使用して個々のメールをスレッド化された会話に融合させました。 + +このアイデアをさらに探求するために、HTMLとJavaScriptを試し始めました。私にはどちらの経験もなく、以前の活動で、いくつかの静的ページと単純なASPサイトをまとめただけでした。これらのクライアント側テクノロジーについて理解するのは大変でした。他の皆さんと同じように、私もWebプログラミングの非互換性と矛盾がどれほど恐ろしいものであるかを知り、愕然としました + +! TiddlyWikiのラウンチ + +そうして、2004年9月に、私は原始的な[[TiddlyWikiの最初のバージョン|https://classic.tiddlywiki.com/firstversion.html]]をリリースしました。これは、アイデアを実証するための最小のもので、シンプルで自己完結型の静的な48KB HTMLファイルでした + +TiddlyWikiの最初のバージョンをこの方法で作成することの欠点は、編集に使用するのが完全に非現実的になることでした。'変更を保存'をクリックすると、ファイルシステムにHTMLページを書き込むために、保存されるデータを示すウィンドウがポップアップ表示されるだけでした + +初期のフィードバックの多くは、TiddlyWikiは優れているが、変更を適切に保存できればさらに便利になるというものでした。ブラウザで実行されているHTMLファイルがローカルファイルシステムに変更を保存することは不可能であることはわかっていると思っていたので、少しイライラしました + +数か月以内に、TiddlyWikiがブラウザに変更を保存できるようにする実験的なFirefox拡張機能を目にしました。コードを調べてみると、ファイルシステムへの書き込みに使用されていたAPIは、`file://` URI経由でロードされている場合に限り、実際には通常のHTMLファイルで利用できることがわかりました + +私はFirefoxコードをTiddlyWikiのコアに適合させ、すぐにInternet Explorerにも同様の機能を追加しました(MicrosoftがInternet Explorerとともに配布した古い[[ActiveX|https://en.wikipedia.org/wiki/ActiveX]]コントロールを利用しています) + +! TiddlyWikiの成長 + +TiddlyWikiの成長における大きなマイルストーンは、Nathan Bowersによる"GTDTiddlyWiki"の作成でした。彼はバニラのTiddlyWiki製品を採用し、一般的なGetting Things Done方法論を使用してタスクをトラックするという特定のアプリケーションに適応させました。GTDTiddlyWikiはすぐに人気を博し、[[LifeHacker|https://lifehacker.com/]]などのWebサイトで熱狂的に歓迎されました + +その後数年間にわたって、TiddlyWikiの人気は高まり続け、新しい機能や能力も獲得しました。1年以内に、私はTiddlyWikiでオーダーメイドの開発作業を行うことで自活できるようになり、特にWikiパイオニアである[[SocialText|https://en.wikipedia.org/wiki/Socialtext]]と協力して変更をオンラインサーバと同期する機能に取り組みました + +! BTの獲得 + +2007年5月に、[[BT]]は私のコンサルティング会社である[[Osmosoft]]を買収しました。従業員が1人で、収益がほんの少ししかない会社を買収するというのは、異例の決断でした。[[Osmosoft]]は、コミュニティの将来を保証するために私がTiddlyWikiの知的財産をUnaMesaに譲渡したため、TiddlyWikiの知的財産さえ所有していませんでした + +[[BT]]の動機は、コミュニティベースのエコシステムを理解することでした。私は"オープンソースイノベーション責任者"として組織に加わり、オープンソースガバナンスの責任を負い、オープンソースコミュニティへの参加方法に関するアドバイスと専門知識を提供しました + +! [[Osmosoft]]とTiddlySpace + +私はBTに[[Osmosoft]]という名前でチームを作りました。私たちの目的は、オープンソースのメリットを広め、他のチームが実際にそのメリットを実感できるよう支援することでした。また、Webの使用全般、特にWeb標準の使用を普及する必要があることもわかりました + +私たちのアプローチは、話すことよりも見せることに重点を置くことでした。私たちはTiddlyWikiコミュニティと協力してエコシステムを拡張し、BT用の多数の内部システムを構築しました(TiddlyWikiに基づくものもあれば、そうでないものもあります) + +TiddlyWikiコミュニティへの[[Osmosoft]]の主な貢献は、TiddlyWebとTiddlySpaceの作成でした。TiddlyWebは、Tiddlerのための堅牢なインターネット規模のサーバであり、TiddlerのTiddlyWikiビューを構成することもできました。TiddlySpaceは、TiddlyWebをより直接的に使用可能な形式にパッケージ化する試みでした + +! BTを離れる + +2011年の終わりまでに、私はBTという企業の枠外でTiddlyWikiの可能性を実現するのがより適切な立場にあると感じるようになりました。そうして、私は退職して独立した開発者として働き始め、主にTiddlyWiki5という形でTiddlyWikiを新しくリブートすることに取り組みました + +! TiddlyWiki5の開発 + +私は2011年11月からTiddlyWikiの新しいリリースに取り組みました。プログラマーとして、すでに書いたものの"バージョン 2.0"に取り組むことは非常に魅力的な提案です。これは、要件が完全に理解され、目的の機能をサポートするために必要なアーキテクチャの進化に集中できることを意味します + +! 将来 + +2014年、 TiddlyWiki5を初めてリリースした直後に、私は次のように書きました: + +> TiddlyWiki5がついに"ベータ"ステータスを脱した今、私の希望は、それが長く存続することです。HTML5とNode.jsの標準機能のみを使用しているため、今後何年にもわたって完全に動作しない理由はありません。私の目標は、少なくとも25年は続けることです + +これを書いている時点で、TiddlyWiki5は目標の44%を達成しています。コミュニティの皆様のご支援と熱意により、このプロジェクトは今後も発展し、進化していくと確信しています。 diff --git a/editions/ja-JP/tiddlers/about/TiddlyWiki Anniversaries.tid b/editions/ja-JP/tiddlers/about/TiddlyWiki Anniversaries.tid new file mode 100644 index 0000000000..3b7c316488 --- /dev/null +++ b/editions/ja-JP/tiddlers/about/TiddlyWiki Anniversaries.tid @@ -0,0 +1,33 @@ +title: TiddlyWiki Anniversaries +ja-title: TiddlyWiki記念日 +tags: [[History of TiddlyWiki]] +created: 20250730154331065 +modified: 20251215105745893 +original-modified: 20250730154331065 + +! ~TiddlyWikiの20周年 + +~TiddlyWikiの20周年を祝うために、いくつかのライブストリームを開催しました。録画はここで視聴できます: + +* 2024年9月19日 - https://youtube.com/live/z9slx92TyrU +* 2024年9月20日 - https://youtube.com/live/puFdN-FgOjg +* 2024年9月21日 - https://youtube.com/live/0SjsHvwjHGE +* 2024年9月22日 - https://youtube.com/live/oD7Jtq2D4lg + +GitHubでは、TiddlyWikiの貢献者に記念日の感想を[[聞いて|https://github.com/TiddlyWiki/TiddlyWiki5/discussions/7983]]お祝いしました。興味深く思慮深い回答がいくつか寄せられました。たとえば、[[@FND|https://github.com/FND]]からの回答は次の通りです: + +> TiddlyWikiは、私のキャリアだけでなく、価値観にも計り知れないほどの永続的な影響を与えました。今日に至るまで、私はTiddlyWikiから学んだ[[基本的なコンセプト|https://prepitaph.org/articles/creative-privacy/]] - その多くは、他では忘れられたり無視されたりしています - を頻繁に参照しています。このバックグラウンドがあることで、技術的な複雑さを崇拝したり、テクノロジーの世界に人間が存在することを思い出したりする場合でも、この業界で仕事をする上で自分の方向性を保つことができます。 + +> TiddlyWikiとは、人々のことです。このコミュニティや、Jeremyがその周りに築いたグループと交流し、そこから学ぶことができたのは、私にとって計り知れない特権でした。また、この特権がまったくの偶然によって私に与えられたものだということを思い出すのにも役立ちます。この恩返しをしていきたいと思います。 + +~TiddlyWikiを特集した最近のポッドキャスト: + +* 2016年のチェンジログ ポッドキャスト - https://changelog.com/podcast/196 ~TiddlyWikiの背景について議論しています +* 2021年のFloss Weeklyの録画 - https://twit.tv/shows/floss-weekly/episodes/620 + +! ~TiddlyWikiの10周年 + +2014年9月20日に行われた、TiddlyWikiの10周年を祝うライブストリームはここで視聴できます: + +https://www.youtube.com/watch?v=f_02ZV0J9NY + diff --git a/editions/ja-JP/tiddlers/community/Community.tid b/editions/ja-JP/tiddlers/community/Community.tid index d9f3276053..240c23e63b 100644 --- a/editions/ja-JP/tiddlers/community/Community.tid +++ b/editions/ja-JP/tiddlers/community/Community.tid @@ -1,13 +1,11 @@ created: 20130909151600000 -modified: 20241002113817654 -original-modified: 20210322152237662 +modified: 20251210110939585 +original-modified: 20250909171928024 tags: TableOfContents Welcome title: Community ja-title: コミュニティ type: text/vnd.tiddlywiki -<<.tip "最新の有益なリンクが[[コミュニティリンク収集|Community Links Aggregator]]に集められています。">> +TiddlyWikiコミュニティは、TiddlyWikiをより良くするために協力し、お互いにベストを尽せるよう支援する熱心なユーザーと開発者のグループです。 -すべての関連リンクがこれらのエントリに書かれると、メインのtiddlywiki.comサイトからは削除されます。 - -<> +<> diff --git a/editions/ja-JP/tiddlers/community/TiddlyWiki on the Web.tid b/editions/ja-JP/tiddlers/community/TiddlyWiki on the Web.tid index 3c041b5459..cedd674e8c 100644 --- a/editions/ja-JP/tiddlers/community/TiddlyWiki on the Web.tid +++ b/editions/ja-JP/tiddlers/community/TiddlyWiki on the Web.tid @@ -1,9 +1,9 @@ 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]] -modified: 20241010114936568 -original-modified: 20241009150453139 +list: TalkTiddlyWiki [[TiddlyWiki on YouTube]] [[TiddlyWiki on Reddit]] [[TiddlyWiki on Discord]] [[TiddlyWiki on GitHub]] [[TiddlyWiki on Mastodon]] [[TiddlyWiki on Open Collective]] +modified: 20251210112417726 +original-modified: 20241115170824144 tags: Welcome title: TiddlyWiki on the Web ja-title: ウェブ上のTiddlyWiki diff --git a/editions/ja-JP/tiddlers/concepts/ExternalImages.tid b/editions/ja-JP/tiddlers/concepts/ExternalImages.tid index 2d564fe319..a2804e25ef 100644 --- a/editions/ja-JP/tiddlers/concepts/ExternalImages.tid +++ b/editions/ja-JP/tiddlers/concepts/ExternalImages.tid @@ -1,6 +1,6 @@ created: 20140610213500000 -modified: 20241209112247651 -original-modified: 20241030132047048 +modified: 20251212111127961 +original-modified: 20250217154855572 tags: Concepts Features title: ExternalImages ja-title: 外部画像 @@ -25,22 +25,28 @@ TiddlyWikiの外部画像は、画像データすべてを埋め込むのでは 参照される外部画像を含む''images''フォルダーを伴うWikiの静的HTMLファイルバージョンを作成するには、次の手順を使用します: # 通常の方法でTiddlyWikiFoldersに画像Tiddlerを作成します -# 画像を別ファイルとして保存します (慣例により、''images''という名前のサブフォルダに保存します) +# 画像を別ファイルとして保存します (慣例により、''/images''という名前のサブフォルダに保存します) # ''_canonical_uri''フィールドを追加して画像Tiddlerを外部化します # メインのHTMLファイルを保存します 画像ファイルは外部化する前に保存する必要があることに注意してください。外部化すると、Wikiストアのメモリ内コピーの''text''フィールドが破壊され、保存の試みが失敗します。 -たとえば、''tw5.com'' Wikiの''externalimages''ビルドターゲットを参照してください: +!! 外部画像の構成 + +たとえば、''tiddlywiki.info''ファイル内に、''externalimages''ビルドターゲットを作成します: ``` ---save [is[image]] images ---setfield [is[image]] _canonical_uri $:/core/templates/canonical-uri-external-image text/plain ---setfield [is[image]] text "" text/plain ---render $:/core/save/all externalimages.html text/plain +"build": { + "externalimages": [ + --save [is[image]] images + --setfield [is[image]] _canonical_uri $:/core/templates/canonical-uri-external-image text/plain + --setfield [is[image]] text "" text/plain + --render $:/core/save/all externalimages.html text/plain + ] +} ``` -!! 個別の画像ファイルを保存する +!! 画像Tiddlerの外部化 次の`--save`コマンド ([[Saveコマンド|SaveCommand]]を参照)を使用すると、Wikiの画像を''images''サブフォルダーに保存できます: @@ -48,8 +54,6 @@ TiddlyWikiの外部画像は、画像データすべてを埋め込むのでは --save [is[image]] images ``` -!! 画像Tiddlerの外部化 - 2つの`--setfield`コマンドが使用されています: 最初のコマンドは、''_canonical_uri''フィールドをTiddlerのタイトルから派生したURIに設定し、2番目のコマンドはtextフィールドをクリアします。 ``` @@ -67,6 +71,20 @@ TiddlyWikiの外部画像は、画像データすべてを埋め込むのでは これらの操作により、Wikiストア内のTiddlerが変更されるため、後続のコマンド操作に影響する可能性があることに注意してください。 +!! 外部画像をビルドするためのNode.jsコマンド + +次のコマンドは、`myWiki/output`フォルダー内に外部画像を作成します。 + +``` +tiddlywiki myWiki --build externalimages +``` + +Windowsでは、次のコマンドを実行すると、[[tw5.comエディション|https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/editions/tw5.com/tiddlywiki.info#L26]]の一部である外部画像が作成されます。ファイルは出力ディレクトリに作成されます。 + +``` +tiddlywiki .\editions\tw5.com --build index +``` + ! 外部画像の使用について URIフィールドを別の画像を指すように変更しない限り、ブラウザで外部画像を直接編集することはできません。 diff --git a/editions/ja-JP/tiddlers/filters/syntax/Filter Step.tid b/editions/ja-JP/tiddlers/filters/syntax/Filter Step.tid index 0c81c7c250..33783f7421 100644 --- a/editions/ja-JP/tiddlers/filters/syntax/Filter Step.tid +++ b/editions/ja-JP/tiddlers/filters/syntax/Filter Step.tid @@ -1,6 +1,6 @@ created: 20150124182127000 -modified: 20250222110925130 -original-modified: 20230710074414361 +modified: 20251213102731461 +original-modified: 20250731101041336 tags: [[Filter Run]] title: Filter Step ja-title: フィルタステップ @@ -13,10 +13,10 @@ type: text/vnd.tiddlywiki <$railroad text=""" \start none \end none -[:"!"] +["!"] ( / "省略の場合のデフォルト: title" /|: -( - | :[[<"オペレータ">|"Filter Operators"]] ) -{ [:":" [[<"サフィックス">|"Filter Operators"]] ] } ) +( :[[<"オペレータ">|"Filter Operators"]] ) +[ {":" [: [[<"サフィックス">|"Filter Operators"]] ] }] ) { [[<"パラメータ">|"Filter Parameter"]] + "," } """/> diff --git a/editions/ja-JP/tiddlers/hellothere/Find Out More.tid b/editions/ja-JP/tiddlers/hellothere/Find Out More.tid index cad6f9c7a1..35feac1a79 100644 --- a/editions/ja-JP/tiddlers/hellothere/Find Out More.tid +++ b/editions/ja-JP/tiddlers/hellothere/Find Out More.tid @@ -1,8 +1,8 @@ color: #880 created: 20241009150347613 icon: $:/core/images/help -modified: 20241010114029686 -original-modified: 20241009150430229 +modified: 20251213103718012 +original-modified: 20241115170824144 tags: Welcome title: Find Out More ja-title: さらに詳しく diff --git a/editions/ja-JP/tiddlers/hellothere/HelloThere.tid b/editions/ja-JP/tiddlers/hellothere/HelloThere.tid index 06dc279ea2..3cc1e832fb 100644 --- a/editions/ja-JP/tiddlers/hellothere/HelloThere.tid +++ b/editions/ja-JP/tiddlers/hellothere/HelloThere.tid @@ -1,19 +1,41 @@ created: 20130822170200000 icon: $:/core/icon list: [[A Gentle Guide to TiddlyWiki]] [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[What happened to the original TiddlyWiki?]] -modified: 20241010112232871 -original-modified: 20241009150333146 +modified: 20251213104120189 +original-modified: 20250807084952911 tags: Welcome title: HelloThere ja-title: こんにちは type: text/vnd.tiddlywiki -!!.tc-hero-heading ''TiddlyWikiへようこそ。 TiddlyWikiは複雑な情報を[[収集|Creating and editing tiddlers]]し、[[整理|Structuring TiddlyWiki]]し、[[共有|Sharing your tiddlers with others]]するためのユニークな[[非線形|Philosophy of Tiddlers]]ノートブックです。'' +

+メモを有効活用する +

+ +

+TiddlyWikiへようこそ。 TiddlyWikiは複雑な情報を[[収集|Creating and editing tiddlers]]し、[[整理|Structuring TiddlyWiki]]し、[[共有|Sharing your tiddlers with others]]するためのユニークな[[非線形|Philosophy of Tiddlers]]ノートブックです +

[[ToDo リスト|TaskManagementExample]]を管理したり、[[エッセイや小説|"TiddlyWiki for Scholars" by Alberto Molina]]を練ったり、結婚式を準備したりするために使えます。頭をよぎるすべての考えを記録し、柔軟で応答性の高いWebサイトを構築できます。 -* ~TiddlyWikiを使用すると、データの保存場所を選択でき、今日とったメモを今後数十年も[[使用できること|Future Proof]]が保証されます。 +* ~TiddlyWikiはデータとコードを単一のHTMLファイルに保存し、インストールや外部依存を必要とせず、Webブラウザのみで動作します -* ~TiddlyWikiは、新しい機能を追加する多くのプラグインにより、無限にカスタマイズ、拡張可能です。 +* ~TiddlyWikiを使用すると、データの保存場所を選択でき、今日とったメモを今後数十年も[[使用できること|Future Proof]]が保証されます -* ~TiddlyWikiは、大規模なユーザーコミュニティの一部である開発者集団の製品です。 +* ~TiddlyWikiは、新しい機能を追加する多くのプラグインにより、無限にカスタマイズ、拡張可能です + +* ~TiddlyWikiは、大規模なユーザーコミュニティの一部である開発者集団の製品です diff --git a/editions/ja-JP/tiddlers/hellothere/Testimonials and Reviews.tid b/editions/ja-JP/tiddlers/hellothere/Testimonials and Reviews.tid index fc55e2aedf..3648c80726 100644 --- a/editions/ja-JP/tiddlers/hellothere/Testimonials and Reviews.tid +++ b/editions/ja-JP/tiddlers/hellothere/Testimonials and Reviews.tid @@ -1,7 +1,7 @@ color: #088 icon: $:/core/images/star-filled -modified: 20241010114508408 -original-modified: 20241001141521924 +modified: 20251214104051278 +original-modified: 20241115170824144 tags: Welcome title: Testimonials and Reviews ja-title: 利用者の声とレビュー diff --git a/editions/ja-JP/tiddlers/hellothere/quickstart/Quick Start.tid b/editions/ja-JP/tiddlers/hellothere/quickstart/Quick Start.tid index ae962e452c..b1d3df15a3 100644 --- a/editions/ja-JP/tiddlers/hellothere/quickstart/Quick Start.tid +++ b/editions/ja-JP/tiddlers/hellothere/quickstart/Quick Start.tid @@ -2,8 +2,8 @@ color: #cc9 created: 20241009163451663 icon: $:/core/images/tip list: GettingStarted [[Getting Started Video]] [[Find Out More]] [[TiddlyWiki on the Web]] [[Testimonials and Reviews]] -modified: 20241010112536263 -original-modified: 20241009163521037 +modified: 20251214103541254 +original-modified: 20241115170824144 tags: Welcome title: Quick Start ja-title: クイックスタート diff --git a/editions/ja-JP/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid b/editions/ja-JP/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid index ad4cc7e289..d79717ff8a 100644 --- a/editions/ja-JP/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid +++ b/editions/ja-JP/tiddlers/hiddensettings/Hidden Setting Default Tiddler Colour.tid @@ -1,9 +1,9 @@ created: 20240907042443909 -modified: 20241116104031988 -original-modified: 20240907042629405 +modified: 20251214104453831 +original-modified: 20241120225606237 tags: [[Hidden Settings]] title: Hidden Setting: Default Tiddler Colour ja-title: 隠し設定: TIddlerのデフォルト色 type: text/vnd.tiddlywiki -デフォルトのTiddler色は、$:/config/DefaultTiddlerColourというTiddlerを作成し、CSSの色の値を含むことによって指定できます。 +デフォルトのtag-tiddler色は、$:/config/DefaultTiddlerColourというTiddlerを作成し、CSSの色の値を含むことによって指定できます。詳細については、[[Tiddlerカラーカスケード|Tiddler Colour Cascade]]を参照してください diff --git a/editions/ja-JP/tiddlers/hiddensettings/Hidden Setting_ Default Tiddler Icon.tid b/editions/ja-JP/tiddlers/hiddensettings/Hidden Setting Default Tiddler Icon.tid similarity index 100% rename from editions/ja-JP/tiddlers/hiddensettings/Hidden Setting_ Default Tiddler Icon.tid rename to editions/ja-JP/tiddlers/hiddensettings/Hidden Setting Default Tiddler Icon.tid diff --git a/editions/ja-JP/tiddlers/howtos/Custom Styles FAQ.tid b/editions/ja-JP/tiddlers/howtos/Custom_Styles_FAQ.tid similarity index 100% rename from editions/ja-JP/tiddlers/howtos/Custom Styles FAQ.tid rename to editions/ja-JP/tiddlers/howtos/Custom_Styles_FAQ.tid diff --git a/editions/ja-JP/tiddlers/howtos/How to hide the author's and other fields with CSS.tid b/editions/ja-JP/tiddlers/howtos/How to hide the authors and other fields with CSS.tid similarity index 100% rename from editions/ja-JP/tiddlers/howtos/How to hide the author's and other fields with CSS.tid rename to editions/ja-JP/tiddlers/howtos/How to hide the authors and other fields with CSS.tid diff --git a/editions/ja-JP/tiddlers/howtos/How to widen tiddlers (aka storyriver).tid b/editions/ja-JP/tiddlers/howtos/How to widen tiddlers (aka story river).tid similarity index 100% rename from editions/ja-JP/tiddlers/howtos/How to widen tiddlers (aka storyriver).tid rename to editions/ja-JP/tiddlers/howtos/How to widen tiddlers (aka story river).tid diff --git a/editions/ja-JP/tiddlers/plugins/Share Plugin.tid b/editions/ja-JP/tiddlers/plugins/Share Plugin.tid index adff94d41d..38a26e193a 100644 --- a/editions/ja-JP/tiddlers/plugins/Share Plugin.tid +++ b/editions/ja-JP/tiddlers/plugins/Share Plugin.tid @@ -1,7 +1,7 @@ created: 20201228143125000 -modified: 20241222103744408 -original-modified: 20201228143125000 -tags: OfficialPlugins +modified: 20251214105341696 +original-modified: 20250302051857380 +tags: OfficialPlugins [[Plugin Editions]] title: Share Plugin ja-title: シェアプラグイン type: text/vnd.tiddlywiki @@ -11,4 +11,6 @@ type: text/vnd.tiddlywiki この実験的なプラグインは、URL経由でTiddlerを共有するためのツールを提供します。これには以下が含まれます: * 起動時にブラウザのロケーションハッシュからTiddlerのグループをロードする機能 -* TiddlerのグループからURLを作成するためのウィザードとテンプレート \ No newline at end of file +* TiddlerのグループからURLを作成するためのウィザードとテンプレート + +デモは[ext[https://tiddlywiki.com/share|share]]を参照してください \ No newline at end of file diff --git a/editions/ja-JP/tiddlers/saving/Encryption.tid b/editions/ja-JP/tiddlers/saving/Encryption.tid index 6549bbe247..05b5585e47 100644 --- a/editions/ja-JP/tiddlers/saving/Encryption.tid +++ b/editions/ja-JP/tiddlers/saving/Encryption.tid @@ -1,12 +1,12 @@ created: 20130825160900000 -modified: 20241110103519303 -original-modified: 20160610083350724 +modified: 20251214105948181 +original-modified: 20241106165307259 tags: Features [[Working with TiddlyWiki]] title: Encryption ja-title: 暗号化 type: text/vnd.tiddlywiki -TiddlyWiki5を単一のHTMLファイルとして使用すると、[[Stanford JavaScript Crypto Library]]を使用してコンテンツを暗号化できます。 +TiddlyWiki5を単一のHTMLファイルとして使用すると、[[Stanford JavaScript Crypto Library]]を使用してCCMモードのAES 128ビット暗号化でコンテンツを暗号化できます。 # サイドバーの''ツール''タブに切り替えて、南京錠アイコンのボタンを探します # ボタンに<<.icon $:/core/images/unlocked-padlock>> ''パスワードの設定''と表示されている場合、現在のウィキは暗号化されていません。ボタンをクリックすると、以降の保存を暗号化するために使用されるパスワードの入力を求められます diff --git a/editions/ja-JP/tiddlers/saving/Saving via WebDAV.tid b/editions/ja-JP/tiddlers/saving/Saving via WebDAV.tid index 810270af91..d41a45ee75 100644 --- a/editions/ja-JP/tiddlers/saving/Saving via WebDAV.tid +++ b/editions/ja-JP/tiddlers/saving/Saving via WebDAV.tid @@ -4,7 +4,8 @@ created: 20160216191710789 delivery: Protocol description: SharePointなどの製品で利用できる標準Webプロトコル method: save -modified: 20220615155048712 +modified: 20251214110658333 +original-modified: 20220615155048712 tags: Android Chrome Firefox [[Internet Explorer]] Linux Mac Opera PHP Safari Saving Windows iOS Edge title: Saving via WebDAV ja-title: WebDAV経由の保存 diff --git a/editions/ja-JP/tiddlers/workingwithtw/Sharing your tiddlers with others.tid b/editions/ja-JP/tiddlers/workingwithtw/Sharing your tiddlers with others.tid index 863057ef6d..ef9c4be96c 100644 --- a/editions/ja-JP/tiddlers/workingwithtw/Sharing your tiddlers with others.tid +++ b/editions/ja-JP/tiddlers/workingwithtw/Sharing your tiddlers with others.tid @@ -1,6 +1,6 @@ created: 20140908163900000 -modified: 20241016111248572 -original-modified: 20201228143412000 +modified: 20251214112408533 +original-modified: 20230803052125981 tags: Learning title: Sharing your tiddlers with others ja-title: Tiddlerを他の人と共有する @@ -12,7 +12,7 @@ type: text/vnd.tiddlywiki * ~TiddlyWikiをオンラインで公開し、リンクを取得して他の人に送信、または、伝言できます: ** ~TiddlyWikiファイル全体のWebアドレスへのリンク ** 特定のTiddlerへの[[パーマリンク|PermaLinks]](<<.icon $:/core/images/permalink-button>>) -** 現在開いているすべてのTiddlerの[[パーマビュー|PermaViews]](<<.icon $:/core/images/permaview-button>>)リンク +** 現在開いているすべてのTiddlerの[[パーマビュー|PermaLinks]](<<.icon $:/core/images/permaview-button>>)リンク * [[TiddlyWikiへのDropboxリンクを共有|Sharing a TiddlyWiki on Dropbox]]できます * テキスト、静的HTML、カンマ区切り値(つまり、スプレッドシート互換)などのさまざまな形式で[[Tiddlerをエクスポート|How to export tiddlers]](<<.icon $:/core/images/export-button>>)できます * また、~TiddlyWikiを他の人がアクセスできるようにするだけで、例えば、オンラインで公開して、そこから[[Tiddlerをインポート|Importing Tiddlers]]できるようにするだけで、Tiddlerを共有できます diff --git a/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerFirst.tid b/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerFirst.tid index 6e5b349734..ba0245f471 100644 --- a/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerFirst.tid +++ b/editions/tw5.com/tiddlers/demonstrations/SampleTiddlerFirst.tid @@ -1,6 +1,7 @@ created: 20211117003509226 -modified: 20211117003657902 +modified: 20251119135921343 tags: sampletag1 sampletag2 [[Widget Examples]] title: SampleTiddlerFirst +type: text/vnd.tiddlywiki -This is a test tiddler called SampleTiddlerFirst. \ No newline at end of file +This is a test tiddler called SampleTidlerFirst. \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/releasenotes/5.4.0/#8130 - root-stylesheet-refresh.tid b/editions/tw5.com/tiddlers/releasenotes/5.4.0/#8130 - root-stylesheet-refresh.tid new file mode 100644 index 0000000000..f1ee3073e3 --- /dev/null +++ b/editions/tw5.com/tiddlers/releasenotes/5.4.0/#8130 - root-stylesheet-refresh.tid @@ -0,0 +1,17 @@ +title: $:/changenotes/5.4.0/#8130 +created: 20251212171804335 +modified: 20251212171804335 +tags: $:/tags/ChangeNote +change-type: performance +change-category: internal +description: Different Stylesheets are now included as single `