Return to Snippet

Revision: 12102
at March 2, 2009 15:13 by johnloy


Initial Code
/*
http://www.wait-till-i.com/2008/05/23/script-configuration/
*/

var module = function(){
  // configuration, change things here
  var config = {
    CSS:{
     classes:{
       hover:'hover',
       active:'current',
       jsEnabled:'js'
     },
     ids:{
       container:'maincontainer'
     } 
    },
    timeout:2000,
    userID:'chrisheilmann'
  };

  // start of main code 
  function init(){
    changeConfig.set(arguments[0]);
    console.log(config);
  };

  // … more methods and other code …

  // Configuration changes 
  var changeConfig = function(){
    function set(o){
      var reg = /./g;
      if(isObj(o)){
        for(var i in o){
          if(i.indexOf(’.')!== -1){
            var str = ‘["' + i.replace(reg,'"]["') + '"]‘;
            var val = getValue(o[i]);
            eval(’config’ + str + ‘=’ + val);
          } else {
            findProperty(config,i,o[i]);
          }
        }
      }
    };
    function findProperty(o,p,v){
      for(var i in o){
        if(isObj(o[i])){
          findProperty(o[i],p,v);
        } else {
          if(i === p){o[p] = v;};
        }
      }
    };
    function isObj(o){
      return (typeof o === ‘object’ && typeof o.splice !== ‘function’);
    };
    function getValue(v){
      switch(typeof v){
        case ’string’: return "’"+v+"’"; break;
        case ‘number’: return v; break;
        case ‘object’:
          if(typeof v.splice === ‘function’){
            return ‘['+v+']‘;
          } else {
            return ‘{’+v+’}';
          }
        break;
        case NaN: break;
      };
    };
    return{set:set};
  }();
  // make init a public method
  return {
    init:init
  };
}();
module.init({
    ‘container’:'header’,
    ‘CSS.classes.active’:'now’,
    ‘timeout’:1000
});

Initial URL


Initial Description


Initial Title
Way to programmatically override a config object for a module pattern

Initial Tags
javascript, textmate

Initial Language
Other