diff --git a/boot/boot.js b/boot/boot.js
index 1468e00b6..64cedab77 100644
--- a/boot/boot.js
+++ b/boot/boot.js
@@ -1967,10 +1967,10 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
var value = tiddler[name];
switch(fieldInfo.source) {
case "subdirectories":
- value = path.relative(rootPath, filename).split('/').slice(0, -1);
+ value = path.relative(rootPath, filename).split(path.sep).slice(0, -1);
break;
case "filepath":
- value = path.relative(rootPath, filename);
+ value = path.relative(rootPath, filename).split(path.sep).join('/');
break;
case "filename":
value = path.basename(filename);
@@ -2438,6 +2438,7 @@ $tw.boot.initStartup = function(options) {
$tw.utils.registerFileType("image/svg+xml","utf8",".svg",{flags:["image"]});
$tw.utils.registerFileType("image/vnd.microsoft.icon","base64",".ico",{flags:["image"]});
$tw.utils.registerFileType("image/x-icon","base64",".ico",{flags:["image"]});
+ $tw.utils.registerFileType("application/wasm","base64",".wasm");
$tw.utils.registerFileType("application/font-woff","base64",".woff");
$tw.utils.registerFileType("application/x-font-ttf","base64",".woff");
$tw.utils.registerFileType("application/font-woff2","base64",".woff2");
@@ -2452,8 +2453,12 @@ $tw.boot.initStartup = function(options) {
$tw.utils.registerFileType("text/x-markdown","utf8",[".md",".markdown"]);
$tw.utils.registerFileType("application/enex+xml","utf8",".enex");
$tw.utils.registerFileType("application/vnd.openxmlformats-officedocument.wordprocessingml.document","base64",".docx");
+ $tw.utils.registerFileType("application/msword","base64",".doc");
$tw.utils.registerFileType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","base64",".xlsx");
+ $tw.utils.registerFileType("application/excel","base64",".xls");
+ $tw.utils.registerFileType("application/vnd.ms-excel","base64",".xls");
$tw.utils.registerFileType("application/vnd.openxmlformats-officedocument.presentationml.presentation","base64",".pptx");
+ $tw.utils.registerFileType("application/mspowerpoint","base64",".ppt");
$tw.utils.registerFileType("text/x-bibtex","utf8",".bib",{deserializerType:"application/x-bibtex"});
$tw.utils.registerFileType("application/x-bibtex","utf8",".bib");
$tw.utils.registerFileType("application/epub+zip","base64",".epub");
diff --git a/core/language/en-GB/Docs/ModuleTypes.multids b/core/language/en-GB/Docs/ModuleTypes.multids
index 9a03d8887..5d5902c76 100644
--- a/core/language/en-GB/Docs/ModuleTypes.multids
+++ b/core/language/en-GB/Docs/ModuleTypes.multids
@@ -9,7 +9,7 @@ config: Data to be inserted into `$tw.config`.
filteroperator: Individual filter operator methods.
global: Global data to be inserted into `$tw`.
info: Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin.
-isfilteroperator: Operands for the ''is'' filter operator.
+isfilteroperator: Parameters for the ''is'' filter operator.
library: Generic module type for general purpose JavaScript modules.
macro: JavaScript macro definitions.
parser: Parsers for different content types.
diff --git a/core/language/en-GB/Misc.multids b/core/language/en-GB/Misc.multids
index 2c10d1acb..b5e6e2374 100644
--- a/core/language/en-GB/Misc.multids
+++ b/core/language/en-GB/Misc.multids
@@ -30,7 +30,7 @@ Error/DeserializeOperator/UnknownDeserializer: Filter Error: Unknown deserialize
Error/Filter: Filter error
Error/FilterSyntax: Syntax error in filter expression
Error/FilterRunPrefix: Filter Error: Unknown prefix for filter run
-Error/IsFilterOperator: Filter Error: Unknown operand for the 'is' filter operator
+Error/IsFilterOperator: Filter Error: Unknown parameter for the 'is' filter operator
Error/FormatFilterOperator: Filter Error: Unknown suffix for the 'format' filter operator
Error/LoadingPluginLibrary: Error loading plugin library
Error/NetworkErrorAlert: `
''Network Error''
It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.
''Any unsaved changes will be automatically synchronised when connectivity is restored''.`
diff --git a/core/ui/AdvancedSearch/Standard.tid b/core/ui/AdvancedSearch/Standard.tid
index 0690130e4..41ddcf4bc 100644
--- a/core/ui/AdvancedSearch/Standard.tid
+++ b/core/ui/AdvancedSearch/Standard.tid
@@ -54,7 +54,7 @@ caption: {{$:/language/Search/Standard/Caption}}
variable="listItem">
<$vars
userInput={{{ [[$:/temp/advancedsearch]get[text]] }}}
- configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}
+ configTiddler={{{ [[$:/state/advancedsearch/standard/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}
searchListState="$:/temp/advancedsearch/selected-item">
<$list
filter="[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]"
diff --git a/core/ui/EditTemplate/body/default.tid b/core/ui/EditTemplate/body/default.tid
index 04cc64436..d004032f1 100644
--- a/core/ui/EditTemplate/body/default.tid
+++ b/core/ui/EditTemplate/body/default.tid
@@ -1,5 +1,9 @@
title: $:/core/ui/EditTemplate/body/default
+\function edit-preview-state()
+[{$:/config/ShowEditPreview/PerTiddler}!match[yes]then[$:/state/showeditpreview]] :else[] +[get[text]] :else[[no]]
+\end
+
\define config-visibility-title()
$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$
\end
@@ -10,12 +14,13 @@ $:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$
\whitespace trim
<$let
- editPreviewStateTiddler={{{ [{$:/config/ShowEditPreview/PerTiddler}!match[yes]then[$:/state/showeditpreview]] :else[] }}}
+ qualified-preview-state=<>
+ editPreviewStateTiddler={{{ [{$:/config/ShowEditPreview/PerTiddler}!match[yes]then[$:/state/showeditpreview]] :else[] }}}
importTitle=<>
importState=<> >
<$dropzone importTitle=<> autoOpenOnImport="no" contentTypesFilter={{$:/config/Editor/ImportContentTypesFilter}} class="tc-dropzone-editor" enable={{{ [{$:/config/DragAndDrop/Enable}match[no]] :else[subfilter{$:/config/Editor/EnableImportFilter}then[yes]else[no]] }}} filesOnly="yes" actions=<> >
-
get[text]match[yes]then[tc-tiddler-preview]else[tc-tiddler-preview-hidden]] [[tc-tiddler-editor]] +[join[ ]] }}}>
+
match[yes]then[tc-tiddler-preview]else[tc-tiddler-preview-hidden]] [[tc-tiddler-editor]] +[join[ ]] }}}>
<$transclude tiddler="$:/core/ui/EditTemplate/body/editor" mode="inline"/>
diff --git a/core/ui/EditTemplate/tags.tid b/core/ui/EditTemplate/tags.tid
index 5084478b4..c8d4131fe 100644
--- a/core/ui/EditTemplate/tags.tid
+++ b/core/ui/EditTemplate/tags.tid
@@ -3,39 +3,63 @@ tags: $:/tags/EditTemplate
\whitespace trim
-\define lingo-base() $:/language/EditTemplate/
+\procedure lingo-base() $:/language/EditTemplate/
-\define tag-styles()
-background-color:$(backgroundColor)$;
-fill:$(foregroundColor)$;
-color:$(foregroundColor)$;
+\procedure tag-body-inner(colour,fallbackTarget,colourA,colourB,icon,tagField:"tags")
+<$wikify name="foregroundColor"
+ text="""<$macrocall $name="contrastcolour"
+ target=<
>
+ fallbackTarget=<>
+ colourA=<>
+ colourB=<>/>
+ """
+>
+ <$let backgroundColor=<> >
+ >
+ style.color=<>
+ style.fill=<>
+ style.background-color=<>
+ >
+ <$transclude tiddler=<>/>
+ <$view field="title" format="text"/>
+ <$button class="tc-btn-invisible tc-remove-tag-button"
+ style.fill=<>
+ >
+ <$action-listops $tiddler=<> $field=<> $subfilter="-[{!!title}]"/>
+ {{$:/core/images/close-button}}
+ $button>
+
+ $let>
+$wikify>
\end
-\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon,tagField:"tags")
-\whitespace trim
-<$vars foregroundColor=<> backgroundColor="""$colour$""">
-> class="tc-tag-label tc-tag-list-item tc-small-gap-right" data-tag-title=<>>
-<$transclude tiddler="""$icon$"""/><$view field="title" format="text"/>
-<$button class="tc-btn-invisible tc-remove-tag-button" style=<>><$action-listops $tiddler=<> $field=<<__tagField__>> $subfilter="-[{!!title}]"/>{{$:/core/images/close-button}}$button>
-
-$vars>
+\procedure tag-body(colour,palette,icon,tagField:"tags")
+<$macrocall $name="tag-body-inner"
+ colour=`$(colour)$`
+ colourA={{{ [getindex[foreground]] }}}
+ colourB={{{ [getindex[background]] }}}
+ fallbackTarget={{{ [getindex[tag-background]] }}}
+ icon=<>
+ tagField=<>
+/>
\end
-\define tag-body(colour,palette,icon,tagField:"tags")
-<$macrocall $name="tag-body-inner" colour="""$colour$""" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon="""$icon$""" tagField=<<__tagField__>>/>
-\end
-
-\define edit-tags-template(tagField:"tags")
-\whitespace trim
+\procedure edit-tags-template(tagField:"tags")
-<$list filter="[list[!!$tagField$]sort[title]]" storyview="pop">
-<$macrocall $name="tag-body" colour={{{ [] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]] }}} palette={{$:/palette}} icon={{{ [] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerIconFilter]!is[draft]get[text]] }}} tagField=<<__tagField__>>/>
-$list>
-<$vars tabIndex={{$:/config/EditTabIndex}} cancelPopups="yes">
-<$macrocall $name="tag-picker" tagField=<<__tagField__>>/>
-$vars>
+ <$list filter="[getenlist-input[]sort[title]]" storyview="pop">
+ <$macrocall $name="tag-body"
+ colour={{{ [] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]] }}}
+ palette={{$:/palette}}
+ icon={{{ [] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerIconFilter]!is[draft]get[text]] }}}
+ tagField=<>
+ />
+ $list>
+ <$let tabIndex={{$:/config/EditTabIndex}} cancelPopups="yes">
+ <$macrocall $name="tag-picker" tagField=<>/>
+ $let>
\end
-<$set name="saveTiddler" value=<>>
-<$macrocall $name="edit-tags-template" tagField=<>/>
-$set>
+<$let saveTiddler=<>>
+ <$macrocall $name="edit-tags-template" tagField=<>/>
+$let>
diff --git a/core/ui/EditorToolbar/preview.tid b/core/ui/EditorToolbar/preview.tid
index ea49c971a..d5c63eb5f 100644
--- a/core/ui/EditorToolbar/preview.tid
+++ b/core/ui/EditorToolbar/preview.tid
@@ -10,7 +10,7 @@ shortcuts: ((preview))
\whitespace trim
- <$transclude $tiddler={{{ [get[text]match[yes]then[$:/core/images/preview-open]else[$:/core/images/preview-closed]] }}} />
+ <$transclude $tiddler={{{ [match[yes]then[$:/core/images/preview-open]else[$:/core/images/preview-closed]] }}} />
<$action-setfield $tiddler=<> $value={{{ [get[text]toggle[yes],[no]] }}} />
-<$action-sendmessage $message="tm-edit-text-operation" $param="focus-editor"/>
\ No newline at end of file
+<$action-sendmessage $message="tm-edit-text-operation" $param="focus-editor"/>
diff --git a/core/wiki/macros/CSS.tid b/core/wiki/macros/CSS.tid
index 9e6239e90..0fcf5d86d 100644
--- a/core/wiki/macros/CSS.tid
+++ b/core/wiki/macros/CSS.tid
@@ -1,76 +1,69 @@
title: $:/core/macros/CSS
-tags: $:/tags/Macro
+tags: $:/tags/Global
-\define colour(name)
-<$transclude tiddler={{$:/palette}} index="$name$"><$transclude tiddler="$:/palettes/Vanilla" index="$name$"><$transclude tiddler="$:/config/DefaultColourMappings/$name$"/>$transclude>$transclude>
+\procedure colour(name)
+\whitespace trim
+<$transclude $tiddler={{$:/palette}} $index=`$(name)$`>
+ <$transclude $tiddler="$:/palettes/Vanilla" $index=`$(name)$`>
+ <$transclude $tiddler=`$:/config/DefaultColourMappings/$(name)$`/>
+ $transclude>
+$transclude>
\end
-\define color(name)
-<>
+\procedure color(name)
+<$macrocall $name=colour name=`$(name)$`/>
\end
-\define box-shadow(shadow)
-``
- -webkit-box-shadow: $shadow$;
- -moz-box-shadow: $shadow$;
- box-shadow: $shadow$;
-``
+\function box-shadow(shadow)
+[[ -webkit-box-shadow: $(shadow)$;
+ -moz-box-shadow: $(shadow)$;
+ box-shadow: $(shadow)$;]substitute[]]
\end
-\define filter(filter)
-``
- -webkit-filter: $filter$;
- -moz-filter: $filter$;
- filter: $filter$;
-``
+\function filter(filter)
+[[ -webkit-filter: $(filter)$;
+ -moz-filter: $(filter)$;
+ filter: $(filter)$;]substitute[]]
\end
-\define transition(transition)
-``
- -webkit-transition: $transition$;
- -moz-transition: $transition$;
- transition: $transition$;
-``
+\function transition(transition)
+[[ -webkit-transition: $(transition)$;
+ -moz-transition: $(transition)$;
+ transition: $(transition)$;]substitute[]]
\end
-\define transform-origin(origin)
-``
- -webkit-transform-origin: $origin$;
- -moz-transform-origin: $origin$;
- transform-origin: $origin$;
-``
+\function transform-origin(origin)
+[[ -webkit-transform-origin: $(origin)$;
+ -moz-transform-origin: $(origin)$;
+ transform-origin: $(origin)$;]substitute[]]
\end
-\define background-linear-gradient(gradient)
-``
-background-image: linear-gradient($gradient$);
-background-image: -o-linear-gradient($gradient$);
-background-image: -moz-linear-gradient($gradient$);
-background-image: -webkit-linear-gradient($gradient$);
-background-image: -ms-linear-gradient($gradient$);
-``
+\function background-linear-gradient(gradient)
+[[ background-image: linear-gradient($(gradient)$);
+ background-image: -o-linear-gradient($(gradient)$);
+ background-image: -moz-linear-gradient($(gradient)$);
+ background-image: -webkit-linear-gradient($(gradient)$);
+ background-image: -ms-linear-gradient($(gradient)$);]substitute[]]
\end
-\define column-count(columns)
-``
--moz-column-count: $columns$;
--webkit-column-count: $columns$;
-column-count: $columns$;
-``
+\function column-count(columns)
+[[-moz-column-count: $(columns)$;
+ -webkit-column-count: $(columns)$;
+ column-count: $(columns)$;]substitute[]]
\end
-\define datauri(title)
-<$macrocall $name="makedatauri" type={{$title$!!type}} text={{$title$}} _canonical_uri={{$title$!!_canonical_uri}}/>
+\procedure datauri(title)
+<$macrocall $name="makedatauri" type={{{ [get[type]] }}} text={{{ [get[text]] }}} _canonical_uri={{{ [get[_canonical_uri]] }}}/>
\end
-\define if-sidebar(text)
-<$reveal state="$:/state/sidebar" type="match" text="yes" default="yes">$text$$reveal>
+\procedure if-sidebar(text)
+<$reveal state="$:/state/sidebar" type="match" text="yes" default="yes"><>$reveal>
\end
-\define if-no-sidebar(text)
-<$reveal state="$:/state/sidebar" type="nomatch" text="yes" default="yes">$text$$reveal>
+\procedure if-no-sidebar(text)
+<$reveal state="$:/state/sidebar" type="nomatch" text="yes" default="yes"><>$reveal>
\end
-\define if-background-attachment(text)
-<$reveal state="$:/themes/tiddlywiki/vanilla/settings/backgroundimage" type="nomatch" text="">$text$$reveal>
+\procedure if-background-attachment(text)
+<$reveal state="$:/themes/tiddlywiki/vanilla/settings/backgroundimage" type="nomatch" text=""><>$reveal>
\end
diff --git a/core/wiki/macros/copy-to-clipboard.tid b/core/wiki/macros/copy-to-clipboard.tid
index 910e955a9..8903e6722 100644
--- a/core/wiki/macros/copy-to-clipboard.tid
+++ b/core/wiki/macros/copy-to-clipboard.tid
@@ -1,20 +1,26 @@
title: $:/core/macros/copy-to-clipboard
-tags: $:/tags/Macro
+tags: $:/tags/Global
-\define copy-to-clipboard(src,class:"tc-btn-invisible",style)
\whitespace trim
-<$button class=<<__class__>> style=<<__style__>> message="tm-copy-to-clipboard" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>
-{{$:/core/images/copy-clipboard}}
-
-<$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>
+
+\procedure copy-to-clipboard(src,class:"tc-btn-invisible",style)
+<$button message="tm-copy-to-clipboard"
+ param=<>
+ class=<>
+ style=<