Difference between revisions of "Common.js"
From Sonic Retro
Scarred Sun (talk | contribs) |
Scarred Sun (talk | contribs) |
||
Line 1: | Line 1: | ||
+ | var retro_menu_objs = []; | ||
+ | jQuery(window).unbind('resize').resize(function(){ | ||
+ | for (var i = 0; i < retro_menu_objs.length; i++) | ||
+ | if (typeof(retro_menu_objs[i]) == "object") | ||
+ | if (typeof(retro_menu_objs[i].resize) == "function") | ||
+ | retro_menu_objs[i].resize(); | ||
+ | }); | ||
+ | |||
+ | var retro_menu_obj = function(e, limit, outerlimit) { | ||
+ | var that = this; | ||
+ | this.e = e; | ||
+ | this.original_width = e.children('div').outerWidth(); | ||
+ | this.limit = limit; | ||
+ | this.outerlimit = outerlimit; | ||
+ | this.resize = function() { | ||
+ | if (this.original_width == 0) return; | ||
+ | if (jQuery(window).width() >= this.original_width + this.limit) { | ||
+ | this.e.children('div').children('a').each(function(){ | ||
+ | jQuery(this).show(); | ||
+ | }); | ||
+ | this.e.children('div').children('div').children('a').hide(); | ||
+ | this.e.children('div').children('div').children('ul').children('li').each(function(){ | ||
+ | jQuery(this).hide(); | ||
+ | }); | ||
+ | } else { | ||
+ | var els = []; | ||
+ | this.e.children('div').children('a').each(function(){ | ||
+ | els.push(jQuery(this)); | ||
+ | jQuery(this).show(); | ||
+ | }); | ||
+ | this.e.children('div').children('div').children('a').show(); | ||
+ | var num = 0, current; | ||
+ | while (els.length > 0) { | ||
+ | current = els.pop(); | ||
+ | current.hide(); | ||
+ | num++; | ||
+ | if (jQuery(window).width() >= this.e.children('div').outerWidth() + this.outerlimit) els = []; | ||
+ | } | ||
+ | if (num > 0) { | ||
+ | this.e.children('div').children('div').children('ul').children('li').each(function(){ | ||
+ | els.push(jQuery(this)); | ||
+ | }); | ||
+ | while (els.length > 0) { | ||
+ | current = els.pop(); | ||
+ | if (num > 0) current.show(); else current.hide(); | ||
+ | num--; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }; | ||
+ | this.dropdown_out = -1; | ||
+ | this.dropdown_interval = null; | ||
+ | this.dropdown_interval_func = function(){ | ||
+ | if (that.dropdown_out < 0) return; | ||
+ | else if (that.dropdown_out == 0) { | ||
+ | that.e.children('div').children('div').children('ul').hide(); | ||
+ | that.e.children('div').children('div').children('a').removeAttr('style'); | ||
+ | } | ||
+ | that.dropdown_out--; | ||
+ | }; | ||
+ | if (this.e.children('div').children('div').length > 0) this.e.children('div').children('div').remove(); | ||
+ | var link_html = this.e.children('div').html().split('</a>'); link_html.pop(); | ||
+ | for (var i = 0; i < link_html.length; i++) { | ||
+ | link_html[i] = "<li>" + link_html[i] + "</a></li>"; | ||
+ | if (link_html[i].indexOf('class="current"') != -1) { | ||
+ | link_html[i] = link_html[i].replace('class="current"','').replace('<li>','<li class="current">'); | ||
+ | } | ||
+ | } | ||
+ | this.e.children('div').append('<div><a href="#">▼</a><ul style="display:none">' + link_html.join("") + '</ul></div>'); | ||
+ | this.e.children('div').children('div').children('a').unbind('click').click(function(e){ | ||
+ | e.preventDefault(); | ||
+ | jQuery(this).next().toggle(); | ||
+ | if (jQuery(this).next().is(':visible')) { | ||
+ | jQuery(this).attr('style','color:rgba(255,255,255,1)'); | ||
+ | } else { | ||
+ | jQuery(this).removeAttr('style'); | ||
+ | } | ||
+ | this.dropdown_out = -1; | ||
+ | clearInterval(that.dropdown_interval); | ||
+ | that.dropdown_interval = null; | ||
+ | }); | ||
+ | this.e.children('div').children('div').children('ul').unbind('mouseenter').unbind('mouseleave').hover(function(){ | ||
+ | that.dropdown_out = -1; | ||
+ | clearInterval(that.dropdown_interval); | ||
+ | that.dropdown_interval = null; | ||
+ | },function(){ | ||
+ | that.dropdown_out = 10; | ||
+ | clearInterval(that.dropdown_interval); | ||
+ | that.dropdown_interval = setInterval(function(){ that.dropdown_interval_func(); },100); | ||
+ | }); | ||
+ | this.resize(); | ||
+ | }; | ||
+ | |||
addOnloadHook(createToggleLinks); | addOnloadHook(createToggleLinks); | ||
Revision as of 22:30, 21 June 2015
var retro_menu_objs = [];
jQuery(window).unbind('resize').resize(function(){
for (var i = 0; i < retro_menu_objs.length; i++)
if (typeof(retro_menu_objs[i]) == "object")
if (typeof(retro_menu_objs[i].resize) == "function")
retro_menu_objs[i].resize();
});
var retro_menu_obj = function(e, limit, outerlimit) {
var that = this;
this.e = e;
this.original_width = e.children('div').outerWidth();
this.limit = limit;
this.outerlimit = outerlimit;
this.resize = function() {
if (this.original_width == 0) return;
if (jQuery(window).width() >= this.original_width + this.limit) {
this.e.children('div').children('a').each(function(){
jQuery(this).show();
});
this.e.children('div').children('div').children('a').hide();
this.e.children('div').children('div').children('ul').children('li').each(function(){
jQuery(this).hide();
});
} else {
var els = [];
this.e.children('div').children('a').each(function(){
els.push(jQuery(this));
jQuery(this).show();
});
this.e.children('div').children('div').children('a').show();
var num = 0, current;
while (els.length > 0) {
current = els.pop();
current.hide();
num++;
if (jQuery(window).width() >= this.e.children('div').outerWidth() + this.outerlimit) els = [];
}
if (num > 0) {
this.e.children('div').children('div').children('ul').children('li').each(function(){
els.push(jQuery(this));
});
while (els.length > 0) {
current = els.pop();
if (num > 0) current.show(); else current.hide();
num--;
}
}
}
};
this.dropdown_out = -1;
this.dropdown_interval = null;
this.dropdown_interval_func = function(){
if (that.dropdown_out < 0) return;
else if (that.dropdown_out == 0) {
that.e.children('div').children('div').children('ul').hide();
that.e.children('div').children('div').children('a').removeAttr('style');
}
that.dropdown_out--;
};
if (this.e.children('div').children('div').length > 0) this.e.children('div').children('div').remove();
var link_html = this.e.children('div').html().split('</a>'); link_html.pop();
for (var i = 0; i < link_html.length; i++) {
link_html[i] = "<li>" + link_html[i] + "</a></li>";
if (link_html[i].indexOf('class="current"') != -1) {
link_html[i] = link_html[i].replace('class="current"','').replace('<li>','<li class="current">');
}
}
this.e.children('div').append('<div><a href="#">▼</a><ul style="display:none">' + link_html.join("") + '</ul></div>');
this.e.children('div').children('div').children('a').unbind('click').click(function(e){
e.preventDefault();
jQuery(this).next().toggle();
if (jQuery(this).next().is(':visible')) {
jQuery(this).attr('style','color:rgba(255,255,255,1)');
} else {
jQuery(this).removeAttr('style');
}
this.dropdown_out = -1;
clearInterval(that.dropdown_interval);
that.dropdown_interval = null;
});
this.e.children('div').children('div').children('ul').unbind('mouseenter').unbind('mouseleave').hover(function(){
that.dropdown_out = -1;
clearInterval(that.dropdown_interval);
that.dropdown_interval = null;
},function(){
that.dropdown_out = 10;
clearInterval(that.dropdown_interval);
that.dropdown_interval = setInterval(function(){ that.dropdown_interval_func(); },100);
});
this.resize();
};
addOnloadHook(createToggleLinks);
function createToggleLinks() {
var stateArray = new Array();
var allObjects = document.getElementsByTagName('span');
var rCollapsingObject = new RegExp("^co;(.+?);(.+?);(.+?);(.+?)(;(.+?))?$");
for ( var i = 0; i < allObjects.length; i++ ) {
if ( rCollapsingObject.test(allObjects[i].className) ) {
var collapsingInformation = rCollapsingObject.exec(allObjects[i].className);
var collapseText = collapsingInformation[1];
var expandText = collapsingInformation[2];
var initialState = collapsingInformation[3];
var targetClass = collapsingInformation[4];
var linkColor = collapsingInformation[6];
var toggleLink = document.createElement("a");
if ( initialState == "0" ) {
toggleLink.appendChild(document.createTextNode(expandText));
stateArray[targetClass] = "none";
}
else {
toggleLink.appendChild(document.createTextNode(collapseText));
stateArray[targetClass] = "inline";
}
toggleLink.setAttribute("href", "javascript:toggleCollapse('" + targetClass + "','" + collapseText + "','" + expandText + "')");
if ( linkColor != undefined && linkColor != "undefined" && linkColor != "" )
toggleLink.style.color = linkColor;
allObjects[i].innerHTML = "";
allObjects[i].appendChild(toggleLink);
}
else if ( allObjects[i].className == "morphMaster" ) {
var spanID = allObjects[i].getAttribute("id");
var targetID = spanID.substr(0, spanID.length - 6);
var counter = 1;
// Create forward and backward paging if the paging elements exist
if ( returnObjById(targetID + "LinkNext") && returnObjById(targetID + "LinkPrev") && returnObjById(targetID + "Content1") ) {
// Create the forward link
var nextLink = document.createElement("a");
nextLink.appendChild(document.createTextNode(returnObjById(targetID + "LinkNext").innerHTML));
nextLink.setAttribute("href", "javascript:morphForward('" + targetID + "')");
returnObjById(targetID + "LinkNext").innerHTML = "";
returnObjById(targetID + "LinkNext").appendChild(nextLink, 0);
// Create the backward link
var prevLink = document.createElement("a");
prevLink.appendChild(document.createTextNode(returnObjById(targetID + "LinkPrev").innerHTML));
prevLink.setAttribute("href", "javascript:morphBackward('" + targetID + "')");
returnObjById(targetID + "LinkPrev").innerHTML = "";
returnObjById(targetID + "LinkPrev").appendChild(prevLink, 0);
// Initialize content panes
while ( returnObjById(targetID + "Content" + counter) ) {
counter++;
}
}
counter = 1;
// Whether or not there is paging, generate normal links
while ( returnObjById(targetID + "Link" + counter) && returnObjById(targetID + "Content" + counter) ) {
var morphLink = document.createElement("a");
morphLink.appendChild(document.createTextNode(returnObjById(targetID + "Link" + counter).innerHTML));
morphLink.setAttribute("href", "javascript:performMorph('" + targetID + "','" + counter + "')");
returnObjById(targetID + "Link" + counter).innerHTML = "";
returnObjById(targetID + "Link" + counter).appendChild(morphLink, 0);
// Initialize content panes
counter++;
}
allObjects[i].innerHTML = "1";
allObjects[i].style.display = "none";
}
}
// Set state of appropriate objects
allObjects = document.getElementsByTagName('*');
for ( var i = 0; i < allObjects.length; i++ ) {
if ( stateArray[allObjects[i].className] )
allObjects[i].style.display = stateArray[allObjects[i].className];
}
}
/* Function that toggles collapsing objects.
* Added 7/13/2008 by WhiteMystery ([email protected]) */
function toggleCollapse(targetClass, collapseText, expandText) {
var allObjects = document.getElementsByTagName('*');
var rCollapsingObject = new RegExp("^co;(.+?);(.+?);(.+?);" + targetClass + "(;(.+?))?$");
var linkType;
for ( var i = 0; i < allObjects.length; i++ ) {
if ( allObjects[i].className == targetClass ) {
if ( allObjects[i].style.display == "none" ) {
allObjects[i].style.display = "inline";
linkType = "Collapse";
}
else {
allObjects[i].style.display = "none";
linkType = "Expand";
}
}
}
allObjects = document.getElementsByTagName('span');
for ( var i = 0; i < allObjects.length; i++ ) {
if ( rCollapsingObject.test(allObjects[i].className) ) {
var collapsingInformation = rCollapsingObject.exec(allObjects[i].className);
var collapseText = collapsingInformation[1];
var expandText = collapsingInformation[2];
var linkColor = collapsingInformation[5];
var toggleLink = document.createElement("a");
if ( linkType == "Expand" )
toggleLink.appendChild(document.createTextNode(expandText));
else if ( linkType == "Collapse" )
toggleLink.appendChild(document.createTextNode(collapseText));
toggleLink.setAttribute("href", "javascript:toggleCollapse('" + targetClass + "','" + collapseText + "','" + expandText + "')");
if ( linkColor != undefined && linkColor != "undefined" && linkColor != "" )
toggleLink.style.color = linkColor;
allObjects[i].innerHTML = "";
allObjects[i].appendChild(toggleLink);
}
}
}
/* Functions that perform the morph operations.
* Added 8/13/2008 by WhiteMystery ([email protected]) */
function performMorph(targetID, targetNumber) {
var counter = 1;
while ( returnObjById(targetID + "Content" + counter) ) {
if ( counter == targetNumber )
returnObjById(targetID + "Content" + counter).style.display = "block";
else
returnObjById(targetID + "Content" + counter).style.display = "none";
counter++;
}
returnObjById(targetID + "Master").innerHTML = targetNumber;
}
function morphForward(targetID) {
var nextPane = parseInt(returnObjById(targetID + "Master").innerHTML) + 1;
if ( returnObjById(targetID + "Content" + nextPane) )
performMorph(targetID, nextPane);
else
performMorph(targetID, "1");
}
function morphBackward(targetID) {
var prevPane = parseInt(returnObjById(targetID + "Master").innerHTML) - 1;
if ( prevPane > 0 )
performMorph(targetID, prevPane);
else {
var maxIndex = 1;
while ( returnObjById(targetID + "Content" + maxIndex) )
maxIndex++;
performMorph(targetID, maxIndex - 1);
}
}
/* Function that returns an object by ID for various browsers
* Taken from http://www.netlobo.com/javascript_get_element_id.html */
function returnObjById( id ) {
if (document.getElementById)
var returnVar = document.getElementById(id);
else if (document.all)
var returnVar = document.all[id];
else if (document.layers)
var returnVar = document.layers[id];
return returnVar;
}
/*</pre>*/