mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-11-04 09:33:00 +00:00 
			
		
		
		
	Lots of improvements to the plugin library
* Moved “add new plugin” into a modal wizard * Adopt big friendly buttons * Add plugin icons and readmes to “add new plugin” modal * Use tabs for splitting plugins/themes/languages * Consistent styling between the “add new plugin” modal and the “installed plugins” control panel tab * Behind the scenes, moved from addressing the library as `recipes/defaults/tiddlers/<etc>` to `recipes/library/tiddlers<etc>`
This commit is contained in:
		@@ -38,8 +38,8 @@ Palette/Editor/Reset/Caption: reset
 | 
				
			|||||||
Palette/HideEditor/Caption: hide editor
 | 
					Palette/HideEditor/Caption: hide editor
 | 
				
			||||||
Palette/Prompt: Current palette:
 | 
					Palette/Prompt: Current palette:
 | 
				
			||||||
Palette/ShowEditor/Caption: show editor
 | 
					Palette/ShowEditor/Caption: show editor
 | 
				
			||||||
Plugins/Add/Hint: Install new plugins
 | 
					Plugins/Add/Hint: Install plugins from the official library
 | 
				
			||||||
Plugins/Add/Caption: Add
 | 
					Plugins/Add/Caption: Get more plugins
 | 
				
			||||||
Plugins/Caption: Plugins
 | 
					Plugins/Caption: Plugins
 | 
				
			||||||
Plugins/Disable/Caption: disable
 | 
					Plugins/Disable/Caption: disable
 | 
				
			||||||
Plugins/Disable/Hint: Disable this plugin when reloading page
 | 
					Plugins/Disable/Hint: Disable this plugin when reloading page
 | 
				
			||||||
@@ -47,11 +47,13 @@ Plugins/Disabled/Status: (disabled)
 | 
				
			|||||||
Plugins/Empty/Hint: None
 | 
					Plugins/Empty/Hint: None
 | 
				
			||||||
Plugins/Enable/Caption: enable
 | 
					Plugins/Enable/Caption: enable
 | 
				
			||||||
Plugins/Enable/Hint: Enable this plugin when reloading page
 | 
					Plugins/Enable/Hint: Enable this plugin when reloading page
 | 
				
			||||||
Plugins/Installed/Hint: Currently installed plugins
 | 
					Plugins/Installed/Hint: Currently installed plugins:
 | 
				
			||||||
Plugins/Installed/Caption: Installed
 | 
					Plugins/Languages/Caption: Languages
 | 
				
			||||||
Plugins/Language/Prompt: Languages
 | 
					Plugins/Languages/Hint: Language pack plugins
 | 
				
			||||||
Plugins/Plugin/Prompt: Plugins
 | 
					Plugins/Plugins/Caption: Plugins
 | 
				
			||||||
Plugins/Theme/Prompt: Themes
 | 
					Plugins/Plugins/Hint: Plugins
 | 
				
			||||||
 | 
					Plugins/Themes/Caption: Themes
 | 
				
			||||||
 | 
					Plugins/Themes/Hint: Theme plugins
 | 
				
			||||||
Saving/Caption: Saving
 | 
					Saving/Caption: Saving
 | 
				
			||||||
Saving/Heading: Saving
 | 
					Saving/Heading: Saving
 | 
				
			||||||
Saving/TiddlySpot/Advanced/Heading: Advanced Settings
 | 
					Saving/TiddlySpot/Advanced/Heading: Advanced Settings
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,20 +39,44 @@ Command.prototype.execute = function() {
 | 
				
			|||||||
		fs = require("fs"),
 | 
							fs = require("fs"),
 | 
				
			||||||
		path = require("path"),
 | 
							path = require("path"),
 | 
				
			||||||
		containerTitle = this.params[0],
 | 
							containerTitle = this.params[0],
 | 
				
			||||||
		basepath = this.params[1],
 | 
							filter = this.params[1],
 | 
				
			||||||
		skinnyListTitle = this.params[2];
 | 
							basepath = this.params[2],
 | 
				
			||||||
 | 
							skinnyListTitle = this.params[3];
 | 
				
			||||||
	// Get the container tiddler as data
 | 
						// Get the container tiddler as data
 | 
				
			||||||
	var containerData = self.commander.wiki.getTiddlerData(containerTitle,undefined);
 | 
						var containerData = self.commander.wiki.getTiddlerData(containerTitle,undefined);
 | 
				
			||||||
	if(!containerData) {
 | 
						if(!containerData) {
 | 
				
			||||||
		return "'" + containerTitle + "' is not a tiddler bundle";
 | 
							return "'" + containerTitle + "' is not a tiddler bundle";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// Save each JSON file and collect the skinny data
 | 
						// Filter the list of plugins
 | 
				
			||||||
	var skinnyList = [];
 | 
						var pluginList = [];
 | 
				
			||||||
	$tw.utils.each(containerData.tiddlers,function(tiddler,title) {
 | 
						$tw.utils.each(containerData.tiddlers,function(tiddler,title) {
 | 
				
			||||||
 | 
							pluginList.push(title);
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
						var filteredPluginList;
 | 
				
			||||||
 | 
						if(filter) {
 | 
				
			||||||
 | 
							filteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							filteredPluginList = pluginList;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Iterate through the plugins
 | 
				
			||||||
 | 
						var skinnyList = [];
 | 
				
			||||||
 | 
						$tw.utils.each(filteredPluginList,function(title) {
 | 
				
			||||||
 | 
							var tiddler = containerData.tiddlers[title];
 | 
				
			||||||
 | 
							// Save each JSON file and collect the skinny data
 | 
				
			||||||
		var pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + ".json");
 | 
							var pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + ".json");
 | 
				
			||||||
		$tw.utils.createFileDirectories(pathname);
 | 
							$tw.utils.createFileDirectories(pathname);
 | 
				
			||||||
		fs.writeFileSync(pathname,JSON.stringify(tiddler,null,$tw.config.preferences.jsonSpaces),"utf8");
 | 
							fs.writeFileSync(pathname,JSON.stringify(tiddler,null,$tw.config.preferences.jsonSpaces),"utf8");
 | 
				
			||||||
		skinnyList.push($tw.utils.extend({},tiddler,{text: undefined}));
 | 
							// Collect the skinny list data
 | 
				
			||||||
 | 
							var pluginTiddlers = JSON.parse(tiddler.text),
 | 
				
			||||||
 | 
								readmeContent = (pluginTiddlers.tiddlers[title + "/readme"] || {}).text,
 | 
				
			||||||
 | 
								iconTiddler = pluginTiddlers.tiddlers[title + "/icon"] || {},
 | 
				
			||||||
 | 
								iconType = iconTiddler.type,
 | 
				
			||||||
 | 
								iconText = iconTiddler.text,
 | 
				
			||||||
 | 
								iconContent;
 | 
				
			||||||
 | 
							if(iconType && iconText) {
 | 
				
			||||||
 | 
								iconContent = $tw.utils.makeDataUri(iconText,iconType);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							skinnyList.push($tw.utils.extend({},tiddler,{text: undefined, readme: readmeContent, icon: iconContent}));
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
	// Save the catalogue tiddler
 | 
						// Save the catalogue tiddler
 | 
				
			||||||
	if(skinnyListTitle) {
 | 
						if(skinnyListTitle) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,7 +82,7 @@ exports.startup = function() {
 | 
				
			|||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					iframeInfo.domNode.contentWindow.postMessage({
 | 
										iframeInfo.domNode.contentWindow.postMessage({
 | 
				
			||||||
						verb: "GET",
 | 
											verb: "GET",
 | 
				
			||||||
						url: "recipes/default/tiddlers.json",
 | 
											url: "recipes/library/tiddlers.json",
 | 
				
			||||||
						cookies: {
 | 
											cookies: {
 | 
				
			||||||
							type: "save-info",
 | 
												type: "save-info",
 | 
				
			||||||
							infoTitlePrefix: paramObject.infoTitlePrefix || "$:/temp/RemoteAssetInfo/",
 | 
												infoTitlePrefix: paramObject.infoTitlePrefix || "$:/temp/RemoteAssetInfo/",
 | 
				
			||||||
@@ -104,7 +104,7 @@ exports.startup = function() {
 | 
				
			|||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					iframeInfo.domNode.contentWindow.postMessage({
 | 
										iframeInfo.domNode.contentWindow.postMessage({
 | 
				
			||||||
						verb: "GET",
 | 
											verb: "GET",
 | 
				
			||||||
						url: "recipes/default/tiddlers/" + encodeURIComponent(title) + ".json",
 | 
											url: "recipes/library/tiddlers/" + encodeURIComponent(title) + ".json",
 | 
				
			||||||
						cookies: {
 | 
											cookies: {
 | 
				
			||||||
							type: "save-tiddler",
 | 
												type: "save-tiddler",
 | 
				
			||||||
							url: url
 | 
												url: url
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,88 +0,0 @@
 | 
				
			|||||||
title: $:/core/ui/ControlPanel/Plugins/Add
 | 
					 | 
				
			||||||
tags: $:/tags/ControlPanel/Plugins
 | 
					 | 
				
			||||||
caption: {{$:/language/ControlPanel/Plugins/Add/Caption}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\define lingo-base() $:/language/ControlPanel/Plugins/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\define install-plugin-button()
 | 
					 | 
				
			||||||
<$button>
 | 
					 | 
				
			||||||
<$action-sendmessage $message="tm-load-plugin-from-library" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>
 | 
					 | 
				
			||||||
<$list filter="[<assetInfo>get[original-title]get[version]]" variable="installedVersion" emptyMessage="""install""">
 | 
					 | 
				
			||||||
reinstall
 | 
					 | 
				
			||||||
</$list>
 | 
					 | 
				
			||||||
</$button>
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\define display-plugin-info()
 | 
					 | 
				
			||||||
<tr>
 | 
					 | 
				
			||||||
<td>
 | 
					 | 
				
			||||||
<<install-plugin-button>>
 | 
					 | 
				
			||||||
<br>
 | 
					 | 
				
			||||||
</td>
 | 
					 | 
				
			||||||
<td>
 | 
					 | 
				
			||||||
''<$view tiddler=<<assetInfo>> field="description"/>''
 | 
					 | 
				
			||||||
<br>
 | 
					 | 
				
			||||||
<$view tiddler=<<assetInfo>> field="original-title"/>
 | 
					 | 
				
			||||||
</td>
 | 
					 | 
				
			||||||
<td>
 | 
					 | 
				
			||||||
<$view tiddler=<<assetInfo>> field="version"/>
 | 
					 | 
				
			||||||
<$list filter="[<assetInfo>get[original-title]get[version]]" variable="installedVersion">
 | 
					 | 
				
			||||||
<br>
 | 
					 | 
				
			||||||
<em>
 | 
					 | 
				
			||||||
Installed:
 | 
					 | 
				
			||||||
<br>
 | 
					 | 
				
			||||||
<$text text=<<installedVersion>>/>
 | 
					 | 
				
			||||||
</em>
 | 
					 | 
				
			||||||
</$list>
 | 
					 | 
				
			||||||
</td>
 | 
					 | 
				
			||||||
</tr>
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\define load-plugin-library-button()
 | 
					 | 
				
			||||||
<$button>
 | 
					 | 
				
			||||||
<$action-sendmessage $message="tm-load-plugin-library" url={{!!url}} infoTitlePrefix="$:/temp/RemoteAssetInfo/"/>
 | 
					 | 
				
			||||||
open plugin library
 | 
					 | 
				
			||||||
</$button>
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\define display-server-connection()
 | 
					 | 
				
			||||||
<$list filter="[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]" variable="connectionTiddler" emptyMessage=<<load-plugin-library-button>>>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Search: <$edit-text tiddler="""$:/temp/RemoteAssetSearch/$(currentTiddler)$""" default="" type="search" tag="input" focus="true"/>
 | 
					 | 
				
			||||||
<$select tiddler="$:/temp/RemoteAssetCategory/$(currentTiddler)$" default="plugin">
 | 
					 | 
				
			||||||
<option value="plugin">Plugins</option>
 | 
					 | 
				
			||||||
<option value="theme">Themes</option>
 | 
					 | 
				
			||||||
<option value="language">Languages</option>
 | 
					 | 
				
			||||||
</$select>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<$set name="pluginType" filter="[[$:/temp/RemoteAssetCategory/$(currentTiddler)$]is[tiddler]]" value={{$:/temp/RemoteAssetCategory/$(currentTiddler)$}} emptyValue="plugin">
 | 
					 | 
				
			||||||
<table class="tc-plugin-library-listing">
 | 
					 | 
				
			||||||
<tbody>
 | 
					 | 
				
			||||||
<$list filter="[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type<pluginType>search{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[description]]" variable="assetInfo">
 | 
					 | 
				
			||||||
<<display-plugin-info>>
 | 
					 | 
				
			||||||
</$list>
 | 
					 | 
				
			||||||
</tbody>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
</$set>
 | 
					 | 
				
			||||||
</$list>
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\define plugin-library-listing()
 | 
					 | 
				
			||||||
<$list filter="[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]">
 | 
					 | 
				
			||||||
<div class="tc-plugin-library">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
!! <$link><$transclude field="caption"><$view field="title"/></$transclude></$link>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//<$view field="url"/>//
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<$transclude/>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<<display-server-connection>>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
</$list>
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div>
 | 
					 | 
				
			||||||
<<plugin-library-listing>>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,101 +0,0 @@
 | 
				
			|||||||
title: $:/core/ui/ControlPanel/Plugins/Installed
 | 
					 | 
				
			||||||
tags: $:/tags/ControlPanel/Plugins
 | 
					 | 
				
			||||||
caption: {{$:/language/ControlPanel/Plugins/Installed/Caption}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
\define lingo-base() $:/language/ControlPanel/Plugins/
 | 
					 | 
				
			||||||
\define popup-state-macro()
 | 
					 | 
				
			||||||
$(qualified-state)$-$(currentTiddler)$
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
\define tabs-state-macro()
 | 
					 | 
				
			||||||
$(popup-state)$-$(pluginInfoType)$
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
\define plugin-icon-title()
 | 
					 | 
				
			||||||
$(currentTiddler)$/icon
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
\define plugin-disable-title()
 | 
					 | 
				
			||||||
$:/config/Plugins/Disabled/$(currentTiddler)$
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
\define plugin-table-body(type,disabledMessage)
 | 
					 | 
				
			||||||
<div class="tc-plugin-info-chunk">
 | 
					 | 
				
			||||||
<$reveal type="nomatch" state=<<popup-state>> text="yes">
 | 
					 | 
				
			||||||
<$button class="tc-btn-invisible tc-btn-dropdown" set=<<popup-state>> setTo="yes">
 | 
					 | 
				
			||||||
{{$:/core/images/right-arrow}}
 | 
					 | 
				
			||||||
</$button>
 | 
					 | 
				
			||||||
</$reveal>
 | 
					 | 
				
			||||||
<$reveal type="match" state=<<popup-state>> text="yes">
 | 
					 | 
				
			||||||
<$button class="tc-btn-invisible tc-btn-dropdown" set=<<popup-state>> setTo="no">
 | 
					 | 
				
			||||||
{{$:/core/images/down-arrow}}
 | 
					 | 
				
			||||||
</$button>
 | 
					 | 
				
			||||||
</$reveal>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
<div class="tc-plugin-info-chunk">
 | 
					 | 
				
			||||||
<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>
 | 
					 | 
				
			||||||
<$transclude tiddler="$:/core/images/plugin-generic-$type$"/>
 | 
					 | 
				
			||||||
</$transclude>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
<div class="tc-plugin-info-chunk">
 | 
					 | 
				
			||||||
<div>
 | 
					 | 
				
			||||||
''<$view field="description"><$view field="title"/></$view>'' $disabledMessage$
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
<div>
 | 
					 | 
				
			||||||
<$view field="title"/>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
<div>
 | 
					 | 
				
			||||||
<$view field="version"/>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
\define plugin-table(type)
 | 
					 | 
				
			||||||
<$set name="qualified-state" value=<<qualify "$:/state/plugin-info">>>
 | 
					 | 
				
			||||||
<$list filter="[!has[draft.of]plugin-type[$type$]sort[description]]" emptyMessage=<<lingo "Empty/Hint">>>
 | 
					 | 
				
			||||||
<$set name="popup-state" value=<<popup-state-macro>>>
 | 
					 | 
				
			||||||
<$reveal type="nomatch" state=<<plugin-disable-title>> text="yes">
 | 
					 | 
				
			||||||
<$link to={{!!title}} class="tc-plugin-info">
 | 
					 | 
				
			||||||
<<plugin-table-body type:"$type$">>
 | 
					 | 
				
			||||||
</$link>
 | 
					 | 
				
			||||||
</$reveal>
 | 
					 | 
				
			||||||
<$reveal type="match" state=<<plugin-disable-title>> text="yes">
 | 
					 | 
				
			||||||
<$link to={{!!title}} class="tc-plugin-info tc-plugin-info-disabled">
 | 
					 | 
				
			||||||
<<plugin-table-body type:"$type$" disabledMessage:"<$macrocall $name='lingo' title='Disabled/Status'/>">>
 | 
					 | 
				
			||||||
</$link>
 | 
					 | 
				
			||||||
</$reveal>
 | 
					 | 
				
			||||||
<$reveal type="match" text="yes" state=<<popup-state>>>
 | 
					 | 
				
			||||||
<div class="tc-plugin-info-dropdown">
 | 
					 | 
				
			||||||
<$list filter="[all[current]] -[[$:/core]]">
 | 
					 | 
				
			||||||
<div style="float:right;">
 | 
					 | 
				
			||||||
<$reveal type="nomatch" state=<<plugin-disable-title>> text="yes">
 | 
					 | 
				
			||||||
<$button set=<<plugin-disable-title>> setTo="yes" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>
 | 
					 | 
				
			||||||
<<lingo Disable/Caption>>
 | 
					 | 
				
			||||||
</$button>
 | 
					 | 
				
			||||||
</$reveal>
 | 
					 | 
				
			||||||
<$reveal type="match" state=<<plugin-disable-title>> text="yes">
 | 
					 | 
				
			||||||
<$button set=<<plugin-disable-title>> setTo="no" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>
 | 
					 | 
				
			||||||
<<lingo Enable/Caption>>
 | 
					 | 
				
			||||||
</$button>
 | 
					 | 
				
			||||||
</$reveal>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
</$list>
 | 
					 | 
				
			||||||
<$reveal type="nomatch" text="" state="!!list">
 | 
					 | 
				
			||||||
<$macrocall $name="tabs" state=<<tabs-state-macro>> tabsList={{!!list}} default="readme" template="$:/core/ui/PluginInfo"/>
 | 
					 | 
				
			||||||
</$reveal>
 | 
					 | 
				
			||||||
<$reveal type="match" text="" state="!!list">
 | 
					 | 
				
			||||||
No information provided
 | 
					 | 
				
			||||||
</$reveal>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
</$reveal>
 | 
					 | 
				
			||||||
</$set>
 | 
					 | 
				
			||||||
</$list>
 | 
					 | 
				
			||||||
</$set>
 | 
					 | 
				
			||||||
\end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
! <<lingo Plugin/Prompt>>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<<plugin-table plugin>>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
! <<lingo Theme/Prompt>>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<<plugin-table theme>>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
! <<lingo Language/Prompt>>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<<plugin-table language>>
 | 
					 | 
				
			||||||
							
								
								
									
										116
									
								
								core/ui/ControlPanel/Modals/AddPlugins.tid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								core/ui/ControlPanel/Modals/AddPlugins.tid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
				
			|||||||
 | 
					title: $:/core/ui/ControlPanel/Modals/AddPlugins
 | 
				
			||||||
 | 
					subtitle: {{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\define lingo-base() $:/language/ControlPanel/Plugins/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\define install-plugin-button()
 | 
				
			||||||
 | 
					<$button>
 | 
				
			||||||
 | 
					<$action-sendmessage $message="tm-load-plugin-from-library" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>
 | 
				
			||||||
 | 
					<$list filter="[<assetInfo>get[original-title]get[version]]" variable="installedVersion" emptyMessage="""install""">
 | 
				
			||||||
 | 
					reinstall
 | 
				
			||||||
 | 
					</$list>
 | 
				
			||||||
 | 
					</$button>
 | 
				
			||||||
 | 
					\end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\define popup-state-macro()
 | 
				
			||||||
 | 
					$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$
 | 
				
			||||||
 | 
					\end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\define display-plugin-info(type)
 | 
				
			||||||
 | 
					<$set name="popup-state" value=<<popup-state-macro>>>
 | 
				
			||||||
 | 
					<div class="tc-plugin-info">
 | 
				
			||||||
 | 
					<div class="tc-plugin-info-chunk tc-small-icon">
 | 
				
			||||||
 | 
					<$reveal type="nomatch" state=<<popup-state>> text="yes">
 | 
				
			||||||
 | 
					<$button class="tc-btn-invisible tc-btn-dropdown" set=<<popup-state>> setTo="yes">
 | 
				
			||||||
 | 
					{{$:/core/images/right-arrow}}
 | 
				
			||||||
 | 
					</$button>
 | 
				
			||||||
 | 
					</$reveal>
 | 
				
			||||||
 | 
					<$reveal type="match" state=<<popup-state>> text="yes">
 | 
				
			||||||
 | 
					<$button class="tc-btn-invisible tc-btn-dropdown" set=<<popup-state>> setTo="no">
 | 
				
			||||||
 | 
					{{$:/core/images/down-arrow}}
 | 
				
			||||||
 | 
					</$button>
 | 
				
			||||||
 | 
					</$reveal>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="tc-plugin-info-chunk">
 | 
				
			||||||
 | 
					<$list filter="[<assetInfo>has[icon]]" emptyMessage="""<$transclude tiddler="$:/core/images/plugin-generic-$type$"/>""">
 | 
				
			||||||
 | 
					<img src={{$(assetInfo)$!!icon}}/>
 | 
				
			||||||
 | 
					</$list>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="tc-plugin-info-chunk">
 | 
				
			||||||
 | 
					<h1><$view tiddler=<<assetInfo>> field="description"/></h1>
 | 
				
			||||||
 | 
					<h2><$view tiddler=<<assetInfo>> field="original-title"/></h2>
 | 
				
			||||||
 | 
					<div><em><$view tiddler=<<assetInfo>> field="version"/></em></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="tc-plugin-info-chunk">
 | 
				
			||||||
 | 
					<<install-plugin-button>>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<$reveal type="match" text="yes" state=<<popup-state>>>
 | 
				
			||||||
 | 
					<div class="tc-plugin-info-dropdown">
 | 
				
			||||||
 | 
					<div class="tc-plugin-info-dropdown-message">
 | 
				
			||||||
 | 
					<$list filter="[<assetInfo>get[original-title]get[version]]" variable="installedVersion" emptyMessage="""This plugin is not currently installed""">
 | 
				
			||||||
 | 
					<em>
 | 
				
			||||||
 | 
					This plugin is already installed at version <$text text=<<installedVersion>>/>
 | 
				
			||||||
 | 
					</em>
 | 
				
			||||||
 | 
					</$list>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="tc-plugin-info-dropdown-body">
 | 
				
			||||||
 | 
					<$transclude tiddler=<<assetInfo>> field="readme" mode="block"/>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</$reveal>
 | 
				
			||||||
 | 
					</$set>
 | 
				
			||||||
 | 
					\end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\define load-plugin-library-button()
 | 
				
			||||||
 | 
					<$button class="tc-btn-big-green">
 | 
				
			||||||
 | 
					<$action-sendmessage $message="tm-load-plugin-library" url={{!!url}} infoTitlePrefix="$:/temp/RemoteAssetInfo/"/>
 | 
				
			||||||
 | 
					{{$:/core/images/chevron-right}} open plugin library
 | 
				
			||||||
 | 
					</$button>
 | 
				
			||||||
 | 
					\end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\define display-server-assets(type)
 | 
				
			||||||
 | 
					Search: <$edit-text tiddler="""$:/temp/RemoteAssetSearch/$(currentTiddler)$""" default="" type="search" tag="input" focus="true"/>
 | 
				
			||||||
 | 
					<$reveal state="""$:/temp/RemoteAssetSearch/$(currentTiddler)$""" type="nomatch" text="">
 | 
				
			||||||
 | 
					<$button class="tc-btn-invisible">
 | 
				
			||||||
 | 
					<$action-setfield $tiddler="""$:/temp/RemoteAssetSearch/$(currentTiddler)$""" $field="text" $value=""/>
 | 
				
			||||||
 | 
					{{$:/core/images/close-button}}
 | 
				
			||||||
 | 
					</$button>
 | 
				
			||||||
 | 
					</$reveal>
 | 
				
			||||||
 | 
					<div class="tc-plugin-library-listing">
 | 
				
			||||||
 | 
					<$list filter="[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[description]]" variable="assetInfo">
 | 
				
			||||||
 | 
					<<display-plugin-info "$type$">>
 | 
				
			||||||
 | 
					</$list>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					\end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\define display-server-connection()
 | 
				
			||||||
 | 
					<$list filter="[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]" variable="connectionTiddler" emptyMessage=<<load-plugin-library-button>>>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<<tabs "[[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]" "$:/core/ui/ControlPanel/Plugins/Add/Plugins">>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</$list>
 | 
				
			||||||
 | 
					\end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\define plugin-library-listing()
 | 
				
			||||||
 | 
					<$list filter="[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]">
 | 
				
			||||||
 | 
					<div class="tc-plugin-library">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!! <$link><$transclude field="caption"><$view field="title"/></$transclude></$link>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//<$view field="url"/>//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<$transclude/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<<display-server-connection>>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</$list>
 | 
				
			||||||
 | 
					\end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<$importvariables filter="[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div>
 | 
				
			||||||
 | 
					<<plugin-library-listing>>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</$importvariables>
 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
title: $:/core/ui/ControlPanel/Plugins
 | 
					 | 
				
			||||||
tags: $:/tags/ControlPanel
 | 
					 | 
				
			||||||
caption: {{$:/language/ControlPanel/Plugins/Caption}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div class="tc-control-panel">
 | 
					 | 
				
			||||||
<<tabs "[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Plugins]!has[draft.of]]" "$:/core/ui/ControlPanel/Plugins/Installed">>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
							
								
								
									
										4
									
								
								core/ui/ControlPanel/Plugins/Add/Languages.tid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								core/ui/ControlPanel/Plugins/Add/Languages.tid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					title: $:/core/ui/ControlPanel/Plugins/Add/Languages
 | 
				
			||||||
 | 
					caption: {{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter="[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]"/>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<<display-server-assets language>>
 | 
				
			||||||
							
								
								
									
										4
									
								
								core/ui/ControlPanel/Plugins/Add/Plugins.tid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								core/ui/ControlPanel/Plugins/Add/Plugins.tid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					title: $:/core/ui/ControlPanel/Plugins/Add/Plugins
 | 
				
			||||||
 | 
					caption: {{$:/language/ControlPanel/Plugins/Plugins/Caption}}  (<$count filter="[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]"/>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<<display-server-assets plugin>>
 | 
				
			||||||
							
								
								
									
										4
									
								
								core/ui/ControlPanel/Plugins/Add/Themes.tid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								core/ui/ControlPanel/Plugins/Add/Themes.tid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					title: $:/core/ui/ControlPanel/Plugins/Add/Themes
 | 
				
			||||||
 | 
					caption: {{$:/language/ControlPanel/Plugins/Themes/Caption}}  (<$count filter="[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]"/>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<<display-server-assets theme>>
 | 
				
			||||||
							
								
								
									
										4
									
								
								core/ui/ControlPanel/Plugins/Installed/Languages.tid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								core/ui/ControlPanel/Plugins/Installed/Languages.tid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					title: $:/core/ui/ControlPanel/Plugins/Installed/Languages
 | 
				
			||||||
 | 
					caption: {{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter="[!has[draft.of]plugin-type[language]]"/>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<<plugin-table language>>
 | 
				
			||||||
							
								
								
									
										4
									
								
								core/ui/ControlPanel/Plugins/Installed/Plugins.tid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								core/ui/ControlPanel/Plugins/Installed/Plugins.tid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					title: $:/core/ui/ControlPanel/Plugins/Installed/Plugins
 | 
				
			||||||
 | 
					caption: {{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter="[!has[draft.of]plugin-type[plugin]]"/>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<<plugin-table plugin>>
 | 
				
			||||||
							
								
								
									
										4
									
								
								core/ui/ControlPanel/Plugins/Installed/Themes.tid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								core/ui/ControlPanel/Plugins/Installed/Themes.tid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					title: $:/core/ui/ControlPanel/Plugins/Installed/Themes
 | 
				
			||||||
 | 
					caption: {{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter="[!has[draft.of]plugin-type[theme]]"/>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<<plugin-table theme>>
 | 
				
			||||||
@@ -10,8 +10,8 @@
 | 
				
			|||||||
	"build": {
 | 
						"build": {
 | 
				
			||||||
		"library": [
 | 
							"library": [
 | 
				
			||||||
			"--makelibrary","$:/UpgradeLibrary",
 | 
								"--makelibrary","$:/UpgradeLibrary",
 | 
				
			||||||
   			"--savelibrarytiddlers","$:/UpgradeLibrary","recipes/default/tiddlers/","$:/UpgradeLibrary/List",
 | 
					   			"--savelibrarytiddlers","$:/UpgradeLibrary","[prefix[$:/]] -[[$:/plugins/tiddlywiki/upgrade]] -[[$:/plugins/tiddlywiki/translators]] -[[$:/plugins/tiddlywiki/pluginlibrary]] -[[$:/plugins/tiddlywiki/jasmine]]","recipes/library/tiddlers/","$:/UpgradeLibrary/List",
 | 
				
			||||||
   			"--savetiddler","$:/UpgradeLibrary/List","recipes/default/tiddlers.json",
 | 
					   			"--savetiddler","$:/UpgradeLibrary/List","recipes/library/tiddlers.json",
 | 
				
			||||||
			"--rendertiddler","$:/plugins/tiddlywiki/pluginlibrary/library.template.html","index.html","text/plain"]
 | 
								"--rendertiddler","$:/plugins/tiddlywiki/pluginlibrary/library.template.html","index.html","text/plain"]
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,8 +18,8 @@ window.addEventListener("message",function listener(event){
 | 
				
			|||||||
	console.log("plugin library: Message content",event.data);
 | 
						console.log("plugin library: Message content",event.data);
 | 
				
			||||||
	switch(event.data.verb) {
 | 
						switch(event.data.verb) {
 | 
				
			||||||
		case "GET":
 | 
							case "GET":
 | 
				
			||||||
			if(event.data.url === "recipes/default/tiddlers.json") {
 | 
								if(event.data.url === "recipes/library/tiddlers.json") {
 | 
				
			||||||
				// Route for recipes/default/tiddlers.json
 | 
									// Route for recipes/library/tiddlers.json
 | 
				
			||||||
				event.source.postMessage({
 | 
									event.source.postMessage({
 | 
				
			||||||
					verb: "GET-RESPONSE",
 | 
										verb: "GET-RESPONSE",
 | 
				
			||||||
					status: "200",
 | 
										status: "200",
 | 
				
			||||||
@@ -28,9 +28,9 @@ window.addEventListener("message",function listener(event){
 | 
				
			|||||||
					type: "application/json",
 | 
										type: "application/json",
 | 
				
			||||||
					body: JSON.stringify(assetList,null,4)
 | 
										body: JSON.stringify(assetList,null,4)
 | 
				
			||||||
				},"*");
 | 
									},"*");
 | 
				
			||||||
			} else if(event.data.url.indexOf("recipes/default/tiddlers/") === 0) {
 | 
								} else if(event.data.url.indexOf("recipes/library/tiddlers/") === 0) {
 | 
				
			||||||
				var url = "recipes/default/tiddlers/" + encodeURIComponent(removePrefix(event.data.url,"recipes/default/tiddlers/"));
 | 
									var url = "recipes/library/tiddlers/" + encodeURIComponent(removePrefix(event.data.url,"recipes/library/tiddlers/"));
 | 
				
			||||||
				// Route for recipes/default/tiddlers/<uri-encoded-tiddler-title>.json
 | 
									// Route for recipes/library/tiddlers/<uri-encoded-tiddler-title>.json
 | 
				
			||||||
				httpGet(url,function(err,responseText) {
 | 
									httpGet(url,function(err,responseText) {
 | 
				
			||||||
					if(err) {
 | 
										if(err) {
 | 
				
			||||||
						event.source.postMessage({
 | 
											event.source.postMessage({
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -114,5 +114,5 @@ canvas.tc-edit-bitmapeditor  {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tc-plugin-info {
 | 
					.tc-plugin-info {
 | 
				
			||||||
	<<box-shadow "2px 2px 4px rgba(0,0,0,0.2)">>
 | 
						<<box-shadow "1px 1px 3px rgba(0,0,0,0.5)">>
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1110,6 +1110,11 @@ canvas.tc-edit-bitmapeditor  {
 | 
				
			|||||||
	line-height: 30px;
 | 
						line-height: 30px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tc-modal-header img, .tc-modal-header svg {
 | 
				
			||||||
 | 
						width: 1em;
 | 
				
			||||||
 | 
						height: 1em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tc-modal-body {
 | 
					.tc-modal-body {
 | 
				
			||||||
	padding: 15px;
 | 
						padding: 15px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1330,8 +1335,8 @@ canvas.tc-edit-bitmapeditor  {
 | 
				
			|||||||
	display: block;
 | 
						display: block;
 | 
				
			||||||
	border: 1px solid <<colour muted-foreground>>;
 | 
						border: 1px solid <<colour muted-foreground>>;
 | 
				
			||||||
	background-colour: <<colour background>>;
 | 
						background-colour: <<colour background>>;
 | 
				
			||||||
	margin: 1em 0 1em 0;
 | 
						margin: 0.5em 0 0.5em 0;
 | 
				
			||||||
	padding: 8px;
 | 
						padding: 4px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tc-plugin-info-disabled {
 | 
					.tc-plugin-info-disabled {
 | 
				
			||||||
@@ -1360,16 +1365,46 @@ a.tc-tiddlylink.tc-plugin-info:hover svg {
 | 
				
			|||||||
	vertical-align: middle;
 | 
						vertical-align: middle;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
a.tc-plugin-info img, a.tc-plugin-info svg {
 | 
					.tc-plugin-info-chunk h1 {
 | 
				
			||||||
 | 
						font-size: 1em;
 | 
				
			||||||
 | 
						margin: 2px 0 2px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tc-plugin-info-chunk h2 {
 | 
				
			||||||
 | 
						font-size: 0.8em;
 | 
				
			||||||
 | 
						margin: 2px 0 2px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tc-plugin-info-chunk div {
 | 
				
			||||||
 | 
						font-size: 0.7em;	
 | 
				
			||||||
 | 
						margin: 2px 0 2px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tc-plugin-info img, .tc-plugin-info svg {
 | 
				
			||||||
	width: 2em;
 | 
						width: 2em;
 | 
				
			||||||
	height: 2em;
 | 
						height: 2em;
 | 
				
			||||||
	fill: <<colour muted-foreground>>;
 | 
						fill: <<colour muted-foreground>>;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tc-plugin-info.tc-small-icon img, .tc-plugin-info.tc-small-icon svg {
 | 
				
			||||||
 | 
						width: 1em;
 | 
				
			||||||
 | 
						height: 1em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tc-plugin-info-dropdown {
 | 
					.tc-plugin-info-dropdown {
 | 
				
			||||||
	border: 1px solid <<colour muted-foreground>>;
 | 
						border: 1px solid <<colour muted-foreground>>;
 | 
				
			||||||
 | 
						margin-top: -8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tc-plugin-info-dropdown-message {
 | 
				
			||||||
 | 
						background: <<colour message-background>>;
 | 
				
			||||||
 | 
						padding: 0.5em 1em 0.5em 1em;
 | 
				
			||||||
 | 
						font-weight: bold;
 | 
				
			||||||
 | 
						font-size: 0.8em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tc-plugin-info-dropdown-body {
 | 
				
			||||||
	padding: 1em 1em 1em 1em;
 | 
						padding: 1em 1em 1em 1em;
 | 
				
			||||||
	margin-top: -1em;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user