feature(dom) Events: type, element, listener

This commit is contained in:
coderaiser 2014-05-28 08:15:19 -04:00
parent a609a48830
commit bac14f6694
6 changed files with 132 additions and 96 deletions

View file

@ -77,8 +77,8 @@ var CloudCmd, Util, DOM;
focus = inputFirst.focus.bind(inputFirst);
Util.forEach(inputs, function(input) {
Events.add('change', onChange, input);
Events.addKey(key, input);
Events.add('change', input, onChange)
.addKey(input, onKey);
});
CloudCmd.View.show(div, {
@ -145,7 +145,7 @@ var CloudCmd, Util, DOM;
Config.write(obj);
}
function key(event) {
function onKey(event) {
var keyCode = event.keyCode,
ESC = Key.ESC;

View file

@ -307,42 +307,57 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
EventsProto = function() {
var Events = this,
parseArgs = function(eventName, listener, element, useCapture, callback) {
var type = Util.getType(eventName);
parseArgs = function(eventName, element, listener, callback) {
var tmp, isFunc,
type = Util.getType(eventName);
switch(type) {
default:
tmp = eventName;
eventName = element;
element = tmp;
parseArgs(
eventName,
element,
listener,
callback
);
break;
case 'string':
isFunc = Util.isFunction(element);
if (isFunc) {
listener = element;
element = window;
}
callback(element || window,
eventName,
listener,
useCapture);
null);
break;
case 'array':
eventName.forEach(function(eventName) {
parseArgs(
eventName,
listener,
element,
useCapture,
listener,
callback
);
});
break;
case 'object':
if (listener)
element = listener;
Object.keys(eventName).forEach(function(name) {
var eventListener = eventName[name];
parseArgs(
name,
eventListener,
element,
useCapture,
eventListener,
callback
);
});
@ -355,12 +370,13 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
* safe add event listener
*
* @param type
* @param listener
* @param useCapture
* @param element {document by default}
* @param listener
*/
this.add = function(type, listener, useCapture, element) {
parseArgs(type, listener, useCapture, element, function(element) {
this.add = function(type, element, listener) {
Util.checkArgs(arguments, ['type']);
parseArgs(type, element, listener, function(element) {
var args = Util.slice(arguments, 1);
window.addEventListener.apply(element, args);
@ -374,16 +390,15 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
*
* @param type
* @param listener
* @param useCapture
* @param element {document by default}
*/
this.addOnce = function(type, listener, element, useCapture) {
this.addOnce = function(type, element, listener) {
var once = function (event) {
Events.remove(type, once, element, useCapture);
Events.remove(type, element, once);
listener(event);
};
this.add(type, once, element, useCapture);
this.add(type, element, once);
return Events;
};
@ -393,11 +408,12 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
*
* @param type
* @param listener
* @param useCapture
* @param element {document by default}
*/
this.remove = function(type, listener, useCapture, element) {
parseArgs(type, listener, useCapture, element, function(element) {
this.remove = function(type, element, listener) {
Util.checkArgs(arguments, ['type']);
parseArgs(type, listener, element, function(element) {
var args = Util.slice(arguments, 1);
window.removeEventListener.apply(element, args);
@ -410,79 +426,101 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
* safe add event keydown listener
*
* @param listener
* @param useCapture
*/
this.addKey = function(listener, element, useCapture) {
return this.add('keydown', listener, element, useCapture);
this.addKey = function() {
var name = 'keydown',
argsArr = Util.slice(arguments),
args = [name].concat(argsArr);
return this.add.apply(this, args);
};
/**
* safe remove event click listener
*
* @param listener
* @param useCapture
*/
this.rmKey = function(listener, element, useCapture) {
return this.remove('keydown', listener, element, useCapture);
this.rmKey = function() {
var name = 'keydown',
argsArr = Util.slice(arguments),
args = [name].concat(argsArr);
return this.remove.apply(this, args);
};
/**
* safe add event click listener
*
* @param listener
* @param useCapture
*/
this.addClick = function(listener, element, useCapture) {
return this.add('click', listener, element, useCapture);
this.addClick = function() {
var name = 'click',
argsArr = Util.slice(arguments),
args = [name].concat(argsArr);
return this.add.apply(this, args);
};
/**
* safe remove event click listener
*
* @param listener
* @param useCapture
*/
this.rmClick = function(listener, element, useCapture) {
return this.remove('click', listener, element, useCapture);
this.rmClick = function() {
var name = 'click',
argsArr = Util.slice(arguments),
args = [name].concat(argsArr);
return this.remove.apply(this, args);
};
this.addContextMenu = function(listener, element, useCapture) {
return this.add('contextmenu', listener, element, useCapture);
this.addContextMenu = function() {
var name = 'contextmenu',
argsArr = Util.slice(arguments),
args = [name].concat(argsArr);
return this.add.apply(this, args);
};
/**
* safe add event click listener
*
* @param listener
* @param useCapture
*/
this.addError = function(listener, element, useCapture) {
return this.add('error', listener, element, useCapture);
this.addError = function() {
var name = 'error',
argsArr = Util.slice(arguments),
args = [name].concat(argsArr);
return this.add.apply(this, args);
};
/**
* safe add load click listener
*
* @param listener
* @param useCapture
*/
this.addLoad = function(listener, element, useCapture) {
return this.add('load', listener, element, useCapture);
this.addLoad = function() {
var name = 'load',
argsArr = Util.slice(arguments),
args = [name].concat(argsArr);
return this.add.apply(this, args);
};
/**
* crossbrowser create event
*
* @param pEventName
* @param pKeyCode - not necessarily
* @param eventName
* @param keyCode - not necessarily
*/
this.create = function(pEventName, pKeyCode) {
this.create = function(eventName, keyCode) {
var event = document.createEvent('Event');
event.initEvent(pEventName, true, true);
event.initEvent(eventName, true, true);
if (pKeyCode)
event.keyCode = pKeyCode;
if (keyCode)
event.keyCode = keyCode;
event.isDefaultPrevented = function() {
return this.defaultPrevented;
@ -494,10 +532,10 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
/**
* create keydown event
*
* @param pKeyCode
* @param keyCode
*/
this.createKey = function(pKeyCode) {
return this.create('keydown', pKeyCode);
this.createKey = function(keyCode) {
return this.create('keydown', keyCode);
};
/**
@ -523,13 +561,13 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
*
* @param pEvent
*/
this.dispatch = function(pEvent, element) {
var event;
this.dispatch = function(event, element) {
var isStr = Util.isString(event);
if (Util.isString(pEvent))
event = Events.create(pEvent);
if (isStr)
event = Events.create(event);
else
event = pEvent;
event = event;
return (element || window).dispatchEvent(event);
};
@ -540,8 +578,8 @@ var CloudCmd, Util, DOM, CloudFunc, Dialog;
* @param pKeyCode
* @param element
*/
this.dispatchKey = function(pKeyCode, element) {
var event = this.createKey(pKeyCode),
this.dispatchKey = function(keyCode, element) {
var event = this.createKey(keyCode),
ret = this.dispatch(event, element);
return ret;

View file

@ -63,14 +63,13 @@ var CloudCmd, Util, DOM, CloudFunc, ace, DiffProto, diff_match_patch, Zip, MenuI
initAce();
Events.add({
drop : onDrop,
dragover : function(event) {
event.preventDefault();
}
}, Element);
Events.addOnce('contextmenu', onMenu, Element);
Events.addOnce('contextmenu', Element, onMenu)
.add(Element, {
drop : onDrop,
dragover : function(event) {
event.preventDefault();
}
});
}
modesByName = Modelist.modesByName;
@ -460,7 +459,7 @@ var CloudCmd, Util, DOM, CloudFunc, ace, DiffProto, diff_match_patch, Zip, MenuI
if (files)
files.forEach(function(file) {
reader = new FileReader();
DOM.Events.addLoad(onLoad, reader);
DOM.Events.addLoad(reader, onLoad);
reader.readAsBinaryString(file);
});
}

View file

@ -51,7 +51,7 @@ var Util, DOM, CloudCmd;
var keysElement = DOM.getById('js-keyspanel');
if (keysElement)
Events.addClick(function(event) {
Events.addClick(keysElement, function(event) {
var element = event.target,
id = element.id,
@ -75,7 +75,7 @@ var Util, DOM, CloudCmd;
Util.exec(func);
}, keysElement);
});
};
this.setOnPanel = function(panelId) {
@ -84,8 +84,8 @@ var Util, DOM, CloudCmd;
pathElement = DOM.getByDataName('js-path', panel);
/* ставим загрузку гифа на клик*/
Events.addClick(onPathElementClick, pathElement);
Events.add(EventsFiles, filesElement);
Events.addClick(pathElement, onPathElementClick);
Events.add(filesElement, EventsFiles);
};
function onPathElementClick(event) {
@ -246,20 +246,20 @@ var Util, DOM, CloudCmd;
appStorage = window.applicationStorage;
if (isAppStorage && appStorage)
Events.add('updateready', function() {
Events.add('updateready', appStorage, function() {
var ret = confirm('An update is available. Reload now?');
if (ret)
location.reload();
}, appStorage);
});
});
}
function contextMenu() {
Events.addContextMenu(function(event) {
Events.addContextMenu(document, function(event) {
CloudCmd.Menu.ENABLED || DOM.preventDefault(event);
}, document);
});
}
function dragndrop() {
@ -304,23 +304,23 @@ var Util, DOM, CloudCmd;
Events.add(['dragenter', 'dragleave'], toggle);
Util.forEach(panels, function(panel) {
Events.add('dragover', preventDefault, panel);
Events.add('drop', onDrop, panel);
Events.add('dragover', panel, preventDefault)
.add('drop', panel, onDrop);
});
}
function unload() {
DOM.Events.add(['unload', 'beforeunload'], function (pEvent) {
var lRet,
DOM.Events.add(['unload', 'beforeunload'], function (event) {
var ret,
Key = CloudCmd.Key,
lIsBind = Key && Key.isBind();
isBind = Key && Key.isBind();
if (!lIsBind) {
DOM.preventDefault(pEvent);
lRet = 'Please make sure that you saved all work.';
if (!isBind) {
DOM.preventDefault(event);
ret = 'Please make sure that you saved all work.';
}
return lRet;
return ret;
});
}

View file

@ -44,8 +44,7 @@ var Util, DOM;
* if object - then onload and onerror
*/
funcLoad = function(event) {
Events.remove('load', funcLoad, element)
.remove('error', funcError, element);
Events.remove('error', element, funcError);
Util.exec(func, event);
},
@ -79,8 +78,8 @@ var Util, DOM;
element = document.createElement(name);
if (name === 'script' || name === 'link')
Events.addLoad(funcLoad, element)
.addError(funcError, element);
Events.addOnce('load', element, funcLoad)
.addError(element, funcError);
if (p.id)
element.id = p.id;
@ -167,7 +166,7 @@ var Util, DOM;
if (p.responseType)
xhr.responseType = p.responseType;
Events.add('progress', function(event) {
Events.add('progress', xhr.upload, function(event) {
var percent, count;
if (event.lengthComputable) {
@ -180,9 +179,9 @@ var Util, DOM;
countProgress = true;
}
}, xhr.upload);
});
Events.add('readystatechange', function(event) {
Events.add('readystatechange', xhr, function(event) {
var TYPE_JSON, type, data, isContain,
xhr = event.target;
@ -213,7 +212,7 @@ var Util, DOM;
Util.exec(p.error, xhr);
}
}
}, xhr);
});
xhr.send(p.data);
};

View file

@ -23,7 +23,7 @@ var Util, DOM, CloudCmd;
'focus': function() {
Show = false;
}
}, window);
});
this.send = function(msg) {
CloudCmd.getConfig(function(config) {