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

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