feature(listeners) add (un)setOnPanel

This commit is contained in:
coderaiser 2014-03-24 10:16:26 -04:00
parent 2713363e99
commit f5d9360793
2 changed files with 112 additions and 57 deletions

View file

@ -260,6 +260,9 @@ var Util, DOM, CloudFunc;
Listeners.changeLinks(LEFT);
Listeners.changeLinks(RIGHT);
Listeners.setOnPanel(LEFT);
Listeners.setOnPanel(RIGHT);
Listeners.initKeysPanel();
CloudCmd.getConfig(function(config) {
@ -419,7 +422,12 @@ var Util, DOM, CloudFunc;
var n, found, varCurrent, varName, current,
dir = DOM.getCurrentDirName(),
name = DOM.getCurrentName(),
i = panel.childNodes.length;
i = panel.childNodes.length,
LEFT = CloudFunc.PANEL_LEFT,
RIGHT = CloudFunc.PANEL_RIGHT;
Listeners.unSetOnPanel(panel.id);
while(i--)
panel.removeChild(panel.lastChild);
@ -448,6 +456,7 @@ var Util, DOM, CloudFunc;
DOM.setCurrentFile(current);
Listeners.changeLinks(panel.id);
Listeners.setOnPanel(panel.id);
if (name === '..' && dir !== '/')
currentToParent(dir);

View file

@ -9,7 +9,16 @@ var Util, DOM, CloudCmd;
var Info = DOM.CurrentInfo,
Storage = DOM.Storage,
Events = DOM.Events,
getConfig = CloudCmd.getConfig;
getConfig = CloudCmd.getConfig,
OnPathLinks = [],
EventsFiles = {
'mousedown' : Util.bind(ifExecNotUL, setCurrentFile),
'contextmenu' : Util.bind(ifExecNotUL, onContextMenu),
'dragstart' : Util.bind(ifExecNotUL, onDragStart),
'click' : Util.bind(ifExecNotUL, onClick),
'dblclick' : Util.bind(ifExecNotUL, onDblClick),
'touchstart' : Util.bind(ifExecNotUL, onTouch)
};
this.analytics = function() {
getConfig(function(config) {
@ -70,58 +79,18 @@ var Util, DOM, CloudCmd;
}, keysElement);
};
/**
* функция меняет ссыки на ajax-овые
* @param panelId
*/
this.changeLinks = function(panelId) {
var i, n, a, ai, current, link, loadDir, events, id,
this.setOnPanel = function(panelId) {
var i, n, ai, link, loadDir,
url = CloudCmd.HOST,
panel = DOM.getById(panelId),
pathElement = DOM.getByDataName('js-path', panel),
filesElement = DOM.getByClass('files', panel),
loadDirOnce = CloudCmd.loadDir(),
files = filesElement.children,
pathElement = DOM.getByDataName('js-path', panel),
pathLinks = DOM.getByClass('links', pathElement).children,
clearStorage = DOM.getByClass('clear-storage', pathElement),
refresh = DOM.getByDataName('js-refresh', pathElement),
onClick = function (event) {
var ctrl = event.ctrlKey;
if (!ctrl)
DOM.preventDefault(event);
},
onDblClick = function(event) {
var current = getLIElement(event.target),
isDir = DOM.isCurrentIsDir(current);
if (isDir)
loadDirOnce(event);
},
onTouch = function(event) {
var current = getLIElement(event.target),
isDir = DOM.isCurrentIsDir(current);
if (isDir)
setCurrentFile(event, function(element) {
var isCurrent = DOM.isCurrentFile(element);
if (isCurrent)
loadDirOnce(event);
else
DOM.setCurrentFile(element);
});
};
refresh = DOM.getByDataName('js-refresh', pathElement);
/* ставим загрузку гифа на клик*/
Events.addClick(function(event) {
CloudCmd.refresh();
event.preventDefault();
}, refresh);
Events.addClick(onRefreshClick, refresh);
Events.addClick(Storage.clear, clearStorage);
n = pathLinks.length;
@ -129,18 +98,49 @@ var Util, DOM, CloudCmd;
ai = pathLinks[i];
link = Util.removeStr(ai.href, url),
loadDir = CloudCmd.loadDir(link),
Events.addClick(loadDir, ai);
OnPathLinks.push(loadDir);
}
Events.add({
'mousedown' : setCurrentFile,
'contextmenu' : onContextMenu,
'dragstart' : onDragStart,
'click' : onClick,
'dblclick' : onDblClick,
'touchstart' : onTouch
}, filesElement);
Events.add(EventsFiles, filesElement);
};
this.unSetOnPanel = function(panelId) {
var i, n, ai, link, loadDir,
url = CloudCmd.HOST,
panel = DOM.getById(panelId),
filesElement = DOM.getByClass('files', panel),
pathElement = DOM.getByDataName('js-path', panel),
pathLinks = DOM.getByClass('links', pathElement).children,
clearStorage = DOM.getByClass('clear-storage', pathElement),
refresh = DOM.getByDataName('js-refresh', pathElement);
/* ставим загрузку гифа на клик*/
Events.rmClick(onRefreshClick, refresh);
Events.rmClick(Storage.clear, clearStorage);
n = pathLinks.length;
for (i = 0; i < n; i++) {
ai = pathLinks[i];
link = Util.removeStr(ai.href, url),
loadDir = OnPathLinks.shift();
Events.rmClick(loadDir, ai);
}
Events.remove(EventsFiles, filesElement);
};
/**
* функция меняет ссыки на ajax-овые
* @param panelId
*/
this.changeLinks = function(panelId) {
var i, n, a, ai, current, link, loadDir, events, id,
panel = DOM.getById(panelId),
filesElement = DOM.getByClass('files', panel),
files = filesElement.children;
a = DOM.getByTag('a', filesElement);
@ -160,6 +160,47 @@ var Util, DOM, CloudCmd;
}
};
function ifExecNotUL(callback, event) {
var element = event.target,
tag = element.tagName;
if (tag !== 'UL')
Util.exec(callback, event);
}
function onClick(event) {
var ctrl = event.ctrlKey;
if (!ctrl)
DOM.preventDefault(event);
}
function onDblClick(event) {
var current = getLIElement(event.target),
isDir = DOM.isCurrentIsDir(current),
loadDirOnce = CloudCmd.loadDir();
if (isDir)
loadDirOnce(event);
}
function onTouch(event) {
var current = getLIElement(event.target),
isDir = DOM.isCurrentIsDir(current);
if (isDir)
setCurrentFile(event, function(element) {
var isCurrent = DOM.isCurrentFile(element),
loadDirOnce = CloudCmd.loadDir();
if (isCurrent)
loadDirOnce(event);
else
DOM.setCurrentFile(element);
});
}
function onContextMenu(event) {
/* getting html element
* currentTarget - DOM event
@ -208,8 +249,13 @@ var Util, DOM, CloudCmd;
link);
}
function onRefreshClick(event) {
CloudCmd.refresh();
event.preventDefault();
}
function getLIElement(element) {
var tag = element.tagName;
var tag = element.tagName;
if (tag !== 'LI')
do {