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

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