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

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