summaryrefslogtreecommitdiff
path: root/skins/stone_flat
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
committerAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
commita4a9148f3fb207934bcfc45223b5abec78e5ed6b (patch)
tree15f6528fb61089629c27ef0cf5052a327c03bb7c /skins/stone_flat
downloadxxv-a4a9148f3fb207934bcfc45223b5abec78e5ed6b.tar.gz
xxv-a4a9148f3fb207934bcfc45223b5abec78e5ed6b.tar.bz2
* Move files to trunk
Diffstat (limited to 'skins/stone_flat')
l---------skins/stone_flat/COPYRIGHT1
l---------skins/stone_flat/HISTORY1
l---------skins/stone_flat/Makefile1
-rw-r--r--skins/stone_flat/README50
-rw-r--r--skins/stone_flat/alist.tmpl195
l---------skins/stone_flat/asearch.tmpl1
-rw-r--r--skins/stone_flat/clist.tmpl258
-rw-r--r--skins/stone_flat/display.tmpl128
l---------skins/stone_flat/favicon.ico1
-rw-r--r--skins/stone_flat/filesys.tmpl82
-rw-r--r--skins/stone_flat/global.js446
-rw-r--r--skins/stone_flat/header.inc44
-rw-r--r--skins/stone_flat/help.tmpl81
l---------skins/stone_flat/images1
-rw-r--r--skins/stone_flat/index.tmpl21
-rw-r--r--skins/stone_flat/logger.tmpl84
-rw-r--r--skins/stone_flat/memory.tmpl110
l---------skins/stone_flat/mlcopy.tmpl1
-rw-r--r--skins/stone_flat/mldisplay.tmpl195
-rw-r--r--skins/stone_flat/mledit.tmpl217
l---------skins/stone_flat/mlimport.tmpl1
-rw-r--r--skins/stone_flat/mlist.tmpl235
-rw-r--r--skins/stone_flat/mllist.tmpl113
-rw-r--r--skins/stone_flat/mlresearch.tmpl110
-rw-r--r--skins/stone_flat/mlsave.tmpl43
l---------skins/stone_flat/mlsearch.tmpl1
l---------skins/stone_flat/msearch.tmpl1
-rw-r--r--skins/stone_flat/network.tmpl132
l---------skins/stone_flat/next.tmpl1
-rw-r--r--skins/stone_flat/now.tmpl233
-rw-r--r--skins/stone_flat/print.css8
-rw-r--r--skins/stone_flat/program.tmpl225
l---------skins/stone_flat/quest.js1
-rw-r--r--skins/stone_flat/rdisplay.tmpl244
-rw-r--r--skins/stone_flat/report.tmpl89
-rw-r--r--skins/stone_flat/rlist.tmpl338
l---------skins/stone_flat/rsearch.tmpl1
-rw-r--r--skins/stone_flat/schema.tmpl275
-rw-r--r--skins/stone_flat/search.tmpl152
-rw-r--r--skins/stone_flat/shutter.inc7
-rw-r--r--skins/stone_flat/skin.cfg9
-rw-r--r--skins/stone_flat/skin.cfg.default9
-rw-r--r--skins/stone_flat/status.inc21
-rw-r--r--skins/stone_flat/style.css721
-rw-r--r--skins/stone_flat/tlist.tmpl242
l---------skins/stone_flat/tooltip.js1
-rw-r--r--skins/stone_flat/topten.tmpl146
l---------skins/stone_flat/tsearch.tmpl1
-rw-r--r--skins/stone_flat/ulist.tmpl77
-rw-r--r--skins/stone_flat/vitals.tmpl107
l---------skins/stone_flat/widgets1
51 files changed, 5463 insertions, 0 deletions
diff --git a/skins/stone_flat/COPYRIGHT b/skins/stone_flat/COPYRIGHT
new file mode 120000
index 0000000..1ff0d68
--- /dev/null
+++ b/skins/stone_flat/COPYRIGHT
@@ -0,0 +1 @@
+../stone/COPYRIGHT \ No newline at end of file
diff --git a/skins/stone_flat/HISTORY b/skins/stone_flat/HISTORY
new file mode 120000
index 0000000..24733d3
--- /dev/null
+++ b/skins/stone_flat/HISTORY
@@ -0,0 +1 @@
+../stone/HISTORY \ No newline at end of file
diff --git a/skins/stone_flat/Makefile b/skins/stone_flat/Makefile
new file mode 120000
index 0000000..9c8f4a1
--- /dev/null
+++ b/skins/stone_flat/Makefile
@@ -0,0 +1 @@
+../stone/Makefile \ No newline at end of file
diff --git a/skins/stone_flat/README b/skins/stone_flat/README
new file mode 100644
index 0000000..00e9bea
--- /dev/null
+++ b/skins/stone_flat/README
@@ -0,0 +1,50 @@
+Das ist ein Template-basierter Skin für das Projekt xxv.
+http://xpix.dieserver.de/content/vdr/xxv/
+
+Die Installation erfolgt durch entpacken,
+innerhalb des xxv-skin Verzeichnisses.
+
+dann den Konfigurationsparameter in xxvd.cfg anpassen
+
+[HTTPD]
+HtmlRoot=myskin
+
+--
+
+In der Datei skin.cfg enthalt ein paar globale
+Variablen mit der das Aussehen des Skin angepasst
+werden kann.
+
+
+--
+HOTKEY/accesskey
+
+n : Now
+p : Programmguide
+a : Autotimer
+t : Timer
+r : Recordings
+v : Teletext
+f : Remote
+m : Music
+s : Status
+u : User/Personality
+c : Preferences
+q : Logout
+h : Help
+x : Close I-Frame (nur stone/snow/blue)
+
+<Quelle SelfHtml>
+Bei den meisten Browsern ist es so geregelt, der dann mit [Alt] und der Taste
+für den Buchstaben direkt anwählbar ist. In Opera erreichen Sie die Ziele,
+indem sie zuvor die Tastenkombination [Shift][Esc] betätigen.
+Safari benutzt statt der [Alt]-Taste die Taste [Ctrl].
+</Quelle SelfHtml>
+
+
+--
+LCARS arbeitet optimal mit Zeichensatz "ds9.ttf" (Trek) von tuxbox (www.tuxbox.org)
+der seperat geladen werden muss, und ins lokale Fontinstallationsverzeichnis kopiert werden muss.
+
+http://cvs.tuxbox.org/cgi-bin/viewcvs.cgi/*checkout*/tuxbox/apps/tuxbox/lcars/data/fonts/ds9.ttf
+
diff --git a/skins/stone_flat/alist.tmpl b/skins/stone_flat/alist.tmpl
new file mode 100644
index 0000000..5846e57
--- /dev/null
+++ b/skins/stone_flat/alist.tmpl
@@ -0,0 +1,195 @@
+<!--alist-->
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% aus = gettext('Off') %?>
+<?% an = gettext('On') %?>
+<?% ######################################################################## %?>
+<?% BLOCK time %?>
+ <?% tt = t FILTER format('%04d') %?><?% tt.chunk(-2).join(':') %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+ <?% IF allow('tlist') %?>
+ <?% IF param.timers.$id.allTimer.size %?>
+<?% IF debug %?>
+<!-- active: <?% param.timers.$id.activeTimer.size %?> -->
+<!-- deactive:<?% param.timers.$id.deactiveTimer.size %?> -->
+<?% END %?>
+ <a href="?cmd=tlist&amp;data=<?% param.timers.$id.allTimer.join(',') %?>">
+ <img src="images/onoff.<?% global.imagetyp %?>" alt="" title="<?% gettext("Planned recordings") %?>" />
+ </a>
+ <?% END %?>
+ <?% END %?>
+ <a href="?cmd=search&amp;data=<?% url( title ) %?>">
+ <img src="images/find.<?% global.imagetyp %?>" alt="" title="<?% gettext("Search for repeats") %?>" />
+ </a>
+ <?% IF allow('aedit') %?>
+ <a href="javascript:popup('aedit','<?% id %?>',620,670,1)">
+ <img src="images/edit.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit autotimer") %?>" />
+ </a>
+ <?% END %?>
+ <?% IF allow('adelete') %?>
+ <a href="javascript:sureandreload('<?% gettext("You will delete this autotimer") %?>','<?% escape(title) %?>','adelete','<?% id %?>')">
+ <img src="images/delete.<?% global.imagetyp %?>" alt="" title="<?% gettext("Delete autotimer") %?>" />
+ </a>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK SetState %?>
+ <?% UNLESS aktiv %?>
+ <?% state = "deactive" %?>
+ <?% ELSE %?>
+ <?% state = "" %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <?% PROCESS SetState %?>
+ <tr id="item<?% id %?>"<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <?% IF allow('atoggle') %?>
+ <a href="javascript:toggle('atoggle','<?% id %?>')">
+ <?% END %?>
+ <img id="toggle<?% id %?>" src="images/<?% aktiv ? 'on' : 'off'%?>.<?% global.imagetyp %?>" alt="" />
+ <?% "</a>" IF allow('atoggle') %?>
+ </td>
+ <td class="fieldinline">
+ <?% IF allow('aedit') %?>
+ <a title="<?% gettext("Edit autotimer") %?>" href="javascript:popup('aedit','<?% id %?>',620,670,1)" class="fieldinline<?% IF state != "";" ";state;END %?>">
+ <?% END %?>
+ <font class="title<?% IF state != "";" ";state;END %?>"><?% title %?></font>
+ <?% "</a>" IF allow('aedit') %?>
+ </td>
+ <td class="fieldinline">
+ <?% IF directory != "" %?>
+ <font class="description<?% IF state != "";" ";state;END %?>">
+ <?% directory %?>
+ </font>
+ <?% END %?>
+ </td>
+ <td class="fieldinline">
+ <font class="description<?% IF state != "";" ";state;END %?>">
+ <?% IF channels.length > 0;
+ chlist = [ ];
+ FOREACH chid = channels.split(',');
+ chid_enc = reentities(chid);
+ chid_name = param.channels.$chid_enc.Name;
+ IF ! chid_name; chid_name = gettext('Unknown channel'); END;
+ chlist.push( chid_name );
+ END;
+ chop(chlist.join(' '),50);
+ END %?>
+ </font>
+ </td>
+ <td class="fieldinline">
+ <?% IF start != stop %?>
+ <font class="description<?% IF state != "";" ";state;END %?>">
+ <?% PROCESS time t = start %?>-<?% PROCESS time t = stop %?>
+ </font>
+ <?% END %?>
+ </td>
+ <td align="right" class="fieldinline<?% IF state != "";" ";state;END %?>">
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+<?% END %?>
+<?% ######################################################################## %?>
+<h1><?% gettext("Wished automated recordings") %?></h1>
+<?% IF data.size > 1 %?>
+<?% fields = data.shift %?>
+ <table class="largetable" summary="">
+ <tr><td class="largehead"><?% gettext("Autotimer") %?></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table width="100%">
+ <tr height="0"><th width="20"></th><th></th><th width="200"></th><th width="100"></th><th width="80"></th><th width="100" align="right"></th></tr>
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% id=zeile.0;title=zeile.2;channels=zeile.3;directory=zeile.4;start=zeile.5;stop=zeile.6 %?>
+ <?% IF zeile.1 == 'y' %?><?% aktiv = 1 %?><?% ELSE %?><?% aktiv = 0 %?><?% END %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+<?% IF allow('anew') || allow('aupdate') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Autotimer",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+<?% IF allow('anew') %?>
+ <a title="<?% gettext("Create a new autotimer") %?>" href="javascript:popupcmd('anew',620,670,1)"><img src="images/new.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Create a new autotimer") %?>" href="javascript:popupcmd('anew',620,670,1)"><?% gettext("Create a new autotimer",20) %?></a><br />
+<?% END %?>
+<?% IF allow('aupdate') %?>
+ <a title="<?% gettext("Start the autotimer process") %?>" href="javascript:popupcmd('aupdate',620,670,0)"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Start the autotimer process") %?>" href="javascript:popupcmd('aupdate',620,670,0)"><?% gettext("Start the autotimer process",20) %?></a><br />
+<?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+<?% IF param.sortable.defined %?>
+<?% cmd = cgi.param('cmd') %?>
+<?% IF cgi.param('data') %?>
+<?% datax = cgi.param('data') %?>
+<?% datas = "&amp;data=${datax}" %?>
+<?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Sorting",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+<?% BLOCK SortItem %?>
+ <ul>
+ <li><a href="?cmd=<?% cmd %?><?% datas %?>&amp;__sortby=<?% row %?>&amp;__desc=0" ><img src="images/home.<?% global.imagetyp %?>" alt="" /></a></li>
+ <li class="label">
+ <?% "<strong>" IF cgi.param('__sortby') == row %?>
+ <a href="?cmd=<?% cmd %?><?% datas %?>&amp;__sortby=<?% row %?>&amp;__desc=<?% IF cgi.param('__sortby') == row && cgi.param('__desc') == 0 %?>1<?% ELSE %?>0<?% END %?>" >
+ <?% label %?>
+ </a>
+ <?% "</strong>" IF cgi.param('__sortby') == row %?>
+ </li>
+ <li><a href="?cmd=<?% cmd %?><?% datas %?>&amp;__sortby=<?% row %?>&amp;__desc=1" ><img src="images/down.<?% global.imagetyp %?>" alt="" /></a></li>
+ </ul>
+<?% END %?>
+ <?% PROCESS SortItem row="Id" label=gettext('Index',20) %?>
+ <?% PROCESS SortItem row="Search" label=gettext('Search',20) %?>
+ <?% PROCESS SortItem row="Channels" label=gettext('Channels',20) %?>
+ <?% PROCESS SortItem row="Dir" label=gettext('Group all recordings on a directory',20) %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search text",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form method="post" action="?cmd=asearch" name="searchform">
+ <input type="text" id="timertext" name="data" alt="<?% gettext("Search text") %?>"
+ onkeyup="suggest('asuggest','timertext','timersuggest');"
+ <?% IF cgi.param('cmd')=='as' || cgi.param('cmd')=='asearch' %?>value="<?% cgi.param('data')%?>"<?% END %?>
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="timersuggest"></div>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/asearch.tmpl b/skins/stone_flat/asearch.tmpl
new file mode 120000
index 0000000..5671c2a
--- /dev/null
+++ b/skins/stone_flat/asearch.tmpl
@@ -0,0 +1 @@
+alist.tmpl \ No newline at end of file
diff --git a/skins/stone_flat/clist.tmpl b/skins/stone_flat/clist.tmpl
new file mode 100644
index 0000000..f28eb78
--- /dev/null
+++ b/skins/stone_flat/clist.tmpl
@@ -0,0 +1,258 @@
+<!-- clist -->
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% enableform = allow('cdelete') && data.size > 1 %?>
+<?% ######################################################################## %?>
+<?% IF param.sortable.defined %?>
+ <?% IF cgi.param('__sortby') %?>
+ <?% sortby = cgi.param('__sortby') %?>
+ <?% orderby = cgi.param('__desc') %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+<?% IF allow('switch') %?>
+ <a href="javascript:post('switch','<?% POS %?>')">
+ <img src="images/watch.<?% global.imagetyp %?>" alt="" title="<?% gettext("Switch") %?>" />
+ </a>
+<?% END %?>
+<?% IF allow('cedit') %?>
+ <a href="javascript:popup('cedit','<?% id %?>',620,670,1)">
+ <img src="images/edit.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit channel") %?>" />
+ </a>
+<?% END %?>
+<?% IF allow('cdelete') %?>
+ <a href="javascript:surecmd('<?% gettext("You will delete this channel") %?>','<?% escape(name) %?>','cdelete','<?% POS %?>',620,670)">
+ <img src="images/delete.<?% global.imagetyp %?>" alt="" title="<?% gettext("Delete channel") %?>" />
+ </a>
+<?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <?% IF enableform %?>
+ <input type="checkbox" value="<?% POS %?>" name="<?% name %?>" />
+ <?% END %?>
+ </td>
+ <td class="fieldinline">
+<?% IF allow('cedit') %?>
+ <a name="<?% POS %?>" href="javascript:popup('cedit','<?% id %?>',620,670,1)">
+<?% END %?>
+ <?% POS %?>.<?% name %?>
+<?% IF allow('cedit') %?>
+ </a>
+<?% END %?>
+ </td>
+ <td class="fieldinline">
+ <?% frequency %?>
+ </td>
+ <td class="fieldinline">
+ <?% parameters %?>
+ </td>
+ <td class="fieldinline">
+ <?% source %?>
+ </td>
+ <!--<td class="fieldinline">
+ <?% srate %?>
+ </td>-->
+ <td class="fieldinline">
+ <?% chop(VPID,10) %?>
+ </td>
+ <td class="fieldinline">
+ <?% chop(APID,10) %?>
+ </td>
+ <td class="fieldinline">
+ <?% chop(TPID,10) %?>
+ </td>
+ <td class="fieldinline">
+ <?% chop(CA,10) %?>
+ </td>
+ <td class="fieldinline push">
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% IF cgi.param('data') != "" %?>
+ <?% search = cgi.param('data') %?>
+<?% END %?>
+<h1>
+ <?% gettext("Channels") %?>
+ <?% IF search.defined %?> : "<?% search %?>"
+ <?% END %?>
+</h1>
+<?% IF data.size > 1 %?>
+<?% fields = data.shift %?>
+<form name="clist" action="">
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?%- id=zeile.0;name=zeile.1;frequency=zeile.2;parameters=zeile.3;
+ source=zeile.4;srate=zeile.5;VPID=zeile.6;APID=zeile.7;TPID=zeile.8;
+ CA=zeile.9;SID=zeile.10;NID=zeile.11;TID=zeile.12;RID=zeile.13;GRP=zeile.14;
+ POS=zeile.15;CGRP=zeile.16; -%?>
+
+ <?% IF loop.count == 1 || ( !sortby.defined && ( !OLDCGRP.defined || CGRP != OLDCGRP )) %?>
+ <?% IF OLDCGRP.defined %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+ <?% IF enableform && not sortby.defined %?>
+ </fieldset>
+ <?% END %?>
+ <?% END %?>
+ <?% IF !sortby.defined %?>
+ <?% OLDCGRP = CGRP %?>
+ <?% END %?>
+ <?% IF enableform && not sortby.defined %?>
+ <fieldset id="fieldset_<?% CGRP %?>" style="border: 0px; padding: 0px; margin: 0px;">
+ <?% END %?>
+ <table class="largetable" summary="">
+ <tr>
+ <td class="largehead">
+ <?% IF sortby.defined %?>
+ <?% gettext("Channels") %?>
+ <?% ELSE %?>
+ <?% IF enableform %?>
+ <input type="checkbox" name="__selfield__" onclick="selfield('fieldset_<?% CGRP %?>',this)"/>
+ <?% END %?>
+ <?% CGRP %?>
+ <?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <tr><th width="20"></th>
+ <th width="120"><?% gettext('Name') %?></th>
+ <th><?% gettext('Transponder frequency',6)%?></th>
+ <th><?% gettext('Various parameters, depends on signal source',8) %?></th>
+ <th><?% gettext('Signal source',6) %?></th>
+ <!--<th><?% gettext('Symbol rate',6) %?></th>-->
+ <th><?% gettext('Video PID (VPID)',10) %?></th>
+ <th><?% gettext('Audio PID (APID)',10) %?></th>
+ <th><?% gettext('Teletext PID (TPID)',10) %?></th>
+ <th><?% gettext('Conditional access (CA)',10)%?></th>
+ <th width="64" align="right"></th>
+ </tr>
+ <?% END %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+ <?% IF enableform && not sortby.defined %?>
+ </fieldset>
+ <?% END %?>
+</form>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+<?% IF allow('cnew') || allow('cupdate') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Channels",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+<?% IF allow('cnew') %?>
+ <a title="<?% gettext("Create a new channel") %?>" href="javascript:popupcmd('cnew',620,670,1)"><img src="images/new.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Create a new channel") %?>" href="javascript:popupcmd('cnew',620,670,1)"><?% gettext("Create a new channel",20) %?></a><br />
+<?% END %?>
+<?% IF allow('cupdate') %?>
+ <a title="<?% gettext("Update channels") %?>" href="javascript:popupcmd('cupdate',620,670,1)"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Update channels") %?>" href="javascript:popupcmd('cupdate',620,670,1)"><?% gettext("Update channels",20) %?></a>
+<?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+<?% IF param.sortable.defined %?>
+ <?% cmd = cgi.param('cmd') %?>
+ <?% IF cgi.param('data') %?>
+ <?% daten = url( cgi.param('data') ) %?>
+ <?% daten = "&amp;data=${daten}" %?>
+ <?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Sorting") %?></td></tr>
+ <tr>
+ <td class="sidetext">
+<?% BLOCK SortItem %?>
+ <ul>
+ <li><a href="?cmd=<?% cmd %?><?% daten %?>&amp;__sortby=<?% row %?>&amp;__desc=0" ><img src="images/home.<?% global.imagetyp %?>" alt="" /></a></li>
+ <li class="label">
+ <?% "<strong>" IF sortby == row %?>
+ <a href="?cmd=<?% cmd %?><?% daten %?>&amp;__sortby=<?% row %?>&amp;__desc=<?% IF sortby == row && orderby == 0 %?>1<?% ELSE %?>0<?% END %?>" >
+ <?% label %?>
+ </a>
+ <?% "</strong>" IF sortby == row %?>
+ </li>
+ <li><a href="?cmd=<?% cmd %?><?% daten %?>&amp;__sortby=<?% row %?>&amp;__desc=1" ><img src="images/down.<?% global.imagetyp %?>" alt="" /></a></li>
+ </ul>
+<?% END %?>
+ <?% PROCESS SortItem row="POS" label=gettext('Position',20) %?>
+ <?% PROCESS SortItem row="Name" label=gettext('Name',20) %?>
+ <?% PROCESS SortItem row="Frequency" label=gettext('Transponder frequency',20) %?>
+ <?% PROCESS SortItem row="Parameters" label=gettext('Various parameters, depends on signal source',20) %?>
+ <?% PROCESS SortItem row="Source" label=gettext('Signal source',20) %?>
+ <!--<?% PROCESS SortItem row="Srate" label=gettext('Symbol rate',20) %?>-->
+ <?% PROCESS SortItem row="VPID" label=gettext('Video PID (VPID)',20) %?>
+ <?% PROCESS SortItem row="APID" label=gettext('Audio PID (APID)',20) %?>
+ <?% PROCESS SortItem row="TPID" label=gettext('Teletext PID (TPID)',20) %?>
+ <?% PROCESS SortItem row="CA" label=gettext('Conditional access (CA)',20) %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+<?% IF enableform %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Select",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a href="javascript:selAll(document.clist,1)"><img src="images/select.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:selAll(document.clist,1)"><?% gettext("Select all",20) %?></a><br />
+ <a href="javascript:selAll(document.clist,0)"><img src="images/deselect.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:selAll(document.clist,0)"><?% gettext("Unselect all",20) %?></a><br />
+ <a href="javascript:reverse(document.clist)"><img src="images/invers.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:reverse(document.clist)"><?% gettext("Reverse select",20) %?></a>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidetext">
+<?% IF allow('cdelete') %?>
+ <a href="javascript:DeleteSelected('<?% gettext("You would delete follow channels?") %?>','<?% gettext("You have nothing selected!") %?>','cdelete',document.clist,620,670)"><img src="images/delete.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:DeleteSelected('<?% gettext("You would delete follow channels?") %?>','<?% gettext("You have nothing selected!") %?>','cdelete',document.clist,620,670)"><?% gettext("Delete channels",20) %?></a><br />
+<?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search for channels",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form method="post" action="?cmd=clist">
+ <input type="text" name="data" size="18" <?% IF search.defined %?>value="<?% search %?>"<?% END %?> />
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/display.tmpl b/skins/stone_flat/display.tmpl
new file mode 100644
index 0000000..506601b
--- /dev/null
+++ b/skins/stone_flat/display.tmpl
@@ -0,0 +1,128 @@
+<!-- display -->
+<?% IF ! global.bodyinc.defined; global.bodyinc = 1 %?>
+<body class="hilfsframed">
+<div>
+<?% END %?>
+<?% IF debug %?>
+<!-- First: <?% FOREACH x = data.first %?><?% loop.count - 1 %?>:<?% x %?>|<?% END %?> -->
+<!-- Last: <?% FOREACH x = data.last %?><?% loop.count - 1 %?>:<?% x %?>|<?% END %?> -->
+<?% END %?>
+<?%
+ USE date;
+ id = data.last.0;
+ title = data.last.1;
+ subtitle = data.last.2;
+ start = data.last.3;
+ stopp = data.last.4;
+ channel = data.last.5;
+ description = data.last.6;
+ bild = data.last.7;
+ d = data.last.8;
+ video = data.last.9;
+ audio = data.last.10;
+ vps = data.last.11;
+%?>
+<?% ######################################################################## %?>
+<?% BLOCK dur %?>
+ <?% height=12;IF d >= 0 and d < 100;d = d div 1 %?>
+ <?% IF d >= 1 %?>
+ <img class="progressleft" src="images/blank.gif" width="<?% 100 - d %?>" height="<?% height %?>" alt="<?% 100 - d %?>%" /><img class="progressright" src="images/blank.gif" width="<?% d %?>" height="<?% height %?>" alt="" />
+ <?% ELSE %?>
+ <img class="progress" src="images/blank.gif" width="100" height="<?% height %?>" alt="" />
+ <?% END %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK printduration;
+ duration = stopp - start;
+ IF duration > 1;
+ hours = duration div 3600;
+ minutes = duration div 60 mod 60;
+ seconds = duration mod 60;
+ gettext("Duration") ; " : "; hours div 1 ;":"; minutes | format('%02d');
+ END;
+END %?>
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+<div align="right">
+ <a target="_blank" href="http://www.tvmovie.de/MegaFinder_Suchergebnisse.210.0.html?no_cache=1&search=<?% title %?>">
+ <img src="images/tvm.<?% global.imagetyp %?>" title="<?% gettext("Search with TVMovie") %?>" alt="TVMovie" />
+ </a>
+ <a target="_blank" href="http://german.imdb.com/find?s=tt&amp;site=aka&amp;q=<?% title %?>">
+ <img src="images/imdb.<?% global.imagetyp %?>" title="<?% gettext("Search with IMDb") %?>" alt="IMDb" />
+ </a>
+ <a target="_blank" href="http://www.ofdb.de/view.php?page=suchergebnis&Kat=Titel&SText=<?% title %?>">
+ <img src="images/ofdb.<?% global.imagetyp %?>" title="<?% gettext("Search with OFDb") %?>" alt="OFDb" />
+ </a>
+ <a target="_blank" href="?cmd=search&amp;data=<?% url( title ) %?>">
+ <img src="images/find.<?% global.imagetyp %?>" alt="" title="<?% gettext("Search for repeats") %?>" />
+ </a>
+ <?% IF param.timers.${id} && allow('tedit') %?>
+ <a href="?cmd=tedit&amp;data=<?% param.timers.${id}.Id %?>">
+ <img src="images/onoff.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit this timer") %?>" />
+ </a>
+ <?% ELSIF allow('tnew') %?>
+ <a href="?cmd=tnew&amp;data=<?% id %?>">
+ <img src="images/record.<?% global.imagetyp %?>" alt="" title="<?% gettext("To record") %?>" />
+ </a>
+ <?% END %?>
+</div>
+<?% END %?>
+<?% ######################################################################## %?>
+ <table class="editortable" summary="">
+ <tr>
+ <td class="editorhead">
+ <div class="editorhead">
+ <font class="title"><?% title %?></font>
+ <?% IF subtitle.length > 0 %?><font class="subtitle">&nbsp;~&nbsp;<?% subtitle %?></font><?% END %?>
+ </div><?% INCLUDE shutter.inc %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="editortext">
+ <table width="100%" summary="">
+ <tr>
+ <td>
+ <div class="description" style="white-space: nowrap">
+ <?% IF allow('switch') %?>
+ <a href="javascript:post('switch','<?% channel %?>')">
+ <img src="images/watch.<?% global.imagetyp %?>" alt="" title="<?% gettext("Switch") %?>" />&nbsp;
+ <?% END %?>
+ <?% channel %?>
+ <?% IF allow('switch') %?>
+ </a>
+ <?% END %?>
+ </div>
+ </td>
+ <td>
+ <div class="description" style="white-space: nowrap">
+
+ <?% date.format(start,"%A, %x",locale) %?>
+ <br />
+ <?% date.format(start,"%H:%M",locale) %?>&nbsp;-&nbsp;<?% date.format(stopp,"%H:%M",locale) %?>
+ <?% IF vps && vps != start %?>&nbsp;&nbsp;&nbsp;(<?% gettext("VPS") %?>&nbsp;<?% date.format(vps,"%H:%M",locale) %?>) <?% END %?>
+ &nbsp;&nbsp;&nbsp;<?% PROCESS printduration %?>
+ </div>
+ </td>
+ <td align="right">
+ <?% PROCESS dur %?>
+ </td>
+ <td class="push">
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+ </table>
+ <?% IF description != "" || bild != "" %?>
+ <p class="description">
+ <?% IF bild != "" %?>
+ <img class="epgimages" src="epgimages/<?% bild %?>" alt="" />
+ <?% END %?>
+<?% description %?>
+ </p>
+ <?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="editorbottom"></td>
+ </tr>
+</table>
diff --git a/skins/stone_flat/favicon.ico b/skins/stone_flat/favicon.ico
new file mode 120000
index 0000000..755090f
--- /dev/null
+++ b/skins/stone_flat/favicon.ico
@@ -0,0 +1 @@
+../stone/favicon.ico \ No newline at end of file
diff --git a/skins/stone_flat/filesys.tmpl b/skins/stone_flat/filesys.tmpl
new file mode 100644
index 0000000..f84509a
--- /dev/null
+++ b/skins/stone_flat/filesys.tmpl
@@ -0,0 +1,82 @@
+<!-- filesys Template -->
+<?% IF ! global.bodyinc.defined;global.bodyinc = 1 %?>
+<body class="frame">
+<?% INCLUDE status.inc %?>
+<?% INCLUDE header.inc %?>
+<div id="body">
+<?% END %?>
+
+<?% IF param.headingText %?>
+<h1><?% param.headingText %?></h1>
+<?% END %?>
+
+<?%
+statusfiles = [];
+trash = param.usage.shift;
+
+IF param.graphic;
+ FILTER null;
+ FOREACH device = param.usage;
+ name = reentities(device.first).split('/').last;
+ free = 100 - device.5;
+ d = [
+ [ device.3, device.4],
+ [ device.5, free],
+ ];
+
+ USE my_graph = GD.Graph.pie(500, 300);
+
+ label = gettext('Total space');
+ label = "${device.0} - ${device.6} - ${label} ${device.2}";
+ my_graph.set(
+ pie_height => 20,
+ axislabelclr => 'black',
+ shadow => 1,
+ );
+ my_graph.set_title_font(param.font,10);
+ my_graph.set_value_font(param.font,10);
+ my_graph.set_label_font(param.font,6);
+
+ file = writefile("status_filesys_${name}.gif", my_graph.plot(d).gif );
+ statusfiles.push([label, file]);
+ END;
+ END;
+%?>
+
+<?% FOREACH file = statusfiles %?>
+<table class="editortable" summary="">
+ <tr><td class="editorhead"><?% file.0 %?></td></tr>
+ <tr>
+ <td class="editortext" align="center">
+ <img src="<?% file.1 %?>" alt="<?% file.0 %?>" />
+ </td>
+ </tr>
+ <tr><td class="editorbottom"></td></tr>
+</table>
+<?% END %?>
+
+<?% ELSE; # not param.graphic; %?>
+<table class="editortable" summary="">
+ <tr>
+ <td class="editorhead">&nbsp;</td>
+ </tr>
+ <tr>
+ <td class="editortext">
+ <table summary="" width="100%">
+ <?% FOREACH field = trash %?>
+ <th><?% field %?></th>
+ <?% END %?>
+ </tr>
+ <?% FOREACH zeile = data %?>
+ <tr <?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <?% FOREACH field = zeile %?>
+ <td><?% field %?></td>
+ <?% END %?>
+ </tr>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="editorbottom"></td></tr>
+</table>
+<?% END %?>
diff --git a/skins/stone_flat/global.js b/skins/stone_flat/global.js
new file mode 100644
index 0000000..f101bb7
--- /dev/null
+++ b/skins/stone_flat/global.js
@@ -0,0 +1,446 @@
+
+var parent_url="";
+
+function popup(cmd,data,width,height,reloadonclose){
+ var url = "?cmd=" + cmd + "&data=" + data;
+ if(ie5&&!opera) //Avoid use cache
+ url += "&random=" + (Math.random() * Date.parse(new Date()));
+ popupwindow(url,width,height,reloadonclose);
+}
+
+function popupcmd(cmd,width,height,reloadonclose){
+ var url = "?cmd=" + cmd;
+ if(ie5&&!opera) //Avoid use cache
+ url += "&random=" + (Math.random() * Date.parse(new Date()));
+ popupwindow(url,width,height,reloadonclose);
+}
+
+function popupwindow(url,width,height,reloadonclose){
+
+ ttp_make_invisable();
+ questclose(0);
+
+ if (!ie5&&!ns6)
+ window.open(url,"","width=width,height=height,scrollbars=1");
+ else{
+ var scrPos = getScrollingPosition();
+
+ document.getElementById("hilfsframe").style.width=width+"px";
+ document.getElementById("hilfsframe").style.height=height+"px";
+ document.getElementById("hilfsframe").style.left="30px";
+ document.getElementById("hilfsframe").style.top=scrPos[1]+30+"px";
+ document.getElementById("cframe").src=url;
+ document.getElementById("hilfsframe").style.display = "";
+ }
+ if(reloadonclose)
+ parent_url = parent.window.location.href;
+ else
+ parent_url = "";
+}
+
+function closeit(){
+ parent.document.getElementById("hilfsframe").style.display = "none";
+ parent.document.getElementById("cframe").src="about:blank";
+ if(parent.parent_url) {
+ var url = parent.parent_url.replace(/&random=.+/g,'');
+ if(ie5&&!opera) //Avoid use cache
+ url += "&random=" + (Math.random() * Date.parse(new Date()));
+ parent.window.location.href = url;
+ }
+}
+
+
+// Request senden, aber Ergebnis nicht anzeigen, Reload der aktuellen Seite
+function toggle(cmd,data) {
+
+ var fnWhenDone = function(oAnswer, sData) {
+ var values = eval('(' + oAnswer.responseText + ')');
+ if(values && values.data && typeof(values.data) == 'object'){
+ var className;
+ var imageExt = ie5&&!opera ? "gif" : "png";
+ for (var i = 0; i < values.data.length; i++) {
+ var x = values.data[i];
+ if(x.length == 4 && x[0]) {
+ var tid = x[0];
+ var ton = x[1];
+ var trun = x[2];
+ var tcon = x[3];
+
+ var img = document.getElementById('toggle' + tid);
+ if(img) {
+ if(ton) {
+ if(tcon)
+ className = 'problem';
+ else if(trun)
+ className = 'running';
+ else
+ className = '';
+ img.src = 'images/on.' + imageExt;
+ } else {
+ className = 'deactive';
+ img.src = 'images/off.' + imageExt;
+ }
+
+
+ var elememts = new Array;
+ var a = document.getElementById('item' + tid);
+ if(a) { elememts.push(a); }
+ var b = document.getElementById('desc' + tid);
+ if(b) { elememts.push(b); }
+
+ for (var n = 0; n < elememts.length; n++) {
+ var elem = elememts[n].getElementsByTagName('font');
+ for (var j = 0; j < elem.length; j++) {
+ var classList = elem[j].className.split(' ');
+
+ for ( var k = 0; k < classList.length; k++ ) {
+ if( classList[k] == 'deactive' //remove class
+ || classList[k] == 'problem'
+ || classList[k] == 'running')
+ classList.splice(k, 1);
+ }
+
+ if(className) //add class
+ classList[classList.length] = className;
+
+ elem[j].className = classList.join(' ');
+ }
+ }
+ }
+ }
+ }
+ }
+ };
+
+ var tt = data.split('_');
+ for (var l = 0; l < tt.length; l++) {
+ var timg = document.getElementById('toggle' + tt[l]);
+ if(timg) {
+ timg.src = 'images/wait.gif';
+ }
+ }
+
+ // Hmm, brutal und gemein, das Laden der URL als Bild funktioniert...
+ var url = "?cmd=" + cmd + "&data=" + data + "&ajax=json";
+ if(ie5&&!opera) //Avoid use cache
+ url += "&random=" + (Math.random() * Date.parse(new Date()));
+ var aconn = new XHRequest();
+ if(!aconn)
+ return;
+ aconn.connect(url, fnWhenDone, data);
+}
+
+function selToggle(warnmsg,form) {
+// test on checked Boxes
+ ok = new Array;
+ x = 0;
+ for(var i=0;i<form.length;++i) {
+ var id;
+ if(form.elements[i].type == 'checkbox' && form.elements[i].checked) {
+ id = form.elements[i].value;
+ ok.push(id);
+ form.elements[i].checked = 0;
+ x += 1;
+ }
+ }
+ if(x > 0) {
+ toggle('ttoggle',ok.join('_'));
+ } else {
+ alert(warnmsg);
+ }
+}
+
+
+// Request senden, aber Ergebnis nicht anzeigen
+function post(cmd,data) {
+
+ var fnWhenDone = function (oAnswer, sData) {
+
+ };
+
+ var url = "?cmd=" + cmd + "&data=" + data;
+ if(ie5&&!opera) //Avoid use cache
+ url += "&random=" + (Math.random() * Date.parse(new Date()));
+
+ var aconn = new XHRequest();
+ if(!aconn)
+ return;
+ aconn.connect(url, fnWhenDone, data);
+}
+
+// Request senden, aber Ergebnis nicht anzeigen, Reload der aktuellen Seite
+function fire(cmd,data) {
+
+ var fnWhenDone = function (oAnswer, sData) {
+ var url = location.href.replace(/&random=.+/g,'');
+ if(ie5&&!opera) //Avoid use cache
+ url += "&random=" + (Math.random() * Date.parse(new Date()));
+ location.href = url;
+ };
+
+ var url = "?cmd=" + cmd + "&data=" + data;
+ if(ie5&&!opera) //Avoid use cache
+ url += "&random=" + (Math.random() * Date.parse(new Date()));
+
+ var aconn = new XHRequest();
+ if(!aconn)
+ return;
+ aconn.connect(url, fnWhenDone, data);
+}
+
+// Redirect
+function redirect(url, wait) {
+ if(! wait) {
+ wait = 1;
+ }
+ window.setTimeout('location.href = "' + url + '"', wait * 1000);
+}
+
+function selAll(form, type) {
+// check all Boxes
+ for(var i=0;i<form.length;++i) {
+ if(form.elements[i].type == 'checkbox') {
+ form.elements[i].checked = type;
+ }
+ }
+}
+
+function reverse(form) {
+// check all Boxes
+ for(var i=0;i<form.length;++i) {
+ if(form.elements[i].type == 'checkbox') {
+ if(form.elements[i].checked) {
+ form.elements[i].checked = 0;
+ } else {
+ form.elements[i].checked = 1;
+ }
+ }
+ }
+}
+
+function selfield(id,checkbox)
+{
+ var fieldset = document.getElementById(id);
+ var list = fieldset.getElementsByTagName("input");
+ for(var i = 0; i < list.length; i++)
+ {
+ if(list[i].type == 'checkbox') {
+ list[i].checked = checkbox.checked;
+ }
+ }
+}
+
+function PlayMusic(ids,proxy) {
+ /*popupwindow('?cmd=mplay&data=' + ids,620,670,0);*/
+ var url = "";
+ if(proxy != "")
+ url = proxy;
+ url = url + '?cmd=mplaylist&data=' + ids + '&binary=1';
+ location.href = url;
+}
+
+function Play(warnmsg,form,proxy) {
+// test on checked Boxes
+ x = 0;
+ ok = new Array;
+ for(var i=0;i<form.length;++i) {
+ var id;
+ if(form.elements[i].type == 'checkbox' && form.elements[i].checked) {
+ id = form.elements[i].value;
+ ok.push(id);
+ x += 1;
+ }
+ }
+ if(x > 0) {
+ PlayMusic(ok.join('_'),proxy);
+ } else {
+ alert(warnmsg);
+ }
+}
+
+var suggestsearch = '';
+var suggestinput;
+function suggest(cmd,inputbox,suggestbox){
+
+ var fnWhenDone = function (oAnswer, sData) {
+ var sb = document.getElementById(suggestbox);
+ if(sb) {
+ sb.innerHTML = '';
+
+ var values = eval('(' + oAnswer.responseText + ')');
+ if(values && values.data && typeof(values.data) == 'object'){
+ var suggest = '';
+ for (var i = 0; i < values.data.length; i++) {
+ var x = values.data[i];
+ if(x.length >= 1 && x[0]) {
+ suggest += '<div id=\'suggestitem' + i + '\' onmouseover="javascript:suggestmouseover(this);" ';
+ suggest += 'onmouseout="javascript:suggestmouseout(this);" ';
+ suggest += 'onclick="javascript:suggestselect(\'' + inputbox + '\',\'' + suggestbox + '\', this.innerHTML);" ';
+ suggest += 'class="suggestlink">' + x[0] + '</div>';
+ }
+ }
+ if(suggest != '') {
+ sb.innerHTML = suggest;
+ sb.style.visibility = "visible";
+ } else {
+ sb.innerHTML = '';
+ sb.style.visibility = "hidden";
+ }
+ }
+ }
+ };
+
+ var search = document.getElementById(inputbox).value;
+ if(search && (suggestsearch != search || suggestinput != inputbox))
+ {
+ suggestsearch = search.replace('&amp;','&');
+ suggestinput = inputbox;
+ var url = "?cmd=" + cmd + "&data=" + escape(search) + "&ajax=json";
+ var aconn = new XHRequest();
+ if(aconn)
+ return aconn.connect(url, fnWhenDone, search);
+ }
+ return false;
+}
+
+function suggestmouseover(div_value) {
+ div_value.className = 'suggestover';
+}
+
+function suggestmouseout(div_value) {
+ div_value.className = 'suggestlink';
+}
+
+function suggestselect(inputbox, suggestbox, value) {
+ document.getElementById(inputbox).value = unescape(value).replace('&amp;','&');
+ var sb = document.getElementById(suggestbox);
+ if(sb) {
+ sb.innerHTML = '';
+ sb.style.visibility = "hidden";
+ }
+ suggestsearch = '';
+ suggestinput = 0;
+}
+
+function suggestitem(i) {
+ var item = document.getElementById('suggestitem' + i);
+ if(item) {
+ item.className = 'suggestover';
+ var inp = document.getElementById(suggestinput);
+ if(inp) {
+ suggestsearch = item.innerHTML.replace('&amp;','&');
+ inp.value = unescape(item.innerHTML).replace('&amp;','&');
+ }
+ }
+}
+
+document.onkeydown = suggestkeydown;
+function suggestkeydown(e) {
+ if (!e)
+ e = window.event;
+ if (!e)
+ return;
+ if(e.keyCode == 40 && suggestinput) {
+ var i = 0;
+ for (; i < 25; i++) {
+ var itemlast = document.getElementById('suggestitem' + i);
+ if(itemlast && itemlast.className == 'suggestover') {
+ itemlast.className = 'suggestlink';
+ i += 1;
+ suggestitem(i);
+ return;
+ }
+ }
+ if(i == 25)
+ {
+ suggestitem(0);
+ }
+ return;
+ }
+ if(e.keyCode == 38 && suggestinput) {
+ var i = 25;
+ for (; i > 0; i--) {
+ var itemlast = document.getElementById('suggestitem' + i);
+ if(itemlast && itemlast.className == 'suggestover') {
+ itemlast.className = 'suggestlink';
+ i -= 1;
+ suggestitem(i);
+ return;
+ }
+ }
+ return;
+ }
+}
+
+var slidelist = false;
+var slideminX = 0;
+var slidemaxX = 0;
+var slidespeed = 0;
+var slideleft = false;
+var slideright = false;
+
+function start(e) {
+ if(document.all)e = event;
+ if(this.id=='slideright') {
+ var m = Math.floor((e.clientX - this.offsetLeft) / 5);
+ slidespeed = -1*m;
+ slidespeed = Math.max(-10,slidespeed);
+ } else {
+ var m = 10 - Math.floor((e.clientX - this.offsetLeft) / 5);
+ slidespeed = 1*m;
+ slidespeed = Math.min(10,slidespeed);
+ if(slidespeed<0)slidespeed=10;
+ }
+}
+
+function release() {
+ slidespeed=0;
+}
+
+function slide() {
+ if(slidespeed!=0) {
+ var l = slidelist.offsetLeft;
+ l = l/1 + slidespeed;
+
+ if(l>=slidemaxX) {
+ l = slidemaxX;
+ slidespeed = 0;
+ if(slideleft)
+ slideleft.style.visibility = "hidden";
+ } else {
+ if(slideleft && slideleft.style.visibility == "hidden")
+ slideleft.style.visibility = "visible";
+ }
+
+ if(l<=slideminX) {
+ l = slideminX;
+ slidespeed=0;
+ if(slideright)
+ slideright.style.visibility = "hidden";
+ } else {
+ if(slideright && slideright.style.visibility == "hidden")
+ slideright.style.visibility = "visible";
+ }
+ slidelist.style.left = l + 'px';
+ }
+ setTimeout('slide()',20);
+}
+
+function initslide() {
+
+ slideleft = document.getElementById('slideleft');
+ slideleft.onmousemove = start;
+ slideleft.onmouseout = release;
+ slideleft.style.visibility = "hidden";
+
+ slideright = document.getElementById('slideright');
+ slideright.onmousemove = start;
+ slideright.onmouseout = release;
+
+ slidelist = document.getElementById('slidelist');
+ var w = document.getElementById('slideframe').offsetWidth;
+ slidemaxX = slidelist.offsetLeft;
+ slideminX = w - document.getElementById('slideend').offsetLeft;
+
+ slide();
+}
diff --git a/skins/stone_flat/header.inc b/skins/stone_flat/header.inc
new file mode 100644
index 0000000..f89a472
--- /dev/null
+++ b/skins/stone_flat/header.inc
@@ -0,0 +1,44 @@
+<!-- ###### Kopfzeile ###### -->
+<?% IF ! global.headerinc.defined;global.headerinc = 1 %?>
+<div id="header">
+ <div id="logo">
+ <?% IF allow( 'help' ) %?>
+ <a href="?cmd=help" title="<?% gettext("Help") %?>">
+ <img src="images/logo.<?% global.imagetyp %?>" alt="" />
+ </a>
+ <?% ELSE %?>
+ <img src="images/logo.<?% global.imagetyp %?>" alt="" />
+ <?% END %?>
+ </div>
+ <div id="headerNav">
+ &middot;
+ <?% IF allow( 'n' ) %?> <a accesskey="n" href="?cmd=n"><?% gettext("Running now") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'p' ) %?> <a accesskey="p" href="?cmd=p"><?% gettext("Program guide") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'al' ) %?> <a accesskey="a" href="?cmd=al"><?% gettext("AutoTimer") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'tl' ) %?> <a accesskey="t" href="?cmd=tl"><?% gettext("Timers") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'rl' ) %?> <a accesskey="r" href="?cmd=rl"><?% gettext("Recordings") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'vc' ) %?> <a accesskey="v" href="?cmd=vc"><?% gettext("Teletext") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'ml' ) %?> <a accesskey="m" href="?cmd=ml"><?% gettext("Music") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'mll' ) %?> <a accesskey="l" href="?cmd=mll"><?% gettext("Media list") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'r' ) %?> <a accesskey="f" href="javascript:popupcmd('r',640,450,0)"><?% gettext("Remote") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'sa' ) %?> <a accesskey="s" href="?cmd=sa"><?% gettext("Status") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'rp' ) %?> <a accesskey="b" href="?cmd=rp"><?% gettext("Report") %?></a> &middot;
+ <?% ELSIF allow( 'lg' ) %?> <a accesskey="b" href="?cmd=lg&data=main"><?% gettext("Log files") %?></a> &middot;<?% END %?>
+ <?% IF allow( 'ce' ) %?> <a accesskey="c" href="?cmd=ce"><?% gettext("Preferences") %?></a> &middot;
+ <?% ELSIF allow( 'uprefs' ) %?><a accesskey="u" href="javascript:popupcmd('uprefs',620,450,0)"><?% gettext("Personality") %?></a> &middot;
+ <?% END %?>
+ <?% IF allow( 'logout' ) %?> <a accesskey="q" href="javascript:popupcmd('logout',620,450,1)"><?% gettext("Logout") %?></a> &middot; <?% END %?>
+ <?% IF allow( 'help' ) %?> <a accesskey="h" href="?cmd=help">?</a> &middot; <?% END %?>
+ </div>
+</div>
+<!-- ###### Hilfsframe ###### -->
+<div id="hilfsframe"
+ style="display:none">
+ <div id="hilfsframecontent">
+ <iframe<?% IF info.http_useragent.match('.*MSIE.*') %?> allowtransparency="true"<?% END %?> frameborder="0" id="cframe" src="" width="100%" height="100%">
+ </iframe>
+ </div>
+</div>
+<!-- ###### Tooltips ###### -->
+<div id="TOOLTIP"></div>
+<?% END %?>
diff --git a/skins/stone_flat/help.tmpl b/skins/stone_flat/help.tmpl
new file mode 100644
index 0000000..04dc239
--- /dev/null
+++ b/skins/stone_flat/help.tmpl
@@ -0,0 +1,81 @@
+<!-- help -->
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <tr<?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td>
+ <a href="javascript:popupcmd('<?% short %?>',620,670,0)">
+ <?% long %?> ( <?% short %?> )
+ </a>
+ </td>
+ <td>
+ <a title="" href="?cmd=<?% short %?>" class="fieldinline">
+ <?% desc %?>
+ </a>
+ </td>
+ <td class="push">
+ <a href="javascript:popupcmd('<?% short %?>',620,670,0)">
+ <img src="images/watch.<?% global.imagetyp %?>" alt="" />
+ </a>
+ </td>
+ </tr>
+<?% END %?>
+<?% ######################################################################## %?>
+<h1>XXV - Version <?% version %?></h1>
+<p><?% data.shift %?></p>
+<?% IF data.size > 1 %?>
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% modul=zeile.0;short=zeile.1;long=zeile.2;desc=zeile.3 %?>
+ <?% IF allow(long) %?>
+ <?% IF !old.defined || modul != old %?>
+ <?% IF old.defined %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+ <?% END %?>
+ <table class="largetable" summary="">
+ <tr><td class="largehead">
+ <a href="javascript:popup('doc','<?% modul %?>',620,670,0)">
+ <?% modul %?>
+ </a>
+ </td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <?% z = 1 %?>
+ <tr height="0"><th width="200" align="left"></th><th></th><th width="40" align="right"></th></tr>
+ <?% END %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% z = z + 1 %?>
+ <?% old = modul %?>
+ <?% END %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form method="post" action="?cmd=search">
+ <input type="text" name="data" size='18' />
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/images b/skins/stone_flat/images
new file mode 120000
index 0000000..f37d9f2
--- /dev/null
+++ b/skins/stone_flat/images
@@ -0,0 +1 @@
+../stone/images/ \ No newline at end of file
diff --git a/skins/stone_flat/index.tmpl b/skins/stone_flat/index.tmpl
new file mode 100644
index 0000000..1c63454
--- /dev/null
+++ b/skins/stone_flat/index.tmpl
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>XXV</title>
+ <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
+ <meta http-equiv="cache-control" content="no-cache" />
+ <meta http-equiv="pragma" content="no-cache" />
+ <meta name="robots" content="noindex,noarchive,nofollow" />
+<script language="javascript" type="text/javascript">
+<!--
+// Automated reload with right page
+location.replace("?cmd=<?% param.start %?>");
+// -->
+</script>
+</head>
+<body onload="setTimeout('location.href=\'?cmd=<?% param.start %?>\'',15)" >
+ <a href="?cmd=<?% param.start %?>">Follow me...!</a>
+</body>
+</html>
diff --git a/skins/stone_flat/logger.tmpl b/skins/stone_flat/logger.tmpl
new file mode 100644
index 0000000..af54a36
--- /dev/null
+++ b/skins/stone_flat/logger.tmpl
@@ -0,0 +1,84 @@
+<!-- logger -->
+<body class="frame">
+<div id="body">
+<h1><?% gettext("Read journal file: ") %?><?% param.logfile %?></h1>
+<p><?% gettext("Size: ") %?><?% param.Size %?>&nbsp;
+ <?% gettext("Last changed: ") %?><?% param.LastChanged %?></p>
+ <?% trun = param.full ? 1000 : param.maxlet %?>
+ <table class="largetable" summary="">
+ <tr><td class="largehead"></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+<?% fields = data.shift %?>
+ <tr>
+ <?% FOREACH field = fields %?>
+ <?% NEXT IF field.match('^__') %?>
+ <th>
+ <?% field %?>
+ </th>
+ <?% END %?>
+ </tr>
+ <?% FOREACH zeile = data %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <?% c = -1 %?>
+ <?% FOREACH field = zeile %?>
+ <?% c = c + 1 %?>
+ <?% NEXT IF fields.$c.match('^__') %?>
+ <td>
+ <?% IF field == zeile.last && trun < 100 %?>
+ <a id="" href="" title="<?% zeile.last.replace("\n","<br />").replace("\"", "").replace("\'", "").replace(" ", "&nbsp;&nbsp;") %?>">
+ <font color='<?% param.color(zeile) %?>'>
+ <?% chop(field,trun) %?>
+ </font>
+ </a>
+ <?% ELSE %?>
+ <font color='<?% param.color(zeile) %?>'>
+ <?% chop(field,trun) %?>
+ </font>
+ <?% END %?>
+ </td>
+ <?% END %?>
+ </tr>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+<?% IF allow('report') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Report",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a title="<?% gettext("Report") %?>" href="?cmd=report"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Report") %?>" href="?cmd=report"><?% gettext("Report",20) %?></a>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+<?% IF allow('logger') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Log files",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a title="<?% gettext("Standard") %?>" href="?cmd=logger&data=main"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Standard") %?>" href="?cmd=logger&data=main"><?% gettext("Standard",20) %?></a><br />
+ <a title="<?% gettext("Syslog") %?>" href="?cmd=logger&data=syslog"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Syslog") %?>" href="?cmd=logger&data=syslog"><?% gettext("Syslog",20) %?></a><br />
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/memory.tmpl b/skins/stone_flat/memory.tmpl
new file mode 100644
index 0000000..f0b15e0
--- /dev/null
+++ b/skins/stone_flat/memory.tmpl
@@ -0,0 +1,110 @@
+<!-- Memory Template -->
+<?% IF ! global.bodyinc.defined;global.bodyinc = 1 %?>
+<body class="frame">
+<?% INCLUDE status.inc %?>
+<?% INCLUDE header.inc %?>
+<div id="body">
+<?% END %?>
+
+<?%
+ USE date;
+ statusfiles = [];
+
+ FILTER null;
+ name = 'memory_stat';
+ swapdata = [];
+ activedata = [];
+ cacheddata = [];
+ buffersdata = [];
+ timestamps = [];
+ FOREACH item = param.stack;
+ t = date.format(item.timestamp, '%H:%M:%S');
+ timestamps.push(t);
+ swapdata.push(item.memory.SwapTotal);
+ activedata.push(item.memory.Active);
+ cacheddata.push(item.memory.Cached);
+ buffersdata.push(item.memory.Buffers);
+ END;
+
+ # Maximum wert
+ max = param.stack.last.memory.MemTotal;
+
+ # Data ...
+ d = [
+ timestamps ,
+ swapdata ,
+ cacheddata ,
+ activedata ,
+ buffersdata ,
+ ];
+
+ USE my_graph = GD.Graph.lines(575,300);
+
+ # Xsteps
+ steps = param.stack.size div 5;
+
+ label = gettext('Memory usage since');
+ y_label = gettext('Memory usage in bytes'),
+ label = "${label} ${d.first.first} (${y_label})";
+ my_graph.set(
+ x_label_skip => steps,
+ x_long_ticks => 1,
+
+ y_long_ticks => 1,
+
+ line_width => 2,
+ box_axis => 1,
+ boxclr => '#FFFFCC',
+ fgclr => '#BBBBBB'
+ legend_placement => 'RD',
+ legend_spacing => 5,
+ );
+ my_graph.set_title_font(param.font,10);
+ my_graph.set_y_label_font(param.font,10);
+ my_graph.set_x_label_font(param.font,10);
+ my_graph.set_x_axis_font(param.font,6);
+ my_graph.set_y_axis_font(param.font,6);
+ my_graph.set_legend( 'Swap', 'Active', 'Cached', 'Buffers');
+ file = writefile("status_${name}.gif", my_graph.plot(d).gif );
+ statusfiles.push([label, file]);
+ END;
+
+ # ------------------- Piegraph für Speicher
+ FILTER null;
+ name = 'memory_now';
+ d2 = [
+ ["Active ${data.Active}","Cached ${data.Cached}","Inactive ${data.Inactive}","MemFree ${data.MemFree}","Buffers ${data.Buffers}"],
+ [ data.Active, data.Cached, data.Inactive, data.MemFree, data.Buffers]
+ ];
+ USE my_graph = GD.Graph.pie(500, 300);
+ label = gettext('Total Memory');
+ label = "${label} ${data.MemTotal}";
+ my_graph.set(
+ axislabelclr => 'black',
+ pie_height => 20,
+ transparent => 1,
+ );
+ my_graph.set_title_font(param.font,10);
+ my_graph.set_label_font(param.font,10);
+ my_graph.set_value_font(param.font,8);
+ file = writefile("status_${name}.gif", my_graph.plot(d2).gif );
+ statusfiles.push([label, file]);
+
+ END;
+ %?>
+
+<?% IF param.headingText %?>
+<h1><?% param.headingText %?></h1>
+<?% END %?>
+
+<?% FOREACH file = statusfiles %?>
+<table class="editortable" summary="">
+ <tr><td class="editorhead"><?% file.0 %?></td></tr>
+ <tr>
+ <td class="editortext" align="center">
+ <img src="<?% file.1 %?>" alt="<?% file.0 %?>" />
+ </td>
+ </tr>
+ <tr><td class="editorbottom"></td></tr>
+</table>
+<?% END %?>
diff --git a/skins/stone_flat/mlcopy.tmpl b/skins/stone_flat/mlcopy.tmpl
new file mode 120000
index 0000000..b15f879
--- /dev/null
+++ b/skins/stone_flat/mlcopy.tmpl
@@ -0,0 +1 @@
+mledit.tmpl \ No newline at end of file
diff --git a/skins/stone_flat/mldisplay.tmpl b/skins/stone_flat/mldisplay.tmpl
new file mode 100644
index 0000000..42aa3ee
--- /dev/null
+++ b/skins/stone_flat/mldisplay.tmpl
@@ -0,0 +1,195 @@
+<!--media display -->
+<body class="frame">
+<div id="body">
+
+
+<?% f = data.shift;
+id = f.0;
+title = f.2;
+subtitle = f.3;
+language = f.4;
+diskid = f.5
+comment = f.6;
+year = f.9;
+imgurl = f.10;
+director = f.11;
+runtime = f.13;
+country = f.14;
+plot = f.15;
+filename = f.16;
+filesize = f.17;
+filedate = f.18;
+audiocodec = f.19;
+videocodec = f.20;
+video_width = f.21;
+video_height = f.22;
+tvepisode = f.23;
+seen = f.25;
+%?>
+<?% ######################################################################## %?>
+<?% BLOCK item %?>
+<?% IF value %?>
+ <a href="?cmd=mlsearch&__search&__selfields=<?% topic %?>&__searchitem=<?% value %?>">
+ <?% value %?>
+ </a>
+<?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<h1><?% gettext("Media details for") %?>: <?% PROCESS item topic="title" value=title %?><?% IF subtitle %?> - <?% PROCESS item topic="subtitle" value=subtitle %?><?% END %?></h1>
+ <table class="largetable" summary="">
+ <tr>
+ <td class="largehead">
+ <font class="title">
+ <?% PROCESS item topic="title" value=title %?><?% IF subtitle %?> - <?% PROCESS item topic="subtitle" value=subtitle %?><?% END %?>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td class="largetext">
+ <div class="media" style="float:left; margin:10px">
+ <img class="media" src='<?% IF param.usecache == "y" %?>?cmd=mlcache&__source=<?% END %?><?% imgurl %?>'>
+ </div>
+ <div>
+ <table summary="" width="100%">
+ <tr><th width="10%">&nbsp;</th><th width="40%">&nbsp;</th>
+ <th width="10%">&nbsp;</th><th width="40%">&nbsp;</th></tr>
+
+ <tr><td><?% gettext("Year") %?>:</td><td><?% PROCESS item topic="year" value=year %?></td>
+ <td><?% gettext("Runtime") %?>:</td><td><?% IF runtime;runtime;END %?></td></tr>
+ <tr class="two"><td><?% gettext("Director") %?>:</td><td><?% PROCESS item topic="director" value=director %?></td>
+ <td><?% gettext("Language") %?>:</td><td><?% PROCESS item topic="language" value=language %?></td></tr>
+ <tr><td><?% gettext("Country") %?>:</td><td><?% PROCESS item topic="country" value=country %?></td>
+ <td><?% gettext("Mediatype") %?>:</td><td><?% PROCESS item topic="mediatype" value=param.mediatype %?></td></tr>
+ <tr class="two"><td><?% gettext("DiskID") %?>:</td><td><?% PROCESS item topic="diskid" value=diskid %?></td>
+ <td></td><td></td></tr>
+ <tr><td><?% gettext("TV-Episode") %?>:</td><td><input type=checkbox disabled="1" value="<?% tvepisode %?>" /></td>
+ <td><?% gettext("Seen") %?>:</td><td><input type=checkbox disabled="1" value="<?% seen %?>" /></td></tr>
+
+ <tr class="two"><td><?% gettext("Filename") %?>:</td><td><?% IF filename;filename;END %?></td>
+ <td><?% gettext("Filesize") %?>:</td><td><?% IF filesize;filesize;END %?></td></tr>
+ <tr><td><?% gettext("Filedate") %?>:</td><td><?% IF filedate;filedate;END %?></td>
+ <td><?% gettext("Size") %?>:</td><td><?% IF video_width && video_width;video_width %?>&nbsp;x&nbsp;<?% video_width;END %?></td></tr>
+
+ <tr class="two"><td><?% gettext("Audio Codec") %?>:</td><td><?% IF audiocodec;audiocodec;END %?></td>
+ <td><?% gettext("Video Codec") %?>:</td><td><?% IF videocodec;videocodec;END %?></td></tr>
+
+<?% IF param.genres_sel.0 %?>
+ <tr><td><?% gettext("Genres") %?>:</td><td colspan="3">
+ <?% selection = param.genres_sel %?>
+ <?% genres = param.genres_all %?>
+ <?% FOREACH x = selection %?>
+ <?% genres.$x.name %?>&nbsp;
+ <?% END %?>
+ </td></tr>
+<?% END %?>
+
+ </table>
+ </div>
+
+ </td>
+ </tr>
+<tr><td class="largebottom"></td></tr>
+</table>
+<?% IF plot %?>
+<table class="largetable" summary="">
+ <tr>
+ <td class="largehead">
+ <?% gettext("Plot") %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="largetext">
+ <?% plot %?>
+ </td>
+</tr>
+<tr><td class="largebottom"></td></tr>
+</table>
+<?% END %?>
+<?% IF comment %?>
+<table class="largetable" summary="">
+ <tr>
+ <td class="largehead">
+ <?% gettext("Comment") %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="largetext">
+ <?% comment %?>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+</table>
+<?% END %?>
+
+<?% IF param.actors.0.0 %?>
+ <table class="largetable" summary="">
+ <tr>
+ <td class="largehead">
+ <font class="title">
+ <?% gettext("Actors") %?>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td class="largetext">
+
+<?% FOREACH zeile = param.actors %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% actor = zeile.0;imgurl=zeile.1 %?>
+ <div style="float:left">
+ <div class="actor">
+ <img class="actor" src="?cmd=mlcache&__source=<?% imgurl %?>" alt="<?% actor %?>" />
+ </div>
+ <div class="actortext">
+ <?% PROCESS item topic="actors" value=actor %?>
+ </div>
+ </div>
+<?% END %?>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+</table>
+<?% END %?>
+
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Media list",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <?% IF allow('mllist') %?>
+ <a title="<?% gettext("Back") %?>" href="?cmd=mllist&amp;__range=<?% param.range %?>"><img src="images/back.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Back") %?>" href="?cmd=mllist&amp;__range=<?% param.range %?>"><?% gettext("Back",18) %?></a><br />
+ <?% END %?>
+
+
+ <?% IF allow('mledit') %?>
+ <a title="<?% gettext("New") %?>" href="?cmd=mledit&amp;__range=<?% param.range %?>"><img src="images/new.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("New") %?>" href="?cmd=mledit&amp;__range=<?% param.range %?>"><?% gettext("New",18) %?></a><br />
+ <?% END %?>
+
+ <?% IF allow('mlcopy') %?>
+ <a title="<?% gettext("Copy") %?>" href="?cmd=mlcopy&amp;data=<?% id %?>"><img src="images/new.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Copy") %?>" href="?cmd=mlcopy&amp;data=<?% id %?>"><?% gettext("Copy",18) %?></a><br />
+ <?% END %?>
+
+ <?% IF allow('mledit') %?>
+ <a title="<?% gettext("Edit") %?>" href="?cmd=mledit&amp;data=<?% id %?>"><img src="images/edit.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Edit") %?>" href="?cmd=mledit&amp;data=<?% id %?>"><?% gettext("Edit",18) %?></a><br />
+ <?% END %?>
+
+ <?% IF allow('mldelete') %?>
+ <a href="javascript:surecmd('<?% gettext("You will delete this media") %?>','<?% escape(title) %?>','mldelete','<?% id %?>',620,670)"><img src="images/delete.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:surecmd('<?% gettext("You will delete this media") %?>','<?% escape(title) %?>','mldelete','<?% id %?>',620,670)"><?% gettext("Delete",18) %?></a><br />
+ <?% END %?>
+
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+
+
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/mledit.tmpl b/skins/stone_flat/mledit.tmpl
new file mode 100644
index 0000000..408e22c
--- /dev/null
+++ b/skins/stone_flat/mledit.tmpl
@@ -0,0 +1,217 @@
+<!--media edit-->
+<body class="frame">
+<div id="body">
+
+
+<h1><?% IF data.id %?><?% gettext("Edit media") %?><?% ELSE %?><?% gettext("Create new media") %?><?% END %?></h1>
+
+<form method="post" action="?cmd=mlresearch" name='library'>
+<input type="hidden" name="data" value="<?% IF data.id %?><?% data.id %?><?% ELSE %?><?% param.id %?><?% END %?>" />
+<input type="hidden" name="__range" value="<?% param.range %?>" />
+ <table class="largetable" summary="">
+ <tr class="two">
+ <td class="largehead">
+ <font class="title">
+ <?% title %?><?% IF subtitle %?> - <?% subtitle %?><?% END %?>
+ </font>
+ </td>
+ </tr>
+ <tr class="two">
+ <td class="largetext">
+ <table width="100%">
+ <tr>
+ <td>
+ <?% gettext('Title') %?>:
+ </td>
+ <td colspan="3">
+ <input type="text" name="__title" id="title" value="<?% data.title || param.title %?>" style="width:50%;" maxlength="255" />
+ &nbsp;<input type="submit" name="__search" value="<?% gettext('Search at') %?>" onfocus="document.library.cmd.value='mlresearch'" onblur="document.library.cmd.value='mlsave'" />&nbsp;&nbsp;
+ <input type="radio" name="__source" value="dvdpalace" checked="checked" />&nbsp;
+ <a href="http://www.dvd-palace.de" target="_blank">DVD-Palace (DE)</a>
+ </td>
+ </tr>
+ <tr class="two">
+ <td>
+ <?% gettext('Subtitle') %?>:
+ </td>
+ <td>
+ <input type="text" name="__subtitle" id="subtitle" value="<?% data.subtitle || param.subtitle %?>" style="width:99%;" maxlength="255" />
+ </td>
+ <td>
+ <?% gettext('Director') %?>:
+ </td>
+ <td>
+ <input type="text" name="__director" id="director" value="<?% data.director || param.director %?>" style="width:99%;" maxlength="255" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?% gettext('Cover URL') %?>:
+ </td>
+ <td>
+ <input type="text" name="__imgurl" id="imgurl" value="<?% data.imgurl || param.imgurl %?>" style="width:99%;" maxlength="255" />
+ </td>
+ <td>
+ <?% gettext('DiskID') %?>:
+ </td>
+ <td>
+ <input type="text" name="__diskid" id="diskid" value="<?% data.diskid || param.diskid %?>" style="width:30%" maxlength="255" />
+ <input type="hidden" name="__id" id="id" value="<?% data.id || param.id %?>" style="width:30%" maxlength="255" />
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?% gettext('Mediatype') %?>
+ <select name="__mediatype">
+ <option label="" value="0" <?% IF (data.mediatype || param.mediatype) && (data.mediatype == 0 || param.mediatype == 0) %?>selected="selected"<?% END %?>></option>
+ <?% mediatypes = param.mediatypes %?>
+ <?% FOREACH type = mediatypes %?>
+ <option label="<?% type.1 %?>" value="<?% type.0 %?>" <?% IF data.mediatype == type.0 || param.mediatype == type.0 %?>selected="selected"<?% END %?>><?% type.1 %?></option>
+ <?% END %?>
+ </select>
+ </td>
+ </tr>
+ <tr class="two">
+ <td>
+ <?% gettext('Country') %?>:
+ </td>
+ <td>
+ <input type="text" name="__country" id="country" value="<?% data.country || param.country %?>" style="width:99%;" maxlength="255" />
+ </td>
+ <td>
+ <?% gettext('Language') %?>:
+ </td>
+ <td>
+ <input type="text" style="width:30%" maxlength="255" name="__language" id="language" value="<?% data.language || param.language %?>" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?% gettext('TV-Episode') %?>:
+ </td>
+ <td>
+ <input type="checkbox" name="__istv" id="istv" value="<?% data.istv || param.istv %?>" />
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <?% gettext('Seen') %?>:
+ <input type="checkbox" name="__seen" id="seen" value="<?% data.seen || param.seen %?>" />
+ </td>
+ <td>
+ <?% gettext('Runtime') %?>:
+ </td>
+ <td>
+ <input type="text" name="__runtime" id="runtime" value="<?% data.runtime || param.runtime %?>" style="width:30%" maxlength="5" />min
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <?% gettext('Year') %?>:
+ <input type="text" name="__year" id="year" value="<?% data.year || param.year %?>" style="width:30%" maxlength="4" />
+ </td>
+ </tr>
+ <tr class="two">
+ <td>
+ <?% gettext('Filename') %?>:
+ </td>
+ <td>
+ <input type="text" name="__filename" id="filename" value="<?% data.filename || param.filename %?>" style="width:99%;" maxlength="255" />
+ </td>
+ <td>
+ <?% gettext('Size') %?>:
+ </td>
+ <td>
+ <input type="text" name="__video_width" id="video_width" value="<?% data.video_width || param.video_width %?>" style="width:30%" maxlength="4" /> x
+ <input type="text" name="__video_height" id="video_height" value="<?% data.video_height || param.video_height %?>" style="width:30%" maxlength="4" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?% gettext('Filesize') %?>:
+ </td>
+ <td>
+ <input type="text" name="__filesize" id="filesize" value="<?% data.filesize || param.filesize %?>" style="width:30%" maxlength="15" /> bytes
+ </td>
+ <td>
+ <?% gettext('Filedate') %?>:
+ </td>
+ <td>
+ <input type="text" name="__filedate" id="filedate" value="<?% data.filedate || param.filedate %?>" style="width:30%" maxlength="20" />
+ </td>
+ </tr>
+ <tr class="two">
+ <td>
+ <?% gettext('Audio Codec') %?>:
+ </td>
+ <td>
+ <input type="text" name="__audio_codec" id="audio_codec" value="<?% data.audio_codec || param.audio_codec %?>" style="width:30%" />
+ </td>
+ <td>
+ <?% gettext('Video Codec') %?>:
+ </td>
+ <td>
+ <input type="text" name="__video_codec" id="video_codec" value="<?% data.video_codec || param.video_codec %?>" style="width:30%" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?% gettext('Plot') %?>:<br />
+ </td>
+ <td colspan="3">
+ <textarea style="width:99%;" rows="4" name="__plot" id="plot" wrap="virtual"><?% data.plot || param.plot %?></textarea>
+ </td>
+ </tr>
+ <tr class="two">
+ <td>
+ <?% gettext('Comment') %?>:<br />
+ </td>
+ <td colspan="3">
+ <textarea style="width:99%;" rows="4" name="__comment" id="comment" wrap="virtual"><?% data.comment || param.comment %?></textarea>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2"><?% gettext('Genre') %?>:
+ <br/>
+ <table class="genreselect" width="100%">
+ <?% genres = param.allgenres %?>
+ <?% WHILE genres.size %?>
+ <tr>
+ <?% FOREACH [ 1..5 ] %?>
+ <?% set = genres.shift %?>
+ <td nowrap="nowrap">
+ <?% IF set.first %?>
+ <input type="checkbox" name="__genres" id="<?% set.0 %?>" value="<?% set.0 %?>" <?% IF param.genres.grep("^$set.0\$").size > 0 %?>checked="checked"<?% END %?>/>
+ <label for="<?% set.0 %?>"><?% set.1 %?></label>
+ <?% END %?>
+ </td>
+ <?% END %?>
+ </tr>
+ <?% END %?>
+ </tr>
+ </table>
+ </td>
+ <td colspan="2">
+ <?% gettext('Actors') %?>:<br />
+ <textarea style="width:99%;" rows="6" name="__actors" id="actors" wrap="off"><?% data.actors || param.actors %?></textarea>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4" align="right">
+ <input type="reset" value="<?% gettext("Reset") %?>" />&nbsp;
+ <input type="submit" name="__save" value="<?% gettext('Apply') %?>" onblur="document.library.cmd.value='mlresearch'" onfocus="document.library.cmd.value='mlsave'" />&nbsp;&nbsp;
+ </td>
+ </tr>
+</table>
+ </td>
+</tr>
+<tr class="two"><td class="largebottom"></td></tr>
+</table>
+</form>
+
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Media list",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a href="javascript:back()"><img src="images/back.<?% global.imagetyp %?>" alt="" title="<?% gettext("Back",20) %?>" /></a>&nbsp;
+ <a href="javascript:back()"><?% gettext("Back",20) %?></a><br />
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/mlimport.tmpl b/skins/stone_flat/mlimport.tmpl
new file mode 120000
index 0000000..b15f879
--- /dev/null
+++ b/skins/stone_flat/mlimport.tmpl
@@ -0,0 +1 @@
+mledit.tmpl \ No newline at end of file
diff --git a/skins/stone_flat/mlist.tmpl b/skins/stone_flat/mlist.tmpl
new file mode 100644
index 0000000..2ec6041
--- /dev/null
+++ b/skins/stone_flat/mlist.tmpl
@@ -0,0 +1,235 @@
+<!--mlist-->
+<body class="frame">
+<div id="body">
+<?% USE date %?>
+<?% ######################################################################## %?>
+<?% total = 0 %?>
+<?% BLOCK summe %?>
+ <?%
+ tt = playtime.split(':');
+ IF tt.size == 3;
+ ts = (tt.0 * 3600) + (tt.1 * 60) + ( tt.2 );
+ ELSIF tt.size == 2;
+ ts = (tt.0 * 60) + ( tt.1 );
+ END;
+ total = total + ts;
+ %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK printsumme %?>
+ <?% IF total > 0 %?>
+ <?%
+ sec = total mod 60;
+ min = total div 60 mod 60;
+ hour = total div 3600;
+ %?>
+ <p class="description" style="padding: 0; margin-left: <?% width %?>px;"><?% IF hour > 0 %?><?% hour FILTER format('%02d') %?>:<?% END %?><?% min FILTER format('%02d') %?>:<?% sec FILTER format('%02d')%?></p>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <tr valign="bottom" <?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <?% IF allow('mplay') %?>
+ <input class="push" type="checkbox" value="<?% id %?>" />
+ <?% END %?>
+ </td>
+ <td class="fieldinline">
+ <?% IF artist.length > 0 %?>
+ <a class="title" title="<?% gettext("Search") %?>" href="?cmd=ml&amp;data=artist:<?% url(artist) %?>">
+ <?% artist %?>
+ </a>&nbsp;
+ <?% END %?>
+ <?% IF title.length > 0 %?>
+ <a class="subtitle" title="<?% gettext("Search") %?>" href="?cmd=ml&amp;data=title:<?% url(title) %?>">
+ <?% title %?>
+ </a>
+ <?% END %?>
+ </td>
+ <td class="fieldinline push">
+ <?% playtime %?>
+ <?% IF track != "" %?>&nbsp;(<?% track %?>)<?% END %?>
+ <?% IF allow('mgetfile') %?>
+ <a title="<?% gettext("Store selected song") %?>" href="?cmd=mgetfile&amp;data=<?% id %?>&amp;__binary=1">
+ <img src="images/file.<?% global.imagetyp %?>" alt="" title="<?% gettext("Store selected song") %?>" />
+ </a>
+ <?% END %?>
+ <?% IF allow('mplay') %?>
+ <a title="<?% gettext("Play selected songs") %?>" href="javascript:PlayMusic('<?% id %?>','<?% param.proxy %?>')">
+ <img src="images/play.<?% global.imagetyp %?>" alt="" title="<?% gettext("Play selected songs") %?>" />
+ </a>
+ <?% END %?>
+ </td>
+ </tr>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK titleline %?>
+ <?% headlist = [];
+ smallist = [];
+ headlist.push(album) IF album.search('\S+');
+ c=loop.count;
+ headlist.push(artist) IF artist.search('\S+') AND artist == data.$c.1;
+ smallist.push(genre) IF genre.search('\S+');
+ smallist.push(year) IF year != 0;
+ %?>
+ <?% headlist.join("&nbsp;-&nbsp;") %?>
+ <small>
+ <?% "&nbsp;-&nbsp;" IF headlist.size > 0 AND smallist > 0;
+ smallist.join("&nbsp;-&nbsp;");
+ IF comment.search('\S+');
+ "&nbsp;";
+ cc = [];
+ cc.push("(");
+ cc.push(comment);
+ cc.push(")");
+ cc.join(" ");
+ END; %?>
+ </small>
+<?% END %?>
+<?% ######################################################################## %?>
+<!-- Musiclist -->
+<h1><?% gettext("Music Library") %?></h1>
+<?% IF data.size > 1%?>
+<?% fields = data.shift %?>
+<form name="mlist" action="">
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% id=zeile.0;artist=zeile.1;album=zeile.2;title=zeile.3;track=zeile.4;year=zeile.5;playtime=zeile.6;genre=zeile.7;comment=zeile.8 %?>
+ <?% IF !old.defined || album != old %?>
+ <?% IF old.defined %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+ <?% PROCESS printsumme width=780 %?>
+ <?% END %?>
+ <table class="largetable" summary="">
+ <tr><td class="largehead"><?% PROCESS titleline %?></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <?% z = 1 %?>
+ <tr height="0"><th width="20"></th><th></th><th width="125"></th></tr>
+ <tr>
+ <td align="right" colspan="3">
+ <a class="title" title="<?% gettext("Search") %?>" href="?cmd=ml&amp;data=album:<?% url(album) %?>">
+ <img class="cover" src="?cmd=mcoverimage&amp;data=<?% id %?>&amp;__binary=1" alt="<?% album %?>" />
+ </a>
+ </td>
+ </tr>
+ <?% END %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% PROCESS summe %?>
+ <?% old = album %?>
+ <?% z = z + 1 %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+ <?% PROCESS printsumme width=780 %?>
+</form>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Music",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form name="genreform" action="">
+ <?% gettext("Genres",20) %?>:<br />
+ <select name='genres' onchange="di('?cmd=ml&amp;data=','genre:' + this.form.genres.options[this.form.genres.options.selectedIndex].value)">
+ <?% FOREACH ch = param.genres %?>
+ <option value="<?% url( ch.1 ) %?>"<?% ' selected="selected"' IF cgi.param('data').split(':').first == 'genre' && cgi.param('data').split(':').last == ch.1 %?>><?% ch.0 %?></option>
+ <?% END %?>
+ </select>
+ </form>
+
+ <form name="artistform" action="" onsubmit="location.href = '?cmd=ml&amp;data=' + 'artist:' + escape(document.artistform.data.value); return false">
+ <?% gettext("Artists",20) %?>:<br />
+ <input type="text" id="artisttext" name="data" alt="<?% gettext("Artists") %?>"
+ onkeyup="suggest('msuggest&__get=artist','artisttext','artistsuggest');"
+ <?% IF cgi.param('data').split(':').first == 'artist' %?>value="<?% cgi.param('data').split(':').last %?>"<?% END %?>
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="artistsuggest"></div>
+ </form>
+
+ <form name="albumsform" action="" onsubmit="location.href = '?cmd=ml&amp;data=' + 'album:' + escape(document.albumsform.data.value); return false">
+ <?% gettext("Albums",20) %?>:<br />
+ <input type="text" id="albumtext" name="data" alt="<?% gettext("Artists") %?>"
+ onkeyup="suggest('msuggest&__get=album','albumtext','albumsuggest');"
+ <?% IF cgi.param('data').split(':').first == 'album' %?>value="<?% cgi.param('data').split(':').last %?>"<?% END %?>
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="albumsuggest"></div>
+ </form>
+
+ <form name="yearsform" action="">
+ <?% gettext("Year",20) %?>:<br />
+ <select name='years' onchange="di('?cmd=ml&amp;data=','year:' + this.form.years.options[this.form.years.options.selectedIndex].value)">
+ <option value=""> </option>
+ <?% ch = date.format(date.now, '%Y', 'en_GB'); WHILE ch >= 1970; %?>
+ <option value="<?% url( ch ) %?>"<?% ' selected="selected"' IF cgi.param('data').split(':').first == 'year' && cgi.param('data').split(':').last == ch %?>><?% ch %?></option>
+ <?% ch = ch - 1; END %?>
+ </select>
+ </form>
+ <?% IF allow('mrefresh') %?>
+ <a title="<?% gettext("Update Music Database") %?>" href="javascript:popupcmd('mrefresh',620,120,1)"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Update Music Database") %?>" href="javascript:popupcmd('mrefresh',620,120,1)"><?% gettext("Update Music Database",20) %?></a><br />
+ <?% END %?>
+ <?% IF allow('mcovers') %?>
+ <a title="<?% gettext("Get new Covers") %?>" href="javascript:popupcmd('mcovers',620,120,1)"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Get new Covers") %?>" href="javascript:popupcmd('mcovers',620,120,1)"><?% gettext("Get new Covers",18) %?></a><br />
+ <?% END %?>
+ <!--
+ Search: <input name='search' value='' /><input type='button' onclick="location.href = '/?cmd=ml&amp;data=' + 'search:' + document.forms[0].search.value" value="Go" />
+ -->
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+ <?% IF allow('mplay') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Select",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a href="javascript:selAll(document.mlist,1)"><img src="images/select.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:selAll(document.mlist,1)"><?% gettext("Select all",20) %?></a><br />
+ <a href="javascript:selAll(document.mlist,0)"><img src="images/deselect.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:selAll(document.mlist,0)"><?% gettext("Unselect all",20) %?></a><br />
+ <a href="javascript:reverse(document.mlist)"><img src="images/invers.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:reverse(document.mlist)"><?% gettext("Reverse select",20) %?></a><br />
+ <a href="javascript:Play('<?% gettext("You have nothing selected!") %?>',document.mlist,'<?% param.proxy %?>')">
+ <img src="images/play.<?% global.imagetyp %?>" alt="" title="<?% gettext("Play selected songs") %?>" />
+ </a>&nbsp;
+ <a href="javascript:Play('<?% gettext("You have nothing selected!") %?>',document.mlist,'<?% param.proxy %?>')">
+ <?% gettext("Play selected songs",20) %?>
+ </a>
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+ <?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form method="post" action="?cmd=msearch" name="titleform">
+ <input type="text" id="titletext" name="data" alt="<?% gettext("Search") %?>"
+ onkeyup="suggest('msuggest&__get=title','titletext','titlesuggest');"
+ <?% IF cgi.param('cmd')=='ms' || cgi.param('cmd')=='msearch' %?>value="<?% cgi.param('data')%?>"<?% END %?>
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="titlesuggest"></div>
+ </form>
+
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/mllist.tmpl b/skins/stone_flat/mllist.tmpl
new file mode 100644
index 0000000..ad777ec
--- /dev/null
+++ b/skins/stone_flat/mllist.tmpl
@@ -0,0 +1,113 @@
+<!--media list-->
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+ <?% IF allow('mledit') %?>
+ <a href="?cmd=mledit&amp;data=<?% id %?>">
+ <img src="images/edit.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit media") %?>" />
+ </a>
+ <?% END %?>
+ <?% IF allow('mldelete') %?>
+ <a href="javascript:surecmd('<?% gettext("You will delete this media") %?>','<?% escape(title) %?>','mldelete','<?% id %?>',620,670)">
+ <img src="images/delete.<?% global.imagetyp %?>" alt="" title="<?% gettext("Delete media") %?>" />
+ </a>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK item %?>
+<?% IF value %?>
+ <a href="?cmd=mlsearch&amp;__search&amp;__selfields=<?% topic %?>&amp;__searchitem=<?% value %?>">
+ <?% value %?>
+ </a>
+<?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <div class="medialist">
+ <a href="?cmd=mldisplay&amp;data=<?% id %?>" class="fieldinline">
+ <img class="medialist" alt="" src='<?% IF param.usecache == "y" %?>?cmd=mlcache&amp;__source=<?% END %?><?% imgurl %?>' />
+ </a>
+ </div>
+ </td>
+ <td class="fieldinline">
+ <a href="?cmd=mldisplay&amp;data=<?% id %?>" class="fieldinline">
+ <font class="title">
+ <?% title %?><br />
+
+ </font>
+ <font class="subtitle">
+ <?% subtitle %?> ( <?% director %?> )<br />
+ </font>
+ <?% IF global.hideDescription != 1 && description.length > 0 %?>
+ <font class="description"><?% chop(description,100,5) %?></font>
+ <?% END %?>
+ </a>
+ </td>
+ <td class="fieldinline push">
+ <?% IF year > 0 %?>
+ <font class="description"><?% PROCESS item topic="year" value=year %?></font>
+ <?% END %?>
+ <br />
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+<?% END %?>
+<?% ######################################################################## %?>
+<h1><?% gettext("Media list") %?></h1>
+<form name="mlist" action="">
+ <table class="largetable" summary="">
+ <tr><td class="largehead">&nbsp;</td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <tr height="0"><th width="60"></th><th></th><th width="64"></th></tr>
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% id=zeile.0;imgurl=zeile.1;title=zeile.2;subtitle=zeile.3;year=zeile.4;director=zeile.5;description=zeile.6; %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+</form>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Media list",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <?% IF allow('mledit') %?>
+ <a title="<?% gettext("New") %?>" href="?cmd=mledit&amp;__range=<?% param.range %?>"><img src="images/new.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("New") %?>" href="?cmd=mledit&amp;__range=<?% param.range %?>"><?% gettext("New",18) %?></a><br />
+ <?% END %?>
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form name="mediarange" action="">
+ <select name='range' onchange="di('?cmd=mllist&amp;__range=',this.form.range.options[this.form.range.options.selectedIndex].value)">
+ <?% FOREACH r = param.ranges %?>
+ <option value="<?% url( r.0 ) %?>"<?% ' selected="selected"' IF param.range == r.0 %?>><?% r.1 %?></option>
+ <?% END %?>
+ </select>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/mlresearch.tmpl b/skins/stone_flat/mlresearch.tmpl
new file mode 100644
index 0000000..452b183
--- /dev/null
+++ b/skins/stone_flat/mlresearch.tmpl
@@ -0,0 +1,110 @@
+<!--media research -->
+<body class="frame">
+<div id="body">
+
+<h1>
+<?% IF param.hitcount < 1 %?>
+<?% gettext("Search result : None title found.") %?>
+<?% ELSIF param.hitcount == 1 %?>
+<?% gettext("Search result : One title found.") %?>
+<?% ELSE %?>
+<?% topic = gettext("Search results : %s titles found."); topic | replace('%s',param.hitcount) %?>
+<?% END %?>
+</h1>
+
+ <table class="largetable" summary="">
+ <tr><td class="largehead">&nbsp;</td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <tr height="0"><th width="60"></th><th></th></tr>
+<?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% importurl = zeile.0;imgurl=zeile.1;title=zeile.2;description=zeile.3 %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <div class="medialist">
+ <a href="?cmd=mlimport&__import=<?% importurl %?>&__id=<?% param.id %?>&__range=<?% param.range %?>&__source=<?% param.source %?>">
+ <?% IF imgurl %?>
+ <img class="medialist" src="<?% imgurl %?>" alt="<?% title %?>" />
+ <?% ELSE %?>
+ <img class="medialist" src="images/nocover.<?% global.imagetyp %?>" alt="<?% title %?>" />
+ <?% END %?>
+ </a>
+ </div>
+ </td>
+ <td class="fieldinline">
+ <a href="?cmd=mlimport&__import=<?% importurl %?>&__id=<?% param.id %?>&__range=<?% param.range %?>&__source=<?% param.source %?>">
+ <font class="title">
+ <?% title %?>
+ </font>
+ </a>
+ <br />
+ <div class="epgdescription">
+ <a href="?cmd=mlimport&__import=<?% importurl %?>&__id=<?% param.id %?>&__range=<?% param.range %?>&__source=<?% param.source %?>">
+ <?% chop(description,35,3) %?>
+ </a>
+ </div>
+ </td>
+ </tr>
+<?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+
+
+
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Media list",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a href="javascript:back()"><img src="images/back.<?% global.imagetyp %?>" alt="" title="<?% gettext("Back",20) %?>" /></a>&nbsp;
+ <a href="javascript:back()"><?% gettext("Back",20) %?></a><br />
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+
+<?% pages = 20 %?>
+<?% maximum = param.hitcount %?>
+<?% IF maximum > pages %?>
+<?% url = "?cmd=mlresearch&__source=${param.source}&__title=${param.title}&__start=" %?>
+<?% offset = cgi.param('__start') %?>
+<?% backpage = offset - pages %?>
+<?% backpageenable = backpage >= 0 ? 1 : 0 %?>
+<?% nextpage = offset + pages %?>
+<?% nextpageenable = nextpage < maximum ? 1 : 0 %?>
+
+<?% BLOCK PAGES %?>
+ <?% IF enable %?><a href="<?% url %?><?% page %?>"><?% END %?>
+ <img src="images/<?% image %?>.<?% global.imagetyp %?>" alt="" title="<?% label %?>" />
+ <?% "</a>" IF enable %?>
+ &nbsp;
+ <?% IF enable %?><a href="<?% url %?><?% page %?>"><?% END %?>
+ <?% IF !enable %?><font class="deactive"><?% END %?>
+ <?% label %?>
+ <?% IF !enable %?></font><?% END %?>
+ <?% "</a>" IF enable %?>
+ <br />
+<?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Page",20) %?>&nbsp;<?% ( offset div pages ) + 1 %?></td></tr>
+ <tr>
+ <td class="sidetext">
+<?% PROCESS PAGES page="0" enable=backpageenable image='home' label=gettext('First page',20) %?>
+<?% PROCESS PAGES page=backpage enable=backpageenable image='back' label=gettext('Prior page',20) %?>
+<?% PROCESS PAGES page=nextpage enable=nextpageenable image='forward' label=gettext('Next page',20) %?>
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+<?% END %?>
+
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/mlsave.tmpl b/skins/stone_flat/mlsave.tmpl
new file mode 100644
index 0000000..64d3989
--- /dev/null
+++ b/skins/stone_flat/mlsave.tmpl
@@ -0,0 +1,43 @@
+<!--media save-->
+<body class="frame">
+<div id="body">
+<h1><?% gettext("Media list") %?></h1>
+<?% trimmed = data FILTER trim %?>
+<?% IF data.size > 1 || trimmed != "" %?>
+<table class="editortable" summary="">
+ <tr><td class="editorhead"><div class="editorhead">&nbsp;</div></td></tr>
+ <tr>
+ <td class="editortext" align="left">
+ <?% IF data.size <= 0 %?>
+ <?% data %?>
+ <?% ELSE %?>
+ <table summary="" width="100%">
+ <?% FOREACH zeile = data %?>
+ <tr<?% " class='two'" IF loop.count mod 2 == 0 %?>>
+ <td><?% zeile %?></td>
+ </tr>
+ <?% END %?>
+ </table>
+ <?% END %?>
+ </td>
+ </tr>
+ <tr><td class="editorbottom"></td></tr>
+</table>
+<?% END %?>
+
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Media list",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a title="<?% gettext("Back") %?>" href="?cmd=mldisplay&amp;data=<?% cgi.param('data') %?>"><img src="images/back.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Back") %?>" href="?cmd=mldisplay&amp;data=<?% cgi.param('data') %?>"><?% gettext("Back",18) %?></a><br />
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/mlsearch.tmpl b/skins/stone_flat/mlsearch.tmpl
new file mode 120000
index 0000000..ef4636c
--- /dev/null
+++ b/skins/stone_flat/mlsearch.tmpl
@@ -0,0 +1 @@
+mllist.tmpl \ No newline at end of file
diff --git a/skins/stone_flat/msearch.tmpl b/skins/stone_flat/msearch.tmpl
new file mode 120000
index 0000000..86e9342
--- /dev/null
+++ b/skins/stone_flat/msearch.tmpl
@@ -0,0 +1 @@
+mlist.tmpl \ No newline at end of file
diff --git a/skins/stone_flat/network.tmpl b/skins/stone_flat/network.tmpl
new file mode 100644
index 0000000..4683e7f
--- /dev/null
+++ b/skins/stone_flat/network.tmpl
@@ -0,0 +1,132 @@
+<!-- Network Template -->
+<?% IF ! global.bodyinc.defined;global.bodyinc = 1 %?>
+<body class="frame">
+<?% INCLUDE status.inc %?>
+<?% INCLUDE header.inc %?>
+<div id="body">
+<?% END %?>
+<?%
+ USE date;
+ statusfiles = [];
+
+ FILTER null;
+ name = 'network_stat';
+ timestamps = [];
+ FOREACH entry = param.stack.first.network;
+ iname = entry.first.split(':').first;
+
+ rxbytes.${iname} = [];
+ txbytes.${iname} = [];
+ rxerror.${iname} = [];
+ txerror.${iname} = [];
+
+ oldentry.${iname} = [];
+ END;
+
+ FOREACH item = param.stack;
+ t = date.format(item.timestamp, '%H:%M:%S');
+ timestamps.push(t);
+
+ FOREACH entry = item.network;
+ iname = entry.first.split(':').first;
+
+ UNLESS oldentry.${iname}.size;
+ oldentry.${iname} = entry;
+ END;
+
+ bytes = entry.1 - oldentry.${iname}.1;
+ rxbytes.${iname}.push(bytes);
+
+ bytes = entry.5 - oldentry.${iname}.5;
+ txbytes.${iname}.push(bytes);
+
+ rxerror.${iname}.push(entry.3);
+ txerror.${iname}.push(entry.7);
+ oldentry.${iname} = entry;
+ END;
+ END;
+
+ FOREACH iname = rxbytes.keys.sort;
+
+ # Data ...
+ d = [
+ timestamps,
+ rxbytes.${iname},
+ rxerror.${iname},
+ txbytes.${iname},
+ txerror.${iname},
+ ];
+
+ USE my_graph = GD.Graph.lines(575,300);
+
+ # Xsteps
+ steps = param.stack.size div 5;
+ label = gettext('Traffic on Interface');
+ y_label = gettext('Transfer in bytes');
+ label = "${label} ${iname} (${y_label})";
+ my_graph.set(
+ x_label_skip => steps,
+ x_long_ticks => 1,
+
+ y_long_ticks => 1,
+
+ line_width => 2,
+ box_axis => 1,
+ boxclr => '#FFFFCC',
+ fgclr => '#BBBBBB'
+ legend_placement => 'RD',
+ legend_spacing => 5,
+ );
+ my_graph.set_title_font(param.font,10);
+ my_graph.set_y_label_font(param.font,10);
+ my_graph.set_x_label_font(param.font,10);
+ my_graph.set_x_axis_font(param.font,6);
+ my_graph.set_y_axis_font(param.font,6);
+ my_graph.set_legend( 'RxBytes', 'RxErrors', 'TxBytes', 'TxErrors');
+ file = writefile("status_network_${iname}.gif", my_graph.plot(d).gif );
+ statusfiles.push([label, file]);
+
+ END;
+ END;
+ %?>
+
+
+<?% IF param.headingText %?>
+<h1><?% param.headingText %?></h1>
+<?% END %?>
+
+<table class="editortable" summary="">
+ <tr><td class="editorhead">&nbsp;</td></tr>
+ <tr>
+ <td class="editortext">
+ <table summary="" width="100%">
+ <?% fields = data.shift %?>
+ <tr>
+ <?% FOREACH field = fields %?>
+ <th><?% field %?></th>
+ <?% END %?>
+ </tr>
+ <?% FOREACH zeile = data %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 1 %?>>
+ <?% FOREACH field = zeile %?>
+ <td><?% field.replace('\n', '<br />') %?></td>
+ <?% END %?>
+ </tr>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="editorbottom"></td></tr>
+</table>
+
+<?% FOREACH file = statusfiles %?>
+<table class="editortable" summary="">
+ <tr><td class="editorhead"><?% file.0 %?></td></tr>
+ <tr>
+ <td class="editortext" align="center">
+ <img src="<?% file.1 %?>" alt="<?% file.0 %?>" />
+ </td>
+ </tr>
+ <tr><td class="editorbottom"></td></tr>
+</table>
+<?% END %?>
diff --git a/skins/stone_flat/next.tmpl b/skins/stone_flat/next.tmpl
new file mode 120000
index 0000000..dc903f9
--- /dev/null
+++ b/skins/stone_flat/next.tmpl
@@ -0,0 +1 @@
+now.tmpl \ No newline at end of file
diff --git a/skins/stone_flat/now.tmpl b/skins/stone_flat/now.tmpl
new file mode 100644
index 0000000..256ad36
--- /dev/null
+++ b/skins/stone_flat/now.tmpl
@@ -0,0 +1,233 @@
+<!-- now -->
+<?% USE date %?>
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% BLOCK dur %?>
+ <?% height=6;IF d >= 0 and d < 100;d = d div 1 %?>
+ <?% IF d >= 1 %?>
+ <img class="progressleft" src="images/blank.gif" width="<?% 100 - d %?>" height="<?% height %?>" alt="<?% 100 - d %?>%" /><img class="progressright" src="images/blank.gif" width="<?% d %?>" height="<?% height %?>" alt="" />
+ <?% ELSE %?>
+ <img class="progress" src="images/blank.gif" width="100" height="<?% height %?>" alt="" />
+ <?% END %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+ <a href="?cmd=search&amp;data=<?% ( title ) %?>">
+ <img src="images/find.<?% global.imagetyp %?>" alt="" title="<?% gettext("Search for repeats") %?>" />
+ </a>
+ <?% IF param.timers.${id} && allow('tedit') %?>
+ <a href="javascript:popup('tedit','<?% param.timers.${id}.Id %?>',620,670,1)">
+ <img src="images/onoff.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit this Timer") %?>" />
+ </a>
+ <?% ELSIF allow('tnew') %?>
+ <a href="javascript:popup('tnew','<?% id %?>',620,670,1)">
+ <img src="images/record.<?% global.imagetyp %?>" alt="" title="<?% gettext("To record") %?>" />
+ </a>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK SetState %?>
+ <?% state = '' %?>
+ <?% IF param.runningTimer.exists(id) %?>
+ <?% state = "running" %?>
+ <?% ELSIF param.timers.exists(id) %?>
+ <?% UNLESS param.timers.${id}.Status %?>
+ <?% state = "deactive" %?>
+ <?% ELSE %?>
+ <?% state = "active" %?>
+ <?% END %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <?% PROCESS SetState %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <?% IF allow('switch') %?>
+ <a href="javascript:post('switch','<?% channel %?>')">
+ <img class="push" src="images/watch.<?% global.imagetyp %?>" alt="" title="<?% gettext("Switch") %?>" />
+ </a>
+ <?% END %?>
+ <a href="?cmd=program&amp;data=<?% channel %?>" title="<?% gettext("Program guide for") %?>&nbsp;<?% sender %?>">
+ <font class="channel<?% IF state != "";" ";state;END %?>"><?% channel %?>.&nbsp;<?% chop(sender,20) %?></font></a>
+ </td>
+ <td class="fieldinline">
+ <a href="javascript:popup('display','<?% id %?>',620,670,0)" class="fieldinline">
+ <font class="title<?% IF state != "";" ";state;END %?>"><?% chop(title,45) %?></font>
+ <?% IF subtitle.length > 0 %?><font class="subtitle<?% IF state != "";" ";state;END %?>">&nbsp;-&nbsp;<?% chop(subtitle,55) %?></font><?% END %?>
+ </a>
+ </td>
+ <td class="fieldinline<?% IF state != "";" ";state;END %?>" style="text-align:right">
+ <?% IF vps && vps != start %?> (<?% gettext("VPS") %?>:<?% vps %?>) <?% END %?>
+ <?% start %?>&nbsp;-&nbsp;<?% stop %?>
+ </td>
+ <td class="fieldinline" style="white-space: nowrap"><?% PROCESS dur d=duration %?></td>
+ <td class="fieldinline push">
+ <?% INCLUDE widgets/tooltip.inc cmd="display" eventid=id linkid=id ttp_offset=-300 %?>
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+ <?% IF global.hideDescription != 1 && description.length > 0 %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <td class="fieldinline" >&nbsp;</td>
+ <td class="fieldinline" colspan="5">
+ <a href="javascript:popup('display','<?% id %?>',620,670,0)" class="fieldinline">
+ <font class="description<?% IF state != "";" ";state;END %?>"><?% chop(description,100,1) %?></font>
+ </a>
+ </td>
+ </tr>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?%
+ IF cgi.param('data') && cgi.param('data') > 100;
+ day = date.format(cgi.param('data'), '%A, %H:%M', locale);
+ time = date.format(cgi.param('data'), '%H:%M', locale);
+ ELSIF cgi.param('data') && param.zeit;
+ time = day = date.format(param.zeit, '%H:%M', locale);
+ ELSE;
+ day = date.format(date.now, '%H:%M', locale);
+ now = 1;
+ END;
+%?>
+<?% ######################################################################## %?>
+<h1><?% IF cgi.param('cmd') == 'next' %?>
+ <?% gettext("What is running at next") %?>
+ <?% ELSIF now %?>
+ <?% gettext("What is running now") %?>
+ <?% ELSE %?>
+ <?% gettext("What is running at") %?>&nbsp;<?% day %?>
+ <?% END %?>
+</h1>
+<?% IF data.size > 1%?>
+<?% fields = data.shift %?>
+ <table class="largetable" summary="">
+ <tr>
+ <td class="largehead">
+ <?% IF cgi.param('cmd') == 'next' %?>
+ <?% gettext("Next") %?>
+ <?% ELSIF now %?>
+ <?% gettext("Running now") %?>
+ <?% ELSE %?>
+ <?% day %?>
+ <?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <tr><th width="150"></th><th></th><th width="140"></th><th width="110"></th><th width="40"></th></tr>
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% id=zeile.0;title=zeile.1;subtitle=zeile.2;sender=zeile.3;channel=zeile.4;group=zeile.5;start=zeile.6;stop=zeile.7;description=zeile.8;duration=zeile.9;vps=zeile.10 %?>
+ <?% IF old.defined && group != old %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+ <table class="largetable" summary="">
+ <tr><td class="largehead"><?% group %?></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <tr><th width="150"></th><th></th><th width="75"></th><th width="110"></th><th width="40" align="right"></th></tr>
+ <?% END %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% old = group %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("What is running at",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form action="">
+ <select name="cgroups" onchange="di('?cmd=<?% cgi.param('cmd') %?>&amp;data=<?% cgi.param('data') %?>&amp;__cgrp=',this.form.cgroups.options[this.form.cgroups.options.selectedIndex].value)">
+ <?% FOREACH cgrp = param.cgroups %?>
+ <option value="<?% cgrp.last %?>"<?% ' selected="selected"' IF param.channelgroup == cgrp.last %?>><?% cgrp.first %?></option>
+ <?% END %?>
+ </select>
+ </form>
+
+ <a href="?cmd=now&amp;__cgrp=<?% cgi.param('__cgrp') %?>"><img src="images/forward.<?% global.imagetyp %?>" alt="" title="<?% gettext("Running now") %?>" /></a>&nbsp;
+ <a href="?cmd=now&amp;__cgrp=<?% cgi.param('__cgrp') %?>"><?% gettext("Running now",20) %?></a><br />
+ <a href="?cmd=next&amp;__cgrp=<?% cgi.param('__cgrp') %?>"><img src="images/forward.<?% global.imagetyp %?>" alt="" title="<?% gettext("Next") %?>" /></a>&nbsp;
+ <a href="?cmd=next&amp;__cgrp=<?% cgi.param('__cgrp') %?>"><?% gettext("Next",20) %?></a><br />
+ <a href="?cmd=sch<?% IF param.zeit && cgi.param('cmd') != 'next' && now != 1;"&amp;data=";param.zeit;END;%?>&amp;__cgrp=<?% cgi.param('__cgrp') %?>">
+ <img alt="" src="images/forward.<?% global.imagetyp %?>" title="<?% gettext("Schema") %?>" /></a>&nbsp;
+ <a href="?cmd=sch<?% IF param.zeit && cgi.param('cmd') != 'next' && now != 1;"&amp;data=";param.zeit;END;%?>&amp;__cgrp=<?% cgi.param('__cgrp') %?>">
+ <?% gettext("Schema",20) %?><?% IF param.zeit && cgi.param('cmd') != 'next' && now != 1;" ";day;END;%?></a><br /><br />
+ <form method="post" action="?cmd=now">
+ <input type="text" name="data" value="<?% IF time.defined %?><?% time %?><?% ELSE %?>20:15<?% END %?>" size="18" />
+ <input type="hidden" name="__cgrp" value="<?% cgi.param('__cgrp') %?>" />
+ </form>
+ <form action="">
+ <select size="5" name='data' onchange="di('?cmd=now&amp;__cgrp=<?% cgi.param('__cgrp') %?>&amp;data=',this.form.data.options[this.form.data.options.selectedIndex].value)">
+ <?% today = [] %?>
+ <?% tomor = [] %?>
+ <?% FOREACH zeit = param.periods.split(','); %?>
+ <?% tom = 0 %?>
+ <?% PERL %?>
+ use Date::Manip;
+ my $z;
+ $z = UnixDate(ParseDate($stash->{zeit}),"%s") || 0;
+ if($z and $z < time) {
+ $z += 86400;
+ $stash->set('tom', 1);
+ }
+ $stash->set('z', $z);
+ <?% END %?>
+ <?% NEXT UNLESS z;
+ IF tom;
+ tomor.push(z);
+ ELSE;
+ today.push(z);
+ END %?>
+ <?% END %?>
+ <?% FOREACH z = today %?><option value="<?% z %?>"><?% date.format(z, "%H:%M", locale) %?></option><?% END %?>
+ <?% FOREACH z = tomor %?><option value="<?% z %?>"><?% date.format(z, "%H:%M (%a)", locale) %?></option><?% END %?>
+ </select>
+ </form>
+ </td>
+ </tr>
+<?% IF allow('erestart') %?>
+ <tr>
+ <td class="sidetext">
+ <a title="<?% gettext("Reload EPG data") %?>" href="javascript:popupcmd('erestart',620,670,1)"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Reload EPG data") %?>" href="javascript:popupcmd('erestart',620,670,1)"><?% gettext("Reload EPG data",20) %?></a>
+ </td>
+ </tr>
+<?% END %?>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form method="post" action="?cmd=search" name="searchform">
+ <input type="text" id="epgtext" name="data" alt="<?% gettext("Search") %?>"
+ onkeyup="suggest('esuggest','epgtext','epgsuggest');"
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="epgsuggest"></div>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/print.css b/skins/stone_flat/print.css
new file mode 100644
index 0000000..b05ec4d
--- /dev/null
+++ b/skins/stone_flat/print.css
@@ -0,0 +1,8 @@
+body.frame {
+margin:0;
+padding:0;
+}
+
+.push,#logo,#logo a img,#header,#headerNav,a.headerNav:active,a.headerNav:link,a.headerNav:visited,a.headerNav:hover,#sidebar,#sidebar input,#sidebar select,#shutter {
+display:none;
+}
diff --git a/skins/stone_flat/program.tmpl b/skins/stone_flat/program.tmpl
new file mode 100644
index 0000000..41e68d6
--- /dev/null
+++ b/skins/stone_flat/program.tmpl
@@ -0,0 +1,225 @@
+<!-- program -->
+<?% USE date %?>
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% BLOCK dur %?>
+ <?% height=6;d = d div 1 ; IF d >= 0 and d <= 100 %?>
+ <?% IF d >= 1 %?>
+ <img class="progressleft" src="images/blank.gif" width="<?% 100 - d %?>" height="<?% height %?>" alt="<?% 100 - d %?>%" /><img class="progressright" src="images/blank.gif" width="<?% d %?>" height="<?% height %?>" alt="" />
+ <?% ELSE %?>
+ <img class="progress" src="images/blank.gif" width="100" height="<?% height %?>" alt="" />
+ <?% END %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+ <a href="?cmd=search&amp;data=<?% url( title ) %?>">
+ <img src="images/find.<?% global.imagetyp %?>" alt="" title="<?% gettext("Search for repeats") %?>" />
+ </a>
+ <?% IF param.timers.${id} && allow('tedit') %?>
+ <a href="javascript:popup('tedit','<?% param.timers.${id}.Id %?>',620,670,1)">
+ <img src="images/onoff.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit this Timer") %?>" />
+ </a>
+ <?% ELSIF allow('tnew') %?>
+ <a href="javascript:popup('tnew','<?% id %?>',620,670,1)">
+ <img src="images/record.<?% global.imagetyp %?>" alt="" title="<?% gettext("To record") %?>" />
+ </a>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK SetState %?>
+ <?% state = '' %?>
+ <?% IF param.runningTimer.exists(id) %?>
+ <?% state = "running" %?>
+ <?% ELSIF param.timers.exists(id) %?>
+ <?% UNLESS param.timers.${id}.Status %?>
+ <?% state = "deactive" %?>
+ <?% ELSE %?>
+ <?% state = "active" %?>
+ <?% END %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <?% PROCESS SetState %?>
+ <tr<?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td class="fieldinline<?% IF state != "";" ";state;END %?>"><?% start %?>&nbsp;-&nbsp;<?% stop %?>
+ <?% IF vps && vps != start %?> (<?% gettext("VPS") %?>:<?% vps %?>) <?% END %?>
+ </td>
+ <td class="fieldinline">
+ <a id="E<?% id %?>" href="javascript:popup('display','<?% id %?>',620,670,0)" class="fieldinline">
+ <font class="title<?% IF state != "";" ";state;END %?>"><?% chop(title,45) %?></font>
+ <?% IF subtitle.length > 0 %?><font class="subtitle<?% IF state != "";" ";state;END %?>">&nbsp;-&nbsp;<?% chop(subtitle,55) %?></font><?% END %?>
+ </a>
+ </td>
+ <td class="fieldinline push">
+ <?% INCLUDE widgets/tooltip.inc cmd="display" eventid=id linkid=id ttp_offset=-300 %?>
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+ <?% IF global.hideDescription != 1 && description.length > 0 %?>
+ <tr<?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td class="fieldinline" >&nbsp;</td>
+ <td class="fieldinline" colspan="3">
+ <a href="javascript:popup('display','<?% id %?>',620,670,0)" class="fieldinline">
+ <font class="description<?% IF state != "";" ";state;END %?>"><?% chop(description,100,1) %?></font>
+ </a>
+ </td>
+ </tr>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################################
+ channelpos=0;priorchannel=0;nextchannel=0;priortitle="";nexttitle="";
+ FOREACH ch = param.channels;
+ IF cgi.param('data') == ch.1 || cgi.param('data') == ch.0 || param.current == ch.1;
+ channel = ch.0;
+ channelpos = ch.1;
+ ELSE;
+ IF channelpos==0;
+ priorchannel=ch.1;
+ priortitle=ch.0;
+ END;
+ END;
+ IF channelpos!=0 && channelpos != ch.1 && nextchannel==0;
+ nextchannel=ch.1;
+ nexttitle=ch.0;
+ LAST;
+ END;
+ END;
+%?>
+<h1><?% gettext("Program guide for") %?>&nbsp;<?% channel %?></h1>
+<?% IF data.size > 1 %?>
+<?% fields = data.shift %?>
+ <?% z = 0 %?>
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% id=zeile.0;title=zeile.1;subtitle=zeile.2;start=zeile.3;stop=zeile.4;description=zeile.6;video=zeile.7;audio=zeile.8;vps=zeile.9 %?>
+ <?% day = date.format(zeile.5, "%A, %x", locale) %?>
+ <?% IF !old.defined || day != old %?>
+ <?% IF old.defined %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+</table>
+ <?% END %?>
+<table class="largetable" summary="">
+ <tr><td class="largehead"><?% day %?></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <?% z = 1 %?>
+ <tr><th width="140"></th><th></th><th width="40" align="right"></th></tr>
+ <?% END %?>
+ <?% old = day %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% z = z + 1 %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+</table>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+<?% IF allow('switch') || allow('livestream') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% chop(channel,20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <?% IF allow('switch') %?>
+ <a href="javascript:post('switch','<?% channelpos %?>')"><img src="images/watch.<?% global.imagetyp %?>" alt="" title="<?% gettext("Switch") %?>" /></a>&nbsp;
+ <a href="javascript:post('switch','<?% channelpos %?>')"><?% gettext("Switch") %?></a><br />
+ <?% END %?>
+ <?% IF allow('livestream') %?>
+ <a href="?cmd=livestream&amp;data=<?% channelpos %?>')"><img src="images/play.<?% global.imagetyp %?>" alt="" title="<?% gettext("Livestream") %?>" /></a>&nbsp;
+ <a href="?cmd=livestream&amp;data=<?% channelpos %?>"><?% gettext("Livestream") %?></a>
+ <?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Select",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form action="">
+ <select size="15" name="data" onchange="di('?cmd=program&amp;data=',this.form.data.options[this.form.data.options.selectedIndex].value)">
+ <?% FOREACH ch = param.channels %?>
+ <option value="<?% ch.1 %?>"<?% ' selected="selected"' IF channelpos == ch.1 %?>><?% ch.0 %?></option>
+ <?% END %?>
+ </select>
+ </form>
+ <?% ####################################################################### %?>
+<?% BLOCK ChannelItem %?>
+ <?% IF chpos != 0 %?>
+ <a href="?cmd=program&amp;data=<?% chpos %?>">
+ <img src="images/<?% image %?>.<?% global.imagetyp %?>" alt="" title="<?% label %?>" />
+ </a>
+ &nbsp;
+ <a href="?cmd=program&amp;data=<?% chpos %?>">
+ <?% chop(label,20) %?>
+ </a>
+ <?% ELSE %?>
+ <img src="images/<?% image %?>.<?% global.imagetyp %?>" alt="" title="" />
+ &nbsp;
+ <font class="deactive">
+ <?% gettext("No channel defined!",20) %?>
+ </font>
+ <?% END %?>
+ <br />
+<?% END %?>
+ <?% PROCESS ChannelItem chpos=priorchannel image='home' label=priortitle %?>
+ <?% PROCESS ChannelItem chpos=nextchannel image='down' label=nexttitle %?>
+ <?% ####################################################################### %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% IF allow('cedit') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Channels",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a href="?cmd=clist<?% IF id > 0 %?>#<?% channelpos %?><?% END %?>">
+ <img src="images/edit.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit channels") %?>" />
+ </a>
+ &nbsp;
+ <a href="?cmd=clist<?% IF id > 0 %?>#<?% channelpos %?><?% END %?>">
+ <?% gettext("Edit channels",20) %?>
+ </a>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search on Channel",15) %?> (<?% chop(channel,7) %?>)</td></tr>
+ <tr>
+ <td class="sidetext">
+ <form method="post" action="?cmd=search" name="searchform">
+ <input type="hidden" name="__channel" value="<?% channelpos %?>" />
+ <input type="text" id="epgtext" name="data" alt="<?% gettext("Search") %?>"
+ onkeyup="suggest('esuggest&__channel=<?% channelpos %?>','epgtext','epgsuggest');"
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="epgsuggest"></div>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/quest.js b/skins/stone_flat/quest.js
new file mode 120000
index 0000000..ab693f2
--- /dev/null
+++ b/skins/stone_flat/quest.js
@@ -0,0 +1 @@
+../stone/quest.js \ No newline at end of file
diff --git a/skins/stone_flat/rdisplay.tmpl b/skins/stone_flat/rdisplay.tmpl
new file mode 100644
index 0000000..17abea2
--- /dev/null
+++ b/skins/stone_flat/rdisplay.tmpl
@@ -0,0 +1,244 @@
+<!-- rdisplay -->
+<?%- IF data.Type == 'RADIO';
+ files = "images/audio.${global.imagetyp}";
+ ELSIF param.previews.size <= 0;
+ files = "images/movie.${global.imagetyp}";
+ ELSE;
+ files = param.previews;
+ END;
+-%?>
+
+<?% IF ! global.bodyinc.defined;global.bodyinc = 1 %?>
+<?% IF files.size > 3 %?>
+<script language="javascript" type="text/javascript">
+<!--
+ window.onload = initslide;
+-->
+</script>
+<?% END %?>
+<body class="hilfsframed">
+<div>
+<?% END %?>
+<?% USE date %?>
+<?% title=data.Title;subtitle=data.SubTitle %?>
+<?% ######################################################################## %?>
+<?% BLOCK dur # d in Sekunden %?>
+<?% IF d > 1 %?>
+ <?% Stunden = d div 3600 %?>
+ <?% Minuten = d div 60 mod 60 %?>
+ <?% Sekunden = d mod 60 %?>
+ <br /><?% gettext("Duration") %?>: <?% Stunden div 1 %?>:<?% Minuten | format('%02d') %?>:<?% Sekunden | format('%02d') %?>
+<?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK image %?>
+<?% IF files.size %?>
+ <div id="slideframe">
+ <?% IF files.size > 3 %?>
+ <div id="slideleft"><img src="images/back.<?% global.imagetyp %?>" title="<?% gettext("Back") %?>" alt="" /></div>
+ <div id="slideright"><img src="images/forward.<?% global.imagetyp %?>" title="<?% gettext("Next") %?>" alt="" /></div>
+ <?% END %?>
+ <div id="slidelist" style="left:<?% IF files.size <= 3 %?><?% 280 - (160 * ( files.size / 2 ) ) %?><?% ELSE %?>0<?% END %?>px; width:<?% files.size * 200 %?>px;" >
+ <?% FOREACH f = files %?>
+ <img class="recorddetails" src="<?% f %?>" alt="" />
+ <?% END %?>
+ <div id="slideend"></div>
+ </div>
+ </div>
+<?% END %?>
+<?% END %?>
+
+<?% quest=data.Title;IF data.SubTitle.length > 0;quest=data.SubTitle;END %?>
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+<div align="right">
+ <a target="_blank" href="http://german.imdb.com/find?s=tt&amp;site=aka&amp;q=<?% quest %?>">
+ <img src="images/imdb.<?% global.imagetyp %?>" title="<?% gettext("Search with IMDb") %?>" alt="IMDb" />
+ </a>
+ <a target="_blank" href="http://www.ofdb.de/view.php?page=suchergebnis&Kat=Titel&SText=<?% quest %?>">
+ <img src="images/ofdb.<?% global.imagetyp %?>" title="<?% gettext("Search with OFDb") %?>" alt="OFDb" />
+ </a>
+ <?% IF global.playbackmode == 0 %?>
+ <?% IF allow('stream') %?>
+ <a href="?cmd=stream&amp;data=<?% id %?>">
+ <img src="images/play.<?% global.imagetyp %?>" alt="" title="<?% gettext("Watch recording") %?>" />
+ </a>
+ <?% END %?>
+ <?% ELSIF global.playbackmode == 1 %?>
+ <?% IF allow('playrecord') %?>
+ <a href="?cmd=playrecord&amp;data=<?% id %?>">
+ <img src="images/play.<?% global.imagetyp %?>" alt="" title="<?% gettext("Watch recording") %?>" />
+ </a>
+ <?% END %?>
+ <?% ELSIF global.playbackmode == 2 %?>
+ <?% IF allow('rplay') %?>
+ <a href="?cmd=rplay&amp;data=<?% id %?>">
+ <img src="images/play.<?% global.imagetyp %?>" alt="" title="<?% gettext("Watch recording") %?>" />
+ </a>
+ <?% END %?>
+ <?% END %?>
+ <?% IF allow('rcut') %?>
+ <a href="?cmd=rcut&amp;data=<?% id %?>">
+ <img src="images/cut.<?% global.imagetyp %?>" alt="" title="<?% gettext("Cut recording") %?>" />
+ </a>
+ <?% END %?>
+ <?% IF allow('redit') %?>
+ <a href="?cmd=redit&amp;data=<?% id %?>">
+ <img src="images/edit.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit recording") %?>" />
+ </a>
+ <?% END %?>
+ <?% IF allow('rdelete') %?>
+ <a href="javascript:sure('<?% gettext("You will delete this recording") %?> : \'<?% escape(title) %?>\' ?','?cmd=rdelete&amp;data=<?% id %?>')">
+ <img src="images/delete.<?% global.imagetyp %?>" alt="" title="<?% gettext("Delete recording") %?>" />
+ </a>
+ <?% END %?>
+</div>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK marks # (c) xpix %?>
+ <?% width = 450 #data.Duration > 7200 ? 600 : 500 %?>
+ <table width="<?% width %?>" align="center" summary="">
+ <tr>
+ <?%- c = 0;
+ colspan = 0;
+ IF data.Duration>(45*60);
+ abstand = (15 * 60);
+ ELSIF data.Duration>(30*60);
+ abstand = (5 * 60);
+ ELSE; #data.Duration>(10*60);
+ abstand = (((data.Duration * 10 ) div 10 ) div 5);
+ END;
+ IF abstand <= 1; abstand = 1; END;
+ range = ( data.Duration div abstand ) * abstand ;
+ IF range < abstand ; abstand = ( ( range div 60 ) + 1) * 60 ; END;
+ WHILE c < range;
+ c = c + abstand;
+ percent = ( data.Duration / abstand ) * width;
+ colspan = colspan + 1;
+ Stunden = c div 3600;
+ Minuten = c div 60 mod 60 -%?>
+ <td width="<?% offset = (c % 3600 ? 1 : 2);(percent - offset) div 1 %?>" align='right'>
+ <font size='1'><?% Stunden | format('%02d') %?>:<?% Minuten | format('%02d') %?></font>
+ </td>
+ <?% END %?>
+ </tr>
+ <tr>
+ <?% c = 0 %?>
+ <?% abstand = abstand / 3 %?>
+ <td colspan="<?% colspan %?>" style="white-space: nowrap">
+ <?%- WHILE c < range -%?><?%- c = c + abstand; percent = (abstand / data.Duration) * width -%?><img src="images/blank.gif" width="<?% offset = (c % 3600 ? 1 : 2);(percent - offset) div 1 %?>" height='10' /><img style="background:<?% c % 900 ? "gray" : "black" %?>" src="images/blank.gif" width="<?% c % 3600 ? "1" : "2" %?>" height='<?% (c % 900 ? "5" : "10") %?>' /><?%- END -%?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="<?% colspan %?>" style="white-space: nowrap">
+ <?%- secold = 0;
+ c = -1;
+ ml = d.split(',');
+ -%?>
+ <?% IF ml.size > 1 %?>
+ <?%-
+ FOREACH marker = ml;
+ b = c;
+ c = c + 1;
+ m = marker.split(':');
+ sec = m.0 * 3600;
+ sec = sec + m.1 * 60;
+ sec = sec + m.2;
+ percent = ((sec-secold) / data.Duration) * width;
+ -%?><?% IF c == 0 %?>
+ <?% class = "marksleft" %?>
+ <?% ELSE %?>
+ <?% class = (class == 'marksright2' ? 'marksright1' : 'marksright2'); %?>
+ <?% END %?><img class="<?% class %?>" src="images/blank.gif" width="<?% ( percent - 1 ) div 1 %?>" height="12" title="<?% (b < 0 ? "0:00:00.00" : ml.$b) %?> - <?% ml.$c %?>" />
+ <?%- secold = sec;
+ END;
+ IF data.Duration > secold;
+ class = (class == 'marksright2' ? 'marksright1' : 'marksright2');
+ percent = ((data.Duration - secold) / data.Duration) * width;
+ -%?><img class="<?% class %?>" src="images/blank.gif" width="<?% ( percent - 1 ) div 1 %?>" height="12" title="<?% (c < 0 ? "0:00:00.00" : ml.$c) %?> - <?% data.Duration div 3600 %?>:<?% data.Duration div 60 mod 60 | format('%02d') %?>:<?% data.Duration mod 60 | format('%02d') %?>" />
+ <?% END %?>
+ <?% ELSE %?>
+ <img class="marksleft" src="images/blank.gif" width="0" height="12" /><img class="marksright2" src="images/blank.gif" width="<?% width %?>" height="12" />
+ <?% END %?>
+ </td>
+ </tr>
+ </table>
+<?% END %?>
+<?% ######################################################################## %?>
+<table class="editortable" summary="">
+ <tr>
+ <td class="editorhead title">
+ <div class="editorhead" style="float:left;">
+ <?% IF data.New %?><img src="images/new.<?% global.imagetyp %?>" alt="" title="<?% gettext("New recording") %?>" /><?% END %?>
+ <font class="title"><?% title %?></font>
+ <?% IF subtitle.length > 0 %?><font class="subtitle">&nbsp;~&nbsp;<?% subtitle %?></font><?% END %?>
+ </div>
+ <?% INCLUDE shutter.inc %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="editortext">
+ <table width="100%" summary="" >
+ <tr>
+ <td valign="top" align="center">
+ <?% PROCESS image %?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table width="100%" summary="" >
+ <tr>
+ <td>
+ <?% date.format(data.StartTime,"%A, %x",locale) %?>&nbsp;
+ &nbsp;&nbsp;&nbsp;<?% date.format(data.StartTime,"%H:%M",locale) %?>&nbsp;-&nbsp;<?% date.format(data.StopTime,"%H:%M",locale) %?>
+ <?% PROCESS dur d=data.Duration %?>
+ <?% IF data.Channel %?>
+ <br /><?% gettext('Channel') %?> : <?% data.Channel %?>
+ <?% END %?>
+ </td>
+ <td class="push">
+ <?% IF allow('rconvert') && param.reccmds.size > 0 %?>
+ <p>
+ <form action="">
+ <select name='data' onchange="di('?cmd=rconvert&amp;data=',this.form.data.options[this.form.data.options.selectedIndex].value)">
+ <option value='0'><?% gettext("Choose an action for this recording") %?>...</option>
+ <?% FOREACH cmd = param.reccmds %?>
+ <option value='<?% loop.count %?>_<?% data.RecordId %?>'><?% cmd.split(':').first %?></option>
+ <?% END %?>
+ </select>
+ </form>
+ </p>
+ <?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <p>
+<?% data.Description %?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <?% PROCESS marks d=data.Marks %?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?% gettext('Lifetime') %?>&nbsp;:&nbsp;<?% data.Lifetime %?>,&nbsp;
+ <?% gettext('Priority') %?>&nbsp;:&nbsp;<?% data.Prio %?>
+ </td>
+ <td class="push">
+ <?% PROCESS RowButtons id=data.RecordId%?>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td class="editorbottom"></td>
+ </tr>
+</table>
diff --git a/skins/stone_flat/report.tmpl b/skins/stone_flat/report.tmpl
new file mode 100644
index 0000000..90d2279
--- /dev/null
+++ b/skins/stone_flat/report.tmpl
@@ -0,0 +1,89 @@
+<!-- report -->
+<body class="frame">
+<div id="body">
+<h1><?% gettext("Protocol of the activities") %?></h1>
+
+<?% FOREACH name = data.keys.sort %?>
+ <h2><?% gettext("Report for Modul");" " %?>
+ <?% name %?></h2>
+ <?% IF name == 'RECORDS';
+ link = '?cmd=rdisplay&data=';
+ ELSIF name == 'AUTOTIMER';
+ link = '?cmd=tedit&data=';
+ END;
+ %?>
+
+ <?% FOREACH typ = data.$name.keys.sort %?>
+ <?% IF typ == 'message' %?>
+ <p><?% data.$name.$typ %?>
+ </p>
+ <?% ELSIF typ == 'table' and data.$name.$typ.size > 1 %?>
+ <?% fields = data.$name.$typ.shift %?>
+ <table class="largetable" summary="">
+ <tr><td class="largehead"></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <!-- <tr>
+ <?% FOREACH field = fields %?>
+ <?% NEXT IF field.match('^__') %?>
+ <th>
+ <nobr><?% field %?>
+ </nobr>
+ </th>
+ <?% END %?>
+ </tr> -->
+ <?% FOREACH zeile = data.$name.$typ %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <?% c = -1 %?>
+ <?% FOREACH field = zeile %?>
+ <?% c = c + 1 %?>
+ <?% NEXT IF fields.$c.match('^__') %?>
+ <td><a href="javascript:popupwindow('<?% link %?><?% zeile.first %?>',620,670,0)"><?% field %?></a></td>
+ <?% END %?>
+ </tr>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+ <?% END %?>
+ <?% END %?>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+<?% IF allow('rp') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Report",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a title="<?% gettext("Report") %?>" href="?cmd=rp"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Report") %?>" href="?cmd=rp"><?% gettext("Report",20) %?></a>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+<?% IF allow('lg') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Log files",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a title="<?% gettext("Standard") %?>" href="?cmd=lg&data=main"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Standard") %?>" href="?cmd=lg&data=main"><?% gettext("Standard",20) %?></a><br />
+ <a title="<?% gettext("Syslog") %?>" href="?cmd=lg&data=syslog"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Syslog") %?>" href="?cmd=lg&data=syslog"><?% gettext("Syslog",20) %?></a><br />
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/rlist.tmpl b/skins/stone_flat/rlist.tmpl
new file mode 100644
index 0000000..740e0a1
--- /dev/null
+++ b/skins/stone_flat/rlist.tmpl
@@ -0,0 +1,338 @@
+<!-- rlist -->
+<body class="frame">
+<?% USE date %?>
+<?% ######################################################################## %?>
+<div id="body">
+<?% ######################################################################## %?>
+<?% enableform = allow('rdelete') && data.size > 1 %?>
+<?% IF cgi.param('cmd')=='rl' || cgi.param('cmd')=='rlist' %?>
+ <?% browse = cgi.param('data') %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% IF param.sortable.defined %?>
+ <?% IF cgi.param('__sortby') %?>
+ <?% sortby = cgi.param('__sortby') %?>
+ <?% sortby = "&amp;__sortby=${sortby}" %?>
+ <?% orderby = cgi.param('__desc') %?>
+ <?% orderby = "${sortby}&amp;__desc=${orderby}" %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK time %?>
+<?% date.format(t,"%x",locale) %?>
+<br />
+<?% date.format(t,"%H:%M",locale) %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK dur # d in Sekunden %?>
+<?% IF d > 1 %?>
+ <?% Stunden = d div 3600 %?>
+ <?% Minuten = d div 60 mod 60 %?>
+ <?% Sekunden = d mod 60 %?>
+ <?% Stunden %?>:<?% Minuten | format('%02d') %?>:<?% Sekunden | format('%02d') %?>
+<?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% total = 0 %?>
+<?% BLOCK printsumme %?>
+<p class="description" style="padding: 0; margin-left: <?% width %?>px;">
+<?% IF total > 0;
+ sec = total mod 60;
+ min = total div 60 mod 60;
+ hour = total div 3600;
+%?>
+<?% gettext("total time") %?> :
+<?% IF hour > 0 %?><?% hour FILTER format('%02d') %?>:<?% END %?><?% min FILTER format('%02d') %?>:<?% sec FILTER format('%02d')%?>
+<?% END %?>
+<?% IF param.free;
+ secf = param.free mod 60;
+ minf = param.free div 60 mod 60;
+ hourf = param.free div 3600;
+%?>
+<br /><?% gettext("available capacity") %?> :
+<?% IF hourf > 0 %?><?% hourf FILTER format('%02d') %?>:<?% END %?><?% minf FILTER format('%02d') %?>:<?% secf FILTER format('%02d')%?>
+<?% END %?>
+</p>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK image %?>
+ <?%- files = param.getPreview(eventid);
+ IF type == 'RADIO';
+ mylist = [ "images/audio", global.imagetyp ];
+ preview = mylist.join('.') ;
+ ELSIF files.size > 0;
+#
+# USE date;
+# img = date.format(date.now, '%S') mod files.size;
+# preview = files.$img;
+#
+ img = (files.size div 2);
+ preview = files.$img;
+ END;
+ IF preview.length <= 0;
+ mylist = [ "images/movie", global.imagetyp ];
+ preview = mylist.join('.') ;
+ END;
+ -%?>
+ <img class="recording" src="<?% preview %?>" alt="" />
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+ <?% IF global.playbackmode == 0 %?>
+ <?% IF allow('stream') %?>
+ <a href="javascript:popup('stream','<?% id %?>',620,670,1)">
+ <img src="images/play.<?% global.imagetyp %?>" alt="" title="<?% gettext("Watch recording") %?>" />
+ </a>
+ <?% END %?>
+ <?% ELSIF global.playbackmode == 1 %?>
+ <?% IF allow('playrecord') %?>
+ <a href="?cmd=playrecord&amp;data=<?% id %?>">
+ <img src="images/play.<?% global.imagetyp %?>" alt="" title="<?% gettext("Watch recording") %?>" />
+ </a>
+ <?% END %?>
+ <?% ELSIF global.playbackmode == 2 %?>
+ <?% IF allow('rplay') %?>
+ <a href="javascript:popup('rplay','<?% id %?>',620,670,1)">
+ <img src="images/play.<?% global.imagetyp %?>" alt="" title="<?% gettext("Watch recording") %?>" />
+ </a>
+ <?% END %?>
+ <?% END %?>
+ <?% IF allow('redit') %?>
+ <a href="javascript:popup('redit','<?% id %?>',620,670,1)">
+ <img src="images/edit.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit recording") %?>" />
+ </a>
+ <?% END %?>
+ <?% IF allow('rdelete') %?>
+ <a href="javascript:surecmd('<?% gettext("You will delete this recording") %?>','<?% escape(fulltitle) %?>','rdelete','<?% id %?>',620,670)">
+ <img src="images/delete.<?% global.imagetyp %?>" alt="" title="<?% gettext("Delete recording") %?>" />
+ </a>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <?% IF folder > 1 %?>
+ <?% IF enableform %?>
+ <input type="checkbox" value="all:<?% id %?>" name="<?% gettext("All recordings with title") %?> : '<?% foldertitle %?>'" />
+ <?% END %?>
+ <?% ELSE %?>
+ <?% IF enableform %?>
+ <input class="push" type="checkbox" value="<?% id %?>" name="<?% fulltitle %?>" />
+ <?% END %?>
+ <?% IF param.previewcommand != 'n' %?>
+ <a href="javascript:popup('rdisplay','<?% id %?>',620,670,0)" class="fieldinline">
+ <?% PROCESS image %?>
+ </a>
+ <?% END %?>
+ <?% END %?>
+ </td>
+ <td class="fieldinline">
+ <?% IF folder <= 1 %?>
+ <a href="javascript:popup('rdisplay','<?% id %?>',620,670,0)" class="fieldinline">
+ <?% IF new %?><img src="images/new.<?% global.imagetyp %?>" alt="" title="<?% gettext("New recording") %?>" />&nbsp;<?% END %?>
+ <font class="title">
+ <?% title %?>
+ </font>
+ <?% ELSE %?>
+ <a href="?cmd=rlist&amp;data=<?% url( fulltitle ) %?><?% orderby %?>" class="fieldinline title">
+ <?% IF new %?>
+ <img src="images/newfolder.<?% global.imagetyp %?>" alt="" title="<?% gettext("New recording") %?>" />
+ <?% ELSE %?>
+ <img src="images/folder.<?% global.imagetyp %?>" alt="" />
+ <?% END %?>
+ <font class="title">
+ <?% foldertitle %?>
+ </font>
+ <?% END %?>
+ <br />
+ <font class="subtitle">
+ <?% IF folder <= 1 %?>
+ <?% subtitle %?>
+ <?% IF global.hideDescription != 1 && description.length > 0 %?><br />
+ </font><font class="description"><?% chop(description,100,5) %?><?% END %?>
+ <?% ELSE %?>
+ <?% folder %?><?% IF new %?>&nbsp;(<?% new %?>)<?% END %?>&nbsp;<?% gettext("more recordings") %?> ...
+ <?% END %?>
+ </font>
+ </a>
+ </td>
+ <td class="fieldinline push">
+ <?% IF folder <= 1 %?>
+ <a href="javascript:popup('rdisplay','<?% id %?>',620,670,0)" class="fieldinline description">
+ <?% PROCESS time t=start %?>
+ <br />
+ <br />
+ <?% PROCESS dur d=duration %?>
+ </a>
+ <br />
+ <?% INCLUDE widgets/tooltip.inc cmd="rdisplay" linkid=id ttp_offset=-300 %?>
+ <?% PROCESS RowButtons %?>
+ <?% END %?>
+ </td>
+ </tr>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% IF cgi.param('data') != "" %?>
+ <?% search = cgi.param('data') %?>
+<?% END %?>
+<h1>
+ <?% gettext("Stored recordings") %?>
+ <?% IF search.defined %?> : "<?% search %?>"<?% END %?>
+ &nbsp;<small>(<?% param.usage %?>)</small>
+</h1>
+<?% IF data.size > 1 %?>
+<?% fields = data.shift %?>
+<form name="rlist" action="">
+ <table class="largetable" summary="">
+ <tr><td class="largehead"><?% IF search.defined %?><?% search %?><?% END %?></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <tr height="0"><th width="<?% IF param.previewcommand != 'n' %?>200<?% ELSE %?>20<?% END %?>"></th><th></th><th width="64"></th></tr>
+ <?%- FOREACH zeile = data;
+ IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END;
+ id=zeile.0;
+ eventid=zeile.1;
+ title=zeile.2.split('&#x7e;').last;
+ IF title == " "; title=zeile.2.split('&#x7e;').last(2).join(" "); END;
+ subtitle=zeile.3;
+ duration=zeile.4;
+ start=zeile.5;
+ new=zeile.6;
+ type=zeile.7;
+ folder=zeile.8;
+ fulltitle=zeile.9;
+ isrecording=zeile.10;
+ description=zeile.11;
+ foldertitle=fulltitle.split('&#x7e;').last;
+ IF foldertitle == " "; foldertitle=fulltitle.split('&#x7e;').last(2).join(" "); END;
+ PROCESS ItemAsFlat;
+ total = total + duration;
+ END; -%?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+<?% PROCESS printsumme width=780 %?>
+</form>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+<?% IF allow('rupdate') || browse != "" %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Recordings",20) %?></td></tr>
+<?% IF browse == "" %?>
+<?% IF allow('rupdate') %?>
+ <tr>
+ <td class="sidetext">
+ <a title="<?% gettext("Update recordings") %?>" href="javascript:popupcmd('rupdate',620,670,1)"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Update recordings") %?>" href="javascript:popupcmd('rupdate',620,670,1)"><?% gettext("Update recordings",20) %?></a>
+ </td>
+ </tr>
+<?% END %?>
+<?% ELSE %?>
+ <tr>
+ <td class="sidetext">
+ <?% directorys = browse.split('~') %?>
+ <?% IF directorys.size <= 1 %?>
+ <a title="<?% gettext("Back") %?>" href="?cmd=rlist<?% orderby %?>"><img src="images/folder.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Back") %?>" href="?cmd=rlist<?% orderby %?>"><?% gettext("Back",20) %?></a>
+ <?% ELSE %?>
+ <?% t = directorys.pop %?>
+ <?% directory = directorys.join('~') %?>
+ <a title="<?% gettext("Back") %?>" href="?cmd=rlist&amp;data=<?% url( directory ) %?><?% orderby %?>"><img src="images/folder.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Back") %?>" href="?cmd=rlist&amp;data=<?% url( directory ) %?><?% orderby %?>"><?% gettext("Back",20) %?></a>
+ <?% END %?>
+ </td>
+ </tr>
+<?% END %?>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+<?% IF param.sortable.defined %?>
+ <?% cmd = cgi.param('cmd') %?>
+ <?% IF cgi.param('data') %?>
+ <?% daten = url( cgi.param('data') ) %?>
+ <?% daten = "&amp;data=${daten}" %?>
+ <?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Sorting",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+<?% BLOCK SortItem %?>
+ <ul>
+ <li><a href="?cmd=<?% cmd %?><?% daten %?>&amp;__sortby=<?% row %?>&amp;__desc=0" ><img src="images/home.<?% global.imagetyp %?>" alt="" /></a></li>
+ <li class="label">
+ <?% "<strong>" IF cgi.param('__sortby') == row %?>
+ <a href="?cmd=<?% cmd %?><?% daten %?>&amp;__sortby=<?% row %?>&amp;__desc=<?% IF cgi.param('__sortby') == row && cgi.param('__desc') == 0 %?>1<?% ELSE %?>0<?% END %?>" >
+ <?% label %?>
+ </a>
+ <?% "</strong>" IF cgi.param('__sortby') == row %?>
+ </li>
+ <li><a href="?cmd=<?% cmd %?><?% daten %?>&amp;__sortby=<?% row %?>&amp;__desc=1" ><img src="images/down.<?% global.imagetyp %?>" alt="" /></a></li>
+ </ul>
+<?% END %?>
+ <?% PROCESS SortItem row=fields.0 label=gettext('Index',20) %?>
+ <?% PROCESS SortItem row=fields.2 label=gettext('Title',20) %?>
+ <?% PROCESS SortItem row=fields.3 label=gettext('Subtitle',20) %?>
+ <?% PROCESS SortItem row=fields.5 label=gettext('Start',20) %?>
+ <?% PROCESS SortItem row=fields.4 label=gettext('Duration',20) %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+<?% IF enableform %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Select",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a href="javascript:selAll(document.rlist,1)"><img src="images/select.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:selAll(document.rlist,1)"><?% gettext("Select all",20) %?></a><br />
+ <a href="javascript:selAll(document.rlist,0)"><img src="images/deselect.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:selAll(document.rlist,0)"><?% gettext("Unselect all",20) %?></a><br />
+ <a href="javascript:reverse(document.rlist)"><img src="images/invers.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:reverse(document.rlist)"><?% gettext("Reverse select",20) %?></a>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidetext">
+<?% IF allow('rdelete') %?>
+ <a href="javascript:DeleteSelected('<?% gettext("You would delete follow recordings?") %?>','<?% gettext("You have nothing selected!") %?>','rdelete',document.rlist,620,670)"><img src="images/delete.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:DeleteSelected('<?% gettext("You would delete follow recordings?") %?>','<?% gettext("You have nothing selected!") %?>','rdelete',document.rlist,620,670)"><?% gettext("Delete recordings",20) %?></a><br />
+<?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search for recordings",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form name="searchform" action="">
+ <input type="hidden" name="cmd" value="rsearch" />
+ <input type="text" id="rectext" name="data" alt="<?% gettext("Search") %?>"
+ onkeyup="suggest('rsuggest','rectext','recsuggest');"
+ <?% IF search.defined %?>value="<?% search %?>"<?% END %?>
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="recsuggest"></div>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/rsearch.tmpl b/skins/stone_flat/rsearch.tmpl
new file mode 120000
index 0000000..2e6f4df
--- /dev/null
+++ b/skins/stone_flat/rsearch.tmpl
@@ -0,0 +1 @@
+rlist.tmpl \ No newline at end of file
diff --git a/skins/stone_flat/schema.tmpl b/skins/stone_flat/schema.tmpl
new file mode 100644
index 0000000..7502619
--- /dev/null
+++ b/skins/stone_flat/schema.tmpl
@@ -0,0 +1,275 @@
+<!-- schema -->
+<body class="frame">
+<?% ######################################################################## %?>
+<div id="body">
+<?% widthtable = 775 %?>
+<?% widthfirst = 100 %?>
+<?% IF allow('switch') %?>
+ <?% widthfirst = widthfirst + 25 %?>
+<?% END %?>
+<?% width = widthtable - widthfirst %?>
+<?% USE date %?>
+<h1>
+<?% gettext("Schema") %?>
+ : <?% date.format(param.zeitvon, '%A, %H:%M', locale) %?>
+ - <?% date.format(param.zeitbis, '%H:%M', locale) %?>
+</h1>
+<?% ######################################################################## %?>
+<?% Duration = param.zeitbis - param.zeitvon %?>
+<table class="largetable" summary="">
+ <tr><td class="largehead">
+ <?% FOREACH cgrp = param.cgroups %?>
+ <?% IF param.channelgroup == cgrp.last;cgrp.first;LAST;END %?>
+ <?% END %?>
+ </td></tr>
+ <tr>
+ <td class="largetext">
+ <table summary="" width="<?% widthtable %?>">
+ <tr>
+ <td><img alt="" src="images/blank.gif" width="<?% widthfirst %?>" height="1" /></td>
+ <?% c = 0 %?>
+ <?% colspan = 0 %?>
+ <?% abstand = 15 * 60; # 15 Minuten %?>
+ <?%- WHILE c < Duration -%?>
+ <?%-
+ c = c + abstand;
+ percent = (abstand / Duration) * width
+ colspan = colspan + 1;
+ zeit = param.zeitvon + c;
+ -%?>
+ <td width="<?% offset = (c % 3600 ? 1 : 2);(percent - offset) div 1 %?>" align="right">
+ <?% IF c == abstand && zeit > date.now %?>
+ <a href="?cmd=schema&amp;data=<?% (param.zeitvon - Duration) %?>&amp;__cgrp=<?% param.channelgroup %?>">
+ <img alt="" src="images/back.<?% global.imagetyp %?>" title="" />
+ </a>
+ &nbsp;
+ <?% END %?>
+ <?% IF c >= Duration %?>
+ <a href="?cmd=schema&amp;data=<?% (param.zeitvon + Duration) %?>&amp;__cgrp=<?% param.channelgroup %?>">
+ <img alt="" src="images/forward.<?% global.imagetyp %?>" title="" />
+ </a>
+ &nbsp;
+ <?% END %?>
+ <?% date.format(zeit, '%H:%M') %?></td>
+ <?% END %?>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td colspan="<?% colspan %?>" style="white-space: nowrap">
+ <?% c = 0 %?>
+ <?% abstand = abstand div 3 %?>
+ <?%- WHILE c < Duration;
+ c = c + abstand;
+ percent = (abstand / Duration) * width
+ -%?><img alt="" src="images/blank.gif" width="<?%-
+ offset = (c % 3600 ? 1 : 2);
+ (percent - offset) div 1
+ -%?>" height="10" /><img alt=""
+ style="background:<?% c % 900 ? "gray" : "black" %?>"
+ src="images/blank.gif"
+ width="<?% c % 3600 ? "1" : "2" %?>"
+ height="<?% (c % 900 ? "5" : "10") %?>" />
+ <?%- END -%?>
+ <?%- ############################################## -%?>
+ <?%- IF !info.http_useragent.match('.*MSIE.*') && date.now > param.zeitvon && date.now < param.zeitbis -%?>
+ <?% a = date.now - param.zeitvon;
+ p = (a / Duration) * width;
+ %?>
+ <div style="position:absolute;">
+ <div id="timewindow" style="left:0px; width:<?% p div 1 %?>px;">
+ <font size="1">&nbsp;</font>
+ </div>
+ </div>
+ <div style="position:absolute;">
+ <div id="timeline" style="left:<?% p div 1 %?>px;">
+ <img alt="" src="images/blank.gif" width="1" height="<?% data.keys.size * 19 %?>" />
+ </div>
+ </div>
+ <?%- END -%?>
+ <?%- ############################################## -%?>
+ </td>
+ </tr>
+ <?% FOREACH cpos = data.keys.nsort %?>
+ <tr<?% IF (loop.count mod 2) == 0 %?> class="two"<?% END %?>>
+ <td>
+<?% IF allow('switch') %?>
+ <a href="javascript:post('switch','<?% data.$cpos.first.4 %?>')">
+ <img src="images/watch.<?% global.imagetyp %?>" alt="" title="<?% gettext("Switch") %?>" />
+ </a>
+<?% END %?>
+<?% IF allow('program') %?>
+ <a href="?cmd=program&amp;data=<?% data.$cpos.first.4 %?>" title="<?% gettext("Program guide for") %?>&nbsp;<?% data.$cpos.first.3 %?>">
+<?% END %?>
+ <?% chop(data.$cpos.first.3,15) %?>
+<?% IF allow('program') %?>
+ </a>
+<?% END %?>
+ </td>
+ <td colspan="<?% colspan %?>" style="white-space: nowrap;">
+ <?%- ges = 0; oldend = param.zeitvon -%?>
+ <?%- FOREACH event = data.$cpos;
+ id = event.0;
+ title = event.1;
+ subtitle = event.2;
+ sender = event.3;
+ channel = event.4;
+ start = event.5;
+ stop = event.6;
+ percent100 = event.7;
+ description = event.8;
+ second_start = event.9;
+ second_stop = event.10;
+ video = event.11;
+ audio = event.12;
+ image = event.13;
+ IF second_start > oldend;
+ laenge = second_start - oldend;
+ percent = (laenge / Duration) * width;
+ ges = ges + percent; -%?>
+ <img style="float:left" alt="" src="images/blank.gif" width="<?% percent div 1 %?>" height="1" align="left" />
+ <?% END;
+ IF second_start < oldend;
+ dur = second_stop - oldend;
+ ELSE;
+ dur = second_stop - second_start;
+ END;
+ IF dur < 0; dur = 1; END;
+ percent = (dur / Duration) * width;
+ IF (ges + percent) > (width - 20);
+ percent = width - ges - 20;
+ END;
+ ges = ges + percent;
+ trun = ( ( percent / 6 ) - 1 ) div 1;
+ IF dur < 300;
+ trun = 3;
+ END;
+ -%?>
+ <?% IF trun <= 3 %?>
+ <!-- <a border="1" href="javascript:popup('display','<?% id %?>',620,670,0)" title="<?% start %?> - <?% stop %?> - <?% dur %?>"> -->
+ <img style="float:left" alt="" src="images/blank.gif" width="<?% percent div 1 %?>" height="1" align="left" />
+ <!-- </a> -->
+ <?% ELSE %?>
+ <?% PROCESS SetState t=param.timers r=param.runningTimer %?>
+ <table summary="" class="schema" style="width:<?% percent div 1 %?>px">
+ <tr>
+ <td>
+ <a href="javascript:popup('display','<?% id %?>',620,670,0)"
+ onmouseover="ttpreq(this, '<?% escape(title) %?>
+ <?% IF subtitle.length > 0 %?>~<?% escape(subtitle) %?>
+ <?% END %?>',<?% id %?>, -200 );" >
+ <font class="<?% IF state != "";" ";state;END %?>"><?% chop(title,trun) %?></font>
+ </a>
+ </td>
+ </tr>
+ </table>
+ <?% END %?>
+ <?% oldend = second_stop; END %?>
+ </td>
+ </tr>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+</table>
+<?% ######################################################################## %?>
+<?% BLOCK SetState %?>
+ <?% state = '' %?>
+ <?% IF param.runningTimer.exists(id) %?>
+ <?% state = "running" %?>
+ <?% ELSIF param.timers.exists(id) %?>
+ <?% UNLESS param.timers.${id}.Status %?>
+ <?% state = "deactive" %?>
+ <?% ELSE %?>
+ <?% state = "active" %?>
+ <?% END %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Schema",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form action="">
+ <select name="cgroups" onchange="di('?cmd=<?% cgi.param('cmd') %?>&amp;data=<?% param.zeitvon %?>&amp;__cgrp=',this.form.cgroups.options[this.form.cgroups.options.selectedIndex].value)">
+ <?% FOREACH cgrp = param.cgroups %?>
+ <option value="<?% cgrp.last %?>"<?% ' selected="selected"' IF param.channelgroup == cgrp.last %?>><?% cgrp.first %?></option>
+ <?% END %?>
+ </select>
+ </form>
+
+ <a href="?cmd=now&amp;__cgrp=<?% cgi.param('__cgrp') %?>"><img src="images/forward.<?% global.imagetyp %?>" alt="" title="<?% gettext("Running now") %?>" /></a>&nbsp;
+ <a href="?cmd=now&amp;__cgrp=<?% cgi.param('__cgrp') %?>"><?% gettext("Running now",20) %?></a><br />
+ <a href="?cmd=next&amp;__cgrp=<?% cgi.param('__cgrp') %?>"><img src="images/forward.<?% global.imagetyp %?>" alt="" title="<?% gettext("Next") %?>" /></a>&nbsp;
+ <a href="?cmd=next&amp;__cgrp=<?% cgi.param('__cgrp') %?>"><?% gettext("Next",20) %?></a><br />
+ <a href="?cmd=sch<?% IF param.zeit && cgi.param('cmd') != 'next' && now != 1;"&amp;data=";param.zeit;END;%?>&amp;__cgrp=<?% cgi.param('__cgrp') %?>">
+ <img alt="" src="images/forward.<?% global.imagetyp %?>" title="<?% gettext("Schema") %?>" /></a>&nbsp;
+ <a href="?cmd=sch<?% IF param.zeit && cgi.param('cmd') != 'next' && now != 1;"&amp;data=";param.zeit;END;%?>&amp;__cgrp=<?% cgi.param('__cgrp') %?>">
+ <?% gettext("Schema",20) %?><?% IF param.zeit && cgi.param('cmd') != 'next' && now != 1;" ";day;END;%?></a><br /><br />
+ <form method="post" action="?cmd=sch">
+ <input type="text" name="data" value="<?% IF time.defined %?><?% time %?><?% ELSE %?>20:15<?% END %?>" size="18" />
+ <input type="hidden" name="__cgrp" value="<?% cgi.param('__cgrp') %?>" />
+ </form>
+ <form action="">
+ <select size="5" name='data' onchange="di('?cmd=sch&amp;__cgrp=<?% cgi.param('__cgrp') %?>&amp;data=',this.form.data.options[this.form.data.options.selectedIndex].value)">
+ <?% today = [] %?>
+ <?% tomor = [] %?>
+ <?% FOREACH zeit = param.periods.split(','); %?>
+ <?% tom = 0 %?>
+ <?% PERL %?>
+ use Date::Manip;
+ my $z;
+ $z = UnixDate(ParseDate($stash->{zeit}),"%s") || 0;
+ if($z and $z < time) {
+ $z += 86400;
+ $stash->set('tom', 1);
+ }
+ $stash->set('z', $z);
+ <?% END %?>
+ <?% NEXT UNLESS z;
+ IF tom;
+ tomor.push(z);
+ ELSE;
+ today.push(z);
+ END %?>
+ <?% END %?>
+ <?% FOREACH z = today %?><option value="<?% z %?>"><?% date.format(z, "%H:%M", locale) %?></option><?% END %?>
+ <?% FOREACH z = tomor %?><option value="<?% z %?>"><?% date.format(z, "%H:%M (%a), locale") %?></option><?% END %?>
+ </select>
+ </form>
+ </td>
+ </tr>
+<?% IF allow('erestart') %?>
+ <tr>
+ <td class="sidetext">
+ <a title="<?% gettext("Reload EPG data") %?>" href="javascript:popupcmd('erestart',620,670,1)"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a title="<?% gettext("Reload EPG data") %?>" href="javascript:popupcmd('erestart',620,670,1)"><?% gettext("Reload EPG data",20) %?></a>
+ </td>
+ </tr>
+<?% END %?>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form method="post" action="?cmd=search" name="searchform">
+ <input type="text" id="epgtext" name="data" alt="<?% gettext("Search") %?>"
+ onkeyup="suggest('esuggest','epgtext','epgsuggest');"
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="epgsuggest"></div>
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/search.tmpl b/skins/stone_flat/search.tmpl
new file mode 100644
index 0000000..835cdef
--- /dev/null
+++ b/skins/stone_flat/search.tmpl
@@ -0,0 +1,152 @@
+<!-- search -->
+<?% USE date %?>
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+ <a href="?cmd=search&amp;data=<?% url( title ) %?>">
+ <img src="images/find.<?% global.imagetyp %?>" alt="" title="<?% gettext("Search for repeats") %?>" />
+ </a>
+ <?% IF param.timers.${id} && allow('tedit') %?>
+ <a href="javascript:popup('tedit','<?% param.timers.${id}.Id %?>',620,670,1)">
+ <img src="images/onoff.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit this Timer") %?>" />
+ </a>
+ <?% ELSIF allow('tnew') %?>
+ <a href="javascript:popup('tnew','<?% id %?>',620,670,1)">
+ <img src="images/record.<?% global.imagetyp %?>" alt="" title="<?% gettext("To record") %?>" />
+ </a>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK SetState %?>
+ <?% state = '' %?>
+ <?% IF param.runningTimer.exists(id) %?>
+ <?% state = "running" %?>
+ <?% ELSIF param.timers.exists(id) %?>
+ <?% UNLESS param.timers.${id}.Status %?>
+ <?% state = "deactive" %?>
+ <?% ELSE %?>
+ <?% state = "active" %?>
+ <?% END %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <?% PROCESS SetState %?>
+ <tr<?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <a class="fieldinline" style="vertical-align:bottom;" href="?cmd=program&amp;data=<?% channel %?><?% IF id > 0 %?>#E<?% id %?><?% END %?>" title="<?% gettext("Program guide for") %?>&nbsp;<?% sender %?>">
+ <font class="channel<?% IF state != "";" ";state;END %?>"><?% channel %?>.&nbsp;<?% chop(sender,20) %?></font>
+ </a>
+ </td>
+ <td class="fieldinline">
+ <a href="javascript:popup('display','<?% id %?>',620,670,0)" class="fieldinline">
+ <font class="title<?% IF state != "";" ";state;END %?>"><?% chop(title,45) %?></font>
+ <?% IF subtitle.length > 0 %?><font class="subtitle<?% IF state != "";" ";state;END %?>">&nbsp;-&nbsp;<?% chop(subtitle,55) %?></font><?% END %?>
+ </a>
+ </td>
+ <td class="fieldinline<?% IF state != "";" ";state;END %?>" style="white-space: nowrap; text-align: right;">
+ <?% IF vps && vps != start %?> (<?% gettext("VPS") %?>:<?% vps %?>) <?% END %?>
+ <?% start %?>&nbsp;-&nbsp;<?% stop %?>
+ </td>
+ <td class="fieldinline push">
+ <?% INCLUDE widgets/tooltip.inc cmd="display" eventid=id linkid=id ttp_offset=-300 %?>
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+ <?% IF global.hideDescription != 1 && description.length > 0 %?>
+ <tr<?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td class="fieldinline" >&nbsp;</td>
+ <td class="fieldinline" colspan="4">
+ <a href="javascript:popup('display','<?% id %?>',620,670,0)" class="fieldinline">
+ <font class="description<?% IF state != "";" ";state;END %?>"><?% chop(description,100,1) %?></font>
+ </a>
+ </td>
+ </tr>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<h1><?% gettext("Search text") %?> : <?% cgi.param('data') %?></h1>
+<?% IF data.size > 1 %?>
+<?% fields = data.shift %?>
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% id=zeile.0;title=zeile.1;subtitle=zeile.2;sender=zeile.3;channel=zeile.4;start=zeile.5;stop=zeile.6;description=zeile.8;vps=zeile.9 %?>
+ <?% day = date.format(zeile.7, "%A, %x", locale) %?>
+ <?% IF !old.defined || day != old %?>
+ <?% IF old.defined %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+</table>
+ <?% END %?>
+<table class="largetable" summary="">
+ <tr><td class="largehead"><?% day %?></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <?% z = 1 %?>
+ <tr height="0"><th width="120"></th><th></th><th width="60"></th><th width="40" align="right"></th></tr>
+ <?% END %?>
+ <?% old = day %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% z = z + 1 %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+</table>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search text",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form action="" name="searchform" >
+ <input type='hidden' name='cmd' value='search' />
+ <input type="text" id="epgtext" name="data" alt="<?% gettext("Search") %?>"
+ onkeyup="suggest('esuggest&__channel=' + escape(this.form.__channel[this.form.__channel.options.selectedIndex].value),'epgtext','epgsuggest');"
+ value="<?% cgi.param('data') %?>"
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="epgsuggest"></div>
+ <br />
+ <?% gettext('Search in fields',30) %?><br />
+ <input style="width:auto;" type="radio" name="__Where" value="all" <?% IF ! cgi.param('__Where') || cgi.param('__Where') == 'all' %?>checked<?% END %?> /><?% gettext('All') %?><br />
+ <input style="width:auto;" type="radio" name="__Where" value="title" <?% IF cgi.param('__Where') == 'title' %?>checked<?% END %?> /><?% gettext('Only in title') %?><br />
+ <input style="width:auto;" type="radio" name="__Where" value="titlesubtitle" <?% IF cgi.param('__Where') == 'titlesubtitle' %?>checked<?% END %?> /><?% gettext('Only in title and subtitle') %?><br />
+ <br />
+ <?% gettext('Video format',30) %?><br />
+ <input style="width:auto;" type="radio" name="__VideoFormat" value="all" <?% IF ! cgi.param('__VideoFormat') || cgi.param('__VideoFormat') == 'all' %?>checked<?% END %?> /><?% gettext('All') %?><br />
+ <input style="width:auto;" type="radio" name="__VideoFormat" value="widescreen" <?% IF cgi.param('__VideoFormat') == 'widescreen' %?>checked<?% END %?> /><?% gettext('16:9 Wide-screen') %?><br />
+ <br />
+ <?% gettext('Audio format',30) %?><br />
+ <input style="width:auto;" type="radio" name="__AudioFormat" value="all" <?% IF ! cgi.param('__AudioFormat') || cgi.param('__AudioFormat') == 'all' %?>checked<?% END %?> /><?% gettext('All') %?><br />
+ <input style="width:auto;" type="radio" name="__AudioFormat" value="dts" <?% IF cgi.param('__AudioFormat') == 'dts' %?>checked<?% END %?> /><?% gettext('Dolby Digital') %?><br />
+ <input style="width:auto;" type="radio" name="__AudioFormat" value="stereo" <?% IF cgi.param('__AudioFormat') == 'stereo' %?>checked<?% END %?> /><?% gettext('Stereo') %?><br />
+ <br />
+ <?% gettext('Minimum length (in minutes)',30) %?><br />
+ <input type="text" name="__MinLength" value="<?% cgi.param('__MinLength') %?>" />
+ <br /><br />
+ <?% gettext('Channel',30) %?><br />
+ <select name='__channel'>
+ <option value="0"><?% gettext('All channels') %?></option>
+ <?% FOREACH chan = getModule('CHANNELS').ChannelArray('Name') %?>
+ <option value="<?% chan.last %?>" <?% IF cgi.param('__channel') == chan.last %?>selected<?% END %?>><?% chan.first %?></option>
+ <?% END %?>
+ </select>
+ <br /><br />
+ <input type='submit' value='<?% gettext('Search') %?>' />
+ </form>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/shutter.inc b/skins/stone_flat/shutter.inc
new file mode 100644
index 0000000..e8af4ec
--- /dev/null
+++ b/skins/stone_flat/shutter.inc
@@ -0,0 +1,7 @@
+<?% IF global.bodyinc.defined && global.bodyinc == 1 && ! global.shutter.defined; global.shutter = 1 %?>
+ <div id="shutter">
+ <a accesskey="x" href="javascript:closeit()">
+ <img align="right" src="images/close.gif" alt="" />
+ </a>
+ </div>
+<?% END %?>
diff --git a/skins/stone_flat/skin.cfg b/skins/stone_flat/skin.cfg
new file mode 100644
index 0000000..d6bf351
--- /dev/null
+++ b/skins/stone_flat/skin.cfg
@@ -0,0 +1,9 @@
+<?% ######################################################################## %?>
+<?% # 0 = Show/1 = Hide Description on program,now,search %?>
+<?% SET global.hideDescription = 0 %?>
+<?% ######################################################################## %?>
+<?% # 0 = Stream recording with ffmpeg %?>
+<?% # 1 = Stream recording with Samba/NFS %?>
+<?% # 2 = Start playback with SVDRP %?>
+<?% SET global.playbackmode = 2 %?>
+
diff --git a/skins/stone_flat/skin.cfg.default b/skins/stone_flat/skin.cfg.default
new file mode 100644
index 0000000..32e24b9
--- /dev/null
+++ b/skins/stone_flat/skin.cfg.default
@@ -0,0 +1,9 @@
+<?% ######################################################################## %?>
+<?% # 0 = Show/1 = Hide Description on program,now,search %?>
+<?% SET global.hideDescription = 0 %?>
+<?% ######################################################################## %?>
+<?% # 0 = Stream recording with ffmpeg %?>
+<?% # 1 = Stream recording with Samba/NFS %?>
+<?% # 2 = Start playback with SVDRP %?>
+<?% SET global.playbackmode = 1 %?>
+
diff --git a/skins/stone_flat/status.inc b/skins/stone_flat/status.inc
new file mode 100644
index 0000000..68ea8ee
--- /dev/null
+++ b/skins/stone_flat/status.inc
@@ -0,0 +1,21 @@
+<!-- ###### status ###### -->
+<?% IF ! global.statusinc.defined;global.statusinc = 1 %?>
+</div>
+
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Status",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <?% IF allow( 'sv' ) %?><a href="?cmd=sv"><?% gettext("Vitals",20) %?></a><br /><?% END %?>
+ <?% IF allow( 'sf' ) %?><a href="?cmd=sf"><?% gettext("Filesystems",20) %?></a><br /><?% END %?>
+ <?% IF allow( 'sm' ) %?><a href="?cmd=sm"><?% gettext("Memory",20) %?></a><br /><?% END %?>
+ <?% IF allow( 'sn' ) %?><a href="?cmd=sn"><?% gettext("Network",20) %?></a><br /><?% END %?>
+ <?% IF allow( 'sa' ) %?><!--<a href="?cmd=sa">Alle Informationen</a><br />--><?% END %?>
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% END %?>
diff --git a/skins/stone_flat/style.css b/skins/stone_flat/style.css
new file mode 100644
index 0000000..e9d955c
--- /dev/null
+++ b/skins/stone_flat/style.css
@@ -0,0 +1,721 @@
+body {
+background-color:#f2f2f2;
+font-family:Tahoma, Arial, Helvetica, sans-serif;
+color:#000;
+margin:0;
+padding:0;
+}
+
+body.frame {
+background-color:#f2f2f2;
+font-family:Tahoma, Arial, Helvetica, sans-serif;
+color:#000;
+margin:90px 0 0;
+padding:0 0 0 165px;
+}
+
+input,select,textarea {
+font-family:Tahoma, Arial, Helvetica, sans-serif;
+color:#000;
+background-color:#e2e2e2;
+font-size:12px;
+}
+
+#body {
+padding:0;
+}
+
+h1,h2 {
+color:#000;
+border-bottom-color:#000;
+font-weight:700;
+border-bottom-style:solid;
+border-bottom-width:1px;
+}
+
+h1 {
+font-size:16px;
+margin-bottom:15px;
+}
+
+h2 {
+font-size:14px;
+margin-bottom:10px;
+}
+
+table.schema {
+float:left;
+border:1px solid #404040;
+border-right:0;
+margin-bottom:1px;
+}
+
+#timewindow {
+position:relative;
+top:0;
+height:3px;
+z-index:2;
+border:thin solid gray;
+background-color:gray;
+text-align:right;
+}
+
+#timeline {
+position:relative;
+top:0;
+width:1px;
+height:100%;
+border-left:1px dashed gray;
+z-index:2;
+margin:0;
+}
+
+img {
+vertical-align:middle;
+border:0;
+border-style:none;
+margin:0;
+padding:0;
+}
+
+img.recording,img.recorddetails {
+width:160px;
+}
+
+div.recording {
+height:120px;
+vertical-align:middle;
+text-align:center;
+}
+
+img.epgimages {
+width:160px;
+float:left;
+margin-top:5px;
+margin-right:10px;
+margin-bottom:5px;
+}
+
+img.cover {
+width:100px;
+}
+
+img.media {
+width:130px;
+}
+
+div.media {
+height:180px;
+vertical-align:middle;
+text-align:center;
+overflow:hidden;
+}
+
+img.medialist {
+width:60px;
+}
+
+div.medialist {
+height:80px;
+vertical-align:middle;
+text-align:center;
+overflow:hidden;
+}
+
+
+img.actor {
+height:90px;
+}
+
+div.actor {
+width:130px;
+vertical-align:middle;
+text-align:center;
+}
+a img {
+border:0;
+}
+
+td.push {
+vertical-align:middle;
+text-align:right;
+white-space:nowrap;
+}
+
+tr.two {
+background-color:#d2d2d2;
+}
+
+.left {
+text-align:left;
+}
+
+.middle {
+text-align:center;
+}
+
+.right {
+text-align:right;
+}
+
+.title {
+font-size:11px;
+font-weight:700;
+}
+
+a:active {
+color:#00F;
+text-decoration:none;
+}
+
+#logo {
+position:absolute;
+top:10px;
+left:10px;
+border:0;
+z-index:10;
+width:75px;
+height:75px;
+}
+
+#logo a img {
+width:75px;
+height:75px;
+}
+
+#header {
+position:absolute;
+z-index:5;
+top:0;
+left:0;
+right:0;
+width:100%;
+height:48px;
+text-align:right;
+background:url("images/head.jpg") no-repeat;
+background-color:#d2d2d2;
+border-bottom:1px solid #807d74;
+}
+
+#headerNav {
+position:absolute;
+top:54px;
+left:0;
+padding-left:90px;
+padding-right:0;
+text-align:left;
+vertical-align:middle;
+font-size:10px;
+}
+
+#sidebar {
+position:absolute;
+top:126px;
+left:5px;
+width:150px;
+}
+
+#sidebar input {
+width:135px;
+margin:0;
+padding:0;
+}
+
+#sidebar select {
+width:140px;
+margin:0;
+padding:0;
+}
+
+p.vtx {
+font-size:12px;
+font-family:monospace;
+white-space:nowrap;
+}
+
+img.vtx {
+position:absolute;
+z-index:1;
+width:7px;
+height:15px;
+}
+
+a.vtx:link,a.vtx:visited,a.vtx:hover,a.vtx:active {
+text-decoration:none;
+}
+
+a.vtx:link,a.vtx:visited {
+color:#0F0;
+}
+
+a.vtx:hover,a.vtx:active {
+color:#FF0;
+}
+
+img.progressleft {
+background:#d2d2d2;
+border-color:#000;
+border-style:solid none solid solid;
+border-width:1px;
+padding:0;
+}
+
+img.progressright {
+background:#FFF;
+border-color:#000;
+border-style:solid;
+border-width:1px;
+padding:0;
+}
+
+img.progress {
+background:#d2d2d2;
+border-color:#000;
+border-style:solid;
+border-width:1px;
+padding:0;
+}
+
+img.marksleft {
+background:#e2e2e2;
+border-color:#000;
+border-style:solid;
+border-width:1px;
+padding:0;
+}
+
+img.marksright1 {
+background:#e2e2e2;
+border-top-style:solid;
+border-top-width:1px;
+border-bottom-style:solid;
+border-bottom-width:1px;
+border-right-style:solid;
+border-right-width:1px;
+border-color:#000;
+padding:0;
+}
+
+img.marksright2 {
+background:#d2d2d2;
+border-top-style:solid;
+border-top-width:1px;
+border-bottom-style:solid;
+border-bottom-width:1px;
+border-right-style:solid;
+border-right-width:1px;
+border-color:#000;
+padding:0;
+}
+
+td.wait_full {
+background:#d2d2d2;
+width:15px;
+height:15px;
+border-color:#000;
+border-style:solid;
+border-width:1px;
+}
+
+td.wait_clear {
+background:#e2e2e2;
+width:15px;
+height:15px;
+border-style:none;
+border-width:0;
+}
+
+table {
+border-collapse:collapse;
+border-spacing:0;
+border-style:hidden;
+border-width:0;
+margin:0;
+padding:0;
+}
+
+table.fieldtable {
+background:url(images/dark180.gif) repeat-y;
+width:180px;
+}
+
+div.fieldhead {
+white-space:nowrap;
+overflow:hidden;
+width:174px;
+height:18px;
+float:left;
+display:inline;
+}
+
+td.fieldhead {
+vertical-align:middle;
+background:url(images/head180.gif) no-repeat;
+height:20px;
+color:#000;
+font-size:11px;
+font-weight:700;
+padding-left:2px;
+padding-right:2px;
+}
+
+td.fieldtext {
+vertical-align:top;
+background:url(images/dark180.gif) repeat-y;
+color:#000;
+font-size:11px;
+padding:2px;
+}
+
+td.fieldbottom {
+vertical-align:bottom;
+background:url(images/down180.gif) no-repeat;
+height:1px;
+}
+
+table.fieldinline {
+width:100%;
+}
+
+fieldinline {
+color:#000;
+font-size:11px;
+}
+
+#fieldinline input {
+font-family:'Trebuchet MS', Lucida, Verdana, Helvetica, Arial, sans-serif;
+color:#000;
+font-size:8px;
+}
+
+#sidebar table {
+background:url(images/dark150.gif) repeat-y;
+width:150px;
+margin-bottom:5px;
+}
+
+td.sidehead {
+vertical-align:middle;
+background:url(images/head150.gif) no-repeat;
+height:20px;
+color:#000;
+font-size:12px;
+font-weight:700;
+padding-left:4px;
+padding-right:4px;
+overflow:hidden;
+white-space:nowrap;
+}
+
+td.sidetext {
+vertical-align:top;
+background:url(images/dark150.gif) repeat-y;
+color:#000;
+font-size:11px;
+padding:4px;
+}
+
+td.sidebottom {
+vertical-align:bottom;
+background:url(images/down150.gif) no-repeat;
+height:1px;
+}
+
+#sidebar ul {
+ list-style: none;
+ clear:both;
+ margin:0;
+ padding:0;
+}
+
+#sidebar li {
+ float:left;
+}
+
+#sidebar li.label {
+ width:100px;
+ padding-left:5px;
+ padding-right:5px;
+ overflow:hidden;
+ white-space:nowrap;
+}
+
+table.areatable {
+background:url(images/dark400.gif) repeat-y;
+width:400px;
+margin-bottom:5px;
+}
+
+td.areahead {
+vertical-align:middle;
+background:url(images/head400.gif) no-repeat;
+height:20px;
+color:#000;
+font-size:12px;
+font-weight:700;
+padding-left:4px;
+padding-right:4px;
+}
+
+td.areatext {
+vertical-align:top;
+background:url(images/dark400.gif) repeat-y;
+color:#000;
+font-size:11px;
+padding:4px;
+}
+
+td.areabottom {
+vertical-align:bottom;
+background:url(images/down400.gif) no-repeat;
+height:1px;
+}
+
+table.editortable {
+background:url(images/dark600.gif) repeat-y;
+width:600px;
+margin-bottom:5px;
+}
+
+div.editorhead {
+white-space:nowrap;
+overflow:hidden;
+max-width:550px;
+height:18px;
+float:left;
+}
+
+td.editorhead {
+vertical-align:middle;
+background:url(images/head600.gif) no-repeat;
+height:20px;
+color:#000;
+font-size:12px;
+font-weight:700;
+padding-left:4px;
+padding-right:4px;
+}
+
+td.editortext {
+vertical-align:top;
+background:url(images/dark600.gif) repeat-y;
+color:#000;
+font-size:11px;
+padding:4px;
+}
+
+td.editorbottom {
+vertical-align:bottom;
+background:url(images/down600.gif) no-repeat;
+height:1px;
+}
+
+table.largetable {
+background:url(images/dark800.gif) repeat-y;
+width:800px;
+margin-bottom:5px;
+}
+
+td.largehead {
+vertical-align:middle;
+background:url(images/head800.gif) no-repeat;
+height:20px;
+color:#000;
+font-size:12px;
+font-weight:700;
+padding-left:4px;
+padding-right:4px;
+}
+
+td.largetext {
+vertical-align:top;
+background:url(images/dark800.gif) repeat-y;
+color:#000;
+font-size:11px;
+padding:1px;
+}
+
+td.largebottom {
+vertical-align:bottom;
+background:url(images/down800.gif) no-repeat;
+height:1px;
+}
+
+td.rcbutton,td.rcbuttonlarge {
+vertical-align:middle;
+text-align:center;
+background-color:#d2d2d2;
+border-bottom:1px solid #CCC;
+border-right:1px solid #CCC;
+border-top:1px solid #979797;
+border-left:1px solid #979797;
+height:20px;
+padding:0;
+}
+
+td.rcbutton {
+width:32px;
+}
+
+td.rcbuttonlarge {
+width:48px;
+}
+
+a.rcbutton:active,a.rcbutton:link,a.rcbutton:visited {
+text-decoration:none;
+display:block;
+margin:0;
+padding:2px;
+}
+
+a.rcbutton:hover {
+background:#e2e2e2;
+}
+
+#hilfsframe {
+z-index:10;
+position:absolute;
+left:0;
+top:0;
+background-color:transparent;
+}
+
+#shutter {
+z-index:12;
+text-align:right;
+padding-right:25px;
+background-color:transparent;
+}
+
+#hilfsframecontent {
+z-index:10;
+background-color:transparent;
+height:100%;
+}
+
+.hilfsframed {
+background-color:transparent;
+}
+
+.deactive {
+color:#AAA;
+}
+
+.active {
+color:#202060;
+font-weight:700;
+}
+
+.running {
+color:#2020b4;
+font-weight:700;
+}
+
+.problem {
+color:#b03e28;
+}
+
+.error {
+color:red;
+font-weight:700;
+}
+
+.areabegin {
+float:left;
+margin:5px;
+}
+
+.areaclose {
+clear:both;
+}
+
+#TOOLTIP {
+position:absolute;
+width:400px;
+z-index:5;
+visibility:hidden;
+}
+
+.subtitle,td {
+font-size:10px;
+}
+
+.description,.channel {
+font-size:9px;
+}
+
+a,a:visited,a:active,a:link {
+color:#000;
+text-decoration:none;
+}
+
+a:hover {
+color:#9a0a33;
+text-decoration:none;
+}
+
+table.wait,table.rcbutton {
+border-collapse:separate;
+border-spacing:3px;
+}
+
+.suggestlink {
+padding: 2px 6px 2px 6px;
+}
+
+.suggestover {
+background-color: #d2d2d2;
+padding: 2px 6px 2px 6px;
+}
+
+.suggestbox {
+width:135px;
+visibility:hidden;
+position: absolute;
+text-align: left;
+background-color: #e2e2e2;
+border:1px solid #CCC;
+}
+
+#slideframe{
+height:125px;
+position:relative;
+overflow:hidden;
+margin:5px;
+}
+
+#slideleft{
+width:50px;
+height:100%;
+position:absolute;
+left:0px;
+z-index:10;
+padding:1px;
+background:url(images/blank.gif) repeat;
+text-align:left;
+}
+
+#slideright{
+width:50px;
+height:100%;
+position:absolute;
+right:0px;
+z-index:10;
+padding:1px;
+background:url(images/blank.gif) repeat;
+text-align:right;
+}
+
+#slidelist{
+position:absolute;
+height:auto;
+}
+
+#slidelist #slideend{
+float:left;
+}
+
+#slidelist img{
+float:left;
+padding:1px;
+}
diff --git a/skins/stone_flat/tlist.tmpl b/skins/stone_flat/tlist.tmpl
new file mode 100644
index 0000000..17a12de
--- /dev/null
+++ b/skins/stone_flat/tlist.tmpl
@@ -0,0 +1,242 @@
+<!-- tlist -->
+<?% USE date %?>
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% aus = gettext('Off') %?>
+<?% an = gettext('On') %?>
+<?% enableform = ( allow('ttoggle') || allow('tdelete') ) && data.size > 1 %?>
+<?% ######################################################################## %?>
+<?% minuten = 0 %?>
+<?% BLOCK summe %?>
+ <?% IF aktiv == 1; # Errechnen der Differenzen
+ minuten = minuten + (duration div 60);
+ END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK printsumme %?>
+ <?% IF minuten > 0 %?>
+ <p class="description" style="padding: 0; margin-left: <?% width %?>px;"><?% minuten div 60 %?>:<?% minuten mod 60 FILTER format('%02d')%?></p>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+ <a href="?cmd=search&amp;data=<?% url( title.split('&#x7e;').first ) %?>">
+ <img src="images/find.<?% global.imagetyp %?>" alt="" title="<?% gettext("Search for repeats") %?>" />
+ </a>
+ <?% IF allow('tedit') %?>
+ <a href="javascript:popup('tedit','<?% id %?>',620,670,1)">
+ <img src="images/edit.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit this timer") %?>" />
+ </a>
+ <?% END %?>
+ <?% IF allow('tdelete') %?>
+ <a href="javascript:surecmd('<?% gettext("You would delete follow timers?") %?>','<?% escape(title) %?><?% IF subtitle != "";"~";escape(subtitle);END %?>','tdelete','<?% id %?>',620,670)">
+ <img src="images/delete.<?% global.imagetyp %?>" alt="" title="<?% gettext("Delete timer") %?>" />
+ </a>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK SetState %?>
+ <?% state = '' %?>
+ <?% UNLESS aktiv %?>
+ <?% state = "deactive" %?>
+ <?% ELSIF conflict %?>
+ <?% state = "problem" %?>
+ <?% ELSIF param.runningTimer.exists(id) %?>
+ <?% state = "running" %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK StateImage %?>
+ <?% IF aktiv %?>
+ <?% IF param.capacity && param.capacity div 60 <= minuten %?>
+ <img id='toggle<?% id %?>' src="images/warning.<?% global.imagetyp %?>" alt="" title="<?% gettext("Not enough space to record this timer!") %?>" />
+ <?% ELSE %?>
+ <img id='toggle<?% id %?>' src="images/on.<?% global.imagetyp %?>" alt="" title="<?% an %?>" />
+ <?% END %?>
+ <?% ELSE %?>
+ <img id='toggle<?% id %?>' src="images/off.<?% global.imagetyp %?>" alt="" title="<?% aus %?>" />
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <?% PROCESS SetState %?>
+ <tr id="item<?% id %?>" valign="bottom" <?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <?% IF allow('ttoggle') %?>
+ <a href="javascript:toggle('ttoggle','<?% id %?>')">
+ <?% END %?>
+ <?% PROCESS StateImage %?>
+ <?% '</a>' IF allow('ttoggle') %?>
+ </td>
+ <td class="fieldinline">
+ <?% IF allow('program') %?><a class="fieldinline" href="?cmd=program&amp;data=<?% channel %?><?% IF eventid %?>#E<?% eventid %?><?% END %?>" title="<?% gettext("Jump to program guide:") %?><?% sender %?>" style="vertical-align:bottom;"><?% END %?>
+ <font class="channel<?% IF state != "";" ";state;END %?>"><?% channel %?>.</font>&nbsp;<font class="title<?% IF state != "";" ";state;END %?>"><?% sender %?></font>
+ <?% '</a>' IF allow('program') %?>
+ </td>
+ <td class="fieldinline">
+ <?% IF enableform %?>
+ <input class="push" type="checkbox" value="<?% id %?>" name="<?% title %?><?% IF subtitle != "";"~";subtitle;END %?>" />
+ <?% END %?>
+ <font class="description<?% IF state != "";" ";state;END %?>">
+ <?% start %?>-<?% stop %?>
+ <?% "(VPS)" IF vps %?>
+ </font>
+ </td>
+ <td class="fieldinline">
+ <?% IF allow('tedit') %?>
+ <a href="javascript:popup('tedit','<?% id %?>',620,670,1)" class="fieldinline">
+ <?% END %?>
+ <font class="title<?% IF state != "";" ";state;END %?>"><?% title %?></font>
+ <?% IF subtitle.length > 0 %?>
+ <font class="subtitle<?% IF state != "";" ";state;END %?>">&nbsp;-&nbsp;<?% subtitle %?></font>
+ <?% END %?>
+ <?% '</a>' IF allow('tedit') %?>
+ </td>
+ <td class="fieldinline push">
+ <?% INCLUDE widgets/tooltip.inc cmd="display" linkid=eventid ttp_offset=-300 %?>
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+ <?% IF global.hideDescription != 1 && description.length > 0 %?>
+ <tr id="desc<?% id %?>"<?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td class="fieldinline" colspan="2">&nbsp;</td>
+ <td class="fieldinline" colspan="3">
+ <a href="javascript:popup('display','<?% eventid %?>',620,670,0)" class="fieldinline">
+ <font class="description<?% IF state != "";" ";state;END %?>"><?% chop(description,100,1) %?></font>
+ </a>
+ </td>
+ </tr>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<h1><?% gettext("Planned recordings") %?></h1>
+<?% IF data.size > 1 %?>
+<?% fields = data.shift %?>
+<form name="tlist" action="">
+ <?% z = 1 %?>
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?%- id=zeile.0;
+ aktiv= ( zeile.1 ? zeile.1 mod 2 : 0 );
+ sender=zeile.2;
+ channel=zeile.3;
+ datum=zeile.4;
+ start=zeile.5;
+ stop=zeile.6;
+ title=zeile.7;
+ priority=zeile.8;
+ conflict=zeile.10;
+ eventid=zeile.11;
+ autotimerid=zeile.12;
+ duration=zeile.13;
+ description=zeile.14;
+ t = zeile.7.split('&#x7e;');IF t.size > 1;subtitle = t.pop;ELSE;subtitle="";END;title=t.join('&#x7e;');
+ vps= ( zeile.1 ? zeile.1 mod 8 div 4 : 0 );
+ day = date.format(zeile.9, "%A, %x", locale) %?>
+ <?% IF !old.defined || day != old %?>
+ <?% IF old.defined %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+ <?% PROCESS printsumme width=780 %?>
+ <?% END %?>
+ <table class="largetable" summary="">
+ <tr><td class="largehead"><?% day %?></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <?% z = 1 %?>
+ <tr height="0"><th width="20"></th><th width="130"></th><th width="130"></th><th></th><th width="60" align="right"></th></tr>
+ <?% END %?>
+ <?% PROCESS summe %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% old = day %?>
+ <?% z = z + 1 %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+ <?% PROCESS printsumme width=780 %?>
+</form>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+<?% IF enableform || allow('tnew') || allow('tupdate') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Timers",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+<?% IF allow('topten') %?>
+ <a href="?cmd=topten"><img src="images/topten.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="?cmd=topten"><?% gettext("TopTen Entrys",20) %?></a><br />
+<?% END %?>
+<?% IF allow('tnew') %?>
+ <a href="javascript:popupcmd('tnew',620,670,1)"><img src="images/new.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:popupcmd('tnew',620,670,1)"><?% gettext("Create a new timer",20) %?></a><br />
+<?% END %?>
+<?% IF allow('tupdate') %?>
+ <a href="javascript:fire('tupdate','0')"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:fire('tupdate','0')"><?% gettext("Update timers",20) %?></a>
+<?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+<?% IF enableform %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Select") %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <a href="javascript:selAll(document.tlist,1)"><img src="images/select.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:selAll(document.tlist,1)"><?% gettext("Select all",20) %?></a><br />
+ <a href="javascript:selAll(document.tlist,0)"><img src="images/deselect.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:selAll(document.tlist,0)"><?% gettext("Unselect all",20) %?></a><br />
+ <a href="javascript:reverse(document.tlist)"><img src="images/invers.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:reverse(document.tlist)"><?% gettext("Reverse select",20) %?></a>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidetext">
+<?% IF allow('ttoggle') %?>
+ <a href="javascript:selToggle('<?% gettext("You have nothing selected!") %?>',document.tlist)"><img src="images/onoff.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:selToggle('<?% gettext("You have nothing selected!") %?>',document.tlist)"><?% gettext("Toggle timer",20) %?></a><br />
+<?% END %?>
+<?% IF allow('tdelete') %?>
+ <a href="javascript:DeleteSelected('<?% gettext("You would delete follow timers?") %?>','<?% gettext("You have nothing selected!") %?>','tdelete',document.tlist,620,670)"><img src="images/delete.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:DeleteSelected('<?% gettext("You would delete follow timers?") %?>','<?% gettext("You have nothing selected!") %?>','tdelete',document.tlist,620,670)"><?% gettext("Delete timer",20) %?></a><br />
+<?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search for timers",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form name="searchform" action="">
+ <input type="hidden" name="cmd" value="tsearch" />
+ <input type="text" id="timertext" name="data" alt="<?% gettext("Search for timers") %?>"
+ onkeyup="suggest('tsuggest','timertext','timersuggest');"
+ <?% IF cgi.param('cmd')=='ts' || cgi.param('cmd')=='tsearch' %?>value="<?% cgi.param('data')%?>"<?% END %?>
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="timersuggest"></div>
+ </form>
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/tooltip.js b/skins/stone_flat/tooltip.js
new file mode 120000
index 0000000..ebad6a3
--- /dev/null
+++ b/skins/stone_flat/tooltip.js
@@ -0,0 +1 @@
+../stone/tooltip.js \ No newline at end of file
diff --git a/skins/stone_flat/topten.tmpl b/skins/stone_flat/topten.tmpl
new file mode 100644
index 0000000..df7fa38
--- /dev/null
+++ b/skins/stone_flat/topten.tmpl
@@ -0,0 +1,146 @@
+<!-- topten -->
+<?% USE date %?>
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+ <a href="?cmd=search&amp;data=<?% url( title ) %?>">
+ <img src="images/find.<?% global.imagetyp %?>" alt="" title="<?% gettext("Search for repeats") %?>" />
+ </a>
+ <?% IF param.timers.${id} && allow('tedit') %?>
+ <a href="javascript:popup('tedit','<?% param.timers.${id}.Id %?>',620,670,1)">
+ <img src="images/onoff.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit this Timer") %?>" />
+ </a>
+ <?% ELSIF allow('tnew') %?>
+ <a href="javascript:popup('tnew','<?% id %?>',620,670,1)">
+ <img src="images/record.<?% global.imagetyp %?>" alt="" title="<?% gettext("To record") %?>" />
+ </a>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK SetState %?>
+ <?% state = '' %?>
+ <?% IF param.runningTimer.exists(id) %?>
+ <?% state = "running" %?>
+ <?% ELSIF param.timers.exists(id) %?>
+ <?% UNLESS param.timers.${id}.Status %?>
+ <?% state = "deactive" %?>
+ <?% ELSE %?>
+ <?% state = "active" %?>
+ <?% END %?>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <?% PROCESS SetState %?>
+ <tr<?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td class="fieldinline">
+ <a class="fieldinline<?% IF state != "";" ";state;END %?>" style="vertical-align:bottom;" href="?cmd=program&amp;data=<?% channel %?><?% IF id > 0 %?>#E<?% id %?><?% END %?>" title="<?% gettext("Program guide for") %?>&nbsp;<?% sender %?>">
+ <font class="channel<?% IF state != "";" ";state;END %?>"><?% channel %?>.&nbsp;<?% chop(sender,20) %?></font></a>
+ </td>
+ <td class="fieldinline">
+ <a href="javascript:popup('display','<?% id %?>',620,670,0)" class="fieldinline">
+ <font class="title<?% IF state != "";" ";state;END %?>"><?% chop(title,45) %?></font>
+ <?% IF subtitle.length > 0 %?><font class="subtitle<?% IF state != "";" ";state;END %?>">&nbsp;-&nbsp;<?% chop(subtitle,55) %?></font><?% END %?>
+ </a>
+ </td>
+ <td class="fieldinline subtitle<?% IF state != "";" ";state;END %?>" style="white-space: nowrap">
+ <?% date.format(start,"%x %X",locale) %?>
+ </td>
+ <td class="fieldinline push">
+ <?% INCLUDE widgets/tooltip.inc cmd="display" eventid=id linkid=id ttp_offset=-300 %?>
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+ <?% IF global.hideDescription != 1 && description.length > 0 %?>
+ <tr<?% ' class="two"' IF z mod 2 == 0 %?>>
+ <td class="fieldinline" >&nbsp;</td>
+ <td class="fieldinline" colspan="4">
+ <a href="javascript:popup('display','<?% id %?>',620,670,0)" class="fieldinline">
+ <font class="description<?% IF state != "";" ";state;END %?>"><?% chop(description,100,1) %?></font>
+ </a>
+ </td>
+ </tr>
+ <?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% IF data.size > 1 %?>
+<?% fields = data.shift %?>
+<h1><?% gettext("TopTen Entrys") %?></h1>
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% id=zeile.0;title=zeile.1;subtitle=zeile.2;description=zeile.3;channel_id=zeile.4;start=zeile.5;video=zeile.6;audio=zeile.7;rank=zeile.8;level=zeile.9;count=zeile.10 %?>
+ <?% chid_enc = reentities(channel_id) %?>
+ <?% channel = param.channels.$chid_enc.POS %?>
+ <?% sender = param.channels.$chid_enc.Name %?>
+ <?% IF !old.defined || 1 != old %?>
+ <?% IF old.defined %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+</table>
+ <?% END %?>
+<table class="largetable" summary="">
+ <tr><td class="largehead"><?% day %?></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <?% z = 1 %?>
+ <tr height="0"><th width="120"></th><th></th><th width="60"></th><th width="40" align="right"></th></tr>
+ <?% END %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% old = 1 %?>
+ <?% z = z + 1 %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+</table>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+<?% IF enableform || allow('tnew') || allow('tupdate') %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Timers",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+<?% IF allow('topten') %?>
+ <a href="?cmd=topten"><img src="images/topten.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="?cmd=topten"><?% gettext("TopTen Entrys",20) %?></a><br />
+<?% END %?>
+<?% IF allow('tnew') %?>
+ <a href="javascript:popupcmd('tnew',620,670,1)"><img src="images/new.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:popupcmd('tnew',620,670,1)"><?% gettext("Create a new timer",20) %?></a><br />
+<?% END %?>
+<?% IF allow('tupdate') %?>
+ <a href="javascript:fire('tupdate','0')"><img src="images/refresh.<?% global.imagetyp %?>" alt="" /></a>&nbsp;
+ <a href="javascript:fire('tupdate','0')"><?% gettext("Update timers",20) %?></a><br />
+<?% END %?>
+ </td>
+ </tr>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+<?% END %?>
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Search",20) %?></td></tr>
+ <tr>
+ <td class="sidetext">
+ <form method="post" action="?cmd=tsearch" name="searchform">
+ <input type="text" id="timertext" name="data" alt="<?% gettext("Search for timers") %?>"
+ onkeyup="suggest('tsuggest','timertext','timersuggest');"
+ <?% IF cgi.param('cmd')=='ts' || cgi.param('cmd')=='tsearch' %?>value="<?% cgi.param('data')%?>"<?% END %?>
+ autocomplete="off" />
+ <br /><div class="suggestbox" id="timersuggest"></div>
+ </form>
+ </td>
+ </tr>
+ <tr><td class="sidebottom"></td></tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/tsearch.tmpl b/skins/stone_flat/tsearch.tmpl
new file mode 120000
index 0000000..d1d3655
--- /dev/null
+++ b/skins/stone_flat/tsearch.tmpl
@@ -0,0 +1 @@
+tlist.tmpl \ No newline at end of file
diff --git a/skins/stone_flat/ulist.tmpl b/skins/stone_flat/ulist.tmpl
new file mode 100644
index 0000000..9a117c5
--- /dev/null
+++ b/skins/stone_flat/ulist.tmpl
@@ -0,0 +1,77 @@
+<!-- ulist Template -->
+<body class="frame">
+<div id="body">
+<?% ######################################################################## %?>
+<?% BLOCK RowButtons %?>
+<?% IF allow('uedit') %?>
+ <a href="javascript:popup('uedit','<?% id %?>',620,670,1)">
+ <img src="images/edit.<?% global.imagetyp %?>" alt="" title="<?% gettext("Edit account of user") %?>" />
+ </a>
+<?% END %?>
+<?% IF allow('udelete') %?>
+ <a href="javascript:sureandreload('<?% gettext("You will delete this account of user") %?>','<?% escape(user) %?>','udelete','<?% id %?>')">
+ <img src="images/delete.<?% global.imagetyp %?>" alt="" title="<?% gettext("Delete account of user") %?>" />
+ </a>
+<?% END %?>
+<?% END %?>
+<?% ######################################################################## %?>
+<?% BLOCK ItemAsFlat %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <td>
+ <?% IF allow('uedit') %?>
+ <a title="<?% gettext("Edit account of user") %?>" href="javascript:popup('uedit','<?% id %?>',620,670,1)" class="fieldinline" >
+ <?% END %?>
+ <strong><?% user %?></strong>
+ <?% IF allow('uedit') %?>
+ </a>
+ <?% END %?>
+ </td>
+ <td align="right">
+ <?% right %?>
+ </td>
+ <td class="push">
+ <?% PROCESS RowButtons %?>
+ </td>
+ </tr>
+<?% END %?>
+<?% ######################################################################## %?>
+<h1><?% gettext("Administration of User") %?></h1>
+<?% IF data.size > 1 %?>
+<?% fields = data.shift %?>
+ <table class="largetable" summary="">
+ <tr><td class="largehead"><?% gettext("Administration of User") %?></td></tr>
+ <tr>
+ <td class="largetext" align="left">
+ <table summary="" width="100%">
+ <tr height="0"><th></th><th></th><th width="60" align="right"></th></tr>
+ <?% FOREACH zeile = data %?>
+ <?% IF debug;"<!-- Item: ";FOREACH x = zeile;loop.count - 1;":";x.replace("-"," ");"|";END;"-->";END %?>
+ <?% id=zeile.0;user=zeile.1;right=zeile.2 %?>
+ <?% PROCESS ItemAsFlat %?>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="largebottom"></td></tr>
+ </table>
+<?% END %?>
+</div>
+<!-- ###### Seite ###### -->
+<div id="sidebar">
+ <table summary="">
+ <tr><td class="sidehead"><?% gettext("Administration of User",20) %?></td></tr>
+<?% IF allow('unew') %?>
+ <tr>
+ <td class="sidetext">
+ <a title="<?% gettext("Create a new account for user") %?>" href="javascript:popupcmd('unew',620,670,1)"><img src="images/new.<?% global.imagetyp %?>" alt="" title="<?% gettext("Create a new account for user") %?>" /></a>&nbsp;
+ <a title="<?% gettext("Create a new account for user") %?>" href="javascript:popupcmd('unew',620,670,1)"><?% gettext("Create a new account for user",20) %?></a><br />
+ </td>
+ </tr>
+<?% END %?>
+ <tr>
+ <td class="sidebottom"></td>
+ </tr>
+ </table>
+ <p id="sidefooter">&nbsp;</p>
+</div>
+<?% INCLUDE header.inc %?>
diff --git a/skins/stone_flat/vitals.tmpl b/skins/stone_flat/vitals.tmpl
new file mode 100644
index 0000000..f8f9e20
--- /dev/null
+++ b/skins/stone_flat/vitals.tmpl
@@ -0,0 +1,107 @@
+<!-- Vitals Template -->
+<?% IF ! global.bodyinc.defined;global.bodyinc = 1 %?>
+<body class="frame">
+<?% INCLUDE status.inc %?>
+<?% INCLUDE header.inc %?>
+<div id="body">
+<?% END %?>
+
+<?%
+ USE date;
+ statusfiles = [];
+
+ FILTER null;
+ name = 'vitals';
+ loaddata = [];
+ utildata = [];
+ userdata = [];
+ timestamps = [];
+ FOREACH item = param.stack;
+ t = date.format(item.timestamp, '%H:%M:%S');
+ timestamps.push(t);
+ l = item.load.first * 10;
+ loaddata.push(l);
+ utildata.push(item.util);
+ userdata.push(item.users);
+ END;
+
+ # Maximum wert
+ max = loaddata.nsort.last;
+ IF utildata.nsort.last > max;
+ max = utildata.nsort.last;
+ END;
+ IF userdata.nsort.last > max;
+ max = userdata.nsort.last;
+ END;
+ max = ( max + (max div 10) + 0.9 ) div 1;
+
+ # Data ...
+ d = [
+ timestamps ,
+ loaddata ,
+ userdata ,
+ utildata ,
+ ];
+
+ USE my_graph = GD.Graph.lines(575,300);
+
+ # Xsteps
+ steps = param.stack.size div 5;
+ label = gettext('Average load');
+ my_graph.set(
+ x_label_skip => steps,
+ x_long_ticks => 1,
+
+ y_long_ticks => 1,
+ y_max_value => max,
+
+ line_width => 2,
+ box_axis => 1,
+ boxclr => '#FFFFCC',
+ fgclr => '#BBBBBB'
+ legend_placement => 'RD',
+ legend_spacing => 5,
+ );
+ my_graph.set_title_font(param.font,10);
+ my_graph.set_y_label_font(param.font,10);
+ my_graph.set_x_label_font(param.font,10);
+ my_graph.set_x_axis_font(param.font,6);
+ my_graph.set_y_axis_font(param.font,6);
+ my_graph.set_legend( 'Load (x10)', 'User', 'Util');
+ file = writefile("status_${name}.gif", my_graph.plot(d).gif );
+ statusfiles.push([label, file]);
+ END;
+ %?>
+
+<?% IF param.headingText %?>
+<h1><?% param.headingText %?></h1>
+<?% END %?>
+
+<table class="editortable" summary="">
+ <tr><td class="editorhead">&nbsp;</td></tr>
+ <tr>
+ <td class="editortext" align="center">
+ <table summary="" width="100%">
+ <?% FOREACH name = data.keys.sort %?>
+ <tr<?% ' class="two"' IF loop.count mod 2 == 0 %?>>
+ <td><?% name %?></td>
+ <td><?% data.$name.replace('\n', '<br />') %?></td>
+ </tr>
+ <?% END %?>
+ </table>
+ </td>
+ </tr>
+ <tr><td class="editorbottom"></td></tr>
+</table>
+
+<?% FOREACH file = statusfiles %?>
+<table class="editortable" summary="">
+ <tr><td class="editorhead"><?% file.0 %?></td></tr>
+ <tr>
+ <td class="editortext" align="center">
+ <img src="<?% file.1 %?>" alt="<?% file.0 %?>" />
+ </td>
+ </tr>
+ <tr><td class="editorbottom"></td></tr>
+</table>
+<?% END %?>
diff --git a/skins/stone_flat/widgets b/skins/stone_flat/widgets
new file mode 120000
index 0000000..3a021d7
--- /dev/null
+++ b/skins/stone_flat/widgets
@@ -0,0 +1 @@
+../stone/widgets/ \ No newline at end of file