fixed bug with saving json to localStorage, it's always writed root directory

This commit is contained in:
coderaiser 2013-03-15 08:33:47 -04:00
parent 31349cc086
commit ed4f497122
4 changed files with 114 additions and 95 deletions

View file

@ -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

View file

@ -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);
};

View file

@ -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' ?
'&lt;dir&gt;'
/* если это файл - получаем
* короткий размер
*/
: 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>';
}

View file

@ -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'