Update ui to use bootstrap ui in more places
This commit is contained in:
@@ -48,7 +48,7 @@ var rc = {
|
|||||||
dialog: {
|
dialog: {
|
||||||
|
|
||||||
init: function() {
|
init: function() {
|
||||||
$("#dialogheaderclose").click(rc.dialog.close);
|
$("#dialog-header-close").click(rc.dialog.close);
|
||||||
},
|
},
|
||||||
|
|
||||||
prepare: function(d) {
|
prepare: function(d) {
|
||||||
@@ -57,61 +57,67 @@ var rc = {
|
|||||||
if (d.dialog.buttons) {
|
if (d.dialog.buttons) {
|
||||||
switch (d.dialog.buttons.type) {
|
switch (d.dialog.buttons.type) {
|
||||||
case 'ok':
|
case 'ok':
|
||||||
$("#dialogfooterok").click(
|
$("#dialog-footer-ok-ok").click(
|
||||||
function() {
|
function() {
|
||||||
rc.trigger(d.dialog.buttons.actions.ok, d.dialog.buttons.params);
|
rc.trigger(d.dialog.buttons.actions.ok, d.dialog.buttons.params);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$("#dialogfooterok").show();
|
$("#dialog-footer-ok").show();
|
||||||
break;
|
break;
|
||||||
case 'okcancel':
|
case 'okcancel':
|
||||||
$("#dialogfooterokcancel_ok").click(function() {
|
$("#dialog-footer-okcancel-ok").click(function() {
|
||||||
rc.trigger(d.dialog.buttons.actions.ok, d.dialog.buttons.params);
|
rc.trigger(d.dialog.buttons.actions.ok, d.dialog.buttons.params);
|
||||||
});
|
});
|
||||||
$("#dialogfooterokcancel_cancel").click(function() {
|
$("#dialog-footer-okcancel-cancel").click(function() {
|
||||||
rc.trigger(d.dialog.buttons.actions.cancel, d.dialog.buttons.params);
|
rc.trigger(d.dialog.buttons.actions.cancel, d.dialog.buttons.params);
|
||||||
});
|
});
|
||||||
$("#dialogfooterokcancel").show();
|
$("#dialog-footer-okcancel").show();
|
||||||
break;
|
break;
|
||||||
case 'yesno':
|
case 'yesno':
|
||||||
$("#dialogfooteryes").click(
|
$("#dialog-footer-yesno-yes").click(
|
||||||
function() {
|
function() {
|
||||||
rc.trigger(d.dialog.buttons.actions.yes, d.dialog.buttons.params);
|
rc.trigger(d.dialog.buttons.actions.yes, d.dialog.buttons.params);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$("#dialogfooterno").click(
|
$("#dialog-footer-yesno-no").click(
|
||||||
function() {
|
function() {
|
||||||
rc.trigger(d.dialog.buttons.actions.no, d.dialog.buttons.params);
|
rc.trigger(d.dialog.buttons.actions.no, d.dialog.buttons.params);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$("#dialogfooteryesno").show();
|
$("#dialog-footer-yesno").show();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d.dialog.title) {
|
if (d.dialog.title) {
|
||||||
$('#dialogheadertitle').html(d.dialog.title);
|
$('#dialog-header-title').html(d.dialog.title);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d.dialog.content) {
|
if (d.dialog.content) {
|
||||||
$('#dialogcontent').html(d.dialog.content);
|
$('#dialog-body').html(d.dialog.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#dialog").show();
|
$("#dialog").modal({
|
||||||
|
show: true,
|
||||||
|
backdrop: true,
|
||||||
|
keyboard: true,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
close: function() {
|
close: function() {
|
||||||
// Hide the dialog
|
// Hide the dialog
|
||||||
$("#dialog").hide();
|
$("#dialog").modal({
|
||||||
|
show: false,
|
||||||
|
});
|
||||||
|
|
||||||
// Remove the dialog content
|
// Remove the dialog content
|
||||||
$("#dialogcontent").html();
|
$("#dialog-body").html();
|
||||||
|
|
||||||
// Hide all buttons
|
// Hide all buttons
|
||||||
$(".dialogfooterbuttonset").hide();
|
$(".dialog-footer-buttonset").hide();
|
||||||
// Strip all event handlers
|
// Strip all event handlers
|
||||||
$(".dialogfooterbuttonset input[type='button']").unbind('click');
|
$(".dialog-footer-buttonset input[type='button']").unbind('click');
|
||||||
},
|
},
|
||||||
|
|
||||||
error: function(title, content, messages) {
|
error: function(title, content, messages) {
|
||||||
@@ -145,7 +151,18 @@ var rc = {
|
|||||||
page: {
|
page: {
|
||||||
|
|
||||||
init: function() {
|
init: function() {
|
||||||
$('.progressBar').each(
|
rc.page.updateEvents($('#page_content'));
|
||||||
|
},
|
||||||
|
|
||||||
|
update: function(d) {
|
||||||
|
for ( var f in d.page_replacements) {
|
||||||
|
$("#" + f).html(d.page_replacements[f].content);
|
||||||
|
rc.page.updateEvents('#' + f);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
updateEvents: function(d) {
|
||||||
|
$(d).find('.progressBar').each(
|
||||||
function() {
|
function() {
|
||||||
$(this).progressBar({
|
$(this).progressBar({
|
||||||
steps: 100,
|
steps: 100,
|
||||||
@@ -161,12 +178,24 @@ var rc = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
},
|
|
||||||
|
|
||||||
update: function(d) {
|
$(d).find('.hover-highlight').hover(
|
||||||
for ( var f in d.page_replacements) {
|
function() {
|
||||||
$("#" + f).html(d.page_replacements[f].content);
|
$(this).addClass('highlight');
|
||||||
|
},
|
||||||
|
function() {
|
||||||
|
$(this).removeClass('highlight');
|
||||||
}
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
$(d).find('a[rel=popover]').popover({
|
||||||
|
offset: 10,
|
||||||
|
html: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
$(d).find('input[type=checkbox].select_all').click(function() {
|
||||||
|
$('input[type=checkbox].'+$(this).attr('id')).attr('checked', $(this).attr('checked') == 'checked');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -268,7 +297,7 @@ var rc = {
|
|||||||
rc.dialog.prepare({
|
rc.dialog.prepare({
|
||||||
dialog: {
|
dialog: {
|
||||||
show: true,
|
show: true,
|
||||||
title: 'Remove setting',
|
title: 'Remove this setting?',
|
||||||
content: "Do you really want to remove setting '" + name + "'",
|
content: "Do you really want to remove setting '" + name + "'",
|
||||||
buttons: {
|
buttons: {
|
||||||
type: 'okcancel',
|
type: 'okcancel',
|
||||||
@@ -322,11 +351,11 @@ var rc = {
|
|||||||
var line = $('<div>');
|
var line = $('<div>');
|
||||||
line.attr('id', 'settings_'+id+'_line'+next.val());
|
line.attr('id', 'settings_'+id+'_line'+next.val());
|
||||||
|
|
||||||
var hash_key = $('<input type="text" value="New" class="setting hash_key" />');
|
var hash_key = $('<input type="text" value="" class="small setting hash_key" />');
|
||||||
var hash_value = $('<input type="text" id="setting_'+id+'_value'+next_value+'" name="'+id+'[New]" class="setting hash_value" />');
|
var hash_value = $('<input type="text" id="setting_'+id+'_value'+next_value+'" name="'+id+'[New]" class="xlarge setting hash_value" />');
|
||||||
hash_key.change(function() {
|
hash_key.change(function() {
|
||||||
$('#setting_'+id+'_value'+next_value).attr('name', id+'['+$(this).val()+']');
|
$('#setting_'+id+'_value'+next_value).attr('name', id+'['+$(this).val()+']');
|
||||||
})
|
});
|
||||||
|
|
||||||
line.append(hash_key).append(' ').append(hash_value).append(' ');
|
line.append(hash_key).append(' ').append(hash_value).append(' ');
|
||||||
var button = $('<input type="button" value="-" class="settings_field_remove"/>');
|
var button = $('<input type="button" value="-" class="settings_field_remove"/>');
|
||||||
|
|||||||
@@ -32,53 +32,14 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Centred dialog taken from http://stackoverflow.com/questions/1205457/how-to-design-a-css-for-a-centered-floating-confirm-dialog */
|
.dialog-footer-buttonset {
|
||||||
#centrepoint {
|
display: none;
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
position: absolute;
|
|
||||||
}
|
}
|
||||||
#dialog {
|
|
||||||
position: relative;
|
|
||||||
width: 600px;
|
|
||||||
margin-left: -300px;
|
|
||||||
/*height: 20em;*/
|
|
||||||
margin-top: -20em;
|
|
||||||
|
|
||||||
display: none;
|
.dialog-footer-buttonset fieldset {
|
||||||
background: #eeeeee;
|
padding-top: 0;
|
||||||
border: 2px solid #a7a09a;
|
padding-bottom: 0;
|
||||||
}
|
margin-bottom: 0;
|
||||||
#dialogheader {
|
|
||||||
height: 2em;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0.3em;
|
|
||||||
}
|
|
||||||
#dialogheadertitle {
|
|
||||||
color: black;
|
|
||||||
font-weight: bold;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
#dialogheaderclose {
|
|
||||||
width: 1.2em;
|
|
||||||
height: 1.2em;
|
|
||||||
background-color: crimson;
|
|
||||||
color: white;
|
|
||||||
border: 1px solid fireBrick;
|
|
||||||
float: right;
|
|
||||||
margin-right: 1em;
|
|
||||||
text-align: center;
|
|
||||||
vertical-align: middle;
|
|
||||||
display: table-cell;
|
|
||||||
font-weight: bold;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
#dialogcontent {
|
|
||||||
padding: 0.5em;
|
|
||||||
}
|
|
||||||
.dialogfooterbuttonset {
|
|
||||||
display: none;
|
|
||||||
text-align: right;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.default {
|
.default {
|
||||||
@@ -92,16 +53,13 @@
|
|||||||
width: 16px;
|
width: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form#setup-rips input[type="text"] {
|
|
||||||
width: 30em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#quantizer-slider {
|
#quantizer-slider {
|
||||||
width: 20em;
|
width: 10em;
|
||||||
|
margin: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
select.rip-streams {
|
.highlight {
|
||||||
width: 20em;
|
background: #dceaf4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -354,6 +354,10 @@ class RippingCluster_Job {
|
|||||||
return $this->destination_filename;
|
return $this->destination_filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function destinationFileBasename() {
|
||||||
|
return basename($this->destination_filename);
|
||||||
|
}
|
||||||
|
|
||||||
public function title() {
|
public function title() {
|
||||||
return $this->title;
|
return $this->title;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ try {
|
|||||||
} break;
|
} break;
|
||||||
case 'hash': {
|
case 'hash': {
|
||||||
$type = Sihnon_Config::TYPE_HASH;
|
$type = Sihnon_Config::TYPE_HASH;
|
||||||
$value = array();
|
$value = array('' => '');
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,14 @@ if ($req->exists('submit')) {
|
|||||||
|
|
||||||
// Update the recently used list
|
// Update the recently used list
|
||||||
$recent_output_directories = $config->get('rips.output_directories.recent');
|
$recent_output_directories = $config->get('rips.output_directories.recent');
|
||||||
if ( ! in_array($_POST['rip-options']['output-directory'], $recent_output_directories)) {
|
if (( $key = array_search($_POST['rip-options']['output-directory'], $recent_output_directories, true))) {
|
||||||
|
// Move the entry to the top of the recently used list if necessary
|
||||||
|
$recent_directory = array_splice($recent_output_directories, $key, 1);
|
||||||
|
if ($key > 0) {
|
||||||
|
array_unshift($recent_output_directories, $recent_directory[0]);
|
||||||
|
$config->set('rips.output_directories.recent', array_slice($recent_output_directories, 0, $config->get('rips.output_directories.recent_limit', 10)));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
array_unshift($recent_output_directories, $_POST['rip-options']['output-directory']);
|
array_unshift($recent_output_directories, $_POST['rip-options']['output-directory']);
|
||||||
$config->set('rips.output_directories.recent', array_slice($recent_output_directories, 0, $config->get('rips.output_directories.recent_limit', 10)));
|
$config->set('rips.output_directories.recent', array_slice($recent_output_directories, 0, $config->get('rips.output_directories.recent_limit', 10)));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$main = RippingCluster_Main::instance();
|
|
||||||
$req = $main->request();
|
|
||||||
$config = $main->config();
|
|
||||||
|
|
||||||
// Grab the name of this source
|
|
||||||
$encoded_filename = null;
|
|
||||||
if ($req->exists('confirm')) {
|
|
||||||
$plugin = $req->get('plugin', 'RippingCluster_Exception_InvalidParameters');
|
|
||||||
$encoded_filename = $req->get('id', 'RippingCluster_Exception_InvalidParameters');
|
|
||||||
|
|
||||||
$source = RippingCluster_Source_PluginFactory::loadEncoded($plugin, $encoded_filename, false);
|
|
||||||
$source->delete();
|
|
||||||
|
|
||||||
// Redirect back to the sources page
|
|
||||||
RippingCluster_Page::redirect('rips/sources');
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$plugin = $req->get('plugin', 'RippingCluster_Exception_InvalidParameters');
|
|
||||||
$encoded_filename = $req->get('id', 'RippingCluster_Exception_InvalidParameters');
|
|
||||||
|
|
||||||
$source = RippingCluster_Source_PluginFactory::loadEncoded($plugin, $encoded_filename, false);
|
|
||||||
|
|
||||||
$this->smarty->assign('source', $source);
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<input type="button" id="settings_save" name="save" value="Save" />
|
<button id="settings_save" class="btn primary" name="save">Save</button>
|
||||||
<input type="button" id="settings_new" name="new_setting" value="New Setting" />
|
<button id="settings_new" class="btn" name="new_setting">New Setting</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
"page_replacements": {
|
"page_replacements": {
|
||||||
|
|
||||||
"dialogheadertitle": {
|
"dialog-header-title": {
|
||||||
"content": "Add Setting"
|
"content": "Add Setting"
|
||||||
},
|
},
|
||||||
|
|
||||||
"dialogcontent": {
|
"dialog-body": {
|
||||||
{include file="fragments/new-setting-dialog.tpl" assign=new_setting_dialog_content}
|
{include file="fragments/new-setting-dialog.tpl" assign=new_setting_dialog_content}
|
||||||
"content": {$new_setting_dialog_content|json_encode}
|
"content": {$new_setting_dialog_content|json_encode}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,11 +14,11 @@
|
|||||||
"success": {$success|json_encode}
|
"success": {$success|json_encode}
|
||||||
{else}
|
{else}
|
||||||
"page_replacements": {
|
"page_replacements": {
|
||||||
"dialogheadertitle": {
|
"dialog-header-title": {
|
||||||
"content": "Rename Setting"
|
"content": "Rename Setting"
|
||||||
},
|
},
|
||||||
|
|
||||||
"dialogcontent": {
|
"dialog-body": {
|
||||||
{include file="fragments/rename-setting-dialog.tpl" assign="content"}
|
{include file="fragments/rename-setting-dialog.tpl" assign="content"}
|
||||||
"content": {$content|json_encode}
|
"content": {$content|json_encode}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
"content": {$sources_html|json_encode}
|
"content": {$sources_html|json_encode}
|
||||||
}
|
}
|
||||||
{else}
|
{else}
|
||||||
"dialogheadertitle": {
|
"dialog-header-title": {
|
||||||
"content": "Delete Source"
|
"content": "Delete this source?"
|
||||||
},
|
},
|
||||||
|
|
||||||
"dialogcontent": {
|
"dialog-body": {
|
||||||
{include file="fragments/delete-source.tpl" assign="delete_source_html"}
|
{include file="fragments/delete-source.tpl" assign="delete_source_html"}
|
||||||
"content": {$delete_source_html|json_encode}
|
"content": {$delete_source_html|json_encode}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
"page_replacements": {
|
"page_replacements": {
|
||||||
|
|
||||||
"dialogheadertitle": {
|
"dialog-header-title": {
|
||||||
"content": "Update Settings"
|
"content": "Settings updated"
|
||||||
},
|
},
|
||||||
|
|
||||||
"dialogcontent": {
|
"dialog-body": {
|
||||||
{include file="fragments/update-settings-dialog.tpl" assign=dialog_content}
|
{include file="fragments/update-settings-dialog.tpl" assign=dialog_content}
|
||||||
"content": {$dialog_content|json_encode}
|
"content": {$dialog_content|json_encode}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
<tr id="setting_{$id}_row">
|
<tr id="setting_{$id}_row">
|
||||||
<td>
|
<td>
|
||||||
<p>
|
<p>
|
||||||
{$name}<br />
|
<strong>{$name}</strong>
|
||||||
<input type="button" id="setting_{$id}_rename" value="Rename" onclick="rc.settings.rename_setting('{$id}', '{$name}');" />
|
</p>
|
||||||
<input type="button" id="setting_{$id}_remove" value="Remove" onclick="rc.settings.remove_setting('{$id}', '{$name}');" />
|
<p>
|
||||||
|
<button id="setting_{$id}_rename" class="btn" onclick="rc.settings.rename_setting('{$id}', '{$name}');">Rename</button>
|
||||||
|
<button id="setting_{$id}_remove" class="btn" onclick="rc.settings.remove_setting('{$id}', '{$name}');">Remove</button>
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
@@ -3,38 +3,40 @@
|
|||||||
<input type="checkbox" id="setting_{$id}" name="{$id}" value="1" {if $value}checked="checked" {/if} class="setting" />
|
<input type="checkbox" id="setting_{$id}" name="{$id}" value="1" {if $value}checked="checked" {/if} class="setting" />
|
||||||
{/case}
|
{/case}
|
||||||
{case Sihnon_Config::TYPE_INT}
|
{case Sihnon_Config::TYPE_INT}
|
||||||
<input type="text" id="setting_{$id}" name="{$id}" value="{$value}" class="setting settings_field_numeric" />
|
<input type="text" id="setting_{$id}" name="{$id}" value="{$value}" class="small setting settings_field_numeric" />
|
||||||
{/case}
|
{/case}
|
||||||
{case Sihnon_Config::TYPE_STRING}
|
{case Sihnon_Config::TYPE_STRING}
|
||||||
<input type="text" id="setting_{$id}" name="{$id}" value="{$value}" class="setting settings_field_string" />
|
<input type="text" id="setting_{$id}" name="{$id}" value="{$value}" class="xxlarge setting settings_field_string" />
|
||||||
{/case}
|
{/case}
|
||||||
{case Sihnon_Config::TYPE_STRING_LIST}
|
{case Sihnon_Config::TYPE_STRING_LIST}
|
||||||
<div id="container_{$id}">
|
<div id="container_{$id}">
|
||||||
{foreach from=$value item=line name=settings}
|
{foreach from=$value item=line name=settings}
|
||||||
<div id="settings_{$id}_line{$smarty.foreach.settings.iteration}">
|
<div id="settings_{$id}_line{$smarty.foreach.settings.iteration}">
|
||||||
<input type="text" name="{$id}[]" value="{$line}" class="setting settings_field_string" />
|
<input type="text" name="{$id}[]" value="{$line}" class="xxlarge setting settings_field_string" />
|
||||||
<input type="button" value="-" class="settings_field_remove" onclick="rc.settings.remove_stringlist_field('{$id}', '{$smarty.foreach.settings.iteration}')" />
|
<button class="btn small settings_field_remove" onclick="rc.settings.remove_stringlist_field('{$id}', '{$smarty.foreach.settings.iteration}')">-</button>
|
||||||
</div>
|
</div>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</div>
|
</div>
|
||||||
<div class="settings_addfieldcontainer">
|
<div class="settings_addfieldcontainer">
|
||||||
<input type="hidden" id="settings_{$id}_next" value="{$smarty.foreach.settings.iteration+1}" />
|
<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}')" />
|
<button class="btn small settings_field_add" onclick="rc.settings.add_stringlist_field('{$id}')">+</button>
|
||||||
</div>
|
</div>
|
||||||
{/case}
|
{/case}
|
||||||
{case Sihnon_Config::TYPE_HASH}
|
{case Sihnon_Config::TYPE_HASH}
|
||||||
<div id="container_{$id}">
|
<div id="container_{$id}">
|
||||||
|
{if $value}
|
||||||
{foreach from=$value item=hash_value key=hash_key name=settings}
|
{foreach from=$value item=hash_value key=hash_key name=settings}
|
||||||
<div id="settings_{$id}_line{$smarty.foreach.settings.iteration}">
|
<div id="settings_{$id}_line{$smarty.foreach.settings.iteration}">
|
||||||
<input type="text" value="{$hash_key}" class="setting hash_key" />
|
<input type="text" value="{$hash_key}" class="small setting hash_key" />
|
||||||
<input type="text" name="{$id}[{$hash_key}]" value="{$hash_value}" class="setting hash_value" />
|
<input type="text" name="{$id}[{$hash_key}]" value="{$hash_value}" class="xlarge setting hash_value" />
|
||||||
<input type="button" value="-" class="settings_field_remove" onclick="rc.settings.remove_hash_field('{$id}', '{$smarty.foreach.settings.iteration}')" />
|
<button class="btn small settings_field_remove" onclick="rc.settings.remove_hash_field('{$id}', '{$smarty.foreach.settings.iteration}')">-</button>
|
||||||
</div>
|
</div>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="settings_addfieldcontainer">
|
<div class="settings_addfieldcontainer">
|
||||||
<input type="hidden" id="settings_{$id}_next" value="{$smarty.foreach.settings.iteration+1}" />
|
<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}')" />
|
<button class="btn small settings_field_add" onclick="rc.settings.add_hash_field('{$id}')">+</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/case}
|
{/case}
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<dl>
|
||||||
|
<dt>Destination Filename</dt>
|
||||||
|
<dd>{$job->destinationFilename()|escape:html}</dd>
|
||||||
|
|
||||||
|
{if $job->isFinished()}
|
||||||
|
<dt>File size</dt>
|
||||||
|
<dd>({$job->outputFilesize()|formatFilesize|escape:html})</dd>
|
||||||
|
{/if}
|
||||||
|
</dl>
|
||||||
15
source/webui/templates/fragments/job-status-popover.tpl
Normal file
15
source/webui/templates/fragments/job-status-popover.tpl
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<dl>
|
||||||
|
{if $current_status->hasProgressInfo()}
|
||||||
|
<dt>Started</dt>
|
||||||
|
<dd>{$current_status->ctime()|date_format:"%D %T"}</dd>
|
||||||
|
|
||||||
|
<dt>Progress</dt>
|
||||||
|
<dd>{$current_status->ripProgress()}%</dd>
|
||||||
|
|
||||||
|
<dt>ETA</dt>
|
||||||
|
<dd>{$job->calculateETA()|formatDuration}</dd>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<dt>Last update</dt>
|
||||||
|
<dd>{$current_status->mtime()|date_format:"%D %T"}</dd>
|
||||||
|
</dl>
|
||||||
@@ -1,22 +1,11 @@
|
|||||||
<table>
|
<label for="settings_add_name">Name</label>
|
||||||
<thead>
|
<input type="text" id="settings_add_name" value="" />
|
||||||
<th>Name</th>
|
|
||||||
<th>Type</th>
|
<label for="settings_add_type">Type</label>
|
||||||
</thead>
|
<select id="settings_add_type">
|
||||||
<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="int">Integer</option>
|
||||||
<option value="bool">Boolean</option>
|
<option value="bool">Boolean</option>
|
||||||
<option value="string">String</option>
|
<option value="string">String</option>
|
||||||
<option value="string-list">String List</option>
|
<option value="string-list">String List</option>
|
||||||
<option value="hash">Hash</option>
|
<option value="hash">Hash</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|||||||
@@ -2,5 +2,5 @@
|
|||||||
<p>
|
<p>
|
||||||
Enter a new name for setting '{$name|escape}' below.
|
Enter a new name for setting '{$name|escape}' below.
|
||||||
</p>
|
</p>
|
||||||
<input type="text" id="settings_rename_name" value="" />
|
<input type="text" id="settings_rename_name" value="{$name|escape:html}" />
|
||||||
</div>
|
</div>
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
{assign var='source_filename' value=$source->filename()}
|
{assign var='source_filename' value=$source->filename()}
|
||||||
{assign var='source_filename_encoded' value=$source->filenameEncoded()}
|
{assign var='source_filename_encoded' value=$source->filenameEncoded()}
|
||||||
{assign var='source_cached' value=$source->isCached()}
|
{assign var='source_cached' value=$source->isCached()}
|
||||||
<li>
|
<li class="hover-highlight">
|
||||||
[ <a href="{$base_uri}sources/details/plugin/{$source_plugin}/id/{$source_filename_encoded}" title="Browse source details">Browse</a> |
|
[ <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="{$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> ]
|
<a href="javascript:rc.sources.remove('{$source_plugin|escape:'quote'}', '{$source_filename_encoded|escape:'quote'}');" title="Delete this source">Delete</a> ]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<p>
|
<p>
|
||||||
Settings have been saved.
|
Your changes have been saved.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{if $messages}
|
{if $messages}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<title>{$title}</title>
|
<title>{$title}</title>
|
||||||
|
|
||||||
<!-- JQuery //-->
|
<!-- JQuery //-->
|
||||||
<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/jquery/1.7.1/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="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></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="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/smoothness/jquery-ui.css" rel="Stylesheet" />
|
||||||
<!-- JQuery Plugins //-->
|
<!-- JQuery Plugins //-->
|
||||||
@@ -99,34 +99,32 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="centrepoint">
|
<div id="dialog" class="modal hide fade">
|
||||||
<div id="dialog">
|
<div class="modal-header">
|
||||||
<div id="dialogheader">
|
<a href="#" class="close">×</a>
|
||||||
<div id="dialogheadertitle">Dialog</div>
|
<h3 id="dialog-header-title"></h3>
|
||||||
<div id="dialogheaderclose">X</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="dialogcontent"></div>
|
<div id="dialog-body" class="modal-body"></div>
|
||||||
<div id="dialogfooter">
|
<div id="dialog-footer" class="modal-footer">
|
||||||
<div id="dialogfooterok" class="dialogfooterbuttonset">
|
<div id="dialog-footer-ok" class="dialog-footer-buttonset">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<input type="button" class="dialogbutton" id="dialogfooterok" value="Ok" />
|
<input type="button" class="btn primary" id="dialog-footer-ok-ok" value="Ok" />
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
<div id="dialogfooterokcancel" class="dialogfooterbuttonset">
|
<div id="dialog-footer-okcancel" class="dialog-footer-buttonset">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<input type="button" class="dialogbutton" id="dialogfooterokcancel_ok" value="Ok" />
|
<input type="button" class="btn primary" id="dialog-footer-okcancel-ok" value="Ok" />
|
||||||
<input type="button" class="dialogbutton" id="dialogfooterokcancel_cancel" value="Cancel" />
|
<input type="button" class="btn secondary" id="dialog-footer-okcancel-cancel" value="Cancel" />
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
<div id="dialogfooteryesno" class="dialogfooterbuttonset">
|
<div id="dialog-footer-yesno" class="dialog-footer-buttonset">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<input type="button" class="dialogbutton" id="dialogfooteryes" value="Yes" />
|
<input type="button" class="btn primary" id="dialog-footer-yesno-yes" value="Yes" />
|
||||||
<input type="button" class="dialogbutton" id="dialogfooterno" value="No" />
|
<input type="button" class="btn secondary" id="dialog-footer-yesno-no" value="No" />
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -31,44 +31,41 @@
|
|||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th>
|
||||||
|
<input id="jobs_select_all" class="select_all" type="checkbox" />
|
||||||
|
Actions
|
||||||
|
</th>
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Destination</th>
|
<th>Destination</th>
|
||||||
<th>Title</th>
|
|
||||||
<th>Status</th>
|
<th>Status</th>
|
||||||
<th>Actions</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{foreach from=$jobs item=job}
|
{foreach from=$jobs item=job}
|
||||||
{assign var=current_status value=$job->currentStatus()}
|
{assign var=current_status value=$job->currentStatus()}
|
||||||
<tr>
|
<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>
|
<td>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<input type="checkbox" name="include[]" value="{$job->id()}" />
|
<input type="checkbox" class="jobs_select_all" 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="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="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="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" />
|
<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>
|
</fieldset>
|
||||||
</td>
|
</td>
|
||||||
|
<td><a href="{$base_uri}jobs/details/id/{$job->id()}" title="View job details">{$job->name()}</a></td>
|
||||||
|
<td>
|
||||||
|
{include file="fragments/job-filename-popover.tpl" assign=popover_content}
|
||||||
|
<a href="#" rel="popover" data-placement="below" data-title="Destination details" data-content="{$popover_content|escape:html}">{$job->destinationFileBasename()|escape:html}</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{include file="fragments/job-status-popover.tpl" assign=popover_content}
|
||||||
|
<a href="#" rel="popover" title="{$current_status->statusName()|escape:html}" data-placement="below" data-content="{$popover_content|escape:html}">{$current_status->statusName()}</a>
|
||||||
|
{if $current_status->hasProgressInfo()}
|
||||||
|
<br />
|
||||||
|
<small>{$job->calculateETA()|formatDuration:1} remaining</small>
|
||||||
|
{/if}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
<input type="hidden" name="id" value="{$source->filenameEncoded()|escape:"html"}" />
|
<input type="hidden" name="id" value="{$source->filenameEncoded()|escape:"html"}" />
|
||||||
|
|
||||||
<div>
|
<div class="clearfix">
|
||||||
<label for="global-output-directory">Output directory</label>
|
<label for="global-output-directory">Output directory</label>
|
||||||
<select id="global-output-directory" name="rip-options[output-directory]">
|
<select id="global-output-directory" name="rip-options[output-directory]" class="xxlarge">
|
||||||
<optgroup label="Custom"></optgroup>
|
<optgroup label="Custom"></optgroup>
|
||||||
<optgroup label="Defaults">
|
<optgroup label="Defaults">
|
||||||
{foreach from=$default_output_directories item=dir key=name}
|
{foreach from=$default_output_directories item=dir key=name}
|
||||||
@@ -45,41 +45,45 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="clearfix">
|
||||||
<label for="global-format">Output format</label>
|
<label for="global-format">Output format</label>
|
||||||
<select id="global-format" name="rip-options[format]">
|
<select id="global-format" name="rip-options[format]" class="small">
|
||||||
<option value="mkv" selected="selected">MKV</option>
|
<option value="mkv" selected="selected">MKV</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="clearfix">
|
||||||
<label for="global-video-codec">Video codec</label>
|
<label for="global-video-codec">Video codec</label>
|
||||||
<select id="global-video-codec" name="rip-options[video-codec]">
|
<select id="global-video-codec" name="rip-options[video-codec]" class="small">
|
||||||
<option value="x264" selected="selected">x264</option>
|
<option value="x264" selected="selected">x264</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="clearfix">
|
||||||
<label for="global-video-width">Video width</label>
|
<label for="global-video-width">Video width</label>
|
||||||
|
<div class="input">
|
||||||
<input type="text" id="global-video-width" name="rip-options[video-width]" value="0" />
|
<input type="text" id="global-video-width" name="rip-options[video-width]" value="0" />
|
||||||
<em>(Use 0 to leave size unchanged from source.)</em>
|
<span class="help-inline">(Use 0 to leave size unchanged from source.)</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
</div>
|
||||||
|
|
||||||
|
<div class="clearfix">
|
||||||
<label for="global-video-height">Video height</label>
|
<label for="global-video-height">Video height</label>
|
||||||
<input type="text" id="global-video-height" name="rip-options[video-height]" value="0" />
|
<div class="input">
|
||||||
<em>(Use 0 to leave size unchanged from source.)</em>
|
<input type="text" id="global-video-height" class="small" name="rip-options[video-height]" value="0" />
|
||||||
|
<span class="help-inline">(Use 0 to leave size unchanged from source.)</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="clearfix">
|
||||||
<label for="global-quantizer">Quantizer</label>
|
<label for="global-quantizer">Quantizer</label>
|
||||||
<input type="text" id="global-quantizer" name="rip-options[quantizer]" value="" readonly="readonly" />
|
<div class="input">
|
||||||
<em>(Defaults to 0.61, x264's quantizer value for 20)</em>
|
|
||||||
<div id="quantizer-slider"></div>
|
<div id="quantizer-slider"></div>
|
||||||
|
<input type="text" id="global-quantizer" class="small" name="rip-options[quantizer]" value="" readonly="readonly" />
|
||||||
|
<span class="help-inline">(Defaults to 0.61, x264's quantizer value for 20)</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
|
||||||
<input type="submit" name="submit" value="Queue rips" />
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<div id="available-titles">
|
<div id="available-titles">
|
||||||
@@ -89,17 +93,17 @@
|
|||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Configure title rip options</legend>
|
<legend>Configure title rip options</legend>
|
||||||
|
|
||||||
<div>
|
<div class="clearfix">
|
||||||
<label for="rip-title-{$title->id()}">Rip this title</label>
|
<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" />
|
<input type="checkbox" id="rip-title-{$title->id()}" name="rips[{$title->id()}][queue]" value="1" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="clearfix">
|
||||||
<label for="rip-name-{$title->id()}">Short Name</label>
|
<label for="rip-name-{$title->id()}">Short Name</label>
|
||||||
<input type="text" id="rip-name-{$title->id()}" name="rips[{$title->id()}][name]" value="" />
|
<input type="text" id="rip-name-{$title->id()}" name="rips[{$title->id()}][name]" value="" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="clearfix">
|
||||||
<label for="rip-audio-{$title->id()}">Audio tracks</label>
|
<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">
|
<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}
|
{foreach from=$title->audioTracks() item=audio}
|
||||||
@@ -107,22 +111,7 @@
|
|||||||
{/foreach}
|
{/foreach}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<table class="audio-tracks">
|
<div class="clearfix">
|
||||||
<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>
|
<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">
|
<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}
|
{foreach from=$title->subtitleTracks() item=subtitle}
|
||||||
@@ -130,27 +119,12 @@
|
|||||||
{/foreach}
|
{/foreach}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<table class="subtitle-tracks">
|
<div class="clearfix">
|
||||||
<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>
|
<label for="rips-output-{$title->id()}">Output filename</label>
|
||||||
<input type="text" id="rips-output-{$title->id()}" name="rips[{$title->id()}][output_filename]" value="" />
|
<input type="text" id="rips-output-{$title->id()}" name="rips[{$title->id()}][output_filename]" value="" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="clearfix">
|
||||||
<label for="rip-deinterlace-{$title->id()}">Deinterlacing</label>
|
<label for="rip-deinterlace-{$title->id()}">Deinterlacing</label>
|
||||||
<select id="rip-deinterlace-{$title->id()}" name="rips[{$title->id()}][deinterlace]">
|
<select id="rip-deinterlace-{$title->id()}" name="rips[{$title->id()}][deinterlace]">
|
||||||
<option value="0">None</option>
|
<option value="0">None</option>
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
<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>
|
|
||||||
Reference in New Issue
Block a user