mirror of
				https://github.com/Jermolene/TiddlyWiki5
				synced 2025-10-31 15:42:59 +00:00 
			
		
		
		
	Add a linkcatcher widget
It intercepts navigation events and saves the target tiddler title into a specified text reference
This commit is contained in:
		
							
								
								
									
										56
									
								
								core/modules/widgets/linkcatcher.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								core/modules/widgets/linkcatcher.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| /*\ | ||||
| title: $:/core/modules/widget/linkcatcher.js | ||||
| type: application/javascript | ||||
| module-type: widget | ||||
|  | ||||
| Implements the linkcatcher widget. | ||||
|  | ||||
| \*/ | ||||
| (function(){ | ||||
|  | ||||
| /*jslint node: true, browser: true */ | ||||
| /*global $tw: false */ | ||||
| "use strict"; | ||||
|  | ||||
| var LinkCatcherWidget = function(renderer) { | ||||
| 	// Save state | ||||
| 	this.renderer = renderer; | ||||
| 	// Generate child nodes | ||||
| 	this.generate(); | ||||
| }; | ||||
|  | ||||
| LinkCatcherWidget.prototype.generate = function() { | ||||
| 	// Get our attributes | ||||
| 	this.to = this.renderer.getAttribute("to"); | ||||
| 	// Set the element | ||||
| 	this.tag = "div"; | ||||
| 	this.attributes = { | ||||
| 		"class": "tw-linkcatcher" | ||||
| 	}; | ||||
| 	this.children = this.renderer.renderTree.createRenderers(this.renderer.renderContext,this.renderer.parseTreeNode.children); | ||||
| 	this.events = [ | ||||
| 		{name: "tw-navigate", handlerObject: this, handlerMethod: "handleNavigateEvent"} | ||||
| 	]; | ||||
| }; | ||||
|  | ||||
| LinkCatcherWidget.prototype.refreshInDom = function(changedAttributes,changedTiddlers) { | ||||
| 	// We don't need to refresh ourselves, so just refresh any child nodes | ||||
| 	$tw.utils.each(this.children,function(node) { | ||||
| 		if(node.refreshInDom) { | ||||
| 			node.refreshInDom(changedTiddlers); | ||||
| 		} | ||||
| 	}); | ||||
| }; | ||||
|  | ||||
| // Navigate to a specified tiddler | ||||
| LinkCatcherWidget.prototype.handleNavigateEvent = function(event) { | ||||
| 	if(this.to) { | ||||
| 		this.renderer.renderTree.wiki.setTextReference(this.to,event.navigateTo,this.renderer.getContextTiddlerTitle()); | ||||
| 	} | ||||
| 	event.stopPropagation(); | ||||
| 	return false; | ||||
| }; | ||||
|  | ||||
| exports.linkcatcher = LinkCatcherWidget; | ||||
|  | ||||
| })(); | ||||
		Reference in New Issue
	
	Block a user
	 Jeremy Ruston
					Jeremy Ruston