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

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

download

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