| 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; | ||
|
|
||
| })(); |
| 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; | ||
| }; | ||
|
|
||
| })(); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| title: $:/AdvancedSearch | ||
|
|
||
| <div class="tw-advanced-search"> | ||
| <<tabs "[all[tiddlers+shadows]tag[$:/tags/AdvancedSearch]!has[draft.of]]" "$:/core/ui/AdvancedSearch/System">> | ||
| </div> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,5 @@ | ||
| title: $:/ControlPanel | ||
|
|
||
| <div class="tw-control-panel"> | ||
| <<tabs "[all[tiddlers+shadows]tag[$:/tags/ControlPanel]!has[draft.of]]" "$:/core/ui/ControlPanel/Basics">> | ||
| </div> |
| 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="[all[tiddlers+shadows]tag[$:/tags/EditToolbar]!has[draft.of]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list> </span> |
| 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}} | ||
|
|
| 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}} | ||
|
|
| 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}} | ||
|
|
| 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}} | ||
|
|
| 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}} | ||
|
|
| 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}} | ||
|
|
| 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}} | ||
|
|
| 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}} | ||
|
|
| 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}} | ||
|
|
| 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}} | ||
|
|
| 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> |
| 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"> | ||
| <$transclude tiddler="$:/core/ui/ListItemTemplate"/> | ||
| <hr> | ||
| <$list filter="[all[current]backlinks[]sort[title]]" template="$:/core/ui/ListItemTemplate"/> | ||
| </div> | ||
| </$reveal> | ||
| </div> |
| 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> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,17 +1,38 @@ | ||
| title: $:/core/ui/PageTemplate/sidebar | ||
| tags: $:/tags/PageTemplate | ||
|
|
||
| <$scrollable fallthrough="no" class="tw-sidebar-scrollable"> | ||
|
|
||
| <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="[all[tiddlers+shadows]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem"> | ||
|
|
||
| <$transclude tiddler=<<listItem>> mode="inline"/> | ||
|
|
||
| </$list> | ||
|
|
||
| </div> | ||
|
|
||
| <$transclude tiddler="$:/core/ui/SideBarLists" mode="inline"/> | ||
|
|
||
| </$reveal> | ||
|
|
||
| </div> | ||
|
|
||
| </$scrollable> |
| 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> |
| 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> |
| 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=""> <$link to="$:/AdvancedSearch" class="btn-invisible">…</$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> |
| 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"> | ||
| <$text text=<<listItem>>/> | ||
| </td> | ||
| <td class="tw-view-field-value"> | ||
| <$view field=<<listItem>>/> | ||
| </td> | ||
| </tr> |
| 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="[all[current]fields[]sort[title]] -text" template="$:/core/ui/TiddlerFieldTemplate" variable="listItem"/> | ||
| </tbody> | ||
| </table> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,3 @@ | ||
| title: $:/core/ui/TiddlerInfo | ||
|
|
||
| <<tabs "[all[tiddlers+shadows]tag[$:/tags/TiddlerInfo]!has[draft.of]]" "$:/core/ui/TiddlerInfo/References">> |
| 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> |
| 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> |
| 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> |
| 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> |
| 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"> | ||
| <$list filter="[untagged[]!is[system]] -[tags[]] +[sort[title]]" template="$:/core/ui/ListItemTemplate"/> | ||
| </div> | ||
| </$reveal> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,8 +1,8 @@ | ||
| title: $:/core/ui/ViewTemplate | ||
|
|
||
| \define frame-classes() | ||
| 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="[all[tiddlers+shadows]tag[$:/tags/ViewTemplate]!has[draft.of]]" variable="listItem"><$transclude tiddler=<<listItem>>/></$list> | ||
| </div> | ||
| </$tiddler></$set></$set> |
| 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 tiddler="$:/language/MissingTiddler/Hint"/> | ||
|
|
||
| </$transclude> | ||
|
|
||
| </div> |
| 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> |
| 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> |
| 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="[all[current]tags[]sort[title]]" template="$:/core/ui/TagTemplate" storyview="pop"/></div> |
| 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/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]] |
| 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]] [[$:/core/ui/PageTemplate/alerts]] [[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] | ||
|
|
| 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]] |
| 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/classic]] [[$:/core/ui/ViewTemplate/body]] |
| 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"); | ||
| }); | ||
|
|
||
| }); | ||
|
|
||
| })(); |
| 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> |
| 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]]`). |
| 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 | ||
| ``` |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,8 +1,27 @@ | ||
| created: 20140320230543190 | ||
| modified: 20140320231444981 | ||
| tags: introduction community | ||
| title: Examples | ||
| type: text/vnd.tiddlywiki | ||
|
|
||
| This collection showcases inspiring and interesting examples of TiddlyWiki being used in the wild. | ||
|
|
||
| Submit new entries to this collection via GitHub, Twitter or by posting in the [[TiddlyWiki Groups]]. | ||
|
|
||
| <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> |
| 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> |
| 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 | ||
|
|
| 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> |
| 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 |