loosejs v1.0.0
Loosejs
loosejs is a listen oriented programming library. It focus on listening, not observing.
It provides a clean communication between web components and the user interface (the outside environment).
Depedency
It depends on jquery (at least v.1.7) to emit and listen javascript event.
Caution
Only put non heavy loading codes inside a listener. System logic should be outside a listener.
Usage
Each web component class (or wrapper) should have at least one loose object.
var lc = require("loose")();DOM event
lc.listen(
function(values){
this; // values is {}, 'this' is the DOM anchor element
}, "click", "a.name" // listen to clicked on <a class='name'> event
);lc.listenDocument(
function(values){
this; // values is {}, 'this' is the DOM document
}, "click" // listen to clicked on DOM document
);lc.listenElement(
function(values){
this; // values is {}, 'this' is the DOM element
}, "click" // listen to clicked on DOM element
);lc.listen(
function(values){
this; // values is {}, 'this' is the DOM document or DOM element
}, "click" // listen to any clicked event
);lc.listen(
function(values){
this; // values is {}, the DOM li elemnt
}, "mouseover", "li.name" // listen to mouseover on <li class='name'>
);Custom event
notify()
lc.notify( true, 'alert boolean event');Listen to its own loose.
lc.listenSelf(
function(values){
console.log("I have send a boolean: " + values);
}, "alert boolean event" // custom event
);Listen to other loose.
lc.listenOthers(
function(values){
console.log("Other have just send a boolean: " + values);
}, "alert boolean event" // custom event
);Listen to all loose and the environment. In other words, all events.
lc.listen(
function(values){
console.log("A loose object just send a boolean: " + values);
}, "alert boolean event" // custom event
);lc.listen(
function(values){
console.log("some one just click");
},
"click", // DOM event
"a" // DOM element
);Enabled or disable
lc.disable(); // stop all activities of this looselc.enable(); // enable all activities of this looselc.isEnable(); // return booleanChaining listener, notifier
lc
.listen(callbackfunction, 'evet name', 'DOM element selector')
.listenSelf(allbackfunction, 'evet name')
.listenOthers(allbackfunction, 'evet name')
.notify(values, 'event name');Dispose all event listening up to the moment of invocation
lc.dispose(); Dispose only registered dispose event listening up to the moment of invocation
First add true argument to the listener
lc.listen(true, callbackfunction, 'click');lc.listen(true, callbackfunction, 'something happens');lc.listenDocument(true, callbackfunction, 'click');lc.listenElement(true, callbackfunction, 'click', 'a');lc.listenSelf(true, callbackfunction, 'submitfail event');lc.listenOthers(true, callbackfunction, 'delete item success event');lc.disposeRegistered();Elaboration
Each web component class should have at least one loose object.
listenwill pick an event based on the event signature.
event signature has at least one argument (event name).
Two types of event. DOM event and custom event
DOM document or DOM element ==> DOM event
notify() ==> custom event
Three variations of event signature. They are:
('click', 'a.name'); // anchor clicked event('click'); // all clicked event('custom event'); // custom eventListen to custom event.
listen(callbackfunction, 'custom event name');Listen to DOM event.
DOM event can have an optional DOM element selector.
listen(callbackfunction, 'DOM event name', 'DOM element selector');DOM event can have multiple event names separated by space.
This is based on jquery event triggering structure.
e.g.
listen(callbackfunction, 'keydown mousedown', 'input');There are four variations of listener, namely listen, listenDocument, listenSelf and listenOthers.
Both listenSelf and listenOthers matches only the custom event (ignoring DOM element selector).
listen to click events on the \.
listen(callbackfunction, 'click', 'a.name');listen to click events only from the DOM document.
listenDocument(callbackfunction, 'click');listen to events all loose.
listen(callbackfunction, 'custom event');listenSelf to events only from its own notify().
listenSelf(callbackfunction, 'custom event'); listenOthers to events only from other notify().
listenOthers(callbackfunction, 'custom event');more on notify()
values of notify(values, 'event name') is either a simple type, or simple key/value pair object type.
Sending null will be converted to {}.
Sending undefined will cause error thrown.
Simple type as a string, number, boolean. Simple key/value pair object type as a {key1: simple type value 1, key2: simple type value 2, ...}. Any other type will be error thrown.
If setting a custom event to a DOM (or html5) event name, e.g. 'click', error will be thrown.
notify({id:'12'}, 'Success. Newly added id event');notify({id:'12'}, 'click'); // error thrown!!!API
(enable or disable);
Instantiation. Default is enable
var lc = require("loose")();listen( is registered dispose, callbackfunction, 'event name', 'optional dom element selector');
e.g.
Listen to anchor clicked event (e.g. ("click", "a.name") clicked \)
values is {}.
this is the clicked \ DOM element
listen(function(values){this;}, 'click', 'a.name');Listen all clicked event
values is {}.
this is the DOM document
listen(function(values){this;}, 'click');Listen to all custom event.
values is {}.
this is the DOM document
listen(function(values){this;}, 'custom event');listenDocument([ is registered dispose, ] callbackfunction, 'custom event or DOM event', [, 'DOM element selector']);
Listen only to DOM document event.
values is {} by default.
this is the DOM document
listenDocument(function(values){this;}, 'click');listenElement([ is registered dispose, ] callbackfunction, 'DOM event', 'DOM element selector');
Listen only to DOM element event.
values is {} by default.
this is the DOM element
listenElement(function(values){this;}, 'click', 'a');listenSelf([ is registered dispose, ] callbackfunction, 'custom event');
Listen to its own custom event.
values is {} by default.
this is the DOM document
listenSelf(function(values){this;}, 'custom event');listenOthers([ is registered dispose, ] function(values){}, 'custom event');
Listen to others' custom event.
values is {}.
this is the DOM document
listenOthers(function(values){this}, 'custom event');notify(values, 'event name');
Send custom event
values: if undefined, cause error thrown, if null, will be turned to {}.
notify({id:12}, 'just added a new person');Disable temporary all the action and reaction
disable();Enable all the action and reaction
enable();Return boolean
isEnable();Disconnect and remove all listener(s) that are up to the moment at invocation, Does not affect listening attached afterwards. Does not change the state of isEnable().
dispose();Disconnect and remove all registered dispose listener(s) that are up to the moment at invocation, Does not affect listening attached afterwards. Does not change the state of isEnable().
lc.disposeRegistered();Further development
This library is on its initial stage. A lot more can be implemented. We suggest following pending development.
- eliminate circular event
- elminate event competing
10 years ago