Advertisement
codemonkey

hashArgs

Sep 26th, 2011
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  ** Author: Tomas E. Sandven
  3.  **
  4.  ** This object gives easy control over query arguments
  5.  ** in the URL hash string
  6.  **/
  7.  
  8. window.hashArgs = (function() {
  9.    
  10.     var self = {};
  11.     var hash = window.location.hash.substr(1);
  12.     var args = parseArgs(hash);
  13.    
  14.     var _changes = {};
  15.    
  16.     // Add an event to hash changed
  17.     window.addEventListener("hashchange", function() {
  18.        
  19.         hash = window.location.hash.substr(1);
  20.         newArgs = parseArgs(hash);
  21.        
  22.         $.each(_changes, function(e) {
  23.             if(newArgs[e] && args[e] !== newArgs[e])
  24.             {
  25.                 self.runChange(e, newArgs[e]);
  26.             }
  27.         });
  28.        
  29.         args = newArgs;
  30.     }, false);
  31.  
  32.     // Get an argument by key
  33.     self.get = function(key)
  34.     {
  35.         if(isset(key))
  36.             return args[key];
  37.         else return false;
  38.     };
  39.    
  40.     // Set an argument by key
  41.     self.set = function(key, value)
  42.     {
  43.         args[key] = value;
  44.         updateHash();
  45.     };
  46.    
  47.     // Make isset public
  48.     self.isset = isset;
  49.    
  50.     // Add a key changed listener by name
  51.     self.addChangeListener = function(name, callback)
  52.     {
  53.         if(_changes[name])
  54.             _changes[name].push(callback);
  55.         else
  56.             _changes[name] = [callback];
  57.     };
  58.    
  59.     // Run a key changed listener by name
  60.     self.runChange = function(name, overload)
  61.     {
  62.         if(_changes[name])
  63.         {
  64.             $.each(_changes[name], function() {
  65.                 this.call(overload);
  66.             });
  67.         }
  68.     }
  69.    
  70.     // Check if a key is set in args
  71.     function isset(index)
  72.     {
  73.         if(typeof args[index] === "undefined")
  74.             return false;
  75.         else return true;
  76.     }
  77.    
  78.     // Update the URL hash
  79.     function updateHash()
  80.     {
  81.         window.location.hash = "#" + deParseHash(args);
  82.     }
  83.    
  84.     // Parse query string to object
  85.     function parseArgs(input)
  86.     {
  87.         var retval = {};
  88.         var pairs = input.split("&");
  89.  
  90.         $.each(pairs, function(i) {
  91.             var split = this.split("=");
  92.            
  93.             if(typeof split[1] !== "undefined")
  94.                 retval[split[0]] = split[1];
  95.            
  96.             else
  97.                 retval[split[0]] = null;
  98.         });
  99.        
  100.         return retval;
  101.     }
  102.    
  103.     // Object back to query string
  104.     function deParseHash(input)
  105.     {
  106.         var retval = "";
  107.        
  108.         $.each(input, function(i) {
  109.             if(i)
  110.             {
  111.                 if(typeof this !== "null")
  112.                     retval += "&" + i + "=" + this;
  113.                 else retval += "&" + i;
  114.             }
  115.         });
  116.        
  117.         return retval.substr(1);
  118.     }
  119.    
  120.     return self;
  121. }());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement