Bootstrap 3

New: Updated UI
New: Mobile browser support
Fixed: /favicon.ico will return the favicon now
pull/4/head
Mark McDowall 10 years ago
parent 28fa264c69
commit 99f2b07a11

@ -27,7 +27,7 @@ module.exports = function (grunt) {
},
bootstrap: {
src : srcContent + 'Bootstrap/bootstrap.less',
src : srcContent + 'bootstrap.less',
dest: destContent + 'bootstrap.css'
},
general : {
@ -118,7 +118,7 @@ module.exports = function (grunt) {
requirejs: {
compile:{
options: {
mainConfigFile: "src/UI/app.js",
mainConfigFile: 'src/UI/app.js',
fileExclusionRegExp: /^.*\.(?!js$)[^.]+$/,
preserveLicenseComments: false,
dir: outputDir,
@ -139,11 +139,11 @@ module.exports = function (grunt) {
nospawn: false
},
bootstrap : {
files: [ srcContent + 'Bootstrap/**', srcContent + 'FontAwesome/**'],
files: [ srcContent + 'Bootstrap/**', srcContent + 'FontAwesome/**', srcContent + 'bootstrap.less'],
tasks: ['less:bootstrap','less:general']
},
generalLess: {
files: [ srcRoot + '**/*.less', '!**/Bootstrap/**', '!**/FontAwesome/**'],
files: [ srcRoot + '**/*.less', '!**/Bootstrap/**', '!**/FontAwesome/**', '!' + srcContent + '/bootstrap.less'],
tasks: ['less:general']
},
handlebars : {

@ -0,0 +1,30 @@
using System.IO;
using NLog;
using NzbDrone.Common.Disk;
using NzbDrone.Common.EnvironmentInfo;
namespace NzbDrone.Api.Frontend.Mappers
{
public class FaviconMapper : StaticResourceMapperBase
{
private readonly IAppFolderInfo _appFolderInfo;
public FaviconMapper(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider, Logger logger)
: base(diskProvider, logger)
{
_appFolderInfo = appFolderInfo;
}
protected override string Map(string resourceUrl)
{
var path = Path.Combine("Content", "Images", "favicon.ico");
return Path.Combine(_appFolderInfo.StartUpFolder, "UI", path);
}
public override bool CanHandle(string resourceUrl)
{
return resourceUrl.Equals("/favicon.ico");
}
}
}

@ -1,6 +1,5 @@
using System.IO;
using NLog;
using NzbDrone.Common;
using NzbDrone.Common.Disk;
using NzbDrone.Common.EnvironmentInfo;
@ -29,7 +28,7 @@ namespace NzbDrone.Api.Frontend.Mappers
return resourceUrl.StartsWith("/Content") ||
resourceUrl.EndsWith(".js") ||
resourceUrl.EndsWith(".css") ||
resourceUrl.EndsWith(".ico") ||
(resourceUrl.EndsWith(".ico") && !resourceUrl.Equals("/favicon.ico")) ||
resourceUrl.EndsWith(".swf");
}
}

@ -128,6 +128,7 @@
<Compile Include="Extensions\NancyJsonSerializer.cs" />
<Compile Include="Extensions\RequestExtensions.cs" />
<Compile Include="Frontend\IsCacheableSpecification.cs" />
<Compile Include="Frontend\Mappers\FaviconMapper.cs" />
<Compile Include="Frontend\Mappers\IndexHtmlMapper.cs" />
<Compile Include="Frontend\Mappers\LogFileMapper.cs" />
<Compile Include="Frontend\Mappers\MediaCoverMapper.cs" />

@ -13,6 +13,7 @@ namespace NzbDrone.Automation.Test.PageModel
public PageBase(RemoteWebDriver driver)
{
_driver = driver;
driver.Manage().Window.Maximize();
}
public IWebElement FindByClass(string className, int timeout = 5)
@ -52,7 +53,7 @@ namespace NzbDrone.Automation.Test.PageModel
{
get
{
return Find(By.LinkText("Series"));
return FindByClass("x-series-nav");
}
}
@ -60,7 +61,7 @@ namespace NzbDrone.Automation.Test.PageModel
{
get
{
return Find(By.LinkText("Calendar"));
return FindByClass("x-calendar-nav");
}
}
@ -68,7 +69,7 @@ namespace NzbDrone.Automation.Test.PageModel
{
get
{
return Find(By.LinkText("History"));
return FindByClass("x-history-nav");
}
}
@ -76,7 +77,7 @@ namespace NzbDrone.Automation.Test.PageModel
{
get
{
return Find(By.LinkText("Wanted"));
return FindByClass("x-wanted-nav");
}
}
@ -84,7 +85,7 @@ namespace NzbDrone.Automation.Test.PageModel
{
get
{
return Find(By.LinkText("Settings"));
return FindByClass("x-settings-nav");
}
}
@ -92,7 +93,7 @@ namespace NzbDrone.Automation.Test.PageModel
{
get
{
return Find(By.PartialLinkText("System"));
return FindByClass("x-system-nav");
}
}

@ -194,6 +194,7 @@
<Compile Include="Datastore\Migration\046_fix_nzb_su_url.cs" />
<Compile Include="Datastore\Migration\047_add_published_date_blacklist_column.cs" />
<Compile Include="Datastore\Migration\048_add_title_to_scenemappings.cs" />
<Compile Include="Datastore\Migration\049_fix_dognzb_url.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationContext.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationController.cs" />
<Compile Include="Datastore\Migration\Framework\MigrationExtension.cs" />

@ -1,23 +1,17 @@
<div class="row operations-row">
<div class="btn-group btn-block">
<div class="btn btn-lg add-series-import-btn x-import">
<i class="icon-hdd"/>
Import existing series on disk
<div class="row">
<div class="col-md-12">
<div class="btn-group add-series-btn-group btn-group-lg btn-block">
<button type="button" class="btn btn-default col-md-10 col-xs-8 add-series-import-btn x-import">
<i class="icon-hdd"/>
Import existing series on disk
</button>
<button class="btn btn-default col-md-2 col-xs-4 x-add-new"><i class="icon-play hidden-xs"></i> Add new series</button>
</div>
<button class="btn btn-lg btn-icon-only dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li class="add-new x-add-new">
Add new series
</li>
</ul>
</div>
<!--<div class="btn btn-block btn-lg add-series-import-btn x-import">-->
<!--<i class="icon-hdd"/>-->
<!--Import existing series on disk-->
<!--</div>-->
</div>
<div id="add-series-workspace"/>
<div class="row">
<div class="col-md-12">
<div id="add-series-workspace"></div>
</div>
</div>

@ -1,12 +1,13 @@
{{#if folder.path}}
<div class="row unmapped-folder-path">
<div class="col-md-11">
<div class="unmapped-folder-path">
<div class="col-md-12">
{{folder.path}}
</div>
</div>{{/if}}
<div class="row x-search-bar">
<div class="input-group nz-input-large add-series-search col-md-11">
<i class="input-group-addon icon-search"/>
<div class="x-search-bar">
<div class="input-group input-group-lg add-series-search">
<span class="input-group-addon"><i class="icon-search"/></span>
{{#if folder}}
<input type="text" class="form-control x-series-search" value="{{folder.name}}">
{{else}}

@ -7,15 +7,19 @@
<div class="modal-body root-folders-modal">
<div class="validation-errors"></div>
<div class="alert alert-info">Enter the path that contains some or all of your TV series, you will be able to choose which series you want to import<button type="button" class="close" data-dismiss="alert">×</button></div>
<div class="input-group x-path form-group">
<span class="input-group-addon">&nbsp;<i class="icon-folder-open"></i></span>
<input class="col-md-9" type="text" validation-name="path" placeholder="Enter path to folder that contains your shows">
<button class="btn btn-success x-add">
<i class="icon-ok"/>
</button>
<input class="col-md-9 form-control" type="text" validation-name="path" placeholder="Enter path to folder that contains your shows">
<span class="input-group-btn ">
<button class="btn btn-success x-add">
<i class="icon-ok"/>
</button>
</span>
</div>
{{#if items}}
<h4>Recent Folders</h4>
<h4>Recent Folders</h4>
{{/if}}
<div id="current-dirs" class="root-folders-list"></div>
</div>

@ -1,12 +1,11 @@
<div>
<select class="col-md-4 x-root-folder" validation-name="RootFolderPath">
{{#if this}}
{{#each this}}
<option value="{{id}}">{{path}}</option>
{{/each}}
{{else}}
<option value="">Select Path</option>
{{/if}}
<option value="addNew">Add a different path</option>
</select>
</div>
<select class="col-md-4 form-control x-root-folder" validation-name="RootFolderPath">
{{#if this}}
{{#each this}}
<option value="{{id}}">{{path}}</option>
{{/each}}
{{else}}
<option value="">Select Path</option>
{{/if}}
<option value="addNew">Add a different path</option>
</select>

@ -1,4 +1,4 @@
<select class="starting-season x-starting-season">
<select class="form-control md-col-2 starting-season x-starting-season">
{{#each this}}
{{#if_eq seasonNumber compare="0"}}
<option value="{{seasonNumber}}">Specials</option>

@ -6,8 +6,7 @@
{{defaultImg}} >
</a>
</div>
<div class="col-md-9">
<div class="col-md-10">
<div class="row">
<h2 class="series-title">
{{titleWithYear}}
@ -21,42 +20,51 @@
{{overview}}
</div>
</div>
{{#unless existing}}
<div class="row labels">
{{#unless path}}
<div class="col-md-4">Path</div>
{{/unless}}
<div class="col-md-1 starting-season starting-season-label">Starting Season</div>
<div class="col-md-2">Quality Profile</div>
</div>
{{/unless}}
<div class="row">
<form class="form-inline">
{{#if existing}}
<div class="btn add-series disabled pull-right">
Already Exists
</div>
{{else}}
{{#unless existing}}
{{#unless path}}
{{> RootFolderSelectionPartial rootFolders}}
<div class="form-group col-md-4">
<label>Path</label>
{{> RootFolderSelectionPartial rootFolders}}
</div>
{{/unless}}
<div class="form-group col-md-2">
<label>Starting Season</label>
{{> StartingSeasonSelectionPartial seasons}}
</div>
<div class="form-group col-md-2">
<label>Quality Profile</label>
{{> QualityProfileSelectionPartial qualityProfiles}}
</div>
<div class="form-group col-md-2">
<label>Season Folders</label>
{{> StartingSeasonSelectionPartial seasons}}
{{> QualityProfileSelectionPartial qualityProfiles}}
<label class="checkbox-button" title="Use season folders">
<input type="checkbox" class="x-season-folder"/>
<div class="btn btn-primary btn-icon-only">
<i class="icon-folder-close"></i>
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" class="x-season-folder"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
</div>
</label>
</div>
<div class="form-group col-md-1 pull-right">
<label>&nbsp;</label>
<button class="btn btn-success x-add add-series pull-right pull-none-xs"> Add
<i class="icon-plus"></i>
</button>
</div>
<span class="btn btn-success x-add add-series pull-right"> Add
<i class="icon-plus"></i>
</span>
{{/if}}
</form>
{{else}}
<div class="col-md-1 col-md-offset-11">
<button class="btn add-series disabled pull-right pull-none-xs">
Already Exists
</button>
</div>
{{/unless}}
</div>
</div>
</div>

@ -2,20 +2,11 @@
@import "../Shared/Styles/clickable.less";
#add-series-screen {
.operations-row {
margin-left : 0px;
}
.existing-series {
.card();
margin : 30px 0px;
.add-series-search {
width : 970px;
}
.unmapped-folder-path {
padding: 20px;
margin-left : 0px;
@ -42,17 +33,6 @@
.add-series-search {
margin-top : 20px;
margin-bottom : 20px;
padding-left : 20px;
*[class*='icon-'] {
font-size : 28px;
height : 30px;
width : 40px;
padding-top : 14px;
}
input {
height : 50px;
}
}
.search-item {
@ -101,12 +81,8 @@
}
.checkbox {
width : 100px;
margin-left : 0px;
display : inline-block;
padding-top : 0px;
margin-bottom : 0px;
}
margin-top : 0px;
}
.starting-season {
width: 140px;
@ -116,9 +92,9 @@
}
}
.labels {
[class*="span"] {
margin-left: 3px;
i {
&:before {
color: #ffffff;
}
}
}
@ -147,16 +123,6 @@ li.add-new:hover {
background-color: rgb(0, 129, 194);
}
.btn-group {
.dropdown-menu {
right: 0px;
}
.add-series-import-btn {
width: 93.3%;
}
}
.root-folders-modal {
overflow: visible;

@ -1,29 +1,33 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>NzbDrone Calendar feed</h3>
</div>
<div class="modal-body edit-series-modal">
<div class="row">
<div>
<div class="form-horizontal">
<div class="form-group">
<label class="control-label">iCal feed</label>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>NzbDrone Calendar feed</h3>
</div>
<div class="modal-body edit-series-modal">
<div class="row">
<div>
<div class="form-horizontal">
<div class="form-group">
<label class="control-label">iCal feed</label>
<div class="controls ical-url">
<div class="input-group">
<input type="text" class="x-ical-url" value="{{icalHttpUrl}}" readonly="readonly" />
<button class="btn btn-icon-only x-ical-copy" title="Copy to clipboard"><i class="icon-copy"></i></button>
<a class="btn btn-icon-only no-router" title="Subscribe" href="{{icalWebCalUrl}}" target="_blank"><i class="icon-calendar-empty"></i></a>
<div class="controls ical-url">
<div class="input-group">
<input type="text" class="x-ical-url" value="{{icalHttpUrl}}" readonly="readonly" />
<button class="btn btn-icon-only x-ical-copy" title="Copy to clipboard"><i class="icon-copy"></i></button>
<a class="btn btn-icon-only no-router" title="Subscribe" href="{{icalWebCalUrl}}" target="_blank"><i class="icon-calendar-empty"></i></a>
</div>
<span class="help-inline">
<i class="icon-nd-form-info" title="Copy this url into your clients subscription form or use the subscribe button if your browser support webcal"/>
</span>
</div>
</div>
<span class="help-inline">
<i class="icon-nd-form-info" title="Copy this url into your clients subscription form or use the subscribe button if your browser support webcal"/>
</span>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">close</button>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">close</button>
</div>

@ -1,5 +1,5 @@
<div class="row">
<div class="col-md-3">
<div class="col-md-3 hidden-xs">
<div class="pull-left">
<h4>Upcoming</h4>
</div>
@ -10,7 +10,7 @@
</div>
<div id="x-upcoming"/>
</div>
<div class="col-md-9">
<div class="col-md-9 col-xs-12">
<div id="x-calendar" class="calendar"/>
<div class="legend calendar">
<ul class='legend-labels'>

@ -2,6 +2,7 @@
define(
[
'jquery',
'vent',
'marionette',
'moment',
@ -12,7 +13,7 @@ define(
'Mixins/backbone.signalr.mixin',
'fullcalendar',
'jquery.easypiechart'
], function (vent, Marionette, moment, CalendarCollection, StatusModel, QueueCollection, Config) {
], function ($, vent, Marionette, moment, CalendarCollection, StatusModel, QueueCollection, Config) {
return Marionette.ItemView.extend({
storageKey: 'calendar.view',
@ -24,28 +25,7 @@ define(
},
render : function () {
this.$el.empty().fullCalendar({
defaultView : Config.getValue(this.storageKey, 'basicWeek'),
allDayDefault : false,
ignoreTimezone: false,
weekMode : 'variable',
firstDay : StatusModel.get('startOfWeek'),
timeFormat : 'h(:mm)tt',
header : {
left : 'prev,next today',
center: 'title',
right : 'month,basicWeek,basicDay'
},
buttonText : {
prev: '<i class="icon-arrow-left"></i>',
next: '<i class="icon-arrow-right"></i>'
},
viewRender : this._viewRender.bind(this),
eventRender : this._eventRender.bind(this),
eventClick : function (event) {
vent.trigger(vent.Commands.ShowEpisodeDetails, {episode: event.model});
}
});
this.$el.empty().fullCalendar(this._getOptions());
},
onShow: function () {
@ -178,6 +158,59 @@ define(
}
return downloading.get('title');
},
_getOptions: function () {
var options = {
allDayDefault : false,
ignoreTimezone: false,
weekMode : 'variable',
firstDay : StatusModel.get('startOfWeek'),
timeFormat : 'h(:mm)tt',
buttonText : {
prev: '<i class="icon-arrow-left"></i>',
next: '<i class="icon-arrow-right"></i>'
},
viewRender : this._viewRender.bind(this),
eventRender : this._eventRender.bind(this),
eventClick : function (event) {
vent.trigger(vent.Commands.ShowEpisodeDetails, {episode: event.model});
}
};
if ($(window).width() < 768) {
options.defaultView = Config.getValue(this.storageKey, 'basicDay');
options.titleFormat = {
month: 'MMM yyyy', // September 2009
week: 'MMM d[ yyyy]{ \'&#8212;\'[ MMM] d yyyy}', // Sep 7 - 13 2009
day: 'ddd, MMM d, yyyy' // Tuesday, Sep 8, 2009
};
options.header = {
left : 'prev,next today',
center: 'title',
right : 'basicWeek,basicDay'
};
}
else {
options.defaultView = Config.getValue(this.storageKey, 'basicWeek');
options.titleFormat = {
month: 'MMM yyyy', // September 2009
week: 'MMM d[ yyyy]{ \'&#8212;\'[ MMM] d yyyy}', // Sep 7 - 13 2009
day: 'dddd, MMM d, yyyy' // Tues, Sep 8, 2009
};
options.header = {
left : 'prev,next today',
center: 'title',
right : 'month,basicWeek,basicDay'
};
}
return options;
}
});
});

@ -1,4 +1,4 @@
<div class="btn-group">
<div class="btn-group hidden-xs">
<button class="btn btn-xs x-automatic-search x-automatic-search-icon" title="Automatic Search" data-container="body"><i class="icon-search"></i></button>
<button class="btn btn-xs dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
@ -7,4 +7,8 @@
<li class="x-automatic-search">Automatic Search</li>
<li class="x-manual-search">Manual Search</li>
</ul>
</div>
<div class="visible-xs">
<button class="btn btn-xs x-automatic-search x-automatic-search-icon" title="Automatic Search" data-container="body"><i class="icon-search"></i></button>
</div>

@ -18,8 +18,8 @@ define(
this.$el.empty();
this.$el.html(
'<i class="icon-cog x-edit-series" title="" data-original-title="Edit Series"></i> ' +
'<i class="icon-remove x-remove-series" title="" data-original-title="Delete Series"></i>'
'<i class="icon-nd-edit x-edit-series" title="" data-original-title="Edit Series"></i> ' +
'<i class="icon-remove x-remove-series hidden-xs" title="" data-original-title="Delete Series"></i>'
);
this.delegateEvents();

@ -16,6 +16,10 @@
.episode-title-cell {
.btn-link;
.text-overflow();
&:hover {
text-transform: none;
}
}
.air-date-cell {
@ -88,7 +92,7 @@ td.episode-status-cell, td.quality-cell {
}
.episode-actions-cell {
width: 50px;
width: 65px;
li {
.clickable();
@ -110,12 +114,13 @@ td.episode-status-cell, td.quality-cell {
}
.series-actions-cell {
width: 56px;
width : 56px;
min-width : 56px;
}
.timeleft-cell {
cursor: default;
width: 80px;
cursor : default;
width : 80px;
}
.queue-status-cell {

@ -17,6 +17,10 @@
font-size : 13px;
position : absolute;
right : 0;
.label {
margin-top: 5px;
}
}
ul {

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

@ -4,93 +4,98 @@ ul.messenger {
padding: 0;
}
/* line 8, ../../src/sass/messenger.sass */
ul.messenger li {
ul.messenger > li {
list-style: none;
margin: 0;
padding: 0;
}
/* line 14, ../../src/sass/messenger.sass */
ul.messenger.messenger-empty {
display: none;
}
/* line 17, ../../src/sass/messenger.sass */
ul.messenger .messenger-message {
overflow: hidden;
*zoom: 1;
}
/* line 17, ../../src/sass/messenger.sass */
/* line 20, ../../src/sass/messenger.sass */
ul.messenger .messenger-message.messenger-hidden {
display: none;
}
/* line 20, ../../src/sass/messenger.sass */
/* line 23, ../../src/sass/messenger.sass */
ul.messenger .messenger-message .messenger-phrase, ul.messenger .messenger-message .messenger-actions a {
padding-right: 5px;
}
/* line 23, ../../src/sass/messenger.sass */
/* line 26, ../../src/sass/messenger.sass */
ul.messenger .messenger-message .messenger-actions {
float: right;
}
/* line 26, ../../src/sass/messenger.sass */
/* line 29, ../../src/sass/messenger.sass */
ul.messenger .messenger-message .messenger-actions a {
cursor: pointer;
text-decoration: underline;
}
/* line 30, ../../src/sass/messenger.sass */
/* line 33, ../../src/sass/messenger.sass */
ul.messenger .messenger-message ul, ul.messenger .messenger-message ol {
margin: 10px 18px 0;
}
/* line 36, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed {
position: fixed;
z-index: 10000;
}
/* line 34, ../../src/sass/messenger.sass */
/* line 40, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed .messenger-message {
min-width: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/* line 39, ../../src/sass/messenger.sass */
/* line 45, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed .message .messenger-actions {
float: left;
}
/* line 42, ../../src/sass/messenger.sass */
/* line 48, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top {
top: 20px;
}
/* line 45, ../../src/sass/messenger.sass */
/* line 51, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-bottom {
bottom: 20px;
}
/* line 48, ../../src/sass/messenger.sass */
/* line 54, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {
left: 50%;
width: 800px;
margin-left: -400px;
}
@media (max-width: 960px) {
/* line 48, ../../src/sass/messenger.sass */
/* line 54, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top, ul.messenger.messenger-fixed.messenger-on-bottom {
left: 10%;
width: 80%;
margin-left: 0px;
}
}
/* line 58, ../../src/sass/messenger.sass */
/* line 64, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-right {
right: 20px;
left: auto;
}
/* line 62, ../../src/sass/messenger.sass */
/* line 68, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-top.messenger-on-left, ul.messenger.messenger-fixed.messenger-on-bottom.messenger-on-left {
left: 20px;
margin-left: 0px;
}
/* line 66, ../../src/sass/messenger.sass */
/* line 72, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-right, ul.messenger.messenger-fixed.messenger-on-left {
width: auto;
min-width: 350px;
max-width: 800px;
word-wrap: break-word;
width: 350px;
}
/* line 69, ../../src/sass/messenger.sass */
/* line 75, ../../src/sass/messenger.sass */
ul.messenger.messenger-fixed.messenger-on-right .messenger-actions, ul.messenger.messenger-fixed.messenger-on-left .messenger-actions {
float: left;
}
/* line 72, ../../src/sass/messenger.sass */
/* line 78, ../../src/sass/messenger.sass */
ul.messenger .messenger-spinner {
display: none;
}

@ -234,33 +234,28 @@ ul.messenger.messenger-spinner-active .messenger-spinner .messenger-spinner {
transform-origin: 100% 50%;
}
/* line 15, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future {
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.24), 0px 1px 5px rgba(0, 0, 0, 0.6);
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.24), 0px 1px 5px rgba(0, 0, 0, 0.6);
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.24), 0px 1px 5px rgba(0, 0, 0, 0.6);
/* line 15, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5c5b5b), color-stop(100%, #353535));
background-image: -webkit-linear-gradient(#5c5b5b, #353535);
background-image: -moz-linear-gradient(#5c5b5b, #353535);
background-image: -o-linear-gradient(#5c5b5b, #353535);
background-image: linear-gradient(#5c5b5b, #353535);
background-color: #5c5b5b;
border: 1px solid rgba(0, 0, 0, 0.5);
}
/* line 24, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future.messenger-empty {
-moz-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
user-select: none;
background: #404040;
}
/* line 20, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat.messenger-empty {
display: none;
}
/* line 27, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message {
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 0px -1px rgba(0, 0, 0, 0.23), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 0px -1px rgba(0, 0, 0, 0.23), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 0px -1px rgba(0, 0, 0, 0.23), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
/* line 23, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message {
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
-ms-border-radius: 0px;
@ -272,17 +267,15 @@ ul.messenger-theme-future .messenger-message {
font-size: 13px;
background: transparent;
color: #f0f0f0;
text-shadow: 0px 1px #111111;
font-weight: 500;
padding: 10px 30px 13px 65px;
}
/* line 40, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .close {
/* line 35, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-close {
position: absolute;
top: 0px;
right: 0px;
color: #888888;
text-shadow: 0px 1px black;
opacity: 1;
font-weight: bold;
display: block;
@ -294,62 +287,51 @@ ul.messenger-theme-future .messenger-message .close {
border: 0;
-webkit-appearance: none;
}
/* line 57, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .close:hover {
/* line 51, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-close:hover {
color: #bbbbbb;
}
/* line 60, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .close:active {
/* line 54, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-close:active {
color: #777777;
}
/* line 63, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions {
/* line 57, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions {
float: none;
margin-top: 10px;
}
/* line 67, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions a {
-webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.1);
-moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.1);
box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.1);
/* line 61, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions a {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
text-decoration: none;
color: #aaaaaa;
background: #2e2e2e;
display: inline-block;
padding: 10px;
color: #aaaaaa;
text-shadow: 0px 1px #222222;
margin-right: 10px;
padding: 3px 10px 5px;
padding: 4px 11px 6px;
text-transform: capitalize;
}
/* line 79, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions a:hover {
-webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.2);
-moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.2);
box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2), inset 0px 1px rgba(255, 255, 255, 0.2);
/* line 72, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions a:hover {
color: #f0f0f0;
background: #2e2e2e;
}
/* line 83, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions a:active {
-webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.28), inset 0px 1px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.28), inset 0px 1px rgba(0, 0, 0, 0.1);
box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.28), inset 0px 1px rgba(0, 0, 0, 0.1);
background: rgba(0, 0, 0, 0.04);
/* line 76, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions a:active {
background: #292929;
color: #aaaaaa;
}
/* line 88, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-actions .messenger-phrase {
/* line 80, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-actions .messenger-phrase {
display: none;
}
/* line 91, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message .messenger-message-inner:before {
-webkit-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6), 0px 0px 0px 1px rgba(0, 0, 0, 0.2);
-moz-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6), 0px 0px 0px 1px rgba(0, 0, 0, 0.2);
box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.6), 0px 0px 0px 1px rgba(0, 0, 0, 0.2);
/* line 83, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message .messenger-message-inner:before {
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-ms-border-radius: 50%;
@ -365,23 +347,26 @@ ul.messenger-theme-future .messenger-message .messenger-message-inner:before {
width: 13px;
z-index: 20;
}
/* line 105, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message.alert-success .messenger-message-inner:before {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5fca4a), color-stop(100%, #098d38));
background-image: -webkit-linear-gradient(top, #5fca4a, #098d38);
background-image: -moz-linear-gradient(top, #5fca4a, #098d38);
background-image: -o-linear-gradient(top, #5fca4a, #098d38);
background-image: linear-gradient(top, #5fca4a, #098d38);
background-color: #5fca4a;
/* line 95, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message.alert-success .messenger-message-inner:before {
background: #5fca4a;
}
/* line 98, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message.alert-info .messenger-message-inner:before {
background: #61c4b8;
}
/* line 103, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message.alert-error .messenger-message-inner:before {
background: #dd6a45;
}
/* line 32, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-soon .messenger-spinner {
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-soon .messenger-spinner {
width: 32px;
height: 32px;
background: transparent;
}
/* line 37, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-soon .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-soon .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
background: #dd6a45;
-webkit-animation-duration: 20s;
-moz-animation-duration: 20s;
@ -391,9 +376,9 @@ ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-soon .m
opacity: 1;
}
/* line 45, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-soon .messenger-spinner:after {
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-soon .messenger-spinner:after {
content: "";
background: #333333;
background: #292929;
position: absolute;
width: 26px;
height: 26px;
@ -403,13 +388,13 @@ ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-soon .m
display: block;
}
/* line 32, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-later .messenger-spinner {
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-later .messenger-spinner {
width: 32px;
height: 32px;
background: transparent;
}
/* line 37, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-later .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-later .messenger-spinner .messenger-spinner-side .messenger-spinner-fill {
background: #dd6a45;
-webkit-animation-duration: 600s;
-moz-animation-duration: 600s;
@ -419,9 +404,9 @@ ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-later .
opacity: 1;
}
/* line 45, ../../src/sass/messenger-spinner.scss */
ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-later .messenger-spinner:after {
ul.messenger-theme-flat .messenger-message.alert-error.messenger-retry-later .messenger-spinner:after {
content: "";
background: #333333;
background: #292929;
position: absolute;
width: 26px;
height: 26px;
@ -430,56 +415,41 @@ ul.messenger-theme-future .messenger-message.alert-error.messenger-retry-later .
left: 3px;
display: block;
}
/* line 116, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message.alert-error .messenger-message-inner:before {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dd6a45), color-stop(100%, #91361a));
background-image: -webkit-linear-gradient(top, #dd6a45, #91361a);
background-image: -moz-linear-gradient(top, #dd6a45, #91361a);
background-image: -o-linear-gradient(top, #dd6a45, #91361a);
background-image: linear-gradient(top, #dd6a45, #91361a);
background-color: #dd6a45;
}
/* line 121, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message.alert-info .messenger-message-inner:before {
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #61c4b8), color-stop(100%, #1992a3));
background-image: -webkit-linear-gradient(top, #61c4b8, #1992a3);
background-image: -moz-linear-gradient(top, #61c4b8, #1992a3);
background-image: -o-linear-gradient(top, #61c4b8, #1992a3);
background-image: linear-gradient(top, #61c4b8, #1992a3);
background-color: #61c4b8;
}
/* line 127, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message-slot.last .messenger-message {
/* line 114, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message-slot.messenger-last .messenger-message {
-webkit-border-radius: 4px 4px 0px 0px;
-moz-border-radius: 4px 4px 0px 0px;
-ms-border-radius: 4px 4px 0px 0px;
-o-border-radius: 4px 4px 0px 0px;
border-radius: 4px 4px 0px 0px;
-webkit-box-shadow: inset 48px 0px 0px #292929;
-moz-box-shadow: inset 48px 0px 0px #292929;
box-shadow: inset 48px 0px 0px #292929;
}
/* line 130, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message-slot.first .messenger-message {
/* line 118, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message-slot.messenger-first .messenger-message {
-webkit-border-radius: 0px 0px 4px 4px;
-moz-border-radius: 0px 0px 4px 4px;
-ms-border-radius: 0px 0px 4px 4px;
-o-border-radius: 0px 0px 4px 4px;
border-radius: 0px 0px 4px 4px;
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
}
/* line 134, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-message-slot.first.last .messenger-message {
-webkit-box-shadow: inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
-moz-box-shadow: inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
box-shadow: inset 48px 0px 0px rgba(0, 0, 0, 0.3), inset 46px 0px 0px rgba(255, 255, 255, 0.07);
-webkit-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
-moz-box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
box-shadow: inset 0px 1px rgba(255, 255, 255, 0.13), inset 48px 0px 0px #292929;
}
/* line 122, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-message-slot.messenger-first.messenger-last .messenger-message {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 48px 0px 0px #292929;
-moz-box-shadow: inset 48px 0px 0px #292929;
box-shadow: inset 48px 0px 0px #292929;
}
/* line 138, ../../src/sass/messenger-theme-future.sass */
ul.messenger-theme-future .messenger-spinner {
/* line 126, ../../src/sass/messenger-theme-flat.sass */
ul.messenger-theme-flat .messenger-spinner {
display: block;
position: absolute;
left: 7px;

@ -1,48 +1,16 @@
@import "../prefixer";
@import "../Bootstrap/variables";
@import "../variables";
@input-border-focus: @droneTeal;
@font-family-sans-serif: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
@modal-md: 800px;
@modal-lg: 800px;
.label, .badge, i {
cursor : default;
}
.input-group {
.input-group-addon {
margin-left : 0;
}
}
.label, .badge, .btn {
.text-shadow(none);
}
.btn {
text-transform : capitalize;
min-width : 80px;
padding : 4px 12px;
&.btn-xs {
min-width : 0px;
}
&.btn-icon-only {
min-width : 41px;
}
&.btn-icon-only-xs {
@media (max-width: @screen-xs-max) {
min-width : 41px;
span {
.responsive-invisibility();
}
}
}
label, input {
padding: 0px;
}
}
.slide-button {
min-width : 0px;
}
@ -60,3 +28,47 @@
.tooltip-inner {
word-wrap: break-word;
}
.dropdown-submenu {
position:relative;
& > .dropdown-menu {
top:0;
left:100%;
margin-top:-6px;
margin-left:-1px;
-webkit-border-radius:0 6px 6px 6px;
-moz-border-radius:0 6px 6px 6px;
border-radius:0 6px 6px 6px;
}
& > a:after {
display:block;
content:" ";
float:right;
width:0;
height:0;
border-color:transparent;
border-style:solid;
border-width:5px 0 5px 5px;
border-left-color:#cccccc;
margin-top:5px;
margin-right:-10px;
}
}
.dropdown-submenu:hover {
& > .dropdown-menu {
display:block;
}
& > a:after {
border-left-color:#ffffff;
}
}
.dropdown-submenu.pull-left {
float:none;
& > .dropdown-menu {
left:-100%;
margin-left:10px;
-webkit-border-radius:6px 0 6px 6px;
-moz-border-radius:6px 0 6px 6px;
border-radius:6px 0 6px 6px;
}
}

@ -2,6 +2,9 @@
@import "Bootstrap/mixins";
.toggle {
height: 34px;
box-sizing: border-box;
.slide-button {
.button-variant(@btn-danger-color, @btn-danger-bg, @btn-danger-border);

@ -8,4 +8,14 @@
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
}
@media (max-width: @screen-xs-max) {
.fc-button {
padding: 0px 5px;
}
.fc-header-space {
padding-left: 5px;
}
}

@ -1,5 +1,23 @@
@import "../variables";
body.control-panel-visible {
ul.messenger.messenger-fixed.messenger-on-bottom {
bottom: 95px;
}
}
ul.messenger-theme-flat .messenger-message.alert-info .messenger-message-inner:before {
background: @droneTeal;
}
@media (max-width: @screen-xs-max) {
ul.messenger.messenger-fixed.messenger-on-bottom {
width: 100%;
bottom: 0px;
.border-bottom-radius(0);
&.messenger-on-right {
right : 0px;
}
}
}

@ -0,0 +1,2 @@
@import "./Bootstrap/bootstrap";
@import "./Overrides/bootstrap";

@ -1,13 +1,7 @@
@import "../Shared/Styles/clickable.less";
.form-group {
.controls {
i {
font-size : 16px;
color : #595959;
margin-right : 5px;
}
.input-group {
.checkbox {
width : 100px;
margin-left : 0px;
@ -20,6 +14,7 @@
display : inline-block;
margin-top : -20px;
margin-bottom : 0;
margin-left : 10px;
vertical-align : middle;
}
@ -30,6 +25,22 @@
}
}
}
i {
font-size : 16px;
color : #595959;
margin-right : 5px;
}
.help-inline {
display : inline-block;
margin-top : 8px;
padding-left : 0px;
@media (max-width: @screen-xs-max) {
margin-left: 0px;
}
}
}
.text-area-help {
@ -39,7 +50,12 @@
}
textarea.release-restrictions {
width : 260px;
width : 100%;
max-width : 100%;
}
.help-inline-text-area {
margin-top: 25px !important;
}
.help-link {
@ -58,3 +74,16 @@ h3 {
text-transform: none;
}
}
.form-inline {
div {
display : inline-block;
}
}
.has-error {
.help-inline {
color: #b94a48;
margin-left: 0px;
}
}

@ -1,161 +0,0 @@
@import "prefixer";
@grid-float-breakpoint: @screen-xs-min;
#main-menu-region {
text-align : center;
margin-bottom : 10px;
i:before {
font-size : 35px;
}
i {
width : 40px;
}
.navbar-nav, .navbar-nav>li {
float : none;
}
.navbar-brand {
padding : 0px;
}
.logo {
margin-top : 25px;
vertical-align : middle;
height : 70px;
width : 70px;
color: #ff0000;
&:after {
content: "unknown";
}
@media (min-width: @screen-xs-min) {
&:after {
content: "xs";
}
}
@media (min-width: @screen-sm-min) {
&:after {
content: "sm";
}
}
@media (min-width: @screen-md-min) {
&:after {
content: "md";
}
}
@media (min-width: @screen-lg-min) {
&:after {
content: "lg";
}
}
}
li {
list-style-type : none;
display : inline-block;
position : relative;
a {
&:focus {
text-decoration : none;
}
display : block;
@media (max-width: @screen-xs-max) {
border-radius : 6px;
padding : 15px 10px 5px;
min-height : 38px;
min-width : 42px;
margin : 20px 0px 5px;
}
@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
border-radius : 6px;
padding : 15px 10px 5px;
min-height : 76px;
min-width : 84px;
margin : 20px 0px 5px;
}
@media (min-width: @screen-md-min) {
border-radius : 6px;
padding : 15px 10px 5px;
min-height : 76px;
min-width : 84px;
margin : 20px 10px 5px;
}
color : #b9b9b9;
font-weight : 100;
}
span.label.pull-right {
position : absolute;
top : 28px;
right : 18px;
}
}
}
.backdrop {
#nav-region {
background-color : #000000;
.opacity(0.85);
}
}
#nav-region {
margin-bottom : 80px;
height : 150px;
.col-md-12 {
margin-left : 0px;
}
li {
a {
&:hover {
background-color : #555555;
text-decoration : none;
}
.label {
cursor: pointer;
}
}
}
}
.search {
text-align: center;
input, .input-group-addon {
background-color: #333333;
border-color: #333333;
color: #cccccc;
}
ul {
text-align: left;
}
.dropdown-menu {
background-color: #333333;
color: #cccccc;
> li > a {
color: #cccccc;
}
}
}

@ -0,0 +1,227 @@
@import "prefixer";
@import "variables";
@grid-float-breakpoint: @screen-xs-min;
.backdrop {
.navbar-nzbdrone {
background-color : #000000;
.opacity(0.85);
padding-bottom: 10px;
}
}
.navbar-nzbdrone {
text-align : center;
i:before {
font-size : 35px;
display: block;
}
.navbar-nav, .navbar-nav>li {
float : none;
}
.navbar-toggle {
border-color: #333;
&:hover,
&:focus {
background-color: #333;
}
.icon-bar {
background-color: #ffffff;
}
}
.navbar-brand {
position: absolute;
@media (max-width: @screen-xs-max) {
padding: 9px 15px;
font-size: 14px;
}
@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
padding: 20px 15px;
}
@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
padding: 30px 15px;
}
@media (min-width: @screen-lg-min) {
padding: 22px 15px;
}
}
.logo-text {
color: white;
font-weight: 300;
.highlight {
font-weight: 400;
color: @droneTeal;
}
}
li {
list-style-type : none;
display : inline-block;
position : relative;
a {
display : block;
color : #b9b9b9;
font-weight : 100;
&:hover {
background-color : #555555;
text-decoration : none;
}
.label {
cursor: pointer;
}
&:focus {
text-decoration : none;
}
@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
border-radius : 6px;
padding : 5px 0px 5px;
min-height : 76px;
min-width : 64px;
margin : 20px 5px 5px;
}
@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
border-radius : 6px;
padding : 15px 10px 5px;
min-height : 76px;
min-width : 64px;
margin : 20px 10px 5px;
}
@media (min-width: @screen-lg-min) {
border-radius : 6px;
padding : 15px 10px 5px;
min-height : 76px;
min-width : 84px;
margin : 20px 10px 5px;
}
}
.health {
.label {
position : absolute;
top : 10px;
right : 10px;
}
}
}
@media (max-width: @screen-xs-max) {
text-align : left;
i:before {
font-size : 14px;
display: inline-block;
}
li {
display: block;
a:hover {
background-color: transparent;
}
.health {
margin-left: 5px;
.label {
position : static;
}
}
}
}
}
.search {
i:before {
font-size: 14px;
}
.input-group {
input, .input-group-addon {
background-color: #333333;
}
}
input, .input-group-addon {
border-color: #333333;
color: #cccccc;
}
ul {
text-align: left;
}
.tt-dropdown-menu {
background-color: #333333;
color: #cccccc;
opacity: .95;
.tt-suggestion {
color: #cccccc;
&.tt-cursor {
//item selected
background-color: @droneTeal;
color: #222222;
a {
//link in item selected
color: #222222;
}
}
}
}
}
//.screen-size {
// color: @droneTeal;
// &:after {
// content: "unknown";
// }
//
// @media (min-width: @screen-xs-min) {
// &:after {
// content: "xs";
// }
// }
//
// @media (min-width: @screen-sm-min) {
// &:after {
// content: "sm";
// }
// }
//
// @media (min-width: @screen-md-min) {
// &:after {
// content: "md";
// }
// }
//
// @media (min-width: @screen-lg-min) {
// &:after {
// content: "lg";
// }
// }
//}

@ -11,15 +11,16 @@
}
.progressbar-back-text, .progressbar-front-text {
font-size : 11.844px;
font-size : 12px;
font-weight : bold;
text-align : center;
cursor : default;
line-height : 20px;
}
.progressbar-back-text {
position : absolute;
height : 100%;
position : absolute;
height : 100%;
}
.progressbar-front-text {
@ -27,7 +28,7 @@
height : 100%;
}
.bar {
.progress-bar {
position : absolute;
overflow : hidden;
}

@ -3,7 +3,7 @@
@import "Bootstrap/type";
@import "font";
@import "form";
@import "menu";
@import "navbar";
@import "Backgrid/backgrid";
@import "prefixer";
@import "icons";
@ -14,6 +14,15 @@
@import "../Shared/Styles/clickable";
@import "../Shared/Styles/card";
@import "../Rename/rename";
@import "typeahead";
@import "utilities";
.main-region {
@media (min-width: @screen-lg-min) {
padding-left : 30px;
padding-right : 30px;
}
}
.toolbar {
@ -150,8 +159,9 @@ body {
min-width : 1210px; */
max-width : 1210px;
margin : auto;
margin-top : -70px;
// margin-top : -70px;
padding : 20px 0px;
.header {
padding-bottom : 10px;
margin-bottom : 20px;
@ -186,12 +196,6 @@ body {
color : @state-danger-text;
}
.form-inline {
div {
display : inline-block;
}
}
.error {
background: #FF0000;
}
@ -219,6 +223,17 @@ body {
left: 0;
bottom: 0;
width: 100%;
height: 55px;
height: 80px;
opacity: 0;
@media (max-width: @screen-sm-max) {
height: initial;
position: static;
}
}
.tab-content {
.tab-pane {
padding-top: 10px;
}
}

@ -0,0 +1,152 @@
/*
* typehead.js-bootstrap3.less
* @version 0.2.3
* https://github.com/hyspace/typeahead.js-bootstrap3.less
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
//custom mixin for .form-control-validation
.typeahead-form-control(@border-color: #ccc;) {
border-color: @border-color;
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
&:focus {
border-color: darken(@border-color, 10%);
@shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
.box-shadow(@shadow);
}
}
//main styles for control
.tt-input,
.tt-hint {
.twitter-typeahead &{
//validation states
.has-warning &{
.typeahead-form-control(@state-warning-text);
}
.has-error &{
.typeahead-form-control(@state-danger-text);
}
.has-success &{
.typeahead-form-control(@state-success-text);
}
}
//border
.input-group .twitter-typeahead:first-child &{
.border-left-radius(@border-radius-base);
}
.input-group .twitter-typeahead:last-child &{
.border-right-radius(@border-radius-base);
}
//sizing - small:size and border
.input-group.input-group-sm .twitter-typeahead &{
.input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
}
.input-group.input-group-sm .twitter-typeahead:not(:first-child):not(:last-child) &{
border-radius: 0;
}
.input-group.input-group-sm .twitter-typeahead:first-child &{
.border-left-radius(@border-radius-small);
.border-right-radius(0);
}
.input-group.input-group-sm .twitter-typeahead:last-child &{
.border-left-radius(0);
.border-right-radius(@border-radius-small);
}
//sizing - large:size and border
.input-group.input-group-lg .twitter-typeahead &{
.input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
}
.input-group.input-group-lg .twitter-typeahead:not(:first-child):not(:last-child) &{
border-radius: 0;
}
.input-group.input-group-lg .twitter-typeahead:first-child &{
.border-left-radius(@border-radius-large);
.border-right-radius(0);
}
.input-group.input-group-lg .twitter-typeahead:last-child &{
.border-left-radius(0);
.border-right-radius(@border-radius-large);
}
}
//for wrapper
.twitter-typeahead {
width: 100%;
.input-group &{
//overwrite `display:inline-block` style
display: table-cell!important;
float: left;
}
}
//particular style for each other
.twitter-typeahead .tt-hint {
color: @text-muted;//color - hint
}
.twitter-typeahead .tt-input {
z-index: 2;
//disabled status
//overwrite inline styles of .tt-query
&[disabled],
&[readonly],
fieldset[disabled] & {
cursor: not-allowed;
//overwirte inline style
background-color: @input-bg-disabled!important;
}
}
//dropdown styles
.tt-dropdown-menu {
//dropdown menu
position: absolute;
top: 100%;
left: 0;
z-index: @zindex-dropdown;
min-width: 160px;
width: 100%;
padding: 5px 0;
margin: 2px 0 0;
list-style: none;
font-size: @font-size-base;
background-color: @dropdown-bg;
border: 1px solid @dropdown-fallback-border;
border: 1px solid @dropdown-border;
border-radius: @border-radius-base;
.box-shadow(0 6px 12px rgba(0,0,0,.175));
background-clip: padding-box;
*border-right-width: 2px;
*border-bottom-width: 2px;
.tt-suggestion {
//item
display: block;
padding: 3px 20px;
clear: both;
font-weight: normal;
line-height: @line-height-base;
color: @dropdown-link-color;
white-space: nowrap;
&.tt-cursor {
//item selected
text-decoration: none;
outline: 0;
background-color: @dropdown-link-hover-bg;
color: @dropdown-link-hover-color;
a {
//link in item selected
color: @dropdown-link-hover-color;
}
}
p {
margin: 0;
}
}
}

@ -0,0 +1,19 @@
@import "Bootstrap/variables";
@import "Bootstrap/mixins";
@media (max-width: @screen-sm-max) {
.pull-none-xs {
float : none !important;
}
.btn-group {
&.btn-group-collapse {
> .btn {
margin : 2px;
display : block;
float : none;
border-radius : @border-radius-base !important;
}
}
}
}

@ -1 +1 @@
<div class="activity-table"></div>
<div class="activity-table table-responsive"></div>

@ -1,33 +1,37 @@
<div class="episode-detail-modal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<div class="modal-dialog">
<div class="modal-content">
<div class="episode-detail-modal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>
<i class="icon-bookmark x-episode-monitored episode-monitored" title="Toggle monitored status" />
{{series.title}} - {{EpisodeNumber}} - {{title}}
</h3>
<h3>
<i class="icon-bookmark x-episode-monitored episode-monitored" title="Toggle monitored status" />
{{series.title}} - {{EpisodeNumber}} - {{title}}
</h3>
</div>
<div class="modal-body">
<ul class="nav nav-tabs" id="myTab">
<li><a href="#episode-summary" class="x-episode-summary">Summary</a></li>
<li><a href="#episode-activity" class="x-episode-activity">Activity</a></li>
<li><a href="#episode-search" class="x-episode-search">Search</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane" id="episode-summary"/>
<div class="tab-pane" id="episode-activity"/>
<div class="tab-pane" id="episode-search"/>
</div>
</div>
<div class="modal-footer">
{{#unless hideSeriesLink}}
{{#with series}}
<a href="{{route}}" class="btn pull-left" data-dismiss="modal">open series</a>
{{/with}}
{{/unless}}
</div>
<div class="modal-body">
<ul class="nav nav-tabs" id="myTab">
<li><a href="#episode-summary" class="x-episode-summary">Summary</a></li>
<li><a href="#episode-activity" class="x-episode-activity">Activity</a></li>
<li><a href="#episode-search" class="x-episode-search">Search</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane" id="episode-summary"/>
<div class="tab-pane" id="episode-activity"/>
<div class="tab-pane" id="episode-search"/>
</div>
</div>
<div class="modal-footer">
{{#unless hideSeriesLink}}
{{#with series}}
<a href="{{route}}" class="btn btn-default pull-left" data-dismiss="modal">open series</a>
{{/with}}
{{/unless}}
<button class="btn" data-dismiss="modal">close</button>
<button class="btn btn-default" data-dismiss="modal">close</button>
</div>
</div>
</div>
</div>

@ -1,2 +1,2 @@
<div id="episode-release-grid"/>
<div id="episode-release-grid" class="table-responsive"></div>
<button class="btn x-search-back">Back</button>

@ -1,21 +1,23 @@
<div class="form-group">
<label class="control-label">{{label}}</label>
<label class="col-sm-3 control-label">{{label}}</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="fields.{{order}}.value"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="col-sm-5">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="fields.{{order}}.value"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
{{#if helpText}}
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="{{helpText}}"/>
</span>
{{/if}}
{{#if helpText}}
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="{{helpText}}"/>
</span>
{{/if}}
</div>
</div>
</div>

@ -1,11 +1,8 @@
{{#if helpText}}
<span class="help-inline">
<span class="col-sm-1 help-inline">
{{#if helpText}}
<i class="icon-nd-form-info" title="{{helpText}}"/>
</span>
{{/if}}
{{#if helpLink}}
<span class="help-inline">
{{/if}}
{{#if helpLink}}
<a href="{{helpLink}}" class="help-link"><i class="icon-info-sign"/></a>
</span>
{{/if}}
{{/if}}
</span>

@ -1,12 +1,8 @@
<div class="form-group">
<label class="control-label">{{label}}</label>
<label class="col-sm-3 control-label">{{label}}</label>
<div class="controls">
<input type="password" name="fields.{{order}}.value" validation-name="{{name}}"/>
{{#if helpText}}
<span class="help-inline">
<i class="icon-nd-form-info" title="{{helpText}}"/>
</span>
{{/if}}
<div class="col-sm-5">
<input type="password" name="fields.{{order}}.value" validation-name="{{name}}" class="form-control"/>
</div>
{{> FormHelpPartial}}
</div>

@ -1,12 +1,8 @@
<div class="form-group">
<label class="control-label">{{label}}</label>
<label class="col-sm-3 control-label">{{label}}</label>
<div class="controls">
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" class="x-path"/>
{{#if helpText}}
<span class="help-inline">
<i class="icon-nd-form-info" title="{{helpText}}"/>
</span>
{{/if}}
<div class="col-sm-5">
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" class="form-control x-path"/>
</div>
{{> FormHelpPartial}}
</div>

@ -1,16 +1,12 @@
<div class="form-group">
<label class="control-label">{{label}}</label>
<label class="col-sm-3 control-label">{{label}}</label>
<div class="controls">
<select name="fields.{{order}}.value">
<div class="col-sm-5">
<select name="fields.{{order}}.value" class="form-control">
{{#each selectOptions}}
<option value="{{value}}">{{name}}</option>
{{/each}}
</select>
{{#if helpText}}
<span class="help-inline">
<i class="icon-nd-form-info" title="{{helpText}}"/>
</span>
{{/if}}
</div>
{{> FormHelpPartial}}
</div>

@ -1,8 +1,8 @@
<div class="form-group">
<label class="control-label">{{label}}</label>
<label class="col-sm-3 control-label">{{label}}</label>
<div class="controls">
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" spellcheck="false"/>
{{> FormHelpPartial}}
<div class="col-sm-5">
<input type="text" name="fields.{{order}}.value" validation-name="{{name}}" spellcheck="false" class="form-control"/>
</div>
{{> FormHelpPartial}}
</div>

@ -44,4 +44,16 @@ define(
return 'primary';
});
Handlebars.registerHelper('EpisodeProgressClass', function () {
if (this.episodeFileCount === this.episodeCount) {
if (this.continuing) {
return '';
}
return 'progress-bar-success';
}
return 'progress-bar-danger';
});
});

@ -11,7 +11,7 @@ define(
var profile = QualityProfileCollection.get(profileId);
if (profile) {
return new Handlebars.SafeString('<span class="label quality-profile-label">' + profile.get("name") + '</span>');
return new Handlebars.SafeString('<span class="label label-default quality-profile-label">' + profile.get("name") + '</span>');
}
return undefined;

@ -6,6 +6,8 @@ define(
'Health/HealthCollection'
], function (_, Marionette, HealthCollection) {
return Marionette.ItemView.extend({
tagName: 'span',
initialize: function () {
this.listenTo(HealthCollection, 'sync', this._healthSync);
HealthCollection.fetch();
@ -25,10 +27,10 @@ define(
});
if (errors) {
label = 'label-important';
label = 'label-danger';
}
this.$el.html('<span class="label pull-right {0}">{1}</span>'.format(label, count));
this.$el.html('<span class="label {0}">{1}</span>'.format(label, count));
return this;
},

@ -1,6 +1,6 @@
<div id="x-toolbar"/>
<div class="row">
<div class="col-md-12">
<div class="col-md-12 table-responsive">
<div id="x-blacklist"/>
</div>
</div>

@ -1,86 +1,89 @@
<div class="history-detail-modal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<div class="modal-dialog">
<div class="modal-content">
<div class="history-detail-modal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>
{{#if_eq eventType compare="grabbed"}}Grabbed{{/if_eq}}
{{#if_eq eventType compare="downloadFailed"}}Download Failed{{/if_eq}}
{{#if_eq eventType compare="downloadFolderImported"}}Episode Imported{{/if_eq}}
</h3>
<h3>
{{#if_eq eventType compare="grabbed"}}Grabbed{{/if_eq}}
{{#if_eq eventType compare="downloadFailed"}}Download Failed{{/if_eq}}
{{#if_eq eventType compare="downloadFolderImported"}}Episode Imported{{/if_eq}}
</h3>
</div>
<div class="modal-body">
{{#if_eq eventType compare="grabbed"}}
<dl class="dl-horizontal">
</div>
<div class="modal-body">
{{#if_eq eventType compare="grabbed"}}
<dl class="dl-horizontal">
<dt>Name:</dt>
<dd>{{sourceTitle}}</dd>
<dt>Name:</dt>
<dd>{{sourceTitle}}</dd>
{{#with data}}
{{#if indexer}}
<dt>Indexer:</dt>
<dd>{{indexer}}</dd>
{{/if}}
{{#with data}}
{{#if indexer}}
<dt>Indexer:</dt>
<dd>{{indexer}}</dd>
{{/if}}
{{#if releaseGroup}}
<dt>Release Group:</dt>
<dd>{{releaseGroup}}</dd>
{{/if}}
{{#if releaseGroup}}
<dt>Release Group:</dt>
<dd>{{releaseGroup}}</dd>
{{/if}}
{{#if nzbInfoUrl}}
<dt>Info:</dt>
<dd><a href="{{nzbInfoUrl}}">{{nzbInfoUrl}}</a></dd>
{{/if}}
{{#if nzbInfoUrl}}
<dt>Info:</dt>
<dd><a href="{{nzbInfoUrl}}">{{nzbInfoUrl}}</a></dd>
{{/if}}
{{#if downloadClient}}
<dt>Download Client:</dt>
<dd>{{downloadClient}}</dd>
{{/if}}
{{#if downloadClient}}
<dt>Download Client:</dt>
<dd>{{downloadClient}}</dd>
{{/if}}
{{#if downloadClientId}}
<dt>Download Client ID:</dt>
<dd>{{downloadClientId}}</dd>
{{/if}}
{{/with}}
</dl>
{{/if_eq}}
{{#if_eq eventType compare="downloadFailed"}}
<dl class="dl-horizontal">
{{#if downloadClientId}}
<dt>Download Client ID:</dt>
<dd>{{downloadClientId}}</dd>
{{/if}}
{{/with}}
</dl>
{{/if_eq}}
{{#if_eq eventType compare="downloadFailed"}}
<dl class="dl-horizontal">
<dt>Name:</dt>
<dd>{{sourceTitle}}</dd>
<dt>Name:</dt>
<dd>{{sourceTitle}}</dd>
{{#with data}}
<dt>Message:</dt>
<dd>{{message}}</dd>
{{/with}}
</dl>
{{/if_eq}}
{{#if_eq eventType compare="downloadFolderImported"}}
<dl class="dl-horizontal">
{{#if sourceTitle}}
<dt>Name:</dt>
<dd>{{sourceTitle}}</dd>
{{/if}}
{{#with data}}
{{#if droppedPath}}
<dt>Source:</dt>
<dd>{{droppedPath}}</dd>
{{/if}}
{{#with data}}
<dt>Message:</dt>
<dd>{{message}}</dd>
{{/with}}
</dl>
{{/if_eq}}
{{#if_eq eventType compare="downloadFolderImported"}}
<dl class="dl-horizontal">
{{#if importedPath}}
<dt>Imported To:</dt>
<dd>{{importedPath}}</dd>
{{/if}}
{{/with}}
</dl>
{{/if_eq}}
</div>
<div class="modal-footer">
{{#if_eq eventType compare="grabbed"}}<button class="btn btn-danger x-mark-as-failed">mark as failed</button>{{/if_eq}}
<button class="btn" data-dismiss="modal">close</button>
{{#if sourceTitle}}
<dt>Name:</dt>
<dd>{{sourceTitle}}</dd>
{{/if}}
{{#with data}}
{{#if droppedPath}}
<dt>Source:</dt>
<dd>{{droppedPath}}</dd>
{{/if}}
{{#if importedPath}}
<dt>Imported To:</dt>
<dd>{{importedPath}}</dd>
{{/if}}
{{/with}}
</dl>
{{/if_eq}}
</div>
<div class="modal-footer">
{{#if_eq eventType compare="grabbed"}}<button class="btn btn-danger x-mark-as-failed">mark as failed</button>{{/if_eq}}
<button class="btn" data-dismiss="modal">close</button>
</div>
</div>
</div>
</div>

@ -5,7 +5,7 @@
</div>
<div class="row">
<div class="col-md-12">
<div class="col-md-12 table-responsive">
<div id="x-queue-pager"/>
</div>
</div>

@ -88,7 +88,6 @@ define(
onShow: function () {
this.history.show(new LoadingView());
//this.collection.fetch();
this._showToolbar();
},
@ -160,8 +159,9 @@ define(
this.collection.state.currentPage = 1;
var promise = this.collection.setFilterMode(mode);
if (buttonContext)
if (buttonContext) {
buttonContext.ui.icon.spinForPromise(promise);
}
}
});
});

@ -1,6 +1,6 @@
<div id="x-history-toolbar"/>
<div class="row">
<div class="col-md-12">
<div class="col-md-12 table-responsive">
<div id="x-history"/>
</div>
</div>

@ -1,4 +1,4 @@
/*! messenger 1.3.6 */
/*! messenger 1.4.1 */
/*
* This file begins the output concatenated into messenger.js
*
@ -331,11 +331,11 @@ window.Messenger.Events = (function() {
BaseView.prototype.delegateEvents = function(events) {
var delegateEventSplitter, eventName, key, match, method, selector, _results;
if (!(events || (events = _.result(this, 'events')))) {
if (!(events || (events = _.result(this, "events")))) {
return;
}
delegateEventSplitter = /^(\S+)\s*(.*)$/;
this.undelegateEvents();
delegateEventSplitter = /^(\S+)\s*(.*)$/;
_results = [];
for (key in events) {
method = events[key];
@ -343,7 +343,7 @@ window.Messenger.Events = (function() {
method = this[events[key]];
}
if (!method) {
throw new Error("Method " + events[key] + " does not exist");
throw new Error("Method \"" + events[key] + "\" does not exist");
}
match = key.match(delegateEventSplitter);
eventName = match[1];
@ -409,7 +409,8 @@ window.Messenger.Events = (function() {
_Message.prototype.defaults = {
hideAfter: 10,
scroll: true
scroll: true,
closeButtonText: "&times;"
};
_Message.prototype.initialize = function(opts) {
@ -574,7 +575,8 @@ window.Messenger.Events = (function() {
_this = this;
$message = $("<div class='messenger-message message alert " + opts.type + " message-" + opts.type + " alert-" + opts.type + "'>");
if (opts.showCloseButton) {
$cancel = $('<button type="button" class="close" data-dismiss="alert">&times;</button>');
$cancel = $('<button type="button" class="messenger-close" data-dismiss="alert">');
$cancel.html(opts.closeButtonText);
$cancel.click(function() {
_this.cancel();
return true;
@ -992,7 +994,7 @@ window.Messenger.Events = (function() {
};
ActionMessenger.prototype.run = function() {
var args, attr, events, getMessageText, handler, handlers, m_opts, msg, old, opts, promiseAttrs, type, _i, _len, _ref2, _ref3,
var args, events, getMessageText, handler, handlers, m_opts, msg, old, opts, type, _ref2,
_this = this;
m_opts = arguments[0], opts = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
if (opts == null) {
@ -1101,7 +1103,9 @@ window.Messenger.Events = (function() {
}
msg.update(msgOpts);
if (responseOpts && msgOpts.message) {
Messenger();
Messenger(_.extend({}, _this.options, {
instance: _this
}));
return msg.show();
} else {
return msg.hide();
@ -1119,14 +1123,6 @@ window.Messenger.Events = (function() {
if (m_opts.returnsPromise) {
msg._actionInstance.then(handlers.success, handlers.error);
}
promiseAttrs = ['done', 'progress', 'fail', 'state', 'then'];
for (_i = 0, _len = promiseAttrs.length; _i < _len; _i++) {
attr = promiseAttrs[_i];
if (msg[attr] != null) {
delete msg[attr];
}
msg[attr] = (_ref3 = msg._actionInstance) != null ? _ref3[attr] : void 0;
}
return msg;
};
@ -1147,6 +1143,45 @@ window.Messenger.Events = (function() {
return this.run(m_opts);
};
ActionMessenger.prototype.error = function(m_opts) {
if (m_opts == null) {
m_opts = {};
}
if (typeof m_opts === 'string') {
m_opts = {
message: m_opts
};
}
m_opts.type = 'error';
return this.post(m_opts);
};
ActionMessenger.prototype.info = function(m_opts) {
if (m_opts == null) {
m_opts = {};
}
if (typeof m_opts === 'string') {
m_opts = {
message: m_opts
};
}
m_opts.type = 'info';
return this.post(m_opts);
};
ActionMessenger.prototype.success = function(m_opts) {
if (m_opts == null) {
m_opts = {};
}
if (typeof m_opts === 'string') {
m_opts = {
message: m_opts
};
}
m_opts.type = 'success';
return this.post(m_opts);
};
return ActionMessenger;
})(_Messenger);
@ -1204,7 +1239,7 @@ window.Messenger.Events = (function() {
inst = $el.messenger(opts);
inst._location = chosen_loc;
Messenger.instance = inst;
} else if ($(inst._location) !== $(chosen_loc)) {
} else if (!$(inst._location).is($(chosen_loc))) {
inst.$el.detach();
$parent.prepend(inst.$el);
}

@ -15,7 +15,7 @@ define(
this.state.filterValue = filter[1];
if (options.reset) {
if (this.mode != 'server') {
if (this.mode !== 'server') {
this.fullCollection.resetFiltered();
} else {
return this.fetch();
@ -35,10 +35,12 @@ define(
self.shadowCollection = originalMakeFullCollection.call(this, models, options);
var filterModel = function(model) {
if (!self.state.filterKey || !self.state.filterValue)
if (!self.state.filterKey || !self.state.filterValue) {
return true;
else
}
else {
return model.get(self.state.filterKey) === self.state.filterValue;
}
};
self.shadowCollection.filtered = function() {

@ -2,24 +2,40 @@
define(
[
'jquery',
'underscore',
'typeahead'
], function ($) {
], function ($, _) {
$.fn.autoComplete = function (resource) {
$(this).typeahead({
source : function (filter, callback) {
$.ajax({
url : window.NzbDrone.ApiRoot + resource,
dataType: 'json',
type : 'GET',
data : { query: filter },
success : function (data) {
callback(data);
}
});
hint : true,
highlight : true,
minLength : 3,
items : 20
},
minLength: 3,
items : 20
{
name: resource.replace('/'),
displayKey: '',
source : function (filter, callback) {
$.ajax({
url : window.NzbDrone.ApiRoot + resource,
dataType: 'json',
type : 'GET',
data : { query: filter },
success : function (data) {
var matches = [];
$.each(data, function(i, d) {
if (d.startsWith(filter)) {
matches.push({ value: d });
}
});
callback(matches);
}
});
}
});
};
});

@ -1,81 +1,46 @@
<div class="navbar navbar-nzbdrone" role="navigation">
<!-- Static navbar -->
<div class="navbar navbar-nzbdrone" role="navigation">
<div class="container-fluid">
<div class="col-md-12">
<div id="main-menu-region">
<div class="navbar-header logo">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse" />
<a class="navbar-brand" href="{{UrlBase}} /">
<img src="{{UrlBase}}/Content/Images/logo.png?v=2" alt="NzbDrone">
</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li>
<a href="{{UrlBase}}/">
<i class="icon-play"></i>
<br>
Series
</a>
</li>
<li>
<a href="{{UrlBase}}/calendar">
<i class="icon-calendar"></i>
<br>
Calendar
</a>
</li>
<li>
<a href="{{UrlBase}}/history">
<i class="icon-time"></i>
<br>
History
</a>
</li>
<li>
<a href="{{UrlBase}}/wanted">
<i class="icon-warning-sign"></i>
<br>
Wanted
</a>
</li>
<li>
<a href="{{UrlBase}}/settings">
<i class="icon-cogs"></i>
<br>
Settings
</a>
</li>
<li>
<a href="{{UrlBase}}/system">
<i class="icon-laptop"></i>
<br>
System
<span id="x-health"></span>
</a>
</li>
<li>
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HGGGM7JT5YVSS" target="_blank">
<i class="icon-nd-donate"></i>
<br>
Donate
</a>
</li>
</ul>
</div>
</div>
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{UrlBase}}/">
<!--<img src="{{UrlBase}}/Content/Images/logo.png?v=2" alt="nzbdrone">-->
<img src="{{UrlBase}}/Content/Images/logos/128.png" class="visible-lg"/>
<img src="{{UrlBase}}/Content/Images/logos/64.png" class="visible-md visible-sm"/>
<span class="visible-xs">
<img src="{{UrlBase}}/Content/Images/logos/32.png"/>
<span class="logo-text"><span class="highlight">nzb</span>drone</span>
</span>
</a>
</div>
</div>
</div>
<div class="searchbar">
<!--
<div class="row">
<div class="col-md-12">
<div class="search">
<div class="input-group">
<span class="input-group-addon"><i class="icon-search"></i></span>
<input class="col-md-4 x-series-search" id="prependedInput" type="text">
</div>
<div class="navbar-collapse collapse x-navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="{{UrlBase}}/" class="x-series-nav"><i class="icon-play"></i> Series</a></li>
<li><a href="{{UrlBase}}/calendar" class="x-calendar-nav"><i class="icon-calendar"></i> Calendar</a></li>
<li><a href="{{UrlBase}}/history" class="x-history-nav"><i class="icon-time"></i> History</a></li>
<li><a href="{{UrlBase}}/wanted" class="x-wanted-nav"><i class="icon-warning-sign"></i> Wanted</a></li>
<li><a href="{{UrlBase}}/settings" class="x-settings-nav"><i class="icon-cogs"></i> Settings</a></li>
<li><a href="{{UrlBase}}/system" class="x-system-nav"><i class="icon-laptop"></i> System<span id="x-health" class="health"></span></a></li>
<li><a href="http://nzbdrone.com/#donate" target="_blank"><i class="icon-nd-donate"></i> Donate</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="active screen-size"></li>
</ul>
</div><!--/.nav-collapse -->
</div><!--/.container-fluid -->
<div class="col-md-12 search">
<div class="col-md-6 col-md-offset-3">
<div class="input-group">
<span class="input-group-addon"><i class="icon-search"></i></span>
<input type="text" class="col-md-6 form-control x-series-search" >
</div>
</div>
</div>-->
</div>
</div>
</div>

@ -14,7 +14,8 @@ define(
},
ui: {
search: '.x-series-search'
search: '.x-series-search',
collapse: '.x-navbar-collapse'
},
events: {
@ -46,6 +47,10 @@ define(
else {
this.setActive(event.target);
}
if ($(window).width() < 768) {
this.ui.collapse.collapse('hide');
}
},
setActive: function (element) {

@ -1,11 +1,12 @@
'use strict';
define(
[
'backbone',
'underscore',
'jquery',
'backbone',
'Series/SeriesCollection',
'typeahead'
], function (Backbone, $, SeriesCollection) {
], function (_, $, Backbone, SeriesCollection) {
$(document).on('keydown', function (e) {
if ($(e.target).is('input') || $(e.target).is('textarea')) {
return;
@ -23,20 +24,33 @@ define(
$.fn.bindSearch = function () {
$(this).typeahead({
source: function () {
return SeriesCollection.pluck('title');
hint: true,
highlight: true,
minLength: 1
},
{
name: 'series',
displayKey: 'title',
source: substringMatcher()
});
sorter: function (items) {
return items.sort();
},
$(this).on('typeahead:selected typeahead:autocompleted', function (e, series) {
this.blur();
$(this).val('');
Backbone.history.navigate('/series/{0}'.format(series.titleSlug), { trigger: true });
});
};
updater: function (item) {
var series = SeriesCollection.findWhere({ title: item });
var substringMatcher = function() {
return function findMatches(q, cb) {
// regex used to determine if a string contains the substring `q`
var substrRegex = new RegExp(q, 'i');
this.$element.blur();
Backbone.history.navigate('/series/{0}'.format(series.get('titleSlug')), { trigger: true });
}
});
var matches = _.select(SeriesCollection.toJSON(), function (series) {
return substrRegex.test(series.title);
});
cb(matches);
};
};
});

@ -1,4 +1,4 @@
<select class="col-md-2 x-quality-profile">
<select class="col-md-2 form-control x-quality-profile">
{{#each this}}
<option value="{{id}}">{{name}}</option>
{{/each}}

@ -1,26 +1,29 @@
<div class="rename-preview-modal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>
<i class="icon-nd-rename"></i> Organize & Rename
</h3>
<div class="modal-dialog">
<div class="modal-content">
<div class="rename-preview-modal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>
<i class="icon-nd-rename"></i> Organize & Rename
</h3>
</div>
<div class="modal-body">
<div class="alert alert-info path-info x-path-info">All paths are relative to: <strong>{{path}}</strong></div>
<div id="rename-previews"></div>
</div>
<div class="modal-footer">
<span class="rename-all-button x-rename-all-button pull-left">
<label class="checkbox-button" title="Toggle all">
<input type="checkbox" checked="checked" class="x-rename-all"/>
<div class="btn btn-icon-only">
<i class="icon-check"></i>
</div>
</label>
</span>
<button class="btn" data-dismiss="modal">close</button>
<button class="btn btn-primary x-organize">Organize</button>
</div>
<div class="modal-body">
<div class="alert alert-info path-info x-path-info">All paths are relative to: <strong>{{path}}</strong></div>
<div id="rename-previews"></div>
</div>
<div class="modal-footer">
<span class="rename-all-button x-rename-all-button pull-left">
<label class="checkbox-button" title="Toggle all">
<input type="checkbox" checked="checked" class="x-rename-all"/>
<div class="btn btn-icon-only">
<i class="icon-check"></i>
</div>
</label>
</span>
<button class="btn" data-dismiss="modal">close</button>
<button class="btn btn-primary x-organize">Organize</button>
</div>
</div>
</div>
</div>

@ -1,42 +1,48 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Delete {{title}}</h3>
</div>
<div class="modal-body delete-series-modal">
<div class="row">
<div class="col-md-2">
<img class="series-poster" src="{{poster}}" {{defaultImg}}>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Delete {{title}}</h3>
</div>
<div class="col-md-7">
<div class="form-horizontal">
<h3 class="path">{{path}}</h3>
<div class="modal-body delete-series-modal">
<div class="row">
<div class="col-sm-3 hidden-xs">
<img class="series-poster" src="{{poster}}" {{defaultImg}}>
</div>
<div class="col-sm-9">
<div class="form-horizontal">
<h3 class="path">{{path}}</h3>
<div class="form-group">
<label class="control-label">Delete all files</label>
<div class="form-group">
<label class="col-sm-4 control-label">Delete all files</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" class="x-delete-files"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" class="x-delete-files"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn slide-button btn-danger"/>
</label>
<div class="btn slide-button btn-danger"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Do you want to delete all files from disk?"/>
<i class="icon-nd-form-warning" title="This option is irreversible, use with extreme caution"/>
</span>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Do you want to delete all files from disk?"/>
<i class="icon-nd-form-warning" title="This option is irreversible, use with extreme caution"/>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-danger x-confirm-delete">delete</button>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-danger x-confirm-delete">delete</button>
</div>

@ -1,32 +1,37 @@
<div>
{{qualityProfile qualityProfileId}}
<span class="label label-info">{{network}}</span>
<span class="label label-info">{{runtime}} minutes</span>
<span class="label label-info">{{path}}</span>
{{#if_eq status compare="continuing"}}
<span class="label label-info">Continuing</span>
{{else}}
<span class="label">Ended</span>
{{/if_eq}}
<div class="row">
<div class="col-md-9">
{{qualityProfile qualityProfileId}}
<span class="label label-info">{{network}}</span>
<span class="label label-info">{{runtime}} minutes</span>
<span class="label label-info">{{path}}</span>
{{#if_eq status compare="continuing"}}
<span class="label label-info">Continuing</span>
{{else}}
<span class="label label-default">Ended</span>
{{/if_eq}}
</div>
<div class="col-md-3">
<span class="series-info-links">
<a href="{{traktUrl}}" class="label label-info">Trakt</a>
<span class="pull-right">
<a href="{{traktUrl}}" class="label label-info">Trakt</a>
{{#if imdbId}}
<a href="{{imdbUrl}}" class="label label-info">IMDB</a>
{{/if}}
{{#if imdbId}}
<a href="{{imdbUrl}}" class="label label-info">IMDB</a>
{{/if}}
{{#if tvdbId}}
<a href="{{tvdbUrl}}" class="label label-info">TVDB</a>
{{/if}}
{{#if tvdbId}}
<a href="{{tvdbUrl}}" class="label label-info">TVDB</a>
{{/if}}
{{#if tvRageId}}
<a href="{{tvRageUrl}}" class="label label-info">TVRage</a>
{{/if}}
</span>
{{#if tvRageId}}
<a href="{{tvRageUrl}}" class="label label-info">TVRage</a>
{{/if}}
</span>
</div>
</div>
<div>
{{#each alternativeTitles}}
<span class="label">{{this}}</span>
{{/each}}
<div class="row">
<div class="col-md-12">
{{#each alternativeTitles}}
<span class="label label-default">{{this}}</span>
{{/each}}
</div>
</div>

@ -31,7 +31,7 @@
</div>
</span>
</h2>
<div class="x-episode-grid"></div>
<div class="x-episode-grid table-responsive"></div>
<div class="show-hide-episodes x-show-hide-episodes">
<h4>
{{#if showingEpisodes}}

@ -1,5 +1,5 @@
<div class="row series-page-header">
<div class="col-md-11">
<div class="col-md-12">
<div class="row">
<h1>
<i class="x-monitored" title="Toggle monitored state for entire series"/>
@ -24,9 +24,7 @@
<div class="row series-detail-overview">
{{overview}}
</div>
<div id="info" class="row">
</div>
<div id="info" class="row series-info"></div>
</div>
</div>
<div id="seasons"></div>

@ -27,7 +27,6 @@ define(
this.model.set('qualityProfiles', QualityProfiles);
},
_saveSeries: function () {
var self = this;

@ -1,88 +1,90 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>{{title}}</h3>
</div>
<div class="modal-body edit-series-modal">
<div class="row">
<div class="col-md-2">
<img class="series-poster" src="{{poster}}"
{{defaultImg}}>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>{{title}}</h3>
</div>
<div class="col-md-7">
<div class="form-horizontal">
<div class="modal-body edit-series-modal">
<div class="row">
<div class="col-sm-3 hidden-xs">
<img class="series-poster" src="{{poster}}"
{{defaultImg}}>
</div>
<div class="col-sm-9">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label">Monitored</label>
<div class="form-group">
<label class="col-sm-4 control-label">Monitored</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="monitored"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="monitored"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Should NzbDrone download episodes for this series?"/>
</span>
</div>
</div>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Should NzbDrone download episodes for this series?"/>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label">Use Season Folder</label>
<div class="form-group">
<label class="col-sm-4 control-label">Use Season Folder</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="seasonFolder"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="seasonFolder"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Should downloaded episodes be stored in season folders?"/>
</span>
</div>
</div>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Should downloaded episodes be stored in season folders?"/>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label" for="inputQualityProfile">Quality Profile</label>
<div class="form-group">
<label class="col-sm-4 control-label" for="inputQualityProfile">Quality Profile</label>
<div class="controls">
<div class="col-sm-4">
<select class="form-control x-quality-profile" id="inputQualityProfile" name="qualityProfileId">
{{#each qualityProfiles.models}}
<option value="{{id}}">{{attributes.name}}</option>
{{/each}}
</select>
<select class="x-quality-profile" id="inputQualityProfile" name="qualityProfileId">
{{#each qualityProfiles.models}}
<option value="{{id}}">{{attributes.name}}</option>
{{/each}}
</select>
<span class="help-inline">
<i class="icon-nd-form-info" title="Which Quality Profile should NzbDrone use to download episodes?"/>
</span>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label" for="inputPath">Path</label>
<div class="form-group">
<label class="col-sm-4 control-label" for="inputPath">Path</label>
<div class="controls">
<input type="text" id="inputPath" class="x-path" placeholder="Path" name="path">
<span class="help-inline">
<i class="icon-nd-form-info" title="Where should NzbDrone store episodes for this series?"/>
</span>
<div class="col-sm-6">
<input type="text" id="inputPath" class="form-control x-path" placeholder="Path" name="path">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-danger pull-left x-remove">delete</button>
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-primary x-save">save</button>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-danger pull-left x-remove">delete</button>
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-primary x-save">save</button>
</div>

@ -1,23 +1,27 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Organize of Selected Series</h3>
</div>
<div class="modal-body update-files-series-modal">
<div class="alert alert-info">
<button type="button" class="close" data-dismiss="alert">&times;</button>
Tip: To preview a rename... select "Cancel" then any series title and use the <i data-original-title="" class="icon-nd-rename" title=""></i>
</div>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Organize of Selected Series</h3>
</div>
<div class="modal-body update-files-series-modal">
<div class="alert alert-info">
<button type="button" class="close" data-dismiss="alert">&times;</button>
Tip: To preview a rename... select "Cancel" then any series title and use the <i data-original-title="" class="icon-nd-rename" title=""></i>
</div>
Are you sure you want to update all files in the {{numberOfSeries}} selected series?
Are you sure you want to update all files in the {{numberOfSeries}} selected series?
{{debug}}
<ul class="selected-series">
{{#each series}}
<li>{{title}}</li>
{{/each}}
</ul>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-danger x-confirm-organize">organize</button>
{{debug}}
<ul class="selected-series">
{{#each series}}
<li>{{title}}</li>
{{/each}}
</ul>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-danger x-confirm-organize">organize</button>
</div>
</div>
</div>

@ -1,51 +1,54 @@
<div class="series-editor-footer">
<div class="row">
<div class="col-md-2">Monitored</div>
<div class="col-md-2">Quality Profile</div>
<div class="col-md-2">Season Folder</div>
<div class="col-md-4">Root Folder</div>
</div>
<div class="form-group col-md-2">
<label>Monitored</label>
<div class="row">
<div class="col-md-2">
<select class="col-md-2 x-monitored">
<select class="form-control x-monitored">
<option value="noChange">No change</option>
<option value="true">Monitored</option>
<option value="false">Unmonitored</option>
</select>
</div>
<div class="col-md-2">
<select class="col-md-2 x-quality-profiles">
<div class="form-group col-md-2">
<label>Season Folder</label>
<select class="form-control x-season-folder">
<option value="noChange">No change</option>
{{#each qualityProfiles.models}}
<option value="{{id}}">{{attributes.name}}</option>
{{/each}}
<option value="true">Yes</option>
<option value="false">No</option>
</select>
</div>
<div class="col-md-2">
<select class="col-md-2 x-season-folder">
<div class="form-group col-md-2">
<label>Quality Profile</label>
<select class="form-control x-quality-profiles">
<option value="noChange">No change</option>
<option value="true">Yes</option>
<option value="false">No</option>
{{#each qualityProfiles.models}}
<option value="{{id}}">{{attributes.name}}</option>
{{/each}}
</select>
</div>
<div class="col-md-3">
<select class="col-md-3 x-root-folder" validation-name="RootFolderPath">
<div class="form-group col-md-3">
<label>Root Folder</label>
<select class="form-control x-root-folder" validation-name="RootFolderPath">
<option value="noChange">No change</option>
{{#each rootFolders}}
<option value="{{id}}">{{path}}</option>
<option value="{{id}}">{{path}}</option>
{{/each}}
<option value="addNew">Add a different path</option>
</select>
</div>
<span class="pull-right">
<span class="selected-count x-selected-count">0 series selected</span>
<button class="btn btn-primary x-save">Save</button>
<button class="btn btn-danger x-organize-files">Organize</button>
</span>
<div class="form-group col-md-3 actions">
<label class="x-selected-count">0 series selected</label>
<div>
<button class="btn btn-primary x-save">Save</button>
<button class="btn btn-danger x-organize-files">Organize</button>
</div>
</div>
</div>
</div>
</div>

@ -2,6 +2,6 @@
<div class="row">
<div class="col-md-12">
<div id="x-series-editor" class="series-"></div>
<div id="x-series-editor" class="table-responsive"></div>
</div>
</div>

@ -1,15 +1,4 @@
{{#if_eq episodeFileCount compare=episodeCount}}
{{#if_eq status compare="continuing"}}
<div class="progress episode-progress">
{{else}}
<div class="progress progress-success episode-progress">
{{/if_eq}}
{{else}}
<div class="progress progress-danger episode-progress">
{{/if_eq}}
<div class="progress episode-progress">
<span class="progressbar-back-text">{{episodeFileCount}} / {{episodeCount}}</span>
<div class="bar" style="width:{{percentOfEpisodes}}%"><span class="progressbar-front-text">{{episodeFileCount}} / {{episodeCount}}</span></div>
<div class="progress-bar {{EpisodeProgressClass}} episode-progress" style="width:{{percentOfEpisodes}}%"><span class="progressbar-front-text">{{episodeFileCount}} / {{episodeCount}}</span></div>
</div>

@ -1,26 +1,26 @@
<div class="series-item">
<div class="row">
<div class="col-xs-2">
<div class="col-md-2 col-xs-3">
<a href="{{route}}">
<img class="series-poster" src="{{poster}}" {{defaultImg}}>
</a>
</div>
<div class="col-xs-10">
<div class="col-md-10 col-xs-9">
<div class="row">
<div class="col-xs-10">
<div class="col-md-10 col-xs-10">
<a href="{{route}}" target="_blank">
<h2>{{title}}</h2>
</a>
</div>
<div class="col-xs-2">
<div class="pull-right">
<i class="icon-cog x-edit" title="Edit Series"/>
<div class="col-md-2 col-xs-2">
<div class="pull-right series-overview-list-actions">
<i class="icon-nd-edit x-edit" title="Edit Series"/>
<i class="icon-remove x-remove" title="Delete Series"/>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="col-md-12 col-xs-12">
<a href="{{route}}">
<div>
{{overview}}
@ -29,15 +29,15 @@
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="col-md-12">
&nbsp;
</div>
</div>
<div class="row">
<div class="col-xs-10">
<div class="col-md-10 col-xs-8">
{{#if_eq status compare="continuing"}}
{{#if nextAiring}}
<span class="label">{{NextAiring nextAiring}}</span>
<span class="label label-default">{{NextAiring nextAiring}}</span>
{{/if}}
{{else}}
<span class="label label-important">Ended</span>
@ -47,7 +47,7 @@
{{qualityProfile qualityProfileId}}
</div>
<div class="col-xs-2">
<div class="col-md-2 col-xs-4">
{{> EpisodeProgressPartial }}
</div>
</div>

@ -2,7 +2,7 @@
<div class="center">
<div class="series-poster-container x-series-poster">
<div class="series-controls">
<i class="icon-cog x-edit" title="Edit Series"/>
<i class="icon-nd-edit x-edit" title="Edit Series"/>
<i class="icon-remove x-remove" title="Delete Series"/>
</div>
{{#unless_eq status compare="continuing"}}
@ -19,7 +19,7 @@
<div class="labels">
{{#if_eq status compare="continuing"}}
{{#if nextAiring}}
<span class="label label-inverse">{{NextAiring nextAiring}}</span>
<span class="label label-default">{{NextAiring nextAiring}}</span>
{{/if}}
{{/if_eq}}
{{> EpisodeProgressPartial }}

@ -96,6 +96,7 @@ define(
leftSideButtons: {
type : 'default',
storeState: false,
collapse : true,
items :
[
{

@ -4,7 +4,7 @@
</div>
<div class="row">
<div class="col-md-12">
<div class="col-md-12 table-responsive">
<div id="x-series"></div>
</div>
</div>

@ -99,7 +99,7 @@
left : 0px;
width : 170px;
.progressbar-front-text {
.progressbar-front-text, .progressbar-back-text {
width : 170px;
}
}
@ -123,6 +123,26 @@
.opacity(1);
}
}
@media (max-width: @screen-xs-max) {
height : 235px;
margin : 5px;
padding : 6px 5px;
.center {
.progress {
width : 125px;
.progressbar-front-text, .progressbar-back-text {
width : 125px
}
}
}
.labels {
width: 125px;
}
}
}
.series-poster-container {
@ -180,6 +200,18 @@
font-size : 34px;
line-height : 34px;
}
@media (max-width: @screen-xs-max) {
.series-poster {
width : 120px;
height : 176px;
}
.ended-banner {
top : 145px;
left : -137px;
}
}
}
}
@ -219,12 +251,6 @@
margin-top : 30px;
font-size : 12px;
}
.search-buttons {
width : 400px;
margin-left : auto;
margin-right : auto;
}
}
.season-grid {
@ -310,24 +336,22 @@
}
}
//Overview List
.series-overview-list-actions {
min-width: 56px;
max-width: 56px;
}
//Editor
.series-editor-footer {
width: 1160px;
max-width: 1160px;
color: #f5f5f5;
margin-left: auto;
margin-right: auto;
.selected-count {
margin-right: 10px;
}
.row {
margin-left: -40px;
}
.col-md-2 {
width: 160px;
.form-group {
padding-top: 0px;
}
}
@ -348,4 +372,17 @@
cursor: not-allowed;
}
}
}
.series-info {
.row {
margin-bottom: 5px;
}
.series-info-links {
@media (max-width: @screen-sm-max) {
display : inline-block;
margin-top : 5px;
}
}
}

@ -1,12 +1,16 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Add Download Client</h3>
</div>
<div class="modal-body">
<div class="add-download-client add-thingies">
<ul class="items"></ul>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Add Download Client</h3>
</div>
<div class="modal-body">
<div class="add-download-client add-thingies">
<ul class="items"></ul>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">close</button>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">close</button>
</div>

@ -1,10 +1,6 @@
<div class="add-thingy col-md-3">
<div class="row">
<div class="col-md-3">
{{implementation}}
{{#if link}}
<a href="{{link}}"><i class="icon-info-sign"/></a>
{{/if}}
</div>
</div>
<div class="add-thingy">
{{implementation}}
{{#if link}}
<a href="{{link}}"><i class="icon-info-sign"/></a>
{{/if}}
</div>

@ -1,11 +1,15 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Delete Download Client</h3>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Delete Download Client</h3>
</div>
<div class="modal-body">
<p>Are you sure you want to delete '{{name}}'?</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-danger x-confirm-delete">delete</button>
</div>
</div>
</div>
<div class="modal-body">
<p>Are you sure you want to delete '{{name}}'?</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-danger x-confirm-delete">delete</button>
</div>

@ -2,7 +2,7 @@
<legend>Download Clients</legend>
<div class="row">
<div class="col-md-12">
<ul id="x-download-clients" class="download-client-list">
<ul id="x-download-clients" class="download-client-list thingies">
<li>
<div class="download-client-item thingy add-card x-add-card">
<span class="center well">

@ -4,17 +4,15 @@ define(
[
'AppLayout',
'marionette',
'Settings/DownloadClient/Edit/DownloadClientEditView',
'Settings/DownloadClient/Delete/DownloadClientDeleteView'
], function (AppLayout, Marionette, EditView, DeleteView) {
'Settings/DownloadClient/Edit/DownloadClientEditView'
], function (AppLayout, Marionette, EditView) {
return Marionette.ItemView.extend({
template: 'Settings/DownloadClient/DownloadClientItemViewTemplate',
tagName : 'li',
events: {
'click .x-edit' : '_edit',
'click .x-delete' : '_delete'
'click' : '_edit'
},
initialize: function () {
@ -24,11 +22,6 @@ define(
_edit: function () {
var view = new EditView({ model: this.model, downloadClientCollection: this.model.collection });
AppLayout.modalRegion.show(view);
},
_delete: function () {
var view = new DeleteView({ model: this.model});
AppLayout.modalRegion.show(view);
}
});
});

@ -1,17 +1,13 @@
<div class="download-client-item thingy">
<div class="download-client-item thingy" title="Click to edit">
<div>
<h3>{{name}}</h3>
<span class="btn-group pull-right">
<button class="btn btn-xs btn-icon-only x-edit"><i class="icon-nd-edit"/></button>
<button class="btn btn-xs btn-icon-only x-delete"><i class="icon-nd-delete"/></button>
</span>
</div>
<div class="settings">
{{#if enable}}
<span class="label label-success">Enabled</span>
{{else}}
<span class="label">Not Enabled</span>
<span class="label label-default">Not Enabled</span>
{{/if}}
</div>
</div>

@ -1,59 +1,65 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
{{#if id}}
<h3>Edit - {{implementation}}</h3>
{{else}}
<h3>Add - {{implementation}}</h3>
{{/if}}
</div>
<div class="modal-body download-client-modal">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label">Name</label>
<div class="controls">
<input type="text" name="name"/>
</div>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
{{#if id}}
<h3>Edit - {{implementation}}</h3>
{{else}}
<h3>Add - {{implementation}}</h3>
{{/if}}
</div>
<div class="modal-body download-client-modal">
<div class="form-horizontal">
<div class="form-group">
<label class="col-sm-3 control-label">Name</label>
<div class="col-sm-5">
<input type="text" name="name" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Enable</label>
<div class="form-group">
<label class="control-label">Enable</label>
<div class="col-sm-5">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="enable"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="enable"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
</div>
</div>
</div>
<div class="btn btn-primary slide-button"/>
</label>
{{formBuilder}}
</div>
</div>
<div class="modal-footer">
{{#if id}}
<button class="btn btn-danger pull-left x-delete">delete</button>
{{else}}
<button class="btn pull-left x-back">back</button>
{{/if}}
{{formBuilder}}
</div>
</div>
<div class="modal-footer">
{{#if id}}
<button class="btn btn-danger pull-left x-delete">delete</button>
{{else}}
<button class="btn pull-left x-back">back</button>
{{/if}}
<button class="btn x-test">test <i class="x-test-icon icon-nd-test"/></button>
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn x-test">test <i class="x-test-icon icon-nd-test"/></button>
<button class="btn" data-dismiss="modal">cancel</button>
<div class="btn-group">
<button class="btn btn-primary x-save">save</button>
<button class="btn btn-icon-only btn-primary dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li class="save-and-add x-save-and-add">
save and add
</li>
</ul>
<div class="btn-group">
<button class="btn btn-primary x-save">save</button>
<button class="btn btn-icon-only btn-primary dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li class="save-and-add x-save-and-add">
save and add
</li>
</ul>
</div>
</div>
</div>
</div>

@ -2,32 +2,12 @@
<legend>Failed Download Handling</legend>
<div class="form-group">
<label class="control-label">Enable</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="enableFailedDownloadHandling" class="x-failed-download-handling"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Process failed downloads and blacklist the release"/>
</span>
</div>
</div>
<div class="x-failed-download-options">
<div class="form-group">
<label class="control-label">Redownload</label>
<label class="col-sm-3 control-label">Enable</label>
<div class="controls">
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="autoRedownloadFailed"/>
<input type="checkbox" name="enableFailedDownloadHandling" class="x-failed-download-handling"/>
<p>
<span>Yes</span>
<span>No</span>
@ -37,64 +17,90 @@
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Automatically search for and attempt to download another release when a download fails?"/>
<i class="icon-nd-form-info" title="Process failed downloads and blacklist the release"/>
</span>
</div>
</div>
</div>
<div class="x-failed-download-options">
<div class="form-group">
<label class="control-label">Remove</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="removeFailedDownloads"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Automatically remove failed downloads from history and encrypted downloads from queue?"/>
</span>
<label class="col-sm-3 control-label">Redownload</label>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="autoRedownloadFailed"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Automatically search for and attempt to download another release when a download fails?"/>
</span>
</div>
</div>
</div>
<div class="control-group advanced-setting">
<label class="control-label">Grace Period</label>
<div class="form-group">
<label class="col-sm-3 control-label">Remove</label>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="removeFailedDownloads"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Automatically remove failed downloads from history and encrypted downloads from queue?"/>
</span>
</div>
</div>
</div>
<div class="controls">
<input type="number" min="1" max="24" name="blacklistGracePeriod"/>
<div class="form-group advanced-setting">
<label class="col-sm-3 control-label">Grace Period</label>
<span class="help-inline">
<div class="col-sm-1 col-sm-push-2 help-inline">
<i class="icon-nd-form-info" title="Age in hours that a release will remain in the download client and retried"/>
</span>
</div>
</div>
<div class="control-group advanced-setting">
<label class="control-label">Retry Interval</label>
<div class="col-sm-2 col-sm-pull-1">
<input type="number" min="1" max="24" name="blacklistGracePeriod" class="form-control"/>
</div>
</div>
<div class="controls">
<input type="number" min="5" max="120" name="blacklistRetryInterval"/>
<div class="form-group advanced-setting">
<label class="col-sm-3 control-label">Retry Interval</label>
<span class="help-inline">
<div class="col-sm-1 col-sm-push-2 help-inline">
<i class="icon-nd-form-info" title="Time in minutes before a failed download for a recent release will be retried"/>
</span>
</div>
</div>
<div class="control-group advanced-setting">
<label class="control-label">Retry Count</label>
<div class="col-sm-2 col-sm-pull-1">
<input type="number" min="5" max="120" name="blacklistRetryInterval" class="form-control"/>
</div>
</div>
<div class="controls">
<input type="number" min="0" max="10" name="blacklistRetryLimit"/>
<div class="form-group advanced-setting">
<label class="col-sm-3 control-label">Retry Count</label>
<span class="help-inline">
<div class="col-sm-1 col-sm-push-2 help-inline">
<i class="icon-nd-form-info" title="Number of times to retry a release before it is blacklisted"/>
</span>
</div>
<div class="col-sm-2 col-sm-pull-1">
<input type="number" min="0" max="10" name="blacklistRetryLimit" class="form-control"/>
</div>
</div>
</div>

@ -1,26 +1,28 @@
<fieldset">
<fieldset>
<legend>Options</legend>
<div class="form-group">
<label class="control-label">Drone Factory</label>
<label class="col-sm-3 control-label">Drone Factory</label>
<div class="controls">
<input type="text" name="downloadedEpisodesFolder" class="x-path"/>
<span class="help-inline">
<i class="icon-nd-form-info" title="The folder where your download client downloads TV shows to (Completed Download Directory)"/>
<i class="icon-nd-form-warning" title="Do not use the folder that contains some or all of your sorted and named TV shows - doing so could cause data loss"></i>
</span>
<div class="col-sm-1 col-sm-push-8 help-inline">
<i class="icon-nd-form-info" title="The folder where your download client downloads TV shows to (Completed Download Directory)"/>
<i class="icon-nd-form-warning" title="Do not use the folder that contains some or all of your sorted and named TV shows - doing so could cause data loss"></i>
</div>
<div class="col-sm-8 col-sm-pull-1">
<input type="text" name="downloadedEpisodesFolder" class="form-control x-path" />
</div>
</div>
<div class="form-group advanced-setting">
<label class="control-label">Drone Factory Interval</label>
<label class="col-sm-3 control-label">Drone Factory Interval</label>
<div class="col-sm-1 col-sm-push-2 help-inline">
<i class="icon-nd-form-info" title="Interval in minutes to scan the Drone Factory. Set to zero to disable."/>
<i class="icon-nd-form-warning" title="Setting a high interval or disabling scanning will prevent episodes from being imported."></i>
</div>
<div class="controls">
<input type="number" name="downloadedEpisodesScanInterval"/>
<span class="help-inline">
<i class="icon-nd-form-info" title="Interval in minutes to scan the Drone Factory. Set to zero to disable."/>
<i class="icon-nd-form-warning" title="Setting a high interval or disabling scanning will prevent episodes from being imported."></i>
</span>
<div class="col-sm-2 col-sm-pull-1">
<input type="number" name="downloadedEpisodesScanInterval" class="form-control" />
</div>
</div>
</fieldset>

@ -1,3 +1,5 @@
@import "../../Shared/Styles/clickable.less";
.download-client-list {
li {
display: inline-block;
@ -7,21 +9,25 @@
.download-client-item {
.clickable;
width: 290px;
height: 90px;
padding: 10px 15px;
h3 {
width: 230px;
}
&.add-card {
.center {
margin-top: 15px;
margin-top: -3px;
}
}
}
.modal-overflow {
overflow-y: visible;
}
.add-download-client {
li {
width: 33%;
}
}

@ -3,87 +3,93 @@
<legend>Start-Up</legend>
<div class="form-group">
<label class="control-label">Port Number</label>
<label class="col-sm-3 control-label">Port Number</label>
<div class="controls">
<input type="number" placeholder="8989" name="port"/>
<span>
<i class="icon-nd-form-warning" title="Requires restart to take effect"/>
</span>
<div class="col-sm-1 col-sm-push-4 help-inline">
<i class="icon-nd-form-warning" title="Requires restart to take effect"/>
</div>
<div class="col-sm-4 col-sm-pull-1">
<input type="number" placeholder="8989" name="port" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="control-label">URL Base</label>
<label class="col-sm-3 control-label">URL Base</label>
<div class="col-sm-1 col-sm-push-4 help-inline">
<i class="icon-nd-form-warning" title="Requires restart to take effect"/>
<i class="icon-nd-form-info" title="For reverse proxy support, default is empty"/>
</div>
<div class="controls">
<input type="text" name="urlBase"/>
<span>
<i class="icon-nd-form-warning" title="Requires restart to take effect"/>
<i class="icon-nd-form-info" title="For reverse proxy support, default is empty"/>
</span>
<div class="col-sm-4 col-sm-pull-1">
<input type="text" name="urlBase" class="form-control"/>
</div>
</div>
<div class="form-group advanced-setting">
<label class="control-label">Enable SSL</label>
<label class="col-sm-3 control-label">Enable SSL</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="enableSsl" class="x-ssl"/>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="enableSsl" class="x-ssl"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-warning" title="Requires restart running as administrator to take effect"/>
</span>
<span class="help-inline-checkbox">
<i class="icon-nd-form-warning" title="Requires restart running as administrator to take effect"/>
</span>
</div>
</div>
</div>
<div class="x-ssl-options">
<div class="form-group advanced-setting">
<label class="control-label">SSL Port Number</label>
<label class="col-sm-3 control-label">SSL Port Number</label>
<div class="controls">
<input type="number" placeholder="8989" name="sslPort"/>
<div class="col-sm-4">
<input type="number" placeholder="8989" name="sslPort" class="form-control"/>
</div>
</div>
{{#if_windows}}
<div class="form-group advanced-setting">
<label class="control-label">SSL Cert Hash</label>
<label class="col-sm-3 control-label">SSL Cert Hash</label>
<div class="controls">
<input type="text" name="sslCertHash"/>
<div class="col-sm-4">
<input type="text" name="sslCertHash" class="form-control"/>
</div>
</div>
{{/if_windows}}
</div>
<div class="form-group">
<label class="control-label">Open browser on start</label>
<label class="col-sm-3 control-label">Open browser on start</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="launchBrowser"/>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="launchBrowser" class="form-control"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Open a web browser and navigate to NzbDrone homepage on app start. Has no effect if installed as a windows service"/>
</span>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Open a web browser and navigate to NzbDrone homepage on app start. Has no effect if installed as a windows service"/>
</span>
</div>
</div>
</div>
</fieldset>
@ -91,49 +97,59 @@
<fieldset>
<legend>Security</legend>
<div class="form-group">
<label class="control-label">Authentication</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" class='x-auth' name="authenticationEnabled"/>
<p>
<span>On</span>
<span>Off</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Require Username and Password to access Nzbdrone"/>
</span>
<label class="col-sm-3 control-label">Authentication</label>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" class='x-auth' name="authenticationEnabled"/>
<p>
<span>On</span>
<span>Off</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Require Username and Password to access Nzbdrone"/>
</span>
</div>
</div>
</div>
<div class='x-auth-options'>
<div class="form-group">
<label class="control-label">Username</label>
<div class="controls">
<input type="text" placeholder="Username" name="username"/>
<label class="col-sm-3 control-label">Username</label>
<div class="col-sm-4">
<input type="text" placeholder="Username" name="username" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="control-label">Password</label>
<div class="controls">
<input type="password" name="password"/>
<label class="col-sm-3 control-label">Password</label>
<div class="col-sm-4">
<input type="password" name="password" class="form-control"/>
</div>
</div>
</div>
<div class="form-group api-key">
<label class="control-label">API Key</label>
<div class="controls">
<label class="col-sm-3 control-label">API Key</label>
<div class="col-sm-1 col-sm-push-4 help-inline">
<i class="icon-nd-form-warning" title="Requires restart to take effect"/>
</div>
<div class="col-sm-4 col-sm-pull-1">
<div class="input-group">
<input type="text" name="apiKey" readonly="readonly" class="x-api-key"/>
<button class="btn btn-icon-only x-copy-api-key" title="Copy to clipboard"><i class="icon-copy"></i></button>
<button class="btn btn-danger btn-icon-only x-reset-api-key" title="Reset API Key"><i class="icon-refresh"></i></button>
<input type="text" name="apiKey" readonly="readonly" class="form-control x-api-key"/>
<div class="input-group-btn">
<button class="btn btn-icon-only x-copy-api-key hidden-xs"><i class="icon-copy"></i></button>
<button class="btn btn-danger btn-icon-only x-reset-api-key" title="Reset API Key" data-container="body"><i class="icon-refresh"></i></button>
</div>
</div>
<span>
<i class="icon-nd-form-warning" title="Requires restart to take effect"/>
</span>
</div>
</div>
</fieldset>
@ -142,33 +158,31 @@
<legend>Logging</legend>
<div class="form-group">
<label class="control-label">Log Level</label>
<label class="col-sm-3 control-label">Log Level</label>
<div class="col-sm-1 col-sm-push-2 help-inline">
<i class="icon-nd-form-warning" title="Trace and Debug logging should only be enabled temporarily"/>
</div>
<div class="controls">
<select name="logLevel">
<div class="col-sm-2 col-sm-pull-1">
<select name="logLevel" class="form-control">
<option value="Trace">Trace</option>
<option value="Debug">Debug</option>
<option value="Info">Info</option>
</select>
<span>
<i class="icon-nd-form-warning" title="Trace and Debug logging should only be enabled temporarily"/>
</span>
</div>
</div>
</fieldset>
{{#if_windows}}
<fieldset class="advanced-setting">
<legend>Development</legend>
<div class="alert">
<i class="icon-nd-warning"></i>
Don't change anything here unless you know what you are doing.
</div>
<div class="form-group">
<label class="control-label">Branch</label>
<label class="col-sm-3 control-label">Branch</label>
<div class="controls">
<input type="text" placeholder="master" name="branch"/>
<div class="col-sm-4">
<input type="text" placeholder="master" name="branch" class="form-control"/>
</div>
</div>
@ -195,4 +209,5 @@
<!--</div>-->
<!--{{/if_mono}}-->
</fieldset>
{{/if_windows}}
</div>

@ -1,11 +1,15 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Delete Indexer</h3>
</div>
<div class="modal-body">
<p>Are you sure you want to delete '{{name}}'?</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-danger x-confirm-delete">delete</button>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Delete Indexer</h3>
</div>
<div class="modal-body">
<p>Are you sure you want to delete '{{name}}'?</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-danger x-confirm-delete">delete</button>
</div>
</div>
</div>

@ -1,58 +1,64 @@
<div class="modal-header">
<button type="button" class="close x-cancel"aria-hidden="true">&times;</button>
{{#if id}}
<h3>Edit</h3>
{{else}}
<h3>Add Newznab</h3>
{{/if}}
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label">Name</label>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close x-cancel"aria-hidden="true">&times;</button>
{{#if id}}
<h3>Edit</h3>
{{else}}
<h3>Add Newznab</h3>
{{/if}}
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="form-group">
<label class="col-sm-3 control-label">Name</label>
<div class="col-sm-5">
<input type="text" name="name" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Enable</label>
<div class="col-sm-5">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="enable"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="controls">
<input type="text" name="name"/>
<div class="btn btn-primary slide-button"/>
</label>
</div>
</div>
</div>
{{formBuilder}}
</div>
</div>
<div class="modal-footer">
{{#if id}}
<button class="btn btn-danger pull-left x-remove">delete</button>
{{/if}}
<div class="form-group">
<label class="control-label">Enable</label>
<span class="x-activity"></span>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="enable"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<button class="btn x-cancel">cancel</button>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn-group">
<button class="btn btn-primary x-save">save</button>
<button class="btn btn-icon-only btn-primary dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li class="save-and-add x-save-and-add">
save and add
</li>
</ul>
</div>
</div>
{{formBuilder}}
</div>
</div>
<div class="modal-footer">
{{#if id}}
<button class="btn btn-danger pull-left x-remove">delete</button>
{{/if}}
<span class="x-activity"></span>
<button class="btn x-cancel">cancel</button>
<div class="btn-group">
<button class="btn btn-primary x-save">save</button>
<button class="btn btn-icon-only btn-primary dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li class="save-and-add x-save-and-add">
save and add
</li>
</ul>
</div>
</div>

@ -13,7 +13,7 @@
<div class="form-group">
<label class="control-label">Enable</label>
<div class="controls">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="enable"/>
<p>

@ -2,37 +2,36 @@
<legend>Options</legend>
<div class="form-group">
<label class="control-label">Retention</label>
<label class="col-sm-3 control-label">Retention</label>
<div class="controls">
<input type="number" min="0" name="retention"/>
<div class="col-sm-2">
<input type="number" min="0" name="retention" class="form-control"/>
</div>
</div>
<div class="form-group advanced-setting">
<label class="control-label">RSS Sync Interval</label>
<label class="col-sm-3 control-label">RSS Sync Interval</label>
<div class="controls">
<input type="number" name="rssSyncInterval"/>
<div class="col-sm-1 col-sm-push-2 help-inline">
<i class="icon-nd-form-warning" title="This will apply to all indexers, please follow the rules set forth by them"/>
<i class="icon-nd-form-info" title="Set to zero to disable (this will stop all automatic release grabbing)"/>
</div>
<span class="help-inline">
<i class="icon-nd-form-warning" title="This will apply to all indexers, please follow the rules set forth by them"/>
<i class="icon-nd-form-info" title="Set to zero to disable (this will stop all automatic release grabbing)"/>
</span>
<div class="col-sm-2 col-sm-pull-1">
<input type="number" name="rssSyncInterval" class="form-control"/>
</div>
</div>
<div class="form-group advanced-setting">
<label class="control-label">Release Restrictions</label>
<div class="controls">
<textarea rows="3" name="releaseRestrictions" class="release-restrictions"></textarea>
<label class="col-sm-3 control-label">Release Restrictions</label>
<span class="help-inline">
<i class="icon-nd-form-info" title="Blacklist NZBs based on these words (case-insensitive)"/>
</span>
<div class="col-sm-1 col-sm-push-4 help-inline help-inline-text-area">
<i class="icon-nd-form-info" title="Blacklist NZBs based on these words (case-insensitive)"/>
</div>
<span class="text-area-help">Newline-delimited set of rules</span>
<div class="col-sm-4 col-sm-pull-1">
<textarea rows="3" name="releaseRestrictions" class="form-control release-restrictions"></textarea>
<div class="text-area-help">Newline-delimited set of rules</div>
</div>
</div>
</fieldset>

@ -1,16 +1,29 @@
.indexer-settings-item {
width: 220px;
height: 260px;
height: 295px;
padding: 10px 15px;
h3 {
width: 190px;
width: 175px;
overflow: visible;
}
&.add-card {
margin-top: 10px;
margin-left: 10px;
.center {
margin-top: 100px;
margin-top: 90px;
}
}
/* Super hack to keep using form builder, this should be dead when we do proper modals for editing */
.col-sm-1, .col-sm-3, .col-sm-5 {
display : block;
width : 100%;
padding: 0px;
float: none;
position: inherit;
}
}

@ -2,68 +2,74 @@
<legend>File Management</legend>
<div class="form-group">
<label class="control-label">Ignore Deleted Episodes</label>
<label class="col-sm-3 control-label">Ignore Deleted Episodes</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="autoUnmonitorPreviouslyDownloadedEpisodes"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="col-sm-9">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="autoUnmonitorPreviouslyDownloadedEpisodes"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Episodes deleted from disk are automatically unmonitored in NzbDrone"/>
</span>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Episodes deleted from disk are automatically unmonitored in NzbDrone"/>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label">Download Propers</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="autoDownloadPropers"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="form-group advanced-setting">
<label class="col-sm-3 control-label">Download Propers</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Should NzbDrone automatically upgrade to propers when available?"/>
</span>
</div>
</div>
<div class="col-sm-9">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="autoDownloadPropers"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="form-group">
<label class="control-label">Recycling Bin</label>
<div class="btn btn-primary slide-button"/>
</label>
<div class="controls">
<input type="text" name="recycleBin" class="x-path"/>
<span class="help-inline">
<i class="icon-nd-form-info" title="Episode files will go here when deleted instead of being permanently deleted"/>
</span>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Should NzbDrone automatically upgrade to propers when available?"/>
</span>
</div>
</div>
</div>
<div class="form-group advanced-setting">
<label class="control-label">Change File Date</label>
<label class="col-sm-3 control-label">Change File Date</label>
<div class="controls">
<select class="inputClass" name="fileDate">
<div class="col-sm-1 col-sm-push-2 help-inline">
<i class="icon-nd-form-info" title="Change file date on import/rescan"/>
</div>
<div class="col-sm-2 col-sm-pull-1">
<select class="form-control" name="fileDate">
<option value="none">None</option>
<option value="localAirDate">Local Air Date</option>
<option value="utcAirDate">UTC Air Date</option>
</select>
<span class="help-inline">
<i class="icon-nd-form-info" title="Change file date on import/rescan"/>
</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Recycling Bin</label>
<div class="col-sm-1 col-sm-push-8 help-inline">
<i class="icon-nd-form-info" title="Episode files will go here when deleted instead of being permanently deleted"/>
</div>
<div class="col-sm-8 col-sm-pull-1">
<input type="text" name="recycleBin" class="form-control x-path"/>
</div>
</div>
</fieldset>

@ -1,76 +1,86 @@
<div class="form-group">
<label class="control-label">Include Series Title</label>
<label class="col-sm-3 control-label">Include Series Title</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="includeSeriesTitle"/>
<div class="col-sm-9">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="includeSeriesTitle"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label">Include Episode Title</label>
<label class="col-sm-3 control-label">Include Episode Title</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="includeEpisodeTitle"/>
<div class="col-sm-9">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="includeEpisodeTitle"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label">Include Quality</label>
<label class="col-sm-3 control-label">Include Quality</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="includeQuality"/>
<div class="col-sm-9">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="includeQuality"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label">Replace Spaces</label>
<label class="col-sm-3 control-label">Replace Spaces</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="replaceSpaces"/>
<div class="col-sm-9">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="replaceSpaces"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label">Separator</label>
<label class="col-sm-3 control-label">Separator</label>
<div class="controls">
<select class="inputClass" name="separator">
<div class="col-sm-9">
<select class="form-control" name="separator">
<option value=" - ">Dash</option>
<option value=" ">Space</option>
<option value=".">Period</option>
@ -79,10 +89,10 @@
</div>
<div class="form-group">
<label class="control-label">Numbering Style</label>
<label class="col-sm-3 control-label">Numbering Style</label>
<div class="controls">
<select class="inputClass" name="numberStyle">
<div class="col-sm-9">
<select class="form-control" name="numberStyle">
<option value="{season}x{episode:00}">1x05</option>
<option value="{season:00}x{episode:00}">01x05</option>
<option value="S{season:00}E{episode:00}">S01E05</option>

@ -2,23 +2,25 @@
<legend>Episode Naming</legend>
<div class="form-group">
<label class="control-label">Rename Episodes</label>
<label class="col-sm-3 control-label">Rename Episodes</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="renameEpisodes" class="x-rename-episodes"/>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="renameEpisodes" class="x-rename-episodes"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-warning" title="NzbDrone will use the existing file name if set to no"/>
</span>
<span class="help-inline-checkbox">
<i class="icon-nd-form-warning" title="NzbDrone will use the existing file name if set to no"/>
</span>
</div>
</div>
</div>
@ -26,12 +28,17 @@
<div class="basic-setting x-basic-naming"></div>
<div class="form-group advanced-setting">
<label class="control-label">Standard Episode Format</label>
<label class="col-sm-3 control-label">Standard Episode Format</label>
<div class="controls">
<div class="col-sm-1 col-sm-push-8 help-inline">
<i class="icon-nd-form-info" title="" data-original-title="All caps or all lower-case can also be used"></i>
<a href="https://github.com/NzbDrone/NzbDrone/wiki/Sorting-and-Renaming" class="help-link" title="More information"><i class="icon-nd-form-info-link"/></a>
</div>
<div class="col-sm-8 col-sm-pull-1">
<div class="input-group x-helper-input">
<input type="text" class="naming-format" name="standardEpisodeFormat" data-onkeyup="true" />
<div class="btn-group x-naming-token-helper">
<input type="text" class="form-control naming-format" name="standardEpisodeFormat" data-onkeyup="true" />
<div class="input-group-btn btn-group x-naming-token-helper">
<button class="btn btn-icon-only dropdown-toggle" data-toggle="dropdown">
<i class="icon-plus"></i>
</button>
@ -47,20 +54,21 @@
</ul>
</div>
</div>
<span class="help-inline">
<i class="icon-nd-form-info" title="" data-original-title="All caps or all lower-case can also be used"></i>
<a href="https://github.com/NzbDrone/NzbDrone/wiki/Sorting-and-Renaming" class="help-link" title="More information"><i class="icon-nd-form-info-link"/></a>
</span>
</div>
</div>
<div class="form-group advanced-setting">
<label class="control-label">Daily Episode Format</label>
<label class="col-sm-3 control-label">Daily Episode Format</label>
<div class="controls">
<div class="col-sm-1 col-sm-push-8 help-inline">
<i class="icon-nd-form-info" title="" data-original-title="All caps or all lower-case can also be used"></i>
<a href="https://github.com/NzbDrone/NzbDrone/wiki/Sorting-and-Renaming" class="help-link" title="More information"><i class="icon-nd-form-info-link"/></a>
</div>
<div class="col-sm-8 col-sm-pull-1">
<div class="input-group x-helper-input">
<input type="text" class="naming-format" name="dailyEpisodeFormat" data-onkeyup="true" />
<div class="btn-group x-naming-token-helper">
<input type="text" class="form-control naming-format" name="dailyEpisodeFormat" data-onkeyup="true" />
<div class="input-group-btn btn-group x-naming-token-helper">
<button class="btn btn-icon-only dropdown-toggle" data-toggle="dropdown">
<i class="icon-plus"></i>
</button>
@ -77,34 +85,21 @@
</ul>
</div>
</div>
<span class="help-inline">
<i class="icon-nd-form-info" title="" data-original-title="All caps or all lower-case can also be used"></i>
<a href="https://github.com/NzbDrone/NzbDrone/wiki/Sorting-and-Renaming" class="help-link" title="More information"><i class="icon-nd-form-info-link"/></a>
</span>
</div>
</div>
<div class="form-group">
<label class="control-label">Multi-Episode Style</label>
<div class="controls">
<select class="inputClass x-multi-episode-style" name="multiEpisodeStyle">
<option value="0">Extend</option>
<option value="1">Duplicate</option>
<option value="2">Repeat</option>
<option value="3">Scene</option>
</select>
</div>
</div>
</div>
<div class="form-group advanced-setting">
<label class="control-label">Series Folder Format</label>
<label class="col-sm-3 control-label">Series Folder Format</label>
<div class="controls">
<div class="col-sm-1 col-sm-push-8 help-inline">
<i class="icon-nd-form-info" title="" data-original-title="All caps or all lower-case can also be used. Only used when adding a new series."></i>
</div>
<div class="col-sm-8 col-sm-pull-1">
<div class="input-group x-helper-input">
<input type="text" class="naming-format" name="seriesFolderFormat" data-onkeyup="true"/>
<div class="btn-group x-naming-token-helper">
<input type="text" class="form-control naming-format" name="seriesFolderFormat" data-onkeyup="true"/>
<div class="input-group-btn btn-group x-naming-token-helper">
<button class="btn btn-icon-only dropdown-toggle" data-toggle="dropdown">
<i class="icon-plus"></i>
</button>
@ -113,19 +108,16 @@
</ul>
</div>
</div>
<span class="help-inline">
<i class="icon-nd-form-info" title="" data-original-title="All caps or all lower-case can also be used. Only used when adding a new series."></i>
</span>
</div>
</div>
<div class="form-group">
<label class="control-label">Season Folder Format</label>
<label class="col-sm-3 control-label">Season Folder Format</label>
<div class="controls">
<div class="col-sm-8">
<div class="input-group x-helper-input">
<input type="text" class="naming-format" name="seasonFolderFormat" data-onkeyup="true"/>
<div class="btn-group x-naming-token-helper">
<input type="text" class="form-control naming-format" name="seasonFolderFormat" data-onkeyup="true"/>
<div class="input-group-btn btn-group x-naming-token-helper">
<button class="btn btn-icon-only dropdown-toggle" data-toggle="dropdown">
<i class="icon-plus"></i>
</button>
@ -139,43 +131,58 @@
</div>
</div>
<div class="form-group">
<label class="control-label">Single Episode Example</label>
<div class="x-naming-options">
<div class="form-group">
<label class="col-sm-3 control-label">Multi-Episode Style</label>
<div class="controls">
<span class="x-single-episode-example naming-example"></span>
<div class="col-sm-2">
<select class="form-control x-multi-episode-style" name="multiEpisodeStyle">
<option value="0">Extend</option>
<option value="1">Duplicate</option>
<option value="2">Repeat</option>
<option value="3">Scene</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Single Episode Example</label>
<div class="col-sm-8">
<p class="form-control-static x-single-episode-example naming-example"></p>
</div>
</div>
<div class="form-group">
<label class="control-label">Multi-Episode Example</label>
<label class="col-sm-3 control-label">Multi-Episode Example</label>
<div class="controls">
<span class="x-multi-episode-example naming-example"></span>
<div class="col-sm-8">
<p class="form-control-static x-multi-episode-example naming-example"></p>
</div>
</div>
<div class="form-group">
<label class="control-label">Daily-Episode Example</label>
<label class="col-sm-3 control-label">Daily-Episode Example</label>
<div class="controls">
<span class="x-daily-episode-example naming-example"></span>
<div class="col-sm-8">
<p class="form-control-static x-daily-episode-example naming-example"></p>
</div>
</div>
<div class="control-group">
<label class="control-label">Series Folder Example</label>
<div class="form-group">
<label class="col-sm-3 control-label">Series Folder Example</label>
<div class="controls">
<span class="x-series-folder-example naming-example"></span>
<div class="col-sm-8">
<p class="form-control-static x-series-folder-example naming-example"></p>
</div>
</div>
<div class="control-group">
<label class="control-label">Season Folder Example</label>
<div class="form-group">
<label class="col-sm-3 control-label">Season Folder Example</label>
<div class="controls">
<span class="x-season-folder-example naming-example"></span>
<div class="col-sm-8">
<p class="form-control-static x-season-folder-example naming-example"></p>
</div>
</div>
</fieldset>

@ -1,70 +1,76 @@
{{#if_mono}}
{{#if_mono}}
<fieldset class="advanced-setting">
<legend>Permissions</legend>
<div class="form-group">
<label class="control-label">Set Permissions</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="setPermissionsLinux"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Should chmod/chown be run when files are imported/renamed?"/>
<i class="icon-nd-form-warning" title="If you're unsure what these settings do, do not alter them."/>
</span>
<label class="col-sm-3 control-label">Set Permissions</label>
<div class="col-sm-8">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="setPermissionsLinux"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Should chmod/chown be run when files are imported/renamed?"/>
<i class="icon-nd-form-warning" title="If you're unsure what these settings do, do not alter them."/>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label">File chmod mask</label>
<label class="col-sm-3 control-label">File chmod mask</label>
<div class="controls">
<input type="text" name="fileChmod"/>
<span class="help-inline">
<i class="icon-nd-form-info" title="Octal, applied to media files when imported/renamed by NzbDrone"/>
</span>
<div class="col-sm-1 col-sm-push-4 help-inline">
<i class="icon-nd-form-info" title="Octal, applied to media files when imported/renamed by NzbDrone"/>
</div>
<div class="col-sm-4 col-sm-pull-1">
<input type="text" name="fileChmod" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="control-label">Folder chmod mask</label>
<label class="col-sm-3 control-label">Folder chmod mask</label>
<div class="controls">
<input type="text" name="folderChmod"/>
<span class="help-inline">
<i class="icon-nd-form-info" title="Octal, applied to series/season folders created by NzbDrone"/>
</span>
<div class="col-sm-1 col-sm-push-4 help-inline">
<i class="icon-nd-form-info" title="Octal, applied to series/season folders created by NzbDrone"/>
</div>
<div class="col-sm-4 col-sm-pull-1">
<input type="text" name="folderChmod" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="control-label">chown User</label>
<label class="col-sm-3 control-label">chown User</label>
<div class="col-sm-1 col-sm-push-4 help-inline">
<i class="icon-nd-form-info" title="Username or uid. Use uid for remote file systems."/>
</div>
<div class="controls">
<input type="text" name="chownUser"/>
<span class="help-inline">
<i class="icon-nd-form-info" title="Username or uid. Use uid for remote file systems."/>
</span>
<div class="col-sm-4 col-sm-pull-1">
<input type="text" name="chownUser" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="control-label">chown Group</label>
<label class="col-sm-3 control-label">chown Group</label>
<div class="col-sm-1 col-sm-push-4 help-inline">
<i class="icon-nd-form-info" title="Group name or gid. Use gid for remote file systems."/>
</div>
<div class="controls">
<input type="text" name="chownGroup"/>
<span class="help-inline">
<i class="icon-nd-form-info" title="Group name or gid. Use gid for remote file systems."/>
</span>
<div class="col-sm-4 col-sm-pull-1">
<input type="text" name="chownGroup" class="form-control"/>
</div>
</div>
</fieldset>
{{/if_mono}}
{{/if_mono}}

@ -2,23 +2,25 @@
<legend>Folders</legend>
<div class="form-group">
<label class="control-label">Create empty series folders</label>
<label class="col-sm-3 control-label">Create empty series folders</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="createEmptySeriesFolders"/>
<div class="col-sm-9">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="createEmptySeriesFolders"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Create missing series folders during disk scan"/>
</span>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Create missing series folders during disk scan"/>
</span>
</div>
</div>
</div>
</fieldset>
@ -27,24 +29,26 @@
<fieldset class="advanced-setting">
<legend>Importing</legend>
<div class="control-group">
<label class="control-label">Skip Free Space Check</label>
<div class="form-group">
<label class="col-sm-3 control-label">Skip Free Space Check</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="skipFreeSpaceCheckWhenImporting"/>
<div class="col-sm-9">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="skipFreeSpaceCheckWhenImporting"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Use when drone is unable to detect free space from your series root folder"/>
</span>
<span class="help-inline-checkbox">
<i class="icon-nd-form-info" title="Use when drone is unable to detect free space from your series root folder"/>
</span>
</div>
</div>
</div>
</fieldset>

@ -1,39 +1,45 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Edit</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label">Name</label>
<div class="controls">
<input type="text" name="name"/>
</div>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3>Edit</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="form-group">
<label class="col-sm-3 control-label">Name</label>
<div class="col-sm-5 controls">
<input type="text" name="name" class="form-control"/>
</div>
</div>
<div class="form-group">
<label class="control-label">Enable</label>
<div class="form-group">
<label class="col-sm-3 control-label">Enable</label>
<div class="controls">
<label class="checkbox toggle well">
<input type="checkbox" name="enable"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="col-sm-5">
<div class="input-group">
<label class="checkbox toggle well">
<input type="checkbox" name="enable"/>
<p>
<span>Yes</span>
<span>No</span>
</p>
<div class="btn btn-primary slide-button"/>
</label>
<div class="btn btn-primary slide-button"/>
</label>
</div>
</div>
</div>
{{formBuilder}}
</div>
</div>
<div class="modal-footer">
<span class="x-activity"></span>
{{formBuilder}}
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-primary x-save">save</button>
</div>
</div>
</div>
<div class="modal-footer">
<span class="x-activity"></span>
<button class="btn" data-dismiss="modal">cancel</button>
<button class="btn btn-primary x-save">save</button>
</div>

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

Loading…
Cancel
Save