summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/page/Template.scala55
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/template.css4
-rw-r--r--src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js158
3 files changed, 125 insertions, 92 deletions
diff --git a/src/compiler/scala/tools/nsc/doc/html/page/Template.scala b/src/compiler/scala/tools/nsc/doc/html/page/Template.scala
index ccc40013f1..bc2fc61d0b 100644
--- a/src/compiler/scala/tools/nsc/doc/html/page/Template.scala
+++ b/src/compiler/scala/tools/nsc/doc/html/page/Template.scala
@@ -80,34 +80,34 @@ class Template(tpl: DocTemplateEntity) extends HtmlPage {
{ signature(tpl, true) }
{ memberToCommentHtml(tpl, true) }
- <div id="template">
-
- <div id="mbrsel">
- <div id='textfilter'><span class='pre'/><span class='input'><input type='text' accesskey='/'/></span><span class='post'/></div>
- { if (tpl.linearizationTemplates.isEmpty) NodeSeq.Empty else
- <div id="order">
- <span class="filtertype">Ordering</span>
- <ol><li class="alpha in"><span>Alphabetic</span></li><li class="inherit out"><span>By inheritance</span></li></ol>
- </div>
- }
- { if (tpl.linearizationTemplates.isEmpty) NodeSeq.Empty else
- <div id="ancestors">
- <span class="filtertype">Inherited</span>
- <ol><li class="hideall out"><span>Hide All</span></li>
- <li class="showall in"><span>Show all</span></li></ol>
- <ol id="linearization">{
- (tpl :: tpl.linearizationTemplates) map { wte => <li class="in" name={ wte.qualifiedName }><span>{ wte.name }</span></li> }
- }</ol>
- </div>
- }
- {
- <div id="visbl">
- <span class="filtertype">Visibility</span>
- <ol><li class="public in"><span>Public</span></li><li class="all out"><span>All</span></li></ol>
+ <div id="mbrsel">
+ <div id='textfilter'><span class='pre'/><span class='input'><input type='text' accesskey='/'/></span><span class='post'/></div>
+ { if (tpl.linearizationTemplates.isEmpty) NodeSeq.Empty else
+ <div id="order">
+ <span class="filtertype">Ordering</span>
+ <ol><li class="alpha in"><span>Alphabetic</span></li><li class="inherit out"><span>By inheritance</span></li></ol>
</div>
- }
- </div>
+ }
+ { if (tpl.linearizationTemplates.isEmpty) NodeSeq.Empty else
+ <div id="ancestors">
+ <span class="filtertype">Inherited</span>
+ <ol><li class="hideall out"><span>Hide All</span></li>
+ <li class="showall in"><span>Show all</span></li></ol>
+ <ol id="linearization">{
+ (tpl :: tpl.linearizationTemplates) map { wte => <li class="in" name={ wte.qualifiedName }><span>{ wte.name }</span></li> }
+ }</ol>
+ </div>
+ }
+ {
+ <div id="visbl">
+ <span class="filtertype">Visibility</span>
+ <ol><li class="public in"><span>Public</span></li><li class="all out"><span>All</span></li></ol>
+ </div>
+ }
+ </div>
+ <div id="template">
+ <div id="allMembers">
{ if (constructors.isEmpty) NodeSeq.Empty else
<div id="constructors" class="members">
<h3>Instance Constructors</h3>
@@ -142,7 +142,9 @@ class Template(tpl: DocTemplateEntity) extends HtmlPage {
<ol>{ deprValueMembers map (memberToHtml(_)) }</ol>
</div>
}
+ </div>
+ <div id="inheritedMembers">
{
NodeSeq fromSeq (for ((superTpl, superType) <- (tpl.linearizationTemplates zip tpl.linearizationTypes)) yield
<div class="parent" name={ superTpl.qualifiedName }>
@@ -161,6 +163,7 @@ class Template(tpl: DocTemplateEntity) extends HtmlPage {
</div>
)
}
+ </div>
</div>
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.css b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.css
index 84c2d6bfc0..441f6153e9 100644
--- a/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.css
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.css
@@ -227,7 +227,7 @@ dl.attributes > dd {
height: 18px;
}
-#template > div.parent > h3 {
+#inheritedMembers > div.parent > h3 {
background-color: #dadada;
/* border:1px solid #6f6f6f;
border-left:0;
@@ -243,7 +243,7 @@ dl.attributes > dd {
font-size: 12pt;
}
-#template > div.parent > h3 * {
+#inheritedMembers > div.parent > h3 * {
color: white;
}
diff --git a/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js
index 0d2e373811..09437063c2 100644
--- a/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js
+++ b/src/compiler/scala/tools/nsc/doc/html/resource/lib/template.js
@@ -16,20 +16,29 @@ $(document).ready(function(){
$("#linearization li").filter(function(){
return isHiddenClass($(this).attr("name"));
}).removeClass("in").addClass("out");
+
+ // Pre-filter members
filter();
+ // Member filter box
var input = $("#textfilter input");
input.bind("keyup", function(event) {
- if (event.keyCode == 27) { // escape
- input.attr("value", "");
- }
- filter();
+ if (event.keyCode == 27)
+ input.val(""); // escape key
+ filter(true);
});
- input.focus(function(event) { input.select(); });
- $("#textfilter > .post").click(function(){
+ input.focus(function(event) {
+ input.select();
+ });
+ $("#textfilter > .post").click(function() {
$("#textfilter input").attr("value", "");
filter();
});
+ $(document).keydown(function() {
+ if (document.activeElement != $("#textfilter input")[0])
+ $("#textfilter input").focus();
+ });
+ $("#textfilter input").focus();
$("#linearization li").click(function(){
if ($(this).hasClass("in")) {
@@ -162,12 +171,13 @@ function orderInherit() {
function initInherit() {
// parents is a map from fully-qualified names to the DOM node of parent headings.
var parents = new Object();
- $("#template > div.parent").each(function(){
+ $("#inheritedMembers > div.parent").each(function(){
parents[$(this).attr("name")] = $(this);
});
- //
$("#types > ol > li").each(function(){
- var qualName = $(this).attr("name");
+ 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 parent = parents[owner];
@@ -177,11 +187,15 @@ function initInherit() {
parent.append("<div class='types members'><h3>Type Members</h3><ol></ol></div>");
types = $("> .types > ol", parent);
}
- types.append($(this).clone());
+ var clone = mbr.clone();
+ clone[0].mbrText = this.mbrText;
+ types.append(clone);
}
});
$("#values > ol > li").each(function(){
- var qualName = $(this).attr("name");
+ 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 parent = parents[owner];
@@ -191,70 +205,86 @@ function initInherit() {
parent.append("<div class='values members'><h3>Value Members</h3><ol></ol></div>");
values = $("> .values > ol", parent);
}
- values.append($(this).clone());
+ var clone = mbr.clone();
+ clone[0].mbrText = this.mbrText;
+ values.append(clone);
}
});
- $("#template > div.parent").each(function(){
+ $("#inheritedMembers > div.parent").each(function() {
if ($("> div.members", this).length == 0) { $(this).remove(); };
});
- $("#template > div.parent").each(function(){
- $(this).hide();
- });
};
-function filter() {
- var query = $("#textfilter input").attr("value").toLowerCase();
+function filter(scrollToMember) {
+ var query = $.trim($("#textfilter input").val()).toLowerCase();
+ query = query.replace(/[-[\]{}()*+?.,\\^$|#]/g, "\\$&").replace(/\s+/g, "|");
var queryRegExp = new RegExp(query, "i");
- var inheritHides = null
- if ($("#order > ol > li.inherit").hasClass("in")) {
- inheritHides = $("#linearization > li:gt(0)");
+ var privateMembersHidden = $("#visbl > ol > li.public").hasClass("in");
+ var orderingAlphabetic = $("#order > ol > li.alpha").hasClass("in");
+ var hiddenSuperclassElements = orderingAlphabetic ? $("#linearization > li.out") : $("#linearization > li:gt(0)");
+ var hiddenSuperclasses = hiddenSuperclassElements.map(function() {
+ return $(this).attr("name");
+ }).get();
+
+ var hideInheritedMembers;
+
+ if(orderingAlphabetic) {
+ $("#inheritedMembers").hide();
+ hideInheritedMembers = true;
+ $("#allMembers > .members").each(filterFunc);
}
else {
- inheritHides = $("#linearization > li.out");
+ $("#inheritedMembers").show();
+ hideInheritedMembers = true;
+ $("#allMembers > .members").each(filterFunc);
+ hideInheritedMembers = false;
+ $("#inheritedMembers > .parent > .members").each(filterFunc);
}
- var outOwners =
- inheritHides.map(function(){
- var r = $(this).attr("name");
- return r
- }).get();
- var prtVisbl = $("#visbl > ol > li.all").hasClass("in");
- $(".members > ol > li").each(function(){
- var vis1 = $(this).attr("visbl");
- var qualName1 = $(this).attr("name");
- //var name1 = qualName1.slice(qualName1.indexOf("#") + 1);
- var showByOwned = true;
- if ($(this).parents(".parent").length == 0) {
- // owner filtering must not happen in "inherited from" member lists
- var ownerIndex = qualName1.indexOf("#");
- if (ownerIndex < 0) { ownerIndex = qualName1.lastIndexOf("."); }
- var owner1 = qualName1.slice(0, ownerIndex);
- for (out in outOwners) {
- if (outOwners[out] == owner1) {
- showByOwned = false;
- };
- };
- };
- var showByVis = true;
- if (vis1 == "prt") {
- showByVis = prtVisbl;
- };
- var showByName = true;
- if (query != "") {
- var content = $(this).attr("name") + $("> .fullcomment .cmt", this).text();
- showByName = queryRegExp.test(content);
- };
- if (showByOwned && showByVis && showByName) {
- $(this).show();
+
+
+ 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;
}
- else {
- $(this).hide();
- };
- });
- $(".members").each(function(){
- $(this).show();
- if ($(" > ol > li:visible", this).length == 0) { $(this).hide(); }
- });
- return false
+ 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 < hiddenSuperclasses.length; i++) {
+ if (hiddenSuperclasses[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();
+ };
+
+ if (scrollToMember) {
+ window.scrollTo(0, $("#mbrsel").offset().top);
+ }
+
+ return false;
};
function windowTitle()