18 changes: 15 additions & 3 deletions core/modules/widgets/button.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ ButtonWidget.prototype.render = function(parent,nextSibling) {
domNode.addEventListener("click",function (event) {
var handled = false;
if(self.to) {
self.dispatchEvent({type: "tw-navigate", navigateTo: self.to, tiddlerTitle: self.getVariable("currentTiddler")});
self.navigateTo(event);
handled = true;
}
if(self.message) {
Expand Down Expand Up @@ -92,6 +92,19 @@ ButtonWidget.prototype.isPoppedUp = function() {
return result;
};

ButtonWidget.prototype.navigateTo = function(event) {
var bounds = this.domNodes[0].getBoundingClientRect();
this.dispatchEvent({
type: "tw-navigate",
navigateTo: this.to,
navigateFromTitle: this.getVariable("storyTiddler"),
navigateFromNode: this,
navigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height
},
navigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)
});
};

ButtonWidget.prototype.dispatchMessage = function(event) {
this.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable("currentTiddler")});
};
Expand All @@ -105,8 +118,7 @@ ButtonWidget.prototype.triggerPopup = function(event) {
};

ButtonWidget.prototype.setTiddler = function() {
var tiddler = this.wiki.getTiddler(this.set);
this.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.set, text: this.setTo}));
this.wiki.setTextReference(this.set,this.setTo,this.getVariable("currentTiddler"));
};

/*
Expand Down
1 change: 1 addition & 0 deletions core/modules/widgets/count.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
*/
CountWidget.prototype.refresh = function(changedTiddlers) {
// Re-execute the filter to get the count
this.computeAttributes();
var oldCount = this.currentCount;
this.execute();
if(this.currentCount !== oldCount) {
Expand Down
5 changes: 5 additions & 0 deletions core/modules/widgets/dropzone.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,11 @@ DropZoneWidget.prototype.importDataTypes = [
};
}
}},
{type: "text/html", IECompatible: false, convertToFields: function(data) {
return {
text: data
};
}},
{type: "text/plain", IECompatible: false, convertToFields: function(data) {
return {
text: data
Expand Down
11 changes: 8 additions & 3 deletions core/modules/widgets/element.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,13 @@ ElementWidget.prototype.render = function(parent,nextSibling) {
this.parentDomNode = parent;
this.computeAttributes();
this.execute();
var domNode = this.document.createElementNS(this.namespace,this.parseTreeNode.tag);
this.assignAttributes(domNode);
// Neuter blacklisted elements
var tag = this.parseTreeNode.tag;
if($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {
tag = "safe-" + tag;
}
var domNode = this.document.createElementNS(this.namespace,tag);
this.assignAttributes(domNode,{excludeEventAttributes: true});
parent.insertBefore(domNode,nextSibling);
this.renderChildren(domNode,null);
this.domNodes.push(domNode);
Expand Down Expand Up @@ -65,7 +70,7 @@ ElementWidget.prototype.refresh = function(changedTiddlers) {
hasChangedAttributes = $tw.utils.count(changedAttributes) > 0;
if(hasChangedAttributes) {
// Update our attributes
this.assignAttributes(this.domNodes[0]);
this.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});
}
return this.refreshChildren(changedTiddlers) || hasChangedAttributes;
};
Expand Down
27 changes: 20 additions & 7 deletions core/modules/widgets/fieldmangler.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,20 @@ FieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {
};

FieldManglerWidget.prototype.handleAddFieldEvent = function(event) {
var tiddler = this.wiki.getTiddler(this.mangleTitle);
var tiddler = this.wiki.getTiddler(this.mangleTitle),
fieldValidatorRegEx = /^[a-z\-\._]+$/mg;
if(tiddler && typeof event.param === "string") {
var name = event.param.toLowerCase();
var name = event.param.toLowerCase().trim();
if(name !== "" && !$tw.utils.hop(tiddler.fields,name)) {
if(!fieldValidatorRegEx.test(name)) {
alert($tw.language.getString(
"InvalidFieldName",
{variables:
{fieldName: name}
}
));
return true;
}
var addition = this.wiki.getModificationFields();
addition[name] = "";
this.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));
Expand Down Expand Up @@ -102,11 +112,14 @@ FieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {

FieldManglerWidget.prototype.handleAddTagEvent = function(event) {
var tiddler = this.wiki.getTiddler(this.mangleTitle);
if(tiddler && typeof event.param === "string" && event.param !== "") {
var modification = this.wiki.getModificationFields();
modification.tags = (tiddler.fields.tags || []).slice(0);
$tw.utils.pushTop(modification.tags,event.param);
this.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));
if(tiddler && typeof event.param === "string") {
var tag = event.param.trim();
if(tag !== "") {
var modification = this.wiki.getModificationFields();
modification.tags = (tiddler.fields.tags || []).slice(0);
$tw.utils.pushTop(modification.tags,tag);
this.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));
}
}
return true;
};
Expand Down
28 changes: 22 additions & 6 deletions core/modules/widgets/link.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,23 +56,37 @@ LinkWidget.prototype.renderLink = function(parent,nextSibling) {
// Create our element
var domNode = this.document.createElement("a");
// Assign classes
$tw.utils.addClass(domNode,"tw-tiddlylink");
var classes = ["tw-tiddlylink"];
if(this.isShadow) {
$tw.utils.addClass(domNode,"tw-tiddlylink-shadow");
classes.push("tw-tiddlylink-shadow");
}
if(this.isMissing && !this.isShadow) {
$tw.utils.addClass(domNode,"tw-tiddlylink-missing");
classes.push("tw-tiddlylink-missing");
} else {
if(!this.isMissing) {
$tw.utils.addClass(domNode,"tw-tiddlylink-resolves");
classes.push("tw-tiddlylink-resolves");
}
}
domNode.setAttribute("class",classes.join(" "));
// Set an href
var wikiLinkTemplateMacro = this.getVariable("tw-wikilink-template"),
wikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : "#$uri_encoded$",
wikiLinkText = wikiLinkTemplate.replace("$uri_encoded$",encodeURIComponent(this.to));
wikiLinkText = wikiLinkText.replace("$uri_doubleencoded$",encodeURIComponent(encodeURIComponent(this.to)));
domNode.setAttribute("href",wikiLinkText);
// Set the tooltip
// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to "<$transclude field='tooltip'><$transclude field='title'/></$transclude>"
var tooltipWikiText = this.tooltip || this.getVariable("tw-wikilink-tooltip");
if(tooltipWikiText) {
var tooltipText = this.wiki.renderText("text/plain","text/vnd.tiddlywiki",tooltipWikiText,{
parseAsInline: true,
variables: {
currentTiddler: this.to
},
parentWidget: this
});
domNode.setAttribute("title",tooltipText);
}
// Add a click event handler
$tw.utils.addEventListeners(domNode,[
{name: "click", handlerObject: this, handlerMethod: "handleClickEvent"},
Expand All @@ -95,7 +109,7 @@ LinkWidget.prototype.handleClickEvent = function (event) {
navigateFromNode: this,
navigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height
},
navigateSuppressNavigation: event.metaKey || event.ctrlKey
navigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)
});
event.preventDefault();
event.stopPropagation();
Expand Down Expand Up @@ -162,6 +176,8 @@ Compute the internal state of the widget
LinkWidget.prototype.execute = function() {
// Get the target tiddler title
this.to = this.getAttribute("to",this.getVariable("currentTiddler"));
// Get the link title
this.tooltip = this.getAttribute("tooltip");
// Determine the link characteristics
this.isMissing = !this.wiki.tiddlerExists(this.to);
this.isShadow = this.wiki.isShadowTiddler(this.to);
Expand All @@ -174,7 +190,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
*/
LinkWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
if(changedAttributes.to || changedTiddlers[this.to]) {
if(changedAttributes.to || changedTiddlers[this.to] || changedAttributes.tooltip) {
this.refreshSelf();
return true;
}
Expand Down
7 changes: 4 additions & 3 deletions core/modules/widgets/linkcatcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,11 @@ LinkCatcherWidget.prototype.handleNavigateEvent = function(event) {
if(this.catchTo) {
this.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable("currentTiddler"));
}
if(this.catchMessage) {
this.dispatchEvent({
if(this.catchMessage && this.parentWidget) {
this.parentWidget.dispatchEvent({
type: this.catchMessage,
param: event.navigateTo
param: event.navigateTo,
navigateTo: event.navigateTo
});
}
if(this.catchSet) {
Expand Down
6 changes: 5 additions & 1 deletion core/modules/widgets/list.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,11 @@ ListWidget.prototype.render = function(parent,nextSibling) {
this.renderChildren(parent,nextSibling);
// Construct the storyview
var StoryView = this.storyViews[this.storyViewName];
this.storyview = StoryView ? new StoryView(this) : null;
if(StoryView && !this.document.isTiddlyWikiFakeDom) {
this.storyview = new StoryView(this)
} else {
this.storyview = null;
}
};

/*
Expand Down
57 changes: 44 additions & 13 deletions core/modules/widgets/navigator.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ var NavigatorWidget = function(parseTreeNode,options) {
{type: "tw-close-all-tiddlers", handler: "handleCloseAllTiddlersEvent"},
{type: "tw-close-other-tiddlers", handler: "handleCloseOtherTiddlersEvent"},
{type: "tw-new-tiddler", handler: "handleNewTiddlerEvent"},
{type: "tw-import-tiddlers", handler: "handleImportTiddlersEvent"},
{type: "tw-import-tiddlers", handler: "handleImportTiddlersEvent"}
]);
};

Expand Down Expand Up @@ -198,15 +198,29 @@ NavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {
// Get the tiddler we're deleting
var title = event.param || event.tiddlerTitle,
tiddler = this.wiki.getTiddler(title),
storyList = this.getStoryList();
storyList = this.getStoryList(),
originalTitle, confirmationTitle;
// Check if the tiddler we're deleting is in draft mode
if(tiddler.hasField("draft.title")) {
// Delete the original tiddler
var originalTitle = tiddler.fields["draft.of"];
// Ask for confirmation if the tiddler has changed
if(!confirm("Do you wish to delete the tiddler '" + originalTitle + "'")) {
return false;
}
// If so, we'll prompt for confirmation referencing the original tiddler
originalTitle = tiddler.fields["draft.of"];
confirmationTitle = originalTitle;
} else {
// If not a draft, then prompt for confirmation referencing the specified tiddler
originalTitle = null;
confirmationTitle = title;
}
// Seek confirmation
if(!confirm($tw.language.getString(
"ConfirmDeleteTiddler",
{variables:
{title: confirmationTitle}
}
))) {
return false;
}
// Delete the original tiddler
if(originalTitle) {
this.wiki.deleteTiddler(originalTitle);
this.removeTitleFromStory(storyList,originalTitle);
}
Expand Down Expand Up @@ -277,7 +291,12 @@ NavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {
var isRename = draftOf !== draftTitle,
isConfirmed = true;
if(isRename && this.wiki.tiddlerExists(draftTitle)) {
isConfirmed = confirm("Do you wish to overwrite the tiddler '" + draftTitle + "'?");
isConfirmed = confirm($tw.language.getString(
"ConfirmOverwriteTiddler",
{variables:
{title: draftTitle}
}
));
}
if(isConfirmed) {
// Save the draft tiddler as the real tiddler
Expand Down Expand Up @@ -314,11 +333,23 @@ NavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {
originalTitle = draftTiddler.fields["draft.of"],
storyList = this.getStoryList();
if(draftTiddler && originalTitle) {
// Ask for confirmation if the tiddler text has changed
var isConfirmed = true;
if(this.wiki.getTiddlerText(draftTitle) !== this.wiki.getTiddlerText(originalTitle)) {
isConfirmed = confirm($tw.language.getString(
"ConfirmCancelTiddler",
{variables:
{title: draftTitle}
}
));
}
// Remove the draft tiddler
this.wiki.deleteTiddler(draftTitle);
this.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);
this.addToHistory(originalTitle,event.navigateFromClientRect);
this.saveStoryList(storyList);
if(isConfirmed) {
this.wiki.deleteTiddler(draftTitle);
this.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);
this.addToHistory(originalTitle,event.navigateFromClientRect);
this.saveStoryList(storyList);
}
}
return false;
};
Expand Down
184 changes: 184 additions & 0 deletions core/modules/widgets/scrollable.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
/*\
title: $:/core/modules/widgets/scrollable.js
type: application/javascript
module-type: widget
Scrollable widget
\*/
(function(){

/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";

var Widget = require("$:/core/modules/widgets/widget.js").widget;

var ScrollableWidget = function(parseTreeNode,options) {
this.initialise(parseTreeNode,options);
this.scaleFactor = 1;
this.addEventListeners([
{type: "tw-scroll", handler: "handleScrollEvent"}
]);
if($tw.browser) {
this.requestAnimationFrame = window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function(callback) {
return window.setTimeout(callback, 1000/60);
};
this.cancelAnimationFrame = window.cancelAnimationFrame ||
window.webkitCancelAnimationFrame ||
window.webkitCancelRequestAnimationFrame ||
window.mozCancelAnimationFrame ||
window.mozCancelRequestAnimationFrame ||
function(id) {
window.clearTimeout(id);
};
}
};

/*
Inherit from the base widget class
*/
ScrollableWidget.prototype = new Widget();

ScrollableWidget.prototype.cancelScroll = function() {
if(this.idRequestFrame) {
this.cancelAnimationFrame.call(window,this.idRequestFrame);
this.idRequestFrame = null;
}
};

/*
Handle a scroll event
*/
ScrollableWidget.prototype.handleScrollEvent = function(event) {
// Pass the scroll event through if our offsetsize is larger than our scrollsize
if(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === "yes") {
return true;
}
this.scrollIntoView(event.target);
return false; // Handled event
};

/*
Scroll an element into view
*/
ScrollableWidget.prototype.scrollIntoView = function(element) {
var duration = $tw.utils.getAnimationDuration();
this.cancelScroll();
this.startTime = Date.now();
var scrollPosition = {
x: this.outerDomNode.scrollLeft,
y: this.outerDomNode.scrollTop
};
// Get the client bounds of the element and adjust by the scroll position
var scrollableBounds = this.outerDomNode.getBoundingClientRect(),
clientTargetBounds = element.getBoundingClientRect(),
bounds = {
left: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,
top: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,
width: clientTargetBounds.width,
height: clientTargetBounds.height
};
// We'll consider the horizontal and vertical scroll directions separately via this function
var getEndPos = function(targetPos,targetSize,currentPos,currentSize) {
// If the target is already visible then stay where we are
if(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {
return currentPos;
// If the target is above/left of the current view, then scroll to its top/left
} else if(targetPos <= currentPos) {
return targetPos;
// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window
} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {
return targetPos + targetSize - currentSize;
// If the target is big, then just scroll to the top
} else if(currentPos < targetPos) {
return targetPos;
// Otherwise, stay where we are
} else {
return currentPos;
}
},
endX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),
endY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);
// Only scroll if necessary
if(endX !== scrollPosition.x || endY !== scrollPosition.y) {
var self = this,
drawFrame;
drawFrame = function () {
var t;
if(duration <= 0) {
t = 1;
} else {
t = ((Date.now()) - self.startTime) / duration;
}
if(t >= 1) {
self.cancelScroll();
t = 1;
}
t = $tw.utils.slowInSlowOut(t);
self.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;
self.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;
if(t < 1) {
self.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);
}
};
drawFrame();
}
};

/*
Render this widget into the DOM
*/
ScrollableWidget.prototype.render = function(parent,nextSibling) {
var self = this;
// Remember parent
this.parentDomNode = parent;
// Compute attributes and execute state
this.computeAttributes();
this.execute();
// Create elements
this.outerDomNode = this.document.createElement("div");
$tw.utils.setStyle(this.outerDomNode,[
{overflowY: "auto"},
{overflowX: "auto"},
{webkitOverflowScrolling: "touch"}
]);
this.innerDomNode = this.document.createElement("div");
this.outerDomNode.appendChild(this.innerDomNode);
// Assign classes
this.outerDomNode.className = this["class"] || "";
// Insert element
parent.insertBefore(this.outerDomNode,nextSibling);
this.renderChildren(this.innerDomNode,null);
this.domNodes.push(this.outerDomNode);
};

/*
Compute the internal state of the widget
*/
ScrollableWidget.prototype.execute = function() {
// Get attributes
this.fallthrough = this.getAttribute("fallthrough","yes");
this["class"] = this.getAttribute("class");
// Make child widgets
this.makeChildWidgets();
};

/*
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
*/
ScrollableWidget.prototype.refresh = function(changedTiddlers) {
var changedAttributes = this.computeAttributes();
if(changedAttributes["class"]) {
this.refreshSelf();
return true;
}
return this.refreshChildren(changedTiddlers);
};

exports.scrollable = ScrollableWidget;

})();
29 changes: 29 additions & 0 deletions core/modules/widgets/storyviews.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*\
title: $:/core/modules/filters/storyviews.js
type: application/javascript
module-type: filteroperator
Filter operator for returning the names of the story views in this wiki
\*/
(function(){

/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";

/*
Export our filter function
*/
exports.storyviews = function(source,operator,options) {
var results = [],
storyviews = {};
$tw.modules.applyMethods("storyview",storyviews);
$tw.utils.each(storyviews,function(info,name) {
results.push(name);
});
results.sort();
return results;
};

})();
2 changes: 1 addition & 1 deletion core/modules/widgets/transclude.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ TranscludeWidget.prototype.execute = function() {
// Check for recursion
var recursionMarker = this.makeRecursionMarker();;
if(this.parentWidget && this.parentWidget.hasVariable("transclusion",recursionMarker)) {
this.makeChildWidgets([{type: "text", text: "Tiddler recursion error in transclude widget"}]);
this.makeChildWidgets([{type: "text", text: "Recursive transclusion error in transclude widget"}]);
return;
}
// Set context variables for recursion detection
Expand Down
9 changes: 8 additions & 1 deletion core/modules/widgets/widget.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,10 +252,17 @@ Widget.prototype.getAttribute = function(name,defaultText) {

/*
Assign the computed attributes of the widget to a domNode
options include:
excludeEventAttributes: ignores attributes whose name begins with "on"
*/
Widget.prototype.assignAttributes = function(domNode) {
Widget.prototype.assignAttributes = function(domNode,options) {
options = options || {};
var self = this;
$tw.utils.each(this.attributes,function(v,a) {
// Check exclusions
if(options.excludeEventAttributes && a.substr(0,2) === "on") {
v = undefined;
}
if(v !== undefined) {
// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)
try {
Expand Down
237 changes: 113 additions & 124 deletions core/modules/wiki.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions core/palettes/Blanca.tid
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ page-background: #ffffff
pre-background: #f5f5f5
pre-border: #cccccc
primary: #7897f3
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #ccc
sidebar-foreground-shadow: rgba(255,255,255, 0.8)
Expand Down
1 change: 1 addition & 0 deletions core/palettes/Blue.tid
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ page-background: #ddddff
pre-background: #f5f5f5
pre-border: #cccccc
primary: #5778d8
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #ffffff
sidebar-foreground-shadow: rgba(255,255,255, 0.8)
Expand Down
1 change: 1 addition & 0 deletions core/palettes/Contrast.tid
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ page-background: #000000
pre-background: #f5f5f5
pre-border: #cccccc
primary: #5778d8
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #ffffff
sidebar-foreground-shadow: rgba(255,0,0, 0.5)
Expand Down
1 change: 1 addition & 0 deletions core/palettes/Rocker.tid
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ page-background: #000
pre-background: #f5f5f5
pre-border: #cccccc
primary: #cc0000
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #ffffff
sidebar-foreground-shadow: rgba(255,255,255, 0.0)
Expand Down
3 changes: 2 additions & 1 deletion core/palettes/Vanilla.tid
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,14 @@ modal-border: #999999
modal-footer-background: #f5f5f5
modal-footer-border: #dddddd
modal-header-border: #eeeeee
muted-foreground: #999999
muted-foreground: #bbb
notification-background: #ffffdd
notification-border: #999999
page-background: #ececec
pre-background: #f5f5f5
pre-border: #cccccc
primary: #5778d8
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: #000000
sidebar-controls-foreground: #ffffff
sidebar-foreground-shadow: rgba(255,255,255, 0.8)
Expand Down
2 changes: 1 addition & 1 deletion core/ui/AdvancedSearch.tid
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
title: $:/AdvancedSearch

<div class="tw-advanced-search">
<<tabs "[is[shadow]!has[draft.of]tag[$:/tags/AdvancedSearch]] [!is[shadow]!has[draft.of]tag[$:/tags/AdvancedSearch]] +[tag[$:/tags/AdvancedSearch]]" "$:/core/ui/AdvancedSearch/System">>
<<tabs "[all[tiddlers+shadows]tag[$:/tags/AdvancedSearch]!has[draft.of]]" "$:/core/ui/AdvancedSearch/System">>
</div>
20 changes: 10 additions & 10 deletions core/ui/AdvancedSearch/Filter.tid
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,22 @@ caption: {{$:/language/Search/Filter/Caption}}

<<lingo Filter/Hint>>

<div class="tw-search"><$edit-text tiddler="$:/temp/advancedsearch" type="search" tag="input"/><$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> <$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link></$reveal></div>
<div class="tw-search tw-advanced-search"><$edit-text tiddler="$:/temp/advancedsearch" type="search" tag="input"/> <$button popup=<<qualify "$:/state/filterDropdown">> class="btn-invisible">{{$:/core/images/down-arrow}}</$button> <$reveal state="$:/temp/advancedsearch" type="nomatch" text=""> <$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link></$reveal></div>

<div class="tw-block-dropdown-wrapper">
<$reveal state=<<qualify "$:/state/filterDropdown">> type="nomatch" text="" default="">
<div class="tw-block-dropdown tw-edit-type-dropdown">
<$list filter="[all[tiddlers+shadows]tag[$:/tags/Filter]]"><$link to={{!!filter}}><$transclude field="description"/></$link>
</$list>
</div>
</$reveal>
</div>

</$linkcatcher>

<$reveal state="$:/temp/advancedsearch" type="nomatch" text="">

<div class="tw-search-results">

<<lingo Advanced/Matches>>

<$list filter={{$:/temp/advancedsearch}} template="$:/core/ui/ListItemTemplate"/>

</div>

</$reveal>

<$reveal state="$:/temp/advancedsearch" type="match" text="">

</$reveal>
2 changes: 1 addition & 1 deletion core/ui/AdvancedSearch/Shadows.tid
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ caption: {{$:/language/Search/Shadows/Caption}}

<<lingo Advanced/Matches>>

<$list filter="[is[shadow]search{$:/temp/advancedsearch}sort[title]limit[250]]" template="$:/core/ui/ListItemTemplate"/>
<$list filter="[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]]" template="$:/core/ui/ListItemTemplate"/>

</div>

Expand Down
4 changes: 3 additions & 1 deletion core/ui/ControlPanel.tid
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
title: $:/ControlPanel

<div class="tw-control-panel"><<tabs "[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel]] +[tag[$:/tags/ControlPanel]]" "$:/core/ui/ControlPanel/Basics">></div>
<div class="tw-control-panel">
<<tabs "[all[tiddlers+shadows]tag[$:/tags/ControlPanel]!has[draft.of]]" "$:/core/ui/ControlPanel/Basics">>
</div>
4 changes: 3 additions & 1 deletion core/ui/ControlPanel/Advanced.tid
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ caption: {{$:/language/ControlPanel/Advanced/Caption}}

{{$:/language/ControlPanel/Advanced/Hint}}

<div class="tw-control-panel"><<tabs "[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Advanced]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Advanced]] +[tag[$:/tags/ControlPanel/Advanced]]" "$:/core/ui/ControlPanel/Advanced/TiddlerFields">></div>
<div class="tw-control-panel">
<<tabs "[all[tiddlers+shadows]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]" "$:/core/ui/ControlPanel/Advanced/TiddlerFields">>
</div>
4 changes: 3 additions & 1 deletion core/ui/ControlPanel/Appearance.tid
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ caption: {{$:/language/ControlPanel/Appearance/Caption}}

{{$:/language/ControlPanel/Appearance/Hint}}

<div class="tw-control-panel"><<tabs "[is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Appearance]] [!is[shadow]!has[draft.of]tag[$:/tags/ControlPanel/Appearance]] +[tag[$:/tags/ControlPanel/Appearance]]" "$:/core/ui/ControlPanel/Appearance/Theme">></div>
<div class="tw-control-panel">
<<tabs "[all[tiddlers+shadows]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]" "$:/core/ui/ControlPanel/Appearance/Theme">>
</div>
4 changes: 2 additions & 2 deletions core/ui/ControlPanel/Basics.tid
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ caption: {{$:/language/ControlPanel/Basics/Caption}}
|<<lingo Tiddlers/Prompt>> |''<$count filter="[!is[system]]"/>'' |
|<<lingo Tags/Prompt>> |''<$count filter="[tags[]]"/>'' |
|<<lingo SystemTiddlers/Prompt>> |''<$count filter="[is[system]]"/>'' |
|<<lingo ShadowTiddlers/Prompt>> |''<$count filter="[is[shadow]]"/>'' |
|<<lingo OverriddenShadowTiddlers/Prompt>> |''<$count filter="[!is[system]is[shadow]]"/>'' |
|<<lingo ShadowTiddlers/Prompt>> |''<$count filter="[all[shadows]]"/>'' |
|<<lingo OverriddenShadowTiddlers/Prompt>> |''<$count filter="[is[tiddler]is[shadow]]"/>'' |
38 changes: 37 additions & 1 deletion core/ui/ControlPanel/Plugins.tid
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,42 @@ tags: $:/tags/ControlPanel
caption: {{$:/language/ControlPanel/Plugins/Caption}}

\define lingo-base() $:/language/ControlPanel/Plugins/
<table><tbody><tr><th><<lingo Fields/Title>></th><th><<lingo Fields/Description>></th><th><<lingo Fields/Version>></th></tr><$list filter="[!has[draft.of]has[plugin-type]sort[title]]"><tr><td><$link to={{!!title}}><$view field="title"/></$link></td><td><$view field="description"/></td><td><$view field="version"/></td></tr></$list>
\define plugin-table(type)
<table>
<tbody>
<tr>
<th>
<<lingo Fields/Description>>
</th>
<th>
<<lingo Fields/Version>>
</th>
</tr>
<$list filter="[!has[draft.of]plugin-type[$type$]sort[description]]">
<tr>
<td>
<$link to={{!!title}}>
''<$view field="description"><$view field="title"/></$view>''<br>
<$view field="title"/>
</$link>
</td>
<td>
<$view field="version"/>
</td>
</tr>
</$list>
</tbody>
</table>
\end

! <<lingo Plugin/Prompt>>

<<plugin-table plugin>>

! <<lingo Theme/Prompt>>

<<plugin-table theme>>

! <<lingo Language/Prompt>>

<<plugin-table language>>
2 changes: 1 addition & 1 deletion core/ui/EditTemplate.tid
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ tw-tiddler-frame tw-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerCl
<div class=<<frame-classes>>>
<$set name="storyTiddler" value=<<currentTiddler>>>
<$keyboard key="ctrl+enter" message="tw-save-tiddler">
<$list filter="[is[shadow]!has[draft.of]tag[$:/tags/EditTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/EditTemplate]] +[tag[$:/tags/EditTemplate]]" variable="listItem">
<$list filter="[all[tiddlers+shadows]tag[$:/tags/EditTemplate]!has[draft.of]]" variable="listItem">
<$transclude tiddler=<<listItem>>/>
</$list>
</$keyboard>
Expand Down
2 changes: 1 addition & 1 deletion core/ui/EditTemplate/controls.tid
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
title: $:/core/ui/EditTemplate/controls
tags: $:/tags/EditTemplate

<span class="tw-tiddler-controls titlebar"> <$list filter="[is[shadow]!has[draft.of]tag[$:/tags/EditToolbar]] [!is[shadow]!has[draft.of]tag[$:/tags/EditToolbar]] +[tag[$:/tags/EditToolbar]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list> </span>
<span class="tw-tiddler-controls titlebar"> <$list filter="[all[tiddlers+shadows]tag[$:/tags/EditToolbar]!has[draft.of]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list> </span>
28 changes: 25 additions & 3 deletions core/ui/EditTemplate/fields.tid
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,36 @@ title: $:/core/ui/EditTemplate/fields
tags: $:/tags/EditTemplate

\define lingo-base() $:/language/EditTemplate/
<$fieldmangler><div class="tw-edit-fields">
<table class="tw-edit-fields"><tbody><$list filter="[is[current]fields[]] -title -tags -text -creator -created -modified -modifier -type -[[draft.title]] -[[draft.of]]" variable="currentField"><tr class="tw-edit-field"><td class="tw-edit-field-name"><<currentField>>:</td><td class="tw-edit-field-value"><$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/></td><td class="tw-edit-field-remove"><$button message="tw-remove-field" param=<<currentField>> class="btn-invisible">{{$:/core/images/delete-button}}</$button></td>
<$fieldmangler>
<div class="tw-edit-fields">
<table class="tw-edit-fields">
<tbody>
<$list filter="[all[current]fields[]] -title -tags -text -creator -created -modified -modifier -type -[[draft.title]] -[[draft.of]] +[sort[title]]" variable="currentField">
<tr class="tw-edit-field">
<td class="tw-edit-field-name">
<$text text=<<currentField>>/>:</td>
<td class="tw-edit-field-value">
<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/>
</td>
<td class="tw-edit-field-remove">
<$button message="tw-remove-field" param=<<currentField>> class="btn-invisible">{{$:/core/images/delete-button}}</$button>
</td>
</tr>
</$list>
</tbody>
</table>
</div>

<div class="tw-edit-field-add"><em class="tw-edit"><<lingo Fields/Add/Prompt>></em> <span class="tw-edit-field-add-name"><$edit-text tiddler="$:/temp/NewFieldName" tag="input" default="" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} class="tw-edit-texteditor"/></span> <span class="tw-edit-field-add-button"><$button message="tw-add-field" param={{$:/temp/NewFieldName}} set="$:/temp/NewFieldName" setTo="" class=""><<lingo Fields/Add/Button>></$button></span></div>
<div class="tw-edit-field-add">
<em class="tw-edit">
<<lingo Fields/Add/Prompt>>
</em> <span class="tw-edit-field-add-name">
<$edit-text tiddler="$:/temp/NewFieldName" tag="input" default="" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} class="tw-edit-texteditor"/>
</span> <span class="tw-edit-field-add-button">
<$button message="tw-add-field" param={{$:/temp/NewFieldName}} set="$:/temp/NewFieldName" setTo="" class="">
<<lingo Fields/Add/Button>>
</$button>
</span>
</div>

</$fieldmangler>
25 changes: 22 additions & 3 deletions core/ui/EditTemplate/tags.tid
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,23 @@ tags: $:/tags/EditTemplate
\define tag-styles()
background-color:$(backgroundColor)$;
\end
<div class="tw-edit-tags"><$fieldmangler><$list filter="[is[current]tags[]sort[title]]" storyview="pop"><$set name="backgroundColor" value={{!!color}}><span style=<<tag-styles>> class="tw-tag-label"><$view field="title" format="text" /><$button message="tw-remove-tag" param={{!!title}} class="btn-invisible tw-remove-tag-button">&times;</$button></span></$set>
<div class="tw-edit-tags">
<$fieldmangler>
<$list filter="[all[current]tags[]sort[title]]" storyview="pop"><$set name="backgroundColor" value={{!!color}}><span style=<<tag-styles>> class="tw-tag-label">
<$view field="title" format="text" />
<$button message="tw-remove-tag" param={{!!title}} class="btn-invisible tw-remove-tag-button">&times;</$button></span>
</$set>
</$list>

<div class="tw-edit-add-tag"><span class="tw-add-tag-name"><$edit-text tiddler="$:/temp/NewTagName" tag="input" default="" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify "$:/state/tagsAutoComplete">> class="tw-edit-texteditor"/></span> <$button popup=<<qualify "$:/state/tagsAutoComplete">> class="btn-invisible btn-dropdown">{{$:/core/images/down-arrow}}</$button> <span class="tw-add-tag-button"><$button message="tw-add-tag" param={{$:/temp/NewTagName}} set="$:/temp/NewTagName" setTo="" class=""><<lingo Tags/Add/Button>></$button></span></div>
<div class="tw-edit-add-tag">
<span class="tw-add-tag-name">
<$edit-text tiddler="$:/temp/NewTagName" tag="input" default="" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify "$:/state/tagsAutoComplete">> class="tw-edit-texteditor"/>
</span> <$button popup=<<qualify "$:/state/tagsAutoComplete">> class="btn-invisible btn-dropdown">{{$:/core/images/down-arrow}}</$button> <span class="tw-add-tag-button">
<$button message="tw-add-tag" param={{$:/temp/NewTagName}} set="$:/temp/NewTagName" setTo="" class="">
<<lingo Tags/Add/Button>>
</$button>
</span>
</div>

<div class="tw-block-dropdown-wrapper">

Expand All @@ -18,7 +31,13 @@ background-color:$(backgroundColor)$;

<$linkcatcher set="$:/temp/NewTagName" setTo="" message="tw-add-tag">
<$list filter="[!is[shadow]tags[]search{$:/temp/NewTagName}sort[title]]">
<$link><$set name="backgroundColor" value={{!!color}}><span style=<<tag-styles>> class="tw-tag-label"><$view field="title" format="text"/></span></$set></$link>
<$link>
<$set name="backgroundColor" value={{!!color}}>
<span style=<<tag-styles>> class="tw-tag-label">
<$view field="title" format="text"/>
</span>
</$set>
</$link>
</$list>
</$linkcatcher>

Expand Down
2 changes: 1 addition & 1 deletion core/ui/EditTemplate/type.tid
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ tags: $:/tags/EditTemplate
<$reveal state=<<qualify "$:/state/typeDropdown">> type="nomatch" text="" default="">
<div class="tw-block-dropdown tw-edit-type-dropdown">
<$linkcatcher to="!!type">
<$list filter="[is[shadow]prefix[$:/language/Docs/Types/]] [!is[shadow]prefix[$:/language/Docs/Types/]] +[sort[description]]"><$link to={{!!name}}><$view field="description"/> (<$view field="name"/>)</$link>
<$list filter="[all[tiddlers+shadows]prefix[$:/language/Docs/Types/]] +[sort[description]]"><$link to={{!!name}}><$view field="description"/> (<$view field="name"/>)</$link>
</$list>
</$linkcatcher>
</div>
Expand Down
5 changes: 5 additions & 0 deletions core/ui/Filters/AllTags.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/AllTags
tags: $:/tags/Filter
filter: [tags[]!is[system]sort[title]]
description: {{$:/language/Filters/AllTags}}

5 changes: 5 additions & 0 deletions core/ui/Filters/AllTiddlers.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/AllTiddlers
tags: $:/tags/Filter
filter: [!is[system]sort[title]]
description: {{$:/language/Filters/AllTiddlers}}

5 changes: 5 additions & 0 deletions core/ui/Filters/Drafts.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/Drafts
tags: $:/tags/Filter
filter: [has[draft.of]sort[title]]
description: {{$:/language/Filters/Drafts}}

5 changes: 5 additions & 0 deletions core/ui/Filters/Missing.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/Missing
tags: $:/tags/Filter
filter: [all[missing]sort[title]]
description: {{$:/language/Filters/Missing}}

5 changes: 5 additions & 0 deletions core/ui/Filters/Orphans.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/Orphans
tags: $:/tags/Filter
filter: [all[orphans]sort[title]]
description: {{$:/language/Filters/Orphans}}

5 changes: 5 additions & 0 deletions core/ui/Filters/OverriddenShadowTiddlers.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/OverriddenShadowTiddlers
tags: $:/tags/Filter
filter: [is[shadow]]
description: {{$:/language/Filters/OverriddenShadowTiddlers}}

5 changes: 5 additions & 0 deletions core/ui/Filters/RecentTiddlers.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/RecentTiddlers
tags: $:/tags/Filter
filter: [!is[system]has[modified]!sort[modified]]
description: {{$:/language/Filters/RecentTiddlers}}

5 changes: 5 additions & 0 deletions core/ui/Filters/ShadowTiddlers.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/ShadowTiddlers
tags: $:/tags/Filter
filter: [all[shadows]sort[title]]
description: {{$:/language/Filters/ShadowTiddlers}}

5 changes: 5 additions & 0 deletions core/ui/Filters/SystemTags.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/SystemTags
tags: $:/tags/Filter
filter: [all[tiddlers+shadows]tags[]is[system]sort[title]]
description: {{$:/language/Filters/SystemTags}}

5 changes: 5 additions & 0 deletions core/ui/Filters/SystemTiddlers.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: $:/core/Filters/SystemTiddlers
tags: $:/tags/Filter
filter: [is[system]sort[title]]
description: {{$:/language/Filters/SystemTiddlers}}

5 changes: 4 additions & 1 deletion core/ui/ListItemTemplate.tid
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
title: $:/core/ui/ListItemTemplate

<div class="tw-menu-list-item"><$link to={{!!title}}><$view field="title"/></$link>
<div class="tw-menu-list-item">
<$link to={{!!title}}>
<$view field="title"/>
</$link>
</div>
14 changes: 10 additions & 4 deletions core/ui/MissingTemplate.tid
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
title: $:/core/ui/MissingTemplate

<div class="tw-tiddler-missing"><$button popup=<<qualify "$:/state/missingpopup">> class="btn-invisible tw-missing-tiddler-label"><$view field="title" format="text" /></$button>
<$reveal state=<<qualify "$:/state/missingpopup">> type="popup" position="below" animate="yes"><div class="tw-drop-down">
<div class="tw-tiddler-missing">
<$button popup=<<qualify "$:/state/missingpopup">> class="btn-invisible tw-missing-tiddler-label">
<$view field="title" format="text" />
</$button>
<$reveal state=<<qualify "$:/state/missingpopup">> type="popup" position="below" animate="yes">
<div class="tw-drop-down">
<$transclude tiddler="$:/core/ui/ListItemTemplate"/>
<hr>
<$list filter="[is[current]backlinks[]sort[title]]" template="$:/core/ui/ListItemTemplate"/>
</div></$reveal></div>
<$list filter="[all[current]backlinks[]sort[title]]" template="$:/core/ui/ListItemTemplate"/>
</div>
</$reveal>
</div>
2 changes: 1 addition & 1 deletion core/ui/MoreSideBar/Missing.tid
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ title: $:/core/ui/MoreSideBar/Missing
tags: $:/tags/MoreSideBar
caption: {{$:/language/SideBar/Missing/Caption}}

<$list filter="[is[missing]sort[title]]" template="$:/core/ui/MissingTemplate"/>
<$list filter="[all[missing]sort[title]]" template="$:/core/ui/MissingTemplate"/>
2 changes: 1 addition & 1 deletion core/ui/MoreSideBar/Orphans.tid
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ title: $:/core/ui/MoreSideBar/Orphans
tags: $:/tags/MoreSideBar
caption: {{$:/language/SideBar/Orphans/Caption}}

<$list filter="[is[orphan]sort[title]]" template="$:/core/ui/ListItemTemplate"/>
<$list filter="[all[orphans]sort[title]]" template="$:/core/ui/ListItemTemplate"/>
2 changes: 1 addition & 1 deletion core/ui/MoreSideBar/Shadows.tid
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ title: $:/core/ui/MoreSideBar/Shadows
tags: $:/tags/MoreSideBar
caption: {{$:/language/SideBar/Shadows/Caption}}

<$list filter="[is[shadow]sort[title]]" template="$:/core/ui/ListItemTemplate"/>
<$list filter="[all[shadows]sort[title]]" template="$:/core/ui/ListItemTemplate"/>
4 changes: 2 additions & 2 deletions core/ui/MoreSideBar/Tags.tid
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ caption: {{$:/language/SideBar/Tags/Caption}}
\define lingo-base() $:/language/SideBar/Tags/
<$button to="$:/TagManager"><<lingo TagManager/Caption>></$button>

<$list filter="[tags[]sort[title]]">
<$list filter="[tags[]!is[system]sort[title]]">

<$transclude tiddler="$:/core/ui/TagTemplate"/> <small class="tw-menu-list-count"><$count filter="[is[current]tagging[]]"/></small>
<$transclude tiddler="$:/core/ui/TagTemplate"/> <small class="tw-menu-list-count"><$count filter="[all[current]tagging[]]"/></small>

</$list>

Expand Down
39 changes: 29 additions & 10 deletions core/ui/PageMacros.tid
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,31 @@ title: $:/core/ui/PageMacros
\define colour(name)
<$transclude tiddler={{$:/palette}} index="$name$"/>
\end

\define color(name)
<<colour $name$>>
\end

\define tabs(tabsList,default,state:"$:/state/tab")
<div class="tw-tab-buttons"><$list filter="$tabsList$" variable="currentTab"><$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tw-tab-selected"><$transclude tiddler=<<currentTab>> field="caption"><$macrocall $name="currentTab" $type="text/plain" $output="text/plain"/></$transclude> </$button>
</$list>
<div class="tw-tab-buttons">
<$list filter="$tabsList$" variable="currentTab">
<$button set=<<qualify "$state$">> setTo=<<currentTab>> default="$default$" selectedClass="tw-tab-selected">
<$transclude tiddler=<<currentTab>> field="caption">
<$macrocall $name="currentTab" $type="text/plain" $output="text/plain"/>
</$transclude>
</$button>
</$list>
</div>
<div class="tw-tab-divider"/>
<div class="tw-tab-content">

<$list filter="$tabsList$" variable="currentTab">
<$reveal type="match" state=<<qualify "$state$">> text=<<currentTab>> default="$default$">

<$transclude tiddler=<<currentTab>>/>

</$reveal>
</$list>
<$list filter="$tabsList$" variable="currentTab">
<$reveal type="match" state=<<qualify "$state$">> text=<<currentTab>> default="$default$">
<$transclude tiddler=<<currentTab>> mode="block"/>
</$reveal>
</$list>
</div>
\end

\define wikitext-example(src)
```
$src$
Expand All @@ -38,9 +44,22 @@ $src$
$$$

\end

\define wikitext-example-without-html(src)
```
$src$
```

Renders as:

$src$

\end

\define lingo-base()
$:/lingo/
\end

\define lingo(title)
{{$(lingo-base)$$title$}}
\end
Expand Down
16 changes: 8 additions & 8 deletions core/ui/PageStylesheet.tid
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,6 @@ title: $:/core/ui/PageStylesheet
\define color(name)
<<colour $name$>>
\end
\define border-radius(radius)
```
-webkit-border-radius: $radius$;
-moz-border-radius: $radius$;
border-radius: $radius$;
```
\end
\define box-shadow(shadow)
```
-webkit-box-shadow: $shadow$;
Expand Down Expand Up @@ -53,7 +46,14 @@ background-image: -ms-linear-gradient($gradient$);
\define datauri(title)
<$macrocall $name="makedatauri" type={{$title$!!type}} text={{$title$}}/>
\end
\define if-sidebar(text)
<$reveal state="$:/state/sidebar" type="match" text="yes" default="yes">$text$</$reveal>
\end
\define if-no-sidebar(text)
<$reveal state="$:/state/sidebar" type="nomatch" text="yes" default="yes">$text$</$reveal>
\end


<$list filter="[is[shadow]tag[$:/tags/stylesheet]] [!is[shadow]tag[$:/tags/stylesheet]]">
<$list filter="[all[tiddlers+shadows]tag[$:/tags/stylesheet]]">
<$transclude/>
</$list>
21 changes: 20 additions & 1 deletion core/ui/PageTemplate.tid
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
title: $:/core/ui/PageTemplate

\define containerClasses()
tw-page-container tw-page-view-$(themeTitle)$ tw-language-$(languageTitle)$
\end

<$set name="themeTitle" value={{$:/view}}>

<$set name="currentTiddler" value={{$:/language}}>

<$set name="languageTitle" value={{!!name}}>

<div class=<<containerClasses>>>

<$navigator story="$:/StoryList" history="$:/HistoryList">

<$dropzone>

<$list filter="[is[shadow]!has[draft.of]tag[$:/tags/PageTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/PageTemplate]] +[tag[$:/tags/PageTemplate]]" variable="listItem">
<$list filter="[all[tiddlers+shadows]tag[$:/tags/PageTemplate]!has[draft.of]]" variable="listItem">

<$transclude tiddler=<<listItem>>/>

Expand All @@ -14,3 +26,10 @@ title: $:/core/ui/PageTemplate

</$navigator>

</div>

</$set>

</$set>

</$set>
8 changes: 8 additions & 0 deletions core/ui/PageTemplate/alerts.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
title: $:/core/ui/PageTemplate/alerts
tags: $:/tags/PageTemplate

<div class="tw-alerts">

<$list filter="[all[tiddlers+shadows]tag[$:/tags/Alert]!has[draft.of]]" template="$:/core/ui/AlertTemplate" storyview="pop"/>

</div>
33 changes: 27 additions & 6 deletions core/ui/PageTemplate/sidebar.tid
Original file line number Diff line number Diff line change
@@ -1,17 +1,38 @@
title: $:/core/ui/PageTemplate/sidebar
tags: $:/tags/PageTemplate

<header class="sidebar-header">
<$scrollable fallthrough="no" class="tw-sidebar-scrollable">

<div class="titlebar">{{$:/SiteTitle}}</div>
<div class="tw-subtitle">{{$:/SiteSubtitle}}</div>
<div class="sidebar-header">

<$reveal state="$:/state/sidebar" type="match" text="yes" default="yes" retain="yes">

<div class="tw-site-title">

<$transclude tiddler="$:/SiteTitle" mode="inline"/>

</div>

<div class="tw-site-subtitle">

<$transclude tiddler="$:/SiteSubtitle" mode="inline"/>

</div>

<div class="tw-page-controls">

<$list filter="[is[shadow]!has[draft.of]tag[$:/tags/PageControls]] [!is[shadow]!has[draft.of]tag[$:/tags/PageControls]] +[tag[$:/tags/PageControls]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>
<$list filter="[all[tiddlers+shadows]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">

<$transclude tiddler=<<listItem>> mode="inline"/>

</$list>

</div>

{{$:/core/ui/SideBarLists}}
<$transclude tiddler="$:/core/ui/SideBarLists" mode="inline"/>

</$reveal>

</div>

</header>
</$scrollable>
9 changes: 0 additions & 9 deletions core/ui/PageTemplate/story.tid
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,6 @@ tags: $:/tags/PageTemplate

<section class="story-river">

<!-- Alerts -->
<div class="tw-alerts">

<$list filter="[is[shadow]!has[draft.of]tag[$:/tags/Alert]] [!is[shadow]!has[draft.of]tag[$:/tags/Alert]] +[sort[modified]]" template="$:/core/ui/AlertTemplate" storyview="pop"/>

</div>

<!-- The main story -->
<$list filter="[list[$:/StoryList]]" history="$:/HistoryList" template="$:/core/ui/ViewTemplate" editTemplate="$:/core/ui/EditTemplate" storyview={{$:/view}} />

<!-- End of story river -->
</section>
8 changes: 8 additions & 0 deletions core/ui/PageTemplate/topleftbar.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
title: $:/core/ui/PageTemplate/topleftbar
tags: $:/tags/PageTemplate

<span class="tw-topbar tw-topbar-left">

<$list filter="[all[tiddlers+shadows]tag[$:/tags/TopLeftBar]!has[draft.of]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>

</span>
8 changes: 8 additions & 0 deletions core/ui/PageTemplate/toprightbar.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
title: $:/core/ui/PageTemplate/toprightbar
tags: $:/tags/PageTemplate

<span class="tw-topbar tw-topbar-right">

<$list filter="[all[tiddlers+shadows]tag[$:/tags/TopRightBar]!has[draft.of]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>

</span>
2 changes: 1 addition & 1 deletion core/ui/SideBar/More.tid
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ tags: $:/tags/SideBar
caption: {{$:/language/SideBar/More/Caption}}

<div class="tw-more-sidebar">
<<tabs "[is[shadow]!has[draft.of]tag[$:/tags/MoreSideBar]] [!is[shadow]!has[draft.of]tag[$:/tags/MoreSideBar]] +[tag[$:/tags/MoreSideBar]]" "$:/core/ui/MoreSideBar/Tags" "$:/state/tab/moresidebar">>
<<tabs "[all[tiddlers+shadows]tag[$:/tags/MoreSideBar]!has[draft.of]]" "$:/core/ui/MoreSideBar/Tags" "$:/state/tab/moresidebar">>
</div>
39 changes: 19 additions & 20 deletions core/ui/SideBarLists.tid
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
title: $:/core/ui/SideBarLists

<div class="tw-sidebar-lists">

<div class="tw-search"><$edit-text tiddler="$:/temp/search" type="search" tag="input"/> <$reveal state="$:/temp/search" type="nomatch" text=""><$linkcatcher to="$:/temp/search"><$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link></$linkcatcher></$reveal><$reveal state="$:/temp/search" type="match" text=""> &nbsp;<$link to="$:/AdvancedSearch" class="btn-invisible">&hellip;</$link></$reveal></div>

<$reveal state="$:/temp/search" type="nomatch" text="">

<div class="tw-search-results">

{{$:/language/Search/Matches}}

<$list filter="[!is[system]search{$:/temp/search}sort[title]limit[250]]" template="$:/core/ui/ListItemTemplate"/>

</div>

</$reveal>

<$reveal state="$:/temp/search" type="match" text="">

<<tabs "[is[shadow]!has[draft.of]tag[$:/tags/SideBar]] [!is[shadow]!has[draft.of]tag[$:/tags/SideBar]] +[tag[$:/tags/SideBar]]" "$:/core/ui/SideBar/Open" "$:/state/tab/sidebar">>

</$reveal>
<div class="tw-search">
<$edit-text tiddler="$:/temp/search" type="search" tag="input"/>
<$reveal state="$:/temp/search" type="nomatch" text="">
<$linkcatcher to="$:/temp/search">
<$link to="" class="btn-invisible">{{$:/core/images/close-button}}</$link>
</$linkcatcher>
</$reveal>
<$reveal state="$:/temp/search" type="match" text="">&nbsp;<$link to="$:/AdvancedSearch" class="btn-invisible">&hellip;</$link>
</$reveal>
</div>
<$reveal state="$:/temp/search" type="nomatch" text="">
<div class="tw-search-results">
{{$:/language/Search/Matches}}
<$list filter="[!is[system]search{$:/temp/search}sort[title]limit[250]]" template="$:/core/ui/ListItemTemplate"/>
</div>
</$reveal>
<$reveal state="$:/temp/search" type="match" text="">
<<tabs "[all[tiddlers+shadows]tag[$:/tags/SideBar]!has[draft.of]]" "$:/core/ui/SideBar/Open" "$:/state/tab/sidebar">>
</$reveal>
</div>
29 changes: 24 additions & 5 deletions core/ui/TagManager.tid
Original file line number Diff line number Diff line change
@@ -1,17 +1,36 @@
title: $:/TagManager

\define lingo-base() $:/language/TagManager/
\define iconEditor(title)
<$edit-text field="icon" tag="input"/> <$button popup=<<qualify "$:/state/iconDropdown/$title$">> class="btn-invisible btn-dropdown">{{$:/core/images/down-arrow}}</$button>
<div class="tw-block-dropdown-wrapper">
<$reveal state=<<qualify "$:/state/iconDropdown/$title$">> type="nomatch" text="" default="">
<$linkcatcher to="$title$!!icon">
<div class="tw-block-dropdown tw-edit-type-dropdown">
<$list filter="[all[tiddlers+shadows]is[image]] [all[tiddlers+shadows]tag[$:/tags/Image]] +[sort[title]]">
<$link to={{!!title}}>
<$view field="title"/>
</$link>
</$list>
</div>
</$linkcatcher>
</$reveal>
</div>
\end
<table>
<tbody>
<tr>
<th>Tag</th>
<th>Count</th>
<th>Colour</th>
<th><<lingo Tag/Heading>></th>
<th><<lingo Count/Heading>></th>
<th><<lingo Colour/Heading>></th>
<th><<lingo Icon/Heading>></th>
</tr>
<$list filter="[tags[]sort[title]]">
<$list filter="[tags[]!is[system]sort[title]]">
<tr>
<td><$transclude tiddler="$:/core/ui/TagTemplate"/></td>
<td><$count filter="[is[current]tagging[]]"/></td>
<td><$count filter="[all[current]tagging[]]"/></td>
<td><$edit-text field="color" tag="input" type="color"/></td>
<td><$macrocall $name="iconEditor" title={{!!title}}/></td>
</tr>
</$list>
</tbody>
Expand Down
2 changes: 1 addition & 1 deletion core/ui/TagTemplate.tid
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ background-color:$(backgroundColor)$;
</$set>
<$reveal state=<<qualify "$:/state/tagpopup">> type="popup" position="below" animate="yes"><div class="tw-drop-down"><$transclude tiddler="$:/core/ui/ListItemTemplate"/>
<hr>
<$list filter="[is[current]tagging[]]" template="$:/core/ui/ListItemTemplate"/>
<$list filter="[all[current]tagging[]]" template="$:/core/ui/ListItemTemplate"/>
</div>
</$reveal>
</span>
9 changes: 8 additions & 1 deletion core/ui/TiddlerFieldTemplate.tid
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
title: $:/core/ui/TiddlerFieldTemplate

<tr class="tw-view-field"><td class="tw-view-field-name"><<listItem>></td><td class="tw-view-field-value"><$view field=<<listItem>>/></td></tr>
<tr class="tw-view-field">
<td class="tw-view-field-name">
<$text text=<<listItem>>/>
</td>
<td class="tw-view-field-value">
<$view field=<<listItem>>/>
</td>
</tr>
4 changes: 3 additions & 1 deletion core/ui/TiddlerFields.tid
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
title: $:/core/ui/TiddlerFields

<table class="tw-view-field-table"><tbody><$list filter="[is[current]fields[]sort[title]] -text" template="$:/core/ui/TiddlerFieldTemplate" variable="listItem"/>
<table class="tw-view-field-table">
<tbody>
<$list filter="[all[current]fields[]sort[title]] -text" template="$:/core/ui/TiddlerFieldTemplate" variable="listItem"/>
</tbody>
</table>
2 changes: 1 addition & 1 deletion core/ui/TiddlerInfo.tid
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
title: $:/core/ui/TiddlerInfo

<<tabs "[is[shadow]!has[draft.of]tag[$:/tags/TiddlerInfo]] [!is[shadow]!has[draft.of]tag[$:/tags/TiddlerInfo]] +[tag[$:/tags/TiddlerInfo]]" "$:/core/ui/TiddlerInfo/References">>
<<tabs "[all[tiddlers+shadows]tag[$:/tags/TiddlerInfo]!has[draft.of]]" "$:/core/ui/TiddlerInfo/References">>
8 changes: 8 additions & 0 deletions core/ui/TiddlerInfo/Advanced.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
title: $:/core/ui/TiddlerInfo/Advanced
tags: $:/tags/TiddlerInfo
caption: {{$:/language/TiddlerInfo/Advanced/Caption}}

<$list filter="[all[tiddlers+shadows]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]" variable="listItem">
<$transclude tiddler=<<listItem>>/>

</$list>
20 changes: 20 additions & 0 deletions core/ui/TiddlerInfo/Advanced/PluginInfo.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
title: $:/core/ui/TiddlerInfo/Advanced/PluginInfo
tags: $:/tags/TiddlerInfo/Advanced

\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/
<$list filter="[all[current]has[plugin-type]]">

! <<lingo Heading>>

<<lingo Hint>>
<ul>
<$list filter="[all[current]plugintiddlers[]sort[title]]" emptyMessage=<<lingo Empty/Hint>>>
<li>
<$link to={{!!title}}>
<$view field="title"/>
</$link>
</li>
</$list>
</ul>

</$list>
35 changes: 35 additions & 0 deletions core/ui/TiddlerInfo/Advanced/ShadowInfo.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
title: $:/core/ui/TiddlerInfo/Advanced/ShadowInfo
tags: $:/tags/TiddlerInfo/Advanced

\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/
<$set name="infoTiddler" value=<<currentTiddler>>>

''<<lingo Heading>>''

<$list filter="[all[current]!is[shadow]]">

<<lingo NotShadow/Hint>>

</$list>

<$list filter="[all[current]is[shadow]]">

<<lingo Shadow/Hint>>

<$list filter="[all[current]shadowsource[]]">

<$set name="pluginTiddler" value=<<currentTiddler>>>
<<lingo Shadow/Source>>
</$set>

</$list>

<$list filter="[all[current]is[shadow]is[tiddler]]">

<<lingo OverriddenShadow/Hint>>

</$list>


</$list>
</$set>
2 changes: 1 addition & 1 deletion core/ui/TiddlerInfo/Listed.tid
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ tags: $:/tags/TiddlerInfo
caption: {{$:/language/TiddlerInfo/Listed/Caption}}

\define lingo-base() $:/language/TiddlerInfo/
<$list filter="[is[current]listed[]!is[system]]" emptyMessage=<<lingo Listed/Empty>> template="$:/core/ui/ListItemTemplate"/>
<$list filter="[all[current]listed[]!is[system]]" emptyMessage=<<lingo Listed/Empty>> template="$:/core/ui/ListItemTemplate"/>
2 changes: 1 addition & 1 deletion core/ui/TiddlerInfo/References.tid
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ tags: $:/tags/TiddlerInfo
caption: {{$:/language/TiddlerInfo/References/Caption}}

\define lingo-base() $:/language/TiddlerInfo/
<$list filter="[is[current]backlinks[]sort[title]]" emptyMessage=<<lingo References/Empty>> template="$:/core/ui/ListItemTemplate">
<$list filter="[all[current]backlinks[]sort[title]]" emptyMessage=<<lingo References/Empty>> template="$:/core/ui/ListItemTemplate">
</$list>
2 changes: 1 addition & 1 deletion core/ui/TiddlerInfo/Tagging.tid
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ tags: $:/tags/TiddlerInfo
caption: {{$:/language/TiddlerInfo/Tagging/Caption}}

\define lingo-base() $:/language/TiddlerInfo/
<$list filter="[is[current]tagging[]]" emptyMessage=<<lingo Tagging/Empty>> template="$:/core/ui/ListItemTemplate"/>
<$list filter="[all[current]tagging[]]" emptyMessage=<<lingo Tagging/Empty>> template="$:/core/ui/ListItemTemplate"/>
9 changes: 9 additions & 0 deletions core/ui/TopRightBar/menu.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
title: $:/core/ui/TopBar/menu
tags: $:/tags/TopRightBar

<$reveal state="$:/state/sidebar" type="nomatch" text="no">
<$button set="$:/state/sidebar" setTo="no" class="btn-invisible">{{$:/core/images/menu-button}}</$button>
</$reveal>
<$reveal state="$:/state/sidebar" type="match" text="no">
<$button set="$:/state/sidebar" setTo="yes" class="btn-invisible">{{$:/core/images/menu-button}}</$button>
</$reveal>
10 changes: 7 additions & 3 deletions core/ui/UntaggedTemplate.tid
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
title: $:/core/ui/UntaggedTemplate

\define lingo-base() $:/language/SideBar/
<$button popup=<<qualify "$:/state/tagpopup">> class="btn-invisible tw-untagged-label tw-tag-label"><<lingo Tags/Untagged/Caption>></$button>
<$reveal state=<<qualify "$:/state/tagpopup">> type="popup" position="below"><div class="tw-drop-down">
<$button popup=<<qualify "$:/state/tagpopup">> class="btn-invisible tw-untagged-label tw-tag-label">
<<lingo Tags/Untagged/Caption>>
</$button>
<$reveal state=<<qualify "$:/state/tagpopup">> type="popup" position="below">
<div class="tw-drop-down">
<$list filter="[untagged[]!is[system]] -[tags[]] +[sort[title]]" template="$:/core/ui/ListItemTemplate"/>
</div></$reveal>
</div>
</$reveal>
4 changes: 2 additions & 2 deletions core/ui/ViewTemplate.tid
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
title: $:/core/ui/ViewTemplate

\define frame-classes()
tw-tiddler-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$
tw-tiddler-frame tw-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$
\end
<$set name="storyTiddler" value=<<currentTiddler>>><$set name="tiddlerInfoState" value=<<qualify "$:/state/tiddlerInfo">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter="[is[shadow]!has[draft.of]tag[$:/tags/ViewTemplate]] [!is[shadow]!has[draft.of]tag[$:/tags/ViewTemplate]] +[tag[$:/tags/ViewTemplate]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>
<$set name="storyTiddler" value=<<currentTiddler>>><$set name="tiddlerInfoState" value=<<qualify "$:/state/tiddlerInfo">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter="[all[tiddlers+shadows]tag[$:/tags/ViewTemplate]!has[draft.of]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>
</div>
</$tiddler></$set></$set>
9 changes: 7 additions & 2 deletions core/ui/ViewTemplate/body.tid
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
title: $:/core/ui/ViewTemplate/body
tags: $:/tags/ViewTemplate

\define lingo-base() $:/language/MissingTiddler/
<div class="body">

<$transclude />
<$transclude>

</div>
<$transclude tiddler="$:/language/MissingTiddler/Hint"/>

</$transclude>

</div>
13 changes: 13 additions & 0 deletions core/ui/ViewTemplate/classic.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
title: $:/core/ui/ViewTemplate/classic
tags: $:/tags/ViewTemplate $:/tags/EditTemplate

\define lingo-base() $:/language/ClassicWarning/
<$list filter="[all[current]type[text/x-tiddlywiki]]">
<div class="tw-message-box">

<<lingo Hint>>

<$button set="!!type" setTo="text/vnd.tiddlywiki"><<lingo Upgrade/Caption>></$button>

</div>
</$list>
6 changes: 5 additions & 1 deletion core/ui/ViewTemplate/subtitle.tid
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
title: $:/core/ui/ViewTemplate/subtitle
tags: $:/tags/ViewTemplate

<div class="tw-subtitle"><$link to={{!!modifier}}><$view field="modifier"/></$link> <$view field="modified" format="relativedate"/></div>
<div class="tw-subtitle">
<$link to={{!!modifier}}>
<$view field="modifier"/>
</$link> <$view field="modified" format="relativedate"/>
</div>
2 changes: 1 addition & 1 deletion core/ui/ViewTemplate/tags.tid
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
title: $:/core/ui/ViewTemplate/tags
tags: $:/tags/ViewTemplate

<div class="tw-tags-wrapper"><$list filter="[is[current]tags[]sort[title]]" template="$:/core/ui/TagTemplate" storyview="pop"/></div>
<div class="tw-tags-wrapper"><$list filter="[all[current]tags[]sort[title]]" template="$:/core/ui/TagTemplate" storyview="pop"/></div>
27 changes: 23 additions & 4 deletions core/ui/ViewTemplate/title.tid
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,31 @@ tags: $:/tags/ViewTemplate
\define title-styles()
fill:$(foregroundColor)$;
\end
<div class="tw-tiddler-title"><div class="titlebar"><span class="tw-tiddler-controls"><$list filter="[is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] [!is[shadow]!has[draft.of]tag[$:/tags/ViewToolbar]] +[tag[$:/tags/ViewToolbar]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>

</span><$set name="foregroundColor" value={{!!color}}><span style=<<title-styles>>><$transclude tiddler={{!!icon}}/></span></$set> <span class="title"><$view field="title"/></span></div>
<div class="tw-tiddler-title">
<div class="titlebar">
<span class="tw-tiddler-controls">
<$list filter="[all[tiddlers+shadows]tag[$:/tags/ViewToolbar]!has[draft.of]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list>
</span>
<$set name="foregroundColor" value={{!!color}}>
<span style=<<title-styles>>>
<$transclude tiddler={{!!icon}}/>
</span>
</$set>
<$list filter="[all[current]removeprefix[$:/]]">
<span class="title" title={{$:/language/SystemTiddler/Tooltip}}>
<span class="tw-system-title-prefix">$:/</span><$text text=<<currentTiddler>>/>
</span>
</$list>
<$list filter="[all[current]!prefix[$:/]]">
<span class="title">
<$view field="title"/>
</span>
</$list>
</div>

<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState>> class="tw-tiddler-info tw-popup" animate="yes" retain="yes">

<$transclude tiddler="$:/core/ui/TiddlerInfo"/>

</$reveal></div>
</$reveal>
</div>
2 changes: 1 addition & 1 deletion core/wiki/modules.tid
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ title: $:/snippets/modules

<$macrocall $name="describeModuleType" type=<<currentTiddler>>/>

<ul><$list filter="[is[current]modules[]]"><li><$link><<currentTiddler>></$link>
<ul><$list filter="[all[current]modules[]]"><li><$link><<currentTiddler>></$link>
</li>
</$list>
</ul>
Expand Down
23 changes: 18 additions & 5 deletions core/wiki/paletteeditor.tid
Original file line number Diff line number Diff line change
@@ -1,24 +1,37 @@
title: $:/snippets/paletteeditor

\define lingo-base() $:/language/ControlPanel/Appearance/Palette/Editor/
\define describePaletteColour(colour)
{{$:/language/Docs/PaletteColours/$colour$}}
\end
<$set name="currentTiddler" value={{$:/palette}}>

<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name="currentTiddler" $output="text/plain"/></$link>

<$list filter="[is[current]is[shadow]is[tiddler]]" variable="listItem">
<$list filter="[all[current]is[shadow]is[tiddler]]" variable="listItem">
<<lingo Prompt/Modified>>
<$button message="tw-delete-tiddler" param={{$:/palette}}><<lingo Reset/Caption>></$button>
</$list>

<$list filter="[is[current]is[shadow]!is[tiddler]]" variable="listItem">
<$list filter="[all[current]is[shadow]!is[tiddler]]" variable="listItem">
<<lingo Clone/Prompt>>
</$list>

<$button message="tw-new-tiddler" param={{$:/palette}}><<lingo Clone/Caption>></$button>

<table><tbody><$list filter="[is[current]indexes[]]" variable="colourName"><tr><td><$macrocall $name="colourName" $output="text/plain"/></td>
<td><$edit-text index=<<colourName>> tag="input"/></td>
<td><$edit-text index=<<colourName>> type="color" tag="input"/></td>
<table>
<tbody>
<$list filter="[all[current]indexes[]]" variable="colourName">
<tr>
<td>
''<$macrocall $name="describePaletteColour" colour=<<colourName>>/>''<br/>
<$macrocall $name="colourName" $output="text/plain"/>
</td>
<td>
<$edit-text index=<<colourName>> tag="input"/>
<br>
<$edit-text index=<<colourName>> type="color" tag="input"/>
</td>
</tr>
</$list>
</tbody>
Expand Down
2 changes: 1 addition & 1 deletion core/wiki/paletteswitcher.tid
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ title: $:/snippets/paletteswitcher
<<lingo Prompt>> <$view tiddler={{$:/palette}} field="name"/>

<$linkcatcher to="$:/palette">
<div class="tw-chooser"><$list filter="[is[shadow]tag[$:/tags/Palette]] [!is[shadow]tag[$:/tags/Palette]] +[sort[description]]"><div class="tw-chooser-item"><$link to={{!!title}}><div><$reveal state="$:/palette" type="match" text={{!!title}}>&bull;</$reveal><$reveal state="$:/palette" type="nomatch" text={{!!title}}>&nbsp;</$reveal> ''<$view field="name" format="text"/>'' - <$view field="description" format="text"/></div><$transclude tiddler="$:/snippets/currpalettepreview"/></$link></div>
<div class="tw-chooser"><$list filter="[all[tiddlers+shadows]tag[$:/tags/Palette]sort[description]]"><div class="tw-chooser-item"><$link to={{!!title}}><div><$reveal state="$:/palette" type="match" text={{!!title}}>&bull;</$reveal><$reveal state="$:/palette" type="nomatch" text={{!!title}}>&nbsp;</$reveal> ''<$view field="name" format="text"/>'' - <$view field="description" format="text"/></div><$transclude tiddler="$:/snippets/currpalettepreview"/></$link></div>
</$list>
</div>
</$linkcatcher>
2 changes: 1 addition & 1 deletion core/wiki/recentchanges.tid
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
title: $:/snippets/recentchanges

<$list filter="[!is[system]has[modified]!sort[modified]limit[100]eachday[modified]]">
<$list filter="[!is[system]has[modified]!sort[modified]limit[250]eachday[modified]]">
<div class="tw-menu-list-item">
<$view field="modified" format="date" template={{$:/language/RecentChanges/DateFormat}}/>
<$list filter="[sameday{!!modified}!is[system]!sort[modified]]">
Expand Down
2 changes: 1 addition & 1 deletion core/wiki/tags/EditTemplate.tid
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
title: $:/tags/EditTemplate
list: [[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]
list: [[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]
2 changes: 1 addition & 1 deletion core/wiki/tags/PageTemplate.tid
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
title: $:/tags/PageTemplate
list: [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]]
list: [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]] [[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]]

2 changes: 2 additions & 0 deletions core/wiki/tags/TiddlerInfoAdvanced.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
title: $:/tags/TiddlerInfo/Advanced
list: [[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]
2 changes: 1 addition & 1 deletion core/wiki/tags/ViewTemplate.tid
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
title: $:/tags/ViewTemplate
list: [[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/body]]
list: [[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]
2 changes: 1 addition & 1 deletion core/wiki/viewswitcher.tid
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: $:/snippets/viewswitcher
\define lingo-base() $:/language/ControlPanel/Appearance/StoryView/
<<lingo Prompt>> {{$:/view}}

<$linkcatcher to="$:/view"><$list filter="classic zoomin pop"><div><$reveal state="$:/view" type="match" text={{!!title}}>&bull;</$reveal><$reveal state="$:/view" type="nomatch" text={{!!title}}>&nbsp;</$reveal> <$link to={{!!title}}><$view field="title"/></$link>
<$linkcatcher to="$:/view"><$list filter="[storyviews[]]"><div><$reveal state="$:/view" type="match" text={{!!title}}>&bull;</$reveal><$reveal state="$:/view" type="nomatch" text={{!!title}}>&nbsp;</$reveal> <$link to={{!!title}}><$view field="title"/></$link>
</div>
</$list>
</$linkcatcher>
76 changes: 42 additions & 34 deletions editions/test/tiddlers/tests/test-filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,36 @@ Tests the filtering mechanism.
describe("Filter tests", function() {

// Create a wiki
var wiki = new $tw.Wiki();

// Some helpers
var addShadowTiddler = function(fields) {
var tiddler = new $tw.Tiddler(fields);
wiki.shadowTiddlers[tiddler.fields.title] = {tiddler: tiddler};
};
var wiki = new $tw.Wiki({
shadowTiddlers: {
"$:/TiddlerFive": {
tiddler: new $tw.Tiddler({title: "$:/TiddlerFive",
text: "Everything in federation",
tags: ["two"]
}),
},
"TiddlerSix": {
tiddler: new $tw.Tiddler({title: "TiddlerSix",
text: "Missing inaction from TiddlerOne",
tags: []
}),
},
"TiddlerSeventh": {
tiddler: new $tw.Tiddler({title: "TiddlerSeventh",
text: "",
list: "TiddlerOne [[Tiddler Three]] [[a fourth tiddler]] MissingTiddler",
tags: []
}),
},
"Tiddler8": {
tiddler: new $tw.Tiddler({title: "Tiddler8",
text: "Tidd",
tags: [],
"test-field": "JoeBloggs"
})
}
}
});

// Add a few tiddlers
wiki.addTiddler({
Expand Down Expand Up @@ -52,28 +75,13 @@ describe("Filter tests", function() {
text: "This is the text of tiddler [[one]]",
list: "[[Tiddler Three]] [[TiddlerOne]]",
modifier: "JohnDoe"});
// And some shadows
addShadowTiddler({
title: "$:/TiddlerFive",
text: "Everything in federation",
tags: ["two"]});
addShadowTiddler({
title: "TiddlerSix",
text: "Missing inaction from TiddlerOne",
tags: []});
addShadowTiddler({
title: "TiddlerSeventh",
text: "",
list: "TiddlerOne [[Tiddler Three]] [[a fourth tiddler]] MissingTiddler",
tags: []});
addShadowTiddler({
title: "Tiddler8",
text: "Tidd",
tags: [],
"test-field": "JoeBloggs"});

// Our tests

it("should retrieve shadow tiddlers", function() {
expect(wiki.getTiddlerText("Tiddler8")).toBe("Tidd");
});

it("should handle the title operator", function() {
expect(wiki.filterTiddlers("TiddlerOne [title[$:/TiddlerTwo]] [[Tiddler Three]]").join(",")).toBe("TiddlerOne,$:/TiddlerTwo,Tiddler Three");
expect(wiki.filterTiddlers("[!title[Tiddler Three]]").join(",")).toBe("TiddlerOne,$:/TiddlerTwo,a fourth tiddler,one");
Expand Down Expand Up @@ -136,7 +144,7 @@ describe("Filter tests", function() {
expect(wiki.filterTiddlers("[!tag[one]sort[title]]").join(",")).toBe("$:/TiddlerTwo,a fourth tiddler,one");
expect(wiki.filterTiddlers("[prefix[Tidd]tag[one]sort[title]]").join(",")).toBe("Tiddler Three,TiddlerOne");
expect(wiki.filterTiddlers("[!is[shadow]tag[two]sort[title]]").join(",")).toBe("$:/TiddlerTwo,Tiddler Three");
expect(wiki.filterTiddlers("[is[shadow]tag[two]sort[title]]").join(",")).toBe("$:/TiddlerFive");
expect(wiki.filterTiddlers("[all[shadows]tag[two]sort[title]]").join(",")).toBe("$:/TiddlerFive");
});

it("should handle the tags operator", function() {
Expand All @@ -147,8 +155,8 @@ describe("Filter tests", function() {
it("should handle the tagging operator", function() {
expect(wiki.filterTiddlers("[[one]tagging[]sort[title]]").join(",")).toBe("Tiddler Three,TiddlerOne");
expect(wiki.filterTiddlers("[[one]tagging[]]").join(",")).toBe("Tiddler Three,TiddlerOne");
expect(wiki.filterTiddlers("[[two]tagging[]sort[title]]").join(",")).toBe("$:/TiddlerTwo,Tiddler Three");
expect(wiki.filterTiddlers("[is[current]tagging[]sort[title]]","one").join(",")).toBe("Tiddler Three,TiddlerOne");
expect(wiki.filterTiddlers("[[two]tagging[]sort[title]]").join(",")).toBe("$:/TiddlerFive,$:/TiddlerTwo,Tiddler Three");
expect(wiki.filterTiddlers("[all[current]tagging[]sort[title]]","one").join(",")).toBe("Tiddler Three,TiddlerOne");
});

it("should handle the untagged operator", function() {
Expand All @@ -158,12 +166,12 @@ describe("Filter tests", function() {

it("should handle the links operator", function() {
expect(wiki.filterTiddlers("[!is[shadow]links[]sort[title]]").join(",")).toBe("a fourth tiddler,one,Tiddler Three,TiddlerSix,TiddlerTwo,TiddlerZero");
expect(wiki.filterTiddlers("[is[shadow]links[]sort[title]]").join(",")).toBe("TiddlerOne");
expect(wiki.filterTiddlers("[all[shadows]links[]sort[title]]").join(",")).toBe("TiddlerOne");
});

it("should handle the backlinks operator", function() {
expect(wiki.filterTiddlers("[!is[shadow]backlinks[]sort[title]]").join(",")).toBe("a fourth tiddler,one");
expect(wiki.filterTiddlers("[is[shadow]backlinks[]sort[title]]").join(",")).toBe("Tiddler Three");
expect(wiki.filterTiddlers("[all[shadows]backlinks[]sort[title]]").join(",")).toBe("Tiddler Three");
});

it("should handle the has operator", function() {
Expand All @@ -179,7 +187,7 @@ describe("Filter tests", function() {

it("should handle the list operator", function() {
expect(wiki.filterTiddlers("[list[TiddlerSeventh]sort[title]]").join(",")).toBe("a fourth tiddler,MissingTiddler,Tiddler Three,TiddlerOne");
expect(wiki.filterTiddlers("[tag[one]list[TiddlerSeventh]sort[title]]").join(",")).toBe("Tiddler Three,TiddlerOne");
expect(wiki.filterTiddlers("[tag[one]list[TiddlerSeventh]sort[title]]").join(",")).toBe("a fourth tiddler,MissingTiddler,Tiddler Three,TiddlerOne");
});

it("should handle the next operator", function() {
Expand Down Expand Up @@ -224,12 +232,12 @@ describe("Filter tests", function() {
});

it("should handle the '[is[shadow]]' operator", function() {
expect(wiki.filterTiddlers("[is[shadow]sort[title]]").join(",")).toBe("$:/TiddlerFive,Tiddler8,TiddlerSeventh,TiddlerSix");
expect(wiki.filterTiddlers("[all[shadows]sort[title]]").join(",")).toBe("$:/TiddlerFive,Tiddler8,TiddlerSeventh,TiddlerSix");
expect(wiki.filterTiddlers("[!is[shadow]sort[title]]").join(",")).toBe("$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne");
});

it("should handle the '[is[missing]]' operator", function() {
expect(wiki.filterTiddlers("[is[missing]]").join(",")).toBe("TiddlerZero,TiddlerTwo");
expect(wiki.filterTiddlers("[all[missing]]").join(",")).toBe("TiddlerZero,TiddlerTwo");
expect(wiki.filterTiddlers("[!is[missing]sort[title]]").join(",")).toBe("$:/TiddlerTwo,a fourth tiddler,one,Tiddler Three,TiddlerOne");
expect(wiki.filterTiddlers("[[TiddlerOne]is[missing]]").join(",")).toBe("");
expect(wiki.filterTiddlers("[[TiddlerZero]is[missing]]").join(",")).toBe("TiddlerZero");
Expand Down
91 changes: 91 additions & 0 deletions editions/test/tiddlers/tests/test-tags.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/*\
title: test-tags.js
type: application/javascript
tags: [[$:/tags/test-spec]]

Tests the tagging mechanism.

\*/
(function(){

/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";

describe("Tag tests", function() {

// Create a wiki
var wiki = new $tw.Wiki();

// Add a few tiddlers
wiki.addTiddler({
title: "TiddlerOne",
text: "The quick brown fox in $:/TiddlerTwo",
tags: ["one","TiddlerSeventh"],
modifier: "JoeBloggs",
modified: "201304152222"});
wiki.addTiddler({
title: "$:/TiddlerTwo",
text: "The rain in Spain\nfalls mainly on the plain and [[a fourth tiddler]]",
tags: ["two"],
modifier: "JohnDoe",
modified: "201304152211"});
wiki.addTiddler({
title: "Tiddler Three",
text: "The speed of sound in light\n\nThere is no TiddlerZero but TiddlerSix",
tags: ["one","two","TiddlerSeventh"],
modifier: "JohnDoe",
modified: "201304162202"});
wiki.addTiddler({
title: "a fourth tiddler",
text: "The quality of mercy is not drained by [[Tiddler Three]]",
tags: ["TiddlerSeventh"],
modifier: "JohnDoe"});
wiki.addTiddler({
title: "one",
text: "This is the text of tiddler [[one]]",
list: "[[Tiddler Three]] [[TiddlerOne]]",
modifier: "JohnDoe"});
wiki.addTiddler({
title: "$:/TiddlerFive",
text: "Everything in federation",
tags: ["two"]});
wiki.addTiddler({
title: "TiddlerSix",
text: "Missing inaction from TiddlerOne",
tags: []});
wiki.addTiddler({
title: "TiddlerSeventh",
text: "",
list: "TiddlerOne [[Tiddler Three]] [[a fourth tiddler]] MissingTiddler",
tags: []});
wiki.addTiddler({
title: "Tiddler8",
text: "Tidd",
tags: [],
"test-field": "JoeBloggs"});
wiki.addTiddler({
title: "Tiddler9",
text: "Another tiddler",
tags: ["TiddlerSeventh"],
"list-before": "a fourth tiddler"});
wiki.addTiddler({
title: "Tiddler10",
text: "Another tiddler",
tags: ["TiddlerSeventh"],
"list-before": ""});
wiki.addTiddler({
title: "Tiddler11",
text: "Another tiddler",
tags: ["TiddlerSeventh"],
"list-after": "Tiddler Three"});

// Our tests

it("should handle custom tag ordering", function() {
expect(wiki.filterTiddlers("[tag[TiddlerSeventh]]").join(",")).toBe("Tiddler10,TiddlerOne,Tiddler Three,Tiddler11,Tiddler9,a fourth tiddler");
});

});

})();
2 changes: 1 addition & 1 deletion editions/test/tiddlers/tests/test-widget.js
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ describe("Widget module", function() {
var wrapper = renderWidgetNode(widgetNode);
describe("should detect the recursion", function() {
// Test the rendering
expect(wrapper.innerHTML).toBe("Tiddler recursion error in transclude widget\n");
expect(wrapper.innerHTML).toBe("Recursive transclusion error in transclude widget\n");
});

});
Expand Down
2 changes: 1 addition & 1 deletion editions/test/tiddlers/tests/test-wikitext.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ describe("WikiText tests", function() {
expect(wiki.renderTiddler("text/html","TiddlerThree")).toBe("<p>The speed of sound</p><p>The light of speed</p>");
});
it("should support attributes specified as macro invocations", function() {
expect(wiki.renderTiddler("text/html","TiddlerFour")).toBe("<p><a class=' tw-tiddlylink tw-tiddlylink-missing' href='#This%20is%20my%20''amazingly''%20groovy%20macro!'>This is a link</a></p>");
expect(wiki.renderTiddler("text/html","TiddlerFour")).toBe("<p><a class='tw-tiddlylink tw-tiddlylink-missing' href='#This%20is%20my%20''amazingly''%20groovy%20macro!'>This is a link</a></p>");
});

});
Expand Down
27 changes: 27 additions & 0 deletions editions/tw5.com/tiddlers/Articles.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
created: 20140320230543190
modified: 20140320231444981
tags: introduction community
title: Articles
type: text/vnd.tiddlywiki

Submit new entries to this collection of articles via GitHub, Twitter or by posting in the [[TiddlyWiki Groups]].

<div class="tw-link-info">

<$list filter="[tag[articles]!sort[modified]]">

<div class="tw-link-info-item">

! <$link><$view field="title"/></$link>

!!! <a href={{!!url}} target="_blank"><$text text={{!!url}}/></a>

<div class="tw-subtitle">Updated <$view field="modified" format="relativedate"/></div>

<$transclude/>

</div>

</$list>

</div>
53 changes: 53 additions & 0 deletions editions/tw5.com/tiddlers/Changes to filters in 5.0.9-beta.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
created: 20140403223413403
modified: 20140403223524945
tags: upgrading
title: Changes to filters in 5.0.9-beta
type: text/vnd.tiddlywiki

! Introduction

This release resolves a number of inconsistencies with the way that filters are handled. The changes mean that existing filters may need to be updated - particularly those that must deal with missing or shadow tiddlers.

! Changes to ''is'' and addition of ''all''

Most filter operators act by choosing some or all of their source titles to pass through or re-order. Those that add new entries that are not drawn from the source list are referred to as selectors. Prior to 5.0.9-beta, a few filter operators were inconsistent in whether they filtered from the source list or selected new entries into it.

The specific changes are:

* The ''is'' operator now always strictly filters from the currently selected list of tiddlers
* The new ''all'' operator acts as a selector by replacing the current list with a combination of tiddlers from specific sources:
** ''current'' for the current tiddler
** ''missing'' for all missing tiddlers
** ''orphans'' for all orphan tiddlers
** ''shadows'' for all shadow tiddlers
** ''tiddlers'' for all non-shadow tiddlers (including both system and non-system tiddlers)

The sources for the ''all'' operator can be combined with the `+` character. For example, `[all[shadows+tiddlers]]` returns all shadow tiddlers and all ordinary tiddlers.

Previously, it was common to have `[is[shadow]]` at the start of a filter string to select all the shadow tiddlers. In 5.0.9 and above, this will not return all the shadow tiddlers, but instead just those ordinary tiddlers that are also shadow tiddlers (by virtue of having overridden one). The resolution is to use the new ''all'' operator. For example, consider this filter from 5.0.8:

```
[is[shadow]!has[draft.of]tag[$:/tags/AdvancedSearch]] [!is[shadow]!has[draft.of]tag[$:/tags/AdvancedSearch]] +[tag[$:/tags/AdvancedSearch]]
```

In 5.0.9, that filter has been changed to:

```
[all[tiddlers+shadows]tag[$:/tags/AdvancedSearch]!has[draft.of]]
```

Note how the ''all'' operator allows operations to be performed on tiddlers from combinations of sources.

!! Changes to `[is[current]]`

One result of the changes is that `[is[current]]` now strictly filters from the source tiddlers; so, if the current tiddler is a missing tiddler not in the source list, then `[is[current]]` will return an empty list.

The solution is generally to use `[all[current]]` instead. It doesn't read as well, but has the required behaviour of returning just the current tiddler, regardless of whether it is in the source tiddlers.

! Changes to ''title'' and ''field''

There are minor changes to the way that the ''title'' and ''field'' operators work.

The ''title'' operator is a selector: it returns the specified title regardless of whether it is in the current source. ''title'' is used as the default operator if none is specified

The ''field'' operator is a filter: it only returns a subset of the source tiddlers. ''field'' is used as the default operator if the supplied operator is not defined (the supplied operator is passed as the suffix to the field operator, so `[description[Missing]]` is equivalent to `[field:description[Missing]]`).
35 changes: 6 additions & 29 deletions editions/tw5.com/tiddlers/Community.tid
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
created: 20130909151600000
modified: 20140226202356584
modified: 20140321090723435
tags: community
title: Community
type: text/vnd.tiddlywiki
Expand All @@ -19,37 +19,14 @@ The ~TiddlyWiki discussion groups are mailing lists for talking about ~TiddlyWik

New releases of TiddlyWiki, TiddlyDesktop and TiddlyFox are announced via the discussion groups and Twitter.

! Resources for TiddlyWiki5

* [[TW5 Mall|http://www.giffmex.org/tw5mall.htm]] -- DaveGifford's growing catalogue of hints and tips
* Several [[customisation howto's and theme tweaks|http://tongerner.tiddlyspot.com/]] from TonGerner
* A [[TW5Magick|http://tw5magick.tiddlyspot.com/]] -- a collection of hints and tips from StephanHradek
* A [[collection of articles|http://blog.jeffreykishner.com/tiddlywiki/]] from JeffreyKishner
* A new theme from [[BobRobison|http://tw5gray.tiddlyspot.com]]
* [[Bestrew|http://nocategories.net/tiddlywiki/bestrew.html]] -- DylanKinnett's adaptation of TiddlyWiki5 as a writers manuscript submission tracker
* [[BrainTest|http://braintest.tiddlyspot.com]], a collection of tips and experiments from DanieloRodriguez
* [[Coding for TiddlyWiki5|http://cjhunt.github.io]], an introduction to developing extensions and plugins from ChrisHunt
* [[Hosting TiddlyWiki5 on GoogleDrive|https://googledrive.com/host/0B51gSXixfJ2Qb0I4R2M4MWJVMlU]] from TonyChing

! Blog posts and articles about TiddlyWiki5

* Reaction to TiddlyWiki5 from the translator of the German edition of TiddlyWikiClassic: "[[TiddlyWiki 5 im Betatest|http://blog.netplanet.org/2014/01/03/tiddlywiki-5-im-betatest/]]"
* A gamers guide to using TiddlyWiki5: "[[Shining Ark 7 Using TiddlyWiki|http://helugame.wordpress.com/2013/09/07/shining-ark-7-using-tiddlywiki/]]"
* An introduction to TiddlyWiki5 by [[Moongift (in Japanese)|http://www.moongift.jp/2013/11/tiddlywiki5-%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E5%88%B7%E6%96%B0%E3%80%82%E6%AC%A1%E3%81%AE25%E5%B9%B4%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99tiddlywiki-2/]]

! Examples of TiddlyWiki5 being used in the wild

; http://freedombits.org
: A manifesto for the preservation of free speech through the exchange of randomized data
; http://giffmex.org/nt/1johnnotebase.html
: A study notebook for the Bible
; http://tesis.tiddlyspot.com/
: A thesis notebook

! Local ~TiddlyWiki Interest Groups

Local meetings of ~TiddlyWiki enthusiasts around the world:

* [[OXTWIG]], the ''Oxford ~TiddlyWiki Interest Group'' meets monthly in Oxford, UK to share experiences of using TiddlyWiki

//If you are a ~TiddlyWiki enthusiast please consider starting a local TWIG in your area, it's a great way to spread the word about using TiddlyWiki//
//If you are a ~TiddlyWiki enthusiast please consider starting a local TWIG in your area, it's a great way to spread the word about using TiddlyWiki//

! Links

<<tabs "Latest Resources Examples Articles" "Latest">>
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
created: 20140320055936611
modified: 20140320075440176
tags: howto
title: Developing plugins using Node.js and GitHub
type: text/vnd.tiddlywiki

The most practical way to develop plugins is to use Node.js with the tiddlywiki5 repository to build your plugins, and to use ~GitHub to manage you files.

!Step by step

!!1. Setup your development environment

First read http://tiddlywiki.com/static/PluginMechanism.html.

Install Git from http://git-scm.com/downloads

Install Node.js from http://nodejs.org/

!!2. Create a new blank repository on ~GitHub

Hint: ~GitHub repositories cannot be grouped together into directories, so it is only possible to group by using a naming scheme, e.g. use 'TW5-' as a name prefix with tiddlywiki5 projects to group them together.

Go to https://github.com/ and create new a repository 'pluginname' - choose to add a readme file.

!!3. Setup a working environment

Choose a location in your file system (eg TW5) for you plugin project; issue commands to:

--create the directory--

```
mkdir TW5

```

--make a local read-only copy of the tiddlywiki5 repository--

```
git clone https://github.com/Jermolene/TiddlyWiki5.git TW5

```

--make a directory for your plugin--

```
cd TW5
cd plugins
mkdir yourname
cd yourname
mkdir pluginname

```

--make a local copy of you plugin repository--

```
git clone https://github.com/yourgithub/pluginname.git pluginname

```
--go to your files--

```
cd pluginname

```

Create the file plugin.info with content:

```
{
"title": "$:/plugins/yourgithub/pluginname",
"description": "summary of the plugin's purpose",
"author": "yourname",
"version": "0.0.1",
"core-version": ">=5.0.8",
"source": "https://github.com/yourgithub/pluginname",
"plugin-type": "plugin"
}
```


!!4. Create your plugin's files

For example files see the plugins in the tiddlywiki5 repository i.e. those located at plugins/tiddlywiki/ - Note in particular that files need to contain information that is used to tell tiddlywiki the name of the tiddler that is to be used in the tiddlywiki in place of the name of the file within the file system.

!!5. Build your files into a tiddlywiki

Modify editions/tw5.com/tiddlywiki.info to include a reference to your plugin directory, i.e. find `"plugins": [ ` and add `"yourname/pluginname"`.

From the TW5 directory issue command

```
./qbld.sh
```

the resultant file (index.html) will be placed in the build directory, the default build directory is `../jermolene.github.com` relative to TW5/

!!6. Save you work on ~GitHub

From `plugins/yourname/pluginname/` issue commands to:

--add all files--

```
git add -A
```

--commit to your local repository---

```
git commit -am "something meaningful about this check in"
```

--copy local changes to github--

```
git push
```
29 changes: 24 additions & 5 deletions editions/tw5.com/tiddlers/Examples.tid
Original file line number Diff line number Diff line change
@@ -1,8 +1,27 @@
created: 201309091551
modified: 201309091551
created: 20140320230543190
modified: 20140320231444981
tags: introduction community
title: Examples
type: text/vnd.tiddlywiki

Examples of TiddlyWiki5 being used in the wild:
This collection showcases inspiring and interesting examples of TiddlyWiki being used in the wild.

|!Site |!Description |
|http://freedombits.org |A manifesto for the preservation of free speech through the exchange of randomized data |
Submit new entries to this collection via GitHub, Twitter or by posting in the [[TiddlyWiki Groups]].

<div class="tw-link-info">

<$list filter="[tag[examples]!sort[modified]]">

<div class="tw-link-info-item">

! <$link><$view field="title"/></$link>

!!! <a href={{!!url}} target="_blank"><$text text={{!!url}}/></a>

<div class="tw-subtitle">Updated <$view field="modified" format="relativedate"/></div>

<$transclude/>

</div>

</$list>
25 changes: 25 additions & 0 deletions editions/tw5.com/tiddlers/Latest.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
created: 20140321090511826
modified: 20140321090650144
tags: community introduction
title: Latest
type: text/vnd.tiddlywiki

The latest news, articles, resources and examples.

<div class="tw-link-info">

<$list filter="[tag[articles]] [tag[examples]] [tag[resources]] +[!sort[modified]limit[7]]">

<div class="tw-link-info-item">

! <$link><$view field="title"/></$link>

!!! <a href={{!!url}} target="_blank"><$text text={{!!url}}/></a>

<div class="tw-subtitle">Updated <$view field="modified" format="relativedate"/></div>

<$transclude/>

</div>

</$list>
2 changes: 1 addition & 1 deletion editions/tw5.com/tiddlers/Release 5.0.7beta.tid
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ released: 201401262107

//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.6-beta...v5.0.7-beta]]//

!! Breaking
!! Incompatible Changes

These are changes that might affect users upgrading from previous betas.

Expand Down
2 changes: 1 addition & 1 deletion editions/tw5.com/tiddlers/Release 5.0.8beta.tid
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ released: 201402281551

//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.7-beta...v5.0.8-beta]]//

!! Breaking Changes
!! Incompatible Changes

See [[Notes for upgrading to 5.0.8-beta]] for more details of these changes:

Expand Down
67 changes: 67 additions & 0 deletions editions/tw5.com/tiddlers/Release 5.0.9beta.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
created: 201403021809
modified: 201403021809
tags: releasenote
title: Release 5.0.9-beta
type: text/vnd.tiddlywiki
released: 201404152139

//[[See GitHub for detailed change history of this release|https://github.com/Jermolene/TiddlyWiki5/compare/v5.0.8-beta...v5.0.9-beta]]//

!! Highlights

* Improved layout, including a ''hamburger'' icon for dismissing the sidebar and expanding the story river to fill the space
* Added new ''Seamless'' theme
* New ''Filter'' tab in [[$:/AdvancedSearch]]
* Initial implementation of CecilyView
* Overhaul of inconsistencies in TiddlerFilters (see [[Changes to filters in 5.0.9-beta]])
* New translations for Italian and Japanese
* Performance improvements, particularly [[during editing|https://github.com/Jermolene/TiddlyWiki5/commit/0aa559cd23b3742c8f10c5ac144860d816699782]]

!! Documentation Improvements

* Improved and reorganised documentation for TiddlerFilters
* Demo of [[Making curved text with SVG]]
* [[Community]] links are now broken up into individual tiddlers
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/a19432541e776bfb63b1b985a60f472e9f1d4352]] overview diagram of [[TiddlyWiki Architecture]]
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/7b57561160173667031b5bc15a4f7553d8514c1c]] documentation from buggyj: [[Developing plugins using Node.js and GitHub]]

!! Usability Improvements

* Made the dropdown arrow icon [[skinnier|https://github.com/Jermolene/TiddlyWiki5/commit/ec90ac99cf2767b6ff20902d8b01aa1c36778147]]
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/bca1d552803c1839e7385765314f81c5307632b8]] validation of legal characters for fieldnames
* Added blacklisting of unsage HTML [[elements|https://github.com/Jermolene/TiddlyWiki5/commit/ba6edd42c125cb19d955a1cb3f54a2d367cb79dc]] and [[attributes|https://github.com/Jermolene/TiddlyWiki5/commit/ba6edd42c125cb19d955a1cb3f54a2d367cb79dc]]
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/baa8cf3dd098bab0a7a8c78b24747c69bd40889f]] a warning indicator to tiddlers in TiddlyWikiClassic format
* [[Add|https://github.com/Jermolene/TiddlyWiki5/commit/42c67cfeb732fccb10b8ab574c84090dc2471352]] tiddler info ''Advanced'' panel with information about plugins and shadow tiddlers
* [[Improved|https://github.com/Jermolene/TiddlyWiki5/commit/96457d801159958b897f98e22aa9af53b97f0e35]] layout of [[$:/ControlPanel]] ''Plugins'' tab
* [[Enhance|https://github.com/Jermolene/TiddlyWiki5/commit/f48701544eda4f79af86b1ad44340e7182bcf024]] viewing of system tiddlers by fading down the `$:/` prefix
* [[Extend|https://github.com/Jermolene/TiddlyWiki5/commit/dd3ee2a603cba35770a8f109e070f271d72861f8]] [[$:/TagManager]] to allow icons to be assigned to tags
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/87c4839fed789b80e0942014c05175e36aacc157]] support for `list-before` and `list-after` fields for controlling tag ordering (see TiddlerTags for details)
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/3afa26b9a318d913ba162d93a63036cb4a94be59]] request for confirmation before abandoning edits to a tiddler

!! Hackability Improvements

* [[Updated|https://github.com/Jermolene/TiddlyWiki5/commit/bdbbf94326f70db0f8ef196270ab9e92bfde10fb]] [[Transclusion in WikiText]] syntax to allow translusion of a template without affecting the current tiddler
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/8a7d0f53d380e9ca93ee34d8ad05090d511e95c4]] `sourceURL` handling to `eval()` so that tiddler modules can be [[properly debugged|https://chromedevtools.googlecode.com/svn-history/r421/trunk/tutorials/b
reapoints/index.html#regular]] in Chrome
* New ScrollableWidget giving better control over scrollable regions
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/d3c0296a87198296cff26aa7ce7bb8274cdcc3f7]] new CSS class `tw-site-title` for the site title
* [[Disable|https://github.com/Jermolene/TiddlyWiki5/commit/e397e4d15951c1395c7752a7563f002ca459206e]] the TiddlyWeb sync adaptor unless the wiki is loaded over HTTP
* Added a [[high resolution timer mechanism|https://github.com/Jermolene/TiddlyWiki5/commit/dcce4879347e4829d75f10248477731b18b829ef]] and a [[performance measurement mechanism|https://github.com/Jermolene/TiddlyWiki5/commit/d402d3c5a619b6b1642ab03c74ff03a864846a0b]]
* Added a [[basic CSV parser|https://github.com/Jermolene/TiddlyWiki5/commit/5a085f792722c74d259464386138c731b2f014cc]]
* Several measures to enforce the TiddlyWiki programming model:
** [[Refactor|https://github.com/Jermolene/TiddlyWiki5/commit/9de17aa206b21df5c4e29e61bba5d6b49aca6c71]] wiki store object to make members be private
** Freeze tiddler object and [[fields|https://github.com/Jermolene/TiddlyWiki5/commit/279626a3e3fbd75d60fc3be49b68a99d8ba0a95d]] tiddler fields to enforce their immutability
* [[Extend|https://github.com/Jermolene/TiddlyWiki5/commit/f649b5b037bfd2e7c48d1ba65ffa37064456523d]] the ButtonWidget to be able to set text references
* [[Add|https://github.com/Jermolene/TiddlyWiki5/commit/afa677b9a0b1dff1239dc1ea08edd210b9736af9]] a class to tiddler frames in view mode
* [[Added|https://github.com/Jermolene/TiddlyWiki5/commit/50cf9678cb469e443e220b063e2355c844e417e7]] support for [[WidgetMessage: tw-home]]
* [[Hidden|https://github.com/Jermolene/TiddlyWiki5/commit/2608a323ebf3d8a8e925eda6d3a10ebb8f41d383]] system tags from the sidebar ''Tags' tab
* [[Allow|https://github.com/Jermolene/TiddlyWiki5/commit/98872bbe7c62faa4aa209fa421c2989aeef3aaf2]] pasting and import of HTML content
* [[Add|https://github.com/Jermolene/TiddlyWiki5/commit/a5a2c718b1d5671652d01e3567dba1c6795b7521]] support for a tooltip on the LinkWidget

!! Bug Fixes

* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/commit/aa631518152cda5643805c143bf0000bca8d767f]] problem with occasional freezes of the sync mechanism - thanks to buggyj
* Fixed problem with [[tiddlers|https://github.com/Jermolene/TiddlyWiki5/commit/1e960ffcac566c742c44b18d6f0e809d4457b249]] or [[fields|https://github.com/Jermolene/TiddlyWiki5/commit/ea46f85a8a5ad29e8602cbb13667c853903681a6]] called `__proto__`
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/commit/aec618793f41b937676a5a165764dc19d9bbb2b2]] with refreshing the D3 plugin
* [[Fixed|https://github.com/Jermolene/TiddlyWiki5/commit/67f3d58f7153ca4d50ce5a14ed72d9d4b6ad9b71]] problem with "null" message when unloading under Internet Explorer 11

27 changes: 27 additions & 0 deletions editions/tw5.com/tiddlers/Resources.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
created: 20140320230543190
modified: 20140320231444981
tags: introduction community
title: Resources
type: text/vnd.tiddlywiki

These resources created by the TiddlyWiki [[Community]] help you get the best out of TiddlyWiki. Submit new entries via GitHub, Twitter or by posting in the [[TiddlyWiki Groups]].

<div class="tw-link-info">

<$list filter='[tag[resources]!sort[modified]]'>

<div class="tw-link-info-item">

! <$link><$view field="title"/></$link>

!!! <a href={{!!url}} target="_blank"><$text text={{!!url}}/></a>

<div class="tw-subtitle">Updated <$view field="modified" format="relativedate"/></div>

<$transclude/>

</div>

</$list>

</div>
4 changes: 2 additions & 2 deletions editions/tw5.com/tiddlers/community/OXTWIG.tid
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ We have an email discussion list, too: https://groups.google.com/forum/#!members

The second OXTWIG meeting was held on Thursday 16th January 2014:

<iframe width="560" height="315" src="//www.youtube.com/embed/WOK_nVBf_6U" frameborder="0" allowfullscreen></iframe>
<iframe width="560" height="315" src="http://www.youtube.com/embed/WOK_nVBf_6U" frameborder="0" allowfullscreen></iframe>

! OXTWIG #1

The first OXTWIG meeting was held on Thursday 21st November 2013:

<iframe width="560" height="315" src="//www.youtube.com/embed/tpNf_Dms_TE" frameborder="0" allowfullscreen></iframe>
<iframe width="560" height="315" src="http://www.youtube.com/embed/tpNf_Dms_TE" frameborder="0" allowfullscreen></iframe>
53 changes: 53 additions & 0 deletions editions/tw5.com/tiddlers/concepts/FilterOperators.tid
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
created: 20140303091312363
modified: 20140324221721972
title: FilterOperators
type: text/vnd.tiddlywiki

The available filter operators are listed here. See TiddlerFilters for an introduction to tiddler filters and how they are used.

* ''title'': selects the tiddler with the title given in the operand
* ''is'': tests whether a tiddler is a member of the system defined set named in the operand (see below)
* ''has'': tests whether a tiddler has a non-empty value for the field specified in the operand
* ''sort'': sorts the tiddlers by the field specified in the operand
* ''sortcs'': a case sensitive sort of the current tiddlers by the field specified in the operand
* ''nsort'': sorts the tiddlers numerically by the field specified in the operand
* ''nsortcs'': a case sensitive (for the non-numerical elements) numerical sort of the current tiddlers by the field specified in the operand
* ''prefix'': tests whether a tiddlers title starts with the prefix specified in the operand
* ''limit'': limits the number of subresults to the integer specified in the operand
* ''tag'': tests whether a given tag is (`[tag[mytag]]`) or is not (`[!tag[mytag]]`) present on the tiddler
* ''field:{fieldname}'' or ''{fieldname}'': tests whether a tiddler field has a specified value (`[modifier[Jeremy]]` or `[field:modifier[Jeremy]]`) or not (`[!modifier[Jeremy]]`)
* ''tags'': selects the tags on the currently selected tiddlers
* ''tagging'': selects the tiddlers tagged with the currently selected tiddlers
* ''untagged'': selects the any of the selected tiddlers that do not have at least one tag
* ''links'': selects the outgoing links on the currently selected tiddlers
* ''backlinks'': selects the tiddlers that link to the currently selected tiddlers
* ''list'': selects the tiddlers listed in a specified [[TiddlerList|TiddlerLists]]
* ''next'': selects the next item in a TiddlerList after the current tiddler
* ''previous'': selects the previous item in a TiddlerList before the current tiddler
* ''listed'': selects the TiddlerLists that include the current tiddler
* ''each'': selects one tiddler for each discrete value of the specified field
* ''eachday'': selects one tiddler for each discrete day in the specified date field
* ''sameday'': selects all the tiddlers falling into the same day as the provided date in the specified date field
* ''fields'': returns the names of the fields present on the selected tiddlers
* ''search'': returns all tiddlers that contain the specified text
* ''reverse'': reverses the list
* ''first'': selects the first tiddler of the list (or the first n if the operand is n)
* ''last'': selects the last tiddler of the list (or the last n if the operand is n)
* ''rest'': selects all but the first tiddler of the list (or all but the first n if the operand is n)
* ''butfirst'': synonym for ''rest''
* ''bf'': another synonym for ''rest''
* ''butlast'': selects all but the last tiddler of the list (or all but the last n if the operand is n)
* ''bl'': another synonym for ''butlast''
* ''nth'': selects the n-th tiddler of the list. Defaults to n = 1
* ''indexes'': selects the names of the indexes within a [[DataTiddler|DataTiddlers]]
* ''moduletypes'': selects the list of types of all the loaded modules
* ''storyviews'': selects the list of names of loaded storyviews

The operands available with the `is` operator are:

* ''tiddler'': selects all tiddlers excluding shadows, whether or not they are SystemTiddlers
* ''system'': selects all SystemTiddlers
* ''shadow'': selects all ShadowTiddlers
* ''current'': selects the CurrentTiddler
* ''missing'': selects all MissingTiddlers
* ''orphan'': selects all OrphanTiddlers
2 changes: 1 addition & 1 deletion editions/tw5.com/tiddlers/concepts/ShadowTiddlers.tid
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ ShadowTiddlers can be overridden with an ordinary tiddler of the same name. If t

The current shadow tiddlers are:

<$list filter="[is[shadow]sort[title]]"/>
<$list filter="[all[shadows]sort[title]]"/>
2 changes: 1 addition & 1 deletion editions/tw5.com/tiddlers/concepts/SystemTags.tid
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ System tags are used to give special behaviour to tiddlers:

These are the system tags in use in this wiki:

{{{ [is[shadow]tags[]prefix[$:/]] [!is[shadow]tags[]prefix[$:/]] +[sort[title]] }}}
{{{ [all[tiddlers+shadows]tags[]prefix[$:/]] +[sort[title]] }}}
4 changes: 2 additions & 2 deletions editions/tw5.com/tiddlers/concepts/TemplateTiddlers.tid
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
created: 20140107114355828
modified: 20140107114636001
modified: 20140317213147507
tags: concepts
title: TemplateTiddlers
type: text/vnd.tiddlywiki
Expand Down Expand Up @@ -37,4 +37,4 @@ The TiddlerWidget is used to change the current tiddler. Consider a tiddler "C"

It is still transcluding tiddler "A", but now it is also setting the current tiddler to "A". The result is therefore that the field "myfield" for tiddler "A" is displayed.

The shorthand syntax for transcluding actually generates both a TiddlerWidget and a TranscludeWidget.
The shorthand syntax for [[Transclusion in WikiText]] actually generates both a TiddlerWidget and a TranscludeWidget.
2 changes: 1 addition & 1 deletion editions/tw5.com/tiddlers/concepts/TiddlerFields.tid
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@ The TiddlyWebAdaptor uses a few more fields:
|`bag` |BagField |{{$:/docs/fields/bag}} |
|`revision` |RevisionField |{{$:/docs/fields/revision}} |

See the ''Internals'' tab of the [[control panel|$:/ControlPanel]] for details of the fields used in this wiki.
See the ''Advanced > TiddlerFields'' tab of the [[control panel|$:/ControlPanel]] for details of the fields used in this wiki.
Loading