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: "
Kéo thả tệp vào đây Chọn tệp
", 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 += ''; } 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 += ""; }); $( '
    ' + 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);