blob: 798a2d430b9e40540b2249ab0851c87d9c7e6bd0 [file] [log] [blame]
// © 2009–2010 EPFL/LAMP
// code by Gilles Dubochet with contributions by Pedro Furlanetto and Marcin Kubala
$(document).ready(function(){
var controls = {
visibility: {
publicOnly: $("#visbl").find("> ol > li.public"),
all: $("#visbl").find("> ol > li.all")
}
};
// Escapes special characters and returns a valid jQuery selector
function escapeJquery(str){
return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=<>\|])/g, '\\$1');
}
function toggleVisibilityFilter(ctrlToEnable, ctrToDisable) {
if (ctrlToEnable.hasClass("out")) {
ctrlToEnable.removeClass("out").addClass("in");
ctrToDisable.removeClass("in").addClass("out");
filter();
}
}
controls.visibility.publicOnly.click(function () {
toggleVisibilityFilter(controls.visibility.publicOnly, controls.visibility.all);
});
controls.visibility.all.click(function () {
toggleVisibilityFilter(controls.visibility.all, controls.visibility.publicOnly);
});
function exposeMember(jqElem) {
var jqElemParent = jqElem.parent(),
parentName = jqElemParent.attr("name"),
linearizationName = /^([^#]*)(#.*)?$/gi.exec(parentName)[1];
// switch visibility filter if necessary
if (jqElemParent.attr("visbl") == "prt") {
toggleVisibilityFilter(controls.visibility.all, controls.visibility.publicOnly);
}
// toggle appropriate linearization buttons
if (linearizationName) {
$("#linearization li.out[name='" + linearizationName + "']").removeClass("out").addClass("in");
}
filter();
window.scrollTo(0, 0);
jqElemParent.effect("highlight", {color: "#FFCC85"}, 3000);
$('html,body').animate({scrollTop: jqElemParent.offset().top}, 1000);
}
var isHiddenClass = function (name) {
return name == 'scala.Any' ||
name == 'scala.AnyRef';
};
var isHidden = function (elem) {
return $(elem).attr("data-hidden") == 'true';
};
$("#linearization li:gt(0)").filter(function(){
return isHiddenClass($(this).attr("name"));
}).removeClass("in").addClass("out");
$("#implicits li").filter(function(){
return isHidden(this);
}).removeClass("in").addClass("out");
// Pre-filter members
filter();
// Member filter box
var input = $("#textfilter input");
input.bind("keyup", function(event) {
switch ( event.keyCode ) {
case 27: // escape key
input.val("");
filter(true);
break;
case 38: // up
input.val("");
filter(false);
window.scrollTo(0, $("body").offset().top);
input.focus();
break;
case 33: //page up
input.val("");
filter(false);
break;
case 34: //page down
input.val("");
filter(false);
break;
default:
window.scrollTo(0, $("#mbrsel").offset().top);
filter(true);
break;
}
});
input.focus(function(event) {
input.select();
});
$("#textfilter > .post").click(function() {
$("#textfilter input").attr("value", "");
filter();
});
$(document).keydown(function(event) {
if (event.keyCode == 9) { // tab
$("#index-input", window.parent.document).focus();
input.attr("value", "");
return false;
}
});
$("#linearization li").click(function(){
if ($(this).hasClass("in")) {
$(this).removeClass("in");
$(this).addClass("out");
}
else if ($(this).hasClass("out")) {
$(this).removeClass("out");
$(this).addClass("in");
}
filter();
});
$("#implicits li").click(function(){
if ($(this).hasClass("in")) {
$(this).removeClass("in");
$(this).addClass("out");
}
else if ($(this).hasClass("out")) {
$(this).removeClass("out");
$(this).addClass("in");
}
filter();
});
$("#mbrsel > div[id=ancestors] > ol > li.hideall").click(function() {
$("#linearization li.in").removeClass("in").addClass("out");
$("#linearization li:first").removeClass("out").addClass("in");
$("#implicits li.in").removeClass("in").addClass("out");
if ($(this).hasClass("out") && $("#mbrsel > div[id=ancestors] > ol > li.showall").hasClass("in")) {
$(this).removeClass("out").addClass("in");
$("#mbrsel > div[id=ancestors] > ol > li.showall").removeClass("in").addClass("out");
}
filter();
})
$("#mbrsel > div[id=ancestors] > ol > li.showall").click(function() {
var filteredLinearization =
$("#linearization li.out").filter(function() {
return ! isHiddenClass($(this).attr("name"));
});
filteredLinearization.removeClass("out").addClass("in");
var filteredImplicits =
$("#implicits li.out").filter(function() {
return ! isHidden(this);
});
filteredImplicits.removeClass("out").addClass("in");
if ($(this).hasClass("out") && $("#mbrsel > div[id=ancestors] > ol > li.hideall").hasClass("in")) {
$(this).removeClass("out").addClass("in");
$("#mbrsel > div[id=ancestors] > ol > li.hideall").removeClass("in").addClass("out");
}
filter();
});
$("#order > ol > li.alpha").click(function() {
if ($(this).hasClass("out")) {
orderAlpha();
}
})
$("#order > ol > li.inherit").click(function() {
if ($(this).hasClass("out")) {
orderInherit();
}
});
$("#order > ol > li.group").click(function() {
if ($(this).hasClass("out")) {
orderGroup();
}
});
$("#groupedMembers").hide();
initInherit();
// Create tooltips
$(".extype").add(".defval").tooltip({
tip: "#tooltip",
position: "top center",
predelay: 500,
onBeforeShow: function(ev) {
$(this.getTip()).text(this.getTrigger().attr("name"));
}
});
/* Add toggle arrows */
//var docAllSigs = $("#template li").has(".fullcomment").find(".signature");
// trying to speed things up a little bit
var docAllSigs = $("#template li[fullComment=yes] .signature");
function commentToggleFct(signature){
var parent = signature.parent();
var shortComment = $(".shortcomment", parent);
var fullComment = $(".fullcomment", parent);
var vis = $(":visible", fullComment);
signature.toggleClass("closed").toggleClass("opened");
if (vis.length > 0) {
shortComment.slideDown(100);
fullComment.slideUp(100);
}
else {
shortComment.slideUp(100);
fullComment.slideDown(100);
}
};
docAllSigs.addClass("closed");
docAllSigs.click(function() {
commentToggleFct($(this));
});
/* Linear super types and known subclasses */
function toggleShowContentFct(e){
e.toggleClass("open");
var content = $(".hiddenContent", e.parent().get(0));
if (content.is(':visible')) {
content.slideUp(100);
}
else {
content.slideDown(100);
}
};
$(".toggle:not(.diagram-link)").click(function() {
toggleShowContentFct($(this));
});
// Set parent window title
windowTitle();
if ($("#order > ol > li.group").length == 1) { orderGroup(); };
function findElementByHash(locationHash) {
var temp = locationHash.replace('#', '');
var memberSelector = '#' + escapeJquery(temp);
return $(memberSelector);
}
// highlight and jump to selected member
if (window.location.hash) {
var jqElem = findElementByHash(window.location.hash);
if (jqElem.length > 0) {
exposeMember(jqElem);
}
}
});
function orderAlpha() {
$("#order > ol > li.alpha").removeClass("out").addClass("in");
$("#order > ol > li.inherit").removeClass("in").addClass("out");
$("#order > ol > li.group").removeClass("in").addClass("out");
$("#template > div.parent").hide();
$("#template > div.conversion").hide();
$("#mbrsel > div[id=ancestors]").show();
filter();
};
function orderInherit() {
$("#order > ol > li.inherit").removeClass("out").addClass("in");
$("#order > ol > li.alpha").removeClass("in").addClass("out");
$("#order > ol > li.group").removeClass("in").addClass("out");
$("#template > div.parent").show();
$("#template > div.conversion").show();
$("#mbrsel > div[id=ancestors]").hide();
filter();
};
function orderGroup() {
$("#order > ol > li.group").removeClass("out").addClass("in");
$("#order > ol > li.alpha").removeClass("in").addClass("out");
$("#order > ol > li.inherit").removeClass("in").addClass("out");
$("#template > div.parent").hide();
$("#template > div.conversion").hide();
$("#mbrsel > div[id=ancestors]").show();
filter();
};
/** Prepares the DOM for inheritance-based display. To do so it will:
* - hide all statically-generated parents headings;
* - copy all members from the value and type members lists (flat members) to corresponding lists nested below the
* parent headings (inheritance-grouped members);
* - initialises a control variable used by the filter method to control whether filtering happens on flat members
* or on inheritance-grouped members. */
function initInherit() {
// inheritParents is a map from fully-qualified names to the DOM node of parent headings.
var inheritParents = new Object();
var groupParents = new Object();
$("#inheritedMembers > div.parent").each(function(){
inheritParents[$(this).attr("name")] = $(this);
});
$("#inheritedMembers > div.conversion").each(function(){
inheritParents[$(this).attr("name")] = $(this);
});
$("#groupedMembers > div.group").each(function(){
groupParents[$(this).attr("name")] = $(this);
});
$("#types > ol > li").each(function(){
var mbr = $(this);
this.mbrText = mbr.find("> .fullcomment .cmt").text();
var qualName = mbr.attr("name");
var owner = qualName.slice(0, qualName.indexOf("#"));
var name = qualName.slice(qualName.indexOf("#") + 1);
var inheritParent = inheritParents[owner];
if (inheritParent != undefined) {
var types = $("> .types > ol", inheritParent);
if (types.length == 0) {
inheritParent.append("<div class='types members'><h3>Type Members</h3><ol></ol></div>");
types = $("> .types > ol", inheritParent);
}
var clone = mbr.clone();
clone[0].mbrText = this.mbrText;
types.append(clone);
}
var group = mbr.attr("group")
var groupParent = groupParents[group];
if (groupParent != undefined) {
var types = $("> .types > ol", groupParent);
if (types.length == 0) {
groupParent.append("<div class='types members'><ol></ol></div>");
types = $("> .types > ol", groupParent);
}
var clone = mbr.clone();
clone[0].mbrText = this.mbrText;
types.append(clone);
}
});
$("#values > ol > li").each(function(){
var mbr = $(this);
this.mbrText = mbr.find("> .fullcomment .cmt").text();
var qualName = mbr.attr("name");
var owner = qualName.slice(0, qualName.indexOf("#"));
var name = qualName.slice(qualName.indexOf("#") + 1);
var inheritParent = inheritParents[owner];
if (inheritParent != undefined) {
var values = $("> .values > ol", inheritParent);
if (values.length == 0) {
inheritParent.append("<div class='values members'><h3>Value Members</h3><ol></ol></div>");
values = $("> .values > ol", inheritParent);
}
var clone = mbr.clone();
clone[0].mbrText = this.mbrText;
values.append(clone);
}
var group = mbr.attr("group")
var groupParent = groupParents[group];
if (groupParent != undefined) {
var values = $("> .values > ol", groupParent);
if (values.length == 0) {
groupParent.append("<div class='values members'><ol></ol></div>");
values = $("> .values > ol", groupParent);
}
var clone = mbr.clone();
clone[0].mbrText = this.mbrText;
values.append(clone);
}
});
$("#inheritedMembers > div.parent").each(function() {
if ($("> div.members", this).length == 0) { $(this).remove(); };
});
$("#inheritedMembers > div.conversion").each(function() {
if ($("> div.members", this).length == 0) { $(this).remove(); };
});
$("#groupedMembers > div.group").each(function() {
if ($("> div.members", this).length == 0) { $(this).remove(); };
});
};
/* filter used to take boolean scrollToMember */
function filter() {
var query = $.trim($("#textfilter input").val()).toLowerCase();
query = query.replace(/[-[\]{}()*+?.,\\^$|#]/g, "\\$&").replace(/\s+/g, "|");
var queryRegExp = new RegExp(query, "i");
var privateMembersHidden = $("#visbl > ol > li.public").hasClass("in");
var orderingAlphabetic = $("#order > ol > li.alpha").hasClass("in");
var orderingInheritance = $("#order > ol > li.inherit").hasClass("in");
var orderingGroups = $("#order > ol > li.group").hasClass("in");
var hiddenSuperclassElementsLinearization = orderingInheritance ? $("#linearization > li:gt(0)") : $("#linearization > li.out");
var hiddenSuperclassesLinearization = hiddenSuperclassElementsLinearization.map(function() {
return $(this).attr("name");
}).get();
var hiddenSuperclassElementsImplicits = orderingInheritance ? $("#implicits > li") : $("#implicits > li.out");
var hiddenSuperclassesImplicits = hiddenSuperclassElementsImplicits.map(function() {
return $(this).attr("name");
}).get();
var hideInheritedMembers;
if (orderingAlphabetic) {
$("#allMembers").show();
$("#inheritedMembers").hide();
$("#groupedMembers").hide();
hideInheritedMembers = true;
$("#allMembers > .members").each(filterFunc);
} else if (orderingGroups) {
$("#groupedMembers").show();
$("#inheritedMembers").hide();
$("#allMembers").hide();
hideInheritedMembers = true;
$("#groupedMembers > .group > .members").each(filterFunc);
$("#groupedMembers > div.group").each(function() {
$(this).show();
if ($("> div.members", this).not(":hidden").length == 0) {
$(this).hide();
} else {
$(this).show();
}
});
} else if (orderingInheritance) {
$("#inheritedMembers").show();
$("#groupedMembers").hide();
$("#allMembers").hide();
hideInheritedMembers = false;
$("#inheritedMembers > .parent > .members").each(filterFunc);
$("#inheritedMembers > .conversion > .members").each(filterFunc);
}
function filterFunc() {
var membersVisible = false;
var members = $(this);
members.find("> ol > li").each(function() {
var mbr = $(this);
if (privateMembersHidden && mbr.attr("visbl") == "prt") {
mbr.hide();
return;
}
var name = mbr.attr("name");
// Owner filtering must not happen in "inherited from" member lists
if (hideInheritedMembers) {
var ownerIndex = name.indexOf("#");
if (ownerIndex < 0) {
ownerIndex = name.lastIndexOf(".");
}
var owner = name.slice(0, ownerIndex);
for (var i = 0; i < hiddenSuperclassesLinearization.length; i++) {
if (hiddenSuperclassesLinearization[i] == owner) {
mbr.hide();
return;
}
};
for (var i = 0; i < hiddenSuperclassesImplicits.length; i++) {
if (hiddenSuperclassesImplicits[i] == owner) {
mbr.hide();
return;
}
};
}
if (query && !(queryRegExp.test(name) || queryRegExp.test(this.mbrText))) {
mbr.hide();
return;
}
mbr.show();
membersVisible = true;
});
if (membersVisible)
members.show();
else
members.hide();
};
return false;
};
function windowTitle()
{
try {
parent.document.title=document.title;
}
catch(e) {
// Chrome doesn't allow settings the parent's title when
// used on the local file system.
}
};