Revision: 6829
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at June 17, 2008 15:54 by 6e
Initial Code
document.observe('dom:loaded', function(){ // instance the class...it is available via 'controller' controller = new StateController(); }); var StateController = Class.create({ initialize: function(){ util.trace('Control this.'); this.lastHash = ''; this.ready = true; Event.observe(window, 'load', this.loaded.bind(this)); document.observe('receiver:stateChange', this.stateChange.bind(this)); //document.observe('receiver:hashChange', this.hashChange.bind(this)); }, loaded: function(){ util.trace('Got loaded'); //observe for hash changes this.observeHash(); }, stateChange: function($event){ // when a state change is invoked, change the hash util.trace('change hash '+ window.location.hash); // add slash for aesthetics...looks like swfaddress this.setHash($event.memo.destination); }, observeHash: function(){ //when hash changes fire receiver:hashChanged new PeriodicalExecuter(function(pe){ if (window.location.hash == this.lastHash) { // hash hasn't changed, bail return; } // hash has changed, take note and fire receiver:stateChange this.lastHash = window.location.hash; util.trace('New hash'); document.body.fire('receiver:hashChange', {destination: window.location.hash}); }.bind(this), .1); }, fireEvent: function($destination){ //method for flash to send destination document.body.fire('receiver:stateChange', {destination: $destination}); }, getHash: function(){ // returns the hash stripped of #/ return window.location.hash.sub('#/', '') }, setHash: function($destination){ // formats hash to #/destination window.location.hash = '/'+$destination; }, getRelativeURL: function($url){ // pulls protocol, host and path from url to return location var absolute = window.location.protocol+'//'+window.location.host+window.location.pathname; util.trace(absolute+ ' ' + $url); return $url.sub(absolute, ''); }, ready: function(){ return this.ready; }, sitePageTitle: function(destination, delimiter){ var pathArray = destination.split('/').invoke('capitalize'); pathArray.unshift(document.title.split(' '+delimiter+' ').last()); pathArray.reverse(); return pathArray.join(' '+delimiter+' '); } });
Initial URL
Initial Description
Initial Title
State Controller
Initial Tags
ajax, javascript, textmate
Initial Language
Other