1.0.1 • Published 6 years ago

callstackjs v1.0.1

Weekly downloads
4
License
MIT
Repository
github
Last release
6 years ago

callStack

JavaScript call stack controller.

API

  • callStack.add(ctx:Object, fn:String, options:Object)
  • callStack.wrap(fn:Function):Function
  • callStack.wrap(ctx:Object, fn:String):Function
  • callStack.wrap(ctx:Object, fn:Function):Function
  • callStack.wrap(ctx:Object, fn:String, options:Object):Function
  • callStack(name:String):Stack — get call stack by name
  • callStack.order(firstName:String, secondName:String, etc)
  • callStack.pause()
  • callStack.unpause()
  • callStack.clear(name:String)
  • callStack.override(ctx:Object, method:String, callback:Function):Function

Use case

var MyView = framework.View.extend({
    initialize: function (){
		callStack('vis').wrap(this, 'visibility');
		callStack('render').wrap(this, 'render', { uniq: 'once' });
	},

	visibility: function (state){
		console.log(this.id+'.vis:', state);
		this.$el.css('display', state ? '' : 'none');
	},

	render: function (){
		console.log(this.id+'.render');
		this.$el.empty().html( ... );
	}
})


callStack.order('render', 'vis');

var viewHeader = new MyView({ id: 'header' });
var viewContent = new MyView({ id: 'content' });
var viewFooter = new MyView({ id: 'footer' });


// (1) Somewhere in the code.
viewHeader.visibility(true);
viewContent.visibility(true);
viewFooter.visibility(true);

// (2)
viewFooter.render(); // (!)
viewHeader.render();
viewContent.render();

// (3)
viewFooter.visibility(false);
viewFooter.render(); // (!!)

Next tick: console

header.render
content.render
footer.render

header.vis: true
content.vis: true
footer.vis: true
footer.vis: false

callStack.override

var module = {
	name: "callStack",
	toString: function (){
		return this.name;
	}
};

module.toString(); // "callStack"

// Owerride `toString` method
callStack.override(module, 'toString', function (toStringFn/*Function*/){
	return function (){
		return '['+ toStringFn.call(this) +']';
	};
});

module.toString(); // "[callStack]"

Options

Option:weight (default = 0)

var foo = callStack.wrap(function (){ console.log("foo:", arguments) }, { weight: 100 });
var bar = callStack.wrap(function (){ console.log("bar:", arguments) }, { weight: 10 });

bar(1);
foo(1);
bar(2);
foo(2);

Console:

foo: 1
foo: 2
bar: 1
bar: 2

Option:uniq

var foo = callStack.wrap(function (){ console.log("foo:", arguments) }, { uniq: true, weight: 100 });
var bar = callStack.wrap(function (){ console.log("bar:", arguments) }, { uniq: "once" });

foo(1);
bar(1);
foo(2);
foo(2);
bar(1)

bar(1);
foo(3);
foo(3);
foo(1);
bar(5);

Console:

foo: 1
foo: 2
foo: 3
foo: 1
bar: 5
1.0.1

6 years ago

1.0.0

8 years ago

0.5.0

8 years ago

0.4.0

10 years ago

0.3.0

11 years ago

0.2.1

11 years ago