if (jQuery)
(function ($) {
$
.extend(
$.fn,
{
violetFileManager: function (o) {
if (!o)
var o = {};
if (o.tree == undefined)
o.tree = null;
if (o.grid == undefined)
o.grid = null;
if (o.maincontainer == undefined)
o.maincontainer = null;
if (o.titlebar == undefined)
o.titlebar = null;
if (o.toolsbar == undefined)
o.toolsbar = null;
if (o.statusbar == undefined)
o.statusbar = null;
if (o.navigationbar == undefined)
o.navigationbar = null;
if (o.oTree == undefined)
o.oTree = null;
if (o.oGrid == undefined)
o.oGrid = null;
if (o.host == undefined)
o.host = 'http://localhost/';
if (o.hostmodule == undefined)
o.hostmodule = 'privatecontent/';
if (o.script == undefined)
o.script = 'getcontent';
if (o.data == undefined)
o.data = null;
if (o.datasource == undefined)
o.datasource = 'ajax';
if (o.filehosting == undefined)
o.filehosting = 'http://sbgapi.violet.vn/uploads/space';
if (o.filedomain == undefined)
o.filedomain = 'http://sbgapi.violet.vn';
if (o.invisibledButtons == undefined)
o.invisibledButtons = null;
o.host += 'ajax/';
var isDev = false;
var contextmenu = null;
var oContainer = this;
var tree = [];
var totalItem = 0;
var countItem = 0;
var maxWidth = 0;
var treeCurrentNode = null;
var self = this;
var oClipBoard = {
items: null,
act: null
};
var aryPath = [];
if (o.homeNode == undefined)
o.homeNode = null;
/**
* Toolbar defined
*/
var btnNewFolder = $('#'
+ o.toolsbar
+ ' > DIV.btn-group.basic > #btnNewFolder');
var btnDel = $('#' + o.toolsbar
+ ' > DIV.btn-group.basic > #btnDel');
var btnCopy = $('#' + o.toolsbar
+ ' > DIV.btn-group.basic > #btnCopy');
var btnCut = $('#' + o.toolsbar
+ ' > DIV.btn-group.basic > #btnCut');
var btnPaste = $('#' + o.toolsbar
+ ' > DIV.btn-group.basic > #btnPaste');
var btnShare = $('#' + o.toolsbar
+ ' > DIV.btn-group.social > #btnShare');
var btnPreview = $('#'
+ o.toolsbar
+ ' > DIV.btn-group.social > #btnPreview');
var btnDownload = $('#'
+ o.toolsbar
+ ' > DIV.btn-group.creation > #btnDownload');
var btnUpload = $('#'
+ o.toolsbar
+ ' > DIV.btn-group.creation > #btnUpload');
var btnRefresh = $('#'
+ o.toolsbar
+ ' > DIV.btn-group.control > #btnRefresh');
var toolbarButtons = [btnNewFolder, btnDel,
btnCopy, btnCut, btnPaste, btnShare,
btnPreview, btnDownload, btnUpload,
btnRefresh];
var statusbar = $('DIV#' + o.statusbar);
var sendCommand = function (p) {
if (p.postdata == undefined)
p.postdata = null;
if (p.script == undefined)
p.script = o.script;
if (p.callbackSuccess == undefined)
p.callbackSuccess = null;
if (p.callbackDone == undefined)
p.callbackDone = null;
if (p.callbackFail == undefined)
p.callbackFail = null;
if (p.callbackAlways == undefined)
p.callbackAlways = null;
if (p.parseData == undefined)
p.parseData = null;
if (p.self == undefined)
p.self = this;
if (p.script != null
&& (o.datasource == 'ajax' || isDev)) {
$.post(
o.host + o.hostmodule
+ p.script,
p.postdata,
function (data) {
if (data) {
parseData = $.parseJSON(data);
p.parseData = parseData;
}
if (p.callbackSuccess != null) {
if (parseInt(parseData.ERROR.errCode) === 0)
p.callbackSuccess(parseData);
else {
p.callbackFail(parseData.ERROR);
}
}
})
.done(function () {
if (p.callbackDone != null)
p.callbackDone(p.parseData);
})
.fail(function () {
if (p.callbackFail != null)
p.callbackFail(this);
})
.always(
function () {
if (p.callbackAlways != null)
p.callbackAlways(this);
});
} else if (o.datasource == 'json') {
if (p.callbackSuccess != null)
p.callbackSuccess(o.data);
if (p.callbackDone != null)
p.callbackDone(this);
}
};
var getDirTreeMaxWidth = function () {
//var scrWidth = $(o.maincontainer).width();
var scrWidth = $(document).width();
return parseInt(scrWidth / 3);
}
var layoutRender = function () {
var scrWidth = $('#' + o.maincontainer)
.width();
var scrHeght = $(window).innerHeight();
var dirTreeHeight = scrHeght
- $('#' + o.titlebar).height()
- $('#' + o.toolsbar).height()
- $('#' + o.statusbar).height() - 5;
$('#' + o.tree).parent().height(
dirTreeHeight);
$('#' + o.grid).parent().height(
dirTreeHeight);
$('#' + o.grid).parent().width(
'calc(100% - '
+ ($('#' + o.tree).parent()
.width() + 8)
+ 'px)');
var scollWidth = $('#' + o.grid).parent()
.width();
maxWidth = getDirTreeMaxWidth();
$(o.tree).height(dirTreeHeight - 5);
if (o.invisibledButtons != null) {
for (var i = 0; i < o.invisibledButtons.length; i++) {
$('#' + o.invisibledButtons[i])
.hide();
}
}
}
var createFileManager = function (parseData) {
o.data = parseData;
totalItem = o.data.DIRECTORIES.length;
o.oTree = $('#' + o.tree).violetTree({
data: o.data.DIRECTORIES,
manager: oContainer
});
o.oGrid = $('#' + o.grid).violetGrid({
data: o.data,
manager: oContainer
});
self.setHomeNode();
self.refreshStatusBar();
};
var getAllDirChild = function (parentID,
aryChild) {
parentID = parentID == null ? 0 : parentID;
var dirList = searchItemsByParent(parentID,
'directory');
var index = aryChild.length;
aryChild[index] = parentID;
if (dirList.length > 0) {
for (var i = 0; i < dirList.length; i++) {
getAllDirChild(dirList[i].id,
aryChild);
}
}
}
var buildTreeFromParent = function (dirID, node) {
var aryChildFiles = [];
var aryChildDirs = [];
var aryChildIDs = [];
var aryTmp = [];
var dir = o.data.DIRECTORIES[searchItemByID(
dirID, 'directory')];
aryChildDirs = searchItemsByParent(dirID,
'directory');
aryChildFiles = searchItemsByParent(dirID,
'file');
node.id = dir.id;
node.name = dir.name;
node.type = 'directory';
$(aryChildDirs).each(function (index) {
var id = this.id;
var name = this.name;
var type = 'directory';
var cDir = {
id: id,
name: name,
type: type,
childs: null
};
aryChildIDs[index] = cDir;
});
if ($(aryChildFiles).length > 0) {
if (node.files == undefined)
node.files = [];
$(aryChildFiles).each(function (index) {
var id = this.id;
var name = this.name;
var type = 'file';
var cFile = {
id: id,
name: name,
type: type
};
node.files[index] = cFile;
});
}
if ($(aryChildDirs).length > 0) {
if (node.childs == undefined)
node.childs = [];
$(aryChildIDs)
.each(
function (index) {
node.childs[index] = new Object;
buildTreeFromParent(
aryChildIDs[index].id,
node.childs[index]);
});
}
}
var checkChildExisted = function (id) {
var dirList = searchItemsByParent(id,
'directory');
var fileList = searchItemsByParent(id,
'file');
return (dirList.length > 0)
|| (fileList.length > 0);
}
var doneInit = function () {
bindEventToToolbars();
documentEventsBinding();
};
var failInit = function (er) {
bootbox.alert(er.err);
}
var init = function () {
layoutRender();
$('#' + o.tree).parent().resizable({
maxWidth: maxWidth,
minWidth: 220,
handles: "e",
resize: function (event, ui) {
layoutRender();
}
});
$(window).resize(function () {
layoutRender();
$('#' + o.tree).parent().resizable({
maxWidth: maxWidth
});
});
$(document).on({
ajaxStart: function() { $("body").addClass("loading"); },
ajaxStop: function() { $("body").removeClass("loading"); }
});
sendCommand({
postdata: null,
callbackSuccess: createFileManager,
callbackDone: doneInit,
callbackFail: failInit
});
};
var searchItemByID = function (id, type) {
var data = {};
switch (type) {
case 'directory':
data = o.data.DIRECTORIES;
break;
case 'file':
data = o.data.FILES;
break;
default:
break;
}
// for (var i = 0; i < data.length; i++) {
for (var i in data) {
if (data[i].id == id) {
return i;
}
}
}
var searchItemsByParent = function (parentID, type) {
var data = {};
var aryItem = [];
var index = aryItem.length;
switch (type) {
case 'directory':
data = o.data.DIRECTORIES;
break;
case 'file':
data = o.data.FILES;
break;
default:
break;
}
for (i in data) {
if (data[i].parentID == parentID) {
aryItem[index] = data[i];
index++;
}
}
return aryItem;
}
/***********************************************
* TOOLBAR EVENTS - START *
**********************************************/
var btnRefreshClick = function (obj) {
$(o).find('i').addClass('fa fa-spin');
sendCommand({
postdata: null,
callbackSuccess: function (parseData) {
o.data = parseData;
self.updateData({
updateAll: true
});
o.oTree.refeshTree();
},
callbackDone: function () {
$(o).find('i').removeClass(
'fa fa-spin');
},
callbackFail: failInit
});
}
var btnNewFolderClick = function () {
createFolderStart();
}
var btnUploadClick = function () {
uploadStart();
uploadInit();
}
var btnDownloadClick = function () {
var items = o.oGrid.getHighLightItem();
for (var i = 0; i < items.length; i++) {
if (items[i].type == 'directory') {
items[i] = self.getAllDirChilds(items[i]);
}
}
if(items.length>0)
{
var url = o.host + "download/getFile/";
self.redirectPost(url, {
data: JSON.stringify(items)
});
}
}
var btnDelClick = function () {
var items = o.oGrid.getHighLightItem();
if (items.length == 0) return false;
if ($(items).length == 0) {
var dirID = $(o.oTree.getSelectedNode()).attr('id');
var item = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')];
item.type = 'directory';
items = [item];
}
self.deleteItem(items);
}
var btnCopyClick = function () {
copy('copy');
}
var btnPasteClick = function () {
paste();
}
var btnCutClick = function () {
copy('move');
}
var bindEventToToolbars = function () {
$(btnRefresh).click(function (e) {
btnRefreshClick(this)
});
$(btnNewFolder).click(function (e) {
btnNewFolderClick()
});
$(btnUpload).click(function (e) {
btnUploadClick()
});
$(btnDel).click(function (e) {
btnDelClick()
});
$(btnCopy).click(function (e) {
btnCopyClick()
});
$(btnCut).click(function (e) {
btnCutClick()
});
$(btnPaste).click(function (e) {
btnPasteClick()
})
$(btnPreview).click(function (e) {
btnPreviewClick()
})
$(btnDownload).click(function (e) {
btnDownloadClick()
})
/*
* btnShare btnPreview btnDownload btnUpload
*/
}
/***********************************************
* TOOLBAR EVENTS - END *
**********************************************/
/***********************************************
* DOCUMENT EVENTS BINDING - START *
**********************************************/
var documentEventsBinding = function () {
$(document)
.bind(
'keydown',
function (e) {
switch (e.which) {
case 113:
case 27:
var gridSelectedItems = o.oGrid
.getHighLightItem();
if ($(gridSelectedItems).length > 0) {
o.oGrid.rename(e.which);
} else {
o.oTree.rename(e.which);
}
break;
case 46:
// delete
btnDelClick();
break;
case 65:
if (e.ctrlKey) {
o.oGrid.selectAllNode();
}
break;
default:
break;
}
});
}
/***********************************************
* DOCUMENT EVENTS BINDING - END *
**********************************************/
/***********************************************
* CREATE FOLDER - START *
**********************************************/
var createFolderStart = function () {
var promptOptions = {
title: "Tạo thư mục mới",
buttons: {
confirm: {
label: "Lưu"
},
cancel: {
label: "Hủy"
}
},
callback: function (result) {
var folderName = result === null ? null:result.trim();
var errMessage = '';
if (folderName === null) return true;
if (folderName === '') {
errMessage = 'Hãy nhập tên thư mục cần tạo!';
}
if (errMessage !== '') {
$(this.message).parent().find('.error-message').remove();
var error = $('
',{'class':'error-message', text:errMessage}).insertBefore(this.message);
$(this.message).find('input').focus();
return false;
}
createFolder(treeCurrentNode,folderName);
}
};
return bootbox.prompt(promptOptions);
}
var uploadStart = function () {
var userid = o.data.userinfo.us_id;
var promptOptions = {
title: "Tải lên",
message: "",
buttons: {
success: {
label: "Xong",
className: "btn btn-primary",
callback: function (result) {
}
},
},
onEscape: function () {
uploadDone(self.getTreeCurrentNode());
}
};
return bootbox.dialog(promptOptions);
}
var uploadDone = function (result) {
}
var btnPreviewClick = function () {
var items = o.oGrid.getHighLightItem();
if ($(items).length == 0) {
var dirID = $(o.oTree.getSelectedNode())
.attr('id');
var item = o.data.DIRECTORIES[searchItemByID(
dirID, 'directory')];
item.type = 'directory';
items = [item];
}
previewFile(items[0]);
}
var previewFile = function (node) {
var content = "";
$ext = node.fileurl.split('.').pop();
$ext = $ext.toLowerCase();
if ($.inArray($ext, ["jpg", "jpeg", "png","gif","tiff","dvg","bmp"]) >= 0) {
content = "
"
+ node.name;
bootbox.alert({message:content, className:'preview'});
return false;
}
if ($.inArray($ext, ["flv", "mp4", "avi","m4v"]) >= 0) {
$.ajax({
url: o.host
+ "preview/getVideoPreview/",
type: "POST",
data: {
fileurl: node.fileurl,
name: node.name
},
success: function (data,
textStatus, jqXHR) {
bootbox.alert(data);
},
error: function (jqXHR,
textStatus,
errorThrown) {
}
});
return false;
}
if ($.inArray($ext, ["ogg"]) >= 0) {
content = '
'
+ node.name;
bootbox.alert(content);
return false;
}
if ($.inArray($ext, ["mp3"]) >= 0) {
content = '
'
+ node.name;
bootbox.alert(content);
return false;
}
if ($.inArray($ext, ["ppt", "xls", "doc","pdf", "docx", "pptx", "xlsx"]) >= 0) {
$.ajax({
url: o.host
+ "preview/getFilePreview/"
+ node.id,
type: "POST",
data: {},
success: function (data,
textStatus, jqXHR) {
bootbox.alert(data);
},
error: function (jqXHR, textStatus,
errorThrown) {
}
});
return false;
}
if ($.inArray($ext, ["xvl"]) >= 0) {
var url = o.host.replace("ajax/", "");
var redirect = url
+ 'frontend/lecture/';
self.redirectPost(redirect, {
fileid: node.id
});
return false;
}
$(".bootbox").addClass("preview");
var content = "Không hỗ trợ xem trước loại tệp này, vui lòng tải xuống và xem trên máy";
bootbox.alert(content);
}
var uploadInit = function () {
var ul = $('#upload ul');
$('#drop a').click(function () {
$(this).parent().find('input').click();
});
$('#upload').fileupload(
{
dropZone: $('#drop'),
add: function (e, data) {
var tpl = $('');
tpl.find('p').text(data.files[0].name).append(''+ formatFileSize(data.files[0].size)+ '');
data.context = tpl.appendTo(ul);
tpl.find('input').knob();
tpl.find('span').click(
function () {
if (tpl.hasClass('working')) {jqXHR.abort();
}
tpl.fadeOut(function () {tpl.remove();});
});
var jqXHR = data.submit();
},
progress: function (e, data) {
// Calculate the
// completion
// percentage of the
// upload
var progress = parseInt(data.loaded / data.total * 100, 10);
// Update the hidden
// input field and
// trigger a change
// so that the
// jQuery knob
// plugin knows to
// update the dial
data.context.find('input').val(progress).change();
if (progress == 100) {
data.context.removeClass('working');
}
},
fail: function (e, data) {
// Something has
// gone wrong!
data.context.addClass('error');
},
done: function (e, data) {
var newFileData = data.result;
newFileData = $.parseJSON(data.result);
if (newFileData.ERROR.errCode == 0) {
for (var i = 0; i < $(newFileData.FILES).length; i++) {
var file = newFileData.FILES[i];
var node = {
thumbnail: file.thumbnail == '' ? null : o.filedomain+"/"+ file.thumbnail,
id: file.id,
name: file.name,
fileurl: file.fileurl,
parentID: file.parentID,
minetype: file.minetype,
size: file.size
};
o.oGrid.createNode(node);
o.data.FILES.push(node);
}
for (var i = 0; i < $(newFileData.DIRECTORIES).length; i++) {
var file = newFileData.DIRECTORIES[i];
var node = {
id: file.id,
name: file.name,
parentID: file.parentID,
minetype: file.minetype
};
o.oTree.createNode(node);
o.oGrid.createNode(node);
o.data.DIRECTORIES.push(node);
}
self.refreshStatusBar();
}
}
});
$(document).on('drop dragover',
function (e) {
e.preventDefault();
});
function formatFileSize(bytes) {
if (typeof bytes !== 'number') {
return '';
}
if (bytes >= 1000000000) {
return (bytes / 1000000000)
.toFixed(2)
+ ' GB';
}
if (bytes >= 1000000) {
return (bytes / 1000000).toFixed(2)
+ ' MB';
}
return (bytes / 1000).toFixed(2)
+ ' KB';
}
};
var createFolder = function (parent, name) {
var postdata = {
fname: name,
fparentid: parent
};
var script = 'createdir';
/* isDev = true; */
sendCommand({
postdata: postdata,
script: script,
callbackSuccess: function (parseData) {
createFolderFinish(parseData);
},
callbackFail: function () {
}
});
}
var createFolderFinish = function (parseData) {
/* isDev = false; */
if (parseData.ERROR.errCode == 0) {
var node = {
id: parseData.id,
name: parseData.name,
parentID: parseData.parentID
};
o.oTree.createNode(node);
o.data.DIRECTORIES.push(node);
if (o.oGrid)
o.oGrid.reloadGrid();
}
}
/***********************************************
* CREATE FOLDER - END *
**********************************************/
/***********************************************
* RENAME - START *
**********************************************/
var rename = function (item) {
/*
* item = {id,name,type,parentID,newName}
*/
var postdata = {
data: JSON.stringify(item)
};
sendCommand({
postdata: postdata,
script: 'rename',
callbackSuccess: function (parseData) {
var newItem = null;
if (item.type == 'directory') {
newItem = parseData.DIRECTORIES;
o.data.DIRECTORIES[searchItemByID(item.id, 'directory')].name = newItem.name;
}
else if (item.type == 'file') {
newItem = parseData.FILES;
o.data.FILES[searchItemByID(item.id, 'file')].name = newItem.name;
}
self.updateData({
updateAll: true
});
o.oTree.refeshTree();
self.setTreeCurrentNode(item.parentID);
o.oGrid.setHighLightNode(item.id,item.type);
},
callbackFail: function (errors) {
alert (errors.err);
}
});
}
/***********************************************
* RENAME - END *
**********************************************/
/***********************************************
* COPY & PASTE & MOVE - START * =***********
**********************************************/
var copy = function (act) {
// detect selected items
// push to clipboard
var items = o.oGrid.getHighLightItem();
if ($(items).length == 0) {
var node = o.oTree.getSelectedNode();
var itemID = $(node).attr('id');
if (itemID == 0)
return false;
items[0] = o.data.DIRECTORIES[searchItemByID(
itemID, 'directory')];
items[0].type = 'directory';
}
if ($(items).length > 0) {
oClipBoard.items = items;
oClipBoard.act = act;
}
return true;
}
var paste = function () {
if ((oClipBoard.act != 'copy' && oClipBoard.act != 'move')
|| oClipBoard.items == null)
return;
var items = [];
var aryDupplicated = [];
var messageText = '';
var destination = self.getTreeCurrentNode();
var destinationChildDirs = searchItemsByParent(destination, 'directory');
var destinationChildFiles = searchItemsByParent(destination, 'file');
items = oClipBoard.items;
for (var i = 0; i < items.length; i++) {
if (items[i].type == 'directory' ) {
for (var d = 0; d < destinationChildDirs.length; d++) {
if (destinationChildDirs[d].name == items[i].name) {
aryDupplicated.push(items[i]);
}
}
}
if (items[i].type == 'file' ) {
for (var f = 0; f < destinationChildFiles.length; f++) {
if (destinationChildFiles[f].name == items[i].name) {
aryDupplicated.push(items[i]);
}
}
}
}
for (var i = 0; i < items.length; i++) {
if (items[i].type == 'directory') {
items[i].childDirs = self.buildDirectoriesTree(items[i]);
items[i].childFiles = searchItemsByParent(items[i].id, 'file');
}
}
if (aryDupplicated.length > 0) {
if (aryDupplicated.length > 1){
messageText = 'Các thư mục (files) ';
messageText += '';
for (var m = 0; m < aryDupplicated.length; m++) {
messageText += '- ' + aryDupplicated[m].name + '
';
}
messageText += '
';
}
else {
var type = aryDupplicated[0].type;
messageText = type == 'directory' ? 'Thư mục ' + aryDupplicated[0].name + '' : 'File ' + aryDupplicated[0].name + '';
}
messageText += ' đã tồn tại, bạn có muốn ghi đè lên không?';
var confirmOptions = {
message: messageText,
buttons: {
confirm: {
label: "Ghi đè"
},
cancel: {
label: "Hủy bỏ"
}
},
callback: function (result) {
//console.log(items);
}
}
bootbox.confirm(confirmOptions);
}
//console.log(items);
}
var pasteComplete = function (items, destination) {
if (items.length == 0 || destination == null) return false;
var postdata = {
act: oClipBoard.act,
destination: destination,
data: JSON.stringify(items)
};
var script = oClipBoard.act;
sendCommand({
postdata: postdata,
script: script,
callbackSuccess: function (parseData) {
if (oClipBoard.act == 'copy') {
$(parseData.DIRECTORIES).each(
function (index) {
o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = this;
});
$(parseData.FILES).each(
function (index) {
o.data.FILES[$(o.data.FILES).length] = this;
});
o.data.DIRECTORIES.sort(function (a, b) {
return a.parentID - b.parentID;
});
o.oTree.setData(o.data.DIRECTORIES);
o.oGrid.setData(o.data);
o.oTree.createCopyNode(parseData.DIRECTORIES);
o.oGrid.reloadGrid();
} else if (oClipBoard.act == 'move') {
}
oClipBoard.act == '';
oClipBoard.items = null;
}
});
}
var move = function () {
}
var copyTo = function () {
}
var moveTo = function () {
}
/***********************************************
* COPY & PASTE & MOVE - END *
**********************************************/
this.rename = function (item) {
rename(item);
}
this.buildDirectoriesTree = function (objDir) {
var parentID = objDir.id;
var aryDirs = [];
var branch = [];
var childDirs = [];
var childFiles = [];
for(var i = 0; i < o.data.DIRECTORIES.length; i++) {
aryDirs[i] = o.data.DIRECTORIES[i];
}
for (var i = 0; i < aryDirs.length; i++) {
if (aryDirs[i].parentID == parentID) {
childDirs = self.buildDirectoriesTree(aryDirs[i]);
aryDirs[i].childDirs = childDirs;
aryDirs[i].childFiles = searchItemsByParent(aryDirs[i].id, 'file');
branch.push(aryDirs[i]);
}
}
return branch;
}
this.searchParents = function (objDir) {
var parentID = objDir == undefined ? 0 : objDir.parentID;
var aryDirs = [];
aryDirs[0] = o.homeNode;
for(var i = 1; i <= o.data.DIRECTORIES.length; i++) {
aryDirs[i] = o.data.DIRECTORIES[i - 1];
}
for (var i = 0; i < aryDirs.length; i++) {
if (aryDirs[i].id == parentID) {
self.searchParents(aryDirs[i]);
if ($.inArray(aryDirs[i], aryPath) == -1) aryPath.push(aryDirs[i]);
}
}
}
this.deleteItem = function (item) {
var confirmText = 'Bạn có muốn xóa ';
if ($.isArray(item) && item.length > 1) {
confirmText += 'các thư mục (và files) đã chọn?';
} else if (item.length == 1) {
if (item[0].id == 0)
return false;
confirmText += (item[0].type == 'directory') ? 'thư mục'
: 'file';
confirmText += ' '
+ item[0].name
+ " không?";
}
confirmText += '
(hành động này sẽ xóa tất cả thư mục con và các file trong các thư mục đã chọn)
';
var parentID = item[0].parentID;
for (var i = 0; i < item.length; i++) {
if (item[i].type == 'directory') {
item[i] = self.getAllDirChilds(item[i]);
}
}
var confirmOptions = {
message: confirmText,
buttons: {
confirm: {
label: "Xóa"
},
cancel: {
label: "Không xóa"
}
},
callback: function (result) {
if (result) {
var delobj = JSON.stringify(item);
var postdata = {
delobj: delobj
};
var script = 'delete';
sendCommand({
postdata: postdata,
script: script,
callbackSuccess: function (
parseData) {
if ($(parseData.DIRECTORIES).length > 0) {
$(parseData.DIRECTORIES).each(
function (index) {
o.oTree.deletion(this);
o.oGrid.deletion(this, 'directory');
});
}
if ($(parseData.FILES).length > 0) {
$(parseData.FILES).each(
function (index) {
var file = o.data.FILES[searchItemByID(this, 'file')];
o.oGrid.deletion(this, file.minetype);
});
}
},
callbackDone: function (obj) {
if ($(parseData.DIRECTORIES).length > 0) {
$(parseData.DIRECTORIES).each(
function (index) {
o.data.DIRECTORIES.splice(searchItemByID(this, 'directory'), 1);
});
}
if ($(parseData.FILES).length > 0) {
$(parseData.FILES).each(
function (index) {
o.data.FILES.splice(searchItemByID(this, 'file'), 1);
});
}
o.oTree.setData(o.data.DIRECTORIES);
o.oGrid.setData(o.data);
self.setTreeCurrentNode(parentID);
o.oGrid.reloadGrid();
self.refreshStatusBar();
},
callbackFail: function () {
}
});
}
}
};
bootbox.confirm(confirmOptions);
}
this.getAllDirChilds = function (oDirItem) {
var aryChildDirTmp = [];
var aryChildDirID = [];
var aryChildFiles = searchItemsByParent(
oDirItem.id, 'file');
var aryChildDirs = [];
getAllDirChild(oDirItem.id, aryChildDirTmp);
for (var d = 1; d < aryChildDirTmp.length; d++) {
aryChildDirID[d - 1] = aryChildDirTmp[d];
}
for (var j = 0; j < aryChildDirID.length; j++) {
if (o.data.DIRECTORIES[searchItemByID(
aryChildDirID[j], 'directory')] != undefined)
aryChildDirs[aryChildDirs.length] = o.data.DIRECTORIES[searchItemByID(
aryChildDirID[j],
'directory')];
var aryTmp = searchItemsByParent(
aryChildDirID[j], 'file');
if (aryTmp.length > 0)
for (var f in aryTmp) {
aryChildFiles[aryChildFiles.length] = aryTmp[f];
}
}
oDirItem.childDirs = aryChildDirs;
oDirItem.childFiles = aryChildFiles;
return oDirItem;
}
this.setTreeCurrentNode = function (treeNode) {
// fire when click a node on Tree
// then fire action of Grid
treeCurrentNode = treeNode;
if (o.oGrid)
o.oGrid.reloadGrid();
}
this.getTreeCurrentNode = function () {
return treeCurrentNode;
}
this.gridNodeDblClick = function (node) {
if (node.minetype == 'directory') {
var treeNode = $('#' + o.tree)
.find(
'UL.vstree[rel^="node'
+ node.parentID
+ '"] > LI[rel^="folder"] > A#'
+ node.id);
o.oTree.activeNode(treeNode);
} else {
// execute or preview file
previewFile(node);
}
};
this.createNewFolder = function () {
}
this.updateData = function (p) {
if (p.item == undefined)
p.item = null;
if (p.updateAll == undefined)
p.updateAll = false;
if (p.from == undefined)
p.from = null;
if (p.type == undefined)
p.type = null;
if (p.callback == undefined)
p.callback = null;
var obj = p.from == 'tree' ? o.oGrid
: o.oTree;
if (!p.updateAll) {
var index = searchItemByID(p.item.id, p.type);
switch (p.type) {
case 'directory':
o.data.DIRECTORIES[index].name = p.item.name;
o.data.DIRECTORIES[index].parentID = p.item.parentID;
break;
case 'file':
o.data.FILES[index].name = p.item.name;
o.data.FILES[index].parentID = p.item.parentID;
o.data.FILES[index].minetype = p.item.minetype;
o.data.FILES[index].fileurl = p.item.fileurl;
break;
default:
break;
}
}
o.oTree.setData(o.data.DIRECTORIES);
o.oGrid.setData(o.data);
if (p.callback != null) {
eval('obj.' + p.callback + '(p.item);')
}
// call sendCommand
}
this.searchItemsByParent = function (parentID, type) {
return searchItemsByParent(parentID, type);
}
this.searchItemByID = function (id, type) {
return searchItemByID(id, type);
}
this.refreshStatusBar = function () {
var totalSize = 0;
var message = '';
if (o.data.FILES.length > 0) {
for (var i = 0; i < o.data.FILES.length; i++) {
totalSize += parseInt(o.data.FILES[i].size);
}
}
message = 'Tổng dung lượng đã sử dụng: '
+ self.formatFileSize(totalSize)
+ '';
var items = o.oGrid.getHighLightItem();
if (items.length == 0) {
var id = $(o.oTree.getSelectedNode()).attr('id');
var item = o.data.DIRECTORIES[self.searchItemByID(id, 'directory')];
}
if (items.length == 1) {
if ((typeof items[0].minetype !== 'undefined')) {
message += 'Tệp: '
+ items[0].name
+ '';
message += ' - Dung lượng: '
+ self
.formatFileSize(items[0].size)
+ '';
} else {
message += 'Thư mục: '
+ items[0].name
+ '';
}
} else if (items.length > 1) {
var selectedSize = 0;
for (var i = 0; i < items.length; i++) {
selectedSize += (typeof items[i].minetype !== 'undefined') ? parseInt(items[i].size)
: 0;
}
message += ''
+ items.length
+ ' tệp (thư mục) được chọn';
message += ' - Dung lượng: '
+ self
.formatFileSize(selectedSize)
+ '';
}
$(statusbar).html(message);
}
this.refreshNavigator = function () {
var navigatorBar = $('DIV#' + o.navigationbar + ' > UL.breadcrumb');
$(navigatorBar).find('LI').remove();
var nodeID = self.getTreeCurrentNode();
nodeID = nodeID == undefined ? 0 : nodeID;
if (nodeID != 0) {
var node = o.data.DIRECTORIES[searchItemByID(nodeID, 'directory')];
self.searchParents(node);
aryPath.push(node);
}
else {
if (o.homeNode == null) self.setHomeNode();
aryPath.push(o.homeNode);
}
for(var idx = 0; idx < aryPath.length; idx++) {
if(aryPath[idx] != undefined ){
var i = $('',{'class':'ace-icon fa fa-folder home-icon'});
var a = $('',{text: aryPath[idx].name});
var li = $('');
if (aryPath[idx].id == 0)
$(li).append(i, a);
else
$(li).append(a);
$(navigatorBar).append(li);
}
}
aryPath.splice(0,aryPath.length);
}
this.redirectPost = function (location, args) {
var form = '';
$.each(args, function (key, value) {
form += "";
});
$(
'').appendTo(
'body').submit();
}
this.formatFileSize = function (size) {
var i;
i = Math.floor(Math.log(size)
/ Math.log(1024));
if ((size === 0) || (parseInt(size) === 0)) {
return "0 kB";
} else if (isNaN(i)
|| (!isFinite(size))
|| (size === Number.POSITIVE_INFINITY)
|| (size === Number.NEGATIVE_INFINITY)
|| (size == null) || (size < 0)) {
console.info("Throwing error");
throw Error(""
+ size
+ " did not compute to a valid number to be humanized.");
} else {
return (size / Math.pow(1024, i))
.toFixed(2)
* 1
+ " "
+ ["B", "KB", "MB", "GB",
"TB", "PB", "EB", "ZB",
"YB"][i];
}
}
this.setHomeNode = function () {
o.homeNode = {id:0, name:o.oTree.getRootName(), parentID:-1};
}
this.getFileHosting = function () {
return o.filehosting;
}
this.getFileDomain = function () {
return o.filedomain;
}
this.initialize = function () {
init();
return this;
};
return this.initialize();
}
});
})(jQuery);