source: pro-violet-viettel/sourcecode/assets/js/grid.js @ 503

Last change on this file since 503 was 289, checked in by dungnv, 11 years ago
File size: 8.8 KB
Line 
1if(jQuery) (function($){
2        $.extend($.fn, {
3                violetGrid : function (o) {
4                        if( !o ) var o = {};
5                        if( o.data == undefined ) o.data = null;
6                        if( o.draggable == undefined ) o.draggable = false;
7                        if( o.manager ==  undefined) o.manager = null;
8                       
9                        var oContainer = this;
10                        var documentBoundEvent = false;
11                        var posTopArray = [];
12                        var posLeftArray = [];
13                        var self = this;
14                       
15                        var createNode = function (node) {
16                                if( !node ) var node = {};
17                                if( node.item == undefined ) node.item = null; //item.id, item.name, item.parentID
18                                if( node.isDirectory == undefined ) node.isDirectory = false;
19                                if( node.showContextMenu == undefined ) node.showContextMenu = true;
20                               
21                                var icon = (node.item.minetype != undefined) ? 'icon-' + node.item.minetype: 'icon-directory';
22                                var type = (node.item.minetype != undefined) ? node.item.minetype: 'directory';
23                                var div = $('<div></div>',{'class':icon});
24                               
25                                var inputID = $('<input />',{'class':'id', type:'hidden',value:node.item.id});
26                                var inputName = $('<input />',{'class':'name',type:'hidden',value:node.item.name});
27                                var inputParent = $('<input />',{'class':'parentID',type:'hidden',value:node.item.parentID});
28                                var inputType = $('<input />',{'class':'type',type:'hidden',value:type});                               
29                               
30                                var a = $('<a></a>',{id: node.item.id,href: '#',rel: node.item.name,text: node.item.name});
31                                var divLink = $('<div></div>',{'class':'file-name'}).append(a,inputID,inputName,inputParent,inputType);
32                                var li = $('<li></li>',{'class':'vscell',id:type+node.item.id}).append(div, divLink);
33                               
34                                bindNodeEvents(li);
35                               
36                                return li;
37                        }
38                       
39                        var bindNodeEvents = function (node) {
40                                var disabledItemsList = null;
41                                var menuName = '';
42                               
43                                var type = $(node).find('> DIV[class^="file-name"] > INPUT[type="hidden"][class^="type"]').val();
44                               
45                                $(node)
46                                        .bind("click", function (e){nodeClick(this,e);return false;})
47                                        .bind("dblclick", function (e){nodeDblClick(this,e);return false;})
48                        }
49                       
50                        var nodeClick = function (node, event) {
51                                if (event.ctrlKey) {
52                                        if (!isHightLight(node))
53                                                hightlightNode(node);
54                                        else
55                                                clearHightLightNode(node);
56                                }
57                                else if (event.shiftKey) {
58                                        var firstItem = $(oContainer).find('LI.selected');
59                                        var aryNode = $(oContainer).find('> UL > LI');
60                                        var start = aryNode.index(firstItem);
61                                        var finish = aryNode.index(node);
62                                        aryNode.slice(Math.min(start, finish), Math.max(start, finish) + 1).each( function (i,o){hightlightNode(o);});
63                                }
64                                else {
65                                        clearAllHightLightNode(node);
66                                        hightlightNode(node);
67                                }
68                        }
69                       
70                        var nodeDblClick = function (node) {
71                                var nodeObj = {id:$(node).find('> DIV[class^="file-name"] > INPUT[type="hidden"][class^="id"]').val(),
72                                                        name: $(node).find('> DIV[class^="file-name"] > INPUT[type="hidden"][class^="name"]').val(),
73                                                        parentID: $(node).find('> DIV[class^="file-name"] > INPUT[type="hidden"][class^="parentID"]').val(),
74                                                        minetype: $(node).find('> DIV[class^="file-name"] > INPUT[type="hidden"][class^="type"]').val()};
75                               
76                                o.manager.gridNodeDblClick(nodeObj);                           
77                        }
78                       
79                        var hightlightNode = function (node) {
80                                $(node).addClass('selected');
81                        }
82                       
83                        var isHightLight = function (node) {
84                                return $(node).hasClass('selected');
85                        }
86                       
87                        var clearAllHightLightNode = function () {
88                                $(oContainer).find('> UL > LI').removeClass('selected');
89                        }
90                       
91                        var clearHightLightNode = function (node) {
92                                $(node).removeClass('selected');
93                        }
94                       
95                        var hightLightAllNode = function () {
96                                clearAllHightLightNode();
97                                $(oContainer).find('> UL > LI').addClass('selected');
98                        }
99                       
100                        var getAllHightLightNode = function () {
101                                return $(oContainer).find('> UL > LI.selected');
102                        }
103                       
104                        var initGrid = function () {
105                                $(oContainer).attr('unselectable','on')
106                                     .css({'-moz-user-select':'-moz-none',
107                                           '-moz-user-select':'none',
108                                           '-o-user-select':'none',
109                                           '-khtml-user-select':'none',
110                                           '-webkit-user-select':'none',
111                                           '-ms-user-select':'none',
112                                           'user-select':'none'
113                                     }).bind('selectstart', function(){ return false;
114                                     }).bind('click', function(e){clearAllHightLightNode(); return false; });
115
116                                var ul = $('<ul></ul>',{'class':'vsgrid'});
117                               
118                                var parentDirID = o.manager.getTreeCurrentNode();
119                                if (o.data.DIRECTORIES.length > 0) {
120                                        for (var d in o.data.DIRECTORIES) {
121                                                if (o.data.DIRECTORIES[d].parentID == parentDirID) {
122                                                        var li = createNode ({item: o.data.DIRECTORIES[d]});
123                                                        $(ul).append(li);
124                                                }
125                                        }
126                                }
127                               
128                                if (o.data.FILES.length > 0) {
129                                        for (var f in o.data.FILES) {
130                                                if (o.data.FILES[f].parentID == parentDirID) {
131                                                        var li = createNode ({item: o.data.FILES[f]});
132                                                        $(ul).append(li);
133                                                }
134                                        }
135                                }
136                               
137                                $(oContainer).find ('UL').remove();
138                                $(oContainer).append(ul);
139                        }
140
141                        var destroyNode = function (node) {
142                                var nodeID = $(node).find('> DIV[class^="file-name"] > INPUT[type="hidden"][class^="id"]').val();
143                                var nodeType = $(node).find('> DIV[class^="file-name"] > INPUT[type="hidden"][class^="type"]').val();
144                                $(node).remove();
145                        }
146
147                        /******************
148                         * RENAME - START *
149                         ******************/
150                        var renameInit = function (node) {                             
151                                var editor = $('<input />',{'class':'rename', type: 'text', value:$(node).text()});
152                                $(editor).bind('focusout', function(e){renameCancel(node)});
153                                $(editor).bind('keydown', function(e){
154                                                var keycode = (e.keyCode ? e.keyCode : e.which);
155                                                if (keycode == '27') {
156                                                        renameCancel(node);
157                                                }else if(keycode == '13') renameComplete(node);
158                                                e.stopPropagation();
159                                        });
160                               
161                                $(node).text('');
162                                $(node).append(editor);
163                                $(editor).focus();
164                                $(editor).select();
165                        }
166                       
167                        var renameCancel = function (node) {
168                                var nodeID = $(node).parent().find('> INPUT[type="hidden"][class^="id"]').val();
169                                var nodeType = $(node).parent().find('> INPUT[type="hidden"][class^="type"]').val();
170                                var nodeName = $(node).parent().find('> INPUT[type="hidden"][class^="name"]').val();
171                                var nodeParent = $(node).parent().find('> INPUT[type="hidden"][class^="parentID"]').val();
172                                var itemIndex =  o.manager.searchItemByID(nodeID, nodeType == 'directory' ? nodeType:'file');
173
174                                $(node).find('>INPUT').remove();
175                                $(node).text(nodeName);
176                                $(node).select();
177                        }
178                       
179                        var renameComplete = function (node) {
180                                var editor = $(node).find('>INPUT');
181                                var dirID = $(node).attr('id');
182                                var newName = $(editor).val();
183                                $(node).attr('rel', newName);
184                                $(node).text(newName);
185                                $(node).find('>INPUT').remove();
186
187                                /*treeNodes[dirID].name = newName;
188                                updateData(dirID, 'rename');*/
189                        }
190                        /******************
191                         * RENAME - END *
192                         ******************/
193                       
194                        this.reloadGrid = function () {
195                                initGrid();
196                        }
197                       
198                        this.setData = function (data) {
199                                o.data = data;
200                        }
201                       
202                        this.rename = function (item) {
203                                /*console.log('rename');
204                                console.log(item);*/
205                        }
206                       
207                        this.createNode = function (node) {
208                                var node = createNode ({item: node});
209                                $(oContainer).find ('UL').append(node);
210                        }
211                       
212                        this.deletion = function (id, type) {
213                                destroyNode($(oContainer).find('LI#'+type+id));
214                        }
215
216                        this.rename = function (key) {
217                                var hightlightedNodes = self.getHightLightItem();
218                                if ($(hightlightedNodes).length == 0 || $(hightlightedNodes).length > 1) return false;
219
220                                var nodeID = $(hightlightedNodes).get(0).id;
221                                var nodeType = $(hightlightedNodes).get(0).type;
222
223                                var selectedNode = $(oContainer).find('LI#' + nodeType + nodeID + '.vscell > DIV.file-name > A#' + nodeID);
224                                if (key == 113) {
225                                        renameInit(selectedNode);
226                                }
227                                else if (key == 27) {
228                                        renameCancel(selectedNode);
229                                }
230
231                                return true;
232                        }                       
233                       
234                        this.getHightLightItem = function () {
235                                var nodeSelected = $(oContainer).find('LI.vscell.selected');                           
236                                var items = [];
237                               
238                                if ($(nodeSelected).length > 0) {
239                                        $(nodeSelected).each (function(i,o) {
240                                                        var item = {
241                                                                id: $(this).find('> DIV.file-name > INPUT[type="hidden"][class^="id"]').val(),
242                                                                name: $(this).find('> DIV.file-name > INPUT[type="hidden"][class^="name"]').val(),
243                                                                parentID: $(this).find('> DIV.file-name > INPUT[type="hidden"][class^="parentID"]').val(),
244                                                                type: $(this).find('> DIV.file-name > INPUT[type="hidden"][class^="type"]').val()
245                                                        };
246                                                        items.push(item);
247                                                });
248                                }
249                               
250                                return items;
251                        }
252
253                        this.selectAllNode = function () {
254                                hightLightAllNode();
255                        }
256                       
257                        this.initialize = function () {
258                                initGrid();
259                                return this;
260                        };
261                       
262                        return this.initialize();
263                }
264        });
265})(jQuery);
Note: See TracBrowser for help on using the repository browser.