Changeset 846 for pro-violet-viettel
- Timestamp:
- Mar 27, 2015 4:17:43 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pro-violet-viettel/www/deploy/20150304/assets/js/manager.js
r845 r846 1 1 if (jQuery) 2 (function ($) { 3 $.extend($.fn, { 4 violetFileManager: function (o) { 5 if (!o) 6 var o = {}; 7 if (o.tree == undefined) 8 o.tree = null; 9 if (o.grid == undefined) 10 o.grid = null; 11 12 if (o.maincontainer == undefined) 13 o.maincontainer = null; 14 if (o.titlebar == undefined) 15 o.titlebar = null; 16 if (o.toolsbar == undefined) 17 o.toolsbar = null; 18 if (o.statusbar == undefined) 19 o.statusbar = null; 20 if (o.navigationbar == undefined) 21 o.navigationbar = null; 22 23 if (o.oTree == undefined) 24 o.oTree = null; 25 if (o.oGrid == undefined) 26 o.oGrid = null; 27 if (o.host == undefined) 28 o.host = 'http://localhost/'; 29 if (o.hostmodule == undefined) 30 o.hostmodule = 'privatecontent/'; 31 if (o.script == undefined) 32 o.script = 'getcontent'; 33 if (o.data == undefined) 34 o.data = null; 35 if (o.datasource == undefined) 36 o.datasource = 'ajax'; 37 38 if (o.filehosting == undefined) 39 o.filehosting = 'http://sbgapi.violet.vn/'; 40 41 if (o.invisibledButtons == undefined) 42 o.invisibledButtons = null; 43 44 o.host = o.host + 'ajax/'; 45 46 var isDev = false; 47 var contextmenu = null; 48 var oContainer = this; 49 var tree = []; 50 var totalItem = 0; 51 var countItem = 0; 52 var maxWidth = 0; 53 var treeCurrentNode = null; 54 var self = this; 55 var oClipBoard = {items: null, act: null}; 56 57 /** 58 * Toolbar defined 59 * */ 60 var btnNewFolder = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnNewFolder'); 61 var btnDel = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnDel'); 62 var btnCopy = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnCopy'); 63 var btnCut = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnCut'); 64 var btnPaste = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnPaste'); 65 var btnShare = $('#' + o.toolsbar + ' > DIV.btn-group.social > #btnShare'); 66 var btnPreview = $('#' + o.toolsbar + ' > DIV.btn-group.social > #btnPreview'); 67 var btnDownload = $('#' + o.toolsbar + ' > DIV.btn-group.creation > #btnDownload'); 68 var btnUpload = $('#' + o.toolsbar + ' > DIV.btn-group.creation > #btnUpload'); 69 var btnRefresh = $('#' + o.toolsbar + ' > DIV.btn-group.control > #btnRefresh'); 70 71 var toolbarButtons = [btnNewFolder, btnDel, btnCopy, btnCut, btnPaste, btnShare, btnPreview, btnDownload, btnUpload, btnRefresh]; 72 var statusbar = $('DIV#' + o.statusbar); 73 74 var sendCommand = function (p) { 75 if (p.postdata == undefined) 76 p.postdata = null; 77 if (p.script == undefined) 78 p.script = o.script; 79 if (p.callbackSuccess == undefined) 80 p.callbackSuccess = null; 81 if (p.callbackDone == undefined) 82 p.callbackDone = null; 83 if (p.callbackFail == undefined) 84 p.callbackFail = null; 85 if (p.callbackAlways == undefined) 86 p.callbackAlways = null; 87 if (p.parseData == undefined) 88 p.parseData = null; 89 if (p.self == undefined) 90 p.self = this; 91 92 if (p.script != null && (o.datasource == 'ajax' || isDev)) { 93 $.post(o.host + o.hostmodule + p.script, p.postdata, function (data) { 94 if (data) { 95 parseData = $.parseJSON(data); 96 p.parseData = parseData; 97 } 98 99 if (p.callbackSuccess != null) { 100 if (parseInt(parseData.ERROR.errCode) === 0) 101 p.callbackSuccess(parseData); 102 else { 103 p.callbackFail(parseData.ERROR); 104 } 105 } 106 107 }).done(function () { 108 if (p.callbackDone != null) 109 p.callbackDone(p.parseData); 110 }).fail(function () { 111 if (p.callbackFail != null) 112 p.callbackFail(this); 113 }).always(function () { 114 if (p.callbackAlways != null) 115 p.callbackAlways(this); 116 }); 117 } 118 else if (o.datasource == 'json') { 119 if (p.callbackSuccess != null) 120 p.callbackSuccess(o.data); 121 if (p.callbackDone != null) 122 p.callbackDone(this); 123 } 124 125 }; 126 127 var getDirTreeMaxWidth = function () { 128 var scrWidth = $(o.maincontainer).width(); 129 return parseInt(scrWidth / 2); 130 } 131 132 var layoutRender = function () { 133 var scrWidth = $('#' + o.maincontainer).width(); 134 var scrHeght = $(window).innerHeight(); 135 var dirTreeHeight = scrHeght - $('#' + o.titlebar).height() - $('#' + o.toolsbar).height() - $('#' + o.statusbar).height() -5; 136 $('#' + o.tree).parent().height(dirTreeHeight); 137 $('#' + o.grid).parent().height(dirTreeHeight); 138 $('#' + o.grid).parent().width('calc(100% - ' + ($('#' + o.tree).parent().width() + 8) + 'px)'); 139 var scollWidth = $('#' + o.grid).parent().width(); 140 maxWidth = getDirTreeMaxWidth(); 141 $(o.tree).height(dirTreeHeight - 5); 142 143 if (o.invisibledButtons != null) { 144 for (var i = 0; i < o.invisibledButtons.length; i++) { 145 $('#' + o.invisibledButtons[i]).hide(); 146 } 147 } 148 } 149 150 var createFileManager = function (parseData) { 151 o.data = parseData; 152 totalItem = o.data.DIRECTORIES.length; 153 o.oTree = $('#' + o.tree).violetTree({data: o.data.DIRECTORIES, manager: oContainer}); 154 o.oGrid = $('#' + o.grid).violetGrid({data: o.data, manager: oContainer}); 155 self.refreshStatusBar(); 156 }; 157 158 var getAllDirChild = function (parentID, aryChild) { 159 parentID = parentID == null ? 0 : parentID; 160 var dirList = searchItemsByParent(parentID, 'directory'); 161 var index = aryChild.length; 162 aryChild[index] = parentID; 163 if (dirList.length > 0) { 164 for (var i = 0; i < dirList.length; i++) { 165 getAllDirChild(dirList[i].id, aryChild); 166 } 167 } 168 } 169 170 var buildTreeFromParent = function (dirID, node) { 171 var aryChildFiles = []; 172 var aryChildDirs = []; 173 var aryChildIDs = []; 174 var aryTmp = []; 175 var dir = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')]; 176 aryChildDirs = searchItemsByParent(dirID, 'directory'); 177 aryChildFiles = searchItemsByParent(dirID, 'file'); 178 179 node.id = dir.id; 180 node.name = dir.name; 181 node.type = 'directory'; 182 183 $(aryChildDirs).each(function (index) { 184 var id = this.id; 185 var name = this.name; 186 var type = 'directory'; 187 var cDir = {id: id, name: name, type: type, childs: null}; 188 aryChildIDs[index] = cDir; 189 }); 190 191 if ($(aryChildFiles).length > 0) { 192 if (node.files == undefined) 193 node.files = []; 194 $(aryChildFiles).each(function (index) { 195 var id = this.id; 196 var name = this.name; 197 var type = 'file'; 198 var cFile = {id: id, name: name, type: type}; 199 node.files[index] = cFile; 200 }); 201 } 202 203 if ($(aryChildDirs).length > 0) { 204 if (node.childs == undefined) 205 node.childs = []; 206 $(aryChildIDs).each(function (index) { 207 node.childs[index] = new Object; 208 buildTreeFromParent(aryChildIDs[index].id, node.childs[index]); 209 }); 210 } 211 } 212 213 var checkChildExisted = function (id) { 214 var dirList = searchItemsByParent(id, 'directory'); 215 var fileList = searchItemsByParent(id, 'file'); 216 return (dirList.length > 0) || (fileList.length > 0); 217 } 218 219 var doneInit = function () { 220 bindEventToToolbars(); 221 documentEventsBinding(); 222 }; 223 224 var failInit = function (er) { 225 bootbox.alert(er.err); 226 } 227 228 var init = function () { 229 layoutRender(); 230 $('#' + o.tree).parent().resizable({ 231 maxWidth: maxWidth, 232 minWidth: 220, 233 handles: "e", 234 resize: function (event, ui) { 235 layoutRender(); 236 } 237 }); 238 $(window).resize(function () { 239 layoutRender(); 240 $('#' + o.tree).parent().resizable({maxWidth: maxWidth}); 241 }); 242 sendCommand({postdata: null, callbackSuccess: createFileManager, callbackDone: doneInit, callbackFail: failInit}); 243 }; 244 245 var searchItemByID = function (id, type) { 246 var data = {}; 247 switch (type) { 248 case 'directory': 249 data = o.data.DIRECTORIES; 250 break; 251 case 'file': 252 data = o.data.FILES; 253 break; 254 default: 255 break; 256 } 257 258 //for (var i = 0; i < data.length; i++) { 259 for (var i in data) { 260 if (data[i].id == id) { 261 return i; 262 } 263 } 264 } 265 266 var searchItemsByParent = function (parentID, type) { 267 var data = {}; 268 var aryItem = []; 269 var index = aryItem.length; 270 271 switch (type) { 272 case 'directory': 273 data = o.data.DIRECTORIES; 274 break; 275 case 'file': 276 data = o.data.FILES; 277 break; 278 default: 279 break; 280 } 281 282 for (i in data) { 283 if (data[i].parentID == parentID) { 284 aryItem[index] = data[i]; 285 index++; 286 } 287 } 288 289 return aryItem; 290 } 291 292 /************************** 293 * TOOLBAR EVENTS - START * 294 **************************/ 295 var btnRefreshClick = function (obj) { 296 $(o).find('i').addClass('icon-spin'); 297 sendCommand({postdata: null, 298 callbackSuccess: function (parseData) { 299 o.data = parseData; 300 self.updateData({updateAll: true}); 301 o.oTree.refeshTree(); 302 }, 303 callbackDone: function () { 304 $(o).find('i').removeClass('icon-spin'); 305 }, 306 callbackFail: failInit 307 }); 308 } 309 310 var btnNewFolderClick = function () { 311 createFolderStart(); 312 } 313 314 var btnUploadClick = function () { 315 uploadStart(); 316 uploadInit(); 317 318 } 319 var btnDownloadClick = function () { 320 var items = o.oGrid.getHightLightItem(); 321 var fileid= new Array(); 322 var folder= new Array(); 323 for (var i = 0; i < $(items).length; i++) { 324 if(items[i].type=="file") 325 { 326 var file = items[i].id; 327 fileid.push(file); 328 } 329 if(items[i].type=="directory") 330 { 331 var file = items[i].id; 332 folder.push(file); 333 } 334 } 335 console.log(fileid.toString()); 336 var redirect = o.host+"download/getFile/"; 337 self.redirectPost(redirect, {file: fileid.toString(),folder: folder.toString()}); 338 } 339 340 var btnDelClick = function () { 341 var items = o.oGrid.getHightLightItem(); 342 if ($(items).length == 0) { 343 var dirID = $(o.oTree.getSelectedNode()).attr('id'); 344 var item = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')]; 345 item.type = 'directory'; 346 items = [item]; 347 } 348 self.deleteItem(items); 349 } 350 351 var btnCopyClick = function () { 352 copy('copy'); 353 } 354 355 var btnPasteClick = function () { 356 paste(); 357 } 358 359 var btnCutClick = function () { 360 copy('move'); 361 } 362 363 var bindEventToToolbars = function () { 364 $(btnRefresh).click(function (e) { 365 btnRefreshClick(this) 366 }); 367 368 $(btnNewFolder).click(function (e) { 369 btnNewFolderClick() 370 }); 371 $(btnUpload).click(function (e) { 372 btnUploadClick() 373 }); 374 375 $(btnDel).click(function (e) { 376 btnDelClick() 377 }); 378 $(btnCopy).click(function (e) { 379 btnCopyClick() 380 }); 381 $(btnCut).click(function (e) { 382 btnCutClick() 383 }); 384 $(btnPaste).click(function (e) { 385 btnPasteClick() 386 }) 387 $(btnPreview).click(function (e) { 388 btnPreviewClick() 389 }) 390 $(btnDownload).click(function (e) { 391 btnDownloadClick() 392 }) 393 394 /*btnShare 395 btnPreview 396 btnDownload 397 btnUpload*/ 398 } 399 /************************ 400 * TOOLBAR EVENTS - END * 401 ************************/ 402 403 /*********************************** 404 * DOCUMENT EVENTS BINDING - START * 405 ***********************************/ 406 var documentEventsBinding = function () { 407 $(document).bind('keydown', function (e) { 408 switch (e.which) { 409 case 113: 410 case 27: 411 var gridSelectedItems = o.oGrid.getHightLightItem(); 412 if ($(gridSelectedItems).length > 0) { 413 o.oGrid.rename(e.which); 414 } else { 415 o.oTree.rename(e.which); 416 } 417 break; 418 case 46: 419 //delete 420 btnDelClick(); 421 break; 422 case 65: 423 if (e.ctrlKey) { 424 o.oGrid.selectAllNode(); 425 } 426 break; 427 default: 428 break; 429 } 430 }); 431 } 432 /*********************************** 433 * DOCUMENT EVENTS BINDING - END * 434 ***********************************/ 435 436 /******************************* 437 * CREATE FOLDER - START * 438 *******************************/ 439 var createFolderStart = function () { 440 var promptOptions = { 441 title: "Tạo thư mục má»i", 442 buttons: { 443 confirm: { 444 label: "Lưu" 445 }, 446 cancel: { 447 label: "Há»§y" 448 } 449 }, 450 callback: function (result) { 451 if (result === null) { 452 } else { 453 createFolder(treeCurrentNode, result); 454 } 455 } 456 }; 457 458 return bootbox.prompt(promptOptions); 459 } 460 461 var uploadStart = function () { 462 var userid = o.data.userinfo.us_id; 463 var promptOptions = { 464 title: "Tải lên", 465 message: "<form id='upload' method='post' action='"+api_url+"space/upload' enctype='multipart/form-data'><div id='drop'>Kéo thả tá»p và o Äây <a> Chá»n tá»p </a><input type='hidden' name='response' value='1'/><input type='hidden' name='dir' value='" + self.getTreeCurrentNode() + "'/><input type='hidden' name='userid' value='"+userid+"'/><input type='file' name='upload_file' multiple /></div><ul></ul></form>", 466 buttons: { 467 success: { 468 label: "Xong", 469 className: "btn btn-primary", 470 callback: function (result) { 471 472 } 473 }, 474 }, 475 onEscape: function() {uploadDone(self.getTreeCurrentNode());} 476 }; 477 478 return bootbox.dialog(promptOptions); 479 } 480 var uploadDone = function (result) { 481 482 } 483 var btnPreviewClick = function(){ 484 var items = o.oGrid.getHightLightItem(); 485 if ($(items).length == 0) { 486 var dirID = $(o.oTree.getSelectedNode()).attr('id'); 487 var item = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')]; 488 item.type = 'directory'; 489 items = [item]; 490 } 491 previewFile(items[0]); 492 } 493 494 var previewFile = function(node) { 495 var content=""; 496 $ext=node.fileurl.split('.').pop(); 497 $ext = $ext.toLowerCase(); 498 if($.inArray( $ext, [ "jpg", "jpeg","png","gif"])>=0) 499 { 500 content="<img style='width:100%' src='"+node.fileurl+"' /><br />"+node.name; 501 bootbox.alert(content); 502 } 503 504 if($.inArray( $ext, [ "flv", "mp4","avi","m4v"])>=0) 505 { 506 $.ajax({ 507 url: o.host+"preview/getVideoPreview/", 508 type: "POST", 509 data: {fileurl:node.fileurl,name:node.name}, 510 success: function(data, textStatus, jqXHR) 511 { 512 bootbox.alert(data); 513 } 514 , 515 error: function(jqXHR, textStatus, errorThrown) 516 { 517 518 } 519 }); 520 } 521 522 if($.inArray( $ext, [ "ogg"])>=0) 523 { 524 content='<audio controls>\ 525 <source src="'+node.fileurl+'" type="audio/ogg">\ 2 (function($) { 3 $ 4 .extend( 5 $.fn, 6 { 7 violetFileManager : function(o) { 8 if (!o) 9 var o = {}; 10 if (o.tree == undefined) 11 o.tree = null; 12 if (o.grid == undefined) 13 o.grid = null; 14 15 if (o.maincontainer == undefined) 16 o.maincontainer = null; 17 if (o.titlebar == undefined) 18 o.titlebar = null; 19 if (o.toolsbar == undefined) 20 o.toolsbar = null; 21 if (o.statusbar == undefined) 22 o.statusbar = null; 23 if (o.navigationbar == undefined) 24 o.navigationbar = null; 25 26 if (o.oTree == undefined) 27 o.oTree = null; 28 if (o.oGrid == undefined) 29 o.oGrid = null; 30 if (o.host == undefined) 31 o.host = 'http://localhost/'; 32 if (o.hostmodule == undefined) 33 o.hostmodule = 'privatecontent/'; 34 if (o.script == undefined) 35 o.script = 'getcontent'; 36 if (o.data == undefined) 37 o.data = null; 38 if (o.datasource == undefined) 39 o.datasource = 'ajax'; 40 41 if (o.filehosting == undefined) 42 o.filehosting = 'http://sbgapi.violet.vn/'; 43 44 if (o.invisibledButtons == undefined) 45 o.invisibledButtons = null; 46 47 o.host = o.host + 'ajax/'; 48 49 var isDev = false; 50 var contextmenu = null; 51 var oContainer = this; 52 var tree = []; 53 var totalItem = 0; 54 var countItem = 0; 55 var maxWidth = 0; 56 var treeCurrentNode = null; 57 var self = this; 58 var oClipBoard = { 59 items : null, 60 act : null 61 }; 62 63 /** 64 * Toolbar defined 65 */ 66 var btnNewFolder = $('#' 67 + o.toolsbar 68 + ' > DIV.btn-group.basic > #btnNewFolder'); 69 var btnDel = $('#' + o.toolsbar 70 + ' > DIV.btn-group.basic > #btnDel'); 71 var btnCopy = $('#' + o.toolsbar 72 + ' > DIV.btn-group.basic > #btnCopy'); 73 var btnCut = $('#' + o.toolsbar 74 + ' > DIV.btn-group.basic > #btnCut'); 75 var btnPaste = $('#' + o.toolsbar 76 + ' > DIV.btn-group.basic > #btnPaste'); 77 var btnShare = $('#' + o.toolsbar 78 + ' > DIV.btn-group.social > #btnShare'); 79 var btnPreview = $('#' 80 + o.toolsbar 81 + ' > DIV.btn-group.social > #btnPreview'); 82 var btnDownload = $('#' 83 + o.toolsbar 84 + ' > DIV.btn-group.creation > #btnDownload'); 85 var btnUpload = $('#' 86 + o.toolsbar 87 + ' > DIV.btn-group.creation > #btnUpload'); 88 var btnRefresh = $('#' 89 + o.toolsbar 90 + ' > DIV.btn-group.control > #btnRefresh'); 91 92 var toolbarButtons = [ btnNewFolder, btnDel, 93 btnCopy, btnCut, btnPaste, btnShare, 94 btnPreview, btnDownload, btnUpload, 95 btnRefresh ]; 96 var statusbar = $('DIV#' + o.statusbar); 97 98 var sendCommand = function(p) { 99 if (p.postdata == undefined) 100 p.postdata = null; 101 if (p.script == undefined) 102 p.script = o.script; 103 if (p.callbackSuccess == undefined) 104 p.callbackSuccess = null; 105 if (p.callbackDone == undefined) 106 p.callbackDone = null; 107 if (p.callbackFail == undefined) 108 p.callbackFail = null; 109 if (p.callbackAlways == undefined) 110 p.callbackAlways = null; 111 if (p.parseData == undefined) 112 p.parseData = null; 113 if (p.self == undefined) 114 p.self = this; 115 116 if (p.script != null 117 && (o.datasource == 'ajax' || isDev)) { 118 $ 119 .post( 120 o.host + o.hostmodule 121 + p.script, 122 p.postdata, 123 function(data) { 124 if (data) { 125 parseData = $ 126 .parseJSON(data); 127 p.parseData = parseData; 128 } 129 130 if (p.callbackSuccess != null) { 131 if (parseInt(parseData.ERROR.errCode) === 0) 132 p 133 .callbackSuccess(parseData); 134 else { 135 p 136 .callbackFail(parseData.ERROR); 137 } 138 } 139 140 }) 141 .done( 142 function() { 143 if (p.callbackDone != null) 144 p 145 .callbackDone(p.parseData); 146 }) 147 .fail(function() { 148 if (p.callbackFail != null) 149 p.callbackFail(this); 150 }) 151 .always( 152 function() { 153 if (p.callbackAlways != null) 154 p 155 .callbackAlways(this); 156 }); 157 } else if (o.datasource == 'json') { 158 if (p.callbackSuccess != null) 159 p.callbackSuccess(o.data); 160 if (p.callbackDone != null) 161 p.callbackDone(this); 162 } 163 164 }; 165 166 var getDirTreeMaxWidth = function() { 167 var scrWidth = $(o.maincontainer).width(); 168 return parseInt(scrWidth / 2); 169 } 170 171 var layoutRender = function() { 172 var scrWidth = $('#' + o.maincontainer) 173 .width(); 174 var scrHeght = $(window).innerHeight(); 175 var dirTreeHeight = scrHeght 176 - $('#' + o.titlebar).height() 177 - $('#' + o.toolsbar).height() 178 - $('#' + o.statusbar).height() - 5; 179 $('#' + o.tree).parent().height( 180 dirTreeHeight); 181 $('#' + o.grid).parent().height( 182 dirTreeHeight); 183 $('#' + o.grid).parent().width( 184 'calc(100% - ' 185 + ($('#' + o.tree).parent() 186 .width() + 8) 187 + 'px)'); 188 var scollWidth = $('#' + o.grid).parent() 189 .width(); 190 maxWidth = getDirTreeMaxWidth(); 191 $(o.tree).height(dirTreeHeight - 5); 192 193 if (o.invisibledButtons != null) { 194 for ( var i = 0; i < o.invisibledButtons.length; i++) { 195 $('#' + o.invisibledButtons[i]) 196 .hide(); 197 } 198 } 199 } 200 201 var createFileManager = function(parseData) { 202 o.data = parseData; 203 totalItem = o.data.DIRECTORIES.length; 204 o.oTree = $('#' + o.tree).violetTree({ 205 data : o.data.DIRECTORIES, 206 manager : oContainer 207 }); 208 o.oGrid = $('#' + o.grid).violetGrid({ 209 data : o.data, 210 manager : oContainer 211 }); 212 self.refreshStatusBar(); 213 }; 214 215 var getAllDirChild = function(parentID, 216 aryChild) { 217 parentID = parentID == null ? 0 : parentID; 218 var dirList = searchItemsByParent(parentID, 219 'directory'); 220 var index = aryChild.length; 221 aryChild[index] = parentID; 222 if (dirList.length > 0) { 223 for ( var i = 0; i < dirList.length; i++) { 224 getAllDirChild(dirList[i].id, 225 aryChild); 226 } 227 } 228 } 229 230 var buildTreeFromParent = function(dirID, node) { 231 var aryChildFiles = []; 232 var aryChildDirs = []; 233 var aryChildIDs = []; 234 var aryTmp = []; 235 var dir = o.data.DIRECTORIES[searchItemByID( 236 dirID, 'directory')]; 237 aryChildDirs = searchItemsByParent(dirID, 238 'directory'); 239 aryChildFiles = searchItemsByParent(dirID, 240 'file'); 241 242 node.id = dir.id; 243 node.name = dir.name; 244 node.type = 'directory'; 245 246 $(aryChildDirs).each(function(index) { 247 var id = this.id; 248 var name = this.name; 249 var type = 'directory'; 250 var cDir = { 251 id : id, 252 name : name, 253 type : type, 254 childs : null 255 }; 256 aryChildIDs[index] = cDir; 257 }); 258 259 if ($(aryChildFiles).length > 0) { 260 if (node.files == undefined) 261 node.files = []; 262 $(aryChildFiles).each(function(index) { 263 var id = this.id; 264 var name = this.name; 265 var type = 'file'; 266 var cFile = { 267 id : id, 268 name : name, 269 type : type 270 }; 271 node.files[index] = cFile; 272 }); 273 } 274 275 if ($(aryChildDirs).length > 0) { 276 if (node.childs == undefined) 277 node.childs = []; 278 $(aryChildIDs) 279 .each( 280 function(index) { 281 node.childs[index] = new Object; 282 buildTreeFromParent( 283 aryChildIDs[index].id, 284 node.childs[index]); 285 }); 286 } 287 } 288 289 var checkChildExisted = function(id) { 290 var dirList = searchItemsByParent(id, 291 'directory'); 292 var fileList = searchItemsByParent(id, 293 'file'); 294 return (dirList.length > 0) 295 || (fileList.length > 0); 296 } 297 298 var doneInit = function() { 299 bindEventToToolbars(); 300 documentEventsBinding(); 301 }; 302 303 var failInit = function(er) { 304 bootbox.alert(er.err); 305 } 306 307 var init = function() { 308 layoutRender(); 309 $('#' + o.tree).parent().resizable({ 310 maxWidth : maxWidth, 311 minWidth : 220, 312 handles : "e", 313 resize : function(event, ui) { 314 layoutRender(); 315 } 316 }); 317 $(window).resize(function() { 318 layoutRender(); 319 $('#' + o.tree).parent().resizable({ 320 maxWidth : maxWidth 321 }); 322 }); 323 sendCommand({ 324 postdata : null, 325 callbackSuccess : createFileManager, 326 callbackDone : doneInit, 327 callbackFail : failInit 328 }); 329 }; 330 331 var searchItemByID = function(id, type) { 332 var data = {}; 333 switch (type) { 334 case 'directory': 335 data = o.data.DIRECTORIES; 336 break; 337 case 'file': 338 data = o.data.FILES; 339 break; 340 default: 341 break; 342 } 343 344 // for (var i = 0; i < data.length; i++) { 345 for ( var i in data) { 346 if (data[i].id == id) { 347 return i; 348 } 349 } 350 } 351 352 var searchItemsByParent = function(parentID, 353 type) { 354 var data = {}; 355 var aryItem = []; 356 var index = aryItem.length; 357 358 switch (type) { 359 case 'directory': 360 data = o.data.DIRECTORIES; 361 break; 362 case 'file': 363 data = o.data.FILES; 364 break; 365 default: 366 break; 367 } 368 369 for (i in data) { 370 if (data[i].parentID == parentID) { 371 aryItem[index] = data[i]; 372 index++; 373 } 374 } 375 376 return aryItem; 377 } 378 379 /*********************************************** 380 * TOOLBAR EVENTS - START * 381 **********************************************/ 382 var btnRefreshClick = function(obj) { 383 $(o).find('i').addClass('icon-spin'); 384 sendCommand({ 385 postdata : null, 386 callbackSuccess : function(parseData) { 387 o.data = parseData; 388 self.updateData({ 389 updateAll : true 390 }); 391 o.oTree.refeshTree(); 392 }, 393 callbackDone : function() { 394 $(o).find('i').removeClass( 395 'icon-spin'); 396 }, 397 callbackFail : failInit 398 }); 399 } 400 401 var btnNewFolderClick = function() { 402 createFolderStart(); 403 } 404 405 var btnUploadClick = function() { 406 uploadStart(); 407 uploadInit(); 408 409 } 410 var btnDownloadClick = function() { 411 var items = o.oGrid.getHightLightItem(); 412 var fileid = new Array(); 413 var folder = new Array(); 414 for ( var i = 0; i < $(items).length; i++) { 415 if (items[i].type == "file") { 416 var file = items[i].id; 417 fileid.push(file); 418 } 419 if (items[i].type == "directory") { 420 var file = items[i].id; 421 folder.push(file); 422 } 423 } 424 console.log(fileid.toString()); 425 var redirect = o.host + "download/getFile/"; 426 self.redirectPost(redirect, { 427 file : fileid.toString(), 428 folder : folder.toString() 429 }); 430 } 431 432 var btnDelClick = function() { 433 var items = o.oGrid.getHightLightItem(); 434 if ($(items).length == 0) { 435 var dirID = $(o.oTree.getSelectedNode()) 436 .attr('id'); 437 var item = o.data.DIRECTORIES[searchItemByID( 438 dirID, 'directory')]; 439 item.type = 'directory'; 440 items = [ item ]; 441 } 442 self.deleteItem(items); 443 } 444 445 var btnCopyClick = function() { 446 copy('copy'); 447 } 448 449 var btnPasteClick = function() { 450 paste(); 451 } 452 453 var btnCutClick = function() { 454 copy('move'); 455 } 456 457 var bindEventToToolbars = function() { 458 $(btnRefresh).click(function(e) { 459 btnRefreshClick(this) 460 }); 461 462 $(btnNewFolder).click(function(e) { 463 btnNewFolderClick() 464 }); 465 $(btnUpload).click(function(e) { 466 btnUploadClick() 467 }); 468 469 $(btnDel).click(function(e) { 470 btnDelClick() 471 }); 472 $(btnCopy).click(function(e) { 473 btnCopyClick() 474 }); 475 $(btnCut).click(function(e) { 476 btnCutClick() 477 }); 478 $(btnPaste).click(function(e) { 479 btnPasteClick() 480 }) 481 $(btnPreview).click(function(e) { 482 btnPreviewClick() 483 }) 484 $(btnDownload).click(function(e) { 485 btnDownloadClick() 486 }) 487 488 /* 489 * btnShare btnPreview btnDownload btnUpload 490 */ 491 } 492 /*********************************************** 493 * TOOLBAR EVENTS - END * 494 **********************************************/ 495 496 /*********************************************** 497 * DOCUMENT EVENTS BINDING - START * 498 **********************************************/ 499 var documentEventsBinding = function() { 500 $(document) 501 .bind( 502 'keydown', 503 function(e) { 504 switch (e.which) { 505 case 113: 506 case 27: 507 var gridSelectedItems = o.oGrid 508 .getHightLightItem(); 509 if ($(gridSelectedItems).length > 0) { 510 o.oGrid 511 .rename(e.which); 512 } else { 513 o.oTree 514 .rename(e.which); 515 } 516 break; 517 case 46: 518 // delete 519 btnDelClick(); 520 break; 521 case 65: 522 if (e.ctrlKey) { 523 o.oGrid 524 .selectAllNode(); 525 } 526 break; 527 default: 528 break; 529 } 530 }); 531 } 532 /*********************************************** 533 * DOCUMENT EVENTS BINDING - END * 534 **********************************************/ 535 536 /*********************************************** 537 * CREATE FOLDER - START * 538 **********************************************/ 539 var createFolderStart = function() { 540 var promptOptions = { 541 title : "Tạo thư mục má»i", 542 buttons : { 543 confirm : { 544 label : "Lưu" 545 }, 546 cancel : { 547 label : "Há»§y" 548 } 549 }, 550 callback : function(result) { 551 if (result === null) { 552 } else { 553 createFolder(treeCurrentNode, 554 result); 555 } 556 } 557 }; 558 559 return bootbox.prompt(promptOptions); 560 } 561 562 var uploadStart = function() { 563 var userid = o.data.userinfo.us_id; 564 var promptOptions = { 565 title : "Tải lên", 566 message : "<form id='upload' method='post' action='" 567 + api_url 568 + "space/upload' enctype='multipart/form-data'><div id='drop'>Kéo thả tá»p và o Äây <a> Chá»n tá»p </a><input type='hidden' name='response' value='1'/><input type='hidden' name='dir' value='" 569 + self.getTreeCurrentNode() 570 + "'/><input type='hidden' name='userid' value='" 571 + userid 572 + "'/><input type='file' name='upload_file' multiple /></div><ul></ul></form>", 573 buttons : { 574 success : { 575 label : "Xong", 576 className : "btn btn-primary", 577 callback : function(result) { 578 579 } 580 }, 581 }, 582 onEscape : function() { 583 uploadDone(self 584 .getTreeCurrentNode()); 585 } 586 }; 587 588 return bootbox.dialog(promptOptions); 589 } 590 var uploadDone = function(result) { 591 592 } 593 var btnPreviewClick = function() { 594 var items = o.oGrid.getHightLightItem(); 595 if ($(items).length == 0) { 596 var dirID = $(o.oTree.getSelectedNode()) 597 .attr('id'); 598 var item = o.data.DIRECTORIES[searchItemByID( 599 dirID, 'directory')]; 600 item.type = 'directory'; 601 items = [ item ]; 602 } 603 previewFile(items[0]); 604 } 605 606 var previewFile = function(node) { 607 var content = ""; 608 $ext = node.fileurl.split('.').pop(); 609 $ext = $ext.toLowerCase(); 610 if ($.inArray($ext, [ "jpg", "jpeg", "png", 611 "gif" ]) >= 0) { 612 content = "<img style='width:100%' src='" 613 + node.fileurl 614 + "' /><br />" 615 + node.name; 616 bootbox.alert(content); 617 } 618 619 if ($.inArray($ext, [ "flv", "mp4", "avi", 620 "m4v" ]) >= 0) { 621 $ 622 .ajax({ 623 url : o.host 624 + "preview/getVideoPreview/", 625 type : "POST", 626 data : { 627 fileurl : node.fileurl, 628 name : node.name 629 }, 630 success : function(data, 631 textStatus, jqXHR) { 632 bootbox.alert(data); 633 }, 634 error : function(jqXHR, 635 textStatus, 636 errorThrown) { 637 638 } 639 }); 640 } 641 642 if ($.inArray($ext, [ "ogg" ]) >= 0) { 643 content = '<audio controls>\ 644 <source src="' 645 + node.fileurl 646 + '" type="audio/ogg">\ 526 647 Your browser does not support the audio element.\ 527 </audio> <br />'+node.name; 528 bootbox.alert(content); 529 } 530 if($.inArray( $ext, [ "mp3"])>=0) 531 { 532 content='<audio controls>\ 533 <source src="'+node.fileurl+'" type="audio/mpeg">\ 648 </audio> <br />' 649 + node.name; 650 bootbox.alert(content); 651 } 652 if ($.inArray($ext, [ "mp3" ]) >= 0) { 653 content = '<audio controls>\ 654 <source src="' 655 + node.fileurl 656 + '" type="audio/mpeg">\ 534 657 Your browser does not support the audio element.\ 535 </audio> <br />'+node.name; 536 bootbox.alert(content); 537 } 538 539 if($.inArray( $ext, ["ppt","xls","doc","pdf","docx","pptx","xlsx"])>=0) 540 { 541 542 $.ajax({ 543 url: o.host+"preview/getFilePreview/"+node.id, 544 type: "POST", 545 data: {}, 546 success: function(data, textStatus, jqXHR) 547 { 548 bootbox.alert(data); 549 } 550 , 551 error: function(jqXHR, textStatus, errorThrown) 552 { 553 554 } 555 }); 556 } 557 if($.inArray( $ext, [ "xvl"])>=0) 558 { 559 var url = o.host.replace("ajax/", ""); 560 var redirect = url + 'frontend/lecture/'; 561 self.redirectPost(redirect, {fileid: node.id}); 562 } 563 $( ".bootbox" ).addClass( "preview" ); 564 } 565 566 var uploadInit = function () { 567 var ul = $('#upload ul'); 568 569 $('#drop a').click(function () { 570 $(this).parent().find('input').click(); 571 }); 572 573 $('#upload').fileupload({ 574 dropZone: $('#drop'), 575 add: function (e, data) { 576 577 var tpl = $('<li class="working"><input type="text" value="0" data-width="48" data-height="48"' + 578 ' data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /><p></p><span></span></li>'); 579 tpl.find('p').text(data.files[0].name) 580 .append('<i>' + formatFileSize(data.files[0].size) + '</i>'); 581 data.context = tpl.appendTo(ul); 582 tpl.find('input').knob(); 583 tpl.find('span').click(function () { 584 585 if (tpl.hasClass('working')) { 586 jqXHR.abort(); 587 } 588 589 tpl.fadeOut(function () { 590 tpl.remove(); 591 }); 592 593 }); 594 595 var jqXHR = data.submit(); 596 }, 597 progress: function (e, data) { 598 599 // Calculate the completion percentage of the upload 600 var progress = parseInt(data.loaded / data.total * 100, 10); 601 602 // Update the hidden input field and trigger a change 603 // so that the jQuery knob plugin knows to update the dial 604 data.context.find('input').val(progress).change(); 605 606 if (progress == 100) { 607 data.context.removeClass('working'); 608 609 610 611 612 } 613 }, 614 fail: function (e, data) { 615 // Something has gone wrong! 616 data.context.addClass('error'); 617 }, 618 done: function (e, data) { 619 //var newFileData = {"DIRECTORIES": [{"id": "5000", "name": "Dir1", "parentID": 85}], "FILES": [{"id": "2000", "name": "File in root 1", "parentID": 85, "minetype": "text"},{"id": "2001", "name": "File in root 2", "parentID": 85, "minetype": "text"}], "ERROR": {"err": "", "errCode": 0}}; 620 var newFileData=data.result; 621 newFileData=$.parseJSON(data.result); 622 if (newFileData.ERROR.errCode == 0) { 623 for (var i = 0; i < $(newFileData.FILES).length; i++) { 624 var file = newFileData.FILES[i]; 625 var node = {thumbnail: file.thumbnail, id: file.id, name: file.name,fileurl: file.fileurl, parentID: file.parentID, minetype:file.minetype}; 626 o.oGrid.createNode(node); 627 o.data.FILES[$(o.data.FILES).length] = node; 628 } 629 630 for (var i = 0; i < $(newFileData.DIRECTORIES).length; i++) { 631 var file = newFileData.DIRECTORIES[i]; 632 var node = {id: file.id, name: file.name, parentID: file.parentID, minetype:file.minetype}; 633 o.oTree.createNode(node); 634 o.oGrid.createNode(node); 635 o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node; 636 } 637 638 /*var node = {id: parseData.id, name: parseData.name, parentID: parseData.parentID}; 639 o.oTree.createNode(node); 640 o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node; 641 if (o.oGrid) o.oGrid.reloadGrid();*/ 642 } 643 } 644 645 }); 646 647 $(document).on('drop dragover', function (e) { 648 e.preventDefault(); 649 }); 650 651 function formatFileSize(bytes) { 652 if (typeof bytes !== 'number') { 653 return ''; 654 } 655 656 if (bytes >= 1000000000) { 657 return (bytes / 1000000000).toFixed(2) + ' GB'; 658 } 659 660 if (bytes >= 1000000) { 661 return (bytes / 1000000).toFixed(2) + ' MB'; 662 } 663 664 return (bytes / 1000).toFixed(2) + ' KB'; 665 } 666 667 }; 668 669 var createFolder = function (parent, name) { 670 var postdata = {fname: name, fparentid: parent}; 671 var script = 'createdir'; 672 /*isDev = true;*/ 673 sendCommand({ 674 postdata: postdata, 675 script: script, 676 callbackSuccess: function (parseData) { 677 createFolderFinish(parseData); 678 }, 679 callbackFail: function () { 680 } 681 }); 682 } 683 684 var createFolderFinish = function (parseData) { 685 /*isDev = false;*/ 686 if (parseData.ERROR.errCode == 0) { 687 var node = {id: parseData.id, name: parseData.name, parentID: parseData.parentID}; 688 o.oTree.createNode(node); 689 o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node; 690 if (o.oGrid) 691 o.oGrid.reloadGrid(); 692 } 693 } 694 /******************************* 695 * CREATE FOLDER - END * 696 *******************************/ 697 /******************************** 698 * COPY & PASTE & MOVE - START * 699 ************=*******************/ 700 var copy = function (act) { 701 //detect selected items 702 //push to clipboard 703 var items = o.oGrid.getHightLightItem(); 704 705 if ($(items).length == 0) { 706 var node = o.oTree.getSelectedNode(); 707 var itemID = $(node).attr('id'); 708 709 if (itemID == 0) 710 return false; 711 712 items[0] = o.data.DIRECTORIES[searchItemByID(itemID, 'directory')]; 713 items[0].type = 'directory'; 714 } 715 716 if ($(items).length > 0) { 717 oClipBoard.items = items; 718 oClipBoard.act = act; 719 } 720 return true; 721 } 722 723 var paste = function () { 724 if ((oClipBoard.act != 'copy' 725 && oClipBoard.act != 'move') 726 || oClipBoard.items == null) 727 return; 728 729 var items = []; 730 var destination = self.getTreeCurrentNode(); 731 if (oClipBoard.act != 'copy') { 732 $(oClipBoard.items).each(function (index) { 733 var node = new Object; 734 if (this.type == 'directory') 735 buildTreeFromParent(this.id, node); 736 else { 737 node.id = this.id; 738 node.type = 'file'; 739 } 740 741 items[index] = node; 742 }); 743 } 744 else { 745 items = oClipBoard.items; 746 } 747 748 for (var i = 0; i < items.length; i++) { 749 if (items[i].type == 'directory') { 750 items[i] = self.getAllDirChilds(items[i]); 751 } 752 } 753 754 var postdata = {act: oClipBoard.act, destination: destination, data: JSON.stringify(items)}; 755 var script = oClipBoard.act; 756 757 sendCommand({ 758 postdata: postdata, 759 script: script, 760 callbackSuccess: function (parseData) { 761 if (oClipBoard.act == 'copy') { 762 $(parseData.DIRECTORIES).each(function (index) { 763 o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = this; 764 }); 765 766 $(parseData.FILES).each(function (index) { 767 o.data.FILES[$(o.data.FILES).length] = this; 768 }); 769 770 o.data.DIRECTORIES.sort(function (a, b) { 771 return a.parentID - b.parentID; 772 }); 773 774 o.oTree.setData(o.data.DIRECTORIES); 775 o.oGrid.setData(o.data); 776 o.oTree.createCopyNode(parseData.DIRECTORIES); 777 o.oGrid.reloadGrid(); 778 } 779 else if (oClipBoard.act == 'move') { 780 781 } 782 } 783 }); 784 } 785 786 var move = function () { 787 788 } 789 790 var copyTo = function () { 791 792 } 793 794 var moveTo = function () { 795 796 } 797 798 /***************************** 799 * COPY & PASTE & MOVE - END * 800 *****************************/ 801 802 this.deleteItem = function (item) { 803 804 var confirmText = 'Bạn có muá»n xóa '; 805 806 if ($.isArray(item) && item.length > 1) { 807 confirmText += 'các thư mục (và files) Äã chá»n?'; 808 } 809 else if (item.length == 1) { 810 if (item[0].id == 0) 811 return false; 812 confirmText += (item[0].type == 'directory') ? 'thư mục' : 'file'; 813 confirmText += ' <span style="font-weight:bold">' + item[0].name + "</span> khÃŽng?"; 814 } 815 816 confirmText += '<br /><div style="color:red">(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)</div>'; 817 818 var parentID = item[0].parentID; 819 820 for (var i = 0; i < item.length; i++) { 821 if (item[i].type == 'directory') { 822 item[i] = self.getAllDirChilds(item[i]); 823 } 824 } 825 826 var confirmOptions = { 827 message: confirmText, 828 buttons: { 829 confirm: { 830 label: "Xóa" 831 }, 832 cancel: { 833 label: "KhÃŽng xóa" 834 } 835 }, 836 callback: function (result) { 837 if (result) { 838 var delobj = JSON.stringify(item); 839 var postdata = {delobj: delobj}; 840 var script = 'delete'; 841 sendCommand({ 842 postdata: postdata, 843 script: script, 844 callbackSuccess: function (parseData) { 845 if ($(parseData.DIRECTORIES).length > 0) { 846 $(parseData.DIRECTORIES).each(function (index) { 847 o.oTree.deletion(this); 848 o.oGrid.deletion(this, 'directory'); 849 }); 850 } 851 852 if ($(parseData.FILES).length > 0) { 853 $(parseData.FILES).each(function (index) { 854 var file = o.data.FILES[searchItemByID(this, 'file')]; 855 o.oGrid.deletion(this, file.minetype); 856 }); 857 } 858 }, 859 callbackDone: function (obj) { 860 if ($(parseData.DIRECTORIES).length > 0) { 861 $(parseData.DIRECTORIES).each(function (index) { 862 delete o.data.DIRECTORIES[searchItemByID(this, 'directory')]; 863 }); 864 } 865 866 if ($(parseData.FILES).length > 0) { 867 $(parseData.FILES).each(function (index) { 868 delete o.data.FILES[searchItemByID(this, 'file')]; 869 }); 870 } 871 872 o.oTree.setData(o.data.DIRECTORIES); 873 o.oGrid.setData(o.data); 874 self.setTreeCurrentNode(parentID); 875 o.oGrid.reloadGrid(); 876 }, 877 callbackFail: function () { 878 } 879 }); 880 } 881 } 882 }; 883 884 bootbox.confirm(confirmOptions); 885 } 886 887 this.getAllDirChilds = function (oDirItem) { 888 var aryChildDirTmp = []; 889 var aryChildDirID = []; 890 var aryChildFiles = searchItemsByParent(oDirItem.id, 'file'); 891 var aryChildDirs = []; 892 893 getAllDirChild(oDirItem.id, aryChildDirTmp); 894 for (var d = 1; d < aryChildDirTmp.length; d++) { 895 aryChildDirID[d - 1] = aryChildDirTmp[d]; 896 } 897 898 for (var j = 0; j < aryChildDirID.length; j++) { 899 if (o.data.DIRECTORIES[searchItemByID(aryChildDirID[j], 'directory')] != undefined) 900 aryChildDirs[aryChildDirs.length] = o.data.DIRECTORIES[searchItemByID(aryChildDirID[j], 'directory')]; 901 902 var aryTmp = searchItemsByParent(aryChildDirID[j], 'file'); 903 if (aryTmp.length > 0) 904 for (var f in aryTmp) { 905 aryChildFiles[aryChildFiles.length] = aryTmp[f]; 906 } 907 } 908 909 oDirItem.childDirs = aryChildDirs; 910 oDirItem.childFiles = aryChildFiles; 911 return oDirItem; 912 } 913 914 this.setTreeCurrentNode = function (treeNode) { 915 //fire when click a node on Tree 916 //then fire action of Grid 917 treeCurrentNode = treeNode; 918 if (o.oGrid) 919 o.oGrid.reloadGrid(); 920 }; 921 922 this.getTreeCurrentNode = function () { 923 return treeCurrentNode; 924 } 925 926 this.gridNodeDblClick = function (node) { 927 if (node.minetype == 'directory') { 928 var treeNode = $('#' + o.tree).find('UL.vstree[rel^="node' + node.parentID + '"] > LI[rel^="folder"] > A#' + node.id); 929 o.oTree.activeNode(treeNode); 930 } 931 else { 932 //execute or preview file 933 previewFile(node); 934 } 935 }; 936 937 this.createNewFolder = function () { 938 939 } 940 941 this.updateData = function (p) { 942 if (p.item == undefined) 943 p.item = null; 944 if (p.updateAll == undefined) 945 p.updateAll = false; 946 if (p.from == undefined) 947 p.from = null; 948 if (p.type == undefined) 949 p.type = null; 950 if (p.callback == undefined) 951 p.callback = null; 952 953 var obj = p.from == 'tree' ? o.oGrid : o.oTree; 954 if (!p.updateAll) { 955 var index = searchItemByID(p.item.id, p.type); 956 switch (p.type) { 957 case 'directory': 958 o.data.DIRECTORIES[index].name = p.item.name; 959 o.data.DIRECTORIES[index].parentID = p.item.parentID; 960 break; 961 case 'file': 962 o.data.FILES[index].name = p.item.name; 963 o.data.FILES[index].parentID = p.item.parentID; 964 o.data.FILES[index].minetype = p.item.minetype; 965 o.data.FILES[index].fileurl = p.item.fileurl; 966 break; 967 default: 968 break; 969 } 970 } 971 972 o.oTree.setData(o.data.DIRECTORIES); 973 o.oGrid.setData(o.data); 974 975 if (p.callback != null) { 976 eval('obj.' + p.callback + '(p.item);') 977 } 978 979 //call sendCommand 980 } 981 982 this.searchItemsByParent = function (parentID, type) { 983 return searchItemsByParent(parentID, type); 984 } 985 986 this.searchItemByID = function (id, type) { 987 return searchItemByID(id, type); 988 } 989 990 this.refreshStatusBar = function () { 991 var totalSize = 0; 992 var message = ''; 993 if (o.data.FILES.length > 0) { 994 for (var i = 0; i < o.data.FILES.length; i++) { 995 totalSize += parseInt(o.data.FILES[i].size); 996 } 997 } 998 999 message = '<span>Tá»ng dung lượng Äã sá» dụng: <strong>' + self.formatFileSize(totalSize) + '</strong></span>'; 1000 1001 var items = o.oGrid.getHightLightItem(); 1002 if (items.length == 1) { 1003 if ((typeof items[0].minetype !== 'undefined')) { 1004 message += '<span>Tá»p: <strong>' + items[0].name + '</strong></span>'; 1005 message += '<span> - Dung lượng: <strong>' + self.formatFileSize(items[0].size) + '</strong></span>'; 1006 }else { 1007 message += '<span>Thư mục: <strong>' + items[0].name + '</strong></span>'; 1008 } 1009 } 1010 else if (items.length > 1) { 1011 var selectedSize = 0; 1012 for (var i = 0; i < items.length; i++) { 1013 selectedSize += (typeof items[i].minetype !== 'undefined') ? parseInt(items[i].size) : 0; 1014 } 1015 message += '<span><strong>' + items.length + ' tá»p (thư mục)</strong> ÄÆ°á»£c chá»n</span>'; 1016 message += '<span> - Dung lượng: <strong>' + self.formatFileSize(selectedSize) + '</strong></span>'; 1017 } 1018 1019 $(statusbar).html(message); 1020 } 1021 1022 this.redirectPost = function(location, args){ 1023 var form = ''; 1024 $.each( args, function( key, value ) { 1025 form += '<input type="hidden" name="'+key+'" value="'+value+'">'; 1026 }); 1027 $('<form action="'+location+'" method="POST">'+form+'</form>').appendTo('body').submit(); 1028 } 1029 1030 this.formatFileSize = function (size) { 1031 var i; 1032 i = Math.floor(Math.log(size) / Math.log(1024)); 1033 if ((size === 0) || (parseInt(size) === 0)) { 1034 return "0 kB"; 1035 } else if (isNaN(i) || (!isFinite(size)) || (size === Number.POSITIVE_INFINITY) || (size === Number.NEGATIVE_INFINITY) || (size == null) || (size < 0)) { 1036 console.info("Throwing error"); 1037 throw Error("" + size + " did not compute to a valid number to be humanized."); 1038 } else { 1039 return (size / Math.pow(1024, i)).toFixed(2) * 1 + " " + ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"][i]; 1040 }} 1041 1042 1043 this.initialize = function () { 1044 init(); 1045 return this; 1046 }; 1047 1048 return this.initialize(); 1049 } 1050 1051 }); 1052 })(jQuery); 658 </audio> <br />' 659 + node.name; 660 bootbox.alert(content); 661 } 662 663 if ($.inArray($ext, [ "ppt", "xls", "doc", 664 "pdf", "docx", "pptx", "xlsx" ]) >= 0) { 665 666 $.ajax({ 667 url : o.host 668 + "preview/getFilePreview/" 669 + node.id, 670 type : "POST", 671 data : {}, 672 success : function(data, 673 textStatus, jqXHR) { 674 bootbox.alert(data); 675 }, 676 error : function(jqXHR, textStatus, 677 errorThrown) { 678 679 } 680 }); 681 } 682 if ($.inArray($ext, [ "xvl" ]) >= 0) { 683 var url = o.host.replace("ajax/", ""); 684 var redirect = url 685 + 'frontend/lecture/'; 686 self.redirectPost(redirect, { 687 fileid : node.id 688 }); 689 } 690 $(".bootbox").addClass("preview"); 691 } 692 693 var uploadInit = function() { 694 var ul = $('#upload ul'); 695 696 $('#drop a').click(function() { 697 $(this).parent().find('input').click(); 698 }); 699 700 $('#upload') 701 .fileupload( 702 { 703 dropZone : $('#drop'), 704 add : function(e, data) { 705 706 var tpl = $('<li class="working"><input type="text" value="0" data-width="48" data-height="48"' 707 + ' data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /><p></p><span></span></li>'); 708 tpl 709 .find('p') 710 .text( 711 data.files[0].name) 712 .append( 713 '<i>' 714 + formatFileSize(data.files[0].size) 715 + '</i>'); 716 data.context = tpl 717 .appendTo(ul); 718 tpl.find('input') 719 .knob(); 720 tpl 721 .find( 722 'span') 723 .click( 724 function() { 725 726 if (tpl 727 .hasClass('working')) { 728 jqXHR 729 .abort(); 730 } 731 732 tpl 733 .fadeOut(function() { 734 tpl 735 .remove(); 736 }); 737 738 }); 739 740 var jqXHR = data 741 .submit(); 742 }, 743 progress : function(e, 744 data) { 745 746 // Calculate the 747 // completion 748 // percentage of the 749 // upload 750 var progress = parseInt( 751 data.loaded 752 / data.total 753 * 100, 754 10); 755 756 // Update the hidden 757 // input field and 758 // trigger a change 759 // so that the 760 // jQuery knob 761 // plugin knows to 762 // update the dial 763 data.context 764 .find( 765 'input') 766 .val( 767 progress) 768 .change(); 769 770 if (progress == 100) { 771 data.context 772 .removeClass('working'); 773 774 } 775 }, 776 fail : function(e, data) { 777 // Something has 778 // gone wrong! 779 data.context 780 .addClass('error'); 781 }, 782 done : function(e, data) { 783 // var newFileData = 784 // {"DIRECTORIES": 785 // [{"id": "5000", 786 // "name": "Dir1", 787 // "parentID": 85}], 788 // "FILES": [{"id": 789 // "2000", "name": 790 // "File in root 1", 791 // "parentID": 85, 792 // "minetype": 793 // "text"},{"id": 794 // "2001", "name": 795 // "File in root 2", 796 // "parentID": 85, 797 // "minetype": 798 // "text"}], 799 // "ERROR": {"err": 800 // "", "errCode": 801 // 0}}; 802 var newFileData = data.result; 803 newFileData = $ 804 .parseJSON(data.result); 805 if (newFileData.ERROR.errCode == 0) { 806 for ( var i = 0; i < $(newFileData.FILES).length; i++) { 807 var file = newFileData.FILES[i]; 808 var node = { 809 thumbnail : file.thumbnail, 810 id : file.id, 811 name : file.name, 812 fileurl : file.fileurl, 813 parentID : file.parentID, 814 minetype : file.minetype 815 }; 816 o.oGrid 817 .createNode(node); 818 o.data.FILES[$(o.data.FILES).length] = node; 819 } 820 821 for ( var i = 0; i < $(newFileData.DIRECTORIES).length; i++) { 822 var file = newFileData.DIRECTORIES[i]; 823 var node = { 824 id : file.id, 825 name : file.name, 826 parentID : file.parentID, 827 minetype : file.minetype 828 }; 829 o.oTree 830 .createNode(node); 831 o.oGrid 832 .createNode(node); 833 o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node; 834 } 835 836 /* 837 * var node = 838 * {id: 839 * parseData.id, 840 * name: 841 * parseData.name, 842 * parentID: 843 * parseData.parentID}; 844 * o.oTree.createNode(node); 845 * o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = 846 * node; if 847 * (o.oGrid) 848 * o.oGrid.reloadGrid(); 849 */ 850 } 851 } 852 853 }); 854 855 $(document).on('drop dragover', 856 function(e) { 857 e.preventDefault(); 858 }); 859 860 function formatFileSize(bytes) { 861 if (typeof bytes !== 'number') { 862 return ''; 863 } 864 865 if (bytes >= 1000000000) { 866 return (bytes / 1000000000) 867 .toFixed(2) 868 + ' GB'; 869 } 870 871 if (bytes >= 1000000) { 872 return (bytes / 1000000).toFixed(2) 873 + ' MB'; 874 } 875 876 return (bytes / 1000).toFixed(2) 877 + ' KB'; 878 } 879 880 }; 881 882 var createFolder = function(parent, name) { 883 var postdata = { 884 fname : name, 885 fparentid : parent 886 }; 887 var script = 'createdir'; 888 /* isDev = true; */ 889 sendCommand({ 890 postdata : postdata, 891 script : script, 892 callbackSuccess : function(parseData) { 893 createFolderFinish(parseData); 894 }, 895 callbackFail : function() { 896 } 897 }); 898 } 899 900 var createFolderFinish = function(parseData) { 901 /* isDev = false; */ 902 if (parseData.ERROR.errCode == 0) { 903 var node = { 904 id : parseData.id, 905 name : parseData.name, 906 parentID : parseData.parentID 907 }; 908 o.oTree.createNode(node); 909 o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node; 910 if (o.oGrid) 911 o.oGrid.reloadGrid(); 912 } 913 } 914 /*********************************************** 915 * CREATE FOLDER - END * 916 **********************************************/ 917 /*********************************************** 918 * COPY & PASTE & MOVE - START * =*********** 919 **********************************************/ 920 var copy = function(act) { 921 // detect selected items 922 // push to clipboard 923 var items = o.oGrid.getHightLightItem(); 924 925 if ($(items).length == 0) { 926 var node = o.oTree.getSelectedNode(); 927 var itemID = $(node).attr('id'); 928 929 if (itemID == 0) 930 return false; 931 932 items[0] = o.data.DIRECTORIES[searchItemByID( 933 itemID, 'directory')]; 934 items[0].type = 'directory'; 935 } 936 937 if ($(items).length > 0) { 938 oClipBoard.items = items; 939 oClipBoard.act = act; 940 } 941 return true; 942 } 943 944 var paste = function() { 945 if ((oClipBoard.act != 'copy' && oClipBoard.act != 'move') 946 || oClipBoard.items == null) 947 return; 948 949 var items = []; 950 var destination = self.getTreeCurrentNode(); 951 if (oClipBoard.act != 'copy') { 952 $(oClipBoard.items) 953 .each( 954 function(index) { 955 var node = new Object; 956 if (this.type == 'directory') 957 buildTreeFromParent( 958 this.id, 959 node); 960 else { 961 node.id = this.id; 962 node.type = 'file'; 963 } 964 965 items[index] = node; 966 }); 967 } else { 968 items = oClipBoard.items; 969 } 970 971 for ( var i = 0; i < items.length; i++) { 972 if (items[i].type == 'directory') { 973 items[i] = self 974 .getAllDirChilds(items[i]); 975 } 976 } 977 978 var postdata = { 979 act : oClipBoard.act, 980 destination : destination, 981 data : JSON.stringify(items) 982 }; 983 var script = oClipBoard.act; 984 985 sendCommand({ 986 postdata : postdata, 987 script : script, 988 callbackSuccess : function(parseData) { 989 if (oClipBoard.act == 'copy') { 990 $(parseData.DIRECTORIES) 991 .each( 992 function(index) { 993 o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = this; 994 }); 995 996 $(parseData.FILES) 997 .each( 998 function(index) { 999 o.data.FILES[$(o.data.FILES).length] = this; 1000 }); 1001 1002 o.data.DIRECTORIES 1003 .sort(function(a, b) { 1004 return a.parentID 1005 - b.parentID; 1006 }); 1007 1008 o.oTree 1009 .setData(o.data.DIRECTORIES); 1010 o.oGrid.setData(o.data); 1011 o.oTree 1012 .createCopyNode(parseData.DIRECTORIES); 1013 o.oGrid.reloadGrid(); 1014 } else if (oClipBoard.act == 'move') { 1015 1016 } 1017 } 1018 }); 1019 } 1020 1021 var move = function() { 1022 1023 } 1024 1025 var copyTo = function() { 1026 1027 } 1028 1029 var moveTo = function() { 1030 1031 } 1032 1033 /*********************************************** 1034 * COPY & PASTE & MOVE - END * 1035 **********************************************/ 1036 1037 this.deleteItem = function(item) { 1038 1039 var confirmText = 'Bạn có muá»n xóa '; 1040 1041 if ($.isArray(item) && item.length > 1) { 1042 confirmText += 'các thư mục (và files) Äã chá»n?'; 1043 } else if (item.length == 1) { 1044 if (item[0].id == 0) 1045 return false; 1046 confirmText += (item[0].type == 'directory') ? 'thư mục' 1047 : 'file'; 1048 confirmText += ' <span style="font-weight:bold">' 1049 + item[0].name 1050 + "</span> khÃŽng?"; 1051 } 1052 1053 confirmText += '<br /><div style="color:red">(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)</div>'; 1054 1055 var parentID = item[0].parentID; 1056 1057 for ( var i = 0; i < item.length; i++) { 1058 if (item[i].type == 'directory') { 1059 item[i] = self 1060 .getAllDirChilds(item[i]); 1061 } 1062 } 1063 1064 var confirmOptions = { 1065 message : confirmText, 1066 buttons : { 1067 confirm : { 1068 label : "Xóa" 1069 }, 1070 cancel : { 1071 label : "KhÃŽng xóa" 1072 } 1073 }, 1074 callback : function(result) { 1075 if (result) { 1076 var delobj = JSON 1077 .stringify(item); 1078 var postdata = { 1079 delobj : delobj 1080 }; 1081 var script = 'delete'; 1082 sendCommand({ 1083 postdata : postdata, 1084 script : script, 1085 callbackSuccess : function( 1086 parseData) { 1087 if ($(parseData.DIRECTORIES).length > 0) { 1088 $( 1089 parseData.DIRECTORIES) 1090 .each( 1091 function( 1092 index) { 1093 o.oTree 1094 .deletion(this); 1095 o.oGrid 1096 .deletion( 1097 this, 1098 'directory'); 1099 }); 1100 } 1101 1102 if ($(parseData.FILES).length > 0) { 1103 $(parseData.FILES) 1104 .each( 1105 function( 1106 index) { 1107 var file = o.data.FILES[searchItemByID( 1108 this, 1109 'file')]; 1110 o.oGrid 1111 .deletion( 1112 this, 1113 file.minetype); 1114 }); 1115 } 1116 }, 1117 callbackDone : function(obj) { 1118 if ($(parseData.DIRECTORIES).length > 0) { 1119 $( 1120 parseData.DIRECTORIES) 1121 .each( 1122 function( 1123 index) { 1124 delete o.data.DIRECTORIES[searchItemByID( 1125 this, 1126 'directory')]; 1127 }); 1128 } 1129 1130 if ($(parseData.FILES).length > 0) { 1131 $(parseData.FILES) 1132 .each( 1133 function( 1134 index) { 1135 delete o.data.FILES[searchItemByID( 1136 this, 1137 'file')]; 1138 }); 1139 } 1140 1141 o.oTree 1142 .setData(o.data.DIRECTORIES); 1143 o.oGrid.setData(o.data); 1144 self 1145 .setTreeCurrentNode(parentID); 1146 o.oGrid.reloadGrid(); 1147 }, 1148 callbackFail : function() { 1149 } 1150 }); 1151 } 1152 } 1153 }; 1154 1155 bootbox.confirm(confirmOptions); 1156 } 1157 1158 this.getAllDirChilds = function(oDirItem) { 1159 var aryChildDirTmp = []; 1160 var aryChildDirID = []; 1161 var aryChildFiles = searchItemsByParent( 1162 oDirItem.id, 'file'); 1163 var aryChildDirs = []; 1164 1165 getAllDirChild(oDirItem.id, aryChildDirTmp); 1166 for ( var d = 1; d < aryChildDirTmp.length; d++) { 1167 aryChildDirID[d - 1] = aryChildDirTmp[d]; 1168 } 1169 1170 for ( var j = 0; j < aryChildDirID.length; j++) { 1171 if (o.data.DIRECTORIES[searchItemByID( 1172 aryChildDirID[j], 'directory')] != undefined) 1173 aryChildDirs[aryChildDirs.length] = o.data.DIRECTORIES[searchItemByID( 1174 aryChildDirID[j], 1175 'directory')]; 1176 1177 var aryTmp = searchItemsByParent( 1178 aryChildDirID[j], 'file'); 1179 if (aryTmp.length > 0) 1180 for ( var f in aryTmp) { 1181 aryChildFiles[aryChildFiles.length] = aryTmp[f]; 1182 } 1183 } 1184 1185 oDirItem.childDirs = aryChildDirs; 1186 oDirItem.childFiles = aryChildFiles; 1187 return oDirItem; 1188 } 1189 1190 this.setTreeCurrentNode = function(treeNode) { 1191 // fire when click a node on Tree 1192 // then fire action of Grid 1193 treeCurrentNode = treeNode; 1194 if (o.oGrid) 1195 o.oGrid.reloadGrid(); 1196 }; 1197 1198 this.getTreeCurrentNode = function() { 1199 return treeCurrentNode; 1200 } 1201 1202 this.gridNodeDblClick = function(node) { 1203 if (node.minetype == 'directory') { 1204 var treeNode = $('#' + o.tree) 1205 .find( 1206 'UL.vstree[rel^="node' 1207 + node.parentID 1208 + '"] > LI[rel^="folder"] > A#' 1209 + node.id); 1210 o.oTree.activeNode(treeNode); 1211 } else { 1212 // execute or preview file 1213 previewFile(node); 1214 } 1215 }; 1216 1217 this.createNewFolder = function() { 1218 1219 } 1220 1221 this.updateData = function(p) { 1222 if (p.item == undefined) 1223 p.item = null; 1224 if (p.updateAll == undefined) 1225 p.updateAll = false; 1226 if (p.from == undefined) 1227 p.from = null; 1228 if (p.type == undefined) 1229 p.type = null; 1230 if (p.callback == undefined) 1231 p.callback = null; 1232 1233 var obj = p.from == 'tree' ? o.oGrid 1234 : o.oTree; 1235 if (!p.updateAll) { 1236 var index = searchItemByID(p.item.id, 1237 p.type); 1238 switch (p.type) { 1239 case 'directory': 1240 o.data.DIRECTORIES[index].name = p.item.name; 1241 o.data.DIRECTORIES[index].parentID = p.item.parentID; 1242 break; 1243 case 'file': 1244 o.data.FILES[index].name = p.item.name; 1245 o.data.FILES[index].parentID = p.item.parentID; 1246 o.data.FILES[index].minetype = p.item.minetype; 1247 o.data.FILES[index].fileurl = p.item.fileurl; 1248 break; 1249 default: 1250 break; 1251 } 1252 } 1253 1254 o.oTree.setData(o.data.DIRECTORIES); 1255 o.oGrid.setData(o.data); 1256 1257 if (p.callback != null) { 1258 eval('obj.' + p.callback + '(p.item);') 1259 } 1260 1261 // call sendCommand 1262 } 1263 1264 this.searchItemsByParent = function(parentID, 1265 type) { 1266 return searchItemsByParent(parentID, type); 1267 } 1268 1269 this.searchItemByID = function(id, type) { 1270 return searchItemByID(id, type); 1271 } 1272 1273 this.refreshStatusBar = function() { 1274 var totalSize = 0; 1275 var message = ''; 1276 if (o.data.FILES.length > 0) { 1277 for ( var i = 0; i < o.data.FILES.length; i++) { 1278 totalSize += parseInt(o.data.FILES[i].size); 1279 } 1280 } 1281 1282 message = '<span>Tá»ng dung lượng Äã sá» dụng: <strong>' 1283 + self.formatFileSize(totalSize) 1284 + '</strong></span>'; 1285 1286 var items = o.oGrid.getHightLightItem(); 1287 if (items.length == 1) { 1288 if ((typeof items[0].minetype !== 'undefined')) { 1289 message += '<span>Tá»p: <strong>' 1290 + items[0].name 1291 + '</strong></span>'; 1292 message += '<span> - Dung lượng: <strong>' 1293 + self 1294 .formatFileSize(items[0].size) 1295 + '</strong></span>'; 1296 } else { 1297 message += '<span>Thư mục: <strong>' 1298 + items[0].name 1299 + '</strong></span>'; 1300 } 1301 } else if (items.length > 1) { 1302 var selectedSize = 0; 1303 for ( var i = 0; i < items.length; i++) { 1304 selectedSize += (typeof items[i].minetype !== 'undefined') ? parseInt(items[i].size) 1305 : 0; 1306 } 1307 message += '<span><strong>' 1308 + items.length 1309 + ' tá»p (thư mục)</strong> ÄÆ°á»£c chá»n</span>'; 1310 message += '<span> - Dung lượng: <strong>' 1311 + self 1312 .formatFileSize(selectedSize) 1313 + '</strong></span>'; 1314 } 1315 1316 $(statusbar).html(message); 1317 } 1318 1319 this.refreshNavigationBar = function () { 1320 var root = null; 1321 } 1322 1323 this.redirectPost = function(location, args) { 1324 var form = ''; 1325 $.each(args, function(key, value) { 1326 form += '<input type="hidden" name="' 1327 + key + '" value="' + value 1328 + '">'; 1329 }); 1330 $( 1331 '<form action="' + location 1332 + '" method="POST">' + form 1333 + '</form>').appendTo( 1334 'body').submit(); 1335 } 1336 1337 this.formatFileSize = function(size) { 1338 var i; 1339 i = Math.floor(Math.log(size) 1340 / Math.log(1024)); 1341 if ((size === 0) || (parseInt(size) === 0)) { 1342 return "0 kB"; 1343 } else if (isNaN(i) 1344 || (!isFinite(size)) 1345 || (size === Number.POSITIVE_INFINITY) 1346 || (size === Number.NEGATIVE_INFINITY) 1347 || (size == null) || (size < 0)) { 1348 console.info("Throwing error"); 1349 throw Error("" 1350 + size 1351 + " did not compute to a valid number to be humanized."); 1352 } else { 1353 return (size / Math.pow(1024, i)) 1354 .toFixed(2) 1355 * 1 1356 + " " 1357 + [ "B", "KB", "MB", "GB", 1358 "TB", "PB", "EB", "ZB", 1359 "YB" ][i]; 1360 } 1361 } 1362 1363 this.initialize = function() { 1364 init(); 1365 return this; 1366 }; 1367 1368 return this.initialize(); 1369 } 1370 1371 }); 1372 })(jQuery);
Note: See TracChangeset
for help on using the changeset viewer.