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

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

preview

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