mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-10-31 15:42:59 +00:00 
			
		
		
		
	Make it possible to disable plugins
This commit is contained in:
		
							
								
								
									
										13
									
								
								boot/boot.js
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								boot/boot.js
									
									
									
									
									
								
							| @@ -967,19 +967,22 @@ $tw.Wiki = function(options) { | |||||||
| 	this.registerPluginTiddlers = function(pluginType,titles) { | 	this.registerPluginTiddlers = function(pluginType,titles) { | ||||||
| 		var self = this, | 		var self = this, | ||||||
| 			registeredTitles = [], | 			registeredTitles = [], | ||||||
| 			checkTiddler = function(tiddler) { | 			checkTiddler = function(tiddler,title) { | ||||||
| 				if(tiddler && tiddler.fields.type === "application/json" && tiddler.fields["plugin-type"] === pluginType) { | 				if(tiddler && tiddler.fields.type === "application/json" && tiddler.fields["plugin-type"] === pluginType) { | ||||||
| 					pluginTiddlers.push(tiddler); | 					var disablingTiddler = self.getTiddler("$:/config/Plugins/Disabled/" + title); | ||||||
| 					registeredTitles.push(tiddler.fields.title); | 					if(title === "$:/core" || !disablingTiddler || (disablingTiddler.fields.text || "").trim() !== "yes") { | ||||||
|  | 						pluginTiddlers.push(tiddler); | ||||||
|  | 						registeredTitles.push(tiddler.fields.title); | ||||||
|  | 					} | ||||||
| 				} | 				} | ||||||
| 			}; | 			}; | ||||||
| 		if(titles) { | 		if(titles) { | ||||||
| 			$tw.utils.each(titles,function(title) { | 			$tw.utils.each(titles,function(title) { | ||||||
| 				checkTiddler(self.getTiddler(title)); | 				checkTiddler(self.getTiddler(title),title); | ||||||
| 			}); | 			}); | ||||||
| 		} else { | 		} else { | ||||||
| 			this.each(function(tiddler,title) { | 			this.each(function(tiddler,title) { | ||||||
| 				checkTiddler(tiddler); | 				checkTiddler(tiddler,title); | ||||||
| 			}); | 			}); | ||||||
| 		} | 		} | ||||||
| 		return registeredTitles; | 		return registeredTitles; | ||||||
|   | |||||||
| @@ -64,7 +64,12 @@ Basics/Title/Prompt: Title of this ~TiddlyWiki: | |||||||
| Basics/Username/Prompt: Username for signing edits: | Basics/Username/Prompt: Username for signing edits: | ||||||
| Basics/Version/Prompt: ~TiddlyWiki version: | Basics/Version/Prompt: ~TiddlyWiki version: | ||||||
| Plugins/Caption: Plugins | Plugins/Caption: Plugins | ||||||
|  | Plugins/Disable/Caption: disable | ||||||
|  | Plugins/Disable/Hint: Disable this plugin when reloading page | ||||||
|  | Plugins/Disabled/Status: (disabled) | ||||||
| Plugins/Empty/Hint: None | Plugins/Empty/Hint: None | ||||||
|  | Plugins/Enable/Caption: enable | ||||||
|  | Plugins/Enable/Hint: Enable this plugin when reloading page | ||||||
| Plugins/Language/Prompt: Languages | Plugins/Language/Prompt: Languages | ||||||
| Plugins/Plugin/Prompt: Plugins | Plugins/Plugin/Prompt: Plugins | ||||||
| Plugins/Theme/Prompt: Themes | Plugins/Theme/Prompt: Themes | ||||||
|   | |||||||
| @@ -12,11 +12,10 @@ $(popup-state)$-$(pluginInfoType)$ | |||||||
| \define plugin-icon-title() | \define plugin-icon-title() | ||||||
| $(currentTiddler)$/icon | $(currentTiddler)$/icon | ||||||
| \end | \end | ||||||
| \define plugin-table(type) | \define plugin-disable-title() | ||||||
| <$set name="qualified-state" value=<<qualify "$:/state/plugin-info">>> | $:/config/Plugins/Disabled/$(currentTiddler)$ | ||||||
| <$list filter="[!has[draft.of]plugin-type[$type$]sort[description]]" emptyMessage=<<lingo "Empty/Hint">>> | \end | ||||||
| <$set name="popup-state" value=<<popup-state-macro>>> | \define plugin-table-body(type,disabledMessage) | ||||||
| <$link to={{!!title}} class="tw-plugin-info"> |  | ||||||
| <div class="tw-plugin-info-chunk"> | <div class="tw-plugin-info-chunk"> | ||||||
| <$reveal type="nomatch" state=<<popup-state>> text="yes"> | <$reveal type="nomatch" state=<<popup-state>> text="yes"> | ||||||
| <$button class="btn-invisible btn-dropdown" set=<<popup-state>> setTo="yes"> | <$button class="btn-invisible btn-dropdown" set=<<popup-state>> setTo="yes"> | ||||||
| @@ -36,7 +35,7 @@ $(currentTiddler)$/icon | |||||||
| </div> | </div> | ||||||
| <div class="tw-plugin-info-chunk"> | <div class="tw-plugin-info-chunk"> | ||||||
| <div> | <div> | ||||||
| ''<$view field="description"><$view field="title"/></$view>'' | ''<$view field="description"><$view field="title"/></$view>'' $disabledMessage$ | ||||||
| </div> | </div> | ||||||
| <div> | <div> | ||||||
| <$view field="title"/> | <$view field="title"/> | ||||||
| @@ -45,18 +44,44 @@ $(currentTiddler)$/icon | |||||||
| <$view field="version"/> | <$view field="version"/> | ||||||
| </div> | </div> | ||||||
| </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="tw-plugin-info"> | ||||||
|  | <<plugin-table-body type:"$type$">> | ||||||
| </$link> | </$link> | ||||||
|  | </$reveal> | ||||||
|  | <$reveal type="match" state=<<plugin-disable-title>> text="yes"> | ||||||
|  | <$link to={{!!title}} class="tw-plugin-info tw-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>>> | <$reveal type="match" text="yes" state=<<popup-state>>> | ||||||
| <$reveal type="nomatch" text="" state="!!list"> |  | ||||||
| <div class="tw-plugin-info-dropdown"> | <div class="tw-plugin-info-dropdown"> | ||||||
| <$macrocall $name="tabs" state=<<tabs-state-macro>> tabsList={{!!list}} default="readme" template="$:/core/ui/PluginInfo"/> | <$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" title={{$:/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" title={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}> | ||||||
|  | <<lingo Enable/Caption>> | ||||||
|  | </$button> | ||||||
|  | </$reveal> | ||||||
| </div> | </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> | ||||||
| <$reveal type="match" text="" state="!!list"> | <$reveal type="match" text="" state="!!list"> | ||||||
| <div class="tw-plugin-info-dropdown"> |  | ||||||
| No information provided | No information provided | ||||||
| </div> |  | ||||||
| </$reveal> | </$reveal> | ||||||
|  | </div> | ||||||
| </$reveal> | </$reveal> | ||||||
| </$set> | </$set> | ||||||
| </$list> | </$list> | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| created: 20130826122000000 | created: 20130826122000000 | ||||||
| modified: 20140807094840608 | modified: 20140815094840608 | ||||||
| tags: mechanism | tags: mechanism | ||||||
| title: PluginMechanism | title: PluginMechanism | ||||||
| type: text/vnd.tiddlywiki | type: text/vnd.tiddlywiki | ||||||
| @@ -87,6 +87,16 @@ The wiki object keeps track of all of the currently loaded plugins. If a request | |||||||
|  |  | ||||||
| In the browser, any constituent tiddlers that are JavaScript modules (ie shadow tiddlers of content type `application/javascript` and possessing the field `module-type`) are executed during startup processing. | In the browser, any constituent tiddlers that are JavaScript modules (ie shadow tiddlers of content type `application/javascript` and possessing the field `module-type`) are executed during startup processing. | ||||||
|  |  | ||||||
|  | !! Disabling Plugins | ||||||
|  |  | ||||||
|  | Plugins can be disabled by creating a tiddler titled `$:/config/Plugins/Disabled/` concatenated with the plugin title, and setting its text to `yes`. | ||||||
|  |  | ||||||
|  | For example, to disable the plugin `$:/plugins/tiddlywiki/highlight`, the title would be: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | $:/config/Plugins/Disabled/$:/plugins/tiddlywiki/highlight | ||||||
|  | ``` | ||||||
|  |  | ||||||
| ! Information Tiddlers for Plugins | ! Information Tiddlers for Plugins | ||||||
|  |  | ||||||
| Plugin authors are encouraged to provide special information and documentation tiddlers that TiddlyWiki can include as plugin information tabs in the [[control panel|$:/ControlPanel]]. | Plugin authors are encouraged to provide special information and documentation tiddlers that TiddlyWiki can include as plugin information tabs in the [[control panel|$:/ControlPanel]]. | ||||||
|   | |||||||
| @@ -1251,6 +1251,16 @@ canvas.tw-edit-bitmapeditor  { | |||||||
| 	padding: 8px; | 	padding: 8px; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .tw-plugin-info-disabled { | ||||||
|  | 	background: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px); | ||||||
|  | 	background: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .tw-plugin-info-disabled:hover { | ||||||
|  | 	background: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px); | ||||||
|  | 	background: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px); | ||||||
|  | } | ||||||
|  |  | ||||||
| a.tw-tiddlylink.tw-plugin-info:hover { | a.tw-tiddlylink.tw-plugin-info:hover { | ||||||
| 	text-decoration: none; | 	text-decoration: none; | ||||||
| 	background-color: <<colour primary>>; | 	background-color: <<colour primary>>; | ||||||
| @@ -1273,7 +1283,7 @@ a.tw-tiddlylink.tw-plugin-info:hover { | |||||||
|  |  | ||||||
| .tw-plugin-info-dropdown { | .tw-plugin-info-dropdown { | ||||||
| 	border: 1px solid <<colour muted-foreground>>; | 	border: 1px solid <<colour muted-foreground>>; | ||||||
| 	padding: 1em; | 	padding: 1em 1em 0 1em; | ||||||
| 	margin-top: -1em; | 	margin-top: -1em; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jermolene
					Jermolene