khanat-opennel-code/code/web/public_php/ams/doc/js/script.js
2014-09-02 21:39:35 -07:00

159 lines
No EOL
3.8 KiB
JavaScript

/*!
* Documenter 1.6
* http://rxa.li/documenter
*
* Copyright 2011, Xaver Birsak
* http://revaxarts.com
*
*/
//if Cufon replace headings
if(typeof Cufon == 'function') Cufon.replace('h1, h2, h3, h4, h5, h6');
$(document).ready(function() {
var timeout,
sections = new Array(),
sectionscount = 0,
win = $(window),
sidebar = $('#documenter_sidebar'),
nav = $('#documenter_nav'),
logo = $('#documenter_logo'),
navanchors = nav.find('a'),
timeoffset = 50,
hash = location.hash || null;
iDeviceNotOS4 = (navigator.userAgent.match(/iphone|ipod|ipad/i) && !navigator.userAgent.match(/OS 5/i)) || false,
badIE = $('html').prop('class').match(/ie(6|7|8)/)|| false;
//handle external links (new window)
$('a[href^=http]').bind('click',function(){
window.open($(this).attr('href'));
return false;
});
//IE 8 and lower doesn't like the smooth pagescroll
if(!badIE){
window.scroll(0,0);
$('a[href^=#]').bind('click touchstart',function(){
hash = $(this).attr('href');
$.scrollTo.window().queue([]).stop();
goTo(hash);
return false;
});
//if a hash is set => go to it
if(hash){
setTimeout(function(){
goTo(hash);
},500);
}
}
//We need the position of each section until the full page with all images is loaded
win.bind('load',function(){
var sectionselector = 'section';
//Documentation has subcategories
if(nav.find('ol').length){
sectionselector = 'section, h4';
}
//saving some information
$(sectionselector).each(function(i,e){
var _this = $(this);
var p = {
id: this.id,
pos: _this.offset().top
};
sections.push(p);
});
//iPhone, iPod and iPad don't trigger the scroll event
if(iDeviceNotOS4){
nav.find('a').bind('click',function(){
setTimeout(function(){
win.trigger('scroll');
},duration);
});
//scroll to top
window.scroll(0,0);
}
//how many sections
sectionscount = sections.length;
//bind the handler to the scroll event
win.bind('scroll',function(event){
clearInterval(timeout);
//should occur with a delay
timeout = setTimeout(function(){
//get the position from the very top in all browsers
pos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
//iDeviceNotOS4s don't know the fixed property so we fake it
if(iDeviceNotOS4){
sidebar.css({height:document.height});
logo.css({'margin-top':pos});
}
//activate Nav element at the current position
activateNav(pos);
},timeoffset);
}).trigger('scroll');
});
//the function is called when the hash changes
function hashchange(){
goTo(location.hash, false);
}
//scroll to a section and set the hash
function goTo(hash,changehash){
win.unbind('hashchange', hashchange);
hash = hash.replace(/!\//,'');
win.stop().scrollTo(hash,duration,{
easing:easing,
axis:'y'
});
if(changehash !== false){
var l = location;
location.href = (l.protocol+'//'+l.host+l.pathname+'#!/'+hash.substr(1));
}
win.bind('hashchange', hashchange);
}
//activate current nav element
function activateNav(pos){
var offset = 100,
current, next, parent, isSub, hasSub;
win.unbind('hashchange', hashchange);
for(var i=sectionscount;i>0;i--){
if(sections[i-1].pos <= pos+offset){
navanchors.removeClass('current');
current = navanchors.eq(i-1);
current.addClass('current');
parent = current.parent().parent();
next = current.next();
hasSub = next.is('ol');
isSub = !parent.is('#documenter_nav');
nav.find('ol:visible').not(parent).slideUp('fast');
if(isSub){
parent.prev().addClass('current');
parent.stop().slideDown('fast');
}else if(hasSub){
next.stop().slideDown('fast');
}
win.bind('hashchange', hashchange);
break;
};
}
}
});