Update directory layout to fit with other projects

This commit is contained in:
2012-01-11 00:28:17 +00:00
parent 06e3d65ffa
commit 4486af7be8
86 changed files with 15 additions and 8 deletions

View File

@@ -0,0 +1,29 @@
<h2>Settings</h2>
<table id="settings">
<thead>
<th>Name</th>
<th>Value</th>
</thead>
<tbody>
{foreach from=$settings item=name}
{assign var='value' value=$config->get($name)}
{assign var='type' value=$config->type($name)}
{assign var='id' value=str_replace('.', '-',$name)}
{include file="fragments/admin-setting-row.tpl"}
{/foreach}
</tbody>
<tfoot>
<tr>
<td colspan="2">
<input type="button" id="settings_save" name="save" value="Save" />
<input type="button" id="settings_new" name="new_setting" value="New Setting" />
</td>
</tr>
</tfoot>
</table>
<script type="text/javascript">
rc.settings.init();
</script>

View File

@@ -0,0 +1,12 @@
{
{if $messages}
"messages": [
{foreach from=$messages item=message name=messages}
{$message|json_encode}{if ! $smarty.foreach.messages.last},{/if}
{/foreach}
]{if $page_content},{/if}
{/if}
{$page_content}
}

View File

@@ -0,0 +1,11 @@
{if $success}
"actions": {
"add_setting_row": {
{include file="fragments/admin-setting-row.tpl" assign=content}
"content": {$content|json_encode}
}
},
{/if}
"success": {$success|json_encode}

View File

@@ -0,0 +1,30 @@
"page_replacements": {
"dialogheadertitle": {
"content": "Add Setting"
},
"dialogcontent": {
{include file="fragments/new-setting-dialog.tpl" assign=new_setting_dialog_content}
"content": {$new_setting_dialog_content|json_encode}
}
},
"dialog": {
"show": true,
"buttons": {
"type": "okcancel",
"actions": {
"ok": [
"add-setting",
"close-dialog"
],
"cancel": "close-dialog"
},
"params": {
"name": "settings_add_name",
"type": "settings_add_type"
}
}
}

View File

@@ -0,0 +1 @@
"success": {$success|json_encode}

View File

@@ -0,0 +1,44 @@
{if $confirm}
{if $success}
"actions": {
"rename_setting_confirm": {
"old_name": {$old_name|json_encode},
"old_id": {$old_id|json_encode},
"name": {$name|json_encode},
{include file="fragments/admin-setting-row.tpl" assign="content"}
"content": {$content|json_encode}
}
},
{/if}
"success": {$success|json_encode}
{else}
"page_replacements": {
"dialogheadertitle": {
"content": "Rename Setting"
},
"dialogcontent": {
{include file="fragments/rename-setting-dialog.tpl" assign="content"}
"content": {$content|json_encode}
}
},
"dialog": {
"show": true,
"buttons": {
"type": "okcancel",
"actions": {
"ok": [
"rename_setting",
"close-dialog"
],
"cancel": "close-dialog"
},
"params": {
"name": {$name|json_encode},
"new_name_field": "settings_rename_name"
}
}
}
{/if}

View File

@@ -0,0 +1,41 @@
"page_replacements": {
{if $confirmed}
"source-list": {
{include file="fragments/source-list.tpl" assign="sources_html"}
"content": {$sources_html|json_encode}
}
{else}
"dialogheadertitle": {
"content": "Delete Source"
},
"dialogcontent": {
{include file="fragments/delete-source.tpl" assign="delete_source_html"}
"content": {$delete_source_html|json_encode}
}
{/if}
{if ! $confirmed}
},
"dialog": {
"show": true,
"buttons": {
"type": "yesno",
"actions": {
"yes": [
"delete-source-confirm",
"close-dialog"
],
"no": "close-dialog"
},
"params": {
"plugin": {$source_plugin|json_encode},
"id": {$source_id|json_encode}
}
}
}
{else}
}
{/if}

View File

@@ -0,0 +1,6 @@
"page_replacements": {
"source-list": {
{include file="fragments/source-list.tpl" assign="sources_html"}
"content": {$sources_html|json_encode}
}
}

View File

@@ -0,0 +1,22 @@
"page_replacements": {
"dialogheadertitle": {
"content": "Update Settings"
},
"dialogcontent": {
{include file="fragments/update-settings-dialog.tpl" assign=dialog_content}
"content": {$dialog_content|json_encode}
}
},
"dialog": {
"show": true,
"buttons": {
"type": "ok",
"actions": {
"ok": "close-dialog"
}
}
}

View File

@@ -0,0 +1,6 @@
<h2>The requested page could not be found</h2>
<p>
The file you requested ({$requested_page}) could not be found.
If you typed in the address manually, check that you have spelled it correctly,
or if you followed a link, let us know and we'll look into it.
</p>

View File

@@ -0,0 +1,46 @@
<h2>An unhandled error has occurred</h2>
<p>
There was a problem trying to complete the requested action. Please try again and if the problem persists, let us know.
</p>
{if $display_exceptions}
<p>
An unhandled exception was caught during the page template processing. The full details are shown below:
</p>
<table class="exception-details">
<colgroup id="header">
<col />
</colgroup>
<colgroup>
<col />
</colgroup>
<tbody>
<tr>
<th>Exception</th>
<td>{$exception_type}</td>
</tr>
<tr>
<th>File</th>
<td>{$exception->getFile()}</td>
</tr>
<tr>
<th>Line</th>
<td>{$exception->getLine()}</td>
</tr>
<tr>
<th>Message</th>
<td>{$exception->getMessage()}</td>
</tr>
<tr>
<th>Stack Trace</th>
<td><pre>{$exception->getTrace()|print_r}</pre></td>
</tr>
</tbody>
</table>
<p>
<em>Note:</em> Exception details should not be displayed on production systems.
Disable the <a href="{$base_uri}admin/settings/key/debug.show_exceptions/"><code>debug.show_exceptions</code></a>
setting to omit the exception details from this page.
</p>
{/if}

View File

@@ -0,0 +1,12 @@
<tr id="setting_{$id}_row">
<td>
<p>
{$name}<br />
<input type="button" id="setting_{$id}_rename" value="Rename" onclick="rc.settings.rename_setting('{$id}', '{$name}');" />
<input type="button" id="setting_{$id}_remove" value="Remove" onclick="rc.settings.remove_setting('{$id}', '{$name}');" />
</p>
</td>
<td>
{include file="fragments/admin-setting-value.tpl"}
</td>
</tr>

View File

@@ -0,0 +1,43 @@
{switch $type}
{case Sihnon_Config::TYPE_BOOL}
<input type="checkbox" id="setting_{$id}" name="{$id}" value="1" {if $value}checked="checked" {/if} class="setting" />
{/case}
{case Sihnon_Config::TYPE_INT}
<input type="text" id="setting_{$id}" name="{$id}" value="{$value}" class="setting settings_field_numeric" />
{/case}
{case Sihnon_Config::TYPE_STRING}
<input type="text" id="setting_{$id}" name="{$id}" value="{$value}" class="setting settings_field_string" />
{/case}
{case Sihnon_Config::TYPE_STRING_LIST}
<div id="container_{$id}">
{foreach from=$value item=line name=settings}
<div id="settings_{$id}_line{$smarty.foreach.settings.iteration}">
<input type="text" name="{$id}[]" value="{$line}" class="setting settings_field_string" />
<input type="button" value="-" class="settings_field_remove" onclick="rc.settings.remove_stringlist_field('{$id}', '{$smarty.foreach.settings.iteration}')" />
</div>
{/foreach}
</div>
<div class="settings_addfieldcontainer">
<input type="hidden" id="settings_{$id}_next" value="{$smarty.foreach.settings.iteration+1}" />
<input type="button" value="+" class="settings_field_add" onclick="rc.settings.add_stringlist_field('{$id}')" />
</div>
{/case}
{case Sihnon_Config::TYPE_HASH}
<div id="container_{$id}">
{foreach from=$value item=hash_value key=hash_key name=settings}
<div id="settings_{$id}_line{$smarty.foreach.settings.iteration}">
<input type="text" value="{$hash_key}" class="setting hash_key" />
<input type="text" name="{$id}[{$hash_key}]" value="{$hash_value}" class="setting hash_value" />
<input type="button" value="-" class="settings_field_remove" onclick="rc.settings.remove_hash_field('{$id}', '{$smarty.foreach.settings.iteration}')" />
</div>
{/foreach}
</div>
<div class="settings_addfieldcontainer">
<input type="hidden" id="settings_{$id}_next" value="{$smarty.foreach.settings.iteration+1}" />
<input type="button" value="+" class="settings_field_add" onclick="rc.settings.add_hash_field('{$id}')" />
</div>
{/case}
{default}
<em>Unsupported setting type!</em>
{/switch}

View File

@@ -0,0 +1,3 @@
<p>
Are you sure you want to delete {$source->plugin()|escape:"html"}:{$source->filename()|escape:"html"}?
</p>

View File

@@ -0,0 +1,7 @@
{if $messages}
<ul>
{foreach from=$messages item=message}
<li>{$message|escape}</li>
{/foreach}
</ul>
{/if}

View File

@@ -0,0 +1,22 @@
<table>
<thead>
<th>Name</th>
<th>Type</th>
</thead>
<tbody>
<tr>
<td>
<input type="text" id="settings_add_name" value="" />
</td>
<td>
<select id="settings_add_type">
<option value="int">Integer</option>
<option value="bool">Boolean</option>
<option value="string">String</option>
<option value="string-list">String List</option>
<option value="hash">Hash</option>
</select>
</td>
</tr>
</tbody>
</table>

View File

@@ -0,0 +1,6 @@
<div>
<p>
Enter a new name for setting '{$name|escape}' below.
</p>
<input type="text" id="settings_rename_name" value="" />
</div>

View File

@@ -0,0 +1,25 @@
{foreach from=$all_sources key=type item=sources}
<li>{$type}
{if $sources}
<ul>
{foreach from=$sources item=source}
{assign var='source_plugin' value=$source->plugin()}
{assign var='source_filename' value=$source->filename()}
{assign var='source_filename_encoded' value=$source->filenameEncoded()}
{assign var='source_cached' value=$source->isCached()}
<li>
[ <a href="{$base_uri}sources/details/plugin/{$source_plugin}/id/{$source_filename_encoded}" title="Browse source details">Browse</a> |
<a href="{$base_uri}rips/setup/plugin/{$source_plugin}/id/{$source_filename_encoded}" title="Rip this source">Rip</a> |
<a href="javascript:rc.sources.remove('{$source_plugin|escape:'quote'}', '{$source_filename_encoded|escape:'quote'}');" title="Delete this source">Delete</a> ]
{$source_filename|escape:'html'}{if $source_cached} (cached){/if}
</li>
{/foreach}
</ul>
{else}
<p>
<em>There are no {$type} sources available to rip.</em>
</p>
{/if}
</li>
{/foreach}

View File

@@ -0,0 +1,10 @@
<p>
Settings have been saved.
</p>
{if $messages}
<p>
Some messages were generated during this operation:
{include file="fragments/messages.tpl"}
</p>
{/if}

View File

@@ -0,0 +1,64 @@
<h2>Summary</h2>
<h3>Running Jobs</h3>
{if $running_jobs}
{foreach from=$running_jobs item=job}
<li><a href="{$base_uri}jobs/details/id/{$job->id()}" title="View job details">{$job->name()}</a> <span class="progressBar" id="job_progress_{$job->id()}">{$job->currentStatus()->ripProgress()}%</span> ({RippingCluster_Main::formatDuration($job->calculateETA(), 1)} remaining)</li>
{/foreach}
<script type="text/javascript">
$('.progressBar').each(
function() {
$(this).progressBar({
steps: 100,
width: 120,
height: 12,
boxImage: '{$base_uri}images/jquery.progressbar/progressbar.gif',
barImage: {
0: '{$base_uri}images/jquery.progressbar/progressbg_red.gif',
25: '{$base_uri}images/jquery.progressbar/progressbg_orange.gif',
50: '{$base_uri}images/jquery.progressbar/progressbg_yellow.gif',
75: '{$base_uri}images/jquery.progressbar/progressbg_green.gif',
}
});
}
);
</script>
{else}
<em>There are no currently running jobs.</em>
{/if}
<h3>Queued Jobs</h3>
{if $queued_jobs}
{foreach from=$queued_jobs item=job}
<li><a href="{$base_uri}jobs/details/id/{$job->id()}" title="View job details">{$job->name()}</a></li>
{/foreach}
{else}
<em>There are no currently running jobs.</em>
{/if}
<h3>Recently Completed Jobs</h3>
{if $completed_jobs}
<ul>
{foreach from=$completed_jobs item=job}
<li><a href="{$base_uri}jobs/details/id/{$job->id()}" title="View job details">{$job->name()}</a></li>
{/foreach}
</ul>
{else}
<em>There are no recently completed jobs.</em>
{/if}
<h3>Recently Failed Jobs</h3>
{if $failed_jobs}
<ul>
{foreach from=$failed_jobs item=job}
<li><a href="{$base_uri}jobs/details/id/{$job->id()}" title="View job details">{$job->name()}</a></li>
{/foreach}
</ul>
{else}
<em>There are no recently failed jobs.</em>
{/if}

View File

@@ -0,0 +1,93 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Ripping Cluster WebUI</title>
<script lang="javascript">
</script>
<link rel="stylesheet" type="text/css" href="{$base_uri}styles/normal.css" />
<script type="text/javascript">
var base_uri = "{$base_uri|escape:'quote'}";
var base_url = "{$base_url|escape:'quote'}";
</script>
<link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/smoothness/jquery-ui.css" rel="Stylesheet" />
<link type="text/css" href="{$base_uri}styles/3rdparty/jquery.asmselect.css" rel="Stylesheet" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
<script type="text/javascript" src="{$base_uri}scripts/3rdparty/jquery.jec-1.3.2.js"></script>
<script type="text/javascript" src="{$base_uri}scripts/3rdparty/jquery.asmselect.js"></script>
<script type="text/javascript" src="{$base_uri}scripts/3rdparty/jquery.progressbar.min.js"></script>
<script type="text/javascript" src="{$base_uri}scripts/main.js"></script>
</head>
<body>
<div id="container">
<div id="banner">
<h1>Ripping Cluster WebUI</h1>
</div>
<div id="navigation">
{include file="navigation.tpl"}
</div>
<div id="page-container">
<div id="sidebar">
{include file="sidebar.tpl"}
</div>
<div id="page">
{if $messages}
<div id="messages">
{foreach from=$messages item=message}
{$message}
{/foreach}
</div>
{/if}
{$page_content}
</div>
</div>
<div id="footer">
Powered by RippingCluster WebUI {$version}. Written by Ben Roberts.
</div>
</div>
<div id="centrepoint">
<div id="dialog">
<div id="dialogheader">
<div id="dialogheadertitle">Dialog</div>
<div id="dialogheaderclose">X</div>
</div>
<div id="dialogcontent"></div>
<div id="dialogfooter">
<div id="dialogfooterok" class="dialogfooterbuttonset">
<fieldset>
<input type="button" class="dialogbutton" id="dialogfooterok" value="Ok" />
</fieldset>
</div>
<div id="dialogfooterokcancel" class="dialogfooterbuttonset">
<fieldset>
<input type="button" class="dialogbutton" id="dialogfooterokcancel_ok" value="Ok" />
<input type="button" class="dialogbutton" id="dialogfooterokcancel_cancel" value="Cancel" />
</fieldset>
</div>
<div id="dialogfooteryesno" class="dialogfooterbuttonset">
<fieldset>
<input type="button" class="dialogbutton" id="dialogfooteryes" value="Yes" />
<input type="button" class="dialogbutton" id="dialogfooterno" value="No" />
</fieldset>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,88 @@
<h2>Jobs</h2>
{if $jobs}
<form name="view-jobs" id="view-jobs" action="{$base_uri}jobs" method="post">
<fieldset>
<legend>View</legend>
<label for="view-status">View only jobs with status:</label>
<select id="view-status" name="view">
<option value="any">Any Status</option>
<option value="queued">Queued</option>
<option value="running">Running</option>
<option value="complete">Complete</option>
<option value="failed">Failed</option>
</select>
<input type="submit" name="submit" value="view" />
</fieldset>
</form>
<form name="manage-jobs" id="manage-jobs" action="{$base_uri}jobs/submit" method="post">
<fieldset>
<legend>Bulk Actions</legend>
<input type="image" class="icon" name="action" id="mark-failed-top" value="mark-failed" src="{$base_uri}images/caution.png" alt="Mark all marked jobs as failed" />
<input type="image" class="icon" name="action" id="redo-top" value="retry" src="{$base_uri}images/redo.png" alt="Repeat all marked jobs" />
<input type="image" class="icon" name="action" id="delete-top" value="delete" src="{$base_uri}images/trash.png" alt="Delete all marked jobs" />
<input type="image" class="icon" name="action" id="fix-broken-timestamps-top" value="fix-broken-timestamps" src="{$base_uri}images/clock.png" alt="Fix Broken Timestamps in Statuses" />
</fieldset>
<table>
<thead>
<tr>
<th>Name</th>
<th>Destination</th>
<th>Title</th>
<th>Status</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{foreach from=$jobs item=job}
{assign var=current_status value=$job->currentStatus()}
<tr>
<td><a href="{$base_uri}jobs/details/id/{$job->id()}" title="View job details">{$job->name()}</a></td>
<td>
{$job->destinationFilename()}
{if $job->isFinished()}
({$job->outputFilesize()|formatFilesize})
{/if}
</td>
<td>{$job->title()}</td>
<td>
{$current_status->statusName()}
{if $current_status->hasProgressInfo()}
<br />
Started: <em>{$current_status->ctime()|date_format:"%D %T"}</em><br />
Progress: {$current_status->ripProgress()}%<br />
Last update: <em>{$current_status->mtime()|date_format:"%D %T"}</em><br />
ETA: <em>{$job->calculateETA()|formatDuration}</em>
{/if}
</td>
<td>
<fieldset>
<input type="checkbox" name="include[]" value="{$job->id()}" />
<input type="image" class="icon" name="action" id="mark-failed-{$job->id()}" value="mark-failed[{$job->id()}]" src="{$base_uri}images/caution.png" alt="Mark job as failed" />
<input type="image" class="icon" name="action" id="redo-{$job->id()}" value="retry[{$job->id()}]" src="{$base_uri}images/redo.png" alt="Repeat job" />
<input type="image" class="icon" name="action" id="delete-{$job->id()}" value="delete[{$job->id()}]" src="{$base_uri}images/trash.png" alt="Delete job" />
<input type="image" class="icon" name="action" id="fix-broken-timestamps-{$job->id()}" value="fix-broken-timestamps[{$job->id()}]" src="{$base_uri}images/clock.png" alt="Fix broken status timestamps" />
</fieldset>
</td>
</tr>
{/foreach}
</tbody>
</table>
<fieldset>
<legend>Bulk Actions</legend>
<input type="image" class="icon" name="action" id="mark-failed-bottom" value="mark-failed" src="{$base_uri}images/caution.png" alt="Mark all marked jobs as failed" />
<input type="image" class="icon" name="action" id="redo-bottom" value="retry" src="{$base_uri}images/redo.png" alt="Repeat all marked jobs" />
<input type="image" class="icon" name="action" id="delete-bottom" value="delete" src="{$base_uri}images/trash.png" alt="Delete all marked jobs" />
<input type="image" class="icon" name="action" id="fix-broken-timestamps-bottom" value="fix-broken-timestamps" src="{$base_uri}images/clock.png" alt="Fix Broken Timestamps in Statuses" />
</fieldset>
</form>
{else}
<em>There are no jobs</em>
{/if}

View File

@@ -0,0 +1,91 @@
<h2>Job Details</h2>
<h3>Summary</h3>
<dl>
<dt>Source Plugin</dt>
<dd>{$job->sourcePlugin()}</dd>
<dt>Rip Plugin</dt>
<dd>{$job->ripPlugin()}</dd>
<dt>Source Filename</dt>
<dd>{$job->sourceFilename()}</dd>
<dt>Source Title</dt>
<dd>{$job->title()}</dd>
<dt>Status</dt>
<dd>{$job->currentStatus()->statusName()} ({$job->currentStatus()->mtime()|date_format:'%Y-%m-%d %H:%M:%S'})</dd>
<dt>Destination Filename</dt>
<dd>{$job->destinationFilename()}</dd>
{if $job->isFinished()}
<dt>Destination Filesize</dt>
<dd>{$job->outputFilesize()|formatFilesize}</dd>
{/if}
</dl>
<h3>Log messages</h3>
<h4>Options</h4>
<ul>
{if $log_count_display eq 'all'}
<li><a href="{$base_uri}jobs/details/id/{$job->id()}/order/{$log_order}/" title="View recent logs only">View recent messages only</a></li>
{else}
<li><a href="{$base_uri}jobs/details/id/{$job->id()}/logs/all/" title="View all logs">View all messages</a></li>
{/if}
<li><a href="{$base_uri}jobs/details/id/{$job->id()}/logs/{$log_count_display}/order/{$log_order_reverse}/" title="Reverse display order of log messages">Reverse display order</a></li>
</ul>
<h4>Recent Client Logs</h4>
{if $client_log_entries}
<table>
<thead>
<tr>
<th>Level</th>
<th>Time</th>
<th>Message</th>
</tr>
</thead>
<tbody>
{foreach from=$client_log_entries item=log_entry}
<tr>
<td>{$log_entry->level()}</td>
<td>{$log_entry->ctime()|date_format:"%Y-%m-%d %H:%M:%S"}</td>
<td>{$log_entry->message()}</td>
</tr>
{/foreach}
</tbody>
</table>
{else}
<em>There are no client log entries.</em>
{/if}
<h4>Recent Worker Logs</h4>
{if $worker_log_entries}
<table>
<thead>
<tr>
<th>Level</th>
<th>Time</th>
<th>Hostname</th>
<th>Message</th>
</tr>
</thead>
<tbody>
{foreach from=$worker_log_entries item=log_entry}
<tr>
<td>{$log_entry->level()}</td>
<td>{$log_entry->ctime()|date_format:"%Y-%m-%d %H:%M:%S"}</td>
<td>{$log_entry->hostname()}</td>
<td>{$log_entry->message()}</td>
</tr>
{/foreach}
</tbody>
</table>
{else}
<em>There are no worker log entries.</em>
{/if}

View File

@@ -0,0 +1,59 @@
<h2>Recent Client Logs</h2>
{if $client_log_entries}
<table>
<thead>
<tr>
<th>Job</th>
<th>Level</th>
<th>Time</th>
<th>Hostname</th>
<th>Message</th>
</tr>
</thead>
<tbody>
{foreach from=$client_log_entries item=log_entry}
<tr>
<td>{$log_entry->jobId()}</td>
<td>{$log_entry->level()}</td>
<td>{$log_entry->ctime()|date_format:"%Y-%m-%d %H:%M:%S"}</td>
<td>{$log_entry->hostname()}</td>
<td>{$log_entry->message()}</td>
</tr>
{/foreach}
</tbody>
</table>
{else}
<em>There are no client log entries.</em>
{/if}
<h2>Recent Worker Logs</h2>
{if $worker_log_entries}
<table>
<thead>
<tr>
<th>Job</th>
<th>Level</th>
<th>Time</th>
<th>Hostname</th>
<th>Message</th>
</tr>
</thead>
<tbody>
{foreach from=$worker_log_entries item=log_entry}
<tr>
<td>{$log_entry->jobId()}</td>
<td>{$log_entry->level()}</td>
<td>{$log_entry->ctime()|date_format:"%Y-%m-%d %H:%M:%S"}</td>
<td>{$log_entry->hostname()}</td>
<td>{$log_entry->message()}</td>
</tr>
{/foreach}
</tbody>
</table>
{else}
<em>There are no worker log entries.</em>
{/if}

View File

@@ -0,0 +1,5 @@
<ul>
<li><a href="{$base_uri}home/" title="Home">Home</a></li>
<li><a href="{$base_uri}jobs/" title="Jobs">Jobs</a></li>
<li><a href="{$base_uri}logs/" title="Logs">Logs</a></li>
</ul>

View File

@@ -0,0 +1,194 @@
<h2>Setup Rips</h2>
{if $rips_submitted}
<h3>Jobs Queued</h3>
<p>
The rips have been queued, and processing has begun in the background. View the <a href="{$base_uri}jobs/" title="View running jobs">Jobs</a> page
to see a list of running jobs, or the <a href="{$base_uri}logs/" title="View logs">logs</a> page for more detailed progress information.
</p>
{else}
<h3>{$source->filename()|escape:"html"}</h3>
<form name="setup" id="setup-rips" action="{$base_uri}rips/setup/submit/" method="post">
<input type="hidden" name="plugin" value="{$source->plugin()|escape:"html"}" />
<fieldset>
<legend>Configure global rip options</legend>
<input type="hidden" name="id" value="{$source->filenameEncoded()|escape:"html"}" />
<div>
<label for="global-output-directory">Output directory</label>
<select id="global-output-directory" name="rip-options[output-directory]">
<optgroup label="Custom"></optgroup>
<optgroup label="Defaults">
{foreach from=$default_output_directories item=dir key=name}
<option value="{$dir}">{$name}</option>
{/foreach}
</optgroup>
<optgroup label="Recently Used">
{foreach from=$recent_output_directories item=dir name=recent}
{if $smarty.foreach.recent.iteration eq 1}
<option value="{$dir}" selected="selected">{$dir}</option>
{else}
<option value="{$dir}">{$dir}</option>
{/if}
{/foreach}
</optgroup>
</select>
<script type="text/javascript">
$('#global-output-directory').jec({
position: 1,
blinkingCursor: true
});
</script>
</div>
<div>
<label for="global-format">Output format</label>
<select id="global-format" name="rip-options[format]">
<option value="mkv" selected="selected">MKV</option>
</select>
</div>
<div>
<label for="global-video-codec">Video codec</label>
<select id="global-video-codec" name="rip-options[video-codec]">
<option value="x264" selected="selected">x264</option>
</select>
</div>
<div>
<label for="global-video-width">Video width</label>
<input type="text" id="global-video-width" name="rip-options[video-width]" value="0" />
<em>(Use 0 to leave size unchanged from source.)</em>
</div>
<div>
<label for="global-video-height">Video height</label>
<input type="text" id="global-video-height" name="rip-options[video-height]" value="0" />
<em>(Use 0 to leave size unchanged from source.)</em>
</div>
<div>
<label for="global-quantizer">Quantizer</label>
<input type="text" id="global-quantizer" name="rip-options[quantizer]" value="" readonly="readonly" />
<em>(Defaults to 0.61, x264's quantizer value for 20)</em>
<div id="quantizer-slider"></div>
</div>
<div>
<input type="submit" name="submit" value="Queue rips" />
</div>
</fieldset>
<div id="available-titles">
{foreach from=$titles item=title}
<h3 id="configure-rip-{$title->id()}"><a href="#">Title {$title->id()} (Duration: {$title->duration()}, Chapters: {$title->chapterCount()})</a></h3>
<div id="rips-{$title->id()}">
<fieldset>
<legend>Configure title rip options</legend>
<div>
<label for="rip-title-{$title->id()}">Rip this title</label>
<input type="checkbox" id="rip-title-{$title->id()}" name="rips[{$title->id()}][queue]" value="1" />
</div>
<div>
<label for="rip-name-{$title->id()}">Short Name</label>
<input type="text" id="rip-name-{$title->id()}" name="rips[{$title->id()}][name]" value="" />
</div>
<div>
<label for="rip-audio-{$title->id()}">Audio tracks</label>
<select id="rip-audio-{$title->id()}" name="rips[{$title->id()}][audio][]" title="Select audio tracks" size="5" multiple="multiple" class="rip-streams">
{foreach from=$title->audioTracks() item=audio}
<option value="{$audio->id()}">{$audio->name()} - {$audio->channels()} ({$audio->language()}) </option>
{/foreach}
</select>
<table class="audio-tracks">
<caption>Selected audio tracks</caption>
<thead>
<tr>
<th>Track</th>
<th>Encoder</th>
<th>Name</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div>
<label for="rip-subtitle-{$title->id()}">Subtitle tracks</label>
<select id="rip-subtitle-{$title->id()}" name="rips[{$title->id()}][subtitles][]" title="Select subtitle tracks" size="5" multiple="multiple" class="rip-streams">
{foreach from=$title->subtitleTracks() item=subtitle}
<option value="{$subtitle->id()}">{$subtitle->language()}</option>
{/foreach}
</select>
<table class="subtitle-tracks">
<caption>Selected subtitle tracks</caption>
<thead>
<tr>
<th>Track</th>
<th>Language</th>
<th>Format</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div>
<label for="rips-output-{$title->id()}">Output filename</label>
<input type="text" id="rips-output-{$title->id()}" name="rips[{$title->id()}][output_filename]" value="" />
</div>
<div>
<label for="rip-deinterlace-{$title->id()}">Deinterlacing</label>
<select id="rip-deinterlace-{$title->id()}" name="rips[{$title->id()}][deinterlace]">
<option value="0">None</option>
<option value="1">Full</option>
<option value="2" selected="selected">Selective</option>
</select>
</div>
</fieldset>
</div>
{/foreach}
</div>
<fieldset>
<legend>Queue rips</legend>
<input type="submit" name="submit" value="Queue rips" />
</fieldset>
</form>
{literal}
<script language="javascript">
$(function() {
$("#available-titles").accordion({active: {/literal}{$source->longestTitleIndex()}{literal}});
$("input:submit").button();
$("#quantizer-slider").slider({
value:0.61,
min: 0,
max: 1.0,
step: 0.01,
slide: function(event, ui) {
$("#global-quantizer").val(ui.value);
}
});
$("#global-quantizer").val($("#quantizer-slider").slider("value"));
$('select[multiple]').asmSelect({
});
});
</script>
{/literal}
{/if}

View File

@@ -0,0 +1,17 @@
<ul>
<li><a href="{$base_uri}home/" title="Home">Home</a></li>
<li><a href="{$base_uri}jobs/" title="Jobs">Jobs</a></li>
<li><a href="{$base_uri}logs/" title="Logs">Logs</a></li>
<li>Browse
<ul>
<li><a href="{$base_uri}sources/list" title="Browse Sources">Sources</a></li>
</ul>
</li>
<li>Admin
<ul>
<li><a href="{$base_uri}admin/settings" title="Edit Settings">Settings</a></li>
</ul>
</li>
</ul>

View File

@@ -0,0 +1,7 @@
<h2>Delete Source</h2>
<p>
Are you sure you want to delete {$source->plugin()|escape:"html"}:{$source->filename()|escape:"html"}?
[ <a href="{$base_uri}sources/delete/plugin/{$source->plugin()}/id/{$source->filenameEncoded()}/confirm" title="Delete it">Delete</a>
| <a href="{$base_uri}rips/sources" title="Return to sources list">Cancel</a> ]
</p>

View File

@@ -0,0 +1,76 @@
<h2>Source details</h2>
{if $source}
<table class="source-details">
<colgroup class="header">
<col />
</colgroup>
<colgroup>
<col />
</colgroup>
<tbody>
<tr>
<th>Source</th>
<td>{$source->filename()|escape:"html"}</td>
</tr>
{if $titles}
<tr>
<th>Titles</th>
<td>
<table class="titles">
<colgroup class="title-number">
<col />
</colgroup>
<colgroup class="title-header">
<col />
</colgroup>
<colgroup>
<col />
</colgroup>
<tbody>
{foreach from=$titles item=title}
<tr>
<th rowspan="5">{$title->id()}</th>
<td>Duration</td>
<td>{$title->duration()}</td>
</tr>
<tr>
<td>Display</td>
<td>
<ul>
<li>Size: {$title->width()}x{$title->height()}</li>
<li>Pixel aspect ratio: {$title->pixelAspect()}</li>
<li>Display aspect ratio: {$title->displayAspect()}</li>
<li>Framerate: {$title->framerate()}</li>
<li>Autocrop: {$title->autocrop()}</li>
</ul>
</td>
</tr>
<tr>
<td>Chapters</td>
<td>{$title->chapterCount()}</td>
</tr>
<tr>
<td>Audio Tracks</td>
<td>{$title->audioTrackCount()}</td>
</tr>
<tr>
<td>Subtitle Tracks</td>
<td>{$title->subtitleTrackCount()}</td>
</tr>
{/foreach}
</tbody>
</table>
</td>
</tr>
{/if}
</tbody>
</table>
{else}
<p>
<em>This is not a valid source.</em>
</p>
{/if}

View File

@@ -0,0 +1,18 @@
<h2>Sources</h2>
{if $all_sources}
<p>
The list below contains all the DVD sources that are available and ready for ripping.
</p>
<p>
Sources that have recently been scanned are marked <em>(cached)</em> and will load fairly quickly.
Sources that have not been cached will be scanned when the link is clicked, and this may take several minutes so please be patient.
</p>
<ul id="source-list">
{include file="fragments/source-list.tpl"}
</ul>
{else}
<p>
<em>There are currently no sources available to rip.</em>
</p>
{/if}