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
Line 
1if (jQuery)
2    (function ($) {
3        $
4                .extend(
5                        $.fn,
6                        {
7                            violetFileManager: function (o) {
8                                if (!o)
9                                    var o = {};
10                                if (o.tree == undefined)
11                                    o.tree = null;
12                                if (o.grid == undefined)
13                                    o.grid = null;
14
15                                if (o.maincontainer == undefined)
16                                    o.maincontainer = null;
17                                if (o.titlebar == undefined)
18                                    o.titlebar = null;
19                                if (o.toolsbar == undefined)
20                                    o.toolsbar = null;
21                                if (o.statusbar == undefined)
22                                    o.statusbar = null;
23                                if (o.navigationbar == undefined)
24                                    o.navigationbar = null;
25
26                                if (o.oTree == undefined)
27                                    o.oTree = null;
28                                if (o.oGrid == undefined)
29                                    o.oGrid = null;
30                                if (o.host == undefined)
31                                    o.host = 'http://localhost/';
32                                if (o.hostmodule == undefined)
33                                    o.hostmodule = 'privatecontent/';
34                                if (o.script == undefined)
35                                    o.script = 'getcontent';
36                                if (o.data == undefined)
37                                    o.data = null;
38                                if (o.datasource == undefined)
39                                    o.datasource = 'ajax';
40
41                                if (o.filehosting == undefined)
42                                    o.filehosting = 'http://sbgapi.violet.vn/';
43
44                                if (o.invisibledButtons == undefined)
45                                    o.invisibledButtons = null;
46
47                                o.host = o.host + 'ajax/';
48
49                                var isDev = false;
50                                var contextmenu = null;
51                                var oContainer = this;
52                                var tree = [];
53                                var totalItem = 0;
54                                var countItem = 0;
55                                var maxWidth = 0;
56                                var treeCurrentNode = null;
57                                var self = this;
58                                var oClipBoard = {
59                                    items: null,
60                                    act: null
61                                };
62
63                                /**
64                                 * Toolbar defined
65                                 */
66                                var btnNewFolder = $('#'
67                                        + o.toolsbar
68                                        + ' > DIV.btn-group.basic > #btnNewFolder');
69                                var btnDel = $('#' + o.toolsbar
70                                        + ' > DIV.btn-group.basic > #btnDel');
71                                var btnCopy = $('#' + o.toolsbar
72                                        + ' > DIV.btn-group.basic > #btnCopy');
73                                var btnCut = $('#' + o.toolsbar
74                                        + ' > DIV.btn-group.basic > #btnCut');
75                                var btnPaste = $('#' + o.toolsbar
76                                        + ' > DIV.btn-group.basic > #btnPaste');
77                                var btnShare = $('#' + o.toolsbar
78                                        + ' > DIV.btn-group.social > #btnShare');
79                                var btnPreview = $('#'
80                                        + o.toolsbar
81                                        + ' > DIV.btn-group.social > #btnPreview');
82                                var btnDownload = $('#'
83                                        + o.toolsbar
84                                        + ' > DIV.btn-group.creation > #btnDownload');
85                                var btnUpload = $('#'
86                                        + o.toolsbar
87                                        + ' > DIV.btn-group.creation > #btnUpload');
88                                var btnRefresh = $('#'
89                                        + o.toolsbar
90                                        + ' > DIV.btn-group.control > #btnRefresh');
91
92                                var toolbarButtons = [btnNewFolder, btnDel,
93                                    btnCopy, btnCut, btnPaste, btnShare,
94                                    btnPreview, btnDownload, btnUpload,
95                                    btnRefresh];
96                                var statusbar = $('DIV#' + o.statusbar);
97
98                                var sendCommand = function (p) {
99                                    if (p.postdata == undefined)
100                                        p.postdata = null;
101                                    if (p.script == undefined)
102                                        p.script = o.script;
103                                    if (p.callbackSuccess == undefined)
104                                        p.callbackSuccess = null;
105                                    if (p.callbackDone == undefined)
106                                        p.callbackDone = null;
107                                    if (p.callbackFail == undefined)
108                                        p.callbackFail = null;
109                                    if (p.callbackAlways == undefined)
110                                        p.callbackAlways = null;
111                                    if (p.parseData == undefined)
112                                        p.parseData = null;
113                                    if (p.self == undefined)
114                                        p.self = this;
115
116                                    if (p.script != null
117                                            && (o.datasource == 'ajax' || isDev)) {
118                                        $
119                                                .post(
120                                                        o.host + o.hostmodule
121                                                        + p.script,
122                                                        p.postdata,
123                                                        function (data) {
124                                                            if (data) {
125                                                                parseData = $
126                                                                        .parseJSON(data);
127                                                                p.parseData = parseData;
128                                                            }
129
130                                                            if (p.callbackSuccess != null) {
131                                                                if (parseInt(parseData.ERROR.errCode) === 0)
132                                                                    p
133                                                                            .callbackSuccess(parseData);
134                                                                else {
135                                                                    p
136                                                                            .callbackFail(parseData.ERROR);
137                                                                }
138                                                            }
139
140                                                        })
141                                                .done(
142                                                        function () {
143                                                            if (p.callbackDone != null)
144                                                                p
145                                                                        .callbackDone(p.parseData);
146                                                        })
147                                                .fail(function () {
148                                                    if (p.callbackFail != null)
149                                                        p.callbackFail(this);
150                                                })
151                                                .always(
152                                                        function () {
153                                                            if (p.callbackAlways != null)
154                                                                p
155                                                                        .callbackAlways(this);
156                                                        });
157                                    } else if (o.datasource == 'json') {
158                                        if (p.callbackSuccess != null)
159                                            p.callbackSuccess(o.data);
160                                        if (p.callbackDone != null)
161                                            p.callbackDone(this);
162                                    }
163
164                                };
165
166                                var getDirTreeMaxWidth = function () {
167                                    var scrWidth = $(o.maincontainer).width();
168                                    return parseInt(scrWidth / 2);
169                                }
170
171                                var layoutRender = function () {
172                                    var scrWidth = $('#' + o.maincontainer)
173                                            .width();
174                                    var scrHeght = $(window).innerHeight();
175                                    var dirTreeHeight = scrHeght
176                                            - $('#' + o.titlebar).height()
177                                            - $('#' + o.toolsbar).height()
178                                            - $('#' + o.statusbar).height() - 5;
179                                    $('#' + o.tree).parent().height(
180                                            dirTreeHeight);
181                                    $('#' + o.grid).parent().height(
182                                            dirTreeHeight);
183                                    $('#' + o.grid).parent().width(
184                                            'calc(100% - '
185                                            + ($('#' + o.tree).parent()
186                                                    .width() + 8)
187                                            + 'px)');
188                                    var scollWidth = $('#' + o.grid).parent()
189                                            .width();
190                                    maxWidth = getDirTreeMaxWidth();
191                                    $(o.tree).height(dirTreeHeight - 5);
192
193                                    if (o.invisibledButtons != null) {
194                                        for (var i = 0; i < o.invisibledButtons.length; i++) {
195                                            $('#' + o.invisibledButtons[i])
196                                                    .hide();
197                                        }
198                                    }
199                                }
200
201                                var createFileManager = function (parseData) {
202                                    o.data = parseData;
203                                    totalItem = o.data.DIRECTORIES.length;
204                                    o.oTree = $('#' + o.tree).violetTree({
205                                        data: o.data.DIRECTORIES,
206                                        manager: oContainer
207                                    });
208                                    o.oGrid = $('#' + o.grid).violetGrid({
209                                        data: o.data,
210                                        manager: oContainer
211                                    });
212                                    self.refreshStatusBar();
213                                };
214
215                                var getAllDirChild = function (parentID,
216                                        aryChild) {
217                                    parentID = parentID == null ? 0 : parentID;
218                                    var dirList = searchItemsByParent(parentID,
219                                            'directory');
220                                    var index = aryChild.length;
221                                    aryChild[index] = parentID;
222                                    if (dirList.length > 0) {
223                                        for (var i = 0; i < dirList.length; i++) {
224                                            getAllDirChild(dirList[i].id,
225                                                    aryChild);
226                                        }
227                                    }
228                                }
229
230                                var buildTreeFromParent = function (dirID, node) {
231                                    var aryChildFiles = [];
232                                    var aryChildDirs = [];
233                                    var aryChildIDs = [];
234                                    var aryTmp = [];
235                                    var dir = o.data.DIRECTORIES[searchItemByID(
236                                            dirID, 'directory')];
237                                    aryChildDirs = searchItemsByParent(dirID,
238                                            'directory');
239                                    aryChildFiles = searchItemsByParent(dirID,
240                                            'file');
241
242                                    node.id = dir.id;
243                                    node.name = dir.name;
244                                    node.type = 'directory';
245
246                                    $(aryChildDirs).each(function (index) {
247                                        var id = this.id;
248                                        var name = this.name;
249                                        var type = 'directory';
250                                        var cDir = {
251                                            id: id,
252                                            name: name,
253                                            type: type,
254                                            childs: null
255                                        };
256                                        aryChildIDs[index] = cDir;
257                                    });
258
259                                    if ($(aryChildFiles).length > 0) {
260                                        if (node.files == undefined)
261                                            node.files = [];
262                                        $(aryChildFiles).each(function (index) {
263                                            var id = this.id;
264                                            var name = this.name;
265                                            var type = 'file';
266                                            var cFile = {
267                                                id: id,
268                                                name: name,
269                                                type: type
270                                            };
271                                            node.files[index] = cFile;
272                                        });
273                                    }
274
275                                    if ($(aryChildDirs).length > 0) {
276                                        if (node.childs == undefined)
277                                            node.childs = [];
278                                        $(aryChildIDs)
279                                                .each(
280                                                        function (index) {
281                                                            node.childs[index] = new Object;
282                                                            buildTreeFromParent(
283                                                                    aryChildIDs[index].id,
284                                                                    node.childs[index]);
285                                                        });
286                                    }
287                                }
288
289                                var checkChildExisted = function (id) {
290                                    var dirList = searchItemsByParent(id,
291                                            'directory');
292                                    var fileList = searchItemsByParent(id,
293                                            'file');
294                                    return (dirList.length > 0)
295                                            || (fileList.length > 0);
296                                }
297
298                                var doneInit = function () {
299                                    bindEventToToolbars();
300                                    documentEventsBinding();
301                                };
302
303                                var failInit = function (er) {
304                                    bootbox.alert(er.err);
305                                }
306
307                                var init = function () {
308                                    layoutRender();
309                                    $('#' + o.tree).parent().resizable({
310                                        maxWidth: maxWidth,
311                                        minWidth: 220,
312                                        handles: "e",
313                                        resize: function (event, ui) {
314                                            layoutRender();
315                                        }
316                                    });
317                                    $(window).resize(function () {
318                                        layoutRender();
319                                        $('#' + o.tree).parent().resizable({
320                                            maxWidth: maxWidth
321                                        });
322                                    });
323                                    sendCommand({
324                                        postdata: null,
325                                        callbackSuccess: createFileManager,
326                                        callbackDone: doneInit,
327                                        callbackFail: failInit
328                                    });
329                                };
330
331                                var searchItemByID = function (id, type) {
332                                    var data = {};
333                                    switch (type) {
334                                        case 'directory':
335                                            data = o.data.DIRECTORIES;
336                                            break;
337                                        case 'file':
338                                            data = o.data.FILES;
339                                            break;
340                                        default:
341                                            break;
342                                    }
343
344                                    // for (var i = 0; i < data.length; i++) {
345                                    for (var i in data) {
346                                        if (data[i].id == id) {
347                                            return i;
348                                        }
349                                    }
350                                }
351
352                                var searchItemsByParent = function (parentID,
353                                        type) {
354                                    var data = {};
355                                    var aryItem = [];
356                                    var index = aryItem.length;
357
358                                    switch (type) {
359                                        case 'directory':
360                                            data = o.data.DIRECTORIES;
361                                            break;
362                                        case 'file':
363                                            data = o.data.FILES;
364                                            break;
365                                        default:
366                                            break;
367                                    }
368
369                                    for (i in data) {
370                                        if (data[i].parentID == parentID) {
371                                            aryItem[index] = data[i];
372                                            index++;
373                                        }
374                                    }
375
376                                    return aryItem;
377                                }
378
379                                /***********************************************
380                                 * TOOLBAR EVENTS - START *
381                                 **********************************************/
382                                var btnRefreshClick = function (obj) {
383                                    $(o).find('i').addClass('icon-spin');
384                                    sendCommand({
385                                        postdata: null,
386                                        callbackSuccess: function (parseData) {
387                                            o.data = parseData;
388                                            self.updateData({
389                                                updateAll: true
390                                            });
391                                            o.oTree.refeshTree();
392                                        },
393                                        callbackDone: function () {
394                                            $(o).find('i').removeClass(
395                                                    'icon-spin');
396                                        },
397                                        callbackFail: failInit
398                                    });
399                                }
400
401                                var btnNewFolderClick = function () {
402                                    createFolderStart();
403                                }
404
405                                var btnUploadClick = function () {
406                                    uploadStart();
407                                    uploadInit();
408
409                                }
410                               
411                                var btnDownloadClick = function () {
412                                    var items = o.oGrid.getHighLightItem();
413
414                                    if ($(items).length == 0) {
415                                        var node = o.oTree.getSelectedNode();
416                                        var itemID = $(node).attr('id');
417
418                                        if (itemID == 0)
419                                            return false;
420
421                                        items[0] = o.data.DIRECTORIES[searchItemByID(
422                                                itemID, 'directory')];
423                                        items[0].type = 'directory';
424                                    }
425
426                                    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       
434
435                                   
436                                }
437
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                                }
450
451                                var btnCopyClick = function () {
452                                    copy('copy');
453                                }
454
455                                var btnPasteClick = function () {
456                                    paste();
457                                }
458
459                                var btnCutClick = function () {
460                                    copy('move');
461                                }
462
463                                var bindEventToToolbars = function () {
464                                    $(btnRefresh).click(function (e) {
465                                        btnRefreshClick(this)
466                                    });
467
468                                    $(btnNewFolder).click(function (e) {
469                                        btnNewFolderClick()
470                                    });
471                                    $(btnUpload).click(function (e) {
472                                        btnUploadClick()
473                                    });
474
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                                    })
493
494                                    /*
495                                     * btnShare btnPreview btnDownload btnUpload
496                                     */
497                                }
498                                /***********************************************
499                                 * TOOLBAR EVENTS - END *
500                                 **********************************************/
501
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                                 **********************************************/
541
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                                    };
564
565                                    return bootbox.prompt(promptOptions);
566                                }
567
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) {
584
585                                                }
586                                            },
587                                        },
588                                        onEscape: function () {
589                                            uploadDone(self
590                                                    .getTreeCurrentNode());
591                                        }
592                                    };
593
594                                    return bootbox.dialog(promptOptions);
595                                }
596                               
597                                var uploadDone = function (result) {
598
599                                }
600                               
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>\
651                        <source src="'
652                                                + node.fileurl
653                                                + '" type="audio/ogg">\
654                      Your browser does not support the audio element.\
655                      </audio> <br />'
656                                                + node.name;
657                                        bootbox.alert(content);
658                                    }
659                                    if ($.inArray($ext, ["mp3"]) >= 0) {
660                                        content = '<audio controls>\
661                        <source src="'
662                                                + node.fileurl
663                                                + '" type="audio/mpeg">\
664                      Your browser does not support the audio element.\
665                      </audio> <br />'
666                                                + node.name;
667                                        bootbox.alert(content);
668                                    }
669
670                                    if ($.inArray($ext, ["ppt", "xls", "doc",
671                                        "pdf", "docx", "pptx", "xlsx"]) >= 0) {
672
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) {
685
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                                }
699
700                                var uploadInit = function () {
701                                    var ul = $('#upload ul');
702
703                                    $('#drop a').click(function () {
704                                        $(this).parent().find('input').click();
705                                    });
706
707                                    $('#upload').fileupload(
708                                                    {
709                                                        dropZone: $('#drop'),
710                                                        add: function (e, data) {
711
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 () {
731
732                                                                                if (tpl
733                                                                                        .hasClass('working')) {
734                                                                                    jqXHR
735                                                                                            .abort();
736                                                                                }
737
738                                                                                tpl
739                                                                                        .fadeOut(function () {
740                                                                                            tpl
741                                                                                                    .remove();
742                                                                                        });
743
744                                                                            });
745
746                                                            var jqXHR = data
747                                                                    .submit();
748                                                        },
749                                                        progress: function (e,
750                                                                data) {
751
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);
761
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();
775
776                                                            if (progress == 100) {
777                                                                data.context
778                                                                        .removeClass('working');
779
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) {
789
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                                                                }
807
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                                                                }
820
821                                                                self.refreshStatusBar();
822                                                            }
823                                                        }
824
825                                                    });
826
827                                    $(document).on('drop dragover',
828                                            function (e) {
829                                                e.preventDefault();
830                                            });
831
832                                    function formatFileSize(bytes) {
833                                        if (typeof bytes !== 'number') {
834                                            return '';
835                                        }
836
837                                        if (bytes >= 1000000000) {
838                                            return (bytes / 1000000000)
839                                                    .toFixed(2)
840                                                    + ' GB';
841                                        }
842
843                                        if (bytes >= 1000000) {
844                                            return (bytes / 1000000).toFixed(2)
845                                                    + ' MB';
846                                        }
847
848                                        return (bytes / 1000).toFixed(2)
849                                                + ' KB';
850                                    }
851
852                                };
853
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                                }
871
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();
896
897                                    if ($(items).length == 0) {
898                                        var node = o.oTree.getSelectedNode();
899                                        var itemID = $(node).attr('id');
900
901                                        if (itemID == 0)
902                                            return false;
903
904                                        items[0] = o.data.DIRECTORIES[searchItemByID(
905                                                itemID, 'directory')];
906                                        items[0].type = 'directory';
907                                    }
908
909                                    if ($(items).length > 0) {
910                                        oClipBoard.items = items;
911                                        oClipBoard.act = act;
912                                    }
913                                    return true;
914                                }
915
916                                var paste = function () {
917                                    if ((oClipBoard.act != 'copy' && oClipBoard.act != 'move')
918                                            || oClipBoard.items == null)
919                                        return;
920
921                                    var items = [];
922
923                                    var destination = self.getTreeCurrentNode();
924                                    if (oClipBoard.act != 'copy') {
925                                        /*$(oClipBoard.items).each(
926                                                function (index) {
927                                                    var node = new Object;
928                                                    if (this.type == 'directory')
929                                                        buildTreeFromParent(this.id, node);
930                                                       
931                                                    else {
932                                                        node.id = this.id;
933                                                        node.type = 'file';
934                                                    }
935
936                                                    items[index] = node;
937                                                });*/
938                                       
939                                    } else {
940                                        items = oClipBoard.items;
941                                    }
942                                   
943                                    var aryTree = [];
944                                    aryTree = self.buildDirectoriesTree(items[0].id);
945                                    console.log(aryTree);
946                                    return;
947
948                                    /*for (var i = 0; i < items.length; i++) {
949                                        if (items[i].type == 'directory') {
950                                            items[i] = self.getAllDirChilds(items[i]);
951                                        }
952                                    }*/
953
954                                    var postdata = {
955                                        act: oClipBoard.act,
956                                        destination: destination,
957                                        data: JSON.stringify(items)
958                                    };
959                                    var script = oClipBoard.act;
960
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                                                        });
970
971                                                $(parseData.FILES).each(
972                                                        function (index) {
973                                                            o.data.FILES[$(o.data.FILES).length] = this;
974                                                        });
975
976                                                o.data.DIRECTORIES.sort(function (a, b) {
977                                                    return a.parentID - b.parentID;
978                                                });
979
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') {
985
986                                            }
987
988                                            oClipBoard.act == '';
989                                            oClipBoard.items = null;
990                                        }
991                                    });
992                                }
993
994                                var move = function () {
995
996                                }
997
998                                var copyTo = function () {
999
1000                                }
1001
1002                                var moveTo = function () {
1003
1004                                }
1005
1006                                /***********************************************
1007                                 * COPY & PASTE & MOVE - END *
1008                                 **********************************************/
1009
1010                                this.deleteItem = function (item) {
1011
1012                                    var confirmText = 'Bạn có muốn xóa ';
1013
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                                    }
1025
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>';
1027
1028                                    var parentID = item[0].parentID;
1029
1030                                    for (var i = 0; i < item.length; i++) {
1031                                        if (item[i].type == 'directory') {
1032                                            item[i] = self.getAllDirChilds(item[i]);
1033                                        }
1034                                    }
1035
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                                                        }
1066
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                                                        }
1082
1083                                                        if ($(parseData.FILES).length > 0) {
1084                                                            $(parseData.FILES).each(
1085                                                                    function (index) {
1086                                                                        o.data.FILES.splice(searchItemByID(this, 'file'), 1);
1087                                                                    });
1088                                                        }
1089
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                                    };
1102
1103                                    bootbox.confirm(confirmOptions);
1104                                }
1105
1106                                this.getAllDirChilds = function (oDirItem) {
1107                                    var aryChildDirTmp = [];
1108                                    var aryChildDirID = [];
1109                                    var aryChildFiles = searchItemsByParent(
1110                                            oDirItem.id, 'file');
1111                                    var aryChildDirs = [];
1112
1113                                    getAllDirChild(oDirItem.id, aryChildDirTmp);
1114                                    for (var d = 1; d < aryChildDirTmp.length; d++) {
1115                                        aryChildDirID[d - 1] = aryChildDirTmp[d];
1116                                    }
1117
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')];
1124
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                                    }
1132
1133                                    oDirItem.childDirs = aryChildDirs;
1134                                    oDirItem.childFiles = aryChildFiles;
1135                                    return oDirItem;
1136                                }
1137
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();
1144                                }
1145
1146                               
1147                                this.getTreeCurrentNode = function () {
1148                                    return treeCurrentNode;
1149                                }
1150
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                                };
1165
1166                                this.createNewFolder = function () {
1167
1168                                }
1169
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;
1181
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                                    }
1202
1203                                    o.oTree.setData(o.data.DIRECTORIES);
1204                                    o.oGrid.setData(o.data);
1205
1206                                    if (p.callback != null) {
1207                                        eval('obj.' + p.callback + '(p.item);')
1208                                    }
1209
1210                                    // call sendCommand
1211                                }
1212
1213                                this.searchItemsByParent = function (parentID,
1214                                        type) {
1215                                    return searchItemsByParent(parentID, type);
1216                                }
1217
1218                                this.searchItemByID = function (id, type) {
1219                                    return searchItemByID(id, type);
1220                                }
1221
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                                    }
1230
1231                                    message = '<span>Tổng dung lượng đã sá»­ dụng: <strong>'
1232                                            + self.formatFileSize(totalSize)
1233                                            + '</strong></span>';
1234
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
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                               
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.