"use strict";
// $Id$
var fd_loadedHash={}, fd_loadedList=[], fd_all={}, fd_allCnt, fd_progress=0,
fd_lang, fd_offsets=[], fd_scrolled=0, fd_modLinks={}, csrfToken="X";
function
fd_status(txt)
{
var errmsg = $("#errmsg");
if(!$(errmsg).length) {
$('#menuScrollArea').append('
');
errmsg = $("#errmsg");
}
if(txt == "")
$(errmsg).remove();
else
$(errmsg).html(txt);
}
function
fd_fC(fn, callback)
{
console.log("fd_fC:"+fn);
var p = location.pathname;
var cmd = p.substr(0,p.indexOf('/doc'))+'?cmd='+fn+csrfToken+'&XHR=1';
$.ajax({
url:cmd, method:'POST', cache:false, success:callback,
error:function(xhr, status, err) {
if(xhr.status == 400 && csrfToken) {
csrfToken = "";
fd_csrfRefresh(function(){fd_fC(fn, callback)});
} else {
console.log("FAIL ERR:"+xhr.status+" STAT:"+status);
}
}
});
}
function
loadOneDoc(mname, lang)
{
var origLink = mname;
function
done(err, calc)
{
if(fd_progress) {
fd_status(fd_progress+" / "+fd_allCnt);
if(++fd_progress > fd_allCnt) {
fd_progress = 0;
setTimeout(calcOffsets,100); // Firefox returns wrong offsets
fd_status("");
}
} else {
if(calc)
setTimeout(calcOffsets,100);
if(!err)
setTimeout(function(){location.href = "#"+origLink;}, 100);
}
}
if(fd_modLinks[mname])
mname = fd_modLinks[mname];
if(fd_loadedHash[mname] && fd_loadedHash[mname] == lang)
return done(false, false);
fd_fC("help "+mname+" "+lang, function(ret){
//console.log(mname+" "+lang+" => "+ret.length);
if(ret.indexOf("") != 0 || ret.indexOf("No help found") == 0)
return done(true, false);
ret = ret.replace(/<\/?html>/g,'');
ret = ret.replace(/Keine deutsche Hilfe gefunden!
/,'');
ret = '
'+ret+'
';
ret = ret.replace(/target="_blank"/g, ''); // revert help URL rewrite
ret = ret.replace(/href=".*?commandref.*?.html#/g, 'href="#');
if(fd_loadedHash[mname])
$("div#FD_"+mname).remove();
if(!fd_loadedHash[mname])
fd_loadedList.push(mname);
fd_loadedHash[mname] = lang;
fd_loadedList.sort();
var idx=0;
while(fd_loadedList[idx] != mname)
idx++;
var toIns = "perl";
if(idx < fd_loadedList.length-1)
toIns = fd_loadedList[idx+1];
console.log("insert "+mname+" before "+toIns);
$(ret).insertBefore("a[name="+toIns+"]");
addAHooks("div#FD_"+mname);
return done(false, true);
});
}
function
addAHooks(el)
{
$(el).find("a[href]").each(function(){
var href = $(this).attr("href");
if(!href || href.indexOf("#") != 0)
return;
href = href.substr(1);
if(fd_modLinks[href] && !fd_loadedHash[href]) {
$(this).click(function(){
$("a[href=#"+href+"]").unbind('click');
loadOneDoc(href, fd_lang);
});
}
});
}
function
calcOffsets()
{
fd_offsets=[];
for(var i1=0; i1
= viewTop && viewBottom > fd_offsets[idx]+30)
break;
idx++;
}
if(idx >= fd_offsets.length) {
$("a#otherLang").hide();
} else {
var mname = fd_loadedList[idx];
var l1 = fd_loadedHash[mname], l2 = (l1=="EN" ? "DE" : "EN");
$("a#otherLang span.mod").html(mname);
$("a#otherLang span[lang="+l1+"]").hide();
$("a#otherLang span[lang="+l2+"]").show();
$("a#otherLang").show();
}
}
function
loadOtherLang()
{
var mname = $("a#otherLang span.mod").html();
loadOneDoc(mname, fd_loadedHash[mname]=="EN" ? "DE" : "EN");
}
function
fd_csrfRefresh(callback)
{
console.log("fd_csrfRefresh");
$.ajax({
url:location.pathname.replace(/docs.*/,'')+"?XHR=1",
success: function(data, textStatus, request){
csrfToken = request.getResponseHeader('x-fhem-csrftoken');
csrfToken = csrfToken ? ("&fwcsrf="+csrfToken) : "";
if(callback)
callback();
}
});
}
$(document).ready(function(){
var p = location.pathname;
fd_lang = p.substring(p.indexOf("commandref")+11,p.indexOf(".html"));
if(!fd_lang || fd_lang == '.')
fd_lang = "EN";
$("div#modLinks").each(function(){
var a1 = $(this).html().split(" ");
for(var i1=0; i1