feat: add videodb media index with Docker stack

- Add videodb PHP/MySQL media collection manager (Blu-ray, DVD, CD)
- Dockerfile: PHP 8.1 + Apache with GD/mysqli/exif extensions
- docker-compose.yml: app on port 6761 + MySQL 8.0 with health checks
- docker-entrypoint.sh: auto-generates config.inc.php from env vars,
  waits for MySQL, initializes DB schema idempotently
- init-db.php: CLI schema installer using app's own prefix_query() logic
- Persistent volumes for DB, cache, and cover images

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-11 09:49:52 +02:00
commit f55c91276e
1230 changed files with 252321 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
<div id="showcast">
<h3>{$lang.cast}:</h3>
<table width="100%">
{counter start=0 print=false name=castcount}
{foreach item=actor from=$video.cast}
{if $count == 0}
<tr>
{/if}
<td width="{floor(100/$config.castcolumns)}%">
{if $actor.imgurl}
{assign var="link" value=$actor.imdburl}
<a href="{if $config.imdbBrowser}{assign var="link" value=$link|escape:url}trace.php?videodburl={/if}{$link}">{html_image file=$actor.imgurl max_width=45 max_height=60 class=thumb}{*<img src="{$actor.imgurl}" width="38" height="52" align="left">*}</a>
{/if}
<a href="search.php?q=%22{$actor.name|escape:url}%22&amp;isname=Y">{$actor.name}</a>
{foreach item=role from=$actor.roles}
<br/>{$role}
{/foreach}
</td>
{counter assign=count name=castcount}
{if $count == $config.castcolumns}
</tr>{counter start=0 print=false name=castcount}
{/if}
{/foreach}
{if $count != 0}
{section name="columnLoop" start=$count loop=$config.castcolumns}
<td>&nbsp;</td>
{/section}
</tr>
{/if}
</table>
</div>

View File

@@ -0,0 +1,101 @@
{*
Template for the borrowing a single disk
$Id: borrow.tpl,v 1.11 2008/03/09 14:57:23 andig2 Exp $
*}
<!-- {$smarty.template} -->
{if $diskid && $editable}
<div id="actions">
<form action="borrow.php" id="formborrow" name="formborrow" method="post">
<input type="hidden" name="diskid" id="diskid" value="{$diskid}" />
{if $who}
{$lang.diskid} {$diskid}
{$lang.lentto} {$who} ({$dt})
<br />
<input type="hidden" name="return" value="1" />
<input type="submit" class="button" value="{$lang.returned}" />
{else}
{$lang.diskid} {$diskid} {$lang.available}
<br />
{$lang.borrowto}:
<input type="text" size="40" maxlength="255" id="who" name="who" />
<input type="submit" class="button" value="{$lang.okay}" />
{/if}
</form>
<script language="JavaScript" type="text/javascript">
// <!--
if (document.formborrow.who) document.formborrow.who.focus();
// -->
</script>
</div>
<!-- /actions -->
{else}
<div id="topspacer"></div>
{/if}
<div id="content">
<div id="borrow">
{if $config.multiuser}
<table>
<tr>
<td><h3>{$lang.curlentfrom}</h3></td>
<td><h3><form action="borrow.php">{html_options name=owner options=$owners selected=$owner onchange="submit()"}</form></h3></td>
<td><h3>:</h3></td>
</tr>
</table><br/>
{else}
<h3>{$lang.curlent}</h3>
{/if}
{if $borrowlist}
<table width="100%">
<tr class="{cycle values="even,odd"}">
<th>{$lang.diskid}</th>
{if $config.multiuser}<th>{$lang.owner}</th>{/if}
<th>{$lang.title}</th>
<th>{$lang.lentto}</th>
<th>{$lang.date}</th>
<th></th>
</tr>
{foreach item=disk from=$borrowlist}
<tr class="{cycle values="even,odd"}">
<td class="center"><a href="search.php?q={$disk.diskid}&amp;fields=diskid&amp;nowild=1">{$disk.diskid}</a></td>
{if $config.multiuser}
<td class="center">{$disk.owner}</td>
{/if}
<td class="center">
<a href="show.php?id={$disk.id}">{$disk.title}</a>
{if $disk.count > 1} ... {/if}
</td>
<td class="center">{$disk.who}</td>
<td class="center">{$disk.dt}</td>
<td class="center">
{if $disk.editable}
<form action="borrow.php" method="get">
<input type="hidden" name="diskid" value="{$disk.diskid}" />
<input type="hidden" name="return" value="1" />
<input type="submit" class="button" value="{$lang.returned}" />
</form>
{/if}
</td>
</tr>
{/foreach}
</table>
{else}
{$lang.l_nothing}
<br/><br/>
{/if}
</div>
<!-- /borrow -->
</div>
<!-- /content -->

View File

@@ -0,0 +1 @@
{*

View File

@@ -0,0 +1,94 @@
{assign var=IMGWIDTH value="194"}
{assign var=IMGHEIGHT value="288"}
{literal}
<style>
/* Outer div for image container */
.boxgrid{
position: relative;
overflow: hidden;
/* float:left; */
background:#161613;
border: solid 0px #8399AF;
width: 194px;
height: 288px;
margin: 10px;
}
.boxgrid img{
position: absolute;
top: 0;
left: 0;
border: 0;
}
/* Inner div for sliding content */
.boxcaption{
position: absolute;
width: 174px; /* note: 100% doesn't work here */
background: #000;
opacity: .8;
/* For IE 5-7 */
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
/* For IE 8 */
-MS-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
padding: 0 10px 10px 10px;
}
/* Inner content styling */
.boxcaption h3 {
font-size: 12pt;
font-weight: bold;
color: #fff;
margin: 0;
padding: 10px 0 10px 0;
}
.boxcaption div, .boxcaption h4, .boxcaption a {
font-size: 10pt;
color: #ddd;
padding: 10px 0 0 0;
}
/* Start position for actions */
.boxcaption .caption {
top: 220;
left: 0;
}
</style>
<script>
Event.observe(document, 'dom:loaded', function() {
// setup initial slider position based on height of h3 tag (plot)
$$('.boxcaption').each(function(el) {
el.setStyle({top: (288 - el.down('h3').getHeight())+'px'});
});
// unique identifier for queue scope
var elid = 1;
$$('.boxgrid.caption').each(function(el) {
elid++;
el.observe('mouseenter', function(e) {
var el = this.down('.boxcaption');
var dy = el.getHeight() - el.down('h3').getHeight();
new Effect.Move(el, {duration: 0.1, x: 0, y: -dy, mode: 'relative' //});
,queue: { position:'end', scope:'s'+elid }
});
});
el.observe('mouseleave', function(e) {
var el = this.down('.boxcaption');
var dy = el.getHeight() - el.down('h3').getHeight();
new Effect.Move(el, {duration: 0.1, x: 0, y: dy, mode: 'relative' // });
,queue: { position:'end', scope:'s'+elid }
});
});
});
});
</script>
{/literal}

View File

@@ -0,0 +1,18 @@
<style>
div {
border: 1px solid #000;
}
#inner {
margin: 20px;
}
</style>
<div id="outer">
<div id="inner">
</div>
</div>

View File

@@ -0,0 +1,15 @@
<div id="dlog" sstyle="position: absolute; top: 600px; left: 0px; width:200px; height: 80px;"></div>
{literal}
function dlog(d)
{
el = $('dlog');
/*
if (!el) {
el = new Element('div', {'id': 'dlog'}).setStyle({position:'absolute', left:'0px', top:'200px', width:'200px', border:'1px solid #000', height:'20px'});
document.body.appendChild(icon);
}
*/
el.innerHTML = d + "<br/>" + el.innerHTML;
}
{/literal}

View File

@@ -0,0 +1,18 @@
{*
Deletion confirmation
$Id: delete.tpl,v 1.2 2005/05/22 10:29:57 andig2 Exp $
*}
<!-- {$smarty.template} -->
<div id="topspacer"></div>

View File

@@ -0,0 +1,281 @@
{*
Template for the edit interface
$Id: edit.tpl,v 1.18 2010/02/24 21:20:18 andig2 Exp $
*}
<!-- {$smarty.template} -->
<script language="JavaScript" type="text/javascript" src="./javascript/edit.js"></script>
<script language="JavaScript" type="text/javascript" src="./javascript/prototype/rating.js"></script>
<script language="JavaScript" type="text/javascript" src="{$template}js/edit.js"></script>
<script language="JavaScript" type="text/javascript">
Event.observe(document, 'dom:loaded', function() {
/**
* Title search
*/
bindTitle();
/**
* Rating
*/
bindRating('rating_control', 'rating_value', {if !empty($video.rating)}{$video.rating}{else}0{/if});
/**
* Image lookup
*/
{if $engines.google}bindImageLookup();{/if}
});
</script>
{if !empty($video.id) || $xmlimport}
<div id="actions">
{if !empty($video.id)}
<form action="show.php" method="get" name="show">
<input type="hidden" name="id" value="{$video.id}" />
<input type="submit" class="button" value="{$lang.view}" />
</form>
{else}
<form action="edit.php" method="get" name="import">
<input type="hidden" name="import" value="xml" />
<input type="submit" class="button" value="Import" />
</form>
{/if}
</div>
<!-- /actions -->
{else}
<div id="topspacer2"></div>
{/if}
{if $http_error}<div class="center">{$http_error}</div>{/if}
<div id="content">
<div id="edit">
<form action="edit.php" id="edi" name="edi" method="post" enctype="multipart/form-data">
<input type="hidden" name="id" id="id" value="{if !empty($video.id)}{$video.id}{/if}" />
<input type="hidden" name="engine" id="engine" value="{if !empty($engine)}{$engine}{/if}" />
<input type="hidden" name="save" id="save" value="1" />
<table width="100%">
<tr>
<td>
<table>
<tr>
<td><h4>{$lang.title}:</h4></td>
<td>
<input type="text" name="title" id="title" value="{if !empty($video.q_title)}{$video.q_title}{/if}" size="50" autocomplete="off" maxlength="255" />
<div id="title_choices" class="autocomplete" style="display:none"></div>
<a href="javascript:void(lookupData(document.edi.title.value))"><img src="{$template}images/search.gif" alt="" align="top" /></a>
<span id="indicator1" style="display: none"><img src="{$template}images/spinner.gif" alt="{$lang.working}" /></span>
</td>
</tr>
<tr>
<td><h4>{$lang.subtitle}:</h4></td>
<td>
<input type="text" name="subtitle" id="subtitle" value="{if !empty($video.q_subtitle)}{$video.q_subtitle}{/if}" size="50" maxlength="255" />
<a href="javascript:void(lookupData(document.edi.subtitle.value))"><img src="{$template}images/search.gif" alt="" align="top" /></a>
</td>
</tr>
<tr>
<td><h4>{$lang.language}:</h4></td>
<td>{$video.f_language}</td>
</tr>
<tr>
<td><h4>{$lang.diskid}:</h4></td>
<td>
<input type="text" name="diskid" id="diskid" value="{if !empty($video.q_diskid)}{$video.q_diskid}{/if}" size="15" maxlength="255" />
<input type="hidden" name="autoid" id="autoid" value="{$autoid}" />
<input type="hidden" name="oldmediatype" id="oldmediatype" value="{$video.mediatype}" />
{$lang.mediatype} {html_options name="mediatype" options=$mediatypes selected=$video.mediatype}
</td>
</tr>
<tr>
<td><h4><label for="istv">{$lang.tvepisode}</label>:</h4></td>
<td><input type="checkbox" name="istv" id="istv" value="1" {if !empty($video.istv)}checked="checked"{/if}/></td>
</tr>
<tr>
<td><h4><label for="seen">{$lang.seen}</label>:</h4></td>
<td><input type="checkbox" name="seen" id="seen" value="1" {if !empty($video.seen)}checked="checked"{/if}/></td>
</tr>
<tr>
<td><h4>{$lang.filename}:</h4></td>
<td><input type="text" name="filename" id="filename" value="{if !empty($video.q_filename)}{$video.q_filename}{/if}" size="50" maxlength="255" /></td>
</tr>
<tr>
<td><h4>{$lang.filesize}:</h4></td>
<td><input type="text" name="filesize" id="filesize" value="{if !empty($video.q_filesize)}{$video.q_filesize}{/if}" size="10" maxlength="15" /> bytes</td>
</tr>
<tr>
<td><h4>{$lang.filedate}:</h4></td>
<td><input type="text" name="filedate" id="filedate" value="{if !empty($video.q_filedate)}{$video.q_filedate}{/if}" size="18" maxlength="20" /></td>
</tr>
<tr>
<td><h4>{$lang.audiocodec}:</h4></td>
<td><input type="text" name="audio_codec" id="audio_codec" value="{if !empty($video.q_audio_codec)}{$video.q_audio_codec}{/if}" /></td>
</tr>
<tr>
<td><h4>{$lang.videocodec}:</h4></td>
<td><input type="text" name="video_codec" id="video_codec" value="{if !empty($video.q_video_codec)}{$video.q_video_codec}{/if}" /></td>
</tr>
<tr>
<td><h4>{$lang.dimension}:</h4></td>
<td>
<input type="text" name="video_width" id="video_width" value="{if !empty($video.q_video_width)}{$video.q_video_width}{/if}" size="5" maxlength="4" /> x
<input type="text" name="video_height" id="video_height" value="{if !empty($video.q_video_height)}{$video.q_video_height}{/if}" size="5" maxlength="4" />
</td>
</tr>
<tr>
<td><h4>{$lang.rating}:</h4></td>
<td>
<div id="rating_control" class="rating_container"></div>&nbsp;(<span id="rating_value">{if !empty($video.rating)}{$video.rating}{else}0{/if}</span>)
<input type="hidden" name="rating" id="rating" value="{if !empty($video.rating)}{$video.rating}{/if}" />
</td>
</tr>
<tr>
<td colspan="2"><h4>{$lang.genre}:</h4>
<br/>
{$genreselect}
</td>
</tr>
{if !empty($owners)}
<tr>
<td>{$lang.owner}</td>
<td>
{html_options name=owner_id options=$owners selected=$video.owner_id}
</td>
</tr>
{/if}
{if !empty($video.custom1name)}
<tr>
<td><h4>{$video.custom1name}:</h4></td>
<td>{$video.custom1in}</td>
</tr>
{/if}
{if !empty($video.custom3name)}
<tr>
<td><h4>{$video.custom3name}:</h4></td>
<td>{$video.custom3in}</td>
</tr>
{/if}
</table>
</td>
<td>
<table>
<tr>
<td><h4>{$lang.extid}:</h4></td>
<td>
<input type="text" name="imdbID" id="imdbID" value="{if !empty($video.q_imdbID)}{$video.q_imdbID}{/if}" size="15" maxlength="30" onchange="changedId()" />
{if !empty($link)}<h4><a href="{$link}" target="_blank">{$lang.visit}</a></h4>{/if}</td>
</tr>
<tr>
<td><h4>{$lang.coverurl}:</h4></td>
<td>
<input type="text" name="imgurl" id="imgurl" value="{if !empty($video.q_imgurl)}{$video.q_imgurl}{/if}" size="50" maxlength="255" />
<a href="javascript:void(lookupImage(document.edi.title.value))"><img src="{$template}images/search.gif" alt="" align="top" /></a>
</td>
</tr>
<tr>
<td><h4>{$lang.coverupload}:</h4></td>
<td><input type="file" name="coverupload" id="coverupload" size="35" /></td>
</tr>
<tr>
<td><h4>{$lang.country}:</h4></td>
<td><input type="text" name="country" id="country" value="{if !empty($video.q_country)}{$video.q_country}{/if}" size="50" maxlength="255" /></td>
</tr>
<tr>
<td><h4>{$lang.director}:</h4></td>
<td><input type="text" name="director" id="director" value="{if !empty($video.q_director)}{$video.q_director}{/if}" size="50" maxlength="255" /></td>
</tr>
<tr>
<td><h4>{$lang.runtime}:</h4></td>
<td>
<input type="text" name="runtime" id="runtime" value="{if !empty($video.q_runtime)}{$video.q_runtime}{/if}" size="5" maxlength="5" />min
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$lang.year}
<input type="text" name="year" id="year" value="{if !empty($video.year)}{$video.year}{/if}" size="5" maxlength="4" />
</td>
</tr>
<tr>
<td><h4>{$lang.plot}:</h4></td>
<td><textarea cols="40" rows="8" name="plot" id="plot" wrap="virtual">{if !empty($video.q_plot)}{$video.q_plot}{/if}</textarea></td>
</tr>
<tr>
<td><h4>{$lang.cast}:</h4></td>
<td><textarea cols="40" rows="8" name="actors" id="actors" wrap="off">{if !empty($video.q_actors)}{$video.q_actors}{/if}</textarea></td>
</tr>
<tr>
<td><h4>{$lang.comment}:</h4></td>
<td><textarea cols="40" rows="3" name="comment" id="comment" wrap="virtual">{if !empty($video.q_comment)}{$video.q_comment}{/if}</textarea></td>
</tr>
{if !empty($video.custom2name)}
<tr>
<td><h4>{$video.custom2name}:</h4></td>
<td>{$video.custom2in}</td>
</tr>
{/if}
{if !empty($video.custom4name)}
<tr>
<td><h4>{$video.custom4name}:</h4></td>
<td>{$video.custom4in}</td>
</tr>
{/if}
</table>
</td>
</tr>
</table>
<div id="editbuttons">
{$lang.radio_look_caption}: {html_radios name=lookup options=$lookup checked="$lookup_id"}
<label for="add_flag"><input type="checkbox" name="add_flag" id="add_flag" value="1" {if !empty($add_flag)}checked="checked"{/if} />{$lang.add_another}</label>
<input type="submit" class="button" value="{$lang.save}" id="savebutton" accesskey="s" />
</div>
</form>
</div>
<!-- /edit -->
<div id="images" class="hidden">
<div id="images2">Alternative images:</div>
<div id="imagecontent"></div>
<div class="clear"></div>
</div>
<div class="clear"></div>
<!-- /images -->
</div>
<!-- /content -->

View File

@@ -0,0 +1,588 @@
/**
* Elegant style sheet
*
* $Id: elegant.css,v 1.40 2013/03/14 17:16:35 andig2 Exp $
*/
/*
* Defaults
*/
body {
font-family: Arial, Helvetica, sans serif;
font-size: 12px;
margin: 0px;
padding: 0px;
background-color: #e4e4e4;
color: #40474e
}
form, ul {
margin: 0px;
}
a:link, a:visited, a:active {
text-decoration: none;
color: #40474e
}
a:hover {
text-decoration: underline;
color: rgb(255,102,0);
}
table.collapse {
border-collapse : collapse;
}
tr {
vertical-align: top;
}
td { /* this fixes a problem with opera */
vertical-align: top;
text-align: left;
}
img {
border: 0px;
}
input, textarea, select {
font-size: 12px;
}
h3, h4 { /* bold font, usually in action section */
font-size: 12px;
font-weight: bold;
margin: 0px;
}
h4 { /* used on edit page */
font-weight: normal;
display: inline;
}
/*
* divs
*/
#container {
padding: 2px 8px 10px 8px;
}
#logo {
text-align: right;
float: right;
}
#logotitle, #logotitle a {
font: bold 20px trebuchet ms, arial, helvetica, sans-serif;
text-decoration: none;
}
#logohelp, #logologin, #logoprofile, #logoversion {
display: inline;
}
.logodivider {
margin: 0px 0px 0px 3px;
}
#header {
}
#headernav {
margin: 26px 0px 4px 0px;
padding: 0px;
}
#headernav li {
display: inline;
list-style-type: none;
}
#headernav2 li {
display: inline;
list-style-type: none;
font-size: 11px;
font-weight: normal;
}
#headernav2 li:before { content: "| "; }
#headernav2 li:first-child:before { content: ""; }
/*IE workaround*/
/*All IE browsers*/
* html #headernav2 li
{
border-left: 1px solid black;
padding: 0 0.4em 0 0.4em;
margin: 0 0.4em 0 -0.4em;
}
/*prevent first |*/
* html #headernav2 li
{
display: block;
float: left;
}
/*end workaround*/
#headerhelp, #headerlogin, #headerprofile {
display: none;
}
#filters {
padding: 2px 0px 4px 0px;
background-color: #fff;
font-size: 11px;
text-transform: capitalize;
border-bottom: 1px dotted #aaa;
}
#filtersmoreless {
float: right;
padding: 3px 4px 0px 0px;
}
#filtersmoreless img.button {
padding: 1px;
background-color: white;
border: none;
}
#quicksearch:hover {
color: #000000;
}
#quicksearch {
background: url(images/search_grey.gif) no-repeat scroll 0px;
color: #BBB;
padding-left: 17px;
}
#footer {
background-color: #fff;
font-size: 10px;
height: 19px;
padding: 2px;
}
#footerpages {
padding: 3px;
}
#footerversion {
float: right;
padding: 3px;
display: none;
}
#footerimage {
float: right;
padding: 2px;
}
#topspacer {
}
#topspacer2 {
background-color: #fff;
height: 25px;
border-bottom: 1px dotted #aaa;
}
#actions {
background-color: #fff;
padding: 4px;
border-bottom: 1px dotted #aaa;
}
#actionsspacer {
display: none;
}
#actionsbuttons {
}
#actions form, #actions h3 {
display: inline;
}
#actions div {
display: inline;
}
#content, #listitems {
background-color: #fff;
}
#showheader {
border-bottom: 1px dotted #aaa;
}
#showheader h1 {
font-size: 22px;
font-weight: bold;
margin: 0px;
}
#showheader h2 {
font-size: 18px;
font-weight: bolder;
margin: 0px;
}
#showimage {
float: left;
padding: 5px;
}
#showplot, #showfile, #showcomment, #showcast {
padding: 4px;
text-align: justify;
}
#showfile, #showcomment, #showcast {
border-bottom: 1px dotted #aaa;
}
#lookup {
padding: 4px;
}
#editbuttons {
position: absolute;
top: 46px;
right: 8px;
float: right;
font-size: 12px;
padding: 3px 90px 0px 0px;
margin: 0px;
}
#permissionbuttons {
position: absolute;
top: 48px;
right: 8px;
float: right;
font-size: 12px;
padding: 3px 4px 0px 0px;
margin: 0px;
}
#savebutton {
position: absolute;
top: 5px;
right: 4px;
}
#searchimage {
float: right;
}
#edit, #borrow, #statistics, #tools, #lookup, #users, #permissions, #contentlogin {
border-bottom: 1px dotted #aaa;
}
#borrow {
padding: 4px;
}
/*
* classes
*/
.tabActive a:visited,
.tabActive a:link,
.tabActive a:hover,
.tabInactive a:visited,
.tabInactive a:link,
.tabInactive a:hover {
font-size: 11px;
font-weight: bold;
margin: 4px 0px 0px 0px;
padding: 3px 6px 4px 6px;
text-decoration: none;
text-transform: capitalize;
white-space: nowrap;
}
.tabActive a:visited,
.tabActive a:link,
.tabActive a:hover {
background-color: #fff;
color: #222;
color: rgb(255,102,0);
}
.tabActive a:hover {
color: rgb(255,102,0);
}
.tabInactive a:visited,
.tabInactive a:link,
.tabInactive a:hover {
background-color: #f4f4f4;
color: #666;
}
.tabInactive a:hover {
background-color: #fff;
color: rgb(255,102,0);
}
.right {
text-align: right;
}
.center {
text-align: center;
}
.clear {
clear: both;
}
.button {
padding: 0px 3px 0px 3px;
border: 1px solid #aaa;
background: #eee;
cursor: hand;
}
.dropcap:first-letter {
float: left;
margin: 2px;
font-size: 32px;
}
.optionseven, .optionsodd {
border-bottom: 1px dotted #aaa;
padding: 4px;
}
.optionsleft {
float: left;
width: 25%;
text-align: center;
}
.optionsright {
float: right;
width: 75%;
text-align: left;
}
.lent {
background-color: #fdd;
}
.wanted {
background-color: #ffb;
}
.notavail {
font-weight: bold;
color: rgb(255,102,0);
}
.listeven, .listodd, #showplot, #torrents, #purchases {
border-bottom: 1px dotted #aaa;
}
.list_title, .list_diskid {
font-size: 12px;
font-weight: bold;
}
.list_info, .list_seen, .list_plot {
font-size: 11px;
}
.list_info {
font-style: italic;
}
.list_plot a {
font-weight: bold;
}
.list_item_buttons form {
display: inline;
}
.list_item_more {
float: right;
}
.list_diskid, .list_language, .list_seen, .list_item_buttons {
text-align: right;
}
.list_language {
margin-top: 2px;
margin-left: 2px;
}
.list_episode {
padding: 2px;
}
/*
* Images
*/
.cover {
margin: 0px 4px 0px 0px;
}
.thumb {
float: left;
margin: 0px 2px 1px 0px;
}
/* setup screenshot thumbnails */
.setup-thumb {
float: left;
width: 105px;
text-align: center;
border: 1px solid #999;
margin: 0 15px 15px 0;
padding: 5px;
}
.setup-thumb a:hover {
text-decoration: none;
}
/* lookup thumbnail formatting */
.thumbnail {
float: left;
margin: 5px;
}
#purchasecontent .thumbnail {
width: 300px;
background-color: #fff;
color: #000;
}
.img-shadow {
float: left;
background: url(images/shadowalpha.png) no-repeat bottom right !important;
background: url(images/shadow.gif) no-repeat bottom right;
margin: 10px 0 0 10px !important;
margin: 10px 0 0 5px;
}
.img-shadow img {
display: block;
position: relative;
background-color: #fff;
border: 1px solid #a9a9a9;
margin: -8px 6px 6px -8px !important;
margin: -8px 6px 6px -4px;
padding: 1px;
}
/*
* Ajax Stuff
*/
.hidden {
display: none;
}
div.autocomplete {
position:absolute;
width:250px;
background-color:white;
border:1px solid #ccc;
border-width: 1px 0 0 0;
margin:0px;
padding:0px;
opacity:0.90;
}
div.autocomplete ul {
list-style-type:none;
margin:0px;
padding:0px;
}
div.autocomplete ul li {
list-style-type:none;
display:block;
margin:0;
padding:2px;
border: 1px solid #ccc;
border-width: 0 1px 1px 1px;
cursor:pointer;
}
div.autocomplete ul li.selected {
background: #4173CC;
color: #fff;
}
div.autocomplete ul li em {
font-weight: bold;
font-style: normal;
background: #ccc;
}
div.autocomplete ul li.selected em {
background: none;
}
/* Rating */
.rating_container {
white-space: nowrap;
clear: both;
display: inline;
}
.rating_container a {
float:left;
display:block;
width:20px;
height:20px;
border:0;
}
.rating_container a.rating_off {
background-image:url("images/starempty.gif");
}
.rating_container a.rating_half {
background-image:url("images/starhalf.gif");
}
.rating_container a.rating_on {
background-image:url("images/starfull.gif");
}
.rating_container a.rating_selected {
background-image:url("images/starselected.gif");
}
/* Image lookup */
#images, #images .thumbnail a {
background-color: #aaa;
color: #fff;
}
#images2 {
padding: 5px 5px 0px 5px;
}
/*
* Help Browser
*/
.helpbrowser code {font-family: monospace; color: #044;}
.helpbrowser td th {background-color: #eee;}
.helpbrowser h1 {text-align: center; font-size: 15pt; font-weight: bolder; margin-top: 0px}
.helpbrowser h2 {margin-left: 10px; font-size: 13pt; font-weight: bolder;}
.helpbrowser h3 {margin-left: 30px; font-size: 11pt; font-weight: bolder; font-variant: small-caps}
.helpbrowser p {text-align: justify; margin-left: 50px; width: 90%}
.helpbrowser pre {margin-left: 50px; font-family: monospace; color: #044;}
.helpbrowser table ul dl {margin-left: 50px; width: 90%}
.helpbrowser dd {margin-bottom: 10px;}

View File

@@ -0,0 +1,128 @@
/**
* Grey style sheet
*
* $Id: elegant_grey.css,v 1.1 2013/03/14 17:16:36 andig2 Exp $
*/
/*
* Defaults
*/
body {
font-family: Tahoma, Verdana, sans serif;
background-color: #f8f8f8;
color: #000;
}
a:link, a:visited, a:active {
color: #000;
}
#logotitle {
font: bold 20px tahoma, trebuchet ms, arial, helvetica, sans-serif;
}
#filters {
background-color: #ddd;
}
#footer {
background-color: #ddd;
}
#topspacer, #topspacer2 {
background-color: #ddd;
height: 10px;
}
#actions {
background-color: #ddd;
padding: 4px;
}
#content {
background-color: #eee;
}
#showheader {
border-bottom: 1px solid #aaa;
}
#showplot, #showfile, #showcomment, #showcast, #torrents, #purchases {
padding: 4px;
text-align: justify;
border-bottom: 1px solid #aaa;
}
#lookup {
padding: 4px;
}
#edit, #borrow, #statistics, #tools, #lookup, #users {
}
.tabActive a:visited,
.tabActive a:link,
.tabActive a:hover {
background-color: #ddd;
color: #000;
}
.tabActive a:hover {
color: #fff;
}
.tabInactive a:visited,
.tabInactive a:link,
.tabInactive a:hover {
background-color: #aaa;
color: #fff;
}
.tabInactive a:hover {
background-color: #ddd;
}
.button {
padding-top: 1px;
padding-bottom: 1px;
padding-right: 3px;
padding-left: 3px;
}
.dropcap:first-letter {
}
.listeven {
background-color: #fff;
clear: both;
}
.listodd {
background-color: #eee;
clear: both;
}
.listdivider {
clear: both;
}
.listcell {
float: left;
}
.lent {
background-color: #fcc;
}
.wanted {
background-color: #ff9;
}
.notavail {
color: #f00;
}
.listeven, .listodd {
border-bottom: 1px dotted #aaa;
}

View File

@@ -0,0 +1,123 @@
<!-- {$smarty.template} -->
<script language="JavaScript" type="text/javascript" src="./javascript/prototype/fancyzoom.js"></script>
{literal}
<script language="JavaScript" type="text/javascript">
Event.observe(document, 'dom:loaded', function() {
zoomdiv = $('ZoomBox');
zoomimg = $('ZoomImage');
if (document.getElementById('ZoomImage').style.webkitBoxShadow || browserIsIE) {
$('ShadowBox').remove();
if (browserIsIE) {
$('ZoomClose').setStyle({top: '0px', left: '-1px'});
// IE doesn't do transparent PNGs
$('ZoomClose').down('img').src = {/literal}'{$template}images/fancyzoom/closebox.gif'{literal};
}
}
$$('a').each(function(el) {
if (el.getAttribute("rel") == "zoom") {
// store target in object
var eventManager = {
theTarget: el,
click: function(event) {
zoomClick(this.theTarget, event);
if (event) Event.stop(event);
},
preload: function(event) {
zoomPreload(this.theTarget);
}
};
// bind click event to object methods
el.observe('click', eventManager.click.bind(eventManager));
el.observe('mouseover', eventManager.preload.bind(eventManager));
}
});
});
</script>
{/literal}
{literal}
<style>
#ZoomBox {
position: absolute;
z-index: 499;
visibility: hidden;
}
#ZoomClose {
position: absolute;
left: -15px;
top: -15px;
width:30px;
height:30px;
border:0;
cursor: pointer;
}
#ZoomImage {
border: 0;
cursor: pointer;
}
#ShadowBox {
position: absolute;
z-index: 498;
visibility: hidden;
}
#ZoomCapDiv {
position: absolute;
margin-left: 13px;
margin-right: 13px;
visibility: hidden;
}
#ZoomCapDiv td {
vertical-align: middle;
}
#ZoomCaption {
valign: middle;
fontSize: 14px;
fontFamily: Helvetica;
fontWeight: bold;
color: #ffffff;
textShadow: 0px 2px 4px #000000;
whiteSpace: nowrap;
}
#ZoomSpin {
position: absolute;
visibility: hidden;
}
/* fix for xhtml strict - otherwise img is inline and has a margin */
#ZoomBox img, #ShadowBox img, #ZoomCapDiv img {
display: block;
}
a[rel=zoom] img {
border: 0;
}
</style>
{/literal}
<div id="ZoomBox">
<a href="javascript:zoomOut();"><img src="{$template}images/fancyzoom/spacer.gif" id="ZoomImage"/></a>
<div id="ZoomClose">
<a href="javascript:zoomOut();"><img src="{$template}images/fancyzoom/closebox.png" width="30" height="30" border="0"></a>
</div>
</div>
<div id="ZoomCapDiv">
<table border="0" cellpadding="0" cellspacing="0">
<tr height="26">
<td><img src="{$template}images/fancyzoom/zoom-caption-l.png" width="13" height="26"></td>
<td background="{$template}images/fancyzoom/zoom-caption-fill.png"><div id="ZoomCaption">Caption</div></td>
<td><img src="{$template}images/fancyzoom/zoom-caption-r.png" width="13" height="26"></td>
</tr>
</table>
</div>
<div id="ShadowBox">
<table width="100%" height="100%" cellspacing="0" cellpadding="0" border="0">
<tr style="height: 25px;"><td style="width: 27px;"><img width="27" height="25" src="{$template}images/fancyzoom/zoom-shadow1.png"/></td><td background="{$template}images/fancyzoom/zoom-shadow2.png"><img width="1" height="1" src="{$template}images/fancyzoom/spacer.gif"/></td><td style="width: 27px;"><img width="27" height="25" src="{$template}images/fancyzoom/zoom-shadow3.png"/></td></tr>
<tr><td background="{$template}images/fancyzoom/zoom-shadow4.png"><img width="1" height="1" src="{$template}images/fancyzoom/spacer.gif"/></td><td bgcolor="#ffffff"><img width="1" height="1" src="{$template}images/fancyzoom/spacer.gif"/></td><td background="{$template}images/fancyzoom/zoom-shadow5.png"><img width="1" height="1" src="{$template}images/fancyzoom/spacer.gif"/></td></tr>
<tr style="height: 26px;"><td style="width: 27px;"><img width="27" height="26" src="{$template}images/fancyzoom/zoom-shadow6.png"/></td><td background="{$template}images/fancyzoom/zoom-shadow7.png"><img width="1" height="1" src="{$template}images/fancyzoom/spacer.gif"/></td><td style="width: 27px;"><img width="27" height="26" src="{$template}images/fancyzoom/zoom-shadow8.png"/></td></tr>
</table>
</div>
{*<div id="ZoomSpin"><img src="{$template}images/fancyzoom/ajax-loader.gif"/></div>*}

View File

@@ -0,0 +1,43 @@
{*
The filters on top of the browse page
$Id: filters.tpl,v 1.17 2009/03/26 11:17:17 andig2 Exp $
*}
<!-- {$smarty.template} -->
<script language="JavaScript" type="text/javascript" src="{$template}js/index.js"></script>
<div id="filters">
<form action="index.php" id="browse" name="browse">
{if $listcolumns AND $moreless}
<div id="filtersmoreless">
<span id="indicator1" style="display:none"><img src="{$template}images/spinner.gif" alt="{$lang.working}" /></span>
<a href="index.php?listcolumns={math equation="{if $listcolumns gt 1}columns-1{else}1{/if}" columns=$listcolumns}" listcolumns="{$listcolumns}" id="columns_less"><img src="{$template}images/minus2.png" class="button" /></a>
<a href="index.php?listcolumns={math equation="columns+1" columns=$listcolumns}" id="columns_more"><img src="{$template}images/plus2.png" class="button" /></a>
</div>
{/if}
<div id="filtersalphabet">
{html_radios name=filter options=$filters checked=$filter class="radio"}
<input type="checkbox" name="showtv" id="showtv" value="1" {if $showtv}checked="checked"{/if} /><label for="showtv">{$lang.radio_showtv}</label>
&nbsp;<label for="quicksearch">{$lang.quicksearch}:</label>
<input type="text" class="autoenable" {*disabled="disabled" *}name="quicksearch" id="quicksearch" autocomplete="off" value="{$lang.search}" onblur="clearInput('quicksearch', '{$lang.search}')" onfocus="clearInput('quicksearch', '{$lang.search}')"/>
<div id="item_choices" class="autocomplete" style="display:none"></div>
{if !empty($owners)}{html_options name=owner id=owner options=$owners selected=$owner}{/if}
{html_options name="mediafilter" id="mediafilter" options=$mediafilter selected=$mediatype}
{if !empty($order_options)}
<span style="font-weight:bold">{$lang.order}:</span>{html_options name="order" id="order" options=$order_options selected=$order}
{/if}
<input type="image" name="submit" src="{$template}images/search.gif" alt="{$lang.search}" align="absmiddle" />
</div>
</form>
</div>
<!-- /filters -->

View File

@@ -0,0 +1,52 @@
{*
This is the footer which is displayed on bottom of every page
$Id: footer.tpl,v 1.7 2008/10/19 10:45:28 andig2 Exp $
*}
<!-- {$smarty.template} -->
<div id="footer" style="clear:both;">
<div id="footerimage">
{if !empty($pdf)}
<a href="{$pdf}export=pdf&amp;ext=.pdf"><img src="images/pdfexport.png" /></a>
{/if}
{if !empty($xls)}
<a href="{$xls}export=xls&amp;ext=.xls"><img src="images/xlsexport.png" /></a>
{/if}
{if !empty($xml)}
<a href="{$xml}export=xml" target="_blank"><img src="images/xmlexport.png" /></a>
{/if}
{if !empty($rss)}
<a href="{$rss}export=rss" target="_blank"><img src="images/rssexport.png" /></a>
{/if}
</div>
<div id="footerversion">
<a href="https://github.com/andig/videodb.git">v{$version|strip|replace:"_":"."}</a>
</div>
<div id="footerpages">
<a href="#top"><img src="images/top.gif" alt=""/></a>
{if !empty($pageno) && !empty($maxpageno)}
{if $pageno != 1}<a href="?pageno={$pageno-1}">&#171;</a>{/if}
Page <span id="pageno">{$pageno}</span> of <span id="maxpageno">{$maxpageno}</span>
{if $pageno != $maxpageno}<a href="?pageno={$pageno+1}">&#187;</a>{/if}
&nbsp;
{/if}
{if !empty($totalresults)}<span id="count">{$totalresults}</span> {$lang.records}.{/if}
</div>
{*
{if $loggedin}<span> {$lang.loggedinas} {$loggedin}</span>{/if}
*}
</div>
<!-- /footer -->
</div>
<!-- /container -->
{$DEBUG}
</body>
</html>

View File

@@ -0,0 +1,48 @@
{literal}
<style>
.fullsize-icon {
position: absolute;
margin: 0;
padding: 0;
width: 30px;
height: 30px;
background: transparent url(/videodb/javascript/fullsize/fullsize-icon.png) no-repeat left top;
z-index: 950;
cursor: hand, auto;
}
</style>
<script language="JavaScript" type="text/javascript">
Event.observe(document, 'dom:loaded', function() {
$$('img.canzoom').each(function(el) {
postop = el.positionedOffset().top + 5; //+ parseInt(el.getStyle('margin-top').slice(0,-2));
posleft = el.positionedOffset().left + 5;
icon = new Element('div').addClassName('fullsize-icon').setStyle({display: 'none', top: postop+'px', left: posleft+'px'}); // , border: '1px solid red'
icon.srcimage = el;
document.body.appendChild(icon);
icon.observe('click', function(e) {
zoomClick(this.srcimage, e);
});
el.writeAttribute({href: el.readAttribute('targetimg')});
el.icon = icon;
el.observe('mouseenter', function(e) {
this.icon.appear({duration: 0.3});
});
el.observe('mouseleave', function(e) {
mouseX = Event.pointerX(e);
mouseY = Event.pointerY(e);
el = document.elementFromPoint(mouseX, mouseY);
if (el != this.icon) {
this.icon.fade({duration: 0.3});
}
});
});
});
</script>
{/literal}

View File

@@ -0,0 +1,21 @@
{assign var="chs" value=""}
{assign var="chl" value=""}
{foreach item=row from=$stats.count_genre}
{assign var="rowname" value=$row.name}
{assign var="rowcount" value=$row.count}
{assign var="rowid" value=$row.id}
{if $chs}{assign var="chs" value=$chs|cat:","}{/if}
{if $chl}{assign var="chl" value=$chl|cat:"|"}{/if}
{assign var="chs" value=$chs|cat:"$rowcount.0"}
{assign var="chl" value=$chl|cat:$rowname}
{/foreach}
CHS:{$chs}
CHL:{$chl}
http://chart.apis.google.com/chart?cht=p3&chd=s:hW&chs={$chs}&chl={$chl}
<img src="http://chart.apis.google.com/chart?cht=p3&chd=t:{$chs}&chl={$chl}" />

View File

@@ -0,0 +1,602 @@
/**
* Grey style sheet
*
* $Id: grey.css,v 1.24 2013/03/14 17:16:36 andig2 Exp $
*/
/*
* Defaults
*/
body {
font-family: Tahoma, Verdana, sans serif;
font-size: 12px;
margin: 0px;
padding: 0px;
background-color: #f8f8f8;
color: #000;
}
form, ul {
margin: 0px;
}
a:link, a:visited, a:active {
text-decoration: none;
color: #000;
}
a:hover {
text-decoration: underline;
color: rgb(255,102,0);
}
table.collapse {
border-collapse : collapse;
}
tr {
vertical-align: top;
}
td { /* this fixes a problem with opera */
vertical-align: top;
text-align: left;
}
img {
border: 0px;
}
input, textarea, select {
font-size: 12px;
}
h3, h4 { /* bold font, usually in action section */
font-size: 12px;
font-weight: bold;
margin: 0px;
}
h4 { /* used on edit page */
font-weight: normal;
display: inline;
}
/*
* divs
*/
#container {
padding: 2px 8px 10px 8px;
}
#logo {
text-align: right;
float: right;
}
#logotitle, #logotitle a {
font: bold 20px trebuchet ms, arial, helvetica, sans-serif;
text-decoration: none;
}
#logohelp, #logologin, #logoprofile, #logoversion {
display: inline;
}
.logodivider {
margin: 0px 0px 0px 3px;
}
#header {
}
#headernav {
margin: 26px 0px 4px 0px;
padding: 0px;
}
#headernav li {
display: inline;
list-style-type: none;
}
#headernav2 li {
display: inline;
list-style-type: none;
font-size: 11px;
font-weight: normal;
}
#headernav2 li:before { content: "| "; }
#headernav2 li:first-child:before { content: ""; }
/*IE workaround*/
/*All IE browsers*/
* html #headernav2 li
{
border-left: 1px solid black;
padding: 0 0.4em 0 0.4em;
margin: 0 0.4em 0 -0.4em;
}
/*prevent first |*/
* html #headernav2 li
{
display: block;
float: left;
}
/*end workaround*/
#headerhelp, #headerlogin, #headerprofile {
display: none;
}
#filters {
padding: 2px 0px 4px 0px;
background-color: #ddd;
font-size: 11px;
text-transform: capitalize;
}
#filtersmoreless {
float: right;
padding: 3px 4px 0px 0px;
}
#filtersmoreless img.button {
padding: 1px;
background-color: white;
border: none;
}
#quicksearch:hover {
color: #000000;
}
#quicksearch {
background: url(images/search_grey.gif) no-repeat scroll 0px;
color: #BBB;
padding-left: 17px;
}
#footer {
background-color: #ddd;
font-size: 10px;
height: 19px;
padding: 2px;
}
#footerpages {
padding: 3px;
}
#footerversion {
float: right;
padding: 3px;
display: none;
}
#footerimage {
float: right;
padding: 2px;
}
#topspacer, #topspacer2 {
background-color: #ddd;
height: 10px;
}
#topspacer2 {
height: 25px;
}
#actions {
background-color: #ddd;
padding: 4px;
}
#actionsspacer {
display: none;
}
#actionsbuttons {
}
#actions form, #actions h3 {
display: inline;
}
#actions div {
display: inline;
}
#content {
background-color: #eee;
}
#showheader {
border-bottom: 1px solid #aaa;
}
#showheader h1 {
font-size: 22px;
font-weight: bold;
margin: 0px;
}
#showheader h2 {
font-size: 18px;
font-weight: bolder;
margin: 0px;
}
#showimage {
float: left;
padding: 5px;
}
#showplot, #showfile, #showcomment, #showcast {
padding: 4px;
text-align: justify;
}
#showfile, #showcomment, #showcast {
border-bottom: 1px dotted #aaa;
}
#lookup {
padding: 4px;
}
#editbuttons {
position: absolute;
top: 46px;
right: 8px;
float: right;
font-size: 12px;
padding: 3px 90px 0px 0px;
margin: 0px;
}
#permissionbuttons {
position: absolute;
top: 48px;
right: 8px;
float: right;
font-size: 12px;
padding: 3px 4px 0px 0px;
margin: 0px;
}
#savebutton {
position: absolute;
top: 5px;
right: 4px;
}
#searchimage {
float: right;
}
#edit, #borrow, #statistics, #tools, #lookup, #users, #permissions, #contentlogin {
}
#borrow {
padding: 4px;
}
/*
* classes
*/
.tabActive a:visited,
.tabActive a:link,
.tabActive a:hover,
.tabInactive a:visited,
.tabInactive a:link,
.tabInactive a:hover {
font-size: 11px;
font-weight: bold;
margin: 4px 0px 0px 0px;
padding: 3px 6px 4px 6px;
text-decoration: none;
text-transform: capitalize;
white-space: nowrap;
}
.tabActive a:visited,
.tabActive a:link,
.tabActive a:hover {
background-color: #ddd;
color: #000;
}
.tabActive a:hover {
color: #fff;
}
.tabInactive a:visited,
.tabInactive a:link,
.tabInactive a:hover {
background-color: #aaa;
color: #fff;
}
.tabInactive a:hover {
background-color: #ddd;
}
.right {
text-align: right;
}
.center {
text-align: center;
}
.clear {
clear: both;
}
.button {
padding-top: 1px;
padding-bottom: 1px;
padding-right: 3px;
padding-left: 3px;
border: 1px solid #aaa;
background: #eee;
cursor: hand;
}
.dropcap:first-letter {
}
.listeven {
background-color: #fff;
clear: both;
}
.listodd {
background-color: #eee;
clear: both;
}
.listdivider {
clear: both;
}
.listcell {
float: left;
}
.optionseven, .optionsodd {
border-bottom: 1px dotted #aaa;
padding: 4px;
}
.optionsleft {
float: left;
width: 25%;
text-align: center;
}
.optionsright {
float: right;
width: 75%;
text-align: left;
}
.lent {
background-color: #fcc;
}
.wanted {
background-color: #ff9;
}
.notavail {
font-weight: bold;
color: #f00;
}
.listeven, .listodd {
border-bottom: 1px dotted #aaa;
}
.list_title, .list_diskid {
font-size: 12px;
font-weight: bold;
}
.list_info, .list_seen, .list_plot {
font-size: 11px;
}
.list_info {
font-style: italic;
}
.list_plot a {
font-weight: bold;
}
.list_item_buttons form {
display: inline;
}
.list_item_more {
float: right;
}
.list_diskid, .list_language, .list_seen, .list_item_buttons {
text-align: right;
}
.list_language {
margin-top: 2px;
margin-left: 2px;
}
.list_episode {
padding: 2px;
}
/*
* Images
*/
.cover {
margin: 0px 4px 0px 0px;
}
.thumb {
float: left;
margin: 0px 2px 1px 0px;
}
/* setup screenshot thumbnails */
.setup-thumb {
float: left;
width: 105px;
text-align: center;
border: 1px solid #999;
margin: 0 15px 15px 0;
padding: 5px;
}
.setup-thumb a:hover {
text-decoration: none;
}
/* lookup thumbnail formatting */
.thumbnail {
float: left;
margin: 5px;
}
#purchasecontent .thumbnail {
width: 300px;
background-color: #fff;
color: #000;
}
.img-shadow {
float: left;
background: url(images/shadowalpha.png) no-repeat bottom right !important;
background: url(images/shadow.gif) no-repeat bottom right;
margin: 10px 0 0 10px !important;
margin: 10px 0 0 5px;
}
.img-shadow img {
display: block;
position: relative;
background-color: #fff;
border: 1px solid #a9a9a9;
margin: -8px 6px 6px -8px !important;
margin: -8px 6px 6px -4px;
padding: 1px;
}
/*
* Ajax Stuff
*/
.hidden {
display: none;
}
div.autocomplete {
position:absolute;
width:250px;
background-color:white;
border:1px solid #ccc;
border-width: 1px 0 0 0;
margin:0px;
padding:0px;
opacity:0.90;
}
div.autocomplete ul {
list-style-type:none;
margin:0px;
padding:0px;
}
div.autocomplete ul li {
list-style-type:none;
display:block;
margin:0;
padding:2px;
border: 1px solid #ccc;
border-width: 0 1px 1px 1px;
cursor:pointer;
}
div.autocomplete ul li.selected {
background: #4173CC;
color: #fff;
}
div.autocomplete ul li em {
font-weight: bold;
font-style: normal;
background: #ccc;
}
div.autocomplete ul li.selected em {
background: none;
}
/* Rating */
.rating_container {
white-space: nowrap;
clear: both;
display: inline;
}
.rating_container a {
float:left;
display:block;
width:20px;
height:20px;
border:0;
}
.rating_container a.rating_off {
background-image:url("images/starempty.gif");
}
.rating_container a.rating_half {
background-image:url("images/starhalf.gif");
}
.rating_container a.rating_on {
background-image:url("images/starfull.gif");
}
.rating_container a.rating_selected {
background-image:url("images/starselected.gif");
}
/* Image lookup */
#images, #images .thumbnail a {
background-color: #aaa;
color: #fff;
}
#images2 {
padding: 5px 5px 0px 5px;
}
/*
* Help Browser
*/
.helpbrowser code {font-family: monospace; color: #044;}
.helpbrowser td th {background-color: #eee;}
.helpbrowser h1 {text-align: center; font-size: 15pt; font-weight: bolder; margin-top: 0px}
.helpbrowser h2 {margin-left: 10px; font-size: 13pt; font-weight: bolder;}
.helpbrowser h3 {margin-left: 30px; font-size: 11pt; font-weight: bolder; font-variant: small-caps}
.helpbrowser p {text-align: justify; margin-left: 50px; width: 90%}
.helpbrowser pre {margin-left: 50px; font-family: monospace; color: #044;}
.helpbrowser table ul dl {margin-left: 50px; width: 90%}
.helpbrowser dd {margin-bottom: 10px;}

View File

@@ -0,0 +1,50 @@
{*
This is the header which is displayed on top of every page
$Id: header.tpl,v 1.6 2008/02/17 17:44:54 andig2 Exp $
*}
{include file="xml.tpl"}
<body>
<!-- {$smarty.template} -->
<a name="top"></a>
<div id="container">
<div id="logo">
<div id="logotitle">
<a href="https://github.com/andig/videodb.git">videoDB</a>
</div>
<ul id="headernav2">
{if !empty($header.login)}<li><div id="logologin"><a href="{$header.login}">{if !empty($loggedin)}{$lang.logout}{else}{$lang.login}{/if}</a>
{if !empty($loggedin)}({$lang.loggedinas} {$loggedin}){/if}</div></li>{/if}
{if !empty($header.profile)}<li><div id="logoprofile"><a href="{$header.profile}">{$lang.profile}</a></div></li>{/if}
{if !empty($header.help)}<li><div id="logohelp"><a href="{$header.help}">{$lang.help}</a></div></li>{/if}
<li><div id="logoversion"><a href="https://github.com/andig/videodb.git">v{$version|strip|replace:"_":"."|replace:" ":""}</a></div></li>
</ul>
</div>
<!-- /logo -->
<div id="header">
<ul id="headernav">
{if !empty($header.browse)}<li class="{if $header.active == 'browse'}tabActive{else}tabInactive{/if}"><a href="{$header.browse}{if !empty($browseid)}#{$browseid}{/if}" accesskey="i">{$lang.browse}</a></li>{/if}
{if !empty($header.trace)}<li class="{if $header.active == 'trace'}tabActive{else}tabInactive{/if}"><a href="{$header.trace}">{$lang.imdbbrowser}</a></li>{/if}
{if !empty($header.random)}<li class="{if $header.active == 'random'}tabActive{else}tabInactive{/if}"><a href="{$header.random}">{$lang.random}</a></li>{/if}
{if !empty($header.search)}<li class="{if $header.active == 'search'}tabActive{else}tabInactive{/if}"><a href="{$header.search}">{$lang.search}</a></li>{/if}
{if !empty($header.new)}<li class="{if $header.active == 'new'}tabActive{else}tabInactive{/if}"><a href="{$header.new}" accesskey="n">{$lang.n_e_w}</a></li>{/if}
{if $header.active == 'show'}<li class="tabActive">{if !empty($header.request_uri)}<a href="{$header.request_uri}"> {/if} {$lang.view}</a></li> {/if}
{if $header.active == 'edit'}<li class="tabActive"><a href="{$header.edit}">{$lang.edit}</a></li> {/if}
{if !empty($header.borrow)}<li class="{if $header.active == 'borrow'}tabActive{else}tabInactive{/if}"><a href="{$header.borrow}">{$lang.borrow}</a></li>{/if}
{if !empty($header.stats)}<li class="{if $header.active == 'stats'}tabActive{else}tabInactive{/if}"><a href="{$header.stats}">{$lang.statistics}</a></li>{/if}
{if !empty($header.contrib)}<li class="{if $header.active == 'contrib'}tabActive{else}tabInactive{/if}"><a href="{$header.contrib}">{$lang.contrib}</a></li>{/if}
{if !empty($header.setup)}<li class="{if $header.active == 'setup'}tabActive{else}tabInactive{/if}"><a href="{$header.setup}">{$lang.setup}</a></li>{/if}
{if !empty($header.profile)}<li class="{if $header.active == 'profile'}tabActive{else}tabInactive{/if}"><div id="headerprofile"<a href="{$header.profile}">{$lang.profile}</a></div></li>{/if}
{if !empty($header.help)}<li class="{if $header.active == 'help'}tabActive{else}tabInactive{/if}"><div id="headerhelp"><a href="{$header.help}">{$lang.help}</a></div></li>{/if}
{if !empty($header.login)}<li class="{if $header.active == 'login'}tabActive{else}tabInactive{/if}"><div id="headerlogin"><a href="{$header.login}">{if !empty($loggedin)}{$lang.logout}{else}{$lang.login}{/if}</a></div></li>{/if}
</ul>
<!-- /headernav -->
</div>
<!-- /header -->

View File

@@ -0,0 +1,14 @@
{*
The help template
$Id: help.tpl,v 1.2 2005/05/22 10:29:57 andig2 Exp $
*}
<!-- {$smarty.template} -->

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.0" width="300" height="73" id="svg1901">
<defs id="defs1903">
<clipPath id="clipPath3318">
<rect width="61.964287" height="61.964287" rx="23.75" ry="23.75" x="82.142853" y="127.36217" style="opacity: 0.696; fill: none; fill-opacity: 1; stroke: rgb(0, 0, 0); stroke-width: 1.5; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="rect3320"/>
</clipPath>
<clipPath id="clipPath3322">
<rect width="61.964287" height="61.964287" rx="23.75" ry="23.75" x="82.142853" y="127.36217" style="opacity: 0.696; fill: none; fill-opacity: 1; stroke: rgb(0, 0, 0); stroke-width: 1.5; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="rect3324"/>
</clipPath>
<clipPath id="clipPath3326">
<rect width="61.964287" height="61.964287" rx="23.75" ry="23.75" x="82.142853" y="127.36217" style="opacity: 0.696; fill: none; fill-opacity: 1; stroke: rgb(0, 0, 0); stroke-width: 1.5; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="rect3328"/>
</clipPath>
</defs>
<g style="opacity: 1;" id="layer1">
<rect width="61.964287" height="61.964287" rx="23.75" ry="23.75" x="6.4285669" y="5.9335957" style="opacity: 1; fill: rgb(14, 143, 19); fill-opacity: 1; stroke: none; stroke-width: 1.5; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="rect3330"/>
<path d="M 106.59741,32.174729 L 113.06926,32.174729 L 113.06926,57.214729 L 106.59741,57.214729 L 106.59741,32.174729 M 106.59741,23.200619 L 113.06926,23.200619 L 113.06926,29.868569 L 106.59741,29.868569 L 106.59741,23.200619 M 124.73186,23.127349 L 124.73186,32.621159 L 131.67256,32.621159 L 131.67256,38.467029 L 124.73186,38.467029 L 124.73186,47.349589 C 124.79487,49.722939 126.47553,50.785559 127.77338,50.743849 L 131.82408,50.743849 L 131.82408,57.214729 L 126.54464,57.214729 C 121.17802,57.303999 117.79349,52.423599 117.79349,47.081729 L 117.79349,23.127349 M 77.632044,23.306219 L 90.538984,23.306219 C 93.093924,23.306259 94.995454,23.421749 96.243594,23.652679 C 100.45905,24.430329 102.92157,28.534269 103.09352,31.829149 C 103.26529,35.120589 101.92794,37.404249 100.07413,39.174119 C 101.44643,40.340439 103.39143,42.895179 103.39364,47.350579 C 103.39586,51.805979 100.65138,56.160779 95.771574,56.935999 C 94.684964,57.059179 92.778224,57.136179 88.622754,57.166969 L 77.632044,57.166969 L 77.632044,23.306219 M 84.478494,29.566979 L 84.478494,36.771989 L 87.783244,36.771989 C 90.172564,36.772009 91.657264,36.736589 92.237344,36.665719 C 93.286984,36.538219 94.108744,36.169819 94.702644,35.560529 C 95.310314,34.937109 95.614164,34.122379 95.614184,33.116359 C 95.614164,32.152879 95.351754,31.373569 94.826954,30.778449 C 94.315914,30.169189 93.549394,29.800799 92.527394,29.673249 C 91.919674,29.602429 90.172564,29.567009 87.286044,29.566979 L 84.478494,29.566979 M 84.478494,43.032749 L 84.478494,50.747629 L 89.187504,50.747629 C 91.284584,50.747639 92.614914,50.688589 93.178524,50.570509 C 94.043544,50.413059 94.744774,50.032579 95.282164,49.429009 C 95.832624,48.812359 96.107864,47.992329 96.107884,46.968909 C 96.107864,46.102959 95.898154,45.368219 95.478764,44.764649 C 95.059324,44.161129 94.449864,43.721589 93.650364,43.446049 C 92.863944,43.170529 91.146964,43.032759 88.499404,43.032749 L 84.478494,43.032749" style="font-size: 43.8754px; font-style: normal; font-weight: bold; opacity: 1; fill: rgb(14, 143, 19); fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: DejaVu Sans Condensed;" id="text2218"/>
<path d="M 130.56223,23.068893 L 157.10046,23.068893 L 157.10046,29.711942 L 147.56126,29.711942 L 147.56126,57.151622 L 140.12285,57.151622 L 140.12285,29.711942 L 130.56223,29.711942 L 130.56223,23.068893" style="font-size: 45.3047px; font-style: normal; font-weight: bold; fill: rgb(102, 102, 102); fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: DejaVu Sans Condensed;" id="text3228"/>
<path d="M 187.69196,31.977679 C 184.81064,31.977679 182.15136,33.597079 180.91071,35.602679 C 179.67006,37.608279 179.44196,39.690689 179.44196,41.477679 L 179.44196,57.008929 L 186.44196,57.008929 L 186.44196,41.477679 C 186.44196,40.498899 186.69758,39.584209 186.87946,39.290179 C 187.06134,38.996149 186.79915,38.977679 187.69196,38.977679 L 194.62946,38.977679 L 194.62946,31.977679 L 187.69196,31.977679 z " style="opacity: 1; fill: rgb(102, 102, 102); fill-opacity: 1; stroke: none; stroke-width: 7; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="path3237"/>
<path d="M 204.62946,31.977679 C 201.74814,31.977679 199.12011,33.597079 197.87946,35.602679 C 196.63881,37.608279 196.41071,39.690689 196.41071,41.477679 L 196.41071,57.008929 L 203.41071,57.008929 L 203.41071,41.477679 C 203.41071,40.498899 203.66633,39.584209 203.84821,39.290179 C 204.03009,38.996149 203.73664,38.977679 204.62946,38.977679 L 211.59821,38.977679 L 211.59821,31.977679 L 204.62946,31.977679 z " style="opacity: 1; fill: rgb(102, 102, 102); fill-opacity: 1; stroke: none; stroke-width: 7; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="path3240"/>
<path d="M 276.16044,23.127349 L 276.16044,32.621159 L 283.10114,32.621159 L 283.10114,38.467029 L 276.16044,38.467029 L 276.16044,47.349589 C 276.22345,49.722939 277.90411,50.785559 279.20196,50.743849 L 283.25266,50.743849 L 283.25266,57.214729 L 277.97322,57.214729 C 272.6066,57.303999 269.22207,52.423599 269.22207,47.081729 L 269.22207,23.127349" style="font-size: 43.8754px; font-style: normal; font-weight: bold; opacity: 1; fill: rgb(102, 102, 102); fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: DejaVu Sans Condensed;" id="path3250"/>
<path d="M 160.97321,31.883929 C 155.43439,31.883929 150.87946,36.470109 150.87946,42.008929 L 150.87946,47.727679 C 150.87946,53.266499 155.43439,57.821429 160.97321,57.821429 L 166.44196,57.821429 C 171.98078,57.821429 176.5357,53.266499 176.53571,47.727679 L 176.53571,42.008929 C 176.53571,36.470109 171.98078,31.883929 166.44196,31.883929 L 160.97321,31.883929 z M 160.97321,38.883929 L 166.44196,38.883929 C 168.22386,38.883929 169.53571,40.227029 169.53571,42.008929 L 169.53571,47.727679 C 169.53571,49.509579 168.22386,50.821429 166.44196,50.821429 L 160.97321,50.821429 C 159.19131,50.821429 157.87946,49.509579 157.87946,47.727679 L 157.87946,42.008929 C 157.87946,40.227029 159.19131,38.883929 160.97321,38.883929 z " style="opacity: 1; fill: rgb(102, 102, 102); fill-opacity: 1; stroke: none; stroke-width: 7; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="rect3257"/>
<path d="M 220.12946,42.008929 L 231.78571,42.008929 C 231.78571,40.227029 230.47388,38.883929 228.69196,38.883929 L 223.22321,38.883929 C 221.44131,38.883929 220.12946,40.227029 220.12946,42.008929 z M 231.78571,47.727679 L 220.12946,47.727679 C 220.12946,49.509579 221.44131,50.821429 223.22321,50.821429 L 234.75288,50.821429 L 234.75288,57.821429 L 223.22321,57.821429 C 217.68439,57.821429 213.12946,53.266499 213.12946,47.727679 L 213.12946,42.008929 C 213.12946,36.470109 217.68439,31.883929 223.22321,31.883929 L 228.69196,31.883929 C 234.23078,31.883929 238.78571,36.470109 238.78571,42.008929 L 238.78571,47.727679 L 231.78571,47.727679 z " style="opacity: 1; fill: rgb(102, 102, 102); fill-opacity: 1; stroke: none; stroke-width: 1; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="rect3259"/>
<path d="M 254.16071,31.415179 C 252.19522,31.415179 250.22019,32.003379 248.31696,32.852679 L 248.31696,31.470699 L 241.31696,31.470699 L 241.31696,42.258929 L 241.31696,57.290179 L 248.31696,57.290179 L 248.31696,42.258929 C 248.31696,41.248949 248.798,40.522489 249.97321,39.727679 C 251.14842,38.932869 252.94967,38.415179 254.16071,38.415179 C 255.33036,38.415179 256.83437,38.896439 257.81696,39.665179 C 258.79955,40.433919 259.37946,41.269089 259.37946,42.883929 L 259.37946,57.290179 L 266.37946,57.290179 L 266.37946,42.883929 C 266.37946,39.165929 264.52671,36.009449 262.12946,34.133929 C 259.73221,32.258409 256.89683,31.415179 254.16071,31.415179 z " style="opacity: 1; fill: rgb(102, 102, 102); fill-opacity: 1; stroke: none; stroke-width: 7; stroke-linecap: butt; stroke-miterlimit: 4; stroke-opacity: 1;" id="path3268"/>
<path d="M 282.31118,23.257948 L 287.6102,23.257948 L 287.6102,24.26673 L 285.70546,24.26673 L 285.70546,28.433592 L 284.2202,28.433592 L 284.2202,24.26673 L 282.31118,24.26673 L 282.31118,23.257948 M 288.3721,23.257948 L 290.25971,23.257948 L 291.56948,26.027766 L 292.88781,23.257948 L 294.77115,23.257948 L 294.77115,28.433592 L 293.36721,28.433592 L 293.36721,24.648054 L 292.0446,27.438678 L 291.10293,27.438678 L 289.78031,24.648054 L 289.78031,28.433592 L 288.3721,28.433592 L 288.3721,23.257948" style="font-size: 7.88895px; font-style: normal; font-weight: bold; opacity: 1; fill: rgb(102, 102, 102); fill-opacity: 1; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; font-family: DejaVu Sans Condensed;" id="text3280"/>
<path d="M 113.70536,144.54968 C 93.472023,142.41044 76.151987,174.4551 106.60714,192.63004" transform="translate(-75.7143, -121.429)" style="opacity: 1; fill: none; fill-opacity: 1; stroke: rgb(159, 210, 161); stroke-width: 5; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" clip-path="url(#clipPath3326)" id="path3305"/>
<path d="M 123.03571,152.71932 C 108.25116,145.34211 95.019967,156.63352 96.302302,169.17853 C 97.622258,182.09158 109.5603,192.63229 136.45024,187.80226" transform="translate(-75.7143, -121.429)" style="opacity: 1; fill: none; fill-opacity: 1; stroke: rgb(207, 233, 208); stroke-width: 5; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" clip-path="url(#clipPath3322)" id="path3307"/>
<path d="M 124.76913,162.71932 C 119.86081,153.87951 108.39125,155.13346 104.28571,161.6479 C 101.06775,166.75397 100.51364,179.18764 118.21429,182.18361 C 126.36905,183.35916 138.80953,182.03673 148.39286,180.93361" transform="translate(-75.7143, -121.429)" style="opacity: 1; fill: none; fill-opacity: 1; stroke: rgb(255, 255, 255); stroke-width: 5; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" clip-path="url(#clipPath3318)" id="path3309"/>
<rect width="61.964287" height="61.964287" rx="23.75" ry="23.75" x="6.4285669" y="5.9335957" style="opacity: 1; fill: none; fill-opacity: 1; stroke: rgb(14, 143, 19); stroke-width: 1.5; stroke-linecap: butt; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1;" id="rect3316"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 900 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 941 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 917 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,42 @@
/**
* Enhanced Ajax.Autocompleter with support for parameters array and custom completion code
*/
Ajax.Autocompleter2 = Class.create(Autocompleter.Base, {
initialize: function(element, update, url, options) {
this.baseInitialize(element, update, options);
this.options.asynchronous = true;
this.options.onComplete = this.onComplete.bind(this);
this.options.defaultParams = this.options.parameters || null;
this.url = url;
},
// allow parameters array
getUpdatedChoices: function() {
this.startIndicator();
var entry = encodeURIComponent(this.options.paramName) + '=' +
encodeURIComponent(this.getToken());
this.options.parameters = this.options.callback ?
this.options.callback(this.element, entry) : entry;
if(this.options.defaultParams) {
// if defaultParams is a string, keep as is and don't convert
var defaultParams = Object.isString(this.options.defaultParams) ? this.options.defaultParams : Object.toQueryString(this.options.defaultParams);
this.options.parameters += '&' + defaultParams;
}
new Ajax.Request(this.url, this.options);
},
// allow custom completion code
onComplete: function(request) {
if (this.options.updateContent) {
this.options.updateContent(request);
this.stopIndicator();
}
else this.updateChoices(request.responseText);
}
});

View File

@@ -0,0 +1,110 @@
/**
* Prototype javascript effects for editing
*
* @package Templates
*
* @todo Check if Ajax.Responder could be used
*
* @author Andreas Goetz <cpuidle@gmx.de>
* $Id: edit.js,v 1.10 2009/03/26 22:23:49 andig2 Exp $
*/
/**
* Using global responder to manage indicator handling for multiple requests
*/
Ajax.Responders.register({
onCreate: function() {
if (Ajax.activeRequestCount > 0 && $('indicator1')) {
$('indicator1').setStyle({display: 'inline'});
}
},
onComplete: function() {
if(Ajax.activeRequestCount == 0 && $('indicator1')) {
$('indicator1').setStyle({display: 'none'});
}
}
});
/**
* Title search
*/
function bindTitle()
{
$('title').focus();
// autocompleter is only enabled for new items
if (!$F('imdbID'))
{
new Ajax.Autocompleter("title", "title_choices", "edit.php", {paramName: "ajax_autocomplete_title",
minChars: 3, frequency: 0.8,
afterUpdateElement: function(text, li) {
document.edi.imdbID.value = li.id;
document.edi.lookup1.checked= true;
// start image search
bindImageLookup();
new Ajax.Request('edit.php', {
parameters: {ajax_prefetch_id: li.id},
/*
// inline update
onSuccess: function(transport) {
$('indicator1').setStyle({display: 'none'});
var el = $('u1');
el.update(transport.responseText);
// alert(el.down('div#content',0).innerHTML);
$('content').update(el.down('#content',0).innerHTML);
el.update('');
}
*/
});
}
});
}
}
/**
* Rating
*/
function bindRating(control, control_val, val)
{
var rating = new Control.Rating(control, {updateUrl: false, value: val,
rated: false, multiple: true, max:10, capture: true,
afterChange: function(value) {
$('rating').value = value;
$(control_val).update(value);
rating.options.rated = false;
}
});
}
/**
* Image lookup
*/
function bindImageLookup()
{
if (!$F('title')) return;
new Ajax.Request('lookup.php', {
parameters: {ajax_render: 1, searchtype: 'image', engine: 'google', find: $F('title')},
onSuccess: function(transport, json) {
if (json.count > 0) {
$('imagecontent').update(transport.responseText);
// either img or a
$$('#imagecontent div.thumbnail').invoke('observe', 'click', function(event) {
$('imgurl').value = event.element().readAttribute('url');
Event.stop(event);
});
$('images').setStyle({display: 'block'});
// Effect.BlindDown('images');
}
}
});
}

View File

@@ -0,0 +1,160 @@
/**
* Prototype javascript effects for filtering
*
* @package Templates
* @author Andreas Goetz <cpuidle@gmx.de>
* $Id: index.js,v 1.10 2009/03/26 11:17:21 andig2 Exp $
*/
/**
* Using global responder to manage indicator handling for multiple requests
*/
Ajax.Responders.register({
onCreate: function() {
if (Ajax.activeRequestCount > 0 && $('indicator1')) {
$('indicator1').setStyle({display: 'inline'});
}
},
onComplete: function() {
if(Ajax.activeRequestCount == 0 && $('indicator1')) {
$('indicator1').setStyle({display: 'none'});
}
}
});
/**
* Clean pre-populated text from input controls
*/
function clearInput(id, term_to_clear)
{
el = $(id);
if (el) {
// Clear input if it matches default value
if (el.value == term_to_clear) el.value = '';
// If the value is blank, then put back term
else if (el.value == '') el.value = term_to_clear;
}
}
Event.observe(document, 'dom:loaded', function()
{
/**
* More/less columns
*/
function send_request(event, val) {
$('columns_less').setAttribute('listcolumns', val);
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, listcolumns: val},
onSuccess: function(transport) {
$('content').update(transport.responseText);
}
});
Event.stop(event);
}
$('columns_less').observe('click', function(event) {
var val = $('columns_less').getAttribute('listcolumns');
val = (val > 1) ? val-1 : 1;
send_request(event, val);
});
$('columns_more').observe('click', function(event) {
var val = $('columns_less').getAttribute('listcolumns');
val++;
send_request(event, val);
});
/**
* Render list contents and update item count
*/
function render_list(transport, json) {
$('content').update(transport.responseText);
$('count').update(json.totalresults);
// paged display
if (json.maxpageno) {
$('pageno').update(json.pageno);
$('maxpageno').update(json.maxpageno);
}
}
/**
* Filters
*/
$('showtv').observe('click', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, showtv: ($('showtv').checked) ? 1 : 0},
onSuccess: render_list
});
});
// radio buttons
$$('#filtersalphabet input[type="radio"]').invoke('observe', 'click', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, filter: event.element().value},
onSuccess: render_list
});
});
/*
// seen links
$$('div.list_seen a').invoke('observe', 'click', function(event) {
Event.stop(event);
$('filter'+event.element().readAttribute('filter')).click();
});
*/
/**
* Owner selection
*/
$$('#owner').invoke('observe', 'change', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, owner: $F('owner')},
onSuccess: render_list
});
});
/**
* Media selection
*/
$$('#mediafilter').invoke('observe', 'change', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, mediafilter: $F('mediafilter')},
onSuccess: render_list
});
});
/**
* Order selection
*/
$$('#order').invoke('observe', 'change', function(event) {
new Ajax.Request('index.php', {
parameters: {ajax_render: 1, order: $F('order')},
onSuccess: render_list
});
});
/**
* Quicksearch
*/
$('quicksearch').focus();
new Ajax.Autocompleter("quicksearch", "item_choices", "index.php", {paramName: "ajax_quicksearch",
minChars: 1, frequency: 0.2,
afterUpdateElement: function(text, li) {
document.location = 'show.php?id='+li.id;
}
});
/**
* Enable disabled controls
*/
// $$('.autoenable').invoke('writeAttribute', {disabled: false});
// $('quicksearch').writeAttribute({disabled: false});
});

View File

@@ -0,0 +1,94 @@
/**
* Prototype javascript effects for searching
*
* @package Templates
* @author Andreas Goetz <cpuidle@gmx.de>
* $Id: search.js,v 1.8 2009/04/04 16:26:30 andig2 Exp $
*/
Event.observe(document, 'dom:loaded', function()
{
/**
* Quicksearch
*/
$('q').focus();
// Ajax.Autocompleter2 allows passing in complex search parameters like arrays
new Ajax.Autocompleter("q", "item_choices", "search.php", {
minChars: 2, indicator: 'indicator1', frequency: 0.2,
parameters: collect_parameters({ajax_quicksearch: 1}),
afterUpdateElement: function(text, li) {
document.location = 'show.php?id=' + li.id;
}
});
/**
* Collect form parameters for search fields and genres
*/
function collect_parameters(parameters)
{
var res = Object.toQueryString(parameters);
// owner
if ($('owner')) {
res += '&owner=' + $F('owner');
}
// genres
$$('#genres input').each(function(el) {
if (el.checked) {
res += '&genres[]=' + el.value;
}
});
// fields
$$('#fields option').each(function(el) {
if (el.selected) {
res += '&fields[]=' + el.value;
}
});
return res;
}
/**
* Create submit request
*/
function submit_form(event)
{
// if (!$F('q')) return;
$('indicator1').setStyle({display: 'inline'});
new Ajax.Request('search.php', {
parameters: collect_parameters({ajax_render: 1, q: $F('q')}),
onSuccess: function(transport, json) {
$('indicator1').setStyle({display: 'none'});
$('content').update(transport.responseText);
$('count').update(json.count);
}
});
}
/**
* Search fields
*/
$$('#fields option').invoke('observe', 'click', submit_form);
// toggle all
$('select_all').observe('click', function() {
selectAllFields();
submit_form();
});
/**
* Genres
*/
$$('#genres input').invoke('observe', 'change', submit_form);
/**
* Owner selection
*/
$$('#owner').invoke('observe', 'change', submit_form);
});

View File

@@ -0,0 +1,152 @@
/**
* Prototype javascript effects for showing
*
* @package Templates
* @author Andreas Goetz <cpuidle@gmx.de>
* $Id: show.js,v 1.5 2009/04/04 16:26:30 andig2 Exp $
*/
/**
* Toggle element's visibility
*/
function toggler(el)
{
if ($(el).style.display == 'block')
$(el).setStyle({display: 'none'});
else
$(el).setStyle({display: 'block'});
}
/**
* Using global responder to manage indicator handling for multiple requests
*/
Ajax.Responders.register({
onCreate: function() {
if (Ajax.activeRequestCount > 0 && $('indicator1')) {
$('indicator1').setStyle({display: 'inline'});
}
},
onComplete: function() {
if(Ajax.activeRequestCount == 0 && $('indicator1')) {
$('indicator1').setStyle({display: 'none'});
}
}
});
/**
* Seen
*/
function bindSeen(id)
{
$('seen').observe('click', function(event) {
new Ajax.Request('show.php', {
parameters: {ajax_update: id, seen: ($('seen').checked) ? 1 : 0},
onSuccess: function(transport, json) {
$('seen').checked = json.result;
$('seen_label').setStyle({display: (json.result) ? 'inline' : 'none'});
}
});
});
}
/**
* Rating
*/
function bindRating(id, url, control, control_val, val, editable)
{
var rating = new Control.Rating(control, {updateUrl: url, updateParameterName: 'rating', value: val,
rated: false, multiple: true, max:10, capture: true,
parameters: {ajax_update: id},
afterChange: function(value) {
$(control_val).update(value);
this.options.rated = false;
}.bind(this)
});
if (!editable) rating.disable();
}
/**
* Youtube
*/
function bindYoutube(title)
{
new Ajax.Request('lookup.php', {
parameters: {ajax_render: 1, searchtype: 'trailer', engine: 'youtube', find: title},
onSuccess: function(transport, json) {
if (json.count > 0) {
$('youtube').setStyle({display: 'inline'});
}
}
});
}
/**
* Purchase
*/
function bindPurchase(title, engines)
{
engines.each(function(e)
{
new Ajax.Request('lookup.php', {
parameters: {ajax_render: 1, searchtype: 'purchase', engine: e, find: title},
onSuccess: function(transport, json) {
if (json.count > 0) {
$('purchase').setStyle({display: 'inline'});
$('purchasecontent').insert(transport.responseText);
// $('images').setStyle({display: 'block'});
// Effect.BlindDown('images');
}
}
});
});
}
/**
* Torrent
*/
function bindTorrent(title, engines)
{
engines.each(function(e)
{
new Ajax.Request('lookup.php', {
parameters: {ajax_render: 1, searchtype: 'download', engine: e, find: title},
onSuccess: function(transport, json) {
if (json.count > 0) {
$('torrent').setStyle({display: 'inline'});
$('torrentcontent').insert(transport.responseText);
// $('images').setStyle({display: 'block'});
// Effect.BlindDown('images');
}
}
});
});
}
function bindRenderer(title, type, engines)
{
engines.each(function(e)
{
new Ajax.Request('lookup.php', {
parameters: {ajax_render: 1, searchtype: type, engine: e, find: title},
onSuccess: function(transport, json) {
//alert(this.options);
if (json.count > 0) {
$('purchase').setStyle({display: 'inline'});
$('purchasecontent').insert(transport.responseText);
// $('images').setStyle({display: 'block'});
// Effect.BlindDown('images');
}
}.bind(this)
});
});
}

View File

@@ -0,0 +1,130 @@
{*
Output of search results/browselist
$Id: list.tpl,v 1.22 2013/03/14 17:16:36 andig2 Exp $
*}
<!-- {$smarty.template} -->
{if !empty($listcolumns) and $listcolumns == 1}
{assign var=IMGWIDTH value="35"}
{assign var=IMGHEIGHT value="48"}
{else}
{assign var=IMGWIDTH value="97"}
{assign var=IMGHEIGHT value="144"}
{/if}
{*include file="protoflow.tpl"*}
{*include file="covereffect.tpl"*}
<div id="content">
{if !empty($list)}
{counter assign=count start=0 print=false name=videocount}
{foreach $list as $video}
{if $count == 0}
{cycle values="listeven,listodd" assign=CLASS print=false}
<div class="{$CLASS}">
<table width="100%" class="collapse">
<tr>
{/if}
<td {if $video.who}class="lent"{elseif $video.mediatype==$smarty.const.MEDIA_WISHLIST}class="wanted"{/if} width="{floor(100/$listcolumns)}%">
<div class="list_item">
{if $video.imgurl}{html_image file=$video.imgurl link="show.php?id="|cat:$video.id align=left max_width=$IMGWIDTH max_height=$IMGHEIGHT class="cover"}{/if}
{*
<div class="boxgrid caption">
{if $video.imgurl}{html_image file=$video.imgurl link="show.php?id="|cat:$video.id align=left max_width=$IMGWIDTH max_height=$IMGHEIGHT class="cover"}{/if}
<div class="cover boxcaption" style="top: 200px">
<h3>{$video.title}{if $video.subtitle} - {$video.subtitle}{/if}</h3>
<h4>
{if $video.director}<a href="search.php?q=%22{$video.director|escape:url}%22&amp;isname=Y">{$video.director}</a>{/if}
{if $video.year}(<a href="search.php?q={$video.year}&amp;fields=year&amp;nowild=1">{$video.year}</a>){/if}
{if $video.diskid}<a href="search.php?q={$video.diskid}&fields=diskid&nowild=1">{$video.diskid}</a>{/if}
</h4>
{if $video.plot}<div>{$video.plot|truncate:100}</div>{/if}
</div>
</div>
*}
{if $listcolumns < 4}
<div class="list_item_more">
{if $video.editable}
<div class="list_item_buttons">
<form action="edit.php" method="get">
<input type="hidden" name="id" value="{$video.id}"/>
<input type="submit" class="button" value="{$lang.edit}" />
</form>
<form action="delete.php" method="get">
<input type="hidden" name="id" value="{$video.id}"/>
<input type="submit" class="button" value="{$lang.delete}" onclick="return(confirm('{$video.title|escape:javascript|escape}: {$lang.really_del|escape:javascript|escape}?'))" />
</form>
</div>
{/if}
<div class="list_diskid">
<a href="search.php?q={$video.diskid}&fields=diskid&nowild=1">{$video.diskid}</a>
</div>
{if $video.mediatypename}
<div class="list_diskid">
<a href="search.php?q={$video.mediatypename}&fields=mediatype&nowild=1">{$video.mediatypename}</a>
</div>
{/if}
<div class="list_language">
{foreach $video.language as $itemlang}
{if $itemlang}<a href="search.php?q={$itemlang|escape:url}&amp;fields=language">
{if !empty($video.flagfile[$itemlang])}
<img src="{$video.flagfile[$itemlang]}" alt="{$itemlang}"/>
{else}
{$itemlang}
{/if}</a>
{/if}
{/foreach}
</div>
{if $video.seen}
<div class="list_seen"><!--<a href="index.php?filter=seen">--><img src="{$template}images/eye.gif" filter="seen" alt="{$lang.seen}"/><!--</a>--></div>
{/if}
</div>
{/if}
<div class="list_item_content">
<div class="list_title"><a href="show.php?id={$video.id}">{$video.title}{if $video.subtitle} - {$video.subtitle}{/if}</a></div>
{if $video.year || $video.director}
<div class="list_info">
[{if $video.year}<a href="search.php?q={$video.year}&amp;fields=year&amp;nowild=1">{$video.year}</a>{/if}{if $video.director}{if $video.year}; {/if}<a href="search.php?q=%22{$video.director|escape:url}%22&amp;isname=Y">{$video.director}</a>{/if}]
</div>
{/if}
<div class="list_plot">
{$video.plot|truncate:250}
<a href="show.php?id={$video.id}">{$lang.more}</a>
</div>
</div>
</div>
</td>
{counter assign=count name=videocount}
{if $count == $listcolumns}
{counter start=0 print=false name=videocount}
</tr>
</table>
</div>
{/if}
{/foreach}
{if $count != 0}
{section name="columnLoop" start=$count loop=$listcolumns}
<td>&nbsp;</td>
{/section}
</tr>
</table>
</div>
{/if}
{/if}
</div>
<!-- /content -->

View File

@@ -0,0 +1,54 @@
{*
Login page
$Id: login.tpl,v 1.5 2005/06/04 16:59:36 andig2 Exp $
*}
<!-- {$smarty.template} -->
<div id="topspacer"></div>
<div id="content">
<div id="contentlogin">
<br/>
<p class="center">{$lang.enterusername}</p>
<form action="login.php" id="login" method="post">
<input type="hidden" value="{$refer}" name="refer"/>
<table class="center">
<tr>
<td>{$lang.username}:</td>
<td><input type="textbox" id="username" name="username"/></td>
</tr>
<tr>
<td>{$lang.password}:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td colspan="2"><input type="checkbox" name="permanent" id="permanent" value="1" /><label for="permanent">{$lang.stayloggedin}</label></td>
</tr>
<tr>
<td colspan="2" class="center">
<input type="submit" class="button" value="{$lang.login}" />
</td>
</tr>
</table>
</form>
{if $error}
<p>{$error}</p>
{/if}
<br/>
</div>
<!-- /contentlogin -->
</div>
<!-- /content -->
<script language="JavaScript" type="text/javascript">
// <!--
document.forms['login'].username.focus();
// -->
</script>

View File

@@ -0,0 +1,89 @@
{*
Search engine popup
$Id: lookup.tpl,v 1.14 2009/04/04 16:21:33 andig2 Exp $
*}
{include file="xml.tpl"}
<body>
<!-- {$smarty.template} -->
<script language="JavaScript" type="text/javascript" src="javascript/lookup.js"></script>
<div id="header">
<ul id="headernav">
{foreach key=e item=eng from=$engines}
<li class="{if $engine == $e}tabActive{else}tabInactive{/if}"><a href="{$eng.url}">{$eng.name}</a></li>
{/foreach}
</ul>
</div>
<!-- /header -->
<div id="actions">
<form action="lookup.php" id="formlookup" name="formlookup" method="post">
<input type="text" name="find" id="find" value="{$q_find}" size="31" style="width:200px" />
{include file="lookup_engines.tpl"}
<input type="submit" class="button" value="{$lang.l_search}" />
<script language="JavaScript" type="text/javascript">
$('find').focus();
</script>
</form>
</div>
<!-- /actions -->
<div id="content">
<div id="lookup">
<table width="100%" class="collapse">
<tr>
<td>
{if $http_error}
<pre>{$http_error}</pre>
{/if}
{if $imdbresults}
<b>{$lang.l_select}</b>
{if $searchtype == 'movie' || $searchtype == ''}
<ul>
{foreach item=match from=$imdbresults}
<li>
<a href="javascript:void(returnData('{$match.id}','{$match.title|escape:"javascript"|escape}','{$match.subtitle|escape:"javascript"|escape}', '{$engine}'));" title="add ID and close Window">{$match.title}{if $match.subtitle} - {$match.subtitle}{/if}{if $match.year} ({$match.year}){/if}</a>
{if $match.details or $match.imgsmall}
<br/>
<font size="-2">
{if $match.imgsmall}<img src="{$match.imgsmall}" align="left" width="25" height="35" />{/if}
{$match.details}
</font>
{/if}
<br class="clear" />
</li>
{/foreach}
</ul>
{else}
{include file="lookup_ajax.tpl"}
{/if}
{else}
<div class="center">
<br />
<b>{$lang.l_nothing}</b>
<br /><br />
</div>
{/if}
</td>
</tr>
</table>
</div>
<!-- /lookup -->
<div id="footer" class="right">
<a href="{$searchurl}" target="_blank">{$lang.l_selfsearch}</a>
</div>
</div>
<!-- /content -->
</body>
</html>

View File

@@ -0,0 +1,54 @@
{*
Inline ajax response display
$Id: lookup_ajax.tpl,v 1.3 2009/04/04 16:21:33 andig2 Exp $
*}
<!-- {$smarty.template} -->
{if $searchtype == 'purchase'}
{foreach item=match from=$imdbresults}
<div class="thumbnail" >
<a href="{$match.url}" target="_blank" title="Purchase">
<img src="{$match.imgsmall}" url="{$match.coverurl}" align="left" width="60" height="90" /><br />
{$match.title}{if $match.subtitle} - {$match.subtitle}{/if}
{if $match.sl}({$match.sl}){/if}
{if $match.price}({$match.price}){/if}
</a>
</div>
{/foreach}
{elseif $searchtype == 'download'}
<ul>
{foreach item=match from=$imdbresults}
<li><a href="{$match.url}" target="_blank">{$match.title}</a>{if $match.subtitle} - {$match.subtitle}{/if}
{if $match.plot && 0}<br/>{$match.plot}{/if}
</li>
{/foreach}
</ul>
{elseif $searchtype == 'trailer'}
{foreach item=match from=$imdbresults}
<span>
<object width="425" height="350">
<param name="movie" value="{$match}"></param>
<param name="wmode" value="transparent"></param>
<embed src="{$trailerid}" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed>
</object>
</span>
{/foreach}
{else}
{foreach item=match from=$imdbresults}
<div class="thumbnail" >
<a href="javascript:void(returnImage('{$match.coverurl|escape:"javascript"}'))" url="{$match.coverurl}" title="Select image">
<img src="{$match.imgsmall}" url="{$match.coverurl}" align="left" width="60" height="90" /><br />
{$match.title}
</a>
</div>
{/foreach}
{/if}

View File

@@ -0,0 +1,547 @@
/**
* Modern style sheet
*
* $Id: modern.css,v 1.14 2008/03/09 14:57:45 andig2 Exp $
*/
/*
* Defaults
*/
body {
font-family: Tahoma, Verdana, sans serif;
font-size: 12px;
margin: 0px;
padding: 0px;
background-color: #fff;
color: #000;
}
form, ul {
margin: 0px;
}
a:link, a:visited, a:active {
text-decoration: none;
color: #004;
}
a:hover {
text-decoration: underline;
}
table.collapse {
border-collapse : collapse;
}
tr {
vertical-align: top;
}
td { /* this fixes a problem with opera */
vertical-align: top;
text-align: left;
}
img {
border: 0px;
}
input, textarea, select {
font-size: 12px;
}
h3, h4 { /* bold font, usually in action section */
font-size: 12px;
font-weight: bold;
margin: 0px;
}
h4 { /* used on edit page */
font-weight: normal;
display: inline;
}
/*
* divs
*/
#container {
}
#logo {
background-color: #339;
padding: 0px 2px 1px 0px;
text-align: right;
float: right;
}
#logotitle, #logotitle a {
color: #fff;
font: bold 20px Tahoma, Verdana, sans serif;
}
#logohelp, #logologin, #logoprofile, #logoversion, .logodivider {
display: none;
}
#header {
background-color: #339;
}
#headernav {
margin: 0px 0px -5px 0px;
padding: 10px 0px 0px 2px;
height: 20px;
}
#headernav li {
display: inline;
list-style-type: none;
}
#headernav2 li {
display: inline;
list-style-type: none;
font-size: 11px;
font-weight: normal;
}
#headerhelp, #headerlogin, #headerprofile {
display: inline;
}
#filters {
padding: 2px 0px 4px 0px;
background-color: #ccf;
color: #339;
font-size: 10px;
font-weight: bold;
text-transform: capitalize;
border-bottom: 1px solid #339;
}
#filtersmoreless {
float: right;
padding: 3px 4px 0px 0px;
}
#filtersmoreless img.button {
padding: 1px;
background-color: white;
border: none;
}
#footer {
background-color: #ccf;
font-size: 10px;
height: 19px;
padding: 2px;
border-top: 1px solid #339;
}
#footerpages {
padding: 3px;
}
#footerversion {
float: right;
padding: 3px;
display: inline;
}
#footerimage {
float: right;
padding: 2px;
}
#topspacer, #topspacer2 {
height: 10px;
background-color: #ccf;
border-bottom: 1px solid #339;
}
#topspacer2 {
height: 25px;
}
#actions {
background-color: #ccf;
padding: 4px;
border-bottom: 1px solid #339;
}
#actionsspacer {
display: none;
}
#actionsbuttons {
}
#actions form, #actions h3 {
display: inline;
}
#actions div {
display: inline;
}
#content {
background-color: #fff;
}
#showheader {
border-bottom: 1px dotted #aaa;
}
#showheader h1 {
font-size: 22px;
font-weight: bold;
margin: 0px;
}
#showheader h2 {
font-size: 18px;
font-weight: bolder;
margin: 0px;
}
#showimage {
float: left;
padding: 5px;
}
#showplot, #showfile, #showcomment, #showcast {
padding: 4px;
text-align: justify;
}
#showfile, #showcomment, #showcast {
border-bottom: 1px dotted #aaa;
}
#editbuttons {
text-align: center;
}
#savebutton {
}
#searchimage {
float: right;
}
#edit, #borrow, #statistics, #tools, #lookup, #users {
border-bottom: 1px solid #339;
}
#lookup, #borrow {
padding: 4px;
}
/*
* classes
*/
.tabActive a,
.tabActive a:visited,
.tabActive a:link,
.tabActive a:hover {
font-size: 11px;
font-weight: bold;
border-color: #fff #339 #fff #fff;
border-style: groove;
border-width: 2px 1px 0px 2px;
padding: 2px 6px 2px 6px;
background-color: #ccf;
color: #339;
text-decoration: none;
text-transform: capitalize;
}
.tabActive a:hover {
background-color: #ccf;
color: #66c;
}
.tabInactive a,
.tabInactive a:visited,
.tabInactive a:link,
.tabInactive a:hover {
font-size: 11px;
font-weight: bold;
height: 18px;
border-color: #ccf #339 #ccf #ccf;
border-style: groove;
border-width: 2px 1px 0px 2px ;
margin: 4px 0px 0px 0px;
padding: 0px 6px 0px 6px;
background-color: #6666cc;
color: #ffffff;
text-decoration: none;
text-transform: capitalize;
white-space: nowrap;
}
.tabInactive a:hover {
background-color: #ccccff;
color: #6666cc;
}
.right {
text-align: right;
}
.center {
text-align: center;
}
.clear {
clear: both;
}
.button {
cursor: hand;
}
.dropcap:first-letter {
}
.listeven {
background-color: #fff;
clear: both;
}
.listodd {
background-color: #eee;
clear: both;
}
.listdivider {
}
.listcell {
float: left;
}
.optionseven, .optionsodd {
border-bottom: 1px dotted #aaa;
padding: 4px;
}
.optionsleft {
float: left;
width: 25%;
text-align: center;
}
.optionsright {
float: right;
width: 75%;
text-align: left;
}
.lent {
background-color: #fdd;
}
.wanted {
background-color: #ffb;
}
.notavail {
font-weight: bold;
color: rgb(255,102,0);
}
.listeven, .listodd, #showplot {
border-bottom: 1px dotted #aaa;
}
.list_title, .list_diskid {
font-size: 12px;
font-weight: bold;
}
.list_info, .list_seen, .list_plot {
font-size: 11px;
}
.list_info {
font-style: italic;
}
.list_plot a {
font-weight: bold;
}
.list_item_buttons form {
display: inline;
}
.list_item_more {
float: right;
}
.list_diskid, .list_language, .list_seen, .list_item_buttons {
text-align: right;
}
.list_language {
margin-top: 2px;
margin-left: 2px;
}
.list_episode {
padding: 2px;
}
/*
* Images
*/
.cover {
margin: 0px 4px 0px 0px;
}
.thumb {
float: left;
margin: 0px 2px 1px 0px;
}
/* setup screenshot thumbnails */
.setup-thumb {
float: left;
width: 105px;
text-align: center;
border: 1px solid #999;
margin: 0 15px 15px 0;
padding: 5px;
}
.setup-thumb a:hover {
text-decoration: none;
}
/* lookup thumbnail formatting */
.thumbnail {
float: left;
margin: 5px;
}
.img-shadow {
float: left;
background: url(images/shadowalpha.png) no-repeat bottom right !important;
background: url(images/shadow.gif) no-repeat bottom right;
margin: 10px 0 0 10px !important;
margin: 10px 0 0 5px;
}
.img-shadow img {
display: block;
position: relative;
background-color: #fff;
border: 1px solid #a9a9a9;
margin: -8px 6px 6px -8px !important;
margin: -8px 6px 6px -4px;
padding: 1px;
}
/*
* Ajax Stuff
*/
.hidden {
display: none;
}
div.autocomplete {
position:absolute;
width:250px;
background-color:white;
border:1px solid #ccc;
border-width: 1px 0 0 0;
margin:0px;
padding:0px;
opacity:0.90;
}
div.autocomplete ul {
list-style-type:none;
margin:0px;
padding:0px;
}
div.autocomplete ul li {
list-style-type:none;
display:block;
margin:0;
padding:2px;
border: 1px solid #ccc;
border-width: 0 1px 1px 1px;
cursor:pointer;
}
div.autocomplete ul li.selected {
background: #4173CC;
color: #fff;
}
div.autocomplete ul li em {
font-weight: bold;
font-style: normal;
background: #ccc;
}
div.autocomplete ul li.selected em {
background: none;
}
/* Rating */
.rating_container {
white-space: nowrap;
clear: both;
display: inline;
}
.rating_container a {
float:left;
display:block;
width:20px;
height:20px;
border:0;
}
.rating_container a.rating_off {
background-image:url("images/starempty.gif");
}
.rating_container a.rating_half {
background-image:url("images/starhalf.gif");
}
.rating_container a.rating_on {
background-image:url("images/starfull.gif");
}
.rating_container a.rating_selected {
background-image:url("images/starselected.gif");
}
/* Image lookup */
#images, .thumbnail a {
background-color: #aaa;
color: #fff;
}
#images2 {
padding: 5px 5px 0px 5px;
}
/*
* Help Browser
*/
.helpbrowser code {font-family: monospace; color: #044;}
.helpbrowser td th {background-color: #eee;}
.helpbrowser h1 {text-align: center; font-size: 15pt; font-weight: bolder; margin-top: 0px}
.helpbrowser h2 {margin-left: 10px; font-size: 13pt; font-weight: bolder;}
.helpbrowser h3 {margin-left: 30px; font-size: 11pt; font-weight: bolder; font-variant: small-caps}
.helpbrowser p {text-align: justify; margin-left: 50px; width: 90%}
.helpbrowser pre {margin-left: 50px; font-family: monospace; color: #044;}
.helpbrowser table ul dl {margin-left: 50px; width: 90%}
.helpbrowser dd {margin-bottom: 10px;}

View File

@@ -0,0 +1,59 @@
{*
Template to display config options used by setup.tpl and profile.tpl
$Id: options.tpl,v 1.6 2006/11/11 15:53:59 andig2 Exp $
*}
<!-- {$smarty.template} -->
{foreach from=$setup item=option}
<div class="{cycle values="optionseven,optionsodd"}">
{if !empty($option.group)}
<div class="center">
<h2><a name="{$option.group}"></a>{$lang[$option.group]}</h2>
</div>
{else}
<div>
<div class="optionsleft">
<b>{$option.hl}</b>
<br/>
{if $option.type == 'text'}
<input type="text" size="20" name="{$option.name}" id="{$option.name}" value="{$option.set|escape}" class="center" />
{/if}
{if $option.type == 'boolean'}
{html_checkbox name=$option.name id=$option.name value=1 checked=$option.set}
{/if}
{if $option.type == 'dropdown'}
{html_options name=$option.name options=$option.data selected=$option.set}
{/if}
{if $option.type == 'multi'}
<select name="{$option.name}[]" size="5" multiple="multiple">
<option value=""></option>
{html_options options=$option.data selected=$option.set}
</select>
{/if}
{if $option.type == 'special'}
{$option.data}
{/if}
{if $option.type == 'link'}
<a href="{$option.data}">{$option.hl}</a>
{/if}
</div>
<div class="optionsright">
{$option.help}
{if !empty($option.thumbs)}
{include file="options_thumbs.tpl"}
{/if}
</div>
<div class="clear"></div>
</div>
{/if}
</div>
{/foreach}

View File

@@ -0,0 +1,66 @@
{*
Template for the permission management screen
$Id: permissions.tpl,v 1.4 2005/05/30 11:52:50 andig2 Exp $
*}
<!-- {$smarty.template} -->
{if $message}
<div id="actions">
<br/>
<div class="center">
{$message}
</div>
</div>
<!-- /actions -->
{else}
<div id="topspacer2"></div>
{/if}
<div id="content">
<div id="permissions">
<form action="permissions.php" method="post">
<table width="100%">
<tr>
<td colspan="3" class="left">
<h3>{$lang.permforuser} {html_options name=from_uid options=$owners selected=$from_uid onchange="submit()"}:</h3>
</td>
</tr>
<tr class="{cycle values="even,odd"}">
<th>{$lang.username}</th>
<th>{$lang.read}</th>
<th>{$lang.write}</th>
</tr>
{foreach item=perm from=$permlist}
<input type="hidden" name="newflag_{$perm.to_uid}" id="newflag_{$perm.to_uid}" value="{$perm.newentry}" />
<tr class="{cycle values="even,odd"}">
<td class="center">
{$perm.to_name}
</td>
<td class="center">
<input type="checkbox" name="readflag_{$perm.to_uid}" id="readflag_{$perm.to_uid}" value="1" {if $perm.read}checked="checked"{/if}/>
</td>
<td class="center">
<input type="checkbox" name="writeflag_{$perm.to_uid}" id="writeflag_{$perm.to_uid}" value="1" {if $perm.write}checked="checked"{/if}/>
</td>
</tr>
{/foreach}
</table>
<div id="permissionbuttons">
<input type="button" value="{$lang.back}" class="button" onclick="window.location.href='users.php';" accesskey="c" />
<input type="submit" name="save" value="{$lang.save}" class="button" accesskey="s" />
</div>
</form>
</div>
<!-- /permissions -->
</div>
<!-- /content -->

View File

@@ -0,0 +1,23 @@
{*
The user profile template
$Id: profile.tpl,v 1.1 2005/09/28 09:03:15 andig2 Exp $
*}
<!-- {$smarty.template} -->
<div id="topspacer2"></div>
<div id="content">
<form method="post" action="profile.php">
<input type="hidden" name="save" value="1"/>

Some files were not shown because too many files have changed in this diff Show More