From f5d9360793061b489b4de114ab0a4fa2adca4fda Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 24 Mar 2014 10:16:26 -0400 Subject: [PATCH] feature(listeners) add (un)setOnPanel --- lib/client.js | 11 ++- lib/client/listeners.js | 158 ++++++++++++++++++++++++++-------------- 2 files changed, 112 insertions(+), 57 deletions(-) diff --git a/lib/client.js b/lib/client.js index 214d5584..d1ce9ed2 100644 --- a/lib/client.js +++ b/lib/client.js @@ -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); diff --git a/lib/client/listeners.js b/lib/client/listeners.js index 13aee74e..2694ea0b 100644 --- a/lib/client/listeners.js +++ b/lib/client/listeners.js @@ -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 {