source: pro-violet-viettel/www/deploy/20150304/assets/js/manager.js @ 842

Last change on this file since 842 was 842, checked in by dungnv, 10 years ago
File size: 46.6 KB
Line 
1if (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
21                if (o.oTree == undefined)
22                    o.oTree = null;
23                if (o.oGrid == undefined)
24                    o.oGrid = null;
25                if (o.host == undefined)
26                    o.host = 'http://localhost/';
27                if (o.hostmodule == undefined)
28                    o.hostmodule = 'privatecontent/';
29                if (o.script == undefined)
30                    o.script = 'getcontent';
31                if (o.data == undefined)
32                    o.data = null;
33                if (o.datasource == undefined)
34                    o.datasource = 'ajax';
35               
36                if (o.filehosting == undefined)
37                        o.filehosting = 'http://sbgapi.violet.vn/';
38               
39                if (o.invisibledButtons == undefined)
40                        o.invisibledButtons = null;
41
42                o.host = o.host + 'ajax/';
43
44                var isDev = false;
45                var contextmenu = null;
46                var oContainer = this;
47                var tree = [];
48                var totalItem = 0;
49                var countItem = 0;
50                var maxWidth = 0;
51                var treeCurrentNode = null;
52                var self = this;
53                var oClipBoard = {items: null, act: null};
54
55                /**
56                 * Toolbar defined
57                 * */
58                var btnNewFolder = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnNewFolder');
59                var btnDel = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnDel');
60                var btnCopy = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnCopy');
61                var btnCut = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnCut');
62                var btnPaste = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnPaste');
63                var btnShare = $('#' + o.toolsbar + ' > DIV.btn-group.social > #btnShare');
64                var btnPreview = $('#' + o.toolsbar + ' > DIV.btn-group.social > #btnPreview');
65                var btnDownload = $('#' + o.toolsbar + ' > DIV.btn-group.creation > #btnDownload');
66                var btnUpload = $('#' + o.toolsbar + ' > DIV.btn-group.creation > #btnUpload');
67                var btnRefresh = $('#' + o.toolsbar + ' > DIV.btn-group.control > #btnRefresh');
68
69                var toolbarButtons = [btnNewFolder, btnDel, btnCopy, btnCut, btnPaste, btnShare, btnPreview, btnDownload, btnUpload, btnRefresh];
70                var statusbar = $('DIV#' + o.statusbar);
71               
72                var sendCommand = function (p) {
73                    if (p.postdata == undefined)
74                        p.postdata = null;
75                    if (p.script == undefined)
76                        p.script = o.script;
77                    if (p.callbackSuccess == undefined)
78                        p.callbackSuccess = null;
79                    if (p.callbackDone == undefined)
80                        p.callbackDone = null;
81                    if (p.callbackFail == undefined)
82                        p.callbackFail = null;
83                    if (p.callbackAlways == undefined)
84                        p.callbackAlways = null;
85                    if (p.parseData == undefined)
86                        p.parseData = null;
87                    if (p.self == undefined)
88                        p.self = this;
89
90                    if (p.script != null && (o.datasource == 'ajax' || isDev)) {
91                        $.post(o.host + o.hostmodule + p.script, p.postdata, function (data) {
92                            if (data) {
93                                parseData = $.parseJSON(data);
94                                p.parseData = parseData;
95                            }
96
97                            if (p.callbackSuccess != null) {
98                                if (parseInt(parseData.ERROR.errCode) === 0)
99                                    p.callbackSuccess(parseData);
100                                else {
101                                    p.callbackFail(parseData.ERROR);
102                                }
103                            }
104
105                        }).done(function () {
106                            if (p.callbackDone != null)
107                                p.callbackDone(p.parseData);
108                        }).fail(function () {
109                            if (p.callbackFail != null)
110                                p.callbackFail(this);
111                        }).always(function () {
112                            if (p.callbackAlways != null)
113                                p.callbackAlways(this);
114                        });
115                    }
116                    else if (o.datasource == 'json') {
117                        if (p.callbackSuccess != null)
118                            p.callbackSuccess(o.data);
119                        if (p.callbackDone != null)
120                            p.callbackDone(this);
121                    }
122
123                };
124
125                var getDirTreeMaxWidth = function () {
126                    var scrWidth = $(o.maincontainer).width();
127                    return parseInt(scrWidth / 2);
128                }
129
130                var layoutRender = function () {
131                    var scrWidth = $('#' + o.maincontainer).width();
132                    var scrHeght = $(window).innerHeight();
133                    var dirTreeHeight = scrHeght - $('#' + o.titlebar).height() - $('#' + o.toolsbar).height() - $('#' + o.statusbar).height() -5;
134                    $('#' + o.tree).parent().height(dirTreeHeight);
135                    $('#' + o.grid).parent().height(dirTreeHeight);
136                    $('#' + o.grid).parent().width('calc(100% - ' + ($('#' + o.tree).parent().width() + 8) + 'px)');
137                    var scollWidth = $('#' + o.grid).parent().width();
138                    maxWidth = getDirTreeMaxWidth();
139                    $(o.tree).height(dirTreeHeight - 5);
140                   
141                    if (o.invisibledButtons != null) {
142                        for (var i = 0; i < o.invisibledButtons.length; i++) {
143                                $('#' + o.invisibledButtons[i]).hide();
144                        }
145                    }
146                }
147
148                var createFileManager = function (parseData) {
149                    o.data = parseData;
150                    totalItem = o.data.DIRECTORIES.length;
151                    o.oTree = $('#' + o.tree).violetTree({data: o.data.DIRECTORIES, manager: oContainer});
152                    o.oGrid = $('#' + o.grid).violetGrid({data: o.data, manager: oContainer});
153                    self.refreshStatusBar();
154                };
155
156                var getAllDirChild = function (parentID, aryChild) {
157                    parentID = parentID == null ? 0 : parentID;
158                    var dirList = searchItemsByParent(parentID, 'directory');
159                    var index = aryChild.length;
160                    aryChild[index] = parentID;
161                    if (dirList.length > 0) {
162                        for (var i = 0; i < dirList.length; i++) {
163                            getAllDirChild(dirList[i].id, aryChild);
164                        }
165                    }
166                }
167
168                var buildTreeFromParent = function (dirID, node) {
169                    var aryChildFiles = [];
170                    var aryChildDirs = [];
171                    var aryChildIDs = [];
172                    var aryTmp = [];
173                    var dir = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')];
174                    aryChildDirs = searchItemsByParent(dirID, 'directory');
175                    aryChildFiles = searchItemsByParent(dirID, 'file');
176
177                    node.id = dir.id;
178                    node.name = dir.name;
179                    node.type = 'directory';
180
181                    $(aryChildDirs).each(function (index) {
182                        var id = this.id;
183                        var name = this.name;
184                        var type = 'directory';
185                        var cDir = {id: id, name: name, type: type, childs: null};
186                        aryChildIDs[index] = cDir;
187                    });
188
189                    if ($(aryChildFiles).length > 0) {
190                        if (node.files == undefined)
191                            node.files = [];
192                        $(aryChildFiles).each(function (index) {
193                            var id = this.id;
194                            var name = this.name;
195                            var type = 'file';
196                            var cFile = {id: id, name: name, type: type};
197                            node.files[index] = cFile;
198                        });
199                    }
200
201                    if ($(aryChildDirs).length > 0) {
202                        if (node.childs == undefined)
203                            node.childs = [];
204                        $(aryChildIDs).each(function (index) {
205                            node.childs[index] = new Object;
206                            buildTreeFromParent(aryChildIDs[index].id, node.childs[index]);
207                        });
208                    }
209                }
210
211                var checkChildExisted = function (id) {
212                    var dirList = searchItemsByParent(id, 'directory');
213                    var fileList = searchItemsByParent(id, 'file');
214                    return (dirList.length > 0) || (fileList.length > 0);
215                }
216
217                var doneInit = function () {
218                    bindEventToToolbars();
219                    documentEventsBinding();
220                };
221
222                var failInit = function (er) {
223                    bootbox.alert(er.err);
224                }
225
226                var init = function () {
227                    layoutRender();
228                    $('#' + o.tree).parent().resizable({
229                        maxWidth: maxWidth,
230                        minWidth: 220,
231                        handles: "e",
232                        resize: function (event, ui) {
233                            layoutRender();
234                        }
235                    });
236                    $(window).resize(function () {
237                        layoutRender();
238                        $('#' + o.tree).parent().resizable({maxWidth: maxWidth});
239                    });
240                    sendCommand({postdata: null, callbackSuccess: createFileManager, callbackDone: doneInit, callbackFail: failInit});
241                };
242
243                var searchItemByID = function (id, type) {
244                    var data = {};
245                    switch (type) {
246                        case 'directory':
247                            data = o.data.DIRECTORIES;
248                            break;
249                        case 'file':
250                            data = o.data.FILES;
251                            break;
252                        default:
253                            break;
254                    }
255
256                    //for (var i = 0; i < data.length; i++) {
257                    for (var i in data) {
258                        if (data[i].id == id) {
259                            return i;
260                        }
261                    }
262                }
263
264                var searchItemsByParent = function (parentID, type) {
265                    var data = {};
266                    var aryItem = [];
267                    var index = aryItem.length;
268
269                    switch (type) {
270                        case 'directory':
271                            data = o.data.DIRECTORIES;
272                            break;
273                        case 'file':
274                            data = o.data.FILES;
275                            break;
276                        default:
277                            break;
278                    }
279
280                    for (i in data) {
281                        if (data[i].parentID == parentID) {
282                            aryItem[index] = data[i];
283                            index++;
284                        }
285                    }
286
287                    return aryItem;
288                }
289
290                /**************************
291                 * TOOLBAR EVENTS - START *
292                 **************************/
293                var btnRefreshClick = function (obj) {
294                    $(o).find('i').addClass('icon-spin');
295                    sendCommand({postdata: null,
296                        callbackSuccess: function (parseData) {
297                            o.data = parseData;
298                            self.updateData({updateAll: true});
299                            o.oTree.refeshTree();
300                        },
301                        callbackDone: function () {
302                            $(o).find('i').removeClass('icon-spin');
303                        },
304                        callbackFail: failInit
305                    });
306                }
307
308                var btnNewFolderClick = function () {
309                    createFolderStart();
310                }
311
312                var btnUploadClick = function () {
313                    uploadStart();
314                    uploadInit();
315
316                }
317                var btnDownloadClick = function () {
318                    var items = o.oGrid.getHightLightItem();
319                    var fileid= new Array();
320                    var folder= new Array();
321                    for (var i = 0; i < $(items).length; i++) {
322                                        if(items[i].type=="file")
323                                        {
324                                        var file = items[i].id;             
325                                        fileid.push(file);
326                                        }
327                                        if(items[i].type=="directory")
328                                        {
329                                        var file = items[i].id;             
330                                        folder.push(file);
331                                        }
332                    }
333                    console.log(fileid.toString());
334                    var redirect = o.host+"download/getFile/"; 
335                    $.redirectPost(redirect, {file: fileid.toString(),folder: folder.toString()});
336                }
337
338                var btnDelClick = function () {
339                    var items = o.oGrid.getHightLightItem();
340                    if ($(items).length == 0) {
341                        var dirID = $(o.oTree.getSelectedNode()).attr('id');
342                        var item = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')];
343                        item.type = 'directory';
344                        items = [item];
345                    }
346                    self.deleteItem(items);
347                }
348
349                var btnCopyClick = function () {
350                    copy('copy');
351                }
352
353                var btnPasteClick = function () {
354                    paste();
355                }
356
357                var btnCutClick = function () {
358                    copy('move');
359                }
360
361                var bindEventToToolbars = function () {
362                    $(btnRefresh).click(function (e) {
363                        btnRefreshClick(this)
364                    });
365
366                    $(btnNewFolder).click(function (e) {
367                        btnNewFolderClick()
368                    });
369                    $(btnUpload).click(function (e) {
370                        btnUploadClick()
371                    });
372
373                    $(btnDel).click(function (e) {
374                        btnDelClick()
375                    });
376                    $(btnCopy).click(function (e) {
377                        btnCopyClick()
378                    });
379                    $(btnCut).click(function (e) {
380                        btnCutClick()
381                    });
382                    $(btnPaste).click(function (e) {
383                        btnPasteClick()
384                    })
385                    $(btnPreview).click(function (e) {
386                        btnPreviewClick()
387                    })
388                    $(btnDownload).click(function (e) {
389                        btnDownloadClick()
390                    })
391
392                    /*btnShare
393                     btnPreview
394                     btnDownload
395                     btnUpload*/
396                }
397                /************************
398                 * TOOLBAR EVENTS - END *
399                 ************************/
400
401                /***********************************
402                 * DOCUMENT EVENTS BINDING - START *
403                 ***********************************/
404                var documentEventsBinding = function () {
405                    $(document).bind('keydown', function (e) {
406                        switch (e.which) {
407                            case 113:
408                            case 27:
409                                var gridSelectedItems = o.oGrid.getHightLightItem();
410                                if ($(gridSelectedItems).length > 0) {
411                                    o.oGrid.rename(e.which);
412                                } else {
413                                    o.oTree.rename(e.which);
414                                }
415                                break;
416                            case 46:
417                                //delete
418                                btnDelClick();
419                                break;
420                            case 65:
421                                if (e.ctrlKey) {
422                                    o.oGrid.selectAllNode();
423                                }
424                                break;
425                            default:
426                                break;
427                        }
428                    });
429                }
430                /***********************************
431                 * DOCUMENT EVENTS BINDING - END *
432                 ***********************************/
433
434                /*******************************
435                 * CREATE FOLDER - START *
436                 *******************************/
437                var createFolderStart = function () {
438                    var promptOptions = {
439                        title: "Tạo thư mục mới",
440                        buttons: {
441                            confirm: {
442                                label: "Lưu"
443                            },
444                            cancel: {
445                                label: "Há»§y"
446                            }
447                        },
448                        callback: function (result) {
449                            if (result === null) {
450                            } else {
451                                createFolder(treeCurrentNode, result);
452                            }
453                        }
454                    };
455
456                    return bootbox.prompt(promptOptions);
457                }
458
459                var uploadStart = function () {
460                    var userid = o.data.userinfo.us_id;
461                    var promptOptions = {
462                        title: "Tải lên",
463                        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>",
464                        buttons: {
465                            success: {
466                                label: "Xong",
467                                className: "btn btn-primary",
468                                callback: function (result) {
469                                   
470                                }
471                            },
472                        },
473                        onEscape: function() {uploadDone(self.getTreeCurrentNode());}
474                    };
475
476                    return bootbox.dialog(promptOptions);
477                }
478                var uploadDone = function (result) {
479                   
480                }
481                var btnPreviewClick = function(){
482                    var items = o.oGrid.getHightLightItem();
483                    if ($(items).length == 0) {
484                        var dirID = $(o.oTree.getSelectedNode()).attr('id');
485                        var item = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')];
486                        item.type = 'directory';
487                        items = [item];
488                    }
489                    previewFile(items[0]);
490                }
491               
492                var previewFile = function(node) {
493                    var content="";
494                    $ext=node.fileurl.split('.').pop();
495                    $ext = $ext.toLowerCase();
496                    if($.inArray( $ext, [ "jpg", "jpeg","png","gif"])>=0)
497                   {
498                        content="<img style='width:100%' src='"+node.fileurl+"' /><br />"+node.name;
499                        bootbox.alert(content);
500                    }
501                   
502                    if($.inArray( $ext, [ "flv", "mp4","avi","m4v"])>=0)
503                   {
504                        $.ajax({
505                            url: o.host+"preview/getVideoPreview/",
506                            type: "POST",
507                            data: {fileurl:node.fileurl,name:node.name},
508                            success: function(data, textStatus, jqXHR)
509                            {
510                                bootbox.alert(data);
511                            }
512                            ,
513                            error: function(jqXHR, textStatus, errorThrown)
514                            {
515
516                            }
517                        });
518                    }
519                   
520                    if($.inArray( $ext, [ "ogg"])>=0)
521                   {
522                        content='<audio controls>\
523                        <source src="'+node.fileurl+'" type="audio/ogg">\
524                      Your browser does not support the audio element.\
525                      </audio> <br />'+node.name;
526                        bootbox.alert(content);
527                    }
528                    if($.inArray( $ext, [ "mp3"])>=0)
529                   {
530                        content='<audio controls>\
531                        <source src="'+node.fileurl+'" type="audio/mpeg">\
532                      Your browser does not support the audio element.\
533                      </audio> <br />'+node.name;
534                        bootbox.alert(content); 
535                    }
536                   
537                    if($.inArray( $ext, ["ppt","xls","doc","pdf","docx","pptx","xlsx"])>=0)
538                   {
539                           
540                            $.ajax({
541                            url: o.host+"preview/getFilePreview/"+node.id,
542                            type: "POST",
543                            data: {},
544                            success: function(data, textStatus, jqXHR)
545                            {
546                                bootbox.alert(data);
547                            }
548                            ,
549                            error: function(jqXHR, textStatus, errorThrown)
550                            {
551
552                            }
553                        });
554                    }
555                    if($.inArray( $ext, [ "xvl"])>=0)
556                   {
557                       var url = o.host.replace("ajax/", ""); 
558                       var redirect = url + 'frontend/lecture/';
559                       self.redirectPost(redirect, {fileid: node.id});
560                    }
561                    $( ".bootbox" ).addClass( "preview" );
562                }
563               
564                var uploadInit = function () {
565                    var ul = $('#upload ul');
566
567                    $('#drop a').click(function () {
568                        $(this).parent().find('input').click();
569                    });
570                   
571                    $('#upload').fileupload({
572                        dropZone: $('#drop'),
573                        add: function (e, data) {
574
575                            var tpl = $('<li class="working"><input type="text" value="0" data-width="48" data-height="48"' +
576                                    ' data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /><p></p><span></span></li>');
577                            tpl.find('p').text(data.files[0].name)
578                                    .append('<i>' + formatFileSize(data.files[0].size) + '</i>');
579                            data.context = tpl.appendTo(ul);
580                            tpl.find('input').knob();
581                            tpl.find('span').click(function () {
582
583                                if (tpl.hasClass('working')) {
584                                    jqXHR.abort();
585                                }
586
587                                tpl.fadeOut(function () {
588                                    tpl.remove();
589                                });
590
591                            });
592                           
593                            var jqXHR = data.submit();
594                        },
595                        progress: function (e, data) {
596
597                            // Calculate the completion percentage of the upload
598                            var progress = parseInt(data.loaded / data.total * 100, 10);
599
600                            // Update the hidden input field and trigger a change
601                            // so that the jQuery knob plugin knows to update the dial
602                            data.context.find('input').val(progress).change();
603
604                            if (progress == 100) {
605                                data.context.removeClass('working');
606                               
607                               
608                                                       
609                               
610                            }
611                        },
612                        fail: function (e, data) {
613                            // Something has gone wrong!
614                            data.context.addClass('error');
615                        },
616                        done: function (e, data) {
617                            //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}};
618                              var newFileData=data.result;
619                              newFileData=$.parseJSON(data.result);
620                                if (newFileData.ERROR.errCode == 0) {
621                                    for (var i = 0; i < $(newFileData.FILES).length; i++) {
622                                        var file = newFileData.FILES[i];
623                                        var node = {thumbnail: file.thumbnail, id: file.id, name: file.name,fileurl: file.fileurl, parentID: file.parentID, minetype:file.minetype};
624                                        o.oGrid.createNode(node);
625                                        o.data.FILES[$(o.data.FILES).length] = node;
626                                    }
627                                   
628                                    for (var i = 0; i < $(newFileData.DIRECTORIES).length; i++) {
629                                        var file = newFileData.DIRECTORIES[i];
630                                        var node = {id: file.id, name: file.name, parentID: file.parentID, minetype:file.minetype};
631                                        o.oTree.createNode(node);
632                                        o.oGrid.createNode(node);
633                                        o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node;
634                                    }
635                                   
636                                    /*var node = {id: parseData.id, name: parseData.name, parentID: parseData.parentID};
637                                    o.oTree.createNode(node);
638                                    o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node;
639                                    if (o.oGrid) o.oGrid.reloadGrid();*/
640                                }       
641                        }
642
643                    });
644                   
645                    $(document).on('drop dragover', function (e) {
646                        e.preventDefault();
647                    });
648                   
649                    function formatFileSize(bytes) {
650                        if (typeof bytes !== 'number') {
651                            return '';
652                        }
653
654                        if (bytes >= 1000000000) {
655                            return (bytes / 1000000000).toFixed(2) + ' GB';
656                        }
657
658                        if (bytes >= 1000000) {
659                            return (bytes / 1000000).toFixed(2) + ' MB';
660                        }
661
662                        return (bytes / 1000).toFixed(2) + ' KB';
663                    }
664
665                };
666
667                var createFolder = function (parent, name) {
668                    var postdata = {fname: name, fparentid: parent};
669                    var script = 'createdir';
670                    /*isDev = true;*/
671                    sendCommand({
672                        postdata: postdata,
673                        script: script,
674                        callbackSuccess: function (parseData) {
675                            createFolderFinish(parseData);
676                        },
677                        callbackFail: function () {
678                        }
679                    });
680                }
681
682                var createFolderFinish = function (parseData) {
683                    /*isDev = false;*/
684                    if (parseData.ERROR.errCode == 0) {
685                        var node = {id: parseData.id, name: parseData.name, parentID: parseData.parentID};
686                        o.oTree.createNode(node);
687                        o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node;
688                        if (o.oGrid)
689                            o.oGrid.reloadGrid();
690                    }
691                }
692                /*******************************
693                 * CREATE FOLDER - END         *
694                 *******************************/
695                /********************************
696                 * COPY & PASTE & MOVE - START  *
697                 ************=*******************/
698                var copy = function (act) {
699                    //detect selected items
700                    //push to clipboard
701                    var items = o.oGrid.getHightLightItem();
702
703                    if ($(items).length == 0) {
704                        var node = o.oTree.getSelectedNode();
705                        var itemID = $(node).attr('id');
706
707                        if (itemID == 0)
708                            return false;
709
710                        items[0] = o.data.DIRECTORIES[searchItemByID(itemID, 'directory')];
711                        items[0].type = 'directory';
712                    }
713
714                    if ($(items).length > 0) {
715                        oClipBoard.items = items;
716                        oClipBoard.act = act;
717                    }
718                    return true;
719                }
720
721                var paste = function () {
722                    if ((oClipBoard.act != 'copy'
723                            && oClipBoard.act != 'move')
724                            || oClipBoard.items == null)
725                        return;
726
727                    var items = [];
728                    var destination = self.getTreeCurrentNode();
729                    if (oClipBoard.act != 'copy') {
730                        $(oClipBoard.items).each(function (index) {
731                            var node = new Object;
732                            if (this.type == 'directory')
733                                buildTreeFromParent(this.id, node);
734                            else {
735                                node.id = this.id;
736                                node.type = 'file';
737                            }
738
739                            items[index] = node;
740                        });
741                    }
742                    else {
743                        items = oClipBoard.items;
744                    }
745
746                                        for (var i = 0; i < items.length; i++) {
747                                                if (items[i].type == 'directory') {
748                                                        items[i] = self.getAllDirChilds(items[i]);                                                     
749                                                }
750                                        }
751                                       
752                    var postdata = {act: oClipBoard.act, destination: destination, data: JSON.stringify(items)};
753                    var script = oClipBoard.act;
754
755                    sendCommand({
756                        postdata: postdata,
757                        script: script,
758                        callbackSuccess: function (parseData) {
759                            if (oClipBoard.act == 'copy') {
760                                $(parseData.DIRECTORIES).each(function (index) {
761                                    o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = this;
762                                });
763
764                                $(parseData.FILES).each(function (index) {
765                                    o.data.FILES[$(o.data.FILES).length] = this;
766                                });
767
768                                o.data.DIRECTORIES.sort(function (a, b) {
769                                    return a.parentID - b.parentID;
770                                });
771
772                                o.oTree.setData(o.data.DIRECTORIES);
773                                o.oGrid.setData(o.data);
774                                o.oTree.createCopyNode(parseData.DIRECTORIES);
775                                o.oGrid.reloadGrid();
776                            }
777                            else if (oClipBoard.act == 'move') {
778
779                            }
780                        }
781                    });
782                }
783
784                var move = function () {
785
786                }
787
788                var copyTo = function () {
789
790                }
791
792                var moveTo = function () {
793
794                }
795
796                /*****************************
797                 * COPY & PASTE & MOVE - END *
798                 *****************************/
799
800                this.deleteItem = function (item) {
801
802                    var confirmText = 'Bạn có muốn xóa ';
803
804                    if ($.isArray(item) && item.length > 1) {
805                        confirmText += 'các thư mục (và files) đã chọn?';
806                    }
807                    else if (item.length == 1) {
808                        if (item[0].id == 0)
809                            return false;
810                        confirmText += (item[0].type == 'directory') ? 'thư mục' : 'file';
811                        confirmText += ' <span style="font-weight:bold">' + item[0].name + "</span> khÃŽng?";
812                    }
813
814                    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>';
815
816                    var parentID = item[0].parentID;
817
818                    for (var i = 0; i < item.length; i++) {
819                        if (item[i].type == 'directory') {
820                                item[i] = self.getAllDirChilds(item[i]);                               
821                        }
822                    }
823
824                    var confirmOptions = {
825                        message: confirmText,
826                        buttons: {
827                            confirm: {
828                                label: "Xóa"
829                            },
830                            cancel: {
831                                label: "KhÃŽng xóa"
832                            }
833                        },
834                        callback: function (result) {
835                            if (result) {
836                                var delobj = JSON.stringify(item);
837                                var postdata = {delobj: delobj};
838                                var script = 'delete';
839                                sendCommand({
840                                    postdata: postdata,
841                                    script: script,
842                                    callbackSuccess: function (parseData) {
843                                        if ($(parseData.DIRECTORIES).length > 0) {
844                                            $(parseData.DIRECTORIES).each(function (index) {
845                                                o.oTree.deletion(this);
846                                                o.oGrid.deletion(this, 'directory');
847                                            });
848                                        }
849
850                                        if ($(parseData.FILES).length > 0) {
851                                            $(parseData.FILES).each(function (index) {
852                                                var file = o.data.FILES[searchItemByID(this, 'file')];
853                                                o.oGrid.deletion(this, file.minetype);
854                                            });
855                                        }
856                                    },
857                                    callbackDone: function (obj) {
858                                        if ($(parseData.DIRECTORIES).length > 0) {
859                                            $(parseData.DIRECTORIES).each(function (index) {
860                                                delete o.data.DIRECTORIES[searchItemByID(this, 'directory')];
861                                            });
862                                        }
863
864                                        if ($(parseData.FILES).length > 0) {
865                                            $(parseData.FILES).each(function (index) {
866                                                delete o.data.FILES[searchItemByID(this, 'file')];
867                                            });
868                                        }
869
870                                        o.oTree.setData(o.data.DIRECTORIES);
871                                        o.oGrid.setData(o.data);
872                                        self.setTreeCurrentNode(parentID);
873                                        o.oGrid.reloadGrid();
874                                    },
875                                    callbackFail: function () {
876                                    }
877                                });
878                            }
879                        }
880                    };
881
882                    bootbox.confirm(confirmOptions);
883                }
884               
885                this.getAllDirChilds = function (oDirItem) {
886                        var aryChildDirTmp = [];
887                    var aryChildDirID = [];
888                    var aryChildFiles = searchItemsByParent(oDirItem.id, 'file');
889                    var aryChildDirs = [];
890
891                    getAllDirChild(oDirItem.id, aryChildDirTmp);
892                    for (var d = 1; d < aryChildDirTmp.length; d++) {
893                        aryChildDirID[d - 1] = aryChildDirTmp[d];
894                    }
895
896                    for (var j = 0; j < aryChildDirID.length; j++) {
897                        if (o.data.DIRECTORIES[searchItemByID(aryChildDirID[j], 'directory')] != undefined)
898                            aryChildDirs[aryChildDirs.length] = o.data.DIRECTORIES[searchItemByID(aryChildDirID[j], 'directory')];
899
900                        var aryTmp = searchItemsByParent(aryChildDirID[j], 'file');
901                        if (aryTmp.length > 0)
902                            for (var f in aryTmp) {
903                                aryChildFiles[aryChildFiles.length] = aryTmp[f];
904                            }
905                    }
906
907                    oDirItem.childDirs = aryChildDirs;
908                    oDirItem.childFiles = aryChildFiles;
909                    return oDirItem;
910                }
911
912                this.setTreeCurrentNode = function (treeNode) {
913                    //fire when click a node on Tree
914                    //then fire action of Grid
915                    treeCurrentNode = treeNode;
916                    if (o.oGrid)
917                        o.oGrid.reloadGrid();
918                };
919
920                this.getTreeCurrentNode = function () {
921                    return treeCurrentNode;
922                }
923
924                this.gridNodeDblClick = function (node) {
925                    if (node.minetype == 'directory') {
926                        var treeNode = $('#' + o.tree).find('UL.vstree[rel^="node' + node.parentID + '"] > LI[rel^="folder"] > A#' + node.id);
927                        o.oTree.activeNode(treeNode);
928                    }
929                    else {
930                        //execute or preview file
931                         previewFile(node);
932                    }
933                };
934
935                this.createNewFolder = function () {
936
937                }
938
939                this.updateData = function (p) {
940                    if (p.item == undefined)
941                        p.item = null;
942                    if (p.updateAll == undefined)
943                        p.updateAll = false;
944                    if (p.from == undefined)
945                        p.from = null;
946                    if (p.type == undefined)
947                        p.type = null;
948                    if (p.callback == undefined)
949                        p.callback = null;
950
951                    var obj = p.from == 'tree' ? o.oGrid : o.oTree;
952                    if (!p.updateAll) {
953                        var index = searchItemByID(p.item.id, p.type);
954                        switch (p.type) {
955                            case 'directory':
956                                o.data.DIRECTORIES[index].name = p.item.name;
957                                o.data.DIRECTORIES[index].parentID = p.item.parentID;
958                                break;
959                            case 'file':
960                                o.data.FILES[index].name = p.item.name;
961                                o.data.FILES[index].parentID = p.item.parentID;
962                                o.data.FILES[index].minetype = p.item.minetype;
963                                o.data.FILES[index].fileurl = p.item.fileurl;
964                                break;
965                            default:
966                                break;
967                        }
968                    }
969
970                    o.oTree.setData(o.data.DIRECTORIES);
971                    o.oGrid.setData(o.data);
972
973                    if (p.callback != null) {
974                        eval('obj.' + p.callback + '(p.item);')
975                    }
976
977                    //call sendCommand
978                }
979
980                this.searchItemsByParent = function (parentID, type) {
981                    return searchItemsByParent(parentID, type);
982                }
983
984                this.searchItemByID = function (id, type) {
985                    return searchItemByID(id, type);
986                }
987               
988                this.refreshStatusBar = function () {
989                        var totalSize = 0;
990                        var message = '';
991                        if (o.data.FILES.length > 0) {
992                                for (var i = 0; i < o.data.FILES.length; i++) {
993                                        totalSize += parseInt(o.data.FILES[i].size);
994                                }
995                        }
996                       
997                        message = '<span>Tổng dung lượng đã sá»­ dụng: <strong>' + self.formatFileSize(totalSize) + '</strong></span>';
998                       
999                        var items = o.oGrid.getHightLightItem();
1000                        if (items.length == 1) {
1001                                if ((typeof items[0].minetype !== 'undefined')) {
1002                                        message += '<span>Tệp: <strong>' + items[0].name + '</strong></span>';
1003                                        message += '<span> - Dung lượng: <strong>' + self.formatFileSize(items[0].size) + '</strong></span>';
1004                                }else {
1005                                        message += '<span>Thư mục: <strong>' + items[0].name + '</strong></span>';
1006                                }
1007                        }
1008                        else if (items.length > 1) {
1009                                var selectedSize = 0;
1010                                for (var i = 0; i < items.length; i++) {
1011                                        selectedSize += (typeof items[i].minetype !== 'undefined') ? parseInt(items[i].size) : 0;
1012                                }
1013                                message += '<span><strong>' + items.length + ' tệp (thư mục)</strong> được chọn</span>';
1014                                message += '<span> - Dung lượng: <strong>' + self.formatFileSize(selectedSize) + '</strong></span>';
1015                        }
1016                       
1017                        $(statusbar).html(message);
1018                }
1019               
1020                this.redirectPost = function(location, args){
1021                    var form = '';
1022                    $.each( args, function( key, value ) {
1023                        form += '<input type="hidden" name="'+key+'" value="'+value+'">';
1024                    });
1025                    $('<form action="'+location+'" method="POST">'+form+'</form>').appendTo('body').submit();
1026                }
1027               
1028                this.formatFileSize = function (size) {
1029                        var i;
1030                        i = Math.floor(Math.log(size) / Math.log(1024));
1031                        if ((size === 0) || (parseInt(size) === 0)) {
1032                          return "0 kB";
1033                        } else if (isNaN(i) || (!isFinite(size)) || (size === Number.POSITIVE_INFINITY) || (size === Number.NEGATIVE_INFINITY) || (size == null) || (size < 0)) {
1034                          console.info("Throwing error");
1035                          throw Error("" + size + " did not compute to a valid number to be humanized.");
1036                        } else {
1037                            return (size / Math.pow(1024, i)).toFixed(2) * 1 + " " + ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"][i];
1038                        }}
1039                       
1040
1041                this.initialize = function () {
1042                    init();
1043                    return this;
1044                };
1045
1046                return this.initialize();
1047            }
1048       
1049        });
1050    })(jQuery);
Note: See TracBrowser for help on using the repository browser.