bkyk8rc3zvpnsf5inmcqq4n3k98cv6hj-my-site-hyper-literate-git.test.suzanne.soy-0.0.1

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 2eb8e4574f4ab2dad45d35b5e06a842036a49062
parent b4fa567f90d7fc52acbcfa23c9825a01178a7576
Author: Eli Barzilay <eli@racket-lang.org>
Date:   Thu, 26 Nov 2009 20:45:40 +0000

* Propagate all url arguments to links (except ones that are present)
* Use ctxtname for the displayed label
* `langindicator' -> `contextindicator' in css

svn: r17073

original commit: c0be5f0d12264832ddc99124963b4837ce5a6f07

Diffstat:
Mcollects/scribble/html-render.ss | 2+-
Mcollects/scribble/scribble-common.js | 115++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mcollects/scribble/scribble.css | 2+-
3 files changed, 63 insertions(+), 56 deletions(-)

diff --git a/collects/scribble/html-render.ss b/collects/scribble/html-render.ss @@ -619,7 +619,7 @@ ,@(navigation d ri #t) ,@(render-part d ri) ,@(navigation d ri #f))) - (div ([id "langindicator"]) nbsp))))))))) + (div ([id "contextindicator"]) nbsp))))))))) (define/private (part-parent d ri) (collected-info-parent (part-collected-info d ri))) diff --git a/collects/scribble/scribble-common.js b/collects/scribble/scribble-common.js @@ -1,5 +1,56 @@ // Common functionality for PLT documentation pages +// Page Parameters ------------------------------------------------------------ + +var page_query_string = + (location.href.search(/\?([^#]+)(?:#|$)/) >= 0) && RegExp.$1; + +var page_args = + ((function(){ + if (!page_query_string) return []; + var args = page_query_string.split(/[&;]/); + for (var i=0; i<args.length; i++) { + var a = args[i]; + var p = a.indexOf('='); + if (p >= 0) args[i] = [a.substring(0,p), a.substring(p+1)]; + else args[i] = [a, false]; + } + return args; + })()); + +function GetPageArg(key, def) { + for (var i=0; i<page_args.length; i++) + if (page_args[i][0] == key) return unescape(page_args[i][1]); + return def; +} + +function MergePageArgsIntoLink(a) { + if (page_args.length == 0 || + (!a.attributes["pltdoc"]) || (a.attributes["pltdoc"].value == "")) + return; + a.href.search(/^([^?#]*)(?:\?([^#]*))?(#.*)?$/); + if (RegExp.$2.length == 0) { + a.href = RegExp.$1 + "?" + page_query_string + RegExp.$3; + } else { + // need to merge here, precedence to arguments that exist in `a' + var i, j; + var prefix = RegExp.$1, str = RegExp.$2, suffix = RegExp.$3; + var args = str.split(/[&;]/); + for (i=0; i<args.length; i++) { + j = args[i].indexOf('='); + if (j) args[i] = args[i].substring(0,j); + } + var additions = ""; + for (i=0; i<page_args.length; i++) { + var exists = false; + for (j=0; j<args.length; j++) + if (args[j] == page_args[i][0]) { exists = true; break; } + if (!exists) str += "&" + page_args[i][0] + "=" + page_args[i][1]; + } + a.href = prefix + "?" + str + suffix; + } +} + // Cookies -------------------------------------------------------------------- function GetCookie(key, def) { @@ -38,38 +89,6 @@ function GotoPLTRoot(ver, relative) { return false; } -// URL Parameters ------------------------------------------------------------- - -// In the following functions, the `name' argument is assumed to be simple in -// that it doesn't contain anything that isn't plain text in a regexp. (This -// is because JS doesn't have a `regexp-quote', easy to hack but not needed -// here). Also, the output value from the Get functions and the input value to -// the Set functions is decoded/encoded. Note that `SetArgInURL' mutates the -// string in the url object. - -function GetArgFromString(str, name) { - var rx = new RegExp("(?:^|[;&])"+name+"=([^&;]*)(?:[;&]|$)"); - return rx.test(str) && unescape(RegExp.$1); -} - -function SetArgInString(str, name, val) { - val = escape(val); - if (str.length == 0) return name + "=" + val; - var rx = new RegExp("^((?:|.*[;&])"+name+"=)(?:[^&;]*)([;&].*|)$"); - if (rx.test(str)) return RegExp.$1 + val + RegExp.$2; - else return name + "=" + val + "&" + str; -} - -function GetArgFromURL(url, name) { - if (url.href.search(/\?([^#]*)(?:#|$)/) < 0) return false; - return GetArgFromString(RegExp.$1, name); -} - -function SetArgInURL(url, name, val) { // note: mutates the string - url.href.search(/^([^?#]*)(?:\?([^#]*))?(#.*)?$/); - url.href = RegExp.$1 + "?" + SetArgInString(RegExp.$2,name,val) + RegExp.$3; -} - // Utilities ------------------------------------------------------------------ normalize_rxs = [/\/\/+/g, /\/\.(\/|$)/, /\/[^\/]*\/\.\.(\/|$)/]; @@ -90,12 +109,10 @@ function DoSearchKey(event, field, ver, top_path) { var val = field.value; if (event && event.keyCode == 13) { var u = GetCookie("PLT_Root."+ver, null); - var args = ""; if (u == null) u = top_path; // default: go to the top path - u += "search/index.html"; - args = SetArgInString(args, "q", val); - if (cur_plt_lang) args = SetArgInString(args, "lang", cur_plt_lang); - location = u + "?" + args; + u += "search/index.html?q=" + escape(val); + if (page_query_string) u += "&" + page_query_string; + location = u; return false; } return true; @@ -119,23 +136,13 @@ window.onload = function() { for (var i=0; i<on_load_funcs.length; i++) on_load_funcs[i](); }; -var cur_plt_lang = GetArgFromURL(location,"lang"); - -function PropagateLangInLink(a) { - // the attribute's value doesn't matter - if (cur_plt_lang - && a.attributes["pltdoc"] && a.attributes["pltdoc"].value != "" - && !GetArgFromURL(a,"lang")) - SetArgInURL(a, "lang", cur_plt_lang); -} - AddOnLoad(function(){ - if (!cur_plt_lang) return; - var indicator = document.getElementById("langindicator"); - if (indicator) { - indicator.innerHTML = cur_plt_lang; - indicator.style.display = "block"; - } var links = document.getElementsByTagName("a"); - for (var i=0; i<links.length; i++) PropagateLangInLink(links[i]); + for (var i=0; i<links.length; i++) MergePageArgsIntoLink(links[i]); + var label = GetPageArg("ctxtname",false); + if (!label) return; + var indicator = document.getElementById("langindicator"); + if (!indicator) return; + indicator.innerHTML = label; + indicator.style.display = "block"; }); diff --git a/collects/scribble/scribble.css b/collects/scribble/scribble.css @@ -119,7 +119,7 @@ table td { vertical-align: middle; } -#langindicator { +#contextindicator { position: fixed; background-color: #c6f; color: #000;