Develop and Download Open Source Software

Browse Subversion Repository

Contents of /js/common.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 14 - (show annotations) (download) (as text)
Tue Dec 22 15:50:45 2009 UTC (14 years, 5 months ago) by berupon
File MIME type: application/x-javascript
File size: 14151 byte(s)
表示方式の変更
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 if (ele.nodeName == "INPUT" && ele.type == "checkbox") {
31 ele.checked = false;
32 }else {
33 ele.value = '';
34 }
35 }
36 }
37 }
38 }
39
40 function findCheckedElement(elems)
41 {
42 if (elems) {
43 return $A(elems).find( function (val, idx) { return val.checked; });
44 }else {
45 return false;
46 }
47 }
48
49 function searchAncestor(elem, func) {
50 do {
51 if (func(elem.parentNode)) {
52 return elem.parentNode;
53 }
54 }while (elem = elem.parentNode);
55 return false;
56 }
57
58 function zip2addr(relativePath, zipInput, prefInputName, addrInputName)
59 {
60 var zipCode = zipInput.value.strip();
61 if (zipCode == '') {
62 return;
63 }
64
65 new Ajax.Request(
66 relativePath + "zip/zip.php",
67 {
68 onSuccess : function(request) {
69 var data = request.responseText.evalJSON();
70 if (data[0]) {
71 var frm = zipInput.form;
72 var prefInput = frm[prefInputName];
73 if (prefInput.type == 'select-one') {
74 selectOptionByText(prefInput, data[6]);
75 }else {
76 }
77 var addrInput = frm[addrInputName];
78 if (addrInput.value.strip() == '') {
79 var str = '';
80 for (var i=6; i<9; ++i) {
81 str += data[i];
82 }
83 addrInput.value = str;
84 }
85 }
86 },
87 onFailure : function() {
88 alert("failed");
89 },
90 "method": "get",
91 "parameters" : "zipcode=" + zipCode
92 }
93 );
94
95 }
96
97 // http://daisuke-watanabe.com/12/
98 function addFigure(str)
99 {
100 var num = new String(str).replace(/,/g, "");
101 while (num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
102 return num;
103 }
104
105 // DOM operation is slow ...
106 function mergeRepeativeValueRows(table, rowRange, columnIndexs)
107 {
108 columnIndexs.sort(function(a,b) {
109 return a <= b ? 1 : -1;
110 });
111 var beginRowIndex = rowRange[0];
112 var endRowIndex = rowRange[1];
113 if (endRowIndex == -1) {
114 endRowIndex = table.rows.length;
115 }
116
117 for (i=0; i<columnIndexs.length; ++i) {
118 var ci = columnIndexs[i];
119 // count
120 var spanCounts = [];
121 var spanCount = 1;
122 var prevRow = table.rows[beginRowIndex];
123 var prevRowCellsLength = prevRow.cells.length;
124 if (ci < prevRowCellsLength) {
125 var prevCell = prevRow.cells[ci];
126 var prevCellTagName = prevCell.tagName;
127 var prevCellInnerHTML = prevCell.innerHTML;
128 }
129 for (k=beginRowIndex+1; k<endRowIndex; ++k) {
130 var curRow = table.rows[k];
131 var bContinue = false;
132 var curRowCellsLength = curRow.cells.length;
133 if (ci < curRowCellsLength) {
134 var curCell = curRow.cells[ci];
135 var curCellTagName = curCell.tagName;
136 var curCellInnerHTML = curCell.innerHTML;
137 if (ci < prevRowCellsLength) {
138 if (prevCellTagName == curCellTagName && prevCellInnerHTML == curCellInnerHTML) {
139 ++spanCount;
140 bContinue = true;
141 }
142 }
143 prevCellTagName = curCellTagName;
144 prevCellInnerHTML = curCellInnerHTML;
145 }
146 prevRowCellsLength = curRowCellsLength;
147 if (bContinue) {
148 continue;
149 }
150 spanCounts.push(spanCount);
151 spanCount = 1;
152 }
153 spanCounts.push(spanCount);
154 // merge
155 var rowIdx = beginRowIndex;
156 for (k=0; k<spanCounts.length; ++k) {
157 var spanCount = spanCounts[k];
158 if (spanCount == 1) {
159 ++rowIdx;
160 }else {
161 for (l=rowIdx+1; l<rowIdx+spanCount; ++l) {
162 table.rows[l].deleteCell(ci);
163 }
164 table.rows[rowIdx].cells[ci].rowSpan = spanCount;
165 rowIdx += spanCount;
166 }
167 }
168 }
169 }
170
171 function copyTableRow(from, to)
172 {
173 if (Prototype.Browser.IE) {
174 for (var i=0; i<from.cells.length; ++i) {
175 var td = to.insertCell(-1);
176 td.innerHTML = from.cells[i].innerHTML;
177 }
178 }else {
179 to.innerHTML = from.innerHTML;
180 }
181 }
182
183 // from : http://mr-goofy.blogspot.com/2009/06/getelementsbyclassname_16.html
184 /***********************************************
185 * ������������������������������������������Element���������
186 ***********************************************/
187 var getElementsByClassName = (function(classname, tagname){
188
189 //������������������������function���������
190 var regClass = function(element, classname){
191 var classElements = new Array();
192 var regexe = new RegExp("\\b" + classname + "\\b");
193 for( i = 0; i < element.length; i++ ) {
194 if( regexe.exec(element[i].className) ) {
195 classElements.push(element[i]);
196 }
197 }
198 return classElements;
199 }
200 //IE���������
201 if( document.all ){
202 return function(classname, tagname){
203 if (arguments.length == 1) {
204 element = document.all;
205 }
206 else{
207 element = document.getElementsByTagName(tagname);
208 }
209 return regClass(element,classname);
210 };
211 }
212 //IE���������������
213 else{
214 return function(classname, tagname){
215 if (arguments.length == 1) {
216 tagname = "*";
217 }
218 var element = document.getElementsByTagName(tagname);
219 return regClass(element,classname);
220 };
221 }
222
223 })();
224
225 function radioInputTag($name, $value, $checked)
226 {
227 var txt = "<input type='radio' name='" + $name + "' value='" + $value + "' ";
228 if ($checked) {
229 txt += "checked";
230 }
231 txt += " />";
232 return txt;
233 }
234
235
236 function sortHash(hash, cmp)
237 {
238 var arr = [];
239 var keys = hash.keys();
240 for (var i=0; i<keys.length; ++i) {
241 var key = keys[i];
242 var value = hash.get(key);
243 var obj = {"key":key, "value":value};
244 arr.push(obj);
245 }
246 arr.sort(function (a,b) { return cmp(a.value, b.value); });
247 var ret = new Hash();
248 for (var i=0; i<arr.length; ++i) {
249 ret.set(arr[i].key, arr[i].value);
250 }
251 return ret;
252 }
253
254 // http://doc.infosnel.nl/javascript_trim.html
255 function trim(s)
256 {
257 var l=0; var r=s.length -1;
258 while(l < s.length && s[l] == ' ')
259 { l++; }
260 while(r > l && s[r] == ' ')
261 { r-=1; }
262 return s.substring(l, r+1);
263 }
264
265
266 function splitTrim(str, separator)
267 {
268 var arr = str.split(separator);
269 for (var i=0; i<arr.length; ++i) {
270 arr[i] = trim(arr[i]);
271 }
272 return arr;
273 }
274
275 // original : http://blog.mikuriya.biz/archives/286
276 // SELECT������������������������OPTION���������SELECT ������������������
277 function moveSelectedOptions(fromSelect, toSelect) {
278 var from_options = fromSelect.options;
279 var to_options = toSelect.options;
280
281 for (var i=0; i<from_options.length; ++i) {
282 if (!from_options[i].selected || !from_options[i].value) {
283 continue;
284 }
285 var addFlag = true;
286 for (var j=0; j<to_options.length; ++j) {
287 if (to_options[j].value == from_options[i].value) {
288 addFlag = false;
289 break;
290 }
291 }
292
293 if (addFlag) {
294 to_options[to_options.length] = from_options[i];
295 }
296 --i;
297 }
298 }
299
300 // SELECT������������������������OPTION������������������
301 function relocateSelectedOptions(select, dir) {
302 var options = select.options;
303 if (dir == 0) {
304 return;
305 }
306 if (dir < 0) {
307 for (var i=0, len=options.length; i<len; ++i) {
308 if (options[i].selected) {
309 if (i+dir < 0) {
310 break;
311 }
312 select.insertBefore(options[i], options[i+dir]);
313 }
314 }
315 }else {
316 for (var len=options.length,i=len-1; i>=0; --i) {
317 if (options[i].selected) {
318 if (i+dir >= len) {
319 break;
320 }
321 select.insertBefore(options[i], options[i+dir].nextSibling);
322 }
323 }
324 }
325
326 }
327
328 function getSelectedOptionValue(select)
329 {
330 var selValue = null;
331 if (select.selectedIndex != -1) {
332 selValue = select.options[select.selectedIndex].value;
333 }
334 return selValue;
335 }
336
337 function selectOptionByText(select, text)
338 {
339 var options = select.options;
340 for (var i=0; i<select.length; ++i) {
341 if (options[i].text == text) {
342 select.selectedIndex = i;
343 break;
344 }
345 }
346 }
347
348 function createSelectOptionTags(arr, selectedKey)
349 {
350 var str = '';
351 str += "<option value=''></option>";
352 for (var i in arr) {
353 var selected = '';
354 if (i == selectedKey) {
355 selected = 'selected';
356 }
357 var value = arr[i];
358 str += "<option value='" + i + "' " + selected + ">" + value + "</option>";
359 }
360 return str;
361 }
362
363 function setSelectOptions(select, arr)
364 {
365 var selValue = getSelectedOptionValue(select);
366 var options = select.options;
367 options.length = 0;
368 options[options.length] = new Option();
369 for (var i in arr) {
370 var value = arr[i]
371 var option = new Option(value, i);
372 option.selected = (value == selValue);
373 options[options.length] = option;
374 }
375 }
376
377 function createCheckboxTag(name, value, label, checked)
378 {
379 var str = "<label><input type='checkbox' name='" + name + "' value='" + value + "'";
380 if (checked) {
381 str += " checked";
382 }
383 str += ">" + label + "</label>";
384 return str;
385 }
386
387 function createCheckboxTags(name, arr, selectedKeys, separator)
388 {
389 str = '';
390
391 if (separator == undefined) {
392 separator = "\n";
393 }
394
395 for (var i in arr) {
396 checked = '';
397 if (Object.isArray(selectedKeys)) {
398 if (selectedKeys.indexOf(i) != -1) {
399 checked = 'checked';
400 }
401 }
402 str += "<label><input type='checkbox' name='" + name + "[]' value='" + i + "' " + checked + ">" + arr[i] + "</label>";
403 str += separator;
404 }
405 return str;
406 }
407
408 function toggleVisibility(elem)
409 {
410 if (elem.style.visibility == 'hidden') {
411 elem.style.visibility = 'visible';
412 // setAutoFocus();
413 }else {
414 elem.style.visibility = 'hidden';
415 }
416
417 }
418
419 function collectMember(arr, name) {
420 var values = [];
421 for (var i=0; i<arr.length; ++i) {
422 values.push(arr[i][name]);
423 }
424 return values;
425 }
426
427 // http://p2b.jp/1149066600
428 function windowEvent() {
429 if (window.event) return window.event;
430 var caller = arguments.callee.caller;
431 while (caller) {
432 var ob = caller.arguments[0];
433 if (ob && ob.constructor == MouseEvent) return ob;
434 caller = caller.caller;
435 }
436 return null;
437 }
438
439 // ���������������������������������������������DOM��������������� template������������������������������������������
440 //
441 // ������������
442 // # ���������������������������������������������������
443 // #hoge{ ���hoge������������������
444 // ������������������#key1 ������������������������������#key2 ��������������������������� key1 ������������������
445 // #} ������������������������
446 // ��������� data ������ hoge ���������������������������key���������������������������������
447 //
448 function modifyTemplate(src, data) {
449 var r = /^#/gm;
450 var r2 = /^[^\s]+/g;
451 var indexes = [];
452
453 while (r.test(src)) {
454 indexes.push(r.lastIndex);
455 }
456
457 if (indexes.length == 0) {
458 return src;
459 }
460
461 function attachParts(pieces, parts, setting) {
462 if (!setting) {
463 for (var j=0; j<parts.length; ++j) {
464 var part = parts[j];
465 pieces.push(part.text);
466 }
467 }else {
468 for (var i=0; i<setting.length; ++i) {
469 var name = setting[i];
470 for (var j=0; j<parts.length; ++j) {
471 var part = parts[j];
472 if (part.name == name) {
473 pieces.push(part.text);
474 break;
475 }
476 }
477 }
478 }
479 }
480
481 var defName = null;
482 var pos = 0;
483 var pieces = [];
484 var piece = src.substr(0, indexes[0] - 1);
485 pieces.push(piece);
486 var parts = [];
487 for (var i=0; i<indexes.length-1; ++i) {
488 var start = indexes[i];
489 var end = indexes[i+1] - 1;
490 piece = src.substr(start, end-start);
491 r2.lastIndex = 0;
492 var ret = r2.exec(piece);
493 if (!ret || !ret.length) {
494 return false;
495 }
496 var key = ret[0];
497 if (!defName) {
498 if (key.charAt(key.length-1) != '{') {
499 return false;
500 }
501 defName = key.substr(0, key.length-1);
502 }else {
503 if (key != '}') {
504 var part = piece.substr(r2.lastIndex, piece.length-1);
505 parts.push({name:key, text:part});
506 }else {
507 attachParts(pieces, parts, data[defName]);
508 parts.clear();
509 defName = null;
510 pieces.push(piece.substr(1,piece.length));
511 }
512 }
513 }
514 if (parts.length) {
515 attachParts(pieces, parts, data[defName]);
516 }
517 var start = indexes[indexes.length-1] + 1;
518 var piece = src.substr(start, src.length-start);
519 pieces.push(piece);
520 return pieces.join("");
521 }
522
523 syncLoad = (function() {
524
525 var cache = {};
526
527 return function (url, useCache) {
528 if (useCache && url in cache) {
529 return cache[url];
530 }
531
532 var ret = false;
533 new Ajax.Request(
534 url,
535 {
536 "method" : "get",
537 "parameters" : {},
538 "onSuccess": function(transport) {
539 ret = transport.responseText;
540 cache[url] = ret;
541 },
542 "onFailure": function () {
543 ret = false;
544 },
545 "asynchronous" : false
546 }
547 );
548 return ret;
549 }
550 })();
551
552 function recordsToArray(recs, keyName, valueName) {
553 var ret = {};
554 for (var i=0; i<recs.length; ++i) {
555 var rec = recs[i];
556 var key = rec[keyName];
557 var value = rec[valueName];
558 ret[key] = value;
559 }
560 return ret;
561 }
562
563 // maybe re-inventing wheel?
564 function searchDOM(elem, func) {
565 var elems = elem.childNodes;
566 for (var i=0,len=elems.length; i<len; ++i) {
567 var e = elems[i];
568 if (func(e)) {
569 return e;
570 }
571 var ret = searchDOM(e, func);
572 if (ret) {
573 return ret;
574 }
575 }
576 return null;
577 }
578
579 // ���������node���key���������object tree������������
580 function distributeElements(elements, keys) {
581 var arr = {};
582 for (var i=0; i<elements.length; ++i) {
583 var e = elements[i];
584 var tmp = arr;
585 for (var j=0; j<keys.length-1; ++j) {
586 var key = e.getAttribute(keys[j]);
587 if (!(key in tmp)) {
588 tmp[key] = {};
589 }
590 tmp = tmp[key];
591 }
592 var key = e.getAttribute(keys[keys.length-1]);
593 tmp[key] = e;
594 }
595 return arr;
596 }
597

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