mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 10:45:47 +00:00
fixed bug with saving json to localStorage, it's always writed root directory
This commit is contained in:
parent
31349cc086
commit
ed4f497122
4 changed files with 114 additions and 95 deletions
|
|
@ -34,6 +34,9 @@ would be on top.
|
|||
|
||||
* Added ability to copy files.
|
||||
|
||||
* Fixed bug with saving json to localStorage, it's always
|
||||
writed root directory.
|
||||
|
||||
|
||||
2012.03.01, Version 0.1.9
|
||||
|
||||
|
|
|
|||
|
|
@ -335,8 +335,9 @@ var Util, DOM, CloudFunc, $, KeyBinding, CloudCommander;
|
|||
/* устанавливаем переменную доступности кэша */
|
||||
DOM.Cache.isAllowed();
|
||||
/* Устанавливаем кэш корневого каталога */
|
||||
if( !DOM.Cache.get('/') )
|
||||
DOM.Cache.set('/', CloudCmd._getJSONfromFileTable());
|
||||
var lDirPath = DOM.getCurrentDirPath();
|
||||
if( !DOM.Cache.get(lDirPath) )
|
||||
DOM.Cache.set(lDirPath, CloudCmd._getJSONfromFileTable());
|
||||
});
|
||||
|
||||
/* выделяем строку с первым файлом */
|
||||
|
|
@ -544,18 +545,22 @@ var Util, DOM, CloudFunc, $, KeyBinding, CloudCommander;
|
|||
pOptions = {};
|
||||
|
||||
/* Отображаем красивые пути */
|
||||
var lFSPath = decodeURI(pPath),
|
||||
var lSLASH = '/',
|
||||
lFSPath = decodeURI(pPath),
|
||||
lNOJSPath = Util.removeStr( lFSPath, '?json' ),
|
||||
lCleanPath = Util.removeStr( lNOJSPath, CloudFunc.FS ) || '/',
|
||||
lCleanPath = Util.removeStr( lNOJSPath, CloudFunc.FS ) || lSLASH,
|
||||
|
||||
lOldURL = window.location.pathname;
|
||||
|
||||
if(lCleanPath === lSLASH)
|
||||
lNOJSPath = lSLASH;
|
||||
else
|
||||
lCleanPath += lSLASH;
|
||||
|
||||
Util.log ('reading dir: "' + lCleanPath + '";');
|
||||
|
||||
if(!pOptions.nohistory){
|
||||
lNOJSPath = lCleanPath === '/' ? '/' : lNOJSPath;
|
||||
if(!pOptions.nohistory)
|
||||
DOM.setHistory(lNOJSPath, null, lNOJSPath);
|
||||
}
|
||||
|
||||
DOM.setTitle( CloudFunc.getTitle(lCleanPath) );
|
||||
|
||||
|
|
@ -679,18 +684,20 @@ var Util, DOM, CloudFunc, $, KeyBinding, CloudCommander;
|
|||
/* пропускам Path и Header*/
|
||||
for(i = 2, n = lLI.length; i < n; i++){
|
||||
var lCurrent = lLI[i],
|
||||
|
||||
lName = DOM.getCurrentName(lCurrent),
|
||||
lSize = DOM.getCurrentSize(lCurrent),
|
||||
/* переводим права доступа в цыфровой вид
|
||||
* для хранения в localStorage
|
||||
*/
|
||||
lMode = DOM.getCurrentMode(lCurrent);
|
||||
lMode = CloudFunc.convertPermissionsToNumberic(lMode);
|
||||
lMode = CloudFunc.getNumericPermissions(lMode);
|
||||
|
||||
lFileTable[ j++ ] = {
|
||||
name: DOM.getCurrentName(lCurrent),
|
||||
size: DOM.getCurrentSize(lCurrent),
|
||||
mode: lMode
|
||||
};
|
||||
if(lName !== '..')
|
||||
lFileTable[ j++ ] = {
|
||||
name: lName,
|
||||
size: lSize,
|
||||
mode: lMode
|
||||
};
|
||||
}
|
||||
return Util.stringifyJSON(lFileTable);
|
||||
};
|
||||
|
|
|
|||
162
lib/cloudfunc.js
162
lib/cloudfunc.js
|
|
@ -1,4 +1,4 @@
|
|||
var CloudFunc, exports;
|
||||
var CloudFunc, exports, Util;
|
||||
|
||||
(function(){
|
||||
'use strict';
|
||||
|
|
@ -7,36 +7,56 @@ var CloudFunc, exports;
|
|||
* Модуль, содержащий функции, которые
|
||||
* будут работать и на клиенте и на сервере
|
||||
*/
|
||||
|
||||
CloudFunc = exports || {};
|
||||
var FS;
|
||||
if(exports){
|
||||
CloudFunc = exports;
|
||||
if(!global.cloudcmd){
|
||||
return console.log(
|
||||
'# cloudfunc.js' + '\n' +
|
||||
'# -----------' + '\n' +
|
||||
'# Module is part of Cloud Commander,' + '\n' +
|
||||
'# used for work generate html from json.' + '\n' +
|
||||
'# ' + '\n' +
|
||||
'# http://coderaiser.github.com/cloudcmd' + '\n');
|
||||
}
|
||||
|
||||
Util = global.cloudcmd.main.util;
|
||||
}
|
||||
else
|
||||
CloudFunc = {};
|
||||
|
||||
/* Путь с которым мы сейчас работаем */
|
||||
CloudFunc.Path = '';
|
||||
CloudFunc.Path = '';
|
||||
|
||||
/* КОНСТАНТЫ (общие для клиента и сервера)*/
|
||||
|
||||
/* название программы */
|
||||
CloudFunc.NAME = 'Cloud Commander';
|
||||
CloudFunc.NAME = 'Cloud Commander';
|
||||
|
||||
/* если в ссылке будет эта строка - в браузере js отключен */
|
||||
CloudFunc.FS = '/fs';
|
||||
CloudFunc.FS = FS = '/fs';
|
||||
|
||||
/* название css-класа кнопки обновления файловой структуры*/
|
||||
CloudFunc.REFRESHICON = 'refresh-icon';
|
||||
CloudFunc.REFRESHICON = 'refresh-icon';
|
||||
|
||||
/* id панелей с файлами */
|
||||
CloudFunc.LEFTPANEL = 'left';
|
||||
CloudFunc.RIGHTPANEL = 'right';
|
||||
CloudFunc.LEFTPANEL = 'left';
|
||||
CloudFunc.RIGHTPANEL = 'right';
|
||||
|
||||
/**
|
||||
* Функция убирает последний слеш,
|
||||
* если он - последний символ строки
|
||||
*/
|
||||
CloudFunc.removeLastSlash = function(pPath){
|
||||
if(typeof pPath==='string')
|
||||
return (pPath.lastIndexOf('/') === pPath.length-1) ?
|
||||
pPath.substr(pPath, pPath.length-1):pPath;
|
||||
else return pPath;
|
||||
var lRet = pPath,
|
||||
lIsStr = typeof pPath==='string',
|
||||
lLengh = pPath.length-1,
|
||||
lLastSlash = pPath.lastIndexOf('/');
|
||||
|
||||
if(lIsStr && lLastSlash === lLengh)
|
||||
lRet = pPath.substr(pPath, lLengh);
|
||||
|
||||
return lRet;
|
||||
};
|
||||
|
||||
/** Функция возвращает заголовок веб страницы
|
||||
|
|
@ -54,7 +74,7 @@ var CloudFunc, exports;
|
|||
* @param pPerm_s - строка с правами доступа
|
||||
* к файлу в 8-миричной системе
|
||||
*/
|
||||
CloudFunc.convertPermissionsToSymbolic = function(pPerm_s){
|
||||
CloudFunc.getSymbolicPermissions = function(pPerm_s){
|
||||
/*
|
||||
S_IRUSR 0000400 protection: readable by owner
|
||||
S_IWUSR 0000200 writable by owner
|
||||
|
|
@ -102,28 +122,24 @@ var CloudFunc, exports;
|
|||
of using an application-specific shorthand).
|
||||
*/
|
||||
/* Переводим в двоичную систему */
|
||||
var lOwner = (pPerm_s[0]-0).toString(2),
|
||||
lGroup = (pPerm_s[1]-0).toString(2),
|
||||
lAll = (pPerm_s[2]-0).toString(2),
|
||||
/*
|
||||
console.log(lOwner+' '+lGroup+' '+lAll);
|
||||
*/
|
||||
var lOwner = ( pPerm_s[0] - 0 ).toString(2),
|
||||
lGroup = ( pPerm_s[1] - 0 ).toString(2),
|
||||
lAll = ( pPerm_s[2] - 0 ).toString(2),
|
||||
|
||||
/* переводим в символьную систему*/
|
||||
lPermissions = //lType+' '+
|
||||
(lOwner[0]-0>0?'r':'-') +
|
||||
(lOwner[1]-0>0?'w':'-') +
|
||||
(lOwner[2]-0>0?'x':'-') +
|
||||
' ' +
|
||||
(lGroup[0]-0>0?'r':'-') +
|
||||
(lGroup[1]-0>0?'w':'-') +
|
||||
(lGroup[2]-0>0?'x':'-') +
|
||||
' ' +
|
||||
(lAll[0]-0>0?'r':'-') +
|
||||
(lAll[1]-0>0?'w':'-') +
|
||||
(lAll[2]-0>0?'x':'-');
|
||||
/*
|
||||
console.log(lPermissions);
|
||||
*/
|
||||
lPermissions =
|
||||
( lOwner[0] - 0 > 0 ? 'r' : '-' ) +
|
||||
( lOwner[1] - 0 > 0 ? 'w' : '-' ) +
|
||||
( lOwner[2] - 0 > 0 ? 'x' : '-' ) +
|
||||
' ' +
|
||||
( lGroup[0] - 0 > 0 ? 'r' : '-' ) +
|
||||
( lGroup[1] - 0 > 0 ? 'w' : '-' ) +
|
||||
( lGroup[2] - 0 > 0 ? 'x' : '-' ) +
|
||||
' ' +
|
||||
( lAll[0]- 0 > 0 ? 'r' : '-' ) +
|
||||
( lAll[1]- 0 > 0 ? 'w' : '-' ) +
|
||||
( lAll[2]- 0 > 0 ? 'x' : '-' );
|
||||
|
||||
return lPermissions;
|
||||
};
|
||||
|
||||
|
|
@ -131,10 +147,7 @@ var CloudFunc, exports;
|
|||
* Функция конвертирует права доступа к файлам из символьного вида
|
||||
* в цыфровой
|
||||
*/
|
||||
CloudFunc.convertPermissionsToNumberic = function(pPerm_s){
|
||||
/* если передана правильная строка, конвертированная
|
||||
* функциец convertPermissionsToSymbolic
|
||||
*/
|
||||
CloudFunc.getNumericPermissions = function(pPerm_s){
|
||||
if(!pPerm_s || pPerm_s.length!==11)return pPerm_s;
|
||||
|
||||
var lOwner= (pPerm_s[0] === 'r' ? 4 : 0) +
|
||||
|
|
@ -193,11 +206,11 @@ var CloudFunc, exports;
|
|||
if(lLine){
|
||||
|
||||
/* удаляем первую строку из /etc/passwd*/
|
||||
pPasswd_s = pPasswd_s.replace(lLine, '');
|
||||
pPasswd_s = Util.removeStr(pPasswd_s, lLine);
|
||||
|
||||
/* получаем первое слово строки */
|
||||
var lName = lLine.substr(lLine,lLine.indexOf(':'));
|
||||
lLine = lLine.replace(lName+':x:','');
|
||||
lLine = Util.removeStr(lLine, lName + ':x:');
|
||||
|
||||
/* получаем uid*/
|
||||
var lUID = lLine.substr(lLine,lLine.indexOf(':'));
|
||||
|
|
@ -218,7 +231,8 @@ var CloudFunc, exports;
|
|||
* @param url - адрес каталога
|
||||
*/
|
||||
CloudFunc._getDirPath = function(url){
|
||||
var folders = [],
|
||||
var lShortName,
|
||||
folders = [],
|
||||
i = 0;
|
||||
do{
|
||||
folders[i++] = url;
|
||||
|
|
@ -231,30 +245,25 @@ var CloudFunc, exports;
|
|||
_l = '">',
|
||||
lHrefEnd ='</a>',
|
||||
|
||||
lHtmlPath,
|
||||
|
||||
lFS_s = CloudFunc.FS;
|
||||
/* корневой каталог */
|
||||
lHtmlPath = lHref +
|
||||
lFS_s +
|
||||
lTitle +
|
||||
'/' +
|
||||
_l +
|
||||
'/' +
|
||||
lHrefEnd;
|
||||
/* корневой каталог */
|
||||
lHtmlPath = lHref + FS + lTitle +
|
||||
'/' + _l + '/' +
|
||||
lHrefEnd;
|
||||
|
||||
for(i = folders.length - 1; i > 0; i--)
|
||||
{
|
||||
var lUrl=folders[i],
|
||||
lShortName = lUrl.replace(lUrl.substr(lUrl,lUrl.lastIndexOf('/')+1),'');
|
||||
if (i!==1)
|
||||
lHtmlPath += lHref + lFS_s + lUrl +
|
||||
lTitle + lUrl + _l +
|
||||
lShortName + lHrefEnd + '/';
|
||||
for(i = folders.length - 1; i > 0; i--){
|
||||
var lUrl = folders[i],
|
||||
lSlashIndex = lUrl.lastIndexOf('/') + 1;
|
||||
|
||||
lShortName = Util.removeStr(lUrl, lUrl.substr(lUrl, lSlashIndex) );
|
||||
|
||||
if(i !== 1)
|
||||
lHtmlPath += lHref + FS + lUrl +
|
||||
lTitle + lUrl + _l +
|
||||
lShortName + lHrefEnd + '/';
|
||||
else
|
||||
lHtmlPath+=lShortName+'/';
|
||||
lHtmlPath += lShortName + '/';
|
||||
}
|
||||
/* *** */
|
||||
|
||||
return lHtmlPath;
|
||||
};
|
||||
|
||||
|
|
@ -353,11 +362,13 @@ var CloudFunc, exports;
|
|||
}
|
||||
|
||||
for(var i = 1, n = files.length; i < n; i++){
|
||||
var lFile = files[i];
|
||||
|
||||
lFileTable += '<li draggable class>';
|
||||
lFileTable += '<span draggable class="mini-icon ';
|
||||
|
||||
/* если папка - выводим другую иконку */
|
||||
lFileTable += (files[i].size==='dir'?
|
||||
lFileTable += (lFile.size==='dir'?
|
||||
'directory':'text-file') +
|
||||
'">';
|
||||
lFileTable += '</span>';
|
||||
|
|
@ -366,37 +377,30 @@ var CloudFunc, exports;
|
|||
'"' +
|
||||
/* открываем файлы */
|
||||
/*в новой вкладке */
|
||||
(files[i].size === 'dir' ?
|
||||
(lFile.size === 'dir' ?
|
||||
'' : ' target="_blank"') +
|
||||
|
||||
' title="' + files[i].name +'"' +
|
||||
' draggable=true>' + files[i].name +
|
||||
' title="' + lFile.name +'"' +
|
||||
' draggable=true>' + lFile.name +
|
||||
"</a>" +
|
||||
'</span>';
|
||||
/* если папка - не выводим размер */
|
||||
lFileTable += '<span draggable class=size>' +
|
||||
(files[i].size === 'dir' ?
|
||||
(lFile.size === 'dir' ?
|
||||
'<dir>'
|
||||
/* если это файл - получаем
|
||||
* короткий размер
|
||||
*/
|
||||
: CloudFunc.getShortSize(
|
||||
files[i].size));
|
||||
lFile.size));
|
||||
lFileTable += '</span>' +
|
||||
'<span draggable class=owner>' +
|
||||
(!files[i].uid ? 'root' : files[i].uid) +
|
||||
(!lFile.uid ? 'root' : lFile.uid) +
|
||||
'</span>' +
|
||||
'<span draggable class=mode>' +
|
||||
/* конвертируем названия разрешений
|
||||
* из числового формата в буквенный
|
||||
* при этом корневой каталог не трогаем
|
||||
* по скольку в нём и так всё уже
|
||||
* установлено еще на сервере
|
||||
*/
|
||||
(//lPath==='/'?files[i].mode:
|
||||
CloudFunc
|
||||
.convertPermissionsToSymbolic
|
||||
(files[i].mode)) +
|
||||
* из числового формата в буквенный */
|
||||
CloudFunc.getSymbolicPermissions(lFile.mode)+
|
||||
'</span>';
|
||||
lFileTable += '</li>';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,15 @@
|
|||
cd ..
|
||||
echo 'jitsu'
|
||||
cp package.json tmp/package.json
|
||||
jitsu deploy
|
||||
echo '://cloudcmd.jit.su'
|
||||
cp tmp/package.json package.json
|
||||
echo 'appfog'
|
||||
af update
|
||||
echo 'http://cloudcmd.aws.af.cm/'
|
||||
echo '://cloudcmd.aws.af.cm'
|
||||
echo 'cloud foundry'
|
||||
vmc update
|
||||
echo 'http://cloudcmd.cloudfoundry.com/'
|
||||
echo '://cloudcmd.cloudfoundry.com'
|
||||
echo 'nodester'
|
||||
git push nodester master
|
||||
echo 'heroku'
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue