Develop and Download Open Source Software

Browse Subversion Repository

Contents of /js/common.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10 - (show annotations) (download) (as text)
Tue Dec 8 11:41:01 2009 UTC (14 years, 5 months ago) by berupon
File MIME type: application/x-javascript
File size: 10527 byte(s)
Title表示に失敗していたので修正。
JavaScriptを整理。
1
2 // Copyright (c) 2009 Katsuhisa Yuasa <berupon [at] gmail.com>
3 // License http://www.opensource.org/licenses/mit-license.html
4
5 if (!Object.defineProperty) {
6 if (Object.__defineGetter__ && Object.__defineSetter__) {
7 Object.defineProperty = function (obj, propName, desc) {
8 if (desc.get) {
9 obj.__defineGetter__(propName, desc.get);
10 }
11 if (desc.set) {
12 obj.__defineSetter__(propName, desc.set);
13 }
14 }
15 }
16 }
17
18 function clearFormElementsValues(form, id)
19 {
20 var idlen = id.length;
21 if (form && form.elements.length) {
22 var elems = form.elements;
23 var len = elems.length;
24 for (var i=0; i<len; ++i) {
25 var ele = elems[i];
26 if (ele.name.length < idlen) {
27 continue;
28 }
29 if (ele.name.substring(0, idlen) == id) {
30 ele.value = '';
31 }
32 }
33 }
34 }
35
36 function findCheckedElement(elems)
37 {
38 if (elems) {
39 return $A(elems).find( function (val, idx) { return val.checked; });
40 }else {
41 return false;
42 }
43 }
44
45 function searchAncestor(elem, func) {
46 do {
47 if (func(elem.parentNode)) {
48 return elem.parentNode;
49 }
50 }while (elem = elem.parentNode);
51 return false;
52 }
53
54 function selectOptionByText(select, text)
55 {
56 var options = select.options;
57 for (var i=0; i<select.length; ++i) {
58 if (options[i].text == text) {
59 select.selectedIndex = i;
60 break;
61 }
62 }
63 }
64
65 function zip2addr(relativePath, zipInput, prefInputName, addrInputName)
66 {
67 var zipCode = zipInput.value.strip();
68 if (zipCode == '') {
69 return;
70 }
71
72 new Ajax.Request(
73 relativePath + "zip/zip.php",
74 {
75 onSuccess : function(request) {
76 var data = request.responseText.evalJSON();
77 if (data[0]) {
78 var frm = zipInput.form;
79 var prefInput = frm[prefInputName];
80 if (prefInput.type == 'select-one') {
81 selectOptionByText(prefInput, data[6]);
82 }else {
83 }
84 var addrInput = frm[addrInputName];
85 if (addrInput.value.strip() == '') {
86 var str = '';
87 for (var i=6; i<9; ++i) {
88 str += data[i];
89 }
90 addrInput.value = str;
91 }
92 }
93 },
94 onFailure : function() {
95 alert("failed");
96 },
97 "method": "get",
98 "parameters" : "zipcode=" + zipCode
99 }
100 );
101
102 }
103
104 // http://daisuke-watanabe.com/12/
105 function addFigure(str)
106 {
107 var num = new String(str).replace(/,/g, "");
108 while (num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
109 return num;
110 }
111
112 function mergeRepeativeValueRows(table, rowRange, columnIndexs)
113 {
114 columnIndexs.sort(function(a,b) {
115 return a <= b ? 1 : -1;
116 });
117 var beginRowIndex = rowRange[0];
118 var endRowIndex = rowRange[1];
119 if (endRowIndex == -1) {
120 endRowIndex = table.rows.length;
121 }
122 for (i=0; i<columnIndexs.length; ++i) {
123 var ci = columnIndexs[i];
124 // count
125 var spanCounts = new Array();
126 var spanCount = 1;
127 for (k=beginRowIndex+1; k<endRowIndex; ++k) {
128 var prevRow = table.rows[k-1];
129 var curRow = table.rows[k];
130 if (1
131 && ci < prevRow.cells.length
132 && ci < curRow.cells.length
133 ) {
134 var prevCell = prevRow.cells[ci];
135 var curCell = curRow.cells[ci];
136 if (prevCell.tagName == "TD" && curCell.tagName == "TD") {
137 var prevVal = prevCell.innerHTML;
138 var curVal = curCell.innerHTML;
139 if (prevVal == curVal) {
140 ++spanCount;
141 continue;
142 }
143 }
144 }
145 spanCounts.push(spanCount);
146 spanCount = 1;
147 }
148 spanCounts.push(spanCount);
149 // merge
150 var rowIdx = beginRowIndex;
151 for (k=0; k<spanCounts.length; ++k) {
152 var spanCount = spanCounts[k];
153 if (spanCount == 1) {
154 ++rowIdx;
155 }else {
156 for (l=rowIdx+1; l<rowIdx+spanCount; ++l) {
157 table.rows[l].deleteCell(ci);
158 }
159 table.rows[rowIdx].cells[ci].rowSpan = spanCount;
160 rowIdx += spanCount;
161 }
162 }
163 }
164 }
165
166 function copyTableRow(from, to)
167 {
168 if (Prototype.Browser.IE) {
169 for (var i=0; i<from.cells.length; ++i) {
170 var td = to.insertCell(-1);
171 td.innerHTML = from.cells[i].innerHTML;
172 }
173 }else {
174 to.innerHTML = from.innerHTML;
175 }
176 }
177
178 // from : http://mr-goofy.blogspot.com/2009/06/getelementsbyclassname_16.html
179 /***********************************************
180 * ������������������������������������������Element���������
181 ***********************************************/
182 var getElementsByClassName = (function(classname, tagname){
183
184 //������������������������function���������
185 var regClass = function(element, classname){
186 var classElements = new Array();
187 var regexe = new RegExp("\\b" + classname + "\\b");
188 for( i = 0; i < element.length; i++ ) {
189 if( regexe.exec(element[i].className) ) {
190 classElements.push(element[i]);
191 }
192 }
193 return classElements;
194 }
195 //IE���������
196 if( document.all ){
197 return function(classname, tagname){
198 if (arguments.length == 1) {
199 element = document.all;
200 }
201 else{
202 element = document.getElementsByTagName(tagname);
203 }
204 return regClass(element,classname);
205 };
206 }
207 //IE���������������
208 else{
209 return function(classname, tagname){
210 if (arguments.length == 1) {
211 tagname = "*";
212 }
213 var element = document.getElementsByTagName(tagname);
214 return regClass(element,classname);
215 };
216 }
217
218 })();
219
220 function radioInputTag($name, $value, $checked)
221 {
222 var txt = "<input type='radio' name='" + $name + "' value='" + $value + "' ";
223 if ($checked) {
224 txt += "checked";
225 }
226 txt += " />";
227 return txt;
228 }
229
230
231 function sortHash(hash, cmp)
232 {
233 var arr = [];
234 var keys = hash.keys();
235 for (var i=0; i<keys.length; ++i) {
236 var key = keys[i];
237 var value = hash.get(key);
238 var obj = {"key":key, "value":value};
239 arr.push(obj);
240 }
241 arr.sort(function (a,b) { return cmp(a.value, b.value); });
242 var ret = new Hash();
243 for (var i=0; i<arr.length; ++i) {
244 ret.set(arr[i].key, arr[i].value);
245 }
246 return ret;
247 }
248
249 // http://doc.infosnel.nl/javascript_trim.html
250 function trim(s)
251 {
252 var l=0; var r=s.length -1;
253 while(l < s.length && s[l] == ' ')
254 { l++; }
255 while(r > l && s[r] == ' ')
256 { r-=1; }
257 return s.substring(l, r+1);
258 }
259
260
261 function splitTrim(str, separator)
262 {
263 var arr = str.split(separator);
264 for (var i=0; i<arr.length; ++i) {
265 arr[i] = trim(arr[i]);
266 }
267 return arr;
268 }
269
270 // original : http://blog.mikuriya.biz/archives/286
271 // SELECT������������������������OPTION���������SELECT ������������������
272 function moveSelectedOptions(fromSelect, toSelect) {
273 var from_options = fromSelect.options;
274 var to_options = toSelect.options;
275
276 for (var i=0; i<from_options.length; ++i) {
277 if (!from_options[i].selected || !from_options[i].value) {
278 continue;
279 }
280 var addFlag = true;
281 for (var j=0; j<to_options.length; ++j) {
282 if (to_options[j].value == from_options[i].value) {
283 addFlag = false;
284 break;
285 }
286 }
287
288 if (addFlag) {
289 to_options[to_options.length] = from_options[i];
290 }
291 --i;
292 }
293 }
294
295 // SELECT������������������������OPTION������������������
296 function relocateSelectedOptions(select, dir) {
297 var options = select.options;
298 if (dir == 0) {
299 return;
300 }
301 if (dir < 0) {
302 for (var i=0, len=options.length; i<len; ++i) {
303 if (options[i].selected) {
304 if (i+dir < 0) {
305 break;
306 }
307 select.insertBefore(options[i], options[i+dir]);
308 }
309 }
310 }else {
311 for (var len=options.length,i=len-1; i>=0; --i) {
312 if (options[i].selected) {
313 if (i+dir >= len) {
314 break;
315 }
316 select.insertBefore(options[i], options[i+dir].nextSibling);
317 }
318 }
319 }
320
321 }
322
323 function toggleVisibility(elem)
324 {
325 if (elem.style.visibility == 'hidden') {
326 elem.style.visibility = 'visible';
327 // setAutoFocus();
328 }else {
329 elem.style.visibility = 'hidden';
330 }
331
332 }
333
334 function collectMember(arr, name) {
335 var values = [];
336 for (var i=0; i<arr.length; ++i) {
337 values.push(arr[i][name]);
338 }
339 return values;
340 }
341
342 // http://p2b.jp/1149066600
343 function windowEvent() {
344 if (window.event) return window.event;
345 var caller = arguments.callee.caller;
346 while (caller) {
347 var ob = caller.arguments[0];
348 if (ob && ob.constructor == MouseEvent) return ob;
349 caller = caller.caller;
350 }
351 return null;
352 }
353
354 // ���������������������������������������������DOM��������������� template������������������������������������������
355 //
356 // ������������
357 // # ���������������������������������������������������
358 // #hoge{ ���hoge������������������
359 // ������������������#key1 ������������������������������#key2 ��������������������������� key1 ������������������
360 // #} ������������������������
361 // ��������� data ������ hoge ���������������������������key���������������������������������
362 //
363 function modifyTemplate(src, data) {
364 var r = /^#/gm;
365 var r2 = /^[^\s]+/g;
366 var indexes = [];
367
368 while (r.test(src)) {
369 indexes.push(r.lastIndex);
370 }
371
372 if (indexes.length == 0) {
373 return src;
374 }
375
376 function attachParts(pieces, parts, setting) {
377 if (!setting) {
378 for (var j=0; j<parts.length; ++j) {
379 var part = parts[j];
380 pieces.push(part.text);
381 }
382 }else {
383 for (var i=0; i<setting.length; ++i) {
384 var name = setting[i];
385 for (var j=0; j<parts.length; ++j) {
386 var part = parts[j];
387 if (part.name == name) {
388 pieces.push(part.text);
389 break;
390 }
391 }
392 }
393 }
394 }
395
396 var defName = null;
397 var pos = 0;
398 var pieces = [];
399 var piece = src.substr(0, indexes[0] - 1);
400 pieces.push(piece);
401 var parts = [];
402 for (var i=0; i<indexes.length-1; ++i) {
403 var start = indexes[i];
404 var end = indexes[i+1] - 1;
405 piece = src.substr(start, end-start);
406 r2.lastIndex = 0;
407 var ret = r2.exec(piece);
408 if (!ret || !ret.length) {
409 return false;
410 }
411 var key = ret[0];
412 if (!defName) {
413 if (key.charAt(key.length-1) != '{') {
414 return false;
415 }
416 defName = key.substr(0, key.length-1);
417 }else {
418 if (key != '}') {
419 var part = piece.substr(r2.lastIndex, piece.length-1);
420 parts.push({name:key, text:part});
421 }else {
422 attachParts(pieces, parts, data[defName]);
423 parts.clear();
424 defName = null;
425 pieces.push(piece.substr(1,piece.length));
426 }
427 }
428 }
429 if (parts.length) {
430 attachParts(pieces, parts, data[defName]);
431 }
432 var start = indexes[indexes.length-1] + 1;
433 var piece = src.substr(start, src.length-start);
434 pieces.push(piece);
435 return pieces.join("");
436 }
437

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26