Ignore:
Timestamp:
Sep 9, 2014 4:14:10 PM (11 years ago)
Author:
dungnv
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pro-bachkim-filespace/sourcecode/assets/js/tree.js

    r66 r70  
    2020                       
    2121                        var createNode = function (node) {
     22                               
    2223                                if( !node ) var node = {};
    2324                                if( node.item == undefined ) node.item = null; //item.id, item.name, item.parentID
     
    2526                                if( node.defaultStatus == undefined ) node.defaultStatus = 0; //0: collapsed; 1:expanded;
    2627                                if( node.showContextMenu == undefined ) node.showContextMenu = true; //0: collapsed; 1:expanded;
    27                                
    28                                 var parentNode = node.isRoot == true ? oContainer : $(oContainer).find('UL.vstree > LI[rel="folder"] > A#' + node.item.parentID);
     28                                if (node.callback == undefined ) node.callback = null;
     29                               
    2930                                var nodeClass = node.isRoot == true ? 'home':'directory';
    3031                                var hidden = (node.isRoot == true || node.item.parentID == 0 ) ? null:'display:none';
     
    3233                               
    3334                                var a = $('<a></a>',{id: node.item.id,href: '#',rel: node.item.name,text: node.item.name});
    34                                 var li = $('<li></li>',{'class': nodeClass,rel: 'folder'}).append(a);                   
    35                                 var ul = $('<ul></ul>',{'class':'vstree',style:hidden}).append(li);
    36                                 $(li).addClass(defaulState);
    37                                
     35                                var li = $('<li></li>',{'class': nodeClass,rel: 'folder'})
     36                                                                                                                                                .addClass(defaulState)
     37                                                                                                                                                .append(a);
     38                                var ul = null;
    3839                                bindNodeEvents(a);
    3940                               
    4041                                treeNodes[node.item.id] = {id:node.item.id, name:node.item.name, parentID:node.item.parentID, html:ul, status:defaulState, isRoot:node.isRoot};
    41 
    42                                 if (node.isRoot == false) $(parentNode).parent().append(ul); else $(parentNode).append(ul);
    43                                 return (parentNode.length == 1);
     42                                if (node.isRoot == true) {
     43                                        ul = $('<ul></ul>',{'class':'vstree',rel:'node-1',style:hidden}).append(li);
     44                                        $(oContainer).append(ul);
     45                                }
     46                                else {
     47                                        var preUL = $(oContainer).find('UL.vstree[rel^="node-1"]');
     48                                       
     49                                        if (preUL != null) {
     50                                                if (node.item.parentID == 0) {
     51                                                        var groupUL = $(oContainer).find('UL.vstree[rel^="node0"]');
     52                                                        if ($(groupUL).length == 0) {
     53                                                                ul = $('<ul></ul>',{'class':'vstree',rel:'node0',style:hidden}).append(li);
     54                                                                $(preUL).find('> LI.home').append(ul);
     55                                                        }
     56                                                        else {
     57                                                                $(groupUL).append(li);
     58                                                        }
     59                                                }
     60                                                else {
     61                                                        var liArray = $(oContainer).find('UL.vstree LI[rel="folder"]');
     62                                                        for (var i = 0; i < $(liArray).length; i++) {
     63                                                                var id = $(liArray[i]).find('A').attr('id');
     64                                                               
     65                                                                if (id == node.item.parentID) {
     66                                                                        var groupUL = $(oContainer).find('UL.vstree[rel^="node' + id + '"]');
     67                                                                        if ($(groupUL).length == 0) {
     68                                                                                ul = $('<ul></ul>',{'class':'vstree',rel:'node'+node.item.parentID,style:hidden}).append(li);
     69                                                                                $(liArray[i]).append(ul);
     70                                                                        }
     71                                                                        else {
     72                                                                                $(groupUL).append(li);
     73                                                                        }
     74                                                                }
     75                                                        }
     76                                                }
     77                                        }
     78                                }
     79                               
     80                                if (node.callback != null) node.callback(this);
     81                                //return (parentNode.length == 1);
     82                                return true;
    4483                        };
    4584                       
     
    4988                                //click event
    5089                                $(node).bind("click", function (e){if(e.button == 0)nodeClick(this);return false;});
    51                                                                
    52                                 //Press F2 to rename, ESC to cancel rename
    53                                 if (documentBoundEvent == false) {
    54                                         $(oContainer).bind('keydown','keypress', function(e) {
    55                                                 switch( e.keyCode ) {
    56                                                 case 113:
    57                                                         renameInit(selectedNode);
    58                                                         break;
    59                                                 case 27:
    60                                                         renameCancel(selectedNode);
    61                                                         break;
    62                                                 case 46:
    63                                                         var dirID = $(selectedNode).attr('id');
    64                                                         var dirObj = {};
    65                                                         dirObj.id = treeNodes[dirID].id;
    66                                                         dirObj.name = treeNodes[dirID].name;
    67                                                         dirObj.parentID = treeNodes[dirID].parentID;
    68                                                         dirObj.type = 'directory';
    69                                                         if (e.keyCode == 46) o.manager.deleteItem([dirObj]);
    70                                                         break;
    71                                                 case 13:
    72                                                 default:
    73                                                         break;
    74                                         }
    75                                         });
    76                                        
    77                                         documentBoundEvent = true;
    78                                 }
    79                                
    80                                 disabledItemsList = [];
    81                                
    82                                 $(node).contextMenu({menu: 'treeMenu',disabledItems: disabledItemsList},
    83                                         function(action, el, pos) {
    84                                                 var dirID = $(el).attr('id');
    85                                                 var item = $(treeNodes[dirID].html).find('> LI > A#' + dirID);
    86                                                 var dirObj = {};
    87                                                 dirObj.id = treeNodes[dirID].id;
    88                                                 dirObj.name = treeNodes[dirID].name;
    89                                                 dirObj.parentID = treeNodes[dirID].parentID;
    90                                                 dirObj.type = 'directory';
    91                                                
    92                                                 switch(action) {
    93                                                         case 'rename':
    94                                                                 renameInit(item);
    95                                                                 break;
    96                                                         case 'newfolder':
    97                                                                 o.manager.createNewFolder();
    98                                                                 break;
    99                                                         case 'share':
    100                                                         case 'copy':
    101                                                         case 'cut':
    102                                                                 break;
    103                                                         case 'delete':
    104                                                                 o.manager.deleteItem([dirObj]);
    105                                                                 break;
    106                                                         default:
    107                                                                 break;
    108                                                 }
    109                                 });
    110                                
    11190                        };
    11291                       
     
    124103                                }
    125104                                else {
    126                                         collapNode(node);
     105                                        collapseNode(node);
    127106                                        treeNodes[folderID].status = 'collapsed';
    128107                                }
     
    142121                        };
    143122                       
    144                         var collapNode = function (node) {
     123                        var collapseNode = function (node) {
    145124                                var li = $(node).parent();
    146125                                $(li).find('> UL').slideUp({ duration: o.expandSpeed, easing: o.expandEasing });
     
    148127                        };
    149128                       
     129                        var isCollapsedNode = function (node) {
     130                                return $(node).parent().hasClass('collapsed');
     131                        }
     132                       
     133                        var nodeIsExisted = function (nodeID) {
     134                                var node = $(oContainer).find('UL.vstree LI.directory > A#' + nodeID);
     135                                return ($(node).length > 0) ? node : false;
     136                        }
     137                       
    150138                        var initTree = function () {
     139                                $(oContainer).attr('unselectable','on')
     140                                     .css({'-moz-user-select':'-moz-none',
     141                                           '-moz-user-select':'none',
     142                                           '-o-user-select':'none',
     143                                           '-khtml-user-select':'none',
     144                                           '-webkit-user-select':'none',
     145                                           '-ms-user-select':'none',
     146                                           'user-select':'none'
     147                                     }).bind('selectstart', function(){ return false;});
     148
    151149                                if (o.data == null) {
    152150                                        console.error(o.data, 'No directory to display!');
    153151                                        return;
    154152                                }
     153                               
     154                                o.data.sort(function (a,b) {
     155                                        return a.parentID - b.parentID;
     156                                });
     157                               
    155158                                $(oContainer).find ('.vstree').remove();
    156159                                var homeNode = createNode({
     
    164167                                }
    165168                                o.manager.setTreeCurrentNode(0);
    166                                
    167                                 $(oContainer).attr('unselectable','on')
    168                              .css({'-moz-user-select':'-moz-none',
    169                                    '-moz-user-select':'none',
    170                                    '-o-user-select':'none',
    171                                    '-khtml-user-select':'none',
    172                                    '-webkit-user-select':'none',
    173                                    '-ms-user-select':'none',
    174                                    'user-select':'none'
    175                              }).bind('selectstart', function(){ return false;});
    176169                        };
    177170                       
     
    179172                         * RENAME - START *
    180173                         ******************/
    181                        
    182174                        var renameInit = function (node) {
    183175                                var editor = $('<input>',{class:'rename', type: 'text', value:$(node).text()});
    184176                                $(editor).bind('focusout', function(e){renameCancel(node)});
    185                                 $(editor).bind('keypress', function(e){
     177                                $(editor).bind('keydown', function(e){
    186178                                                var keycode = (e.keyCode ? e.keyCode : e.which);
    187                                                 if(keycode == '13') renameComplete(node);
     179                                                if (keycode == '27') {
     180                                                        renameCancel(node);
     181                                                }else if(keycode == '13') renameComplete(node);
    188182                                                e.stopPropagation();
    189183                                        });
     
    199193                                $(node).find('>INPUT').remove();
    200194                                $(node).text(treeNodes[dirID].name);
    201                                 $(node).select();
     195                                $(node).focus();
    202196                        }
    203197                       
     
    212206                                updateData(dirID, 'rename');
    213207                        }
    214                        
    215208                        /******************
    216209                         * RENAME - END *
     
    222215                        var destroyNode = function (node) {
    223216                                var dirID = $(node).attr('id');
    224                                 $(node).parent().parent().remove();
     217                                $(node).parent().remove();
    225218                                delete treeNodes[dirID];
    226219                        }
    227220                        /******************
    228                          * DELTE - END *
     221                         * DELTE - END    *
    229222                         ******************/
    230                         /*******************************
    231                          * COPY & PASTE & MOVE - START *
    232                          *******************************/
    233                         var copyNode = function (source){
    234 
    235                         }
    236                        
    237                         var pasteNode = function (destination) {
    238                                
    239                         }
    240                        
    241                         var moveNode = function (source, destination) {
    242                                
    243                         }
    244                         /*****************************
    245                          * COPY & PASTE & MOVE - END *
    246                          *****************************/
    247                        
    248223                        var updateData = function (id, act) {
    249224                                for (var i = 0; i < o.data.length; i++) {
     
    263238                        }
    264239                       
     240                        this.createNode = function (node) {
     241                                createNode ({item: node});
     242                                o.data.sort(function (a,b) {
     243                                        return a.parentID - b.parentID;
     244                                });
     245                                if (node.parentID != 0) {
     246                                        var parentNode = $(oContainer).find('UL LI > A#' + node.parentID);                             
     247                                        expandNode(parentNode);
     248                                }
     249                        }
     250                       
     251                        this.activeNode = function (node) {
     252                                var dirID = $(node).attr('id');
     253                                selectedNode = hightlightNode(node);
     254                                o.manager.setTreeCurrentNode(dirID);
     255                                expandNode(node);
     256                                $(node).select();
     257                        }
     258
     259                        this.refeshTree = function () {
     260                                for (var i = 0; i < o.data.length; i++) {
     261                                        var node = nodeIsExisted(o.data[i].id);
     262                                        var defaulState = isCollapsedNode(node) ? 0:1;
     263                                        if (node == false)
     264                                                createNode ({item: o.data[i],defaulState:defaulState});
     265                                }
     266
     267                                o.manager.setTreeCurrentNode($(selectedNode).attr('id'));
     268                        }
     269                       
     270                        this.getSelectedNode = function () {
     271                                return selectedNode;
     272                        }
     273                       
    265274                        this.deletion = function (id) {
    266275                                destroyNode($(oContainer).find('A#'+id));
     276                        }
     277                       
     278                        this.findNodebyID = function (id) {
     279                               
    267280                        }
    268281                       
     
    279292                                return this;
    280293                        };
     294
     295                        this.rename = function (key) {
     296                                if (selectedNode == null) return false;
     297                                if (key == 113) {
     298                                        renameInit(selectedNode);
     299                                }
     300                                else if (key == 27) {
     301                                        renameCancel(selectedNode);
     302                                }
     303
     304                                return true;
     305                        }
    281306                       
    282307                        return this.initialize();
Note: See TracChangeset for help on using the changeset viewer.