OSDN Git Service

add user session
[cloudmanganw/git_repo.git] / war / WEB-INF / classes / jp / sourceforge / manganetwork / page / javascripts / spinelz / grid_sortabletableEx.js
1 // Copyright (c) 2005 spinelz.org (http://script.spinelz.org/)\r
2 // \r
3 // Permission is hereby granted, free of charge, to any person obtaining\r
4 // a copy of this software and associated documentation files (the\r
5 // "Software"), to deal in the Software without restriction, including\r
6 // without limitation the rights to use, copy, modify, merge, publish,\r
7 // distribute, sublicense, and/or sell copies of the Software, and to\r
8 // permit persons to whom the Software is furnished to do so, subject to\r
9 // the following conditions:\r
10 // \r
11 // The above copyright notice and this permission notice shall be\r
12 // included in all copies or substantial portions of the Software.\r
13 //\r
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
17 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
18 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
19 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21 \r
22 \r
23 SortableTableGridEx = Class.create();\r
24 Object.extend(Object.extend(SortableTableGridEx.prototype, SortableTable.prototype), {\r
25 \r
26   initialize:  function(element) {\r
27     this.element = $(element);\r
28     Element.setStyle(this.element, {visibility: 'hidden'});\r
29 \r
30     var options = Object.extend({\r
31       ascImg: false,\r
32       descImg: false,\r
33       handle: false,\r
34       callBack: false\r
35     }, arguments[1] || {});\r
36     this.options = options;\r
37     \r
38     this.handle = options.handle ? $(options.handle) : this.element.rows[0];\r
39     this.ascImg = options.ascImg ? options.ascImg : 'images/spinelz/sortableTable_down.gif';\r
40     this.descImg = options.descImg ? options.descImg : 'images/spinelz/sortableTable_up.gif';\r
41     this.sortType = options.sortType;\r
42     \r
43     this.currentOrder = 'default';\r
44     this.defaultOrder = new Array();\r
45     for (var i = 0; i < this.element.rows.length; i++) {\r
46       this.defaultOrder[i] = this.element.rows[i];\r
47     }    \r
48     this.addEvents();\r
49     Element.setStyle(this.element, {visibility: 'visible'});\r
50   },\r
51   \r
52   addEvents: function() {\r
53     var rows = this.handle.rows[0];\r
54     if (!rows) return;\r
55     \r
56     for (var i = 0; i < rows.cells.length; i++) {\r
57       Element.cleanWhitespace(rows.cells[i]);\r
58       Element.cleanWhitespace(rows.cells[i].firstChild);\r
59       this.addEvent(rows.cells[i].firstChild.firstChild);  \r
60     }\r
61   },\r
62   \r
63   addEvent: function(handle) {\r
64     if (handle) {\r
65       handle.style.cursor = 'pointer';\r
66       Event.observe(handle, 'click', this.sortTable.bindAsEventListener(this));\r
67     }\r
68   },\r
69   \r
70   sortTable: function(event) {\r
71     var target = Event.element(event);\r
72     if (target.tagName.toUpperCase() == 'IMG') {\r
73       target = target.parentNode;\r
74     }\r
75     var cell = target;\r
76     if (cell.tagName.toUpperCase() != 'TD' && cell.tagName.toUpperCase() != 'TH') {\r
77       cell = Element.getParentByTagName(['TD','TH'], cell);\r
78     }\r
79     var tmpColumn = cell.cellIndex;\r
80     if (this.targetColumn != tmpColumn) {\r
81       this.currentOrder = 'default';\r
82     }\r
83     this.targetColumn = tmpColumn;\r
84     \r
85     var newRows = new Array();\r
86     for (var i = 0; i < this.element.rows.length; i++) {\r
87       newRows[i] = this.element.rows[i];\r
88     }\r
89     if (newRows.length < 1) return;\r
90     \r
91     if (this.currentOrder == 'default') {\r
92       newRows.sort(this.getSortFunc());\r
93       this.currentOrder = 'asc';\r
94       \r
95     } else if (this.currentOrder == 'asc') {\r
96       newRows = newRows.reverse();\r
97       this.currentOrder = 'desc';\r
98     } else if (this.currentOrder == 'desc') {\r
99       newRows = this.defaultOrder;\r
100       this.currentOrder = 'default';\r
101     }\r
102     \r
103     for (var i = 0; i < newRows.length; i++) {\r
104       this.element.tBodies[0].appendChild(newRows[i]);\r
105     }\r
106     \r
107     this.mark(target);\r
108     if (this.options.callBack) this.options.callBack(this.element); \r
109   },\r
110   \r
111   mark: function(cell) {\r
112     var row = this.options.handle ? this.options.handle.rows[0] : this.element.rows[0];\r
113     \r
114     var imgs = row.getElementsByTagName('IMG');\r
115 \r
116     for (var i = 0; i < imgs.length; i++){\r
117       var parent = imgs[i].parentNode;\r
118       parent.removeChild(imgs[i]);\r
119     }\r
120     var imgFile;\r
121     if (this.currentOrder == 'asc') imgFile = this.ascImg;\r
122     else if (this.currentOrder == 'desc') imgFile = this.descImg;\r
123     \r
124     if (imgFile)\r
125       cell.appendChild(Builder.node('IMG', {src: imgFile, alt: 'sortImg'}));\r
126   } \r
127 \r
128 });\r
129 \r