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

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