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

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