You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1280 lines
44 KiB

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SABnzbd+</title>
<link rel="stylesheet" type="text/css" href="static/stylesheets/smpl.css?smpl$version"/>
<!--#if $color_scheme#-->
<link rel="stylesheet" type="text/css" href="static/stylesheets/colorschemes/${color_scheme}.css?smpl$version"/>
<!--#else#-->
<link rel="stylesheet" type="text/css" href="static/stylesheets/colorschemes/white.css?smpl$version"/>
<!--#end if#-->
<link href="rss?mode=history&apikey=$session" rel="alternate" type="application/rss+xml" title="SABnzbd+ History" />
<link rel="shortcut icon" href="static/images/favicon.ico" />
<script type="text/javascript" src="static/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="static/PlotKit/PlotKit.js"></script>
<!--[if IE]><script type="text/javascript" src="static/excanvas/excanvas.js"></script><![endif]-->
<!--#set $mbdone = (float($mb) - float($mbleft))#-->
<!--#set $mbdonesrt = float($mbdone) #-->
<!--#set $kbpersec = float($kbpersec)#-->
<!--#set $kbpersecrnd = str(int($kbpersec))#-->
<!--#if $paused #-->
<!--#set $kbpersecrnd = "0"#-->
<!--#end if#-->
<script type="text/javascript">
// refresh time in seconds
RefreshTime = 5;
var jsontimeout;
var cookietimeout;
var speed = '$speed';
var kbpersec = $kbpersecrnd;
var gDual = 0;
var gUrl;
var gDeferrer;
var gDeferrerTwo;
var gRight;
var gRightBottom;
var session = "$session";
</script>
<script type="text/javascript">
function tvAdd(val){
var tv = document.getElementById('tvfoldername');
tv.value = tv.value + val;
previewtv();
}
function tvSet(val){
var tv = document.getElementById('tvfoldername');
tv.value = val;
previewtv();
}
function tvClear(){
var tv = document.getElementById('tvfoldername');
tv.value = '';
previewtv();
}
function previewtv(){
var input = document.getElementById('tvfoldername').value;
var slash = "\\";
input.toLowerCase()
input = input.replace(/%ext/g,'avi');
input = input.replace(/%sn/g,'$T("show-sp-name")');
input = input.replace(/%s\.n/g,'$T("show-dot-name")');
input = input.replace(/%s\_n/g,'$T("show-us-name")');
input = input.replace(/%0s/g,'01');
input = input.replace(/%s/g,'1');
input = input.replace(/%en/g,'$T("ep-sp-name")');
input = input.replace(/%e\.n/g,'$T("ep-dot-name")');
input = input.replace(/%e\_n/g,'$T("ep-us-name")');
input = input.replace(/%0e/g,'05');
input = input.replace(/%e/g,'5');
input = input.replace(/%fn/g,'$T("sort-File")');
input = input.replace(/%dn/g,'$T("sort-Folder")');
document.getElementById('previewtv').innerHTML = getOutput(input);
}
function getOutput(input){
var slash = "\\";
var com = document.getElementById('complete_dir').value;
// For some reason a simply replace() doesn't replace multiple / characters
// Work out whether we are using / or \
for (i=0; i<com.length; i++){
if (com[i] == "/") slash = "/";
}
// Replace / or \ with whatever complete_dir uses
for (i=0; i<input.length; i++){
if (input[i] == "/") {
input = input.replace("/",slash, "gi");
} else if (input[i] == "\\") {
input = input.replace("\\",slash, "gi");
}
}
// If the complete_dir ends in / or \, then strip that character
len = com.length
if (com.substring(len-1, len) == slash)
{
com = com.substring(0, len-1)
}
// If the pattern starts with absolute path, don't prepend default folder
if (input[0] == "/" || input[0] == slash || input[1] == ':') {
output = input;
} else {
output = com+slash+input;
}
return output
}
function movieAdd(val){
var tv = document.getElementById('moviefoldername');
tv.value = tv.value + val;
previewmovie();
}
function movieSet(val, val2){
var tv = document.getElementById('moviefoldername');
tv.value = val;
var tv2 = document.getElementById('movieextra');
tv2.value = val2;
previewmovie();
}
function movieClear(){
var tv = document.getElementById('moviefoldername');
tv.value = '';
previewmovie();
}
function movieClearExtra(){
var tv = document.getElementById('movieextra');
tv.value = '';
previewmovie();
}
function movieExtraFolder(value)
{
document.getElementById('movie_extra_folder').checked = value;
}
function previewmovie()
{
var input = document.getElementById('moviefoldername').value;
var input2 = document.getElementById('movieextra').value;
extra = input2.replace(/%1/g,'1');
var slash = "\\";
ext = extra + '.avi'
input = input.replace(/\.%ext/g,ext);
input = input.replace(/%ext/g,'avi');
input = input.replace(/%title/g,'$T("movie-sp-name")');
input = input.replace(/%\.title/g,'$T("movie-dot-name")');
input = input.replace(/%\_title/g,'$T("movie-us-name")');
input = input.replace(/%y/g,'2000');
input = input.replace(/%decade/g,'00');
input = input.replace(/%0decade/g,'2000');
input = input.replace(/%fn/g,'$T("sort-File")');
var regex = /\{([^\{]*)\}/g;
var str = input;
var result;
while ((result = regex.exec(str)) != null)
{
var lower = result[0].toLowerCase();
input = input.replace(result[0],lower);
}
input = input.replace(/{/g,'');
input = input.replace(/}/g,'');
document.getElementById('previewmovie').innerHTML = getOutput(input);
}
function dateSet(val){
var tv = document.getElementById('datefoldername');
tv.value = val;
previewdate();
}
function dateClear(){
var tv = document.getElementById('datefoldername');
tv.value = '';
previewdate();
}
function previewdate(){
var input = document.getElementById('datefoldername').value;
var slash = "\\";
input.toLowerCase()
input = input.replace(/%ext/g,'avi');
input = input.replace(/%t/g,'$T("show-sp-name")');
input = input.replace(/%\.t/g,'$T("show-dot-name")');
input = input.replace(/%\_t/g,'$T("show-us-name")');
input = input.replace(/%decade/g,'00');
input = input.replace(/%0decade/g,'2000');
input = input.replace(/%fn/g,'$T("sort-File")');
input = input.replace(/%desc/g,'$T("ep-sp-name")');
input = input.replace(/%\.desc/g,'$T("ep-dot-name")');
input = input.replace(/%\_desc/g,'$T("ep-us-name")');
input = input.replace(/%0d/g,'02');
input = input.replace(/%d/g,'2');
input = input.replace(/%0m/g,'01');
input = input.replace(/%m/g,'1');
input = input.replace(/%y/g,'2009');
document.getElementById('previewdate').innerHTML = getOutput(input);
}
function showDiv(id)
{
disp = (document.getElementById(id).style.display == "block") ? "none" : "block";
document.getElementById(id).style.display = disp;
}
function showRow(id)
{
disp = (document.getElementById(id).style.display == "table-row") ? "none" : "table-row";
document.getElementById(id).style.display = disp;
}
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +value+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
function checkCookie()
{
var speedlog = [];
cook=getCookie('speedlog2');
if (cook!=null && cook!="")
{
var speedlog = cook.split(',');
for(i=1; i<20; i++) {
speedlog[i-1] = speedlog[i];
}
speedlog[19] = kbpersec;
var speedstr = speedlog.join(',');
setCookie('speedlog2',speedstr,1);
//drawGraph(speedlog);
chartReload(speedlog);
}
else
{
setCookie('speedlog2','0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,$kbpersecrnd',1);
}
if (RefreshTime>0) {
clearTimeout ( cookietimeout );
cookietimeout = setTimeout("checkCookie();", RefreshTime*1000)
}
}
function toggleHistoryDetails(nzoID, row_obj, tog_id)
{
cook=getCookie('history_verbosity');
if (cook!=null && cook!="")
{
var histitems = cook.split(',');
found = -1;
for(i=0; i<histitems.length; i++)
{
if (histitems[i] == nzoID) found = i;
}
if (found >= 0){
histitems.splice(found,1);
plus = "+";
} else {
histitems.push(nzoID)
plus = "-";
}
var histstr = histitems.join(',');
} else {
var histstr = nzoID;
plus = "-"
}
setCookie('history_verbosity',histstr,100);
element = document.getElementById(tog_id);
element.innerHTML = plus
showRow(row_obj)
}
function checkrefresh()
{
refr=getCookie('smplrefresh');
element = document.getElementById('refreshrate');
if (refr!=null && refr!="")
{
var refreshtimelist = [2, 3, 5, 10, 15, 30, 60, 180, 300, 0];
index = Number(refr);
var result = -1;
for(i=0; i<10; i++)
{
if (refreshtimelist[i]==index) result = i;
}
if (result<0)result=1;
element.selectedIndex = result;
RefreshTime = Number(refr);
//alert(refreshr);
}
else
{
refreshr = element.options[element.selectedIndex].value;
//alert(refreshr);
if (refreshr)
{
setCookie('smplrefresh',refreshr,360);
}
}
}
function timedPause(mins)
{
if (mins == null)
{
mins = prompt("$T('smpl-pauseForPrompt')");
}
url = 'tapi?mode=config&name=set_pause&value=' + mins +'&session='+session;
d = doSimpleXMLHttpRequest(url);
d.addCallback(loadingJSON);
toggle('hiddenTimedPause','blind',{duration:0.2})
}
function applyrefresh(value)
{
RefreshTime = value;
setCookie('smplrefresh',value,360);
loadingJSON();
checkCookie();
}
MochiKit.DOM.addLoadEvent(onpageload);
function onpageload() {
loadtitle();
initDynamicTable();
loadingJSON();
checkCookie();
//doit();
checkrefresh();
}
function hashchanged() {
// We might be able to skip some of what onpageload does, but this works.
onpageload();
}
if ("onhashchange" in window) {
// TODO: Use jQuery history or hashchange modules or perhaps
// reallysimplehistory -- those will poll in browsers that don't
// support onhashchange (but recent Chrome, Firefox, and Safari do).
// TODO: Fix the other interfaces. Plush and Classic are OK if only
// because they don't seem to use #fragments. Mobile is NOT OK as the
// following proves:
//
// Go to http://localhost:8085/sabnzbd/m/#history and then click on
// an item to go to #history_nzb. The back button now works, but
// afterwards the forward button won't. (Chrome 8.0.552.231 on OS X
// 10.5.8)
window.onhashchange = hashchanged;
}
function loadtitle() {
// document.URL isn't updated when someone clicks on "#/dv1/"; can't use it.
url = window.location.toString();
if (url.match('#'))
{
index = url.lastIndexOf('#');
url = url.slice(index+1, url.length);
url = url.replace('-', '/');
if (url.indexOf('/') == 0){
url = url.slice(1, url.length);
}
if (url.lastIndexOf('/') == url.length-1){
url = url.slice(0, url.length-1);
}
switch(url)
{
case 'dv1':
lr('queue/','limit=15', 1, 1);
lrb('history/','limit=15',1);
break;
case 'dv2':
lr('queue/','limit=15', 1, 2);
lrb('history/','limit=15',1);
break;
case 'history':
lr('history/','limit=15',1);
break;
case 'queue':
lr('queue/','limit=15',1);
break;
case 'connections':
lr(url,'',1)
default:
lr(url)
}
} else {
lr('queue/','limit=5', 1, 1);
lrb('history/','limit=5',1);
}
}
</script>
<!--#set $statusstr2 = $T('link-pause')#-->
<!--#set $pau = "0"#-->
<!--#if $paused #-->
<!--#set $pau = "1"#-->
<!--#set $status = "<span class='paused'>"+$T('smpl-paused')+"</span>"#-->
<!--#set $statusstr2 = $T('link-resume')#-->
<!--#else if float($kbpersecrnd)>0 #-->
<!--#set $status = "<span class='downloading'>"+$T('smpl-downloading')+"</span>"#-->
<!--#else if float($kbpersecrnd) == 0 #-->
<!--#set $status = "<span class='idle'>"+$T('smpl-idle')+"</span>"#-->
<!--#end if#-->
<script type="text/javascript">
var status2 = $pau;
var timerId2 = 0;
var timerId3 = 0;
function clearForm(obj, defText){
text = obj.value;
if (text == defText){
obj.value = "";
}
}
function setForm(obj, defText){
text = obj.value;
if (text == ""){
obj.value = defText;
}
}
function toggle_paused()
{
//Pause button toggle - XML request and instant word changing for the link and status
if (status2 == 1)
{
status2 = 0;
document.getElementById("status").innerHTML = "<span class='idle'>$T('smpl-idle')</span>";
document.getElementById("status2").innerHTML = "$T('link-pause')";
doSimpleXMLHttpRequest("tapi?mode=resume&session="+session);
}
else
{
status2 = 1;
document.getElementById("status").innerHTML = "<span class='paused'>$T('smpl-paused')</span>";
document.getElementById("speed").innerHTML = "0";
document.getElementById("status2").innerHTML = "$T('link-resume')";
doSimpleXMLHttpRequest("tapi?mode=pause&session="+session);
}
}
function deletequeueitem(elem)
{
//deletes an item from the queue - passed variable is the id (uid) of the queue item to delete(and also the id of the queue element)
el = document.getElementById(elem)
el.parentNode.removeChild(el);
d = doSimpleXMLHttpRequest('tapi/', {mode: 'queue', name: 'delete', value: elem, _dc: Math.random(), session: session});
}
function deletenzf(nzo,elem)
{
//deletes an item from the queue - passed variable is the id (uid) of the queue item to delete(and also the id of the queue element)
el = document.getElementById(elem)
el.parentNode.removeChild(el);
d = doSimpleXMLHttpRequest('tapi/', {mode: 'queue', name: 'delete_nzf', value: nzo, value2: elem, _dc: Math.random(), session:session});
}
function pausequeueitem(elem, start, limit)
{
//deletes an item from the queue - passed variable is the id (uid) of the queue item to delete(and also the id of the queue element)
val1 = document.getElementById(elem).innerHTML;
val1="";
url = 'queue/pause_nzo'
d = doSimpleXMLHttpRequest(url, {uid: elem, _dc: Math.random(), session:session, start:start, limit:limit});
d.addCallback(replaceright);
d.addErrback(handleServerError);
}
function resumequeueitem(elem, start, limit)
{
//deletes an item from the queue - passed variable is the id (uid) of the queue item to delete(and also the id of the queue element)
val1 = document.getElementById(elem).innerHTML;
val1="";
url = 'queue/resume_nzo'
d = doSimpleXMLHttpRequest(url, {uid: elem, _dc: Math.random(), session:session, start:start, limit:limit});
d.addCallback(replaceright);
d.addErrback(handleServerError);
}
function deletehistoryitem(elem, del, pnode)
{
//deletes an item from the history - passed variable is the id (uid) of the history item to delete(and also the id of the history element)
el = document.getElementById(elem)
el.parentNode.removeChild(el);
d = doSimpleXMLHttpRequest('tapi/', {mode: 'history', name: 'delete', value: elem, del_files: del, _dc: Math.random(), session: session});
}
function handleServerError(){}
function killTimer(){
clearTimeout (timerId2);
}
function restartTimer(time){
killTimer();
timerId2 = setTimeout("startTimer()", time*1000);
}
function startTimer(url, extra, dual){
killTimer();
if (url) gUrl = url
else url = gUrl
if (dual) gDual = dual
else dual = gDual
timer="lr(\'"+url+"\', \'"+extra+"\', 1, "+dual+", 'Right')";
timerId2 = setTimeout(timer, RefreshTime*1000);
}
function rssUrlEncode(url, uri ,cat ){
var enc_uri = urlEncode(uri)
location = url+"?uri="+enc_uri+"&cat="+cat+"&this_uri="+enc_uri
}
function lr(url, extra, refresh, dual, pnode)
{
//submits an ajax request and loads the retrieved data into the div called "Right". Can queue itself up to repeat the action based on the refresh rate
if (dual!=-1)
{
gDual = dual;
if (dual!=2 ) {
document.getElementById('Container').style.width = "90%";
document.getElementById('Right').style.width = "100%";
removeElementClass('Right', "float");
removeElementClass('Left', "right-border");
addElementClass('RightContainer', "left-border");
document.getElementById('Right_bottom').style.width = "100%";
removeElementClass('Right_bottom', "float");
}
else {
document.getElementById('Container').style.width = "99%";
document.getElementById('Right').style.width = "48%";
addElementClass('Right', "float");
removeElementClass('RightContainer', "left-border");
addElementClass('Left', "right-border");
document.getElementById('Right_bottom').style.width = "48%";
addElementClass('Right_bottom', "float");
}
if (!dual){
stopDeferer(gDeferrerTwo);
stopDeferer(gRightBottom);
document.getElementById('Right_bottom').innerHTML = "";
}
}
if (pnode != 'Right_bottom') {
lra(url, extra, refresh, dual, pnode)
} else {
lrb(url, extra, refresh)
}
}
function lra(url, extra, refresh, dual, pnode){
append = '?_dc='+Math.random()+'&session='+session;
if (extra){
append = append+'&'+extra;
}
if (refresh!=-1)
{
//cancel any running timers for inprogress ajax calls or timed lr() calls
stopDeferer(gDeferrer);
stopDeferer(gRight);
}
if (refresh > 0 && RefreshTime > 0) {
gRight = callLater(RefreshTime, lr, url, extra, refresh, dual, pnode);
}
var gDeferrer = doSimpleXMLHttpRequest(url+append);
gDeferrer.addCallback(function (res)
{
document.getElementById('Right').innerHTML = res.responseText;
});
gDeferrer.addErrback(handleServerError);
}
function lrb(url, extra, refresh)
{
//similar to lra() but loads the response in the right_bottom container
append = '?_dc='+Math.random()+'&session='+session;
if (extra){
append = append+'&'+extra;
}
if (refresh!=-1)
{
stopDeferer(gDeferrerTwo);
stopDeferer(gRightBottom);
}
gDeferrerTwo = doSimpleXMLHttpRequest(url+append);
gDeferrerTwo.addCallback(function (res) {
document.getElementById('Right_bottom').innerHTML = res.responseText;
});
if (refresh && refresh!=-1 && RefreshTime > 0) {
gRightBottom = callLater(RefreshTime, lrb, url, extra, refresh);
}
//res.addErrback(handleServerError);
}
function stopDeferer(deferer){
if (deferer){
deferer.cancel();
}
}
function pauseHistoryDeferer(pnode){
if (pnode != 'Right_bottom') {
stopDeferer(gRight);
stopDeferer(gDeferrer);
} else {
stopDeferer(gRightBottom);
stopDeferer(gDeferrerTwo);
}
}
function pauseQueueDeferer(pnode){
if (pnode != 'Right_bottom') {
stopDeferer(gRight);
stopDeferer(gDeferrer);
} else {
stopDeferer(gRightBottom);
stopDeferer(gDeferrerTwo);
}
}
function loadSearch(url, elem, extra, refresh, pnode, new_search){
if (elem){
var searchTerm = document.getElementById(elem).value;
} else {
var searchTerm = "";
}
if (extra && searchTerm){
if (new_search) extra = extra.replace(/start=\d+/g, "start=0");
extra += '&';
}
if (searchTerm){
extra = extra+'search='+searchTerm;
}
lr(url, extra, refresh,-1,pnode);
}
function lrdual(url1, url2, refresh, pnode)
{
killTimer()
//used when something needs to be submitted in the background, and another page loaded (usually refreshing the current page)
var d = doSimpleXMLHttpRequest(url1);
d.addCallback(function (d)
{
if (pnode == 'Right') lr(url2, '', refresh, gDual);//if link is in right_bottom needs to be lrb(
else lrb(url2, '', refresh, gDual)
});
}
function changequeuedetails(page, extra)
{
append = '&_dc='+Math.random()+'&session='+session;
if (extra) {
append += '&'+extra
}
url = page+append;
d = doSimpleXMLHttpRequest(url);
d.addCallback(replaceright);
d.addErrback(handleServerError);
}
function testemail()
{
d = doSimpleXMLHttpRequest('connections/testmail?session='+session);
d.addCallback(function (d)
{
alert("$T('emailsent')");
});
d.addErrback(handleServerError);
}
function unblock_server(host, port)
{
d = doSimpleXMLHttpRequest('connections/unblock_server?server='+host+':'+port+'&session='+session);
}
function getBookmarks()
{
d = doSimpleXMLHttpRequest('tapi?mode=newzbin&name=get_bookmarks&session='+session);
}
function changequeueoptions(page)
{
d = doSimpleXMLHttpRequest('queue/'+page);
}
//based from Mochikit documentation - finds all the form values for an element and returns formatted query string
function getFormValues(element)
{
kv = MochiKit.DOM.formContents(element);
names = kv[0];
values = kv[1];
kvstr = queryString(kv)
return kvstr;
}
function toggle_verbosity(nzo_id, extra)
{
append = '&_dc='+Math.random()+'&session='+session;
if (extra) {
append += '&'+extra
}
url = 'queue/tog_uid_verbose?uid='+nzo_id+append;
var res = doSimpleXMLHttpRequest(url);
res.addCallback(function (res)
{
document.getElementById('Right').innerHTML = res.responseText;
})
}
function testServer(formName)
{
document.getElementById(formName+'-result').innerHTML = "$T('srv-testing')";
element = document.getElementById(formName);
values = getFormValues(element);
url = "tapi?mode=config&name=test_server&output=json&session="+session;
var d = doXHR(url,
{
method:'POST',
sendContent:values,
headers: {"Content-Type":"application/x-www-form-urlencoded"}
});
d.addCallback(function(d)
{
var result = evalJSON(d.responseText);
if (result.value.result) {
cls = 'success';
} else {
cls = 'failure';
}
message = '<span class="'+ cls +'">'+ result.value.message +'</span>';
document.getElementById(formName+'-result').innerHTML = message;
})
}
//a function for submitting forms, grabs all the form info the the form defined by saveelement. Can also execute an additional page get after the post
function submitconfig(extra, saveelement, element, url2, refresh)
{
append = '?_dc='+Math.random()+'&session='+session;
var values = [];
var elementt;
if (element) elementt = document.getElementById(element);
values = getFormValues(elementt);
var url = ''+extra;
var d = doXHR(url+append,
{
method:'POST',
sendContent:values,
headers: {"Content-Type":"application/x-www-form-urlencoded"}
});
if (saveelement) {
saveelement.value = "$T('smpl-saving')"
saveelement.disabled = true
}
d.addCallback(function (result)
{
if (saveelement) {
saveelement.value = "$T('smpl-saved')"
saveelement.disabled = false
}
if(url2 == "1") {replaceright(result);}
else if(url2 == "2") {replaceright2(result);}
else if(url2) {lr(url2,'',refresh);}
});
d.addErrback( function (result)
{
if (saveelement) {
saveelement.value = "$T('smpl-failed')"
saveelement.disabled = false
}
});
}
var replaceright = function (res)
{
document.getElementById('Right').innerHTML = res.responseText;
}
var replaceright2 = function (res)
{
document.getElementById('Right_bottom').innerHTML = res.responseText;
}
function mark_all()
{
var s;
var i=0;
while(s = document.getElementsByTagName("input")[i++])
{
if(s.type=='checkbox')
{
s.checked=true;
}
}
}
function submit_marked(nzo_id, action_key)
{
extra = 'action_key='+action_key
var s;
var i=0;
while(s = document.getElementsByTagName("input")[i++])
{
if(s.type=='checkbox' && s.checked == true)
{
extra = extra + '&' + s.name + '=on'
}
}
//submitconfig(extra, '', '', 1)
url = 'nzb/'+nzo_id+'/bulk_operation'
lr(url, extra)
}
function unmark_all()
{
var s;
var i=0;
while(s = document.getElementsByTagName("input")[i++])
{
if(s.type=='checkbox')
{
s.checked=false;
}
}
}
function invert()
{
var s;
var i=0;
while(s = document.getElementsByTagName("input")[i++])
{
if(s.type=='checkbox')
{
s.checked=!s.checked;
}
}
}
function shutdown()
{
window.location='shutdown?session='+session;
}
function restart()
{
window.location='config/restart?session='+session;
}
function generateAPIKey()
{
session = document.getElementById('apikey').value;
url = "tapi?mode=config&name=set_apikey&session="+session;
var res = doSimpleXMLHttpRequest(url);
res.addCallback(function (res)
{
session = res.responseText;
document.getElementById('apikey').value = res.responseText;
document.getElementById('addNewSession1').value = res.responseText;
document.getElementById('addNewSession2').value = res.responseText;
})
}
function generateNZBKey()
{
session = document.getElementById('apikey').value;
url = "tapi?mode=config&name=set_nzbkey&session="+session;
var res = doSimpleXMLHttpRequest(url);
res.addCallback(function (res)
{
session = res.responseText;
document.getElementById('nzbkey').value = res.responseText;
document.getElementById('addNewSession1').value = res.responseText;
document.getElementById('addNewSession2').value = res.responseText;
})
}
//loads up the json for the queue page and changes the values in the document
function loadingJSON(){
if (RefreshTime>0) {
clearTimeout ( jsontimeout );
jsontimeout = setTimeout("loadingJSON();", RefreshTime*1000);
}
var url = "tapi?mode=qstatus&output=json&_dc="+Math.random()+"&session="+session;
var d = loadJSONDoc(url);
var gotMetadata = function (info)
{
//alert(info["kbpersec"]);
speed = info["speed"];
kbpersec = info["kbpersec"].toFixed(0);
var paused = info["paused"];
var pause_int = info["pause_int"];
//if (paused==true) speed = '';
if (paused == true)
{
if (pause_int == "0")
{
document.getElementById("status").innerHTML = "<span class='paused'>$T('smpl-paused')</span>";
}
else
{
document.getElementById("status").innerHTML = "<span class='paused'>$T('smpl-paused') ("+pause_int+")</span>";
}
document.title = "SABnzbd+ | $T('smpl-paused')";
document.getElementById("status2").innerHTML = "$T('link-resume')";
status2 = 1
//alert("paused");
} else if (kbpersec>0)
{
document.getElementById("status").innerHTML = "<span class='downloading'>$T('smpl-downloading')</span>";
totalTimeRemain = info["timeleft"];
dltitle = "SABnzbd+ | "+totalTimeRemain+" | "+speed+"B/s";
document.title = dltitle;
document.getElementById("status2").innerHTML = "$T('link-pause')";
status2 = 0
//alert("down");
} else {
document.getElementById("status").innerHTML = "<span class='idle'>$T('smpl-idle')</span>";
document.title = "SABnzbd+ | $T('smpl-idle')";
document.getElementById("status2").innerHTML = "$T('link-pause')";
status2 = 0
//alert("idle");
}
document.getElementById("speed").innerHTML = speed;
document.getElementById("mbleft").innerHTML = info["mbleft"].toFixed(2);
document.getElementById("mbtotal").innerHTML = info["mb"].toFixed(2);
document.getElementById("ds1").innerHTML = info["diskspace1"].toFixed(2);
document.getElementById("ds2").innerHTML = info["diskspace2"].toFixed(2);
//var perc1 = 1 - (info["jobs"][0]["mbleft"].toFixed(2) / info["jobs"][0]["mb"].toFixed(2))
//alert(info["jobs"][0]);
if (info["jobs"]!="") document.getElementById("downloadinfo").innerHTML = "$T('smpl-downloading'): "+info["jobs"][0]["filename"];
else document.getElementById("downloadinfo").innerHTML = "";
document.getElementById("have_warnings").innerHTML = info["have_warnings"];
load = document.getElementById("loadavg")
if (load) load.innerHTML = info["loadavg"];
};
var metadataFetchFailed = function (err) {
//alert("The metadata for MochiKit.Async could not be fetched :(");
};
d.addCallbacks(gotMetadata, metadataFetchFailed);
}
//based on plotkit docummentation for dynamic tables
//var dataTable = null;
var layout = null;
var renderer = null;
var options = null;
function initDynamicTable() {
//dataTable = data;
<!--#if $color_scheme == 'black'#-->
options = PlotKit.Base.officeBlack();
<!--#else #-->
options = PlotKit.Base.officeBlue();
<!--#end if #-->
layout = new Layout("line", options);
renderer = new SweetCanvasRenderer('graph', layout, options);
//alert("hi");
}
function chartReload(data) {
<!--#if $color_scheme == 'black'#-->
var colorScheme = "Black";
<!--#else #-->
var colorScheme = "Blue";
<!--#end if #-->
// setup layout options
var themeName = "office" + colorScheme;
var theme = PlotKit.Base[themeName]();
MochiKit.Base.update(options, theme);
layout.style = "line";
MochiKit.Base.update(layout.options, options);
MochiKit.Base.update(renderer.options, options);
//layout.addDataset("data", values);
layout.addDataset("sqrt", [[0, data[0]], [1, data[1]], [2, data[2]], [3, data[3]], [4, data[4]], [5, data[5]], [6, data[6]], [7, data[7]], [8, data[8]],[9, data[9]],[10, data[10]], [11, data[11]], [12, data[12]], [13, data[13]], [14, data[14]], [15, data[15]], [16, data[16]], [17, data[17]], [18, data[18]],[19, data[19]]]);
// update
layout.evaluate();
renderer.clear();
renderer.render();
}
</script>
</head>
<body>
<div id="Container">
<div id="Header">
<p class="status">
$T('status'): <span id="status">$status</span><br />
$T('smpl-speed'): <span id="speed">$speed</span>B/s<br />
$T('menu-queue'): <span id="mbleft">$mbleft</span>/<span id="mbtotal">$mb</span>
</p>
<div id="logo">
<a href=""><img id="title" src="static/sabnzbd_small4.png" alt="sabnzbd+" /></a>
<h2>$T('signOn')</h2>
</div>
<!-- <div id="divchart"><canvas id="graph" height="70" width="700"></canvas></div> -->
<br />
<div class="centerLinks header-margin light-grey"><a onclick="javascript:toggle('addNew','',{duration:0.2})">[$T('smpl-toggleadd')]</a></div>
</div>
<div id="Content">
<div id="Left">
<ul id="menu">
<li><a class="current" href="./">$T('menu-home')</a></li>
<li><a href="#/queue/" onClick="lr('queue/', 'limit=15', 1, 0);">$T('menu-queue')</a></li>
<li><a href="#/history/" onClick="lr('history/','limit=15', 1, 0);">$T('menu-history')</a></li>
<li><a href="#/dv1/" onClick="lr('queue/','', 1, 1);lrb('history/','limit=15',1);">$T('smpl-dualView1')</a></li>
<li><a href="#/dv2/" onClick="lr('queue/','', 1, 2);lrb('history/','limit=15',1);">$T('smpl-dualView2')</a></li>
<li><a href="#/config/" onClick="toggle('hiddenNav','blind',{duration:0.2})">$T('menu-config')</a></li>
<ul id="hiddenNav" class="secondul">
<li><a class="config" href="#/config/general/" onClick="lr('config/general/','', 0, 0);">$T('cmenu-general')</a></li>
<li><a class="config" href="#/config/directories/" onClick="lr('config/directories/','', 0, 0);">$T('cmenu-folders')</a> </li>
<li><a class="config" href="#/config/switches/" onClick="lr('config/switches/','', 0, 0);">$T('cmenu-switches')</a> </li>
<li><a class="config" href="#/config/server" onClick="lr('config/server/','', 0, 0);">$T('cmenu-servers')</a> </li>
<li><a class="config" href="#/config/scheduling/" onClick="lr('config/scheduling/','', 0, 0);">$T('cmenu-scheduling')</a> </li>
<li><a class="config" href="#/config/rss/" onClick="lr('config/rss/','', 0, 0);">$T('cmenu-rss')</a> </li>
<li><a class="config" href="#/config/email/" onClick="lr('config/email/','', 0, 0);">$T('cmenu-email')</a></li>
<li><a class="config" href="#/config/newzbin/" onClick="lr('config/newzbin/', '', 0, 0);">$T('cmenu-newzbin')</a></li>
<li><a class="config" href="#/config/categories/" onClick="lr('config/categories/', '', 0, 0);">$T('cmenu-cat')</a></li>
<li><a class="config" href="#/config/sorting/" onClick="lr('config/sorting/', '', 0, 0);">$T('cmenu-sorting')</a></li>
</ul>
<li><a href="#/connections/" onClick="lr('connections/','', 1, 0);">$T('menu-cons')</a></li>
<li><a href="#/connections/" onClick="lr('connections/','', 1, 0);">$T('smpl-warnings')(<span id="have_warnings">$have_warnings</span>)</a></li>
<br />
<li><a class="bold" id="status2" onClick="toggle_paused()">$statusstr2</a> <a onClick="toggle('hiddenTimedPause','blind',{duration:0.2})"><img src="static/images/bullet_arrow_down.png" border=0 /></a></li>
<ul id="hiddenTimedPause" class="secondul">
<li><a class="config" onClick="javascript:timedPause(5)">5 $T("minutes")</a></li>
<li><a class="config" onClick="javascript:timedPause(15)">15 $T("minutes")</a></li>
<li><a class="config" onClick="javascript:timedPause(30)">30 $T("minutes")</a></li>
<li><a class="config" onClick="javascript:timedPause(60)">1 $T("hours")</a></li>
<li><a class="config" onClick="javascript:timedPause(120)">2 $T("hours")</a></li>
<li><a class="config" onClick="javascript:timedPause(180)">3 $T("hours")</a></li>
<li><a class="config" onClick="javascript:timedPause(300)">5 $T("hours")</a></li>
<li><a class="config" onClick="javascript:timedPause()">$T("smpl-custom")</a></li>
</ul>
<!--#if $varExists('newzbinDetails')#-->
<li><a onClick="getBookmarks()">$T('smpl-getbookmarks')</a></li>
<!--#end if#-->
<br />
<li><a style="text-decoration:underline;cursor:pointer;" onClick="if(confirm('$T('smpl-restartOK?')')){restart()}">$T('button-restart')</a></li>
<li><a style="text-decoration:underline;cursor:pointer;" onClick="if(confirm('$T('shutdownOK?')')){shutdown()}">$T('link-shutdown')</a></li>
<br/>
<li><a href="$helpuri" target="_blank">$T('menu-wiki')</a></li>
<li><a href="http://forums.sabnzbd.org" target="_blank">$T('menu-forums')</a></li>
<li><a href="http://sabnzbd.org/live-chat/" target="_blank">$T('menu-irc')</a></li>
</ul>
<!--<input type="checkbox" name="enable_speedlimit" />-->
<span class="small">$T('speedLimit'): </span><input type="text" id="speedbox" value="$speedlimit" onChange="javascript:doSimpleXMLHttpRequest('tapi?mode=config&name=set_speedlimit&value='+this.value+'&session='+session);">
<br /><br />
<center>
<img src="static/images/drive.png" title="Incomplete" /> <span class="small"><span id="ds1">${diskspace1}</span>GB</span><br />
<img src="static/images/drive_go.png" title="Complete" /> <span class="small"><span id="ds2">${diskspace2}</span>GB</span>
<!--#if $loadavg#-->
$T('ft-sysload')<br />
<span class="small"><span id="loadavg">${loadavg}</span></span>
<!--#end if#-->
</center>
</div>
<div id="RightContainer" class="left-border">
<div id="addNew" class="centerLinks" style="overflow: hidden; display: none;">
<form action="addID" method="get">
<input type="text" style="width:218px;" name="id" value="$T('enterURL')<!--#if $varExists('newzbinDetails') then $T('enterID') else '' #-->" onfocus="clearForm(this, 'Enter URL<!--#if $varExists('newzbinDetails') then " or Report ID" else "" #-->')" onblur="setForm(this, 'Enter URL<!--#if $varExists('newzbinDetails') then " or Report ID" else "" #-->')">
<!--#if $cat_list#-->
<select name="cat" >
<optgroup label="$T('category')">
<!--#for $ct in $cat_list#-->
<option value="$ct">$Tspec($ct)</option>
<!--#end for#-->
</optgroup>
</select>
<!--#end if#-->
<select name="pp">
<optgroup label="$T('pp')">
<option value="-1" <!--#if $cat_list then "selected" else ""#-->>$T('default')</option>
<option value="0">$T('none')</option>
<option value="1">$T('pp-repair')</option>
<option value="2">$T('pp-unpack')</option>
<option value="3" <!--#if $cat_list then "" else "selected"#-->>$T('pp-delete')</option>
</optgroup>
</select>
<!--#if $script_list#-->
<select name="script">
<optgroup label="$T('script')">
<!--#for $sc in $script_list#-->
<option value="$sc">$Tspec($sc)</option>
<!--#end for#-->
</optgroup>
</select>
<!--#end if#-->
<select name="priority">
<optgroup label="$T('priority')">
<option value="-100" selected>$T('default')</option>
<option value="2">$T('pr-force')</option>
<option value="1">$T('pr-high')</option>
<option value="0">$T('pr-normal')</option>
<option value="-1">$T('pr-low')</option>>
</optgroup>
</select>
<input type="hidden" value="$session" id="addNewSession1" name="session">
<input type="submit" class="submitindent2" value="$T("button-add")">
</form>
<form action="addFile" method="post" enctype="multipart/form-data">
<input type="file" style="width:221px" name="nzbfile">
<!--#if $cat_list#-->
<select name="cat">
<optgroup label="$T('category')">
<!--#for $ct in $cat_list#-->
<option value="$ct">$Tspec($ct)</option>
<!--#end for#-->
</optgroup>
</select>
<!--#end if#-->
<select name="pp">
<optgroup label="$T('pp')">
<option value="-1" <!--#if $cat_list then "selected" else ""#-->>$T('default')</option>
<option value="0">$T('none')</option>
<option value="1">$T('pp-repair')</option>
<option value="2">$T('pp-unpack')</option>
<option value="3" <!--#if $cat_list then "" else "selected"#-->>$T('pp-delete')</option>
</optgroup>
</select>
<!--#if $script_list#-->
<select name="script">
<optgroup label="$T('script')">
<!--#for $sc in $script_list#-->
<option value="$sc">$Tspec($sc)</option>
<!--#end for#-->
</optgroup>
</select>
<!--#end if#-->
<select name="priority">
<optgroup label="$T('priority')">
<option value="-100" selected>$T('default')</option>
<option value="2">$T('pr-force')</option>
<option value="1">$T('pr-high')</option>
<option value="0">$T('pr-normal')</option>
<option value="-1">$T('pr-low')</option>>
</optgroup>
</select>
<input type="hidden" value="$session" id="addNewSession2" name="session">
<input type="submit" class="submitindent2" value="$T("button-add")">
</form>
</div>
<div id="Right"></div>
<div id="Right_bottom"></div>
</div>
</div>
<div id="Footer">
<div id="divchart"><canvas id="graph" height="100" width="700"></canvas></div>
<span id="downloadinfo"></span><br /><br />
<p id="versions">$T("smpl-refreshr"): <select id="refreshrate" onchange="javascript:applyrefresh(this.options[this.selectedIndex].value)">
<option value="2" >2 $T("seconds")</option>
<option value="3" >3 $T("seconds")</option>
<option value="5" selected="selected">5 $T("seconds")</option>
<option value="10" >10 $T("seconds")</option>
<option value="15" >15 $T("seconds")</option>
<option value="30" >30 $T("seconds")</option>
<option value="60" >1 $T("minute")</option>
<option value="180" >3 $T("minutes")</option>
<option value="300" >5 $T("minutes")</option>
<option value="0" >$T("none")</option>
</select>
<br />SABnzbd $T('version'): $version | smpl $T('version'): 1.3</a></p>
<!--#if $warning#-->
<h2>$T('ft-warning')</h2>
<b>$warning</b><br />
<!--#end if#-->
<!--#if $new_release#-->
<!--#set $msg=$T('ft-newRelease@1')%($new_release)#-->
<b>$msg <a href="$new_rel_url" target="_blank">SF.net</a></b><br/>
<!--#end if#-->
</div>
</div>
</body>
</html>