source: pro-violet-viettel/www/deploy/20150304/assets/js/grid.js @ 804

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