var hash = { prevLocation: false, currLocation: '', prevHash: false, currHash: window.location.hash, loading: false, hashLink : true, location: function(href) { if(href !== undefined && href !== null) location.href = href; }, anchor: function() { var result2 = this.currHash.split('#/'); if(typeof result2[1] !== 'undefined') { var result = result2[1].split('#'); var anchor = result[1]; return anchor; } }, clicked: function() { this.loading = true; }, isHashLink: function() { var linkType = this.hashLink; this.hashLink = true; return linkType; }, current: function() { var hash = this.currLocation; if(!hash) return true; if(hash.search("#\/") == -1) { var hash_result = hash.split('/'); hash_result.shift(); hash_result.shift(); if(hash_result[1] == '') return true; this.hashLink = false; } else { var hash_result = hash.split('#/'); } hash_result.shift(); if(typeof hash_result[0] === 'undefined') return false; hash_result = hash_result[0].split('/'); return $.isArray(hash_result) ? hash_result : false; }, previous: function() { return this.prevLocation == '' ? false : true; }, previousHash: function() { var hash = this.prevLocation; if(hash == "") return false; if(hash.search("#\/") == -1) return true; var hash_result = hash.split('#/'); if(typeof hash_result[1] === 'undefined') return false; hash_result = hash_result[1].split('/'); return $.isArray(hash_result) ? hash_result : false; }, exists: function(check_all_links) { if(check_all_links) { var result = window.location.href.split('/'); return ( (result[3] || this.currHash) && this.prevLocation === false) ? true : false; } return this.currHash ? true : false; }, // Compare new and old hashes and return true if same and false if doesnt start: function(intIntervalTime) { $( window.location ).bind('change', function( objEvent, objData ) { hash.change(objEvent, objData); }); setInterval('hash.check()', intIntervalTime ); }, cleanHash: function(strHash) { return(strHash.substring( 1, strHash.length )); }, splitUrl: function(url) { var hash_result = url.split('#/'); if(typeof hash_result[1] === 'undefined') return false; hash_result = hash_result[1].split('/'); return $.isArray(hash_result) ? hash_result : false; }, change: function(objEvent, objData) { var arrHash = hash.current(); if(arrHash === true) return; // arrHash sisältää kaikki hashit omina arvoinaan eli // voidaan ladata kaikki peräkkäin vaikka niin // saadaan moniulotteinen hash! // tämä splitatatan sentakia että jos linkissä on ankkuri esim. www.webisti.fi/etusivu#teeko // niin poistetaan se että voidaan tunnistaa oikea linkki eli etusivu //var arrHash = arrHash[0].split('#'); // TÄÄ tekee koko hashista yhden stringin ja clikkaa siihen jos esim. on suora a href linkki!! var strHash = ""; $.each(arrHash, function(item, value) { var sHash = value.split('#'); strHash += '/' + sHash[0]; }); var $hashLink = $("[href='/#"+strHash+"']"); if($hashLink.length > 0) { if($hashLink.find(".menuitem").length > 0) { $hashLink.find(".menuitem").click(); } else { $hashLink.parent().click(); } } else { // DEBUG. Jos tullaan suoralla moniulotteisella linkillä niin se ladataan tässä // tää on vaan hack koska tänkun lataa niin se clikkaa ekaan linkkiin ja aborttaa toisen mutta se toimii // turha pyyntö vaan lähtee vaikka se keskeytetäänkin!!!! Request('app/main/main/'+arrHash[0], {abort: true,method:'get',append:false}); //Request('app/main'+$(this).attr('href'), {abort: true,method:'get',append:parms.append}); //console.log('jep'); } this.loading = false }, check: function() { if (this.currLocation != window.location.href) { this.prevLocation = this.currLocation; this.currLocation = window.location.href; this.prevHash = this.currHash; this.currHash = window.location.hash; if(this.loading === true) { this.loading = false; return false; } $( window.location ).trigger("change", {currentHref: this.currLocation, currentHash: this.cleanHash( this.currHash ), previousHref: this.prevLocation, previousHash: this.cleanHash( this.prevHash )}); } else { // DEBUG: tää loading pitäis laittaa jossain vaihees falseks mutta jos hash timeoutti tulee just // sen jälkeen niin se kattoo et hash on muuttunu vaikka se onkin painettu menusta // ja se lataa kahteen kertaan templaten.. mutta muuten jos tätä ei falseteta niin se ei lataa // jokatoista historiaa ollenkaan // Myös jos tää laitetaan falseks tässä niin aina kun jotain nappia painetaan niin se clickkaa sitä sentakia kun // nappia ei oo enää painettu setTimeout(function() { this.loading = false},100); } }, getUrl: function() { return location.protocol + "//"+location.hostname; }, changeLinks: function(dest) { if(dest && editor.exists() === false) { var url = this.getUrl(); $(dest).find('a').each( function() { if( ($(this).attr('href').substr(4,2) !== ":/" && $(this).attr('href').search("\/#\/") == -1 && $(this).attr('href').search("sites") == -1 && $(this).attr('href').search("files") == -1 && $(this).attr('href').substr(0,11) !== "javascript:" && $(this).attr('href').substr(0,6) !== "skype:" && $(this).attr('href').substr(0,7) !== "mailto:") || ($(this).attr('href').search(url) !== -1 && $(this).attr('href').search("\/#\/") == -1 && $(this).attr('href').search("sites") == -1)) { if($(this).attr('href').search(url) !== -1) $(this).attr('href', '/#'+$(this).attr('href').replace(url,'')); // IE FIX else $(this).attr('href', '/#'+$(this).attr('href')); /* if($(this).find('[teeko-editor-type=menu]').length == 0) { $(this).bind('click', function() { //console.log('Straight own page Link clicked'); //Request('app/main/'+$(this).attr('href'), {abort: true,method:'get',append:parms.append}); }); } */ } }); } else editor.init(); } } $(document).ready(function() { hash.changeLinks(document); if(editor.exists() === false) { // Check is there already hash if(hash.exists()) hash.change(); hash.start(200); } });