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

Catch navigation events that fall through to the document

And broadcast them back to the first story macro that accepts them
This commit is contained in:
Jeremy Ruston 2012-03-13 15:12:23 +00:00
parent 33420ac936
commit 581d165822
2 changed files with 39 additions and 4 deletions

View File

@ -120,6 +120,10 @@ var App = function() {
text: "The time was recently " + (new Date()).toString()
}));
},3000);
// Listen for navigate events that weren't caught
document.addEventListener("tw-navigate",function (event) {
renderer.broadcastEvent(event);
},false);
}
};

View File

@ -34,6 +34,10 @@ Node.prototype.clone = function() {
return this;
};
Node.prototype.broadcastEvent = function(event) {
return true;
}
Node.prototype.execute =
Node.prototype.render =
Node.prototype.renderInDom =
@ -220,10 +224,6 @@ MacroNode.prototype.renderInDom = function(parentDomNode,insertBefore) {
}
};
MacroNode.prototype.handleEvent = function(event) {
return this.macro.events[event.type].call(this,event);
};
MacroNode.prototype.refresh = function(changes) {
var t,
self = this;
@ -267,6 +267,26 @@ MacroNode.prototype.refreshInDom = function(changes) {
}
};
MacroNode.prototype.handleEvent = function(event) {
return this.macro.events[event.type].call(this,event);
};
MacroNode.prototype.broadcastEvent = function(event) {
if(this.macro.events && this.macro.events.hasOwnProperty(event.type)) {
if(!this.handleEvent(event)) {
return false;
}
}
if(this.content) {
for(var t=0; t<this.content.length; t++) {
if(!this.content[t].broadcastEvent(event)) {
return false;
}
}
}
return true;
};
var ElementNode = function(type,attributes,children) {
if(this instanceof ElementNode) {
this.type = type;
@ -381,6 +401,17 @@ ElementNode.prototype.refreshInDom = function(changes) {
}
};
ElementNode.prototype.broadcastEvent = function(event) {
if(this.children) {
for(var t=0; t<this.children.length; t++) {
if(!this.children[t].broadcastEvent(event)) {
return false;
}
}
}
return true;
};
var TextNode = function(text) {
if(this instanceof TextNode) {
this.text = text;