added action source tag support...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2016-11-05 19:31:26 +03:00
parent c4c82b65a9
commit ae13de0465
2 changed files with 46 additions and 17 deletions

View File

@ -897,13 +897,15 @@ module.MetaActions = {
// for removal via. .off(..) // for removal via. .off(..)
a_handler.orig_handler = old_handler.orig_handler || old_handler a_handler.orig_handler = old_handler.orig_handler || old_handler
a_handler.orig_handler.event_tag = tag
// not pre mode... // not pre mode...
} else if(mode != 'pre') { } else if(mode != 'pre') {
// XXX // XXX
throw 'Unknown action mode: '+action+'.'+mode throw 'Unknown action mode: '+action+'.'+mode
} }
a_handler.tag = tag a_handler.event_tag = tag
// register handlers locally only... // register handlers locally only...
if(!that.hasOwnProperty('_action_handlers')){ if(!that.hasOwnProperty('_action_handlers')){
@ -989,7 +991,7 @@ module.MetaActions = {
h.splice.apply(h, h.splice.apply(h,
[0, h.length] [0, h.length]
.concat(h.filter(function(e){ .concat(h.filter(function(e){
return e.tag != handler }))) return e.event_tag != handler })))
} }
}) })
} }
@ -1088,15 +1090,17 @@ module.MetaActions = {
// NOTE: this will override existing own attributes. // NOTE: this will override existing own attributes.
// //
// XXX should we include functions by default???? // XXX should we include functions by default????
inlineMixin: function(from, all, descriptors, all_attr_types){ inlineMixin: function(from, options){
// defaults... // defaults...
descriptors = descriptors || true options = options || {}
all_attr_types = all_attr_types || false var descriptors = options.descriptors || true
var all_attr_types = options.all_attr_types || false
var source_tag = options.source_tag
resetHandlerCache = (this.resetHandlerCache || MetaActions.resetHandlerCache) resetHandlerCache = (this.resetHandlerCache || MetaActions.resetHandlerCache)
resetHandlerCache.call(this) resetHandlerCache.call(this)
if(all){ if(options.all){
var keys = [] var keys = []
for(var k in from){ for(var k in from){
keys.push(k) keys.push(k)
@ -1132,6 +1136,18 @@ module.MetaActions = {
|| attr instanceof Action){ || attr instanceof Action){
that[k] = attr that[k] = attr
} }
// source tag actions...
if(source_tag && attr instanceof Action){
// XXX not sure if this is the right way to go...
if(that[k].source_tag || that[k].func.source_tag){
console.warn('Aactions: about to overwrite source tag...\n'
+' from: "'+(that[k].source_tag || that[k].func.source_tag)+'"\n'
+' to: "'+source_tag+'"\n'
+' on:', that[k])
}
that[k].func.source_tag = source_tag
that[k].source_tag = source_tag
}
} }
}) })
@ -1141,11 +1157,11 @@ module.MetaActions = {
// Same as .inlineMixin(..) but isolates a mixin in a seporate object // Same as .inlineMixin(..) but isolates a mixin in a seporate object
// in the inheritance chain... // in the inheritance chain...
// //
mixin: function(from, all, descriptors, all_attr_types){ mixin: function(from, options){
var proto = Object.create(this.__proto__) var proto = Object.create(this.__proto__)
// mixinto an empty object // mixinto an empty object
proto.inlineMixin(from, all, descriptors, all_attr_types) proto.inlineMixin(from, options)
// mark the mixin for simpler removal... // mark the mixin for simpler removal...
proto.__mixin_source = from proto.__mixin_source = from
@ -1158,8 +1174,8 @@ module.MetaActions = {
// Mixin a set of local actions into an object... // Mixin a set of local actions into an object...
// //
// XXX this will not work on non-actions... // XXX this will not work on non-actions...
mixinTo: function(to, all, descriptors, all_attr_types){ mixinTo: function(to, options){
return this.mixin.call(to, this, all, descriptors, all_attr_types) return this.mixin.call(to, this, options)
}, },
@ -1169,14 +1185,15 @@ module.MetaActions = {
// not be affected... // not be affected...
// NOTE: this will not affect event handlers, they should be removed // NOTE: this will not affect event handlers, they should be removed
// manually if needed... // manually if needed...
inlineMixout: function(from, all, descriptors, all_attr_types){ inlineMixout: function(from, options){
// defaults... // defaults...
descriptors = descriptors || true options = options || {}
all_attr_types = all_attr_types || false var descriptors = options.descriptors || true
var all_attr_types = options.all_attr_types || false
(this.resetHandlerCache || MetaActions.resetHandlerCache).call(this) (this.resetHandlerCache || MetaActions.resetHandlerCache).call(this)
if(all){ if(options.all){
var keys = [] var keys = []
for(var k in from){ for(var k in from){
keys.push(k) keys.push(k)
@ -1229,8 +1246,8 @@ module.MetaActions = {
// Remove a set of local mixed in actions from object... // Remove a set of local mixed in actions from object...
// //
mixoutFrom: function(to, all, descriptors, all_attr_types){ mixoutFrom: function(to, options){
return this.mixout.call(to, this, all, descriptors, all_attr_types) return this.mixout.call(to, this, options)
}, },
// Create a child object... // Create a child object...
@ -1275,6 +1292,12 @@ module.MetaActions = {
if(cur.pre){ if(cur.pre){
str += p str += p
// meta...
+ (cur.pre.event_tag ?
normalizeTabs('// Event tag: ' + cur.pre.event_tag) + p : '')
+ (cur.pre.source_tag ?
normalizeTabs('// Source tag: ' + cur.pre.source_tag) + p : '')
// code...
+ normalizeTabs(cur.pre.toString()).replace(/\n/g, p) + normalizeTabs(cur.pre.toString()).replace(/\n/g, p)
+ p + p
} }
@ -1285,6 +1308,12 @@ module.MetaActions = {
if(cur.post){ if(cur.post){
str += p + p str += p + p
// meta...
+ (cur.post.event_tag ?
normalizeTabs('// Event tag: ' + cur.post.event_tag) + p : '')
+ (cur.post.source_tag ?
normalizeTabs('// Source tag: ' + cur.post.source_tag) + p : '')
// code...
+ normalizeTabs(cur.post.toString()).replace(/\n/g, p) + normalizeTabs(cur.post.toString()).replace(/\n/g, p)
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "ig-actions", "name": "ig-actions",
"version": "1.5.3", "version": "1.6.0",
"description": "", "description": "",
"main": "actions.js", "main": "actions.js",
"scripts": { "scripts": {