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

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

thumb

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