mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-08 10:59:57 +00:00
04e91245cb
Now there is now longer a dummy DOM element corresponding to the macro itself. Instead, macros must create a single element child. This allows us to more easily fit Bootstrap's requirements for HTML layout (eg, that problem with links in navbars not being recognised). The refactoring isn't complete, there are still a few bugs to chase down
78 lines
1.9 KiB
JavaScript
78 lines
1.9 KiB
JavaScript
/*\
|
|
title: $:/core/modules/macros/edit/edit.js
|
|
type: application/javascript
|
|
module-type: macro
|
|
|
|
Edit macro for editting fields and tiddlers
|
|
|
|
\*/
|
|
(function(){
|
|
|
|
/*jslint node: true, browser: true */
|
|
/*global $tw: false */
|
|
"use strict";
|
|
|
|
exports.info = {
|
|
name: "edit",
|
|
dependentOnContextTiddler: true,
|
|
params: {
|
|
field: {byPos: 0, type: "text"}
|
|
}
|
|
};
|
|
|
|
exports.executeMacro = function() {
|
|
// Get the tiddler being editted
|
|
var field = this.hasParameter("field") ? this.params.field : "text",
|
|
tiddler = this.wiki.getTiddler(this.tiddlerTitle),
|
|
Editor;
|
|
// Figure out which editor to use
|
|
// TODO: Tiddler field plugins should be able to specify a field type from which the editor is derived
|
|
if(field === "text" && tiddler.fields.type) {
|
|
Editor = this.wiki.macros.edit.editors[tiddler.fields.type];
|
|
}
|
|
if(!Editor) {
|
|
Editor = this.wiki.macros.edit.editors["text/x-tiddlywiki"];
|
|
}
|
|
this.editor = new Editor(this);
|
|
// Call the editor to generate the child nodes
|
|
var child = this.editor.getChild();
|
|
child.execute(this.parents,this.tiddlerTitle);
|
|
return child;
|
|
};
|
|
|
|
exports.addEventHandlers = function() {
|
|
if(this.editor.addEventHandlers) {
|
|
this.editor.addEventHandlers();
|
|
}
|
|
};
|
|
|
|
exports.postRenderInDom = function() {
|
|
if(this.editor.postRenderInDom) {
|
|
this.editor.postRenderInDom();
|
|
}
|
|
};
|
|
|
|
exports.refreshInDom = function(changes) {
|
|
var t;
|
|
// Only refresh if a dependency is triggered
|
|
if(this.dependencies.hasChanged(changes,this.tiddlerTitle)) {
|
|
// Only refresh if the editor lets us
|
|
if(this.editor.isRefreshable()) {
|
|
// Remove the previous child
|
|
var parent = this.child.domNode.parentNode,
|
|
nextSibling = this.child.domNode.nextSibling;
|
|
parent.removeChild(this.child.domNode);
|
|
// Execute the macro
|
|
this.execute(this.parents,this.tiddlerTitle);
|
|
// Render to the DOM
|
|
this.child.renderInDom(parent,nextSibling);
|
|
this.addEventHandlers();
|
|
}
|
|
} else {
|
|
// Refresh any children
|
|
this.child.refreshInDom(changes);
|
|
}
|
|
};
|
|
|
|
})();
|