Develop and Download Open Source Software

Browse Subversion Repository

Contents of /js/common.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 41 - (show annotations) (download) (as text)
Fri Jan 22 14:20:16 2010 UTC (14 years, 4 months ago) by berupon
File MIME type: application/x-javascript
File size: 17584 byte(s)
ポップアップをプログラムで作成するのではなくCSS指定で最初から画面に隠して用意するように変更。
その方がプログラムが単純になる。

伝票編集画面から事務所やユーザーの一覧表示を開けるようにして、
そこで選択したら編集画面に選択したのが反映されるように機能追加。
併せて入力補助機能の修正。

HTMLのコードが横に長いと見難い場合があるのでインデント。
(縦に長くなってしまうけれど)
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 if (beginRowIndex >= table.rows.length) {
123 continue;
124 }
125 var prevRow = table.rows[beginRowIndex];
126 var prevRowCellsLength = prevRow.cells.length;
127 if (ci < prevRowCellsLength) {
128 var prevCell = prevRow.cells[ci];
129 var prevCellTagName = prevCell.tagName;
130 var prevCellInnerHTML = prevCell.innerHTML;
131 }
132 for (k=beginRowIndex+1; k<endRowIndex; ++k) {
133 var curRow = table.rows[k];
134 var bContinue = false;
135 var curRowCellsLength = curRow.cells.length;
136 if (ci < curRowCellsLength) {
137 var curCell = curRow.cells[ci];
138 var curCellTagName = curCell.tagName;
139 var curCellInnerHTML = curCell.innerHTML;
140 if (ci < prevRowCellsLength) {
141 if (prevCellTagName == curCellTagName && prevCellInnerHTML == curCellInnerHTML) {
142 ++spanCount;
143 bContinue = true;
144 }
145 }
146 prevCellTagName = curCellTagName;
147 prevCellInnerHTML = curCellInnerHTML;
148 }
149 prevRowCellsLength = curRowCellsLength;
150 if (bContinue) {
151 continue;
152 }
153 spanCounts.push(spanCount);
154 spanCount = 1;
155 }
156 spanCounts.push(spanCount);
157 // merge
158 var rowIdx = beginRowIndex;
159 for (k=0; k<spanCounts.length; ++k) {
160 var spanCount = spanCounts[k];
161 if (spanCount == 1) {
162 ++rowIdx;
163 }else {
164 for (l=rowIdx+1; l<rowIdx+spanCount; ++l) {
165 table.rows[l].deleteCell(ci);
166 }
167 table.rows[rowIdx].cells[ci].rowSpan = spanCount;
168 rowIdx += spanCount;
169 }
170 }
171 }
172 }
173
174 function copyTableRow(from, to)
175 {
176 if (Prototype.Browser.IE) {
177 for (var i=0; i<from.cells.length; ++i) {
178 var td = to.insertCell(-1);
179 td.innerHTML = from.cells[i].innerHTML;
180 }
181 }else {
182 to.innerHTML = from.innerHTML;
183 }
184 }
185
186 // from : http://mr-goofy.blogspot.com/2009/06/getelementsbyclassname_16.html
187 /***********************************************
188 * ������������������������������������������Element���������
189 ***********************************************/
190 var getElementsByClassName = (function(classname, tagname){
191
192 //������������������������function���������
193 var regClass = function(element, classname){
194 var classElements = new Array();
195 var regexe = new RegExp("\\b" + classname + "\\b");
196 for( i = 0; i < element.length; i++ ) {
197 if( regexe.exec(element[i].className) ) {
198 classElements.push(element[i]);
199 }
200 }
201 return classElements;
202 }
203 //IE���������
204 if( document.all ){
205 return function(classname, tagname){
206 if (arguments.length == 1) {
207 element = document.all;
208 }
209 else{
210 element = document.getElementsByTagName(tagname);
211 }
212 return regClass(element,classname);
213 };
214 }
215 //IE���������������
216 else{
217 return function(classname, tagname){
218 if (arguments.length == 1) {
219 tagname = "*";
220 }
221 var element = document.getElementsByTagName(tagname);
222 return regClass(element,classname);
223 };
224 }
225
226 })();
227
228 function radioInputTag($name, $value, $checked)
229 {
230 var txt = "<input type='radio' name='" + $name + "' value='" + $value + "' ";
231 if ($checked) {
232 txt += "checked";
233 }
234 txt += " />";
235 return txt;
236 }
237
238 function findByMember(arr, name, value)
239 {
240 for (var i=0; i<arr.length; ++i) {
241 if (arr[i][name] == value) {
242 return arr[i];
243 }
244 }
245 return null;
246 }
247
248 function sortHash(hash, cmp)
249 {
250 var arr = [];
251 var keys = hash.keys();
252 for (var i=0; i<keys.length; ++i) {
253 var key = keys[i];
254 var value = hash.get(key);
255 var obj = {"key":key, "value":value};
256 arr.push(obj);
257 }
258 arr.sort(function (a,b) { return cmp(a.value, b.value); });
259 var ret = new Hash();
260 for (var i=0; i<arr.length; ++i) {
261 ret.set(arr[i].key, arr[i].value);
262 }
263 return ret;
264 }
265
266 // http://doc.infosnel.nl/javascript_trim.html
267 function trim(s)
268 {
269 var l=0; var r=s.length -1;
270 while(l < s.length && s[l] == ' ')
271 { l++; }
272 while(r > l && s[r] == ' ')
273 { r-=1; }
274 return s.substring(l, r+1);
275 }
276
277
278 function splitTrim(str, separator)
279 {
280 var arr = str.split(separator);
281 for (var i=0; i<arr.length; ++i) {
282 arr[i] = trim(arr[i]);
283 }
284 return arr;
285 }
286
287 // original : http://blog.mikuriya.biz/archives/286
288 // SELECT������������������������OPTION���������SELECT ������������������
289 function moveSelectedOptions(fromSelect, toSelect) {
290 var from_options = fromSelect.options;
291 var to_options = toSelect.options;
292 for (var i=0; i<from_options.length; ++i) {
293 if (!from_options[i].selected || !from_options[i].value) {
294 continue;
295 }
296 var addFlag = true;
297 for (var j=0; j<to_options.length; ++j) {
298 if (to_options[j].value == from_options[i].value) {
299 addFlag = false;
300 break;
301 }
302 }
303
304 if (addFlag) {
305 toSelect.appendChild(from_options[i])
306 }
307 --i;
308 }
309 }
310
311 // SELECT������������������������OPTION������������������
312 function relocateSelectedOptions(select, dir) {
313 var options = select.options;
314 if (dir == 0) {
315 return;
316 }
317 if (dir < 0) {
318 for (var i=0, len=options.length; i<len; ++i) {
319 if (options[i].selected) {
320 if (i+dir < 0) {
321 break;
322 }
323 select.insertBefore(options[i], options[i+dir]);
324 }
325 }
326 }else {
327 for (var len=options.length,i=len-1; i>=0; --i) {
328 if (options[i].selected) {
329 if (i+dir >= len) {
330 break;
331 }
332 select.insertBefore(options[i], options[i+dir].nextSibling);
333 }
334 }
335 }
336
337 }
338
339 function getSelectedOptionValue(select)
340 {
341 var selValue = null;
342 if (select.selectedIndex != -1) {
343 selValue = select.options[select.selectedIndex].value;
344 }
345 return selValue;
346 }
347
348 function selectOptionByText(select, text)
349 {
350 var options = select.options;
351 for (var i=0; i<select.length; ++i) {
352 if (options[i].text == text) {
353 select.selectedIndex = i;
354 break;
355 }
356 }
357 }
358
359 function createSelectOptionTags(arr, selectedKey)
360 {
361 var str = '';
362 str += "<option value=''></option>";
363 for (var i in arr) {
364 var selected = '';
365 if (i == selectedKey) {
366 selected = 'selected';
367 }
368 var value = arr[i];
369 str += "<option value='" + String(i).htmlspecialchars() + "' " + selected + ">" + String(value).escapeHTML() + "</option>";
370 }
371 return str;
372 }
373
374 function setSelectOptions(select, arr)
375 {
376 var selValue = getSelectedOptionValue(select);
377 var options = select.options;
378 options.length = 0;
379 options[options.length] = new Option();
380 if (arr.length == 0) {
381 return;
382 }
383
384 for (var i in arr) {
385 var value = arr[i]
386 var option = new Option(value, i);
387 option.selected = (value == selValue);
388 options[options.length] = option;
389 }
390 }
391
392 function createCheckboxTag(name, value, label, checked)
393 {
394 var str = "<input type='checkbox' name='" + name + "' value='" + String(value).htmlspecialchars() + "'";
395 if (checked) {
396 str += " checked";
397 }
398 str += ">";
399 if (label) {
400 str = "<label>" + str + String(label).escapeHTML() + "</label>";
401 }
402 return str;
403 }
404
405 function createCheckboxTags(name, arr, selectedKeys, separator)
406 {
407 if (arr.length == 0) {
408 return '';
409 }
410 str = '';
411
412 if (separator == undefined) {
413 separator = "\n";
414 }
415 for (var i in arr) {
416 checked = '';
417 if (Object.isArray(selectedKeys)) {
418 if (selectedKeys.indexOf(i) != -1) {
419 checked = 'checked';
420 }
421 }
422 str += "<label><input type='checkbox' name='" + name + "[]' value='" + i.htmlspecialchars() + "' " + checked + ">" + arr[i].escapeHTML() + "</label>";
423 str += separator;
424 }
425 return str;
426 }
427
428 function toggleVisibility(elem)
429 {
430 if (elem.style.visibility == 'hidden') {
431 elem.style.visibility = 'visible';
432 // setAutoFocus();
433 }else {
434 elem.style.visibility = 'hidden';
435 }
436
437 }
438
439 function collectMember(arr, name) {
440 var values = [];
441 for (var i=0; i<arr.length; ++i) {
442 values.push(arr[i][name]);
443 }
444 return values;
445 }
446
447 // http://p2b.jp/1149066600
448 function windowEvent() {
449 if (window.event) return window.event;
450 var caller = arguments.callee.caller;
451 while (caller) {
452 var ob = caller.arguments[0];
453 if (ob && ob.constructor == MouseEvent) return ob;
454 caller = caller.caller;
455 }
456 return null;
457 }
458
459 // ���������������������������������������������DOM��������������� template������������������������������������������
460 //
461 // ������������
462 // # ���������������������������������������������������
463 // #hoge{ ���hoge������������������
464 // ������������������#key1 ������������������������������#key2 ��������������������������� key1 ������������������
465 // #} ������������������������
466 // ��������� data ������ hoge ���������������������������key���������������������������������
467 //
468 function modifyTemplate(src, data) {
469 var r = /^#/gm;
470 var r2 = /^[^\s]+/g;
471 var indexes = [];
472
473 while (r.test(src)) {
474 indexes.push(r.lastIndex);
475 }
476
477 if (indexes.length == 0) {
478 return src;
479 }
480
481 function attachParts(pieces, parts, setting) {
482 if (!setting) {
483 for (var j=0; j<parts.length; ++j) {
484 var part = parts[j];
485 pieces.push(part.text);
486 }
487 }else {
488 for (var i=0; i<setting.length; ++i) {
489 var name = setting[i];
490 for (var j=0; j<parts.length; ++j) {
491 var part = parts[j];
492 if (part.name == name) {
493 pieces.push(part.text);
494 break;
495 }
496 }
497 }
498 }
499 }
500
501 var defName = null;
502 var pos = 0;
503 var pieces = [];
504 var piece = src.substr(0, indexes[0] - 1);
505 pieces.push(piece);
506 var parts = [];
507 for (var i=0; i<indexes.length-1; ++i) {
508 var start = indexes[i];
509 var end = indexes[i+1] - 1;
510 piece = src.substr(start, end-start);
511 r2.lastIndex = 0;
512 var ret = r2.exec(piece);
513 if (!ret || !ret.length) {
514 return false;
515 }
516 var key = ret[0];
517 if (!defName) {
518 if (key.charAt(key.length-1) != '{') {
519 return false;
520 }
521 defName = key.substr(0, key.length-1);
522 }else {
523 if (key != '}') {
524 var part = piece.substr(r2.lastIndex, piece.length-1);
525 parts.push({name:key, text:part});
526 }else {
527 attachParts(pieces, parts, data[defName]);
528 parts.clear();
529 defName = null;
530 pieces.push(piece.substr(1,piece.length));
531 }
532 }
533 }
534 if (parts.length) {
535 attachParts(pieces, parts, data[defName]);
536 }
537 var start = indexes[indexes.length-1] + 1;
538 var piece = src.substr(start, src.length-start);
539 pieces.push(piece);
540 return pieces.join("");
541 }
542
543 function recordsToArray(recs, keyName, valueName) {
544 var ret = {};
545 for (var i=0; i<recs.length; ++i) {
546 var rec = recs[i];
547 var key = rec[keyName];
548 var value = rec[valueName];
549 ret[key] = value;
550 }
551 return ret;
552 }
553
554 // maybe re-inventing wheel?
555 function searchDOM(elem, func) {
556 var elems = elem.childNodes;
557 for (var i=0,len=elems.length; i<len; ++i) {
558 var e = elems[i];
559 if (func(e)) {
560 return e;
561 }
562 var ret = searchDOM(e, func);
563 if (ret) {
564 return ret;
565 }
566 }
567 return null;
568 }
569
570 // ���������node���key���������object tree������������
571 function distributeElements(elements, keys) {
572 var arr = {};
573 for (var i=0; i<elements.length; ++i) {
574 var e = elements[i];
575 var tmp = arr;
576 for (var j=0; j<keys.length-1; ++j) {
577 var key = e.getAttribute(keys[j]);
578 if (!(key in tmp)) {
579 tmp[key] = {};
580 }
581 tmp = tmp[key];
582 }
583 var key = e.getAttribute(keys[keys.length-1]);
584 tmp[key] = e;
585 }
586 return arr;
587 }
588
589 // http://bytes.com/topic/javascript/answers/715567-deep-cloning-object
590 function clone_obj(obj) {
591 var c = obj instanceof Array ? [] : {};
592 for (var i in obj) {
593 var prop = obj[i];
594 if (typeof prop == 'object') {
595 if (prop instanceof Array) {
596 c[i] = [];
597 for (var j = 0; j < prop.length; j++) {
598 if (typeof prop[j] != 'object') {
599 c[i].push(prop[j]);
600 } else {
601 c[i].push(clone_obj(prop[j]));
602 }
603 }
604 }else {
605 c[i] = clone_obj(prop);
606 }
607 }else {
608 c[i] = prop;
609 }
610 }
611 return c;
612 }
613
614 // http://serennz.sakura.ne.jp/sb/log/eid73.html
615 String.prototype.htmlspecialchars = function() {
616 ch = this + "";
617 ch = ch.replace(/&/g,"&amp;") ;
618 ch = ch.replace(/"/g,"&quot;") ; // "
619 ch = ch.replace(/'/g,"&#039;") ; // '
620 ch = ch.replace(/</g,"&lt;") ;
621 ch = ch.replace(/>/g,"&gt;") ;
622 return ch ;
623 }
624
625 function escapeHTML(str) {
626 if (typeof str == String) {
627 return str.escapeHTML();
628 }else {
629 return "";
630 }
631 }
632
633 function htmlspecialchars(str) {
634 if (typeof str == String) {
635 return str.htmlspecialchars();
636 }else {
637 return "";
638 }
639 }
640
641 // innerHTML������������������������������������������Firefox������������������������������������������������������������������
642 // ������������������Node���������Node���������
643 function createNodeWithScript(html) {
644 var div = document.createElement("div");
645
646 // http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
647 // http://social.msdn.microsoft.com/forums/en-US/iewebdevelopment/thread/33fd33f7-e857-4f6f-978e-fd486eba7174/
648 html = "<input type='hidden' />\n" + html;
649
650 div.innerHTML = html;
651 if (Prototype.Browser.IE || Prototype.Browser.WebKit || Prototype.Browser.Opera) {
652 var texts = new Array();
653 var scripts = div.getElementsByTagName("script");
654 for (var i=0; i<scripts.length; ++i) {
655 var script = scripts[i];
656 texts.push(script.text);
657 }
658 var script = document.createElement("script");
659 script.text = texts.join("\r");
660 div.appendChild(script);
661 }
662 return div;
663 }
664
665 function getElementsByCssSelector(root, expr) {
666 return (new Selector(expr)).findElements(root);
667 }
668
669 function getParentElementByCssSelector(elem, expr) {
670 var s = new Selector(expr);
671 while (elem = elem.parentNode) {
672 if (s.match(elem)) {
673 return elem;
674 }
675 }
676 return null;
677 }
678
679
680 // http://phpjs.org/functions/compact:371
681 function compact ( ) {
682 // http://kevin.vanzonneveld.net
683 // + original by: Waldo Malqui Silva
684 // + tweaked by: Jack
685 // + input by: Brett Zamir (http://brett-zamir.me)
686 // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
687 // * example 1: var1 = 'Kevin'; var2 = 'van'; var3 = 'Zonneveld';
688 // * example 1: compact('var1', 'var2', 'var3');
689 // * returns 1: {'var1': 'Kevin', 'var2': 'van', 'var3': 'Zonneveld'}
690
691 var matrix = {}, that = this;
692
693 var process = function ( value ) {
694 var i = 0, l = value.length, key_value = '';
695 for (i = 0; i < l; i++) {
696 key_value = value [ i ];
697 if (key_value instanceof Array) {
698 process( key_value );
699 } else {
700 if (typeof that.window[key_value] !== 'undefined') {
701 matrix[key_value] = that.window[key_value];
702 }
703 }
704 }
705 return true;
706 };
707
708 process(arguments);
709 return matrix;
710 }
711
712
713
714

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