Changeset 858 for pro-violet-viettel
- Timestamp:
- Mar 31, 2015 9:56:50 AM (10 years ago)
- Location:
- pro-violet-viettel/www/deploy/20150304
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
pro-violet-viettel/www/deploy/20150304/application/modules/ajax/controllers/download.php
r841 r858 14 14 15 15 public function getFile () { 16 $file= $this->input->post('file'); 17 $folder= $this->input->post('folder'); 18 $files = $this->vservices->actionExecute('getFiles',array("file"=>$file,"folder"=>$folder)); 19 echo "<pre>"; 20 print_r($files); 21 echo "</pre>"; 16 $data= $this->input->post('data'); 17 $treeArray= json_decode($data,TRUE); 18 19 if ((count($treeArray)==1) && ($treeArray[0]['type']=='file')) 20 { 21 $file=$treeArray[0]; 22 echo $file['name']; 23 $file = file_get_contents($treeArray[0]['fileurl']); 24 $local_file="".$treeArray[0]['name']; 25 file_put_contents($local_file, $file); 26 $download_rate = 512; 27 $download_file = $treeArray[0]['name']; 28 } 22 29 die(); 23 $file = file_get_contents($fileurl); 24 file_put_contents("1.jpg", $file); 25 $local_file="1.jpg"; 26 $download_rate = 512; 27 $download_file = $this->input->post('filename'); 28 29 // send headers 30 31 32 33 34 35 36 37 38 39 40 41 42 // send headers 43 30 44 header('Cache-control: private'); 31 45 header('Content-Type: application/octet-stream'); … … 33 47 header('Content-Disposition: filename='.$download_file); 34 48 49 35 50 // flush content 36 51 flush(); -
pro-violet-viettel/www/deploy/20150304/assets/js/manager.js
r857 r858 1 1 if (jQuery) 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.getHighLightItem(); 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 var link = o.host + "download/getFile/"; 425 self.redirectPost(link, { 426 file : fileid.toString(), 427 folder : folder.toString() 428 }); 429 } 430 431 var btnDelClick = function() { 432 var items = o.oGrid.getHighLightItem(); 433 if ($(items).length == 0) { 434 var dirID = $(o.oTree.getSelectedNode()) 435 .attr('id'); 436 var item = o.data.DIRECTORIES[searchItemByID( 437 dirID, 'directory')]; 438 item.type = 'directory'; 439 items = [ item ]; 440 } 441 self.deleteItem(items); 442 } 443 444 var btnCopyClick = function() { 445 copy('copy'); 446 } 447 448 var btnPasteClick = function() { 449 paste(); 450 } 451 452 var btnCutClick = function() { 453 copy('move'); 454 } 455 456 var bindEventToToolbars = function() { 457 $(btnRefresh).click(function(e) { 458 btnRefreshClick(this) 459 }); 460 461 $(btnNewFolder).click(function(e) { 462 btnNewFolderClick() 463 }); 464 $(btnUpload).click(function(e) { 465 btnUploadClick() 466 }); 467 468 $(btnDel).click(function(e) { 469 btnDelClick() 470 }); 471 $(btnCopy).click(function(e) { 472 btnCopyClick() 473 }); 474 $(btnCut).click(function(e) { 475 btnCutClick() 476 }); 477 $(btnPaste).click(function(e) { 478 btnPasteClick() 479 }) 480 $(btnPreview).click(function(e) { 481 btnPreviewClick() 482 }) 483 $(btnDownload).click(function(e) { 484 btnDownloadClick() 485 }) 486 487 /* 488 * btnShare btnPreview btnDownload btnUpload 489 */ 490 } 491 /*********************************************** 492 * TOOLBAR EVENTS - END * 493 **********************************************/ 494 495 /*********************************************** 496 * DOCUMENT EVENTS BINDING - START * 497 **********************************************/ 498 var documentEventsBinding = function() { 499 $(document) 500 .bind( 501 'keydown', 502 function(e) { 503 switch (e.which) { 504 case 113: 505 case 27: 506 var gridSelectedItems = o.oGrid 507 .getHighLightItem(); 508 if ($(gridSelectedItems).length > 0) { 509 o.oGrid 510 .rename(e.which); 511 } else { 512 o.oTree 513 .rename(e.which); 514 } 515 break; 516 case 46: 517 // delete 518 btnDelClick(); 519 break; 520 case 65: 521 if (e.ctrlKey) { 522 o.oGrid 523 .selectAllNode(); 524 } 525 break; 526 default: 527 break; 528 } 529 }); 530 } 531 /*********************************************** 532 * DOCUMENT EVENTS BINDING - END * 533 **********************************************/ 534 535 /*********************************************** 536 * CREATE FOLDER - START * 537 **********************************************/ 538 var createFolderStart = function() { 539 var promptOptions = { 540 title : "Tạo thư mục má»i", 541 buttons : { 542 confirm : { 543 label : "Lưu" 544 }, 545 cancel : { 546 label : "Há»§y" 547 } 548 }, 549 callback : function(result) { 550 if (result === null) { 551 } else { 552 createFolder(treeCurrentNode, 553 result); 554 } 555 } 556 }; 557 558 return bootbox.prompt(promptOptions); 559 } 560 561 var uploadStart = function() { 562 var userid = o.data.userinfo.us_id; 563 var promptOptions = { 564 title : "Tải lên", 565 message : "<form id='upload' method='post' action='" 566 + api_url 567 + "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='" 568 + self.getTreeCurrentNode() 569 + "'/><input type='hidden' name='userid' value='" 570 + userid 571 + "'/><input type='file' name='upload_file' multiple /></div><ul></ul></form>", 572 buttons : { 573 success : { 574 label : "Xong", 575 className : "btn btn-primary", 576 callback : function(result) { 577 578 } 579 }, 580 }, 581 onEscape : function() { 582 uploadDone(self 583 .getTreeCurrentNode()); 584 } 585 }; 586 587 return bootbox.dialog(promptOptions); 588 } 589 var uploadDone = function(result) { 590 591 } 592 var btnPreviewClick = function() { 593 var items = o.oGrid.getHighLightItem(); 594 if ($(items).length == 0) { 595 var dirID = $(o.oTree.getSelectedNode()) 596 .attr('id'); 597 var item = o.data.DIRECTORIES[searchItemByID( 598 dirID, 'directory')]; 599 item.type = 'directory'; 600 items = [ item ]; 601 } 602 previewFile(items[0]); 603 } 604 605 var previewFile = function(node) { 606 var content = ""; 607 $ext = node.fileurl.split('.').pop(); 608 $ext = $ext.toLowerCase(); 609 if ($.inArray($ext, [ "jpg", "jpeg", "png", 610 "gif" ]) >= 0) { 611 content = "<img style='width:100%' src='" 612 + node.fileurl 613 + "' /><br />" 614 + node.name; 615 bootbox.alert(content); 616 } 617 618 if ($.inArray($ext, [ "flv", "mp4", "avi", 619 "m4v" ]) >= 0) { 620 $ 621 .ajax({ 622 url : o.host 623 + "preview/getVideoPreview/", 624 type : "POST", 625 data : { 626 fileurl : node.fileurl, 627 name : node.name 628 }, 629 success : function(data, 630 textStatus, jqXHR) { 631 bootbox.alert(data); 632 }, 633 error : function(jqXHR, 634 textStatus, 635 errorThrown) { 636 637 } 638 }); 639 } 640 641 if ($.inArray($ext, [ "ogg" ]) >= 0) { 642 content = '<audio controls>\ 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.getHighLightItem(); 412 413 if ($(items).length == 0) { 414 var node = o.oTree.getSelectedNode(); 415 var itemID = $(node).attr('id'); 416 417 if (itemID == 0) 418 return false; 419 420 items[0] = o.data.DIRECTORIES[searchItemByID( 421 itemID, 'directory')]; 422 items[0].type = 'directory'; 423 } 424 425 var postdata = { 426 data: JSON.stringify(items) 427 }; 428 var url = o.host + "download/getFile/"; 429 self.redirectPost(url, { 430 data: JSON.stringify(items) 431 }); 432 433 434 435 } 436 437 var btnDelClick = function () { 438 var items = o.oGrid.getHighLightItem(); 439 if ($(items).length == 0) { 440 var dirID = $(o.oTree.getSelectedNode()) 441 .attr('id'); 442 var item = o.data.DIRECTORIES[searchItemByID( 443 dirID, 'directory')]; 444 item.type = 'directory'; 445 items = [item]; 446 } 447 self.deleteItem(items); 448 } 449 450 var btnCopyClick = function () { 451 copy('copy'); 452 } 453 454 var btnPasteClick = function () { 455 paste(); 456 } 457 458 var btnCutClick = function () { 459 copy('move'); 460 } 461 462 var bindEventToToolbars = function () { 463 $(btnRefresh).click(function (e) { 464 btnRefreshClick(this) 465 }); 466 467 $(btnNewFolder).click(function (e) { 468 btnNewFolderClick() 469 }); 470 $(btnUpload).click(function (e) { 471 btnUploadClick() 472 }); 473 474 $(btnDel).click(function (e) { 475 btnDelClick() 476 }); 477 $(btnCopy).click(function (e) { 478 btnCopyClick() 479 }); 480 $(btnCut).click(function (e) { 481 btnCutClick() 482 }); 483 $(btnPaste).click(function (e) { 484 btnPasteClick() 485 }) 486 $(btnPreview).click(function (e) { 487 btnPreviewClick() 488 }) 489 $(btnDownload).click(function (e) { 490 btnDownloadClick() 491 }) 492 493 /* 494 * btnShare btnPreview btnDownload btnUpload 495 */ 496 } 497 /*********************************************** 498 * TOOLBAR EVENTS - END * 499 **********************************************/ 500 501 /*********************************************** 502 * DOCUMENT EVENTS BINDING - START * 503 **********************************************/ 504 var documentEventsBinding = function () { 505 $(document) 506 .bind( 507 'keydown', 508 function (e) { 509 switch (e.which) { 510 case 113: 511 case 27: 512 var gridSelectedItems = o.oGrid 513 .getHighLightItem(); 514 if ($(gridSelectedItems).length > 0) { 515 o.oGrid 516 .rename(e.which); 517 } else { 518 o.oTree 519 .rename(e.which); 520 } 521 break; 522 case 46: 523 // delete 524 btnDelClick(); 525 break; 526 case 65: 527 if (e.ctrlKey) { 528 o.oGrid 529 .selectAllNode(); 530 } 531 break; 532 default: 533 break; 534 } 535 }); 536 } 537 /*********************************************** 538 * DOCUMENT EVENTS BINDING - END * 539 **********************************************/ 540 541 /*********************************************** 542 * CREATE FOLDER - START * 543 **********************************************/ 544 var createFolderStart = function () { 545 var promptOptions = { 546 title: "Tạo thư mục má»i", 547 buttons: { 548 confirm: { 549 label: "Lưu" 550 }, 551 cancel: { 552 label: "Há»§y" 553 } 554 }, 555 callback: function (result) { 556 if (result === null) { 557 } else { 558 createFolder(treeCurrentNode, 559 result); 560 } 561 } 562 }; 563 564 return bootbox.prompt(promptOptions); 565 } 566 567 var uploadStart = function () { 568 var userid = o.data.userinfo.us_id; 569 var promptOptions = { 570 title: "Tải lên", 571 message: "<form id='upload' method='post' action='" 572 + api_url 573 + "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='" 574 + self.getTreeCurrentNode() 575 + "'/><input type='hidden' name='userid' value='" 576 + userid 577 + "'/><input type='file' name='upload_file' multiple /></div><ul></ul></form>", 578 buttons: { 579 success: { 580 label: "Xong", 581 className: "btn btn-primary", 582 callback: function (result) { 583 584 } 585 }, 586 }, 587 onEscape: function () { 588 uploadDone(self 589 .getTreeCurrentNode()); 590 } 591 }; 592 593 return bootbox.dialog(promptOptions); 594 } 595 var uploadDone = function (result) { 596 597 } 598 var btnPreviewClick = function () { 599 var items = o.oGrid.getHighLightItem(); 600 if ($(items).length == 0) { 601 var dirID = $(o.oTree.getSelectedNode()) 602 .attr('id'); 603 var item = o.data.DIRECTORIES[searchItemByID( 604 dirID, 'directory')]; 605 item.type = 'directory'; 606 items = [item]; 607 } 608 previewFile(items[0]); 609 } 610 611 var previewFile = function (node) { 612 var content = ""; 613 $ext = node.fileurl.split('.').pop(); 614 $ext = $ext.toLowerCase(); 615 if ($.inArray($ext, ["jpg", "jpeg", "png", 616 "gif"]) >= 0) { 617 content = "<img style='width:100%' src='" 618 + node.fileurl 619 + "' /><br />" 620 + node.name; 621 bootbox.alert(content); 622 } 623 624 if ($.inArray($ext, ["flv", "mp4", "avi", 625 "m4v"]) >= 0) { 626 $.ajax({ 627 url: o.host 628 + "preview/getVideoPreview/", 629 type: "POST", 630 data: { 631 fileurl: node.fileurl, 632 name: node.name 633 }, 634 success: function (data, 635 textStatus, jqXHR) { 636 bootbox.alert(data); 637 }, 638 error: function (jqXHR, 639 textStatus, 640 errorThrown) { 641 642 } 643 }); 644 } 645 646 if ($.inArray($ext, ["ogg"]) >= 0) { 647 content = '<audio controls>\ 643 648 <source src="' 644 645 649 + node.fileurl 650 + '" type="audio/ogg">\ 646 651 Your browser does not support the audio element.\ 647 652 </audio> <br />' 648 649 650 651 if ($.inArray($ext, [ "mp3"]) >= 0) {652 653 + node.name; 654 bootbox.alert(content); 655 } 656 if ($.inArray($ext, ["mp3"]) >= 0) { 657 content = '<audio controls>\ 653 658 <source src="' 654 655 659 + node.fileurl 660 + '" type="audio/mpeg">\ 656 661 Your browser does not support the audio element.\ 657 662 </audio> <br />' 658 + node.name; 659 bootbox.alert(content); 660 } 661 662 if ($.inArray($ext, [ "ppt", "xls", "doc", 663 "pdf", "docx", "pptx", "xlsx" ]) >= 0) { 664 665 $.ajax({ 666 url : o.host 667 + "preview/getFilePreview/" 668 + node.id, 669 type : "POST", 670 data : {}, 671 success : function(data, 672 textStatus, jqXHR) { 673 bootbox.alert(data); 674 }, 675 error : function(jqXHR, textStatus, 676 errorThrown) { 677 678 } 679 }); 680 } 681 if ($.inArray($ext, [ "xvl" ]) >= 0) { 682 var url = o.host.replace("ajax/", ""); 683 var redirect = url 684 + 'frontend/lecture/'; 685 self.redirectPost(redirect, { 686 fileid : node.id 687 }); 688 } 689 $(".bootbox").addClass("preview"); 690 } 691 692 var uploadInit = function() { 693 var ul = $('#upload ul'); 694 695 $('#drop a').click(function() { 696 $(this).parent().find('input').click(); 697 }); 698 699 $('#upload') 700 .fileupload( 701 { 702 dropZone : $('#drop'), 703 add : function(e, data) { 704 705 var tpl = $('<li class="working"><input type="text" value="0" data-width="48" data-height="48"' 706 + ' data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /><p></p><span></span></li>'); 707 tpl 708 .find('p') 709 .text( 710 data.files[0].name) 711 .append( 712 '<i>' 713 + formatFileSize(data.files[0].size) 714 + '</i>'); 715 data.context = tpl 716 .appendTo(ul); 717 tpl.find('input') 718 .knob(); 719 tpl 720 .find( 721 'span') 722 .click( 723 function() { 724 725 if (tpl 726 .hasClass('working')) { 727 jqXHR 728 .abort(); 729 } 730 731 tpl 732 .fadeOut(function() { 733 tpl 734 .remove(); 735 }); 736 737 }); 738 739 var jqXHR = data 740 .submit(); 741 }, 742 progress : function(e, 743 data) { 744 745 // Calculate the 746 // completion 747 // percentage of the 748 // upload 749 var progress = parseInt( 750 data.loaded 751 / data.total 752 * 100, 753 10); 754 755 // Update the hidden 756 // input field and 757 // trigger a change 758 // so that the 759 // jQuery knob 760 // plugin knows to 761 // update the dial 762 data.context 763 .find( 764 'input') 765 .val( 766 progress) 767 .change(); 768 769 if (progress == 100) { 770 data.context 771 .removeClass('working'); 772 773 } 774 }, 775 fail : function(e, data) { 776 // Something has 777 // gone wrong! 778 data.context 779 .addClass('error'); 780 }, 781 done : function(e, data) { 782 783 var newFileData = data.result; 784 newFileData = $.parseJSON(data.result); 785 if (newFileData.ERROR.errCode == 0) { 786 for ( var i = 0; i < $(newFileData.FILES).length; i++) { 787 var file = newFileData.FILES[i]; 788 var node = { 789 thumbnail : file.thumbnail, 790 id : file.id, 791 name : file.name, 792 fileurl : file.fileurl, 793 parentID : file.parentID, 794 minetype : file.minetype, 795 size: file.size 796 }; 797 o.oGrid.createNode(node); 798 o.data.FILES.push(node); 799 } 800 801 for ( var i = 0; i < $(newFileData.DIRECTORIES).length; i++) { 802 var file = newFileData.DIRECTORIES[i]; 803 var node = { 804 id : file.id, 805 name : file.name, 806 parentID : file.parentID, 807 minetype : file.minetype 808 }; 809 o.oTree.createNode(node); 810 o.oGrid.createNode(node); 811 o.data.DIRECTORIES.push(node); 812 } 813 814 self.refreshStatusBar(); } 815 } 816 817 }); 818 819 $(document).on('drop dragover', 820 function(e) { 821 e.preventDefault(); 822 }); 823 824 function formatFileSize(bytes) { 825 if (typeof bytes !== 'number') { 826 return ''; 827 } 828 829 if (bytes >= 1000000000) { 830 return (bytes / 1000000000) 831 .toFixed(2) 832 + ' GB'; 833 } 834 835 if (bytes >= 1000000) { 836 return (bytes / 1000000).toFixed(2) 837 + ' MB'; 838 } 839 840 return (bytes / 1000).toFixed(2) 841 + ' KB'; 842 } 843 844 }; 845 846 var createFolder = function(parent, name) { 847 var postdata = { 848 fname : name, 849 fparentid : parent 850 }; 851 var script = 'createdir'; 852 /* isDev = true; */ 853 sendCommand({ 854 postdata : postdata, 855 script : script, 856 callbackSuccess : function(parseData) { 857 createFolderFinish(parseData); 858 }, 859 callbackFail : function() { 860 } 861 }); 862 } 863 864 var createFolderFinish = function(parseData) { 865 /* isDev = false; */ 866 if (parseData.ERROR.errCode == 0) { 867 var node = { 868 id : parseData.id, 869 name : parseData.name, 870 parentID : parseData.parentID 871 }; 872 o.oTree.createNode(node); 873 o.data.DIRECTORIES.push(node); 874 if (o.oGrid) 875 o.oGrid.reloadGrid(); 876 } 877 } 878 /*********************************************** 879 * CREATE FOLDER - END * 880 **********************************************/ 881 /*********************************************** 882 * COPY & PASTE & MOVE - START * =*********** 883 **********************************************/ 884 var copy = function(act) { 885 // detect selected items 886 // push to clipboard 887 var items = o.oGrid.getHighLightItem(); 888 889 if ($(items).length == 0) { 890 var node = o.oTree.getSelectedNode(); 891 var itemID = $(node).attr('id'); 892 893 if (itemID == 0) 894 return false; 895 896 items[0] = o.data.DIRECTORIES[searchItemByID( 897 itemID, 'directory')]; 898 items[0].type = 'directory'; 899 } 900 901 if ($(items).length > 0) { 902 oClipBoard.items = items; 903 oClipBoard.act = act; 904 } 905 return true; 906 } 907 908 var paste = function() { 909 if ((oClipBoard.act != 'copy' && oClipBoard.act != 'move') 910 || oClipBoard.items == null) 911 return; 912 913 var items = []; 914 915 var destination = self.getTreeCurrentNode(); 916 if (oClipBoard.act != 'copy') { 917 $(oClipBoard.items).each( 918 function(index) { 919 var node = new Object; 920 if (this.type == 'directory') 921 buildTreeFromParent(this.id, node); 922 else { 923 node.id = this.id; 924 node.type = 'file'; 925 } 926 927 items[index] = node; 928 }); 929 } else { 930 items = oClipBoard.items; 931 } 932 933 for ( var i = 0; i < items.length; i++) { 934 if (items[i].type == 'directory') { 935 items[i] = self.getAllDirChilds(items[i]); 936 } 937 } 938 939 var postdata = { 940 act : oClipBoard.act, 941 destination : destination, 942 data : JSON.stringify(items) 943 }; 944 var script = oClipBoard.act; 945 946 sendCommand({ 947 postdata : postdata, 948 script : script, 949 callbackSuccess : function(parseData) { 950 if (oClipBoard.act == 'copy') { 951 $(parseData.DIRECTORIES).each( 952 function(index) { 953 o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = this; 954 }); 955 956 $(parseData.FILES).each( 957 function(index) { 958 o.data.FILES[$(o.data.FILES).length] = this; 959 }); 960 961 o.data.DIRECTORIES.sort(function(a, b) { 962 return a.parentID - b.parentID; 963 }); 964 965 o.oTree.setData(o.data.DIRECTORIES); 966 o.oGrid.setData(o.data); 967 o.oTree.createCopyNode(parseData.DIRECTORIES); 968 o.oGrid.reloadGrid(); 969 } else if (oClipBoard.act == 'move') { 970 971 } 972 973 oClipBoard.act == ''; 974 oClipBoard.items = null; 975 } 976 }); 977 } 978 979 var move = function() { 980 981 } 982 983 var copyTo = function() { 984 985 } 986 987 var moveTo = function() { 988 989 } 990 991 /*********************************************** 992 * COPY & PASTE & MOVE - END * 993 **********************************************/ 994 995 this.deleteItem = function(item) { 996 997 var confirmText = 'Bạn có muá»n xóa '; 998 999 if ($.isArray(item) && item.length > 1) { 1000 confirmText += 'các thư mục (và files) Äã chá»n?'; 1001 } else if (item.length == 1) { 1002 if (item[0].id == 0) 1003 return false; 1004 confirmText += (item[0].type == 'directory') ? 'thư mục' 1005 : 'file'; 1006 confirmText += ' <span style="font-weight:bold">' 1007 + item[0].name 1008 + "</span> khÃŽng?"; 1009 } 1010 1011 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>'; 1012 1013 var parentID = item[0].parentID; 1014 1015 for ( var i = 0; i < item.length; i++) { 1016 if (item[i].type == 'directory') { 1017 item[i] = self.getAllDirChilds(item[i]); 1018 } 1019 } 1020 1021 var confirmOptions = { 1022 message : confirmText, 1023 buttons : { 1024 confirm : { 1025 label : "Xóa" 1026 }, 1027 cancel : { 1028 label : "KhÃŽng xóa" 1029 } 1030 }, 1031 callback : function(result) { 1032 if (result) { 1033 var delobj = JSON 1034 .stringify(item); 1035 var postdata = { 1036 delobj : delobj 1037 }; 1038 var script = 'delete'; 1039 sendCommand({ 1040 postdata : postdata, 1041 script : script, 1042 callbackSuccess : function( 1043 parseData) { 1044 if ($(parseData.DIRECTORIES).length > 0) { 1045 $(parseData.DIRECTORIES).each( 1046 function(index) { 1047 o.oTree.deletion(this); 1048 o.oGrid.deletion(this,'directory'); 1049 }); 1050 } 1051 1052 if ($(parseData.FILES).length > 0) { 1053 $(parseData.FILES).each( 1054 function(index) { 1055 var file = o.data.FILES[searchItemByID(this,'file')]; 1056 o.oGrid.deletion(this,file.minetype); 1057 }); 1058 } 1059 }, 1060 callbackDone : function(obj) { 1061 if ($(parseData.DIRECTORIES).length > 0) { 1062 $(parseData.DIRECTORIES).each( 1063 function(index) { 1064 o.data.DIRECTORIES.splice(searchItemByID(this,'directory'), 1); 1065 }); 1066 } 1067 1068 if ($(parseData.FILES).length > 0) { 1069 $(parseData.FILES).each( 1070 function(index) { 1071 o.data.FILES.splice(searchItemByID(this,'file'), 1); 1072 }); 1073 } 1074 1075 o.oTree.setData(o.data.DIRECTORIES); 1076 o.oGrid.setData(o.data); 1077 self.setTreeCurrentNode(parentID); 1078 o.oGrid.reloadGrid(); 1079 self.refreshStatusBar(); 1080 }, 1081 callbackFail : function() { 1082 } 1083 }); 1084 } 1085 } 1086 }; 1087 1088 bootbox.confirm(confirmOptions); 1089 } 1090 1091 this.getAllDirChilds = function(oDirItem) { 1092 var aryChildDirTmp = []; 1093 var aryChildDirID = []; 1094 var aryChildFiles = searchItemsByParent( 1095 oDirItem.id, 'file'); 1096 var aryChildDirs = []; 1097 1098 getAllDirChild(oDirItem.id, aryChildDirTmp); 1099 for ( var d = 1; d < aryChildDirTmp.length; d++) { 1100 aryChildDirID[d - 1] = aryChildDirTmp[d]; 1101 } 1102 1103 for ( var j = 0; j < aryChildDirID.length; j++) { 1104 if (o.data.DIRECTORIES[searchItemByID( 1105 aryChildDirID[j], 'directory')] != undefined) 1106 aryChildDirs[aryChildDirs.length] = o.data.DIRECTORIES[searchItemByID( 1107 aryChildDirID[j], 1108 'directory')]; 1109 1110 var aryTmp = searchItemsByParent( 1111 aryChildDirID[j], 'file'); 1112 if (aryTmp.length > 0) 1113 for ( var f in aryTmp) { 1114 aryChildFiles[aryChildFiles.length] = aryTmp[f]; 1115 } 1116 } 1117 1118 oDirItem.childDirs = aryChildDirs; 1119 oDirItem.childFiles = aryChildFiles; 1120 return oDirItem; 1121 } 1122 1123 this.setTreeCurrentNode = function(treeNode) { 1124 // fire when click a node on Tree 1125 // then fire action of Grid 1126 treeCurrentNode = treeNode; 1127 if (o.oGrid) 1128 o.oGrid.reloadGrid(); 1129 }; 1130 1131 this.getTreeCurrentNode = function() { 1132 return treeCurrentNode; 1133 } 1134 1135 this.gridNodeDblClick = function(node) { 1136 if (node.minetype == 'directory') { 1137 var treeNode = $('#' + o.tree) 1138 .find( 1139 'UL.vstree[rel^="node' 1140 + node.parentID 1141 + '"] > LI[rel^="folder"] > A#' 1142 + node.id); 1143 o.oTree.activeNode(treeNode); 1144 } else { 1145 // execute or preview file 1146 previewFile(node); 1147 } 1148 }; 1149 1150 this.createNewFolder = function() { 1151 1152 } 1153 1154 this.updateData = function(p) { 1155 if (p.item == undefined) 1156 p.item = null; 1157 if (p.updateAll == undefined) 1158 p.updateAll = false; 1159 if (p.from == undefined) 1160 p.from = null; 1161 if (p.type == undefined) 1162 p.type = null; 1163 if (p.callback == undefined) 1164 p.callback = null; 1165 1166 var obj = p.from == 'tree' ? o.oGrid 1167 : o.oTree; 1168 if (!p.updateAll) { 1169 var index = searchItemByID(p.item.id, 1170 p.type); 1171 switch (p.type) { 1172 case 'directory': 1173 o.data.DIRECTORIES[index].name = p.item.name; 1174 o.data.DIRECTORIES[index].parentID = p.item.parentID; 1175 break; 1176 case 'file': 1177 o.data.FILES[index].name = p.item.name; 1178 o.data.FILES[index].parentID = p.item.parentID; 1179 o.data.FILES[index].minetype = p.item.minetype; 1180 o.data.FILES[index].fileurl = p.item.fileurl; 1181 break; 1182 default: 1183 break; 1184 } 1185 } 1186 1187 o.oTree.setData(o.data.DIRECTORIES); 1188 o.oGrid.setData(o.data); 1189 1190 if (p.callback != null) { 1191 eval('obj.' + p.callback + '(p.item);') 1192 } 1193 1194 // call sendCommand 1195 } 1196 1197 this.searchItemsByParent = function(parentID, 1198 type) { 1199 return searchItemsByParent(parentID, type); 1200 } 1201 1202 this.searchItemByID = function(id, type) { 1203 return searchItemByID(id, type); 1204 } 1205 1206 this.refreshStatusBar = function() { 1207 var totalSize = 0; 1208 var message = ''; 1209 if (o.data.FILES.length > 0) { 1210 for ( var i = 0; i < o.data.FILES.length; i++) { 1211 totalSize += parseInt(o.data.FILES[i].size); 1212 } 1213 } 1214 1215 message = '<span>Tá»ng dung lượng Äã sá» dụng: <strong>' 1216 + self.formatFileSize(totalSize) 1217 + '</strong></span>'; 1218 1219 var items = o.oGrid.getHighLightItem(); 1220 if (items.length == 0) { 1221 var id = $(o.oTree.getSelectedNode()).attr('id'); 1222 var item = o.data.DIRECTORIES[self.searchItemByID(id, 'directory')]; 1223 } 1224 if (items.length == 1) { 1225 if ((typeof items[0].minetype !== 'undefined')) { 1226 message += '<span>Tá»p: <strong>' 1227 + items[0].name 1228 + '</strong></span>'; 1229 message += '<span> - Dung lượng: <strong>' 1230 + self 1231 .formatFileSize(items[0].size) 1232 + '</strong></span>'; 1233 } else { 1234 message += '<span>Thư mục: <strong>' 1235 + items[0].name 1236 + '</strong></span>'; 1237 } 1238 } else if (items.length > 1) { 1239 var selectedSize = 0; 1240 for ( var i = 0; i < items.length; i++) { 1241 selectedSize += (typeof items[i].minetype !== 'undefined') ? parseInt(items[i].size) 1242 : 0; 1243 } 1244 message += '<span><strong>' 1245 + items.length 1246 + ' tá»p (thư mục)</strong> ÄÆ°á»£c chá»n</span>'; 1247 message += '<span> - Dung lượng: <strong>' 1248 + self 1249 .formatFileSize(selectedSize) 1250 + '</strong></span>'; 1251 } 1252 1253 $(statusbar).html(message); 1254 } 1255 1256 this.redirectPost = function(location, args) { 1257 var form = ''; 1258 $.each(args, function(key, value) { 1259 form += '<input type="hidden" name="' 1260 + key + '" value="' + value 1261 + '">'; 1262 }); 1263 $( 1264 '<form action="' + location 1265 + '" method="POST">' + form 1266 + '</form>').appendTo( 1267 'body').submit(); 1268 } 1269 1270 this.formatFileSize = function(size) { 1271 var i; 1272 i = Math.floor(Math.log(size) 1273 / Math.log(1024)); 1274 if ((size === 0) || (parseInt(size) === 0)) { 1275 return "0 kB"; 1276 } else if (isNaN(i) 1277 || (!isFinite(size)) 1278 || (size === Number.POSITIVE_INFINITY) 1279 || (size === Number.NEGATIVE_INFINITY) 1280 || (size == null) || (size < 0)) { 1281 console.info("Throwing error"); 1282 throw Error("" 1283 + size 1284 + " did not compute to a valid number to be humanized."); 1285 } else { 1286 return (size / Math.pow(1024, i)) 1287 .toFixed(2) 1288 * 1 1289 + " " 1290 + [ "B", "KB", "MB", "GB", 1291 "TB", "PB", "EB", "ZB", 1292 "YB" ][i]; 1293 } 1294 } 1295 1296 this.initialize = function() { 1297 init(); 1298 return this; 1299 }; 1300 1301 return this.initialize(); 1302 } 1303 1304 }); 1305 })(jQuery); 663 + node.name; 664 bootbox.alert(content); 665 } 666 667 if ($.inArray($ext, ["ppt", "xls", "doc", 668 "pdf", "docx", "pptx", "xlsx"]) >= 0) { 669 670 $.ajax({ 671 url: o.host 672 + "preview/getFilePreview/" 673 + node.id, 674 type: "POST", 675 data: {}, 676 success: function (data, 677 textStatus, jqXHR) { 678 bootbox.alert(data); 679 }, 680 error: function (jqXHR, textStatus, 681 errorThrown) { 682 683 } 684 }); 685 } 686 if ($.inArray($ext, ["xvl"]) >= 0) { 687 var url = o.host.replace("ajax/", ""); 688 var redirect = url 689 + 'frontend/lecture/'; 690 self.redirectPost(redirect, { 691 fileid: node.id 692 }); 693 } 694 $(".bootbox").addClass("preview"); 695 } 696 697 var uploadInit = function () { 698 var ul = $('#upload ul'); 699 700 $('#drop a').click(function () { 701 $(this).parent().find('input').click(); 702 }); 703 704 $('#upload').fileupload( 705 { 706 dropZone: $('#drop'), 707 add: function (e, data) { 708 709 var tpl = $('<li class="working"><input type="text" value="0" data-width="48" data-height="48"' 710 + ' data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /><p></p><span></span></li>'); 711 tpl 712 .find('p') 713 .text( 714 data.files[0].name) 715 .append( 716 '<i>' 717 + formatFileSize(data.files[0].size) 718 + '</i>'); 719 data.context = tpl 720 .appendTo(ul); 721 tpl.find('input') 722 .knob(); 723 tpl 724 .find( 725 'span') 726 .click( 727 function () { 728 729 if (tpl 730 .hasClass('working')) { 731 jqXHR 732 .abort(); 733 } 734 735 tpl 736 .fadeOut(function () { 737 tpl 738 .remove(); 739 }); 740 741 }); 742 743 var jqXHR = data 744 .submit(); 745 }, 746 progress: function (e, 747 data) { 748 749 // Calculate the 750 // completion 751 // percentage of the 752 // upload 753 var progress = parseInt( 754 data.loaded 755 / data.total 756 * 100, 757 10); 758 759 // Update the hidden 760 // input field and 761 // trigger a change 762 // so that the 763 // jQuery knob 764 // plugin knows to 765 // update the dial 766 data.context 767 .find( 768 'input') 769 .val( 770 progress) 771 .change(); 772 773 if (progress == 100) { 774 data.context 775 .removeClass('working'); 776 777 } 778 }, 779 fail: function (e, data) { 780 // Something has 781 // gone wrong! 782 data.context 783 .addClass('error'); 784 }, 785 done: function (e, data) { 786 787 var newFileData = data.result; 788 newFileData = $.parseJSON(data.result); 789 if (newFileData.ERROR.errCode == 0) { 790 for (var i = 0; i < $(newFileData.FILES).length; i++) { 791 var file = newFileData.FILES[i]; 792 var node = { 793 thumbnail: file.thumbnail, 794 id: file.id, 795 name: file.name, 796 fileurl: file.fileurl, 797 parentID: file.parentID, 798 minetype: file.minetype, 799 size: file.size 800 }; 801 o.oGrid.createNode(node); 802 o.data.FILES.push(node); 803 } 804 805 for (var i = 0; i < $(newFileData.DIRECTORIES).length; i++) { 806 var file = newFileData.DIRECTORIES[i]; 807 var node = { 808 id: file.id, 809 name: file.name, 810 parentID: file.parentID, 811 minetype: file.minetype 812 }; 813 o.oTree.createNode(node); 814 o.oGrid.createNode(node); 815 o.data.DIRECTORIES.push(node); 816 } 817 818 self.refreshStatusBar(); 819 } 820 } 821 822 }); 823 824 $(document).on('drop dragover', 825 function (e) { 826 e.preventDefault(); 827 }); 828 829 function formatFileSize(bytes) { 830 if (typeof bytes !== 'number') { 831 return ''; 832 } 833 834 if (bytes >= 1000000000) { 835 return (bytes / 1000000000) 836 .toFixed(2) 837 + ' GB'; 838 } 839 840 if (bytes >= 1000000) { 841 return (bytes / 1000000).toFixed(2) 842 + ' MB'; 843 } 844 845 return (bytes / 1000).toFixed(2) 846 + ' KB'; 847 } 848 849 }; 850 851 var createFolder = function (parent, name) { 852 var postdata = { 853 fname: name, 854 fparentid: parent 855 }; 856 var script = 'createdir'; 857 /* isDev = true; */ 858 sendCommand({ 859 postdata: postdata, 860 script: script, 861 callbackSuccess: function (parseData) { 862 createFolderFinish(parseData); 863 }, 864 callbackFail: function () { 865 } 866 }); 867 } 868 869 var createFolderFinish = function (parseData) { 870 /* isDev = false; */ 871 if (parseData.ERROR.errCode == 0) { 872 var node = { 873 id: parseData.id, 874 name: parseData.name, 875 parentID: parseData.parentID 876 }; 877 o.oTree.createNode(node); 878 o.data.DIRECTORIES.push(node); 879 if (o.oGrid) 880 o.oGrid.reloadGrid(); 881 } 882 } 883 /*********************************************** 884 * CREATE FOLDER - END * 885 **********************************************/ 886 /*********************************************** 887 * COPY & PASTE & MOVE - START * =*********** 888 **********************************************/ 889 var copy = function (act) { 890 // detect selected items 891 // push to clipboard 892 var items = o.oGrid.getHighLightItem(); 893 894 if ($(items).length == 0) { 895 var node = o.oTree.getSelectedNode(); 896 var itemID = $(node).attr('id'); 897 898 if (itemID == 0) 899 return false; 900 901 items[0] = o.data.DIRECTORIES[searchItemByID( 902 itemID, 'directory')]; 903 items[0].type = 'directory'; 904 } 905 906 if ($(items).length > 0) { 907 oClipBoard.items = items; 908 oClipBoard.act = act; 909 } 910 return true; 911 } 912 913 var paste = function () { 914 if ((oClipBoard.act != 'copy' && oClipBoard.act != 'move') 915 || oClipBoard.items == null) 916 return; 917 918 var items = []; 919 920 var destination = self.getTreeCurrentNode(); 921 if (oClipBoard.act != 'copy') { 922 $(oClipBoard.items).each( 923 function (index) { 924 var node = new Object; 925 if (this.type == 'directory') 926 buildTreeFromParent(this.id, node); 927 else { 928 node.id = this.id; 929 node.type = 'file'; 930 } 931 932 items[index] = node; 933 }); 934 } else { 935 items = oClipBoard.items; 936 } 937 938 for (var i = 0; i < items.length; i++) { 939 if (items[i].type == 'directory') { 940 items[i] = self.getAllDirChilds(items[i]); 941 } 942 } 943 944 var postdata = { 945 act: oClipBoard.act, 946 destination: destination, 947 data: JSON.stringify(items) 948 }; 949 var script = oClipBoard.act; 950 951 sendCommand({ 952 postdata: postdata, 953 script: script, 954 callbackSuccess: function (parseData) { 955 if (oClipBoard.act == 'copy') { 956 $(parseData.DIRECTORIES).each( 957 function (index) { 958 o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = this; 959 }); 960 961 $(parseData.FILES).each( 962 function (index) { 963 o.data.FILES[$(o.data.FILES).length] = this; 964 }); 965 966 o.data.DIRECTORIES.sort(function (a, b) { 967 return a.parentID - b.parentID; 968 }); 969 970 o.oTree.setData(o.data.DIRECTORIES); 971 o.oGrid.setData(o.data); 972 o.oTree.createCopyNode(parseData.DIRECTORIES); 973 o.oGrid.reloadGrid(); 974 } else if (oClipBoard.act == 'move') { 975 976 } 977 978 oClipBoard.act == ''; 979 oClipBoard.items = null; 980 } 981 }); 982 } 983 984 var move = function () { 985 986 } 987 988 var copyTo = function () { 989 990 } 991 992 var moveTo = function () { 993 994 } 995 996 /*********************************************** 997 * COPY & PASTE & MOVE - END * 998 **********************************************/ 999 1000 this.deleteItem = function (item) { 1001 1002 var confirmText = 'Bạn có muá»n xóa '; 1003 1004 if ($.isArray(item) && item.length > 1) { 1005 confirmText += 'các thư mục (và files) Äã chá»n?'; 1006 } else if (item.length == 1) { 1007 if (item[0].id == 0) 1008 return false; 1009 confirmText += (item[0].type == 'directory') ? 'thư mục' 1010 : 'file'; 1011 confirmText += ' <span style="font-weight:bold">' 1012 + item[0].name 1013 + "</span> khÃŽng?"; 1014 } 1015 1016 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>'; 1017 1018 var parentID = item[0].parentID; 1019 1020 for (var i = 0; i < item.length; i++) { 1021 if (item[i].type == 'directory') { 1022 item[i] = self.getAllDirChilds(item[i]); 1023 } 1024 } 1025 1026 var confirmOptions = { 1027 message: confirmText, 1028 buttons: { 1029 confirm: { 1030 label: "Xóa" 1031 }, 1032 cancel: { 1033 label: "KhÃŽng xóa" 1034 } 1035 }, 1036 callback: function (result) { 1037 if (result) { 1038 var delobj = JSON 1039 .stringify(item); 1040 var postdata = { 1041 delobj: delobj 1042 }; 1043 var script = 'delete'; 1044 sendCommand({ 1045 postdata: postdata, 1046 script: script, 1047 callbackSuccess: function ( 1048 parseData) { 1049 if ($(parseData.DIRECTORIES).length > 0) { 1050 $(parseData.DIRECTORIES).each( 1051 function (index) { 1052 o.oTree.deletion(this); 1053 o.oGrid.deletion(this, 'directory'); 1054 }); 1055 } 1056 1057 if ($(parseData.FILES).length > 0) { 1058 $(parseData.FILES).each( 1059 function (index) { 1060 var file = o.data.FILES[searchItemByID(this, 'file')]; 1061 o.oGrid.deletion(this, file.minetype); 1062 }); 1063 } 1064 }, 1065 callbackDone: function (obj) { 1066 if ($(parseData.DIRECTORIES).length > 0) { 1067 $(parseData.DIRECTORIES).each( 1068 function (index) { 1069 o.data.DIRECTORIES.splice(searchItemByID(this, 'directory'), 1); 1070 }); 1071 } 1072 1073 if ($(parseData.FILES).length > 0) { 1074 $(parseData.FILES).each( 1075 function (index) { 1076 o.data.FILES.splice(searchItemByID(this, 'file'), 1); 1077 }); 1078 } 1079 1080 o.oTree.setData(o.data.DIRECTORIES); 1081 o.oGrid.setData(o.data); 1082 self.setTreeCurrentNode(parentID); 1083 o.oGrid.reloadGrid(); 1084 self.refreshStatusBar(); 1085 }, 1086 callbackFail: function () { 1087 } 1088 }); 1089 } 1090 } 1091 }; 1092 1093 bootbox.confirm(confirmOptions); 1094 } 1095 1096 this.getAllDirChilds = function (oDirItem) { 1097 var aryChildDirTmp = []; 1098 var aryChildDirID = []; 1099 var aryChildFiles = searchItemsByParent( 1100 oDirItem.id, 'file'); 1101 var aryChildDirs = []; 1102 1103 getAllDirChild(oDirItem.id, aryChildDirTmp); 1104 for (var d = 1; d < aryChildDirTmp.length; d++) { 1105 aryChildDirID[d - 1] = aryChildDirTmp[d]; 1106 } 1107 1108 for (var j = 0; j < aryChildDirID.length; j++) { 1109 if (o.data.DIRECTORIES[searchItemByID( 1110 aryChildDirID[j], 'directory')] != undefined) 1111 aryChildDirs[aryChildDirs.length] = o.data.DIRECTORIES[searchItemByID( 1112 aryChildDirID[j], 1113 'directory')]; 1114 1115 var aryTmp = searchItemsByParent( 1116 aryChildDirID[j], 'file'); 1117 if (aryTmp.length > 0) 1118 for (var f in aryTmp) { 1119 aryChildFiles[aryChildFiles.length] = aryTmp[f]; 1120 } 1121 } 1122 1123 oDirItem.childDirs = aryChildDirs; 1124 oDirItem.childFiles = aryChildFiles; 1125 return oDirItem; 1126 } 1127 1128 this.setTreeCurrentNode = function (treeNode) { 1129 // fire when click a node on Tree 1130 // then fire action of Grid 1131 treeCurrentNode = treeNode; 1132 if (o.oGrid) 1133 o.oGrid.reloadGrid(); 1134 }; 1135 1136 this.getTreeCurrentNode = function () { 1137 return treeCurrentNode; 1138 } 1139 1140 this.gridNodeDblClick = function (node) { 1141 if (node.minetype == 'directory') { 1142 var treeNode = $('#' + o.tree) 1143 .find( 1144 'UL.vstree[rel^="node' 1145 + node.parentID 1146 + '"] > LI[rel^="folder"] > A#' 1147 + node.id); 1148 o.oTree.activeNode(treeNode); 1149 } else { 1150 // execute or preview file 1151 previewFile(node); 1152 } 1153 }; 1154 1155 this.createNewFolder = function () { 1156 1157 } 1158 1159 this.updateData = function (p) { 1160 if (p.item == undefined) 1161 p.item = null; 1162 if (p.updateAll == undefined) 1163 p.updateAll = false; 1164 if (p.from == undefined) 1165 p.from = null; 1166 if (p.type == undefined) 1167 p.type = null; 1168 if (p.callback == undefined) 1169 p.callback = null; 1170 1171 var obj = p.from == 'tree' ? o.oGrid 1172 : o.oTree; 1173 if (!p.updateAll) { 1174 var index = searchItemByID(p.item.id, 1175 p.type); 1176 switch (p.type) { 1177 case 'directory': 1178 o.data.DIRECTORIES[index].name = p.item.name; 1179 o.data.DIRECTORIES[index].parentID = p.item.parentID; 1180 break; 1181 case 'file': 1182 o.data.FILES[index].name = p.item.name; 1183 o.data.FILES[index].parentID = p.item.parentID; 1184 o.data.FILES[index].minetype = p.item.minetype; 1185 o.data.FILES[index].fileurl = p.item.fileurl; 1186 break; 1187 default: 1188 break; 1189 } 1190 } 1191 1192 o.oTree.setData(o.data.DIRECTORIES); 1193 o.oGrid.setData(o.data); 1194 1195 if (p.callback != null) { 1196 eval('obj.' + p.callback + '(p.item);') 1197 } 1198 1199 // call sendCommand 1200 } 1201 1202 this.searchItemsByParent = function (parentID, 1203 type) { 1204 return searchItemsByParent(parentID, type); 1205 } 1206 1207 this.searchItemByID = function (id, type) { 1208 return searchItemByID(id, type); 1209 } 1210 1211 this.refreshStatusBar = function () { 1212 var totalSize = 0; 1213 var message = ''; 1214 if (o.data.FILES.length > 0) { 1215 for (var i = 0; i < o.data.FILES.length; i++) { 1216 totalSize += parseInt(o.data.FILES[i].size); 1217 } 1218 } 1219 1220 message = '<span>Tá»ng dung lượng Äã sá» dụng: <strong>' 1221 + self.formatFileSize(totalSize) 1222 + '</strong></span>'; 1223 1224 var items = o.oGrid.getHighLightItem(); 1225 if (items.length == 0) { 1226 var id = $(o.oTree.getSelectedNode()).attr('id'); 1227 var item = o.data.DIRECTORIES[self.searchItemByID(id, 'directory')]; 1228 } 1229 if (items.length == 1) { 1230 if ((typeof items[0].minetype !== 'undefined')) { 1231 message += '<span>Tá»p: <strong>' 1232 + items[0].name 1233 + '</strong></span>'; 1234 message += '<span> - Dung lượng: <strong>' 1235 + self 1236 .formatFileSize(items[0].size) 1237 + '</strong></span>'; 1238 } else { 1239 message += '<span>Thư mục: <strong>' 1240 + items[0].name 1241 + '</strong></span>'; 1242 } 1243 } else if (items.length > 1) { 1244 var selectedSize = 0; 1245 for (var i = 0; i < items.length; i++) { 1246 selectedSize += (typeof items[i].minetype !== 'undefined') ? parseInt(items[i].size) 1247 : 0; 1248 } 1249 message += '<span><strong>' 1250 + items.length 1251 + ' tá»p (thư mục)</strong> ÄÆ°á»£c chá»n</span>'; 1252 message += '<span> - Dung lượng: <strong>' 1253 + self 1254 .formatFileSize(selectedSize) 1255 + '</strong></span>'; 1256 } 1257 1258 $(statusbar).html(message); 1259 } 1260 1261 this.redirectPost = function (location, args) { 1262 var form = ''; 1263 $.each(args, function (key, value) { 1264 alert (value); 1265 form += "<input type='hidden' name='" 1266 + key + "' value='" + value 1267 + "'>"; 1268 }); 1269 $( 1270 '<form action="' + location 1271 + '" method="POST">' + form 1272 + '</form>').appendTo( 1273 'body').submit(); 1274 } 1275 1276 this.formatFileSize = function (size) { 1277 var i; 1278 i = Math.floor(Math.log(size) 1279 / Math.log(1024)); 1280 if ((size === 0) || (parseInt(size) === 0)) { 1281 return "0 kB"; 1282 } else if (isNaN(i) 1283 || (!isFinite(size)) 1284 || (size === Number.POSITIVE_INFINITY) 1285 || (size === Number.NEGATIVE_INFINITY) 1286 || (size == null) || (size < 0)) { 1287 console.info("Throwing error"); 1288 throw Error("" 1289 + size 1290 + " did not compute to a valid number to be humanized."); 1291 } else { 1292 return (size / Math.pow(1024, i)) 1293 .toFixed(2) 1294 * 1 1295 + " " 1296 + ["B", "KB", "MB", "GB", 1297 "TB", "PB", "EB", "ZB", 1298 "YB"][i]; 1299 } 1300 } 1301 1302 this.initialize = function () { 1303 init(); 1304 return this; 1305 }; 1306 1307 return this.initialize(); 1308 } 1309 1310 }); 1311 })(jQuery);
Note: See TracChangeset
for help on using the changeset viewer.