fixed bug with scrolling in opera and firefox

This commit is contained in:
coderaiser 2013-02-06 14:38:26 -05:00
parent ea938a51a0
commit f4ba5598da
4 changed files with 1884 additions and 1869 deletions

View file

@ -126,6 +126,8 @@ time was changed.
* Fixed bug with old browsers suport.
* Fixed bug with scrolling in opera and firefox.
2012.12.12, Version 0.1.8

File diff suppressed because it is too large Load diff

View file

@ -1,272 +1,273 @@
/* script, fixes ie */
//var Util, DOM, jQuery;
(function(Util, DOM, $){
'use strict';
if(!window.XMLHttpRequest || !document.head)
DOM.ajax = $.ajax;
/* setting head ie6 - ie8 */
if(!document.head){
document.head = $('head')[0];
/*
{name: '', src: ' ',func: '', style: '', id: '', parent: '',
async: false, inner: 'id{color:red, }, class:'', not_append: false}
*/
DOM.cssSet = function(pParams_o){
var lElement = '<style ';
if (pParams_o.id) lElement += 'id=' + pParams_o.id + ' ';
if (pParams_o.style) lElement += 'style=' + pParams_o.style + ' ';
if (pParams_o.className) lElement += 'class=' + pParams_o.className;
if (pParams_o.inner)lElement += '>' + pParams_o.inner;
lElement +='</style>';
return $(lElement)
.appendTo(pParams_o.parent || document.head);
};
}
/* setting function context (this) */
Util.bind = function(pFunction, pContext){
var lRet;
lRet = $.proxy(pFunction, pContext);
return lRet;
};
/*
* typeof callback === "function" should not be used,
* as older browsers may report objects to be a function,
* which they are not
*/
Util.isFunction = $.isFunction;
if (!document.addEventListener)
/**
* safe add event listener on ie
* @param pType
* @param pListener
*/
DOM.addListener = function(pType, pListener, pCapture, pElement){
var lRet;
if(!pElement)
pElement = window;
lRet = $(pElement).bind(pType, null, pListener);
return lRet;
};
if(!document.removeEventListener){
DOM.removeListener = function(pType, pListener, pCapture, pElement){
var lRet;
if(!pElement)
pElement = window;
$(pElement).unbind(pType, pListener);
return lRet;
};
}
if(!document.getElementsByClassName){
DOM.getByClass = function(pClass, pElement){
var lClass = '.' + pClass,
lResult;
if(pElement)
lResult = $(pElement).find(lClass);
else lResult = $.find(lClass);
return lResult;
};
}
/* function polyfill webkit standart function */
DOM.scrollIntoViewIfNeeded = function(pElement, centerIfNeeded){
if(!window.getComputedStyle)
return;
/*
https://gist.github.com/2581101
*/
centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;
var parent = pElement.parentNode,
parentComputedStyle = window.getComputedStyle(parent, null),
parentBorderTopWidth =
parseInt(parentComputedStyle.getPropertyValue('border-top-width'), 10),
parentBorderLeftWidth =
parseInt(parentComputedStyle.getPropertyValue('border-left-width'), 10),
overTop = pElement.offsetTop - parent.offsetTop < parent.scrollTop,
overBottom =
(pElement.offsetTop -
parent.offsetTop +
pElement.clientHeight -
parentBorderTopWidth) >
(parent.scrollTop + parent.clientHeight),
overLeft = pElement.offsetLeft -
parent.offsetLeft < parent.scrollLeft,
overRight =
(pElement.offsetLeft -
parent.offsetLeft +
pElement.clientWidth -
parentBorderLeftWidth) >
(parent.scrollLeft + parent.clientWidth),
alignWithTop = overTop && !overBottom;
if ((overTop || overBottom) && centerIfNeeded)
parent.scrollTop =
pElement.offsetTop -
parent.offsetTop -
parent.clientHeight / 2 -
parentBorderTopWidth +
pElement.clientHeight / 2;
if ((overLeft || overRight) && centerIfNeeded)
parent.scrollLeft =
pElement.offsetLeft -
parent.offsetLeft -
parent.clientWidth / 2 -
parentBorderLeftWidth +
pElement.clientWidth / 2;
if ( (overTop || overBottom || overLeft || overRight) &&
!centerIfNeeded)
pElement.scrollIntoView(alignWithTop);
};
if(!document.body.classList){
DOM.addClass = function(pElement, pClass){
var lSpaceChar = '',
lClassName = pElement.className,
lRet_b = true;
if(lClassName) lSpaceChar = ' ';
if( lClassName.indexOf(pClass) < 0 )
pElement.className += lSpaceChar + pClass;
else
lRet_b = false;
};
DOM.removeClass = function(pElement, pClass){
var lClassName = pElement.className;
if(lClassName.length > pClass.length)
pElement.className = lClassName.replace(pClass, '');
};
}
if(!window.JSON){
Util.parseJSON = $.parseJSON;
/* https://gist.github.com/754454 */
Util.stringifyJSON = function(pObj){
var lRet;
if (!Util.isObject(pObj) || pObj === null) {
// simple data type
if (Util.isString(pObj)) pObj = '"' + pObj + '"';
lRet = String(pObj);
} else {
// recurse array or object
var n, v, json = [], isArray = Util.isArray(pObj);
for (n in pObj) {
v = pObj[n];
if (pObj.hasOwnProperty(n)) {
if (Util.isString(v))
v = '"' + v + '"';
else if (v && Util.isObject(v))
v = DOM.stringifyJSON(v);
json.push((isArray ? "" : '"' + n + '":') + String(v));
}
}
lRet = (isArray ? "[" : "{") + String(json) + (isArray ? "]" : "}");
}
return lRet;
};
}
if(!window.localStorage){
var Cache = function(){
/* приватный переключатель возможности работы с кэшем */
var CacheAllowed,
Data = {};
/* функция проверяет возможно ли работать с кэшем каким-либо образом */
this.isAllowed = function(){
return CacheAllowed;
};
this.setAllowed = function(){
CacheAllowed = true;
};
this.UnSetAllowed = function(){
CacheAllowed = false;
};
/** remove element */
this.remove = function(pItem){
var lRet = this;
if(CacheAllowed)
delete Data[pItem];
return lRet;
};
/** если доступен localStorage и
* в нём есть нужная нам директория -
* записываем данные в него
*/
this.set = function(pName, pData){
var lRet = this;
if(CacheAllowed && pName && pData)
Data[pName] = pData;
return lRet;
},
/** Если доступен Cache принимаем из него данные*/
this.get = function(pName){
var lRet = false;
if(CacheAllowed)
lRet = Data[pName];
return lRet;
},
/** функция чистит весь кэш для всех каталогов*/
this.clear = function(){
var lRet = this;
if(CacheAllowed)
Data = {};
return lRet;
};
};
DOM.Cache = new Cache();
}
/* script, fixes ie */
//var Util, DOM, jQuery;
(function(Util, DOM, $){
'use strict';
if(!window.XMLHttpRequest || !document.head)
DOM.ajax = $.ajax;
/* setting head ie6 - ie8 */
if(!document.head){
document.head = $('head')[0];
/*
{name: '', src: ' ',func: '', style: '', id: '', parent: '',
async: false, inner: 'id{color:red, }, class:'', not_append: false}
*/
DOM.cssSet = function(pParams_o){
var lElement = '<style ';
if (pParams_o.id) lElement += 'id=' + pParams_o.id + ' ';
if (pParams_o.style) lElement += 'style=' + pParams_o.style + ' ';
if (pParams_o.className) lElement += 'class=' + pParams_o.className;
if (pParams_o.inner)lElement += '>' + pParams_o.inner;
lElement +='</style>';
return $(lElement)
.appendTo(pParams_o.parent || document.head);
};
}
/* setting function context (this) */
Util.bind = function(pFunction, pContext){
var lRet;
lRet = $.proxy(pFunction, pContext);
return lRet;
};
/*
* typeof callback === "function" should not be used,
* as older browsers may report objects to be a function,
* which they are not
*/
Util.isFunction = $.isFunction;
if (!document.addEventListener)
/**
* safe add event listener on ie
* @param pType
* @param pListener
*/
DOM.addListener = function(pType, pListener, pCapture, pElement){
var lRet;
if(!pElement)
pElement = window;
lRet = $(pElement).bind(pType, null, pListener);
return lRet;
};
if(!document.removeEventListener){
DOM.removeListener = function(pType, pListener, pCapture, pElement){
var lRet;
if(!pElement)
pElement = window;
$(pElement).unbind(pType, pListener);
return lRet;
};
}
if(!document.getElementsByClassName){
DOM.getByClass = function(pClass, pElement){
var lClass = '.' + pClass,
lResult;
if(pElement)
lResult = $(pElement).find(lClass);
else lResult = $.find(lClass);
return lResult;
};
}
DOM.scrollByPages = Util.retFalse;
/* function polyfill webkit standart function */
DOM.scrollIntoViewIfNeeded = function(pElement, centerIfNeeded){
if(!window.getComputedStyle)
return;
/*
https://gist.github.com/2581101
*/
centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;
var parent = pElement.parentNode,
parentComputedStyle = window.getComputedStyle(parent, null),
parentBorderTopWidth =
parseInt(parentComputedStyle.getPropertyValue('border-top-width'), 10),
parentBorderLeftWidth =
parseInt(parentComputedStyle.getPropertyValue('border-left-width'), 10),
overTop = pElement.offsetTop - parent.offsetTop < parent.scrollTop,
overBottom =
(pElement.offsetTop -
parent.offsetTop +
pElement.clientHeight -
parentBorderTopWidth) >
(parent.scrollTop + parent.clientHeight),
overLeft = pElement.offsetLeft -
parent.offsetLeft < parent.scrollLeft,
overRight =
(pElement.offsetLeft -
parent.offsetLeft +
pElement.clientWidth -
parentBorderLeftWidth) >
(parent.scrollLeft + parent.clientWidth),
alignWithTop = overTop && !overBottom;
if ((overTop || overBottom) && centerIfNeeded)
parent.scrollTop =
pElement.offsetTop -
parent.offsetTop -
parent.clientHeight / 2 -
parentBorderTopWidth +
pElement.clientHeight / 2;
if ((overLeft || overRight) && centerIfNeeded)
parent.scrollLeft =
pElement.offsetLeft -
parent.offsetLeft -
parent.clientWidth / 2 -
parentBorderLeftWidth +
pElement.clientWidth / 2;
if ( (overTop || overBottom || overLeft || overRight) &&
!centerIfNeeded)
pElement.scrollIntoView(alignWithTop);
};
if(!document.body.classList){
DOM.addClass = function(pElement, pClass){
var lSpaceChar = '',
lClassName = pElement.className,
lRet_b = true;
if(lClassName) lSpaceChar = ' ';
if( lClassName.indexOf(pClass) < 0 )
pElement.className += lSpaceChar + pClass;
else
lRet_b = false;
};
DOM.removeClass = function(pElement, pClass){
var lClassName = pElement.className;
if(lClassName.length > pClass.length)
pElement.className = lClassName.replace(pClass, '');
};
}
if(!window.JSON){
Util.parseJSON = $.parseJSON;
/* https://gist.github.com/754454 */
Util.stringifyJSON = function(pObj){
var lRet;
if (!Util.isObject(pObj) || pObj === null) {
// simple data type
if (Util.isString(pObj)) pObj = '"' + pObj + '"';
lRet = String(pObj);
} else {
// recurse array or object
var n, v, json = [], isArray = Util.isArray(pObj);
for (n in pObj) {
v = pObj[n];
if (pObj.hasOwnProperty(n)) {
if (Util.isString(v))
v = '"' + v + '"';
else if (v && Util.isObject(v))
v = DOM.stringifyJSON(v);
json.push((isArray ? "" : '"' + n + '":') + String(v));
}
}
lRet = (isArray ? "[" : "{") + String(json) + (isArray ? "]" : "}");
}
return lRet;
};
}
if(!window.localStorage){
var Cache = function(){
/* приватный переключатель возможности работы с кэшем */
var CacheAllowed,
Data = {};
/* функция проверяет возможно ли работать с кэшем каким-либо образом */
this.isAllowed = function(){
return CacheAllowed;
};
this.setAllowed = function(){
CacheAllowed = true;
};
this.UnSetAllowed = function(){
CacheAllowed = false;
};
/** remove element */
this.remove = function(pItem){
var lRet = this;
if(CacheAllowed)
delete Data[pItem];
return lRet;
};
/** если доступен localStorage и
* в нём есть нужная нам директория -
* записываем данные в него
*/
this.set = function(pName, pData){
var lRet = this;
if(CacheAllowed && pName && pData)
Data[pName] = pData;
return lRet;
},
/** Если доступен Cache принимаем из него данные*/
this.get = function(pName){
var lRet = false;
if(CacheAllowed)
lRet = Data[pName];
return lRet;
},
/** функция чистит весь кэш для всех каталогов*/
this.clear = function(){
var lRet = this;
if(CacheAllowed)
Data = {};
return lRet;
};
};
DOM.Cache = new Cache();
}
})(Util, DOM, jQuery);

View file

@ -1,308 +1,308 @@
var CloudCommander, Util, DOM;
(function(CloudCmd, Util, DOM){
"use strict";
DOM.Images.hideLoad();
/* private property set or set key binding */
var keyBinded;
/* Key constants*/
CloudCmd.KEY = {
TAB : 9,
ENTER : 13,
ESC : 27,
PAGE_UP : 33,
PAGE_DOWN : 34,
END : 35,
HOME : 36,
UP : 38,
DOWN : 40,
Delete : 46,
D : 68,
G : 71,
O : 79,
Q : 81,
R : 82,
S : 83,
T : 84,
F2 : 113,
F3 : 114,
F4 : 115,
F10 : 121,
TRA : 192 /* Typewritten Reverse Apostrophe (`) */
};
var KEY = CloudCmd.KEY;
CloudCmd.KeyBinding = {};
var KeyBinding = CloudCmd.KeyBinding;
KeyBinding.get = function(){return keyBinded;};
KeyBinding.set = function(){keyBinded = true;};
KeyBinding.unSet = function(){keyBinded = false;};
KeyBinding.init = function(){
/* saving state of tabs varibles */
var lTabPanel = {
left : 0,
right : 0
};
var key_event = function(pEvent){
/* получаем выдленный файл*/
var lCurrentFile = DOM.getCurrentFile(), i;
/* если клавиши можно обрабатывать*/
if(keyBinded && pEvent){
var lKeyCode = pEvent.keyCode;
/* open configuration window */
if(lKeyCode === KEY.O && pEvent.altKey){
console.log('openning config window...');
DOM.Images.showLoad({top: true});
Util.exec(CloudCmd.Config);
}
else if(lKeyCode === KEY.G && pEvent.altKey)
Util.exec(CloudCmd.GitHub);
else if(lKeyCode === KEY.D && pEvent.altKey){
Util.exec(CloudCmd.DropBox);
DOM.preventDefault(pEvent);
}
/* если нажали таб:
* переносим курсор на
* правую панель, если
* мы были на левой и
* наоборот
*/
else if(lKeyCode === KEY.TAB){
console.log('Tab pressed');
Util.tryCatchLog(function(){
/* changing parent panel of curent-file */
var lPanel = DOM.getPanel(),
lId = lPanel.id;
lTabPanel[lId] = lCurrentFile;
lPanel = DOM.getPanel({active:false});
lId = lPanel.id;
if(lTabPanel[lId])
DOM.setCurrentFile(lTabPanel[lId]);
else{
var lFirstFileOnList = DOM.getByTag('li', lPanel)[2];
DOM.setCurrentFile(lFirstFileOnList);
}
});
DOM.preventDefault(pEvent);//запрет на дальнейшее действие
}
else if(lKeyCode === KEY.Delete)
DOM.promptRemoveCurrent(lCurrentFile);
/* if f3 or shift+f3 or alt+f3 pressed */
else if(lKeyCode === KEY.F3){
var lEditor = CloudCmd[pEvent.shiftKey ?
'Viewer' : 'Editor'];
Util.exec(lEditor, true);
DOM.preventDefault(pEvent);
}
/* if f4 pressed */
else if(lKeyCode === KEY.F4) {
DOM.Images.showLoad();
Util.exec(CloudCmd.Editor);
DOM.preventDefault(pEvent);
}
else if(lKeyCode === KEY.F10 && pEvent.shiftKey){
Util.exec(CloudCmd.Menu);
DOM.preventDefault(pEvent);
}
else if (lKeyCode === KEY.TRA){
DOM.Images.showLoad({top: true});
Util.exec(CloudCmd.Terminal);
}
/* навигация по таблице файлов *
* если нажали клавишу вверх *
* выделяем предыдущую строку */
else if(lKeyCode === KEY.UP){
DOM.setCurrentFile( lCurrentFile.previousSibling );
DOM.preventDefault( pEvent );
}
/* если нажали клавишу в низ *
* выделяем следующую строку */
else if(lKeyCode === KEY.DOWN){
DOM.setCurrentFile( lCurrentFile.nextSibling );
DOM.preventDefault( pEvent );
}
/* если нажали клавишу Home *
* переходим к самому верхнему *
* элементу */
else if(lKeyCode === KEY.HOME){
DOM.setCurrentFile( lCurrentFile.parentElement.firstChild );
DOM.preventDefault(pEvent);
}
/* если нажали клавишу End
* выделяем последний элемент
*/
else if(lKeyCode === KEY.END){
DOM.setCurrentFile( lCurrentFile.parentElement.lastElementChild );
DOM.preventDefault( pEvent );
}
/* если нажали клавишу page down
* проматываем экран
*/
else if(lKeyCode === KEY.PAGE_DOWN){
DOM.getPanel().scrollByPages(1);
for(i=0; i<30; i++){
if(!lCurrentFile.nextSibling) break;
lCurrentFile = lCurrentFile.nextSibling;
}
DOM.setCurrentFile(lCurrentFile);
DOM.preventDefault(pEvent);
}
/* если нажали клавишу page up
* проматываем экран
*/
else if(lKeyCode === KEY.PAGE_UP){
DOM.getPanel().scrollByPages(-1);
var lC = lCurrentFile,
tryCatch = function(pCurrentFile){
Util.tryCatch(function(){
return pCurrentFile
.previousSibling
.previousSibling
.previousSibling
.previousSibling;
});
};
for(i = 0; i < 30; i++){
if(!lC.previousSibling || tryCatch(lC) ) break;
lC = lC.previousSibling;
}
DOM.setCurrentFile(lC);
DOM.preventDefault(pEvent);
}
/* если нажали Enter - открываем папку*/
else if(lKeyCode === KEY.ENTER)
Util.exec(CloudCmd._loadDir());
/* если нажали <ctr>+r
* обновляем страницу,
* загружаем содержимое каталога
* при этом данные берём всегда с
* сервера, а не из кэша
* (обновляем кэш)
*/
else if(lKeyCode === KEY.R && pEvent.ctrlKey){
console.log('<ctrl>+r pressed\n' +
'reloading page...\n' +
'press <alt>+q to remove all key-handlers');
/* Программно нажимаем на кнопку перезагрузки
* содержимого каталога
*/
var lRefreshIcon = DOM.getRefreshButton();
if(lRefreshIcon){
/* получаем название файла*/
var lSelectedName = DOM.getCurrentName(lCurrentFile);
/* если нашли элемент нажимаем него
* а если не можем - нажимаем на
* ссылку, на которую повешен eventHandler
* onclick
*/
Util.exec( DOM.getListener(lRefreshIcon) );
CloudCmd._currentToParent(lSelectedName);
DOM.preventDefault();
}
}
/* если нажали <ctrl>+d чистим кэш */
else if(lKeyCode === KEY.D && pEvent.ctrlKey){
Util.log('<ctrl>+d pressed\n' +
'clearing cache...\n' +
'press <alt>+q to remove all key-handlers');
DOM.Cache.clear();
DOM.preventDefault();
}
/* если нажали <alt>+q
* убираем все обработчики
* нажатий клавиш
*/
else if(lKeyCode === KEY.Q && pEvent.altKey){
console.log('<alt>+q pressed\n' +
'<ctrl>+r reload key-handerl - removed' +
'<ctrl>+s clear cache key-handler - removed'+
'press <alt>+s to to set them');
/* обработчик нажатий клавиш снят*/
keyBinded = false;
pEvent.preventDefault();//запрет на дальнейшее действие
}
}
/* если нажали <alt>+s
* устанавливаем все обработчики
* нажатий клавиш
*/
else if(pEvent.keyCode === KEY.S && pEvent.altKey){
/* обрабатываем нажатия на клавиши*/
keyBinded = true;
console.log('<alt>+s pressed\n' +
'<ctrl>+r reload key-handerl - set\n' +
'<ctrl>+s clear cache key-handler - set\n' +
'press <alt>+q to remove them');
pEvent.preventDefault();//запрет на дальнейшее действие
}
};
/* добавляем обработчик клавишь */
DOM.addKeyListener(key_event);
/* клавиши назначены*/
keyBinded = true;
};
var CloudCommander, Util, DOM;
(function(CloudCmd, Util, DOM){
"use strict";
DOM.Images.hideLoad();
/* private property set or set key binding */
var keyBinded;
/* Key constants*/
CloudCmd.KEY = {
TAB : 9,
ENTER : 13,
ESC : 27,
PAGE_UP : 33,
PAGE_DOWN : 34,
END : 35,
HOME : 36,
UP : 38,
DOWN : 40,
Delete : 46,
D : 68,
G : 71,
O : 79,
Q : 81,
R : 82,
S : 83,
T : 84,
F2 : 113,
F3 : 114,
F4 : 115,
F10 : 121,
TRA : 192 /* Typewritten Reverse Apostrophe (`) */
};
var KEY = CloudCmd.KEY;
CloudCmd.KeyBinding = {};
var KeyBinding = CloudCmd.KeyBinding;
KeyBinding.get = function(){return keyBinded;};
KeyBinding.set = function(){keyBinded = true;};
KeyBinding.unSet = function(){keyBinded = false;};
KeyBinding.init = function(){
/* saving state of tabs varibles */
var lTabPanel = {
left : 0,
right : 0
};
var key_event = function(pEvent){
/* получаем выдленный файл*/
var lCurrentFile = DOM.getCurrentFile(), i;
/* если клавиши можно обрабатывать*/
if(keyBinded && pEvent){
var lKeyCode = pEvent.keyCode;
/* open configuration window */
if(lKeyCode === KEY.O && pEvent.altKey){
console.log('openning config window...');
DOM.Images.showLoad({top: true});
Util.exec(CloudCmd.Config);
}
else if(lKeyCode === KEY.G && pEvent.altKey)
Util.exec(CloudCmd.GitHub);
else if(lKeyCode === KEY.D && pEvent.altKey){
Util.exec(CloudCmd.DropBox);
DOM.preventDefault(pEvent);
}
/* если нажали таб:
* переносим курсор на
* правую панель, если
* мы были на левой и
* наоборот
*/
else if(lKeyCode === KEY.TAB){
console.log('Tab pressed');
Util.tryCatchLog(function(){
/* changing parent panel of curent-file */
var lPanel = DOM.getPanel(),
lId = lPanel.id;
lTabPanel[lId] = lCurrentFile;
lPanel = DOM.getPanel({active:false});
lId = lPanel.id;
if(lTabPanel[lId])
DOM.setCurrentFile(lTabPanel[lId]);
else{
var lFirstFileOnList = DOM.getByTag('li', lPanel)[2];
DOM.setCurrentFile(lFirstFileOnList);
}
});
DOM.preventDefault(pEvent);//запрет на дальнейшее действие
}
else if(lKeyCode === KEY.Delete)
DOM.promptRemoveCurrent(lCurrentFile);
/* if f3 or shift+f3 or alt+f3 pressed */
else if(lKeyCode === KEY.F3){
var lEditor = CloudCmd[pEvent.shiftKey ?
'Viewer' : 'Editor'];
Util.exec(lEditor, true);
DOM.preventDefault(pEvent);
}
/* if f4 pressed */
else if(lKeyCode === KEY.F4) {
DOM.Images.showLoad();
Util.exec(CloudCmd.Editor);
DOM.preventDefault(pEvent);
}
else if(lKeyCode === KEY.F10 && pEvent.shiftKey){
Util.exec(CloudCmd.Menu);
DOM.preventDefault(pEvent);
}
else if (lKeyCode === KEY.TRA){
DOM.Images.showLoad({top: true});
Util.exec(CloudCmd.Terminal);
}
/* навигация по таблице файлов *
* если нажали клавишу вверх *
* выделяем предыдущую строку */
else if(lKeyCode === KEY.UP){
DOM.setCurrentFile( lCurrentFile.previousSibling );
DOM.preventDefault( pEvent );
}
/* если нажали клавишу в низ *
* выделяем следующую строку */
else if(lKeyCode === KEY.DOWN){
DOM.setCurrentFile( lCurrentFile.nextSibling );
DOM.preventDefault( pEvent );
}
/* если нажали клавишу Home *
* переходим к самому верхнему *
* элементу */
else if(lKeyCode === KEY.HOME){
DOM.setCurrentFile( lCurrentFile.parentElement.firstChild );
DOM.preventDefault(pEvent);
}
/* если нажали клавишу End
* выделяем последний элемент
*/
else if(lKeyCode === KEY.END){
DOM.setCurrentFile( lCurrentFile.parentElement.lastElementChild );
DOM.preventDefault( pEvent );
}
/* если нажали клавишу page down
* проматываем экран
*/
else if(lKeyCode === KEY.PAGE_DOWN){
DOM.scrollByPages( DOM.getPanel(), 1 );
for(i=0; i<30; i++){
if(!lCurrentFile.nextSibling) break;
lCurrentFile = lCurrentFile.nextSibling;
}
DOM.setCurrentFile(lCurrentFile);
DOM.preventDefault(pEvent);
}
/* если нажали клавишу page up
* проматываем экран
*/
else if(lKeyCode === KEY.PAGE_UP){
DOM.scrollByPages( DOM.getPanel(), -1 );
var lC = lCurrentFile,
tryCatch = function(pCurrentFile){
Util.tryCatch(function(){
return pCurrentFile
.previousSibling
.previousSibling
.previousSibling
.previousSibling;
});
};
for(i = 0; i < 30; i++){
if(!lC.previousSibling || tryCatch(lC) ) break;
lC = lC.previousSibling;
}
DOM.setCurrentFile(lC);
DOM.preventDefault(pEvent);
}
/* если нажали Enter - открываем папку*/
else if(lKeyCode === KEY.ENTER)
Util.exec(CloudCmd._loadDir());
/* если нажали <ctr>+r
* обновляем страницу,
* загружаем содержимое каталога
* при этом данные берём всегда с
* сервера, а не из кэша
* (обновляем кэш)
*/
else if(lKeyCode === KEY.R && pEvent.ctrlKey){
console.log('<ctrl>+r pressed\n' +
'reloading page...\n' +
'press <alt>+q to remove all key-handlers');
/* Программно нажимаем на кнопку перезагрузки
* содержимого каталога
*/
var lRefreshIcon = DOM.getRefreshButton();
if(lRefreshIcon){
/* получаем название файла*/
var lSelectedName = DOM.getCurrentName(lCurrentFile);
/* если нашли элемент нажимаем него
* а если не можем - нажимаем на
* ссылку, на которую повешен eventHandler
* onclick
*/
Util.exec( DOM.getListener(lRefreshIcon) );
CloudCmd._currentToParent(lSelectedName);
DOM.preventDefault();
}
}
/* если нажали <ctrl>+d чистим кэш */
else if(lKeyCode === KEY.D && pEvent.ctrlKey){
Util.log('<ctrl>+d pressed\n' +
'clearing cache...\n' +
'press <alt>+q to remove all key-handlers');
DOM.Cache.clear();
DOM.preventDefault();
}
/* если нажали <alt>+q
* убираем все обработчики
* нажатий клавиш
*/
else if(lKeyCode === KEY.Q && pEvent.altKey){
console.log('<alt>+q pressed\n' +
'<ctrl>+r reload key-handerl - removed' +
'<ctrl>+s clear cache key-handler - removed'+
'press <alt>+s to to set them');
/* обработчик нажатий клавиш снят*/
keyBinded = false;
pEvent.preventDefault();//запрет на дальнейшее действие
}
}
/* если нажали <alt>+s
* устанавливаем все обработчики
* нажатий клавиш
*/
else if(pEvent.keyCode === KEY.S && pEvent.altKey){
/* обрабатываем нажатия на клавиши*/
keyBinded = true;
console.log('<alt>+s pressed\n' +
'<ctrl>+r reload key-handerl - set\n' +
'<ctrl>+s clear cache key-handler - set\n' +
'press <alt>+q to remove them');
pEvent.preventDefault();//запрет на дальнейшее действие
}
};
/* добавляем обработчик клавишь */
DOM.addKeyListener(key_event);
/* клавиши назначены*/
keyBinded = true;
};
})(CloudCommander, Util, DOM);