1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2026-04-30 18:51:30 +00:00

Compare commits

...

5 Commits

Author SHA1 Message Date
Jeremy Ruston
15edb586ba Fix extraneous copy to clipboard at startup 2024-05-29 15:06:15 +01:00
Jeremy Ruston
d5dec1169a Fix RSOE 2024-05-29 15:03:37 +01:00
Jeremy Ruston
d7ded0ac64 Merge branch 'master' into custom-copy-clipboard-notifications 2024-05-29 15:01:26 +01:00
Jeremy Ruston
aefc1e0fb4 Improve plugin tests
Fixes #8209
2024-05-23 18:12:38 +01:00
Jeremy Ruston
7c6ce3009c Initial Commit 2024-05-23 17:54:43 +01:00
7 changed files with 53 additions and 24 deletions

View File

@@ -68,7 +68,10 @@ exports.startup = function() {
}); });
// Install the copy-to-clipboard mechanism // Install the copy-to-clipboard mechanism
$tw.rootWidget.addEventListener("tm-copy-to-clipboard",function(event) { $tw.rootWidget.addEventListener("tm-copy-to-clipboard",function(event) {
$tw.utils.copyToClipboard(event.param); $tw.utils.copyToClipboard(event.param,{
successNotification: event.paramObject.successNotification,
failureNotification: event.paramObject.failureNotification
});
}); });
// Install the tm-focus-selector message // Install the tm-focus-selector message
$tw.rootWidget.addEventListener("tm-focus-selector",function(event) { $tw.rootWidget.addEventListener("tm-focus-selector",function(event) {

View File

@@ -93,7 +93,9 @@ exports.startup = function() {
updateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,"yes").trim() === "yes" ? "permalink" : "none", updateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,"yes").trim() === "yes" ? "permalink" : "none",
updateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,"no").trim(), updateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,"no").trim(),
targetTiddler: event.param || event.tiddlerTitle, targetTiddler: event.param || event.tiddlerTitle,
copyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,"yes").trim() === "yes" ? "permalink" : "none" copyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,"yes").trim() === "yes" ? "permalink" : "none",
successNotification: event.paramObject && event.paramObject.successNotification,
failureNotification: event.paramObject && event.paramObject.failureNotification
}); });
}); });
// Listen for the tm-permaview message // Listen for the tm-permaview message
@@ -102,7 +104,9 @@ exports.startup = function() {
updateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,"yes").trim() === "yes" ? "permaview" : "none", updateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,"yes").trim() === "yes" ? "permaview" : "none",
updateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,"no").trim(), updateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,"no").trim(),
targetTiddler: event.param || event.tiddlerTitle, targetTiddler: event.param || event.tiddlerTitle,
copyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,"yes").trim() === "yes" ? "permaview" : "none" copyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,"yes").trim() === "yes" ? "permaview" : "none",
successNotification: event.paramObject && event.paramObject.successNotification,
failureNotification: event.paramObject && event.paramObject.failureNotification
}); });
}); });
} }
@@ -177,6 +181,8 @@ options.updateAddressBar: "permalink", "permaview" or "no" (defaults to "permavi
options.updateHistory: "yes" or "no" (defaults to "no") options.updateHistory: "yes" or "no" (defaults to "no")
options.copyToClipboard: "permalink", "permaview" or "no" (defaults to "no") options.copyToClipboard: "permalink", "permaview" or "no" (defaults to "no")
options.targetTiddler: optional title of target tiddler for permalink options.targetTiddler: optional title of target tiddler for permalink
options.successNotification: optional title of tiddler to use as the notification in case of success
options.failureNotification: optional title of tiddler to use as the notification in case of failure
*/ */
function updateLocationHash(options) { function updateLocationHash(options) {
// Get the story and the history stack // Get the story and the history stack
@@ -205,14 +211,18 @@ function updateLocationHash(options) {
break; break;
} }
// Copy URL to the clipboard // Copy URL to the clipboard
var url = "";
switch(options.copyToClipboard) { switch(options.copyToClipboard) {
case "permalink": case "permalink":
$tw.utils.copyToClipboard($tw.utils.getLocationPath() + "#" + encodeURIComponent(targetTiddler)); url = $tw.utils.getLocationPath() + "#" + encodeURIComponent(targetTiddler);
break; break;
case "permaview": case "permaview":
$tw.utils.copyToClipboard($tw.utils.getLocationPath() + "#" + encodeURIComponent(targetTiddler) + ":" + encodeURIComponent($tw.utils.stringifyList(storyList))); url = $tw.utils.getLocationPath() + "#" + encodeURIComponent(targetTiddler) + ":" + encodeURIComponent($tw.utils.stringifyList(storyList));
break; break;
} }
if(url) {
$tw.utils.copyToClipboard(url,{successNotification: options.successNotification, failureNotification: options.failureNotification});
}
// Only change the location hash if we must, thus avoiding unnecessary onhashchange events // Only change the location hash if we must, thus avoiding unnecessary onhashchange events
if($tw.utils.getLocationHash() !== $tw.locationHash) { if($tw.utils.getLocationHash() !== $tw.locationHash) {
if(options.updateHistory === "yes") { if(options.updateHistory === "yes") {

View File

@@ -292,7 +292,9 @@ exports.copyToClipboard = function(text,options) {
} catch (err) { } catch (err) {
} }
if(!options.doNotNotify) { if(!options.doNotNotify) {
$tw.notifier.display(succeeded ? "$:/language/Notifications/CopiedToClipboard/Succeeded" : "$:/language/Notifications/CopiedToClipboard/Failed"); var successNotification = options.successNotification || "$:/language/Notifications/CopiedToClipboard/Succeeded",
failureNotification = options.failureNotification || "$:/language/Notifications/CopiedToClipboard/Failed"
$tw.notifier.display(succeeded ? successNotification : failureNotification);
} }
document.body.removeChild(textArea); document.body.removeChild(textArea);
}; };

View File

@@ -22,22 +22,30 @@ if($tw.node) {
describe("every plugin should have the required standard fields", function() { describe("every plugin should have the required standard fields", function() {
var titles = Object.keys(tiddlers); var titles = Object.keys(tiddlers);
$tw.utils.each(titles,function(title) { $tw.utils.each(titles,function(title) {
it("plugin " + title + " should have the required standard fields",function() { var fields = tiddlers[title];
var fields = tiddlers[title]; it("plugin should have a recognised plugin-type field",function() {
expect(fields["plugin-type"]).toMatch(/^(?:plugin|language|theme)$/); expect(["plugin","language","theme"].indexOf(fields["plugin-type"]) !== -1).toEqual(true);
switch(fields["plugin-type"]) {
case "plugin":
expect(!!(fields.name && fields.description && fields.list)).toEqual(true);
expect(fields.stability).toMatch(/^(?:STABILITY_0_DEPRECATED|STABILITY_1_EXPERIMENTAL|STABILITY_2_STABLE|STABILITY_3_LEGACY)$/);
break;
case "language":
expect(!!(fields.name && fields.description)).toEqual(true);
break;
case "theme":
expect(!!(fields.name && fields.description)).toEqual(true);
break;
}
}); });
switch(fields["plugin-type"]) {
case "plugin":
it("plugin " + title + " should have name, description and list fields",function() {
expect(!!(fields.name && fields.description && fields.list)).toBe(true);
});
it("plugin " + title + " should have a valid stability field",function() {
expect(["STABILITY_0_DEPRECATED","STABILITY_1_EXPERIMENTAL","STABILITY_2_STABLE","STABILITY_3_LEGACY"].indexOf(fields.stability) !== -1).toBe(true);
});
break;
case "language":
it("language " + title + " should have name and description fields",function() {
expect(!!(fields.name && fields.description)).toEqual(true);
});
break;
case "theme":
it("theme " + title + " should have name and description fields",function() {
expect(!!(fields.name && fields.description)).toEqual(true);
});
break;
}
}); });
}); });
}); });

View File

@@ -1,6 +1,6 @@
caption: tm-copy-to-clipboard caption: tm-copy-to-clipboard
created: 20171215150056004 created: 20171215150056004
modified: 20171215150600888 modified: 20240523174013095
tags: Messages tags: Messages
title: WidgetMessage: tm-copy-to-clipboard title: WidgetMessage: tm-copy-to-clipboard
type: text/vnd.tiddlywiki type: text/vnd.tiddlywiki
@@ -11,6 +11,8 @@ It requires the following properties on the `event` object:
|!Name |!Description | |!Name |!Description |
|param |Text to be copied to the clipboard | |param |Text to be copied to the clipboard |
|successNotification |<<.from-version "5.3.4">> Optional title of tiddler containing notification to be used if the operation succeeds |
|failureNotification |<<.from-version "5.3.4">> Optional title of tiddler containing notification to be used if the operation fails |
This message is usually generated with the ButtonWidget. It is handled by the TiddlyWiki core. This message is usually generated with the ButtonWidget. It is handled by the TiddlyWiki core.

View File

@@ -1,5 +1,5 @@
created: 20140723103751357 created: 20140723103751357
modified: 20140723103751357 modified: 20240523174013095
tags: Messages tags: Messages
title: WidgetMessage: tm-permalink title: WidgetMessage: tm-permalink
type: text/vnd.tiddlywiki type: text/vnd.tiddlywiki
@@ -12,5 +12,7 @@ The permalink message supports the following properties on the `event` object:
|!Name |!Description | |!Name |!Description |
|param |Title of the tiddler to be permalinked | |param |Title of the tiddler to be permalinked |
|tiddlerTitle |The current tiddler (used by default if the tiddler title isn't specified in the `param`) | |tiddlerTitle |The current tiddler (used by default if the tiddler title isn't specified in the `param`) |
|successNotification |<<.from-version "5.3.4">> Optional title of tiddler containing notification to be used if the operation succeeds |
|failureNotification |<<.from-version "5.3.4">> Optional title of tiddler containing notification to be used if the operation fails |
The permalink message can be generated by the ButtonWidget, and is handled by the story mechanism. The permalink message can be generated by the ButtonWidget, and is handled by the story mechanism.

View File

@@ -1,5 +1,5 @@
created: 20140723103751357 created: 20140723103751357
modified: 20140723103751357 modified: 20240523174013095
tags: Messages tags: Messages
title: WidgetMessage: tm-permaview title: WidgetMessage: tm-permaview
type: text/vnd.tiddlywiki type: text/vnd.tiddlywiki
@@ -12,5 +12,7 @@ The permaview message supports the following properties on the `event` object:
|!Name |!Description | |!Name |!Description |
|param |Title of the tiddler to be navigated within the permaview | |param |Title of the tiddler to be navigated within the permaview |
|tiddlerTitle |The current tiddler (used by default if the tiddler title isn't specified in the `param`) | |tiddlerTitle |The current tiddler (used by default if the tiddler title isn't specified in the `param`) |
|successNotification |<<.from-version "5.3.4">> Optional title of tiddler containing notification to be used if the operation succeeds |
|failureNotification |<<.from-version "5.3.4">> Optional title of tiddler containing notification to be used if the operation fails |
The permaview message can be generated by the ButtonWidget, and is handled by the story mechanism. The permaview message can be generated by the ButtonWidget, and is handled by the story mechanism.