1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-23 18:17:20 +00:00

Don't freelink within links and buttons

This commit is contained in:
Jeremy Ruston 2020-01-04 16:34:34 +00:00
parent 1c91f72baa
commit 870c34ab0a

View File

@ -12,7 +12,9 @@ An override of the core text widget that automatically linkifies the text
/*global $tw: false */ /*global $tw: false */
"use strict"; "use strict";
var Widget = require("$:/core/modules/widgets/widget.js").widget; var Widget = require("$:/core/modules/widgets/widget.js").widget,
LinkWidget = require("$:/core/modules/widgets/link.js").link,
ButtonWidget = require("$:/core/modules/widgets/button.js").button;
var TextNodeWidget = function(parseTreeNode,options) { var TextNodeWidget = function(parseTreeNode,options) {
this.initialise(parseTreeNode,options); this.initialise(parseTreeNode,options);
@ -43,8 +45,8 @@ TextNodeWidget.prototype.execute = function() {
type: "plain-text", type: "plain-text",
text: this.getAttribute("text",this.parseTreeNode.text || "") text: this.getAttribute("text",this.parseTreeNode.text || "")
}]; }];
// Only process links if not disabled // Only process links if not disabled and we're not within a button or link widget
if(this.getVariable("tv-wikilinks",{defaultValue:"yes"}).trim() !== "no" && this.getVariable("tv-freelinks",{defaultValue:"no"}).trim() === "yes") { if(this.getVariable("tv-wikilinks",{defaultValue:"yes"}).trim() !== "no" && this.getVariable("tv-freelinks",{defaultValue:"no"}).trim() === "yes" && !this.isWithinButtonOrLink()) {
// Get the information about the current tiddler titles, and construct a regexp // Get the information about the current tiddler titles, and construct a regexp
this.tiddlerTitleInfo = this.wiki.getGlobalCache("tiddler-title-info",function() { this.tiddlerTitleInfo = this.wiki.getGlobalCache("tiddler-title-info",function() {
var titles = [], var titles = [],
@ -122,6 +124,16 @@ TextNodeWidget.prototype.execute = function() {
this.makeChildWidgets(childParseTree); this.makeChildWidgets(childParseTree);
}; };
TextNodeWidget.prototype.isWithinButtonOrLink = function() {
var withinButtonOrLink = false,
widget = this.parentWidget;
while(!withinButtonOrLink && widget) {
withinButtonOrLink = widget instanceof ButtonWidget || widget instanceof LinkWidget;
widget = widget.parentWidget;
}
return withinButtonOrLink;
};
/* /*
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
*/ */