Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /js/common.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 43 - (hide annotations) (download) (as text)
Mon Mar 22 18:14:07 2010 UTC (14 years, 2 months ago) by berupon
File MIME type: application/x-javascript
File size: 17566 byte(s)
indent変更
1 berupon 4
2 berupon 6 // Copyright (c) 2009 Katsuhisa Yuasa <berupon [at] gmail.com>
3     // License http://www.opensource.org/licenses/mit-license.html
4    
5 berupon 4 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 berupon 43 function clearFormElementsValues(form, id) {
19 berupon 4 var idlen = id.length;
20     if (form && form.elements.length) {
21     var elems = form.elements;
22     var len = elems.length;
23     for (var i=0; i<len; ++i) {
24     var ele = elems[i];
25     if (ele.name.length < idlen) {
26     continue;
27     }
28     if (ele.name.substring(0, idlen) == id) {
29 berupon 14 if (ele.nodeName == "INPUT" && ele.type == "checkbox") {
30     ele.checked = false;
31     }else {
32     ele.value = '';
33     }
34 berupon 4 }
35     }
36     }
37     }
38    
39 berupon 43 function findCheckedElement(elems) {
40 berupon 4 if (elems) {
41     return $A(elems).find( function (val, idx) { return val.checked; });
42     }else {
43     return false;
44     }
45     }
46    
47     function searchAncestor(elem, func) {
48     do {
49     if (func(elem.parentNode)) {
50     return elem.parentNode;
51     }
52     }while (elem = elem.parentNode);
53     return false;
54     }
55    
56 berupon 43 function zip2addr(relativePath, zipInput, prefInputName, addrInputName) {
57 berupon 4 var zipCode = zipInput.value.strip();
58     if (zipCode == '') {
59     return;
60     }
61    
62     new Ajax.Request(
63     relativePath + "zip/zip.php",
64     {
65     onSuccess : function(request) {
66     var data = request.responseText.evalJSON();
67     if (data[0]) {
68     var frm = zipInput.form;
69     var prefInput = frm[prefInputName];
70     if (prefInput.type == 'select-one') {
71     selectOptionByText(prefInput, data[6]);
72     }else {
73     }
74     var addrInput = frm[addrInputName];
75     if (addrInput.value.strip() == '') {
76     var str = '';
77     for (var i=6; i<9; ++i) {
78     str += data[i];
79     }
80     addrInput.value = str;
81     }
82     }
83     },
84     onFailure : function() {
85     alert("failed");
86     },
87     "method": "get",
88     "parameters" : "zipcode=" + zipCode
89     }
90     );
91    
92     }
93    
94     // http://daisuke-watanabe.com/12/
95 berupon 43 function addFigure(str) {
96 berupon 4 var num = new String(str).replace(/,/g, "");
97     while (num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
98     return num;
99     }
100    
101 berupon 14 // DOM operation is slow ...
102 berupon 43 function mergeRepeativeValueRows(table, rowRange, columnIndexs) {
103 berupon 4 columnIndexs.sort(function(a,b) {
104     return a <= b ? 1 : -1;
105     });
106     var beginRowIndex = rowRange[0];
107     var endRowIndex = rowRange[1];
108     if (endRowIndex == -1) {
109     endRowIndex = table.rows.length;
110     }
111 berupon 14
112 berupon 4 for (i=0; i<columnIndexs.length; ++i) {
113     var ci = columnIndexs[i];
114     // count
115 berupon 14 var spanCounts = [];
116 berupon 4 var spanCount = 1;
117 berupon 18 if (beginRowIndex >= table.rows.length) {
118     continue;
119     }
120 berupon 14 var prevRow = table.rows[beginRowIndex];
121     var prevRowCellsLength = prevRow.cells.length;
122     if (ci < prevRowCellsLength) {
123     var prevCell = prevRow.cells[ci];
124     var prevCellTagName = prevCell.tagName;
125     var prevCellInnerHTML = prevCell.innerHTML;
126     }
127 berupon 4 for (k=beginRowIndex+1; k<endRowIndex; ++k) {
128     var curRow = table.rows[k];
129 berupon 14 var bContinue = false;
130     var curRowCellsLength = curRow.cells.length;
131     if (ci < curRowCellsLength) {
132 berupon 4 var curCell = curRow.cells[ci];
133 berupon 14 var curCellTagName = curCell.tagName;
134     var curCellInnerHTML = curCell.innerHTML;
135     if (ci < prevRowCellsLength) {
136     if (prevCellTagName == curCellTagName && prevCellInnerHTML == curCellInnerHTML) {
137 berupon 4 ++spanCount;
138 berupon 14 bContinue = true;
139 berupon 4 }
140     }
141 berupon 14 prevCellTagName = curCellTagName;
142     prevCellInnerHTML = curCellInnerHTML;
143 berupon 4 }
144 berupon 14 prevRowCellsLength = curRowCellsLength;
145     if (bContinue) {
146     continue;
147     }
148 berupon 4 spanCounts.push(spanCount);
149     spanCount = 1;
150     }
151     spanCounts.push(spanCount);
152     // merge
153     var rowIdx = beginRowIndex;
154     for (k=0; k<spanCounts.length; ++k) {
155     var spanCount = spanCounts[k];
156     if (spanCount == 1) {
157     ++rowIdx;
158     }else {
159     for (l=rowIdx+1; l<rowIdx+spanCount; ++l) {
160     table.rows[l].deleteCell(ci);
161     }
162     table.rows[rowIdx].cells[ci].rowSpan = spanCount;
163     rowIdx += spanCount;
164     }
165     }
166     }
167     }
168    
169 berupon 43 function copyTableRow(from, to) {
170 berupon 4 if (Prototype.Browser.IE) {
171     for (var i=0; i<from.cells.length; ++i) {
172     var td = to.insertCell(-1);
173     td.innerHTML = from.cells[i].innerHTML;
174     }
175     }else {
176     to.innerHTML = from.innerHTML;
177     }
178     }
179    
180     // from : http://mr-goofy.blogspot.com/2009/06/getelementsbyclassname_16.html
181     /***********************************************
182     * ������������������������������������������Element���������
183     ***********************************************/
184     var getElementsByClassName = (function(classname, tagname){
185    
186     //������������������������function���������
187     var regClass = function(element, classname){
188     var classElements = new Array();
189     var regexe = new RegExp("\\b" + classname + "\\b");
190     for( i = 0; i < element.length; i++ ) {
191     if( regexe.exec(element[i].className) ) {
192     classElements.push(element[i]);
193     }
194     }
195     return classElements;
196     }
197     //IE���������
198     if( document.all ){
199     return function(classname, tagname){
200     if (arguments.length == 1) {
201     element = document.all;
202     }
203     else{
204     element = document.getElementsByTagName(tagname);
205     }
206     return regClass(element,classname);
207     };
208     }
209     //IE���������������
210     else{
211     return function(classname, tagname){
212     if (arguments.length == 1) {
213     tagname = "*";
214     }
215     var element = document.getElementsByTagName(tagname);
216     return regClass(element,classname);
217     };
218     }
219    
220     })();
221    
222 berupon 43 function radioInputTag($name, $value, $checked) {
223 berupon 4 var txt = "<input type='radio' name='" + $name + "' value='" + $value + "' ";
224     if ($checked) {
225     txt += "checked";
226     }
227     txt += " />";
228     return txt;
229     }
230    
231 berupon 43 function findByMember(arr, name, value) {
232 berupon 41 for (var i=0; i<arr.length; ++i) {
233     if (arr[i][name] == value) {
234     return arr[i];
235     }
236     }
237     return null;
238     }
239 berupon 4
240 berupon 43 function sortHash(hash, cmp) {
241 berupon 4 var arr = [];
242     var keys = hash.keys();
243     for (var i=0; i<keys.length; ++i) {
244     var key = keys[i];
245     var value = hash.get(key);
246     var obj = {"key":key, "value":value};
247     arr.push(obj);
248     }
249     arr.sort(function (a,b) { return cmp(a.value, b.value); });
250     var ret = new Hash();
251     for (var i=0; i<arr.length; ++i) {
252     ret.set(arr[i].key, arr[i].value);
253     }
254     return ret;
255     }
256    
257     // http://doc.infosnel.nl/javascript_trim.html
258 berupon 43 function trim(s) {
259 berupon 4 var l=0; var r=s.length -1;
260     while(l < s.length && s[l] == ' ')
261     { l++; }
262     while(r > l && s[r] == ' ')
263     { r-=1; }
264     return s.substring(l, r+1);
265     }
266    
267    
268 berupon 43 function splitTrim(str, separator) {
269 berupon 4 var arr = str.split(separator);
270     for (var i=0; i<arr.length; ++i) {
271     arr[i] = trim(arr[i]);
272     }
273     return arr;
274     }
275    
276     // original : http://blog.mikuriya.biz/archives/286
277 berupon 10 // SELECT������������������������OPTION���������SELECT ������������������
278 berupon 4 function moveSelectedOptions(fromSelect, toSelect) {
279     var from_options = fromSelect.options;
280     var to_options = toSelect.options;
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 berupon 37
293 berupon 4 if (addFlag) {
294 berupon 37 toSelect.appendChild(from_options[i])
295 berupon 4 }
296     --i;
297     }
298     }
299    
300 berupon 10 // SELECT������������������������OPTION������������������
301 berupon 4 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 berupon 43 function getSelectedOptionValue(select) {
329 berupon 14 var selValue = null;
330     if (select.selectedIndex != -1) {
331     selValue = select.options[select.selectedIndex].value;
332     }
333     return selValue;
334     }
335    
336 berupon 43 function selectOptionByText(select, text) {
337 berupon 14 var options = select.options;
338     for (var i=0; i<select.length; ++i) {
339     if (options[i].text == text) {
340     select.selectedIndex = i;
341     break;
342     }
343     }
344     }
345    
346 berupon 43 function createSelectOptionTags(arr, selectedKey) {
347 berupon 14 var str = '';
348     str += "<option value=''></option>";
349     for (var i in arr) {
350     var selected = '';
351     if (i == selectedKey) {
352     selected = 'selected';
353     }
354     var value = arr[i];
355 berupon 22 str += "<option value='" + String(i).htmlspecialchars() + "' " + selected + ">" + String(value).escapeHTML() + "</option>";
356 berupon 14 }
357     return str;
358     }
359    
360 berupon 43 function setSelectOptions(select, arr) {
361 berupon 14 var selValue = getSelectedOptionValue(select);
362     var options = select.options;
363     options.length = 0;
364     options[options.length] = new Option();
365 berupon 22 if (arr.length == 0) {
366     return;
367     }
368    
369 berupon 14 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 berupon 43 function createCheckboxTag(name, value, label, checked) {
378 berupon 25 var str = "<input type='checkbox' name='" + name + "' value='" + String(value).htmlspecialchars() + "'";
379 berupon 14 if (checked) {
380     str += " checked";
381     }
382 berupon 25 str += ">";
383     if (label) {
384     str = "<label>" + str + String(label).escapeHTML() + "</label>";
385     }
386 berupon 14 return str;
387     }
388    
389 berupon 43 function createCheckboxTags(name, arr, selectedKeys, separator) {
390 berupon 29 if (arr.length == 0) {
391     return '';
392     }
393 berupon 14 str = '';
394    
395     if (separator == undefined) {
396     separator = "\n";
397     }
398     for (var i in arr) {
399     checked = '';
400     if (Object.isArray(selectedKeys)) {
401     if (selectedKeys.indexOf(i) != -1) {
402     checked = 'checked';
403     }
404     }
405 berupon 22 str += "<label><input type='checkbox' name='" + name + "[]' value='" + i.htmlspecialchars() + "' " + checked + ">" + arr[i].escapeHTML() + "</label>";
406 berupon 14 str += separator;
407     }
408     return str;
409     }
410    
411 berupon 43 function toggleVisibility(elem) {
412 berupon 4 if (elem.style.visibility == 'hidden') {
413     elem.style.visibility = 'visible';
414     // setAutoFocus();
415     }else {
416     elem.style.visibility = 'hidden';
417     }
418    
419     }
420    
421     function collectMember(arr, name) {
422     var values = [];
423     for (var i=0; i<arr.length; ++i) {
424     values.push(arr[i][name]);
425     }
426     return values;
427     }
428    
429 berupon 10 // http://p2b.jp/1149066600
430     function windowEvent() {
431     if (window.event) return window.event;
432     var caller = arguments.callee.caller;
433     while (caller) {
434     var ob = caller.arguments[0];
435     if (ob && ob.constructor == MouseEvent) return ob;
436     caller = caller.caller;
437     }
438     return null;
439     }
440    
441     // ���������������������������������������������DOM��������������� template������������������������������������������
442     //
443     // ������������
444     // # ���������������������������������������������������
445     // #hoge{ ���hoge������������������
446     // ������������������#key1 ������������������������������#key2 ��������������������������� key1 ������������������
447     // #} ������������������������
448     // ��������� data ������ hoge ���������������������������key���������������������������������
449     //
450     function modifyTemplate(src, data) {
451     var r = /^#/gm;
452     var r2 = /^[^\s]+/g;
453     var indexes = [];
454    
455     while (r.test(src)) {
456     indexes.push(r.lastIndex);
457     }
458    
459     if (indexes.length == 0) {
460     return src;
461     }
462    
463     function attachParts(pieces, parts, setting) {
464     if (!setting) {
465     for (var j=0; j<parts.length; ++j) {
466     var part = parts[j];
467     pieces.push(part.text);
468     }
469     }else {
470     for (var i=0; i<setting.length; ++i) {
471     var name = setting[i];
472     for (var j=0; j<parts.length; ++j) {
473     var part = parts[j];
474     if (part.name == name) {
475     pieces.push(part.text);
476     break;
477     }
478     }
479     }
480     }
481     }
482    
483     var defName = null;
484     var pos = 0;
485     var pieces = [];
486     var piece = src.substr(0, indexes[0] - 1);
487     pieces.push(piece);
488     var parts = [];
489     for (var i=0; i<indexes.length-1; ++i) {
490     var start = indexes[i];
491     var end = indexes[i+1] - 1;
492     piece = src.substr(start, end-start);
493     r2.lastIndex = 0;
494     var ret = r2.exec(piece);
495     if (!ret || !ret.length) {
496     return false;
497     }
498     var key = ret[0];
499     if (!defName) {
500     if (key.charAt(key.length-1) != '{') {
501     return false;
502     }
503     defName = key.substr(0, key.length-1);
504     }else {
505     if (key != '}') {
506     var part = piece.substr(r2.lastIndex, piece.length-1);
507     parts.push({name:key, text:part});
508     }else {
509     attachParts(pieces, parts, data[defName]);
510     parts.clear();
511     defName = null;
512     pieces.push(piece.substr(1,piece.length));
513     }
514     }
515     }
516     if (parts.length) {
517     attachParts(pieces, parts, data[defName]);
518     }
519     var start = indexes[indexes.length-1] + 1;
520     var piece = src.substr(start, src.length-start);
521     pieces.push(piece);
522     return pieces.join("");
523     }
524    
525 berupon 14 function recordsToArray(recs, keyName, valueName) {
526     var ret = {};
527     for (var i=0; i<recs.length; ++i) {
528     var rec = recs[i];
529     var key = rec[keyName];
530     var value = rec[valueName];
531     ret[key] = value;
532     }
533     return ret;
534     }
535    
536     // maybe re-inventing wheel?
537     function searchDOM(elem, func) {
538     var elems = elem.childNodes;
539     for (var i=0,len=elems.length; i<len; ++i) {
540     var e = elems[i];
541     if (func(e)) {
542     return e;
543     }
544     var ret = searchDOM(e, func);
545     if (ret) {
546     return ret;
547     }
548     }
549     return null;
550     }
551    
552     // ���������node���key���������object tree������������
553     function distributeElements(elements, keys) {
554     var arr = {};
555     for (var i=0; i<elements.length; ++i) {
556     var e = elements[i];
557     var tmp = arr;
558     for (var j=0; j<keys.length-1; ++j) {
559     var key = e.getAttribute(keys[j]);
560     if (!(key in tmp)) {
561     tmp[key] = {};
562     }
563     tmp = tmp[key];
564     }
565     var key = e.getAttribute(keys[keys.length-1]);
566     tmp[key] = e;
567     }
568     return arr;
569     }
570    
571 berupon 15 // http://bytes.com/topic/javascript/answers/715567-deep-cloning-object
572     function clone_obj(obj) {
573     var c = obj instanceof Array ? [] : {};
574     for (var i in obj) {
575     var prop = obj[i];
576     if (typeof prop == 'object') {
577     if (prop instanceof Array) {
578     c[i] = [];
579     for (var j = 0; j < prop.length; j++) {
580     if (typeof prop[j] != 'object') {
581     c[i].push(prop[j]);
582     } else {
583     c[i].push(clone_obj(prop[j]));
584     }
585     }
586     }else {
587     c[i] = clone_obj(prop);
588     }
589     }else {
590     c[i] = prop;
591     }
592     }
593     return c;
594     }
595    
596 berupon 22 // http://serennz.sakura.ne.jp/sb/log/eid73.html
597     String.prototype.htmlspecialchars = function() {
598     ch = this + "";
599     ch = ch.replace(/&/g,"&amp;") ;
600 berupon 31 ch = ch.replace(/"/g,"&quot;") ; // "
601     ch = ch.replace(/'/g,"&#039;") ; // '
602 berupon 22 ch = ch.replace(/</g,"&lt;") ;
603     ch = ch.replace(/>/g,"&gt;") ;
604     return ch ;
605     }
606    
607 berupon 26 function escapeHTML(str) {
608     if (typeof str == String) {
609     return str.escapeHTML();
610     }else {
611     return "";
612     }
613     }
614    
615     function htmlspecialchars(str) {
616     if (typeof str == String) {
617     return str.htmlspecialchars();
618     }else {
619     return "";
620     }
621     }
622 berupon 31
623     // innerHTML������������������������������������������Firefox������������������������������������������������������������������
624     // ������������������Node���������Node���������
625     function createNodeWithScript(html) {
626     var div = document.createElement("div");
627 berupon 36
628     // http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
629     // http://social.msdn.microsoft.com/forums/en-US/iewebdevelopment/thread/33fd33f7-e857-4f6f-978e-fd486eba7174/
630     html = "<input type='hidden' />\n" + html;
631    
632 berupon 31 div.innerHTML = html;
633     if (Prototype.Browser.IE || Prototype.Browser.WebKit || Prototype.Browser.Opera) {
634     var texts = new Array();
635     var scripts = div.getElementsByTagName("script");
636     for (var i=0; i<scripts.length; ++i) {
637     var script = scripts[i];
638     texts.push(script.text);
639     }
640     var script = document.createElement("script");
641     script.text = texts.join("\r");
642     div.appendChild(script);
643     }
644     return div;
645     }
646    
647 berupon 39 function getElementsByCssSelector(root, expr) {
648 berupon 33 return (new Selector(expr)).findElements(root);
649     }
650    
651 berupon 39 function getParentElementByCssSelector(elem, expr) {
652     var s = new Selector(expr);
653     while (elem = elem.parentNode) {
654     if (s.match(elem)) {
655     return elem;
656     }
657     }
658     return null;
659     }
660 berupon 33
661 berupon 39
662 berupon 37 // http://phpjs.org/functions/compact:371
663     function compact ( ) {
664     // http://kevin.vanzonneveld.net
665     // + original by: Waldo Malqui Silva
666     // + tweaked by: Jack
667     // + input by: Brett Zamir (http://brett-zamir.me)
668     // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
669     // * example 1: var1 = 'Kevin'; var2 = 'van'; var3 = 'Zonneveld';
670     // * example 1: compact('var1', 'var2', 'var3');
671     // * returns 1: {'var1': 'Kevin', 'var2': 'van', 'var3': 'Zonneveld'}
672    
673     var matrix = {}, that = this;
674 berupon 33
675 berupon 37 var process = function ( value ) {
676     var i = 0, l = value.length, key_value = '';
677     for (i = 0; i < l; i++) {
678     key_value = value [ i ];
679     if (key_value instanceof Array) {
680     process( key_value );
681     } else {
682     if (typeof that.window[key_value] !== 'undefined') {
683     matrix[key_value] = that.window[key_value];
684     }
685     }
686     }
687     return true;
688     };
689    
690     process(arguments);
691     return matrix;
692     }
693    
694    
695    
696    

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