* 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
This commit is contained in:
parent
b4fa567f90
commit
2eb8e4574f
|
@ -619,7 +619,7 @@
|
||||||
,@(navigation d ri #t)
|
,@(navigation d ri #t)
|
||||||
,@(render-part d ri)
|
,@(render-part d ri)
|
||||||
,@(navigation d ri #f)))
|
,@(navigation d ri #f)))
|
||||||
(div ([id "langindicator"]) nbsp)))))))))
|
(div ([id "contextindicator"]) nbsp)))))))))
|
||||||
|
|
||||||
(define/private (part-parent d ri)
|
(define/private (part-parent d ri)
|
||||||
(collected-info-parent (part-collected-info d ri)))
|
(collected-info-parent (part-collected-info d ri)))
|
||||||
|
|
|
@ -1,5 +1,56 @@
|
||||||
// Common functionality for PLT documentation pages
|
// 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 --------------------------------------------------------------------
|
// Cookies --------------------------------------------------------------------
|
||||||
|
|
||||||
function GetCookie(key, def) {
|
function GetCookie(key, def) {
|
||||||
|
@ -38,38 +89,6 @@ function GotoPLTRoot(ver, relative) {
|
||||||
return false;
|
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 ------------------------------------------------------------------
|
// Utilities ------------------------------------------------------------------
|
||||||
|
|
||||||
normalize_rxs = [/\/\/+/g, /\/\.(\/|$)/, /\/[^\/]*\/\.\.(\/|$)/];
|
normalize_rxs = [/\/\/+/g, /\/\.(\/|$)/, /\/[^\/]*\/\.\.(\/|$)/];
|
||||||
|
@ -90,12 +109,10 @@ function DoSearchKey(event, field, ver, top_path) {
|
||||||
var val = field.value;
|
var val = field.value;
|
||||||
if (event && event.keyCode == 13) {
|
if (event && event.keyCode == 13) {
|
||||||
var u = GetCookie("PLT_Root."+ver, null);
|
var u = GetCookie("PLT_Root."+ver, null);
|
||||||
var args = "";
|
|
||||||
if (u == null) u = top_path; // default: go to the top path
|
if (u == null) u = top_path; // default: go to the top path
|
||||||
u += "search/index.html";
|
u += "search/index.html?q=" + escape(val);
|
||||||
args = SetArgInString(args, "q", val);
|
if (page_query_string) u += "&" + page_query_string;
|
||||||
if (cur_plt_lang) args = SetArgInString(args, "lang", cur_plt_lang);
|
location = u;
|
||||||
location = u + "?" + args;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -119,23 +136,13 @@ window.onload = function() {
|
||||||
for (var i=0; i<on_load_funcs.length; i++) on_load_funcs[i]();
|
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(){
|
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");
|
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";
|
||||||
});
|
});
|
||||||
|
|
|
@ -119,7 +119,7 @@ table td {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
#langindicator {
|
#contextindicator {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
background-color: #c6f;
|
background-color: #c6f;
|
||||||
color: #000;
|
color: #000;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user