Develop and Download Open Source Software

Browse Subversion Repository

Diff of /js/common.js

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 6 by berupon, Sat Dec 5 02:36:36 2009 UTC revision 10 by berupon, Tue Dec 8 11:41:01 2009 UTC
# Line 2  Line 2 
2  // Copyright (c) 2009 Katsuhisa Yuasa <berupon [at] gmail.com>  // Copyright (c) 2009 Katsuhisa Yuasa <berupon [at] gmail.com>
3  // License http://www.opensource.org/licenses/mit-license.html  // License http://www.opensource.org/licenses/mit-license.html
4    
 function addListener(elm, type, func)  
 {  
         if(!elm) { return false; }  
         if (elm.addEventListener) {  
                 elm.addEventListener(type, func, false);  
         }else if (elm.attachEvent) {  
                 elm.attachEvent('on' + type, func);  
         }else {  
                 return false;  
         }  
         return true;  
 }  
   
5  if (!Object.defineProperty) {  if (!Object.defineProperty) {
6          if (Object.__defineGetter__ && Object.__defineSetter__) {          if (Object.__defineGetter__ && Object.__defineSetter__) {
7                  Object.defineProperty = function (obj, propName, desc) {                  Object.defineProperty = function (obj, propName, desc) {
# Line 230  var getElementsByClassName = (function(c Line 217  var getElementsByClassName = (function(c
217    
218  })();  })();
219    
 /**  
  * Function : dump()  
  * Arguments: The data - array,hash(associative array),object  
  *    The level - OPTIONAL  
  * Returns  : The textual representation of the array.  
  * This function was inspired by the print_r function of PHP.  
  * This will accept some data as the argument and return a  
  * text that will be a more readable version of the  
  * array/hash/object that is given.  
  * Docs: http://www.openjs.com/scripts/others/dump_function_php_print_r.php  
  */  
 function dump(arr,level) {  
         var dumped_text = "";  
         if(!level) level = 0;  
           
         //The padding given at the beginning of the line.  
         var level_padding = "";  
         for(var j=0;j<level+1;j++) level_padding += "    ";  
           
         if(typeof(arr) == 'object') { //Array/Hashes/Objects  
                 for(var item in arr) {  
                         var value = arr[item];  
                           
                         if(typeof(value) == 'object') { //If it is an array,  
                                 dumped_text += level_padding + "'" + item + "' ...\n";  
                                 dumped_text += dump(value,level+1);  
                         } else {  
                                 dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";  
                         }  
                 }  
         } else { //Stings/Chars/Numbers etc.  
                 dumped_text = "===>"+arr+"<===("+typeof(arr)+")";  
         }  
         return dumped_text;  
 }  
   
   
 function array_key_exists ( key, search ) {  
     // http://kevin.vanzonneveld.net  
     // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)  
     // +   improved by: Felix Geisendoerfer (http://www.debuggable.com/felix)  
     // *     example 1: array_key_exists('kevin', {'kevin': 'van Zonneveld'});  
     // *     returns 1: true  
   
     // input sanitation  
     if( !search || (search.constructor !== Array && search.constructor !== Object) ){  
         return false;  
     }  
   
     return key in search;  
 }  
   
220  function radioInputTag($name, $value, $checked)  function radioInputTag($name, $value, $checked)
221  {  {
222          var txt = "<input type='radio' name='" + $name + "' value='" + $value + "' ";          var txt = "<input type='radio' name='" + $name + "' value='" + $value + "' ";
# Line 333  function splitTrim(str, separator) Line 268  function splitTrim(str, separator)
268  }  }
269    
270  // original : http://blog.mikuriya.biz/archives/286  // original : http://blog.mikuriya.biz/archives/286
271    // SELECTタグの選択されたOPTIONを違うSELECT タグに移動。
272  function moveSelectedOptions(fromSelect, toSelect) {  function moveSelectedOptions(fromSelect, toSelect) {
273          var from_options = fromSelect.options;          var from_options = fromSelect.options;
274          var to_options = toSelect.options;          var to_options = toSelect.options;
# Line 356  function moveSelectedOptions(fromSelect, Line 292  function moveSelectedOptions(fromSelect,
292          }          }
293  }  }
294    
295    // SELECTタグの選択されたOPTIONを上下移動。
296  function relocateSelectedOptions(select, dir) {  function relocateSelectedOptions(select, dir) {
297          var options = select.options;          var options = select.options;
298          if (dir == 0) {          if (dir == 0) {
# Line 394  function toggleVisibility(elem) Line 331  function toggleVisibility(elem)
331                    
332  }  }
333    
 function a(p)  
 {  
         if (typeof p == "object") {  
                 alert(Object.toJSON(p));  
         }else {  
                 alert(p);  
         }  
 }  
   
334  function collectMember(arr, name) {  function collectMember(arr, name) {
335          var values = [];          var values = [];
336          for (var i=0; i<arr.length; ++i) {          for (var i=0; i<arr.length; ++i) {
# Line 411  function collectMember(arr, name) { Line 339  function collectMember(arr, name) {
339          return values;          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    

Legend:
Removed from v.6  
changed lines
  Added in v.10

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