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

Last change on this file since 807 was 807, checked in by quyenla, 10 years ago

preview

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