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

Last change on this file since 926 was 926, checked in by dungnv, 10 years ago

Rename

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