Current state
This commit is contained in:
480
public/js/global.js
Normal file
480
public/js/global.js
Normal file
@@ -0,0 +1,480 @@
|
||||
//Initial js functions to run when js document is loaded
|
||||
checkBrowserWidth();
|
||||
|
||||
//Load when the page is ready - Using jQuery to run events
|
||||
$(document).ready(function(){
|
||||
|
||||
parseCode('thickbox-code/thickbox.js','ajaxJS');
|
||||
parseCode('thickbox-code/thickbox.css','ajaxCSS');
|
||||
|
||||
$(window).resize(checkBrowserWidth);
|
||||
$('div.roundbox').corner('round 9px');
|
||||
$('div.anchor').corner('round bottom 9px');
|
||||
$.tabs('container-1');
|
||||
$.tabs('container-2');
|
||||
$.tabs('container-3');
|
||||
$.tabs('container-4');
|
||||
$.tabs('container-5');
|
||||
$.tabs('container-6');
|
||||
|
||||
$('#overviewBtn').click(function(){
|
||||
$('#overviewTitle').ScrollTo(800)
|
||||
if(document.getElementById('overview').style.display == "none"){$('#overview').slideDown(500);$('#toggleBtnOverview').html('-')};
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#examplesBtn').click(function(){
|
||||
$('#examplesTitle').ScrollTo(800);
|
||||
if(document.getElementById('examples').style.display == "none"){$('#examples').slideDown(500);$('#toggleBtnExample').html('-')};
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#qaBtn').click(function(){
|
||||
$('#qaTitle').ScrollTo(800);
|
||||
if(document.getElementById('qa').style.display == "none"){$('#qa').slideDown(500);$('#toggleBtnQa').html('-')};
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#supportBtn').click(function(){
|
||||
$('#supportTitle').ScrollTo(800);
|
||||
if(document.getElementById('support').style.display == "none"){$('#support').slideDown(500);$('#toggleBtnSupport').html('-')};
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#donateBtn').click(function(){
|
||||
$('#donateTitle').ScrollTo(800);
|
||||
if(document.getElementById('donate').style.display == "none"){$('#donate').slideDown(500);$('#toggleBtnDonate').html('-')};
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.BTT').click(function(){$('#pageTop').ScrollTo(800);return false});
|
||||
|
||||
$(".toggleBtn").toggle(function(){
|
||||
if(document.getElementById(this.rel).style.display == "none"){$("#" + this.rel).slideDown(500);this.innerHTML = "-";return};
|
||||
this.innerHTML = "+";
|
||||
|
||||
$("#" + this.rel).slideUp(500);
|
||||
},function(){
|
||||
if(document.getElementById(this.rel).style.display == "block"){$("#" + this.rel).slideUp(500); this.innerHTML = "+";return};
|
||||
this.innerHTML = "-";
|
||||
$("#" + this.rel).slideDown(500);
|
||||
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
/////////////////////////// ajax call to get code off the server for display dependent code ///////////////////////////////////////
|
||||
function parseCode(o,placement){
|
||||
$.get(o,function(code){
|
||||
code=code.replace(/&/mg,'&');
|
||||
code=code.replace(/</mg,'<');
|
||||
code=code.replace(/>/mg,'>');
|
||||
code=code.replace(/\"/mg,'"');
|
||||
code=code.replace(/\t/g,' ');
|
||||
code=code.replace(/\r?\n/g,'<br>');
|
||||
code=code.replace(/<br><br>/g,'<br>');
|
||||
code=code.replace(/ /g,' ');
|
||||
$('#'+placement).html(code);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////// resolution dependent code ////////////////////////////////////////////////////////////////////////////////
|
||||
function checkBrowserWidth(){
|
||||
var theWidth = getBrowserWidth();
|
||||
if (theWidth == 0){
|
||||
var resolutionCookie = document.cookie.match(/(^|;)tmib_res_layout[^;]*(;|$)/);
|
||||
|
||||
if (resolutionCookie != null){
|
||||
setStylesheet(unescape(resolutionCookie[0].split("=")[1]));
|
||||
}
|
||||
|
||||
$(document).load(checkBrowserWidth);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (theWidth > 900){
|
||||
setStylesheet("1024 x 768");
|
||||
document.cookie = "tmib_res_layout=" + escape("1024 x 768");
|
||||
}else{
|
||||
setStylesheet("");
|
||||
document.cookie = "tmib_res_layout=";
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
function getBrowserWidth(){
|
||||
if (window.innerWidth){
|
||||
return window.innerWidth;
|
||||
}else if (document.documentElement && document.documentElement.clientWidth != 0){
|
||||
return document.documentElement.clientWidth;}
|
||||
else if (document.body){
|
||||
return document.body.clientWidth;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
function setStylesheet(styleTitle){
|
||||
var currTag;
|
||||
|
||||
if (document.getElementsByTagName){
|
||||
for (var i = 0; (currTag = document.getElementsByTagName("link")[i]); i++){
|
||||
if (currTag.getAttribute("rel").indexOf("style") != -1 && currTag.getAttribute("title")){
|
||||
currTag.disabled = true;
|
||||
if(currTag.getAttribute("title") == styleTitle){
|
||||
currTag.disabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
/////////////////////////// round corners jquery plugin ////////////////////////////////////////////////////////////////////////////////
|
||||
$.fn.corner = function(o)
|
||||
{
|
||||
o = o || "";
|
||||
var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10;
|
||||
var fx = (o.match(/round|bevel|fold|notch/)||["round"])[0];
|
||||
var opts = {
|
||||
TL: /top|tl/i.test(o), TR: /top|tr/i.test(o),
|
||||
BL: /bottom|bl/i.test(o), BR: /bottom|br/i.test(o)//,
|
||||
};
|
||||
if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR )
|
||||
opts = { TL:1, TR:1, BL:1, BR:1 };
|
||||
var strip = document.createElement("div");
|
||||
strip.style.overflow = "hidden";
|
||||
strip.style.height = "1px";
|
||||
strip.style.backgroundColor = "transparent";
|
||||
strip.style.borderStyle = "solid";
|
||||
return this.each(function(){
|
||||
var pad = {
|
||||
T: parseInt($.css(this,"paddingTop"))||0,
|
||||
R: parseInt($.css(this,"paddingRight"))||0,
|
||||
B: parseInt($.css(this,"paddingBottom"))||0,
|
||||
L: parseInt($.css(this,"paddingLeft"))||0
|
||||
};
|
||||
strip.style.borderColor = "#ffffff";
|
||||
if ( opts.TL || opts.TR ) {
|
||||
strip.style.borderStyle = "none "+(opts.TR?"solid":"none")+" none "+(opts.TL?"solid":"none");
|
||||
var t=document.createElement("div");
|
||||
t.style.margin = "-"+pad.T+"px -"+pad.R+"px "+(pad.T-width)+"px -"+pad.L+"px";
|
||||
t.style.backgroundColor = "transparent";
|
||||
for ( var i=0; i < width; i++ ) {
|
||||
var w = fx=="round" ? Math.round(width*(1-Math.cos(Math.asin(i/width)))) : i+1;
|
||||
var e = strip.cloneNode(false);
|
||||
e.style.borderWidth = "0 "+(opts.TR?w:0)+"px 0 "+(opts.TL?w:0)+"px";
|
||||
t.insertBefore(e, t.firstChild);
|
||||
}
|
||||
this.insertBefore(t, this.firstChild);
|
||||
}
|
||||
if ( opts.BL || opts.BR ) {
|
||||
strip.style.borderStyle = "none "+(opts.BR?"solid":"none")+" none "+(opts.BL?"solid":"none");
|
||||
var b=document.createElement("div");
|
||||
b.style.margin = (pad.B-width)+"px -"+pad.R+"px -"+pad.B+"px -"+pad.L+"px";
|
||||
b.style.backgroundColor = "transparent";
|
||||
for ( var i=0; i < width; i++ ) {
|
||||
var w = fx=="round" ? Math.round(width*(1-Math.cos(Math.asin(i/width)))) : i+1;
|
||||
var e = strip.cloneNode(false);
|
||||
e.style.borderWidth = "0 "+(opts.BR?w:0)+"px 0 "+(opts.BL?w:0)+"px";
|
||||
b.appendChild(e);
|
||||
}
|
||||
this.appendChild(b);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
//////////////////// tabs jquery plugin ////////////////////////////////////////////////////////////////////////////
|
||||
$.tabs = function(containerId, start) {
|
||||
var ON_CLASS = 'on';
|
||||
var id = '#' + containerId;
|
||||
var i = (typeof start == "number") ? start - 1 : 0;
|
||||
$(id + '>div:eq(' + i + ')').css({display:"block"});
|
||||
$(id + '>ul>li:nth-child(' + (i+1) + ')').addClass(ON_CLASS);
|
||||
$(id + '>ul>li>a').click(function() {
|
||||
if (!$(this.parentNode).is('.' + ON_CLASS)) {
|
||||
var re = /([_\-\w]+$)/i;
|
||||
var target = $('#' + re.exec(this.href)[1]);
|
||||
if (target.size() > 0) {
|
||||
$(id + '>div:visible').css({display:"none"});
|
||||
target.css({display:"block"});
|
||||
$(id + '>ul>li').removeClass(ON_CLASS);
|
||||
$(this.parentNode).addClass(ON_CLASS);
|
||||
} else {
|
||||
alert('There is no such container.');
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
};
|
||||
|
||||
//////////////////// Unobtrustive Code Highlighter By Dan Webb ////////////////////////////////////////////////////////////////////////////
|
||||
var CodeHighlighter = { styleSets : new Array };
|
||||
|
||||
CodeHighlighter.addStyle = function(name, rules) {
|
||||
// using push test to disallow older browsers from adding styleSets
|
||||
if ([].push) this.styleSets.push({
|
||||
name : name,
|
||||
rules : rules,
|
||||
ignoreCase : arguments[2] || false
|
||||
})
|
||||
|
||||
function setEvent() {
|
||||
setTimeout('$(document).ready(function(){CodeHighlighter.init()})',1000)
|
||||
}
|
||||
|
||||
// only set the event when the first style is added
|
||||
if (this.styleSets.length==1) setEvent();
|
||||
}
|
||||
|
||||
CodeHighlighter.init = function() {
|
||||
if (!document.getElementsByTagName) return;
|
||||
if ("a".replace(/a/, function() {return "b"}) != "b") return; // throw out Safari versions that don't support replace function
|
||||
// throw out older browsers
|
||||
|
||||
var codeEls = document.getElementsByTagName("CODE");
|
||||
// collect array of all pre elements
|
||||
codeEls.filter = function(f) {
|
||||
var a = new Array;
|
||||
for (var i = 0; i < this.length; i++) if (f(this[i])) a[a.length] = this[i];
|
||||
return a;
|
||||
}
|
||||
|
||||
var rules = new Array;
|
||||
rules.toString = function() {
|
||||
// joins regexes into one big parallel regex
|
||||
var exps = new Array;
|
||||
for (var i = 0; i < this.length; i++) exps.push(this[i].exp);
|
||||
return exps.join("|");
|
||||
}
|
||||
|
||||
function addRule(className, rule) {
|
||||
// add a replace rule
|
||||
var exp = (typeof rule.exp != "string")?String(rule.exp).substr(1, String(rule.exp).length-2):rule.exp;
|
||||
// converts regex rules to strings and chops of the slashes
|
||||
rules.push({
|
||||
className : className,
|
||||
exp : "(" + exp + ")",
|
||||
length : (exp.match(/(^|[^\\])\([^?]/g) || "").length + 1, // number of subexps in rule
|
||||
replacement : rule.replacement || null
|
||||
});
|
||||
}
|
||||
|
||||
function parse(text, ignoreCase) {
|
||||
// main text parsing and replacement
|
||||
return text.replace(new RegExp(rules, (ignoreCase)?"gi":"g"), function() {
|
||||
var i = 0, j = 1, rule;
|
||||
while (rule = rules[i++]) {
|
||||
if (arguments[j]) {
|
||||
// if no custom replacement defined do the simple replacement
|
||||
if (!rule.replacement) return "<span class=\"" + rule.className + "\">" + arguments[0] + "</span>";
|
||||
else {
|
||||
// replace $0 with the className then do normal replaces
|
||||
var str = rule.replacement.replace("$0", rule.className);
|
||||
for (var k = 1; k <= rule.length - 1; k++) str = str.replace("$" + k, arguments[j + k]);
|
||||
return str;
|
||||
}
|
||||
} else j+= rule.length;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function highlightCode(styleSet) {
|
||||
// clear rules array
|
||||
var parsed;
|
||||
rules.length = 0;
|
||||
|
||||
// get stylable elements by filtering out all code elements without the correct className
|
||||
var stylableEls = codeEls.filter(function(item) {return (item.className.indexOf(styleSet.name)>=0)});
|
||||
|
||||
// add style rules to parser
|
||||
for (var className in styleSet.rules) addRule(className, styleSet.rules[className]);
|
||||
|
||||
|
||||
// replace for all elements
|
||||
for (var i = 0; i < stylableEls.length; i++) {
|
||||
// EVIL hack to fix IE whitespace badness if it's inside a <pre>
|
||||
if (/MSIE/.test(navigator.appVersion) && stylableEls[i].parentNode.nodeName == 'PRE') {
|
||||
stylableEls[i] = stylableEls[i].parentNode;
|
||||
|
||||
parsed = stylableEls[i].innerHTML.replace(/(<code[^>]*>)([^<]*)<\/code>/i, function() {
|
||||
return arguments[1] + parse(arguments[2], styleSet.ignoreCase) + "</code>"
|
||||
});
|
||||
parsed = parsed.replace(/\n( *)/g, function() {
|
||||
var spaces = "";
|
||||
for (var i = 0; i < arguments[1].length; i++) spaces+= " ";
|
||||
return "\n" + spaces;
|
||||
});
|
||||
parsed = parsed.replace(/\t/g, " ");
|
||||
parsed = parsed.replace(/\n(<\/\w+>)?/g, "<br />$1").replace(/<br \/>[\n\r\s]*<br \/>/g, "<p><br></p>");
|
||||
|
||||
} else parsed = parse(stylableEls[i].innerHTML, styleSet.ignoreCase);
|
||||
|
||||
stylableEls[i].innerHTML = parsed;
|
||||
}
|
||||
}
|
||||
|
||||
// run highlighter on all stylesets
|
||||
for (var i in this.styleSets) highlightCode(this.styleSets[i]);
|
||||
}
|
||||
|
||||
CodeHighlighter.addStyle("javascript",{
|
||||
comment : {
|
||||
exp : /(\/\/[^\n]*\n)|(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)/
|
||||
},
|
||||
brackets : {
|
||||
exp : /\(|\)/
|
||||
},
|
||||
string : {
|
||||
exp : /'[^']*'|"[^"]*"/
|
||||
},
|
||||
keywords : {
|
||||
exp : /\b(arguments|break|case|continue|default|delete|do|else|false|for|function|if|in|instanceof|new|null|return|switch|this|true|typeof|var|void|while|with)\b/
|
||||
},
|
||||
global : {
|
||||
exp : /\b(toString|valueOf|window|element|prototype|constructor|document|escape|unescape|parseInt|parseFloat|setTimeout|clearTimeout|setInterval|clearInterval|NaN|isNaN|Infinity)\b/
|
||||
}
|
||||
});
|
||||
|
||||
CodeHighlighter.addStyle("html", {
|
||||
comment : {
|
||||
exp: /<!\s*(--([^-]|[\r\n]|-[^-])*--\s*)>/
|
||||
},
|
||||
tag : {
|
||||
exp: /(<\/?)([a-zA-Z]+\s?)/,
|
||||
replacement: "$1<span class=\"$0\">$2</span>"
|
||||
},
|
||||
string : {
|
||||
exp : /'[^']*'|"[^"]*"/
|
||||
},
|
||||
attribute : {
|
||||
exp: /\b([a-zA-Z-:]+)(=)/,
|
||||
replacement: "<span class=\"$0\">$1</span>$2"
|
||||
},
|
||||
doctype : {
|
||||
exp: /<!DOCTYPE([^&]|&[^g]|&g[^t])*>/
|
||||
}
|
||||
});
|
||||
|
||||
CodeHighlighter.addStyle("css", {
|
||||
comment : {
|
||||
exp : /\/\*[^*]*\*+([^\/][^*]*\*+)*\//
|
||||
},
|
||||
keywords : {
|
||||
exp : /@\w[\w\s]*/
|
||||
},
|
||||
selectors : {
|
||||
exp : "([\\w-:\\[.#][^{};>]*)(?={)"
|
||||
},
|
||||
properties : {
|
||||
exp : "([\\w-]+)(?=\\s*:)"
|
||||
},
|
||||
units : {
|
||||
exp : /([0-9])(em|en|px|%|pt)\b/,
|
||||
replacement : "$1<span class=\"$0\">$2</span>"
|
||||
},
|
||||
urls : {
|
||||
exp : /url\([^\)]*\)/
|
||||
}
|
||||
});
|
||||
|
||||
//////////////////// scroll ////////////////////////////////////////////////////////////////////////////
|
||||
jQuery.getPos = function (e)
|
||||
{
|
||||
var l = 0;
|
||||
var t = 0;
|
||||
var w = jQuery.intval(jQuery.css(e,'width'));
|
||||
var h = jQuery.intval(jQuery.css(e,'height'));
|
||||
var wb = e.offsetWidth;
|
||||
var hb = e.offsetHeight;
|
||||
while (e.offsetParent){
|
||||
l += e.offsetLeft + (e.currentStyle?jQuery.intval(e.currentStyle.borderLeftWidth):0);
|
||||
t += e.offsetTop + (e.currentStyle?jQuery.intval(e.currentStyle.borderTopWidth):0);
|
||||
e = e.offsetParent;
|
||||
}
|
||||
l += e.offsetLeft + (e.currentStyle?jQuery.intval(e.currentStyle.borderLeftWidth):0);
|
||||
t += e.offsetTop + (e.currentStyle?jQuery.intval(e.currentStyle.borderTopWidth):0);
|
||||
return {x:l, y:t, w:w, h:h, wb:wb, hb:hb};
|
||||
};
|
||||
jQuery.getClient = function(e)
|
||||
{
|
||||
if (e) {
|
||||
w = e.clientWidth;
|
||||
h = e.clientHeight;
|
||||
} else {
|
||||
w = (window.innerWidth) ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth) ? document.documentElement.clientWidth : document.body.offsetWidth;
|
||||
h = (window.innerHeight) ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.offsetHeight;
|
||||
}
|
||||
return {w:w,h:h};
|
||||
};
|
||||
jQuery.getScroll = function (e)
|
||||
{
|
||||
if (e) {
|
||||
t = e.scrollTop;
|
||||
l = e.scrollLeft;
|
||||
w = e.scrollWidth;
|
||||
h = e.scrollHeight;
|
||||
} else {
|
||||
if (document.documentElement && document.documentElement.scrollTop) {
|
||||
t = document.documentElement.scrollTop;
|
||||
l = document.documentElement.scrollLeft;
|
||||
w = document.documentElement.scrollWidth;
|
||||
h = document.documentElement.scrollHeight;
|
||||
} else if (document.body) {
|
||||
t = document.body.scrollTop;
|
||||
l = document.body.scrollLeft;
|
||||
w = document.body.scrollWidth;
|
||||
h = document.body.scrollHeight;
|
||||
}
|
||||
}
|
||||
return { t: t, l: l, w: w, h: h };
|
||||
};
|
||||
|
||||
jQuery.intval = function (v)
|
||||
{
|
||||
v = parseInt(v);
|
||||
return isNaN(v) ? 0 : v;
|
||||
};
|
||||
|
||||
jQuery.fn.ScrollTo = function(s) {
|
||||
o = jQuery.speed(s);
|
||||
return this.each(function(){
|
||||
new jQuery.fx.ScrollTo(this, o);
|
||||
});
|
||||
};
|
||||
|
||||
jQuery.fx.ScrollTo = function (e, o)
|
||||
{
|
||||
var z = this;
|
||||
z.o = o;
|
||||
z.e = e;
|
||||
z.p = jQuery.getPos(e);
|
||||
z.s = jQuery.getScroll();
|
||||
z.clear = function(){clearInterval(z.timer);z.timer=null};
|
||||
z.t=(new Date).getTime();
|
||||
z.step = function(){
|
||||
var t = (new Date).getTime();
|
||||
var p = (t - z.t) / z.o.duration;
|
||||
if (t >= z.o.duration+z.t) {
|
||||
z.clear();
|
||||
setTimeout(function(){z.scroll(z.p.y, z.p.x)},13);
|
||||
} else {
|
||||
st = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.y-z.s.t) + z.s.t;
|
||||
sl = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.x-z.s.l) + z.s.l;
|
||||
z.scroll(st, sl);
|
||||
}
|
||||
};
|
||||
z.scroll = function (t, l){window.scrollTo(l, t)};
|
||||
z.timer=setInterval(function(){z.step();},13);
|
||||
};
|
||||
Reference in New Issue
Block a user