mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-07-20 18:18:56 +00:00
feature(dom) Events: type, element, listener
This commit is contained in:
parent
a609a48830
commit
bac14f6694
6 changed files with 132 additions and 96 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ var Util, DOM, CloudCmd;
|
|||
'focus': function() {
|
||||
Show = false;
|
||||
}
|
||||
}, window);
|
||||
});
|
||||
|
||||
this.send = function(msg) {
|
||||
CloudCmd.getConfig(function(config) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue