tweaking...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2018-12-16 04:43:45 +03:00
parent f3dc41130b
commit 3dbb59c1e6

View File

@ -1496,11 +1496,24 @@ object.makeConstructor('BaseTags',
var TagsWithHandlersPrototype = { var TagsWithHandlersPrototype = {
__proto__: BaseTagsPrototype, __proto__: BaseTagsPrototype,
// Special tag handlers...
// //
// Example handlers: // Example handlers:
// { // {
// // print the tag operation info...
// //
// // NOTE: the key here is not a normalized tag thus this will
// // never get called directly...
// 'PrintTag': function(tag, action, ...other){
// console.log('TAG:', action, tag, ...other) },
//
// // alias...
// '*': 'PrintTag',
//
// // remove the 'test' tag... // // remove the 'test' tag...
// // // //
// // NOTE: we can return a new value for the tag, if a handler
// // returns null or undefined the tag will not get changed...
// 'test': function(tag, action, ...other){ // 'test': function(tag, action, ...other){
// return this.removeTag('test', tag)[0] }, // return this.removeTag('test', tag)[0] },
// //
@ -1511,20 +1524,22 @@ var TagsWithHandlersPrototype = {
// 'stop': function(tag, action, ...other){ // 'stop': function(tag, action, ...other){
// return false }, // return false },
// //
// // print the tag operation info...
// //
// '*': function(tag, action, ...other){
// console.log('TAG:', action, tag, ...other)
// return tag },
//
// ... // ...
// } // }
// //
__special_tag_handlers__: null, //__special_tag_handlers__: null,
__special_tag_handlers__: {
//'PrintTag': function(tag, action, ...other){
// console.log('TAG:', action, tag, ...other) },
//'*': 'PrintTag',
},
// Call the matching special tag handlers...
//
// NOTE: handlers are called in order of handler occurrence and not // NOTE: handlers are called in order of handler occurrence and not
// in the order the tags are in the given chain/path... // in the order the tags are in the given chain/path...
// NOTE: if no handlers are defined this is a no-op (almost)
handleSpecialTag: function(tags, ...args){ handleSpecialTag: function(tags, ...args){
var that = this var that = this
var handlers = this.__special_tag_handlers__ || {} var handlers = this.__special_tag_handlers__ || {}
@ -1556,8 +1571,13 @@ var TagsWithHandlersPrototype = {
// call the handlers... // call the handlers...
// NOTE: we are threading tag through the handlers... // NOTE: we are threading tag through the handlers...
.reduce(function(tag, handler){ .reduce(function(tag, handler){
return tag // update the returned tag in case we stop prematurely...
&& handler.call(that, tag, ...args) }, tags) tags = tag || tags
// if tag is falsy then stop handling...
var cur = tag
&& handler.call(that, tag, ...args)
// if a handler returned null continue with tag as-is...
return cur == null ? tag : cur }, tags)
// no handlers -> return as-is... // no handlers -> return as-is...
|| tags) }, || tags) },