removed backbone from VS solution,

renamed NzbDrone.Backbone to UI
This commit is contained in:
kay.one 2013-03-29 12:18:44 -07:00
commit 663160c06a
230 changed files with 57 additions and 386 deletions

View file

@ -0,0 +1,290 @@
<fieldset>
<legend>General</legend>
<div class="control-group">
<label class="control-label">Download Client</label>
<div class="controls">
<select class="inputClass x-backlog-setting" name="downloadClient">
<option value="0">SABnzbd</option>
<option value="1">Blackhole</option>
<option value="2">Pneumatic</option>
<option value="3">NZBGet</option>
</select>
<span class="help-inline">
<i class="icon-question-sign" title="What method do you download NZBs with?"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Unsorted TV Directory</label>
<div class="controls">
<input type="text" placeholder="C:\Unsorted TV" name="downloadClientDropDirectory" class="x-path" />
<span class="help-inline">
<i class="icon-question-sign" title="The directory where your download client downloads TV shows to."></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Use Scene Name</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="useSceneName" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Use Scene name when adding NZB to queue?"></i>
</span>
</div>
</div>
</fieldset>
<fieldset>
<legend>SABnzbd</legend>
<div class="control-group">
<label class="control-label">Auto-Configure</label>
<div class="controls">
<input type="button" value="Auto-Configure" class="btn btn-inverse" />
<span class="help-inline">
<i class="icon-question-sign" title="(Windows only) If access to SABnzbd doesn't require a username & password and it is on the same system as NzbDrone, you can auto-configure it"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Host</label>
<div class="controls">
<input type="text" name="sabHost" />
<span class="help-inline">
<i class="icon-question-sign" title="Hostname or IP Address running SABnzbd"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Port</label>
<div class="controls">
<input type="text" name="sabPort" />
<span class="help-inline">
<i class="icon-question-sign" title="Port for the SABnzbd Web Interface"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">API Key</label>
<div class="controls">
<input type="text" name="sabApiKey" />
<span class="help-inline">
<i class="icon-question-sign" title="API Key for SABnzbd<br/>Found in Config -> General"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Username</label>
<div class="controls">
<input type="text" name="sabUsername" />
<span class="help-inline">
<i class="icon-question-sign" title="Username for the SABnzbd web interface"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Password</label>
<div class="controls">
<input type="password" name="sabPassword" />
<span class="help-inline">
<i class="icon-question-sign" title="Password for the SABnzbd web interface"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">TV Category</label>
<div class="controls">
<input type="text" name="sabTvCategory" placeholder="This is not the dropdownlist you're looking for"/>
<span class="help-inline">
<i class="icon-question-sign" title="Category to use when sending NZBs to SABnzbd"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Backlog Priority</label>
<div class="controls">
<select name="sabBacklogTvPriority">
<option>Default</option>
<option>Paused</option>
<option>Low</option>
<option>Normal</option>
<option>High</option>
<option>Force</option>
</select>
<span class="help-inline">
<i class="icon-question-sign" title="Priority to use when sending episodes older than 7 days to SABnzbd"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Recent Priority</label>
<div class="controls">
<select name="sabRecentTvPriority">
<option>Default</option>
<option>Paused</option>
<option>Low</option>
<option>Normal</option>
<option>High</option>
<option>Force</option>
</select>
<span class="help-inline">
<i class="icon-question-sign" title="Priority to use when sending episodes that aired within the last 7 days to SABnzbd"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Test</label>
<div class="controls">
<input type="button" value="Test" class="btn btn-inverse" />
<span class="help-inline">
<i class="icon-question-sign" title="Test SABnzbd settings"></i>
</span>
</div>
</div>
</fieldset>
<fieldset>
<legend>Blackhole</legend>
<div class="control-group">
<label class="control-label">Blackhole Directory</label>
<div class="controls">
<input type="text" name="blackholeDirectory" class="x-path" />
<span class="help-inline">
<i class="icon-question-sign" title="The directory where your download client will pickup .nzb files"></i>
</span>
</div>
</div>
</fieldset>
<fieldset>
<legend>Pneumatic</legend>
<div class="control-group">
<label class="control-label">Nzb Directory</label>
<div class="controls">
<input type="text" name="pneumaticDirectory" class="x-path" />
<span class="help-inline">
<i class="icon-question-sign" title="Directory to save NZBs for Pneumatic<br/>must be accessible from XBMC"></i>
</span>
</div>
</div>
</fieldset>
<fieldset>
<legend>NZBGet</legend>
<div class="control-group">
<label class="control-label">Host</label>
<div class="controls">
<input type="text" name="nzbgetHost" />
<span class="help-inline">
<i class="icon-question-sign" title="Hostname or IP Address running NZBGet"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Port</label>
<div class="controls">
<input type="text" name="nzbgetPort" />
<span class="help-inline">
<i class="icon-question-sign" title="Port for the NZBGet Web Interface"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">API Key</label>
<div class="controls">
<input type="text" name="nzbgetApiKey" />
<span class="help-inline">
<i class="icon-question-sign" title="API Key for NZBGet<br/>Found in Config -> General"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Username</label>
<div class="controls">
<input type="text" name="nzbgetUsername" />
<span class="help-inline">
<i class="icon-question-sign" title="Username for the NZBGet web interface"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Password</label>
<div class="controls">
<input type="password" name="nzbgetPassword" />
<span class="help-inline">
<i class="icon-question-sign" title="Password for the NZBGet web interface"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">TV Category</label>
<div class="controls">
<input type="text" name="nzbgetTvCategory" />
<span class="help-inline">
<i class="icon-question-sign" title="Category to use when sending NZBs to NZBGet"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Backlog Priority</label>
<div class="controls">
<select name="nzbgetBacklogTvPriority">
<option>Default</option>
<option>Paused</option>
<option>Low</option>
<option>Normal</option>
<option>High</option>
<option>Force</option>
</select>
<span class="help-inline">
<i class="icon-question-sign" title="Priority to use when sending episodes older than 7 days to NZBGet"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Recent Priority</label>
<div class="controls">
<select name="nzbgetRecentTvPriority">
<option>Default</option>
<option>Paused</option>
<option>Low</option>
<option>Normal</option>
<option>High</option>
<option>Force</option>
</select>
<span class="help-inline">
<i class="icon-question-sign" title="Priority to use when sending episodes that aired within the last 7 days to NZBGet"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Test</label>
<div class="controls">
<input type="button" value="Test" class="btn btn-inverse" />
<span class="help-inline">
<i class="icon-question-sign" title="Test NZBGet settings"></i>
</span>
</div>
</div>
</fieldset>

View file

@ -0,0 +1,25 @@
'use strict';
define([
'app', 'Settings/SettingsModel'
], function () {
NzbDrone.Settings.DownloadClient.DownloadClientView = Backbone.Marionette.ItemView.extend({
template: 'Settings/DownloadClient/DownloadClientTemplate',
className: 'form-horizontal',
ui: {
switch: '.switch',
tooltip: '[class^="help-inline"] i',
pathInput: '.x-path'
},
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
this.ui.switch.bootstrapSwitch();
this.ui.tooltip.tooltip({ placement: 'right', html: true });
this.ui.pathInput.autoComplete('/directories');
}
});
});

View file

@ -0,0 +1,3 @@
<div>
Indexer settings will go here
</div>

View file

@ -0,0 +1,15 @@
'use strict';
define([
'app', 'Settings/SettingsModel'
], function () {
NzbDrone.Settings.Indexers.IndexersView = Backbone.Marionette.ItemView.extend({
template: 'Settings/Indexers/IndexersTemplate',
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
}
});
});

View file

@ -0,0 +1,40 @@
<fieldset>
<legend>General</legend>
<div class="control-group">
<label class="control-label">Backlog Searching</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="enableBacklogSearching" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Should NzbDrone try to download missing episodes automatically?"></i>
<i class="icon-exclamation-sign danger" title="Enabling backlog searching can use a lot of bandwidth and is not
recommended for users with block usenet accounts or bandwidth restrictions."></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Ignore Deleted Episodes</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="autoIgnorePreviouslyDownloadedEpisodes" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Episodes deleted from disk are automatically ignored in NzbDrone"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Nzb Restrictions</label>
<div class="controls">
<textarea rows="3" name="nzbRestrictions" class="nzb-restrictions"></textarea>
<span class="help-inline">
<i class="icon-question-sign" title="White list or black list nzbs based on these rules<br/>White list: +:LoL<br/>Black list: -:French"></i>
</span>
<span class="text-area-help">Newline-delimited set of rules in the form of +|-:</span>
</div>
</div>
</fieldset>

View file

@ -0,0 +1,23 @@
'use strict';
define([
'app', 'Settings/SettingsModel'
], function () {
NzbDrone.Settings.Misc.MiscView = Backbone.Marionette.ItemView.extend({
template: 'Settings/Misc/MiscTemplate',
className: 'form-horizontal',
ui: {
switch: '.switch',
tooltip: '[class^="help-inline"] i'
},
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
this.ui.switch.bootstrapSwitch();
this.ui.tooltip.tooltip({ placement: 'right', html: true });
}
});
});

View file

@ -0,0 +1,159 @@
<fieldset>
<legend>Episode Naming</legend>
<div class="control-group">
<label class="control-label">Use Scene Name</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="sortingUseSceneName" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Use the scene name, ignoring all other naming settings"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Series Name</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="sortingIncludeSeriesName" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Should filenames contain the series name when renamed?"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Episode Name</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="sortingIncludeEpisodeTitle" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Should filenames contain the episode name when renamed?"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Replace Spaces</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="sortingReplaceSpaces" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Do you want to replace spaces in the filename with periods?"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Append Quality</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="sortingAppendQuality" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Should filenames have the quality appended to the end?"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Use Scene Folders</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="useSeasonFolder" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Should files be stored in season folders by default? (Applied only when a series is added)"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Season Folder Format</label>
<div class="controls">
<input type="text" placeholder="Season %s" name="sortingSeasonFolderFormat" />
<span class="help-inline">
<i class="icon-question-sign" title="How should season folders be named? (Use %0s to pad to two digits)"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Separator Style</label>
<div class="controls">
<select class="inputClass x-backlog-setting" name="sortingSeparatorStyle">
<option value="0">Dash</option>
<option value="1">Space</option>
<option value="2">Period</option>
</select>
<span class="help-inline">
<i class="icon-question-sign" title="How should NzbDrone separate sections of the filename?"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Numbering Style</label>
<div class="controls">
<select class="inputClass x-backlog-setting" name="sortingNumberStyle">
<option value="0">1x05</option>
<option value="1">01x05</option>
<option value="2">S01E05</option>
<option value="3">s01e05</option>
</select>
<span class="help-inline">
<i class="icon-question-sign" title="What numbering style do you want?"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Multi-Episode Style</label>
<div class="controls">
<select class="inputClass x-backlog-setting" name="sortingMultiEpisodeStyle">
<option value="0">Extend</option>
<option value="1">Duplicate</option>
<option value="2">Repeat</option>
<option value="3">Scene</option>
</select>
<span class="help-inline">
<i class="icon-question-sign" title="How will multi-episode files be named?"></i>
</span>
</div>
</div>
</fieldset>
<fieldset>
<legend>Metadata</legend>
<div class="control-group">
<label class="control-label">XBMC</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="metadataXbmcEnabled" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Enable creating metadata for XBMC"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Use Banners</label>
<div class="controls">
<div class="switch">
<input type="checkbox" name="metadataUseBanners" />
</div>
<span class="help-inline-checkbox">
<i class="icon-question-sign" title="Use banners instead of posters?"></i>
</span>
</div>
</div>
</fieldset>

View file

@ -0,0 +1,27 @@
'use strict';
define([
'app', 'Settings/SettingsModel'
], function () {
NzbDrone.Settings.Naming.NamingView = Backbone.Marionette.ItemView.extend({
template: 'Settings/Naming/NamingTemplate',
className: 'form-horizontal',
ui: {
switch: '.switch',
tooltip: '[class^="help-inline"] i'
},
initialize: function(){
//Listen to save event
},
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
this.ui.switch.bootstrapSwitch();
this.ui.tooltip.tooltip({ placement: 'right' });
}
});
});

View file

@ -0,0 +1,3 @@
<div>
Notification settings will go here
</div>

View file

@ -0,0 +1,15 @@
'use strict';
define([
'app', 'Settings/SettingsModel'
], function () {
NzbDrone.Settings.Notifications.NotificationsView = Backbone.Marionette.ItemView.extend({
template: 'Settings/Notifications/NotificationsTemplate',
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
}
});
});

View file

@ -0,0 +1,54 @@
<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="control-group">
<label class="control-label">Name</label>
<div class="controls">
<input type="text" name="name">
<span class="help-inline">
<i class="icon-question-sign" title="The name for this quality profile"></i>
</span>
</div>
</div>
<div class="control-group">
<label class="control-label">Cutoff</label>
<div class="controls">
<select class="x-cutoff" name="cutoff">
{{#each allowed}}
<option value="{{id}}">{{name}}</option>
{{/each}}
</select>
<span class="help-inline">
<i class="icon-question-sign" title="Once this quality is reached NzbDrone will no longer download episodes"></i>
</span>
</div>
</div>
<!--Todo: Why is a null allowed being treated as a true?-->
{{#each qualities}}
<div class="control-group">
<label class="control-label">{{name}}</label>
<div class="controls">
<div class="switch" data-on-label="Yes" data-off-label="No">
<input type="checkbox" name="allowed" />
</div>
</div>
</div>
{{/each}}
</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>

View file

@ -0,0 +1,38 @@
'use strict';
define(['app', 'Quality/QualityProfileModel'], function () {
NzbDrone.Settings.Quality.Profile.EditQualityProfileView = Backbone.Marionette.ItemView.extend({
template: 'Settings/Quality/Profile/EditQualityProfileTemplate',
tagName: 'div',
className: "modal",
ui: {
switch: '.switch'
},
events: {
'click .x-save': 'saveQualityProfile',
//'click .x-remove': 'removeSeries'
},
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
this.ui.switch.bootstrapSwitch();
},
saveQualityProfile: function () {
//Todo: Make sure model is updated with Allowed, Cutoff, Name
this.model.save();
this.trigger('saved');
this.$el.parent().modal('hide');
},
// removeSeries: function () {
// var view = new NzbDrone.Series.Delete.DeleteSeriesView({ model: this.model });
// NzbDrone.modalRegion.show(view);
// }
});
});

View file

@ -0,0 +1,14 @@
<fieldset>
<legend>Quality Profiles</legend>
<table class="table table-hover">
<thead>
<tr>
<th>Name</th>
<th>Allowed</th>
<th>Cutoff</th>
<th>Controls</th>
</tr>
</thead>
<tbody></tbody>
</table>
</fieldset>

View file

@ -0,0 +1,21 @@
'use strict';
define(['app', 'Settings/Quality/Profile/QualityProfileView'], function (app) {
NzbDrone.Settings.Quality.Profile.QualityProfileCollectionView = Backbone.Marionette.CompositeView.extend({
itemView: NzbDrone.Settings.Quality.Profile.QualityProfileView,
itemViewContainer: 'tbody',
template: 'Settings/Quality/Profile/QualityProfileCollectionTemplate',
initialize: function (options) {
},
ui:{
},
onCompositeCollectionRendered: function()
{
}
});
});

View file

@ -0,0 +1,11 @@
<td name="name"></td>
<td>
{{#each allowed}}
{{name}} |
{{/each}}
</td>
<td name="cutoffName"></td>
<td>
<i class="icon-cog x-edit" title="Edit Series"></i>
| Delete
</td>

View file

@ -0,0 +1,45 @@
'use strict';
define([
'app',
'Quality/QualityProfileCollection',
'Settings/Quality/Profile/EditQualityProfileView'
], function () {
NzbDrone.Settings.Quality.Profile.QualityProfileView = Backbone.Marionette.ItemView.extend({
template: 'Settings/Quality/Profile/QualityProfileTemplate',
tagName: 'tr',
ui: {
'progressbar': '.progress .bar'
},
events: {
'click .x-edit': 'editSeries',
'click .x-remove': 'removeSeries'
},
initialize: function () {
},
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
},
editSeries: function () {
var view = new NzbDrone.Settings.Quality.Profile.EditQualityProfileView({ model: this.model});
NzbDrone.vent.trigger(NzbDrone.Events.OpenModalDialog, {
view: view
});
},
removeSeries: function () {
var view = new NzbDrone.Series.Delete.DeleteSeriesView({ model: this.model });
NzbDrone.vent.trigger(NzbDrone.Events.OpenModalDialog, {
view: view
});
}
});
});

View file

@ -0,0 +1,41 @@
define([
'app',
'Quality/QualityProfileCollection',
'Quality/QualitySizeCollection',
'Settings/Quality/QualityView',
'Settings/Quality/Profile/QualityProfileCollectionView',
'Settings/Quality/Size/QualitySizeCollectionView'
],
function (app, qualityProfileCollection) {
NzbDrone.Settings.Quality.QualityLayout = Backbone.Marionette.Layout.extend({
template: 'Settings/Quality/QualityLayoutTemplate',
regions: {
qualityStandard: '#quality-standard',
qualityProfile: '#quality-profile',
qualitySize: '#quality-size'
},
ui: {
},
events: {
},
initialize: function (options) {
this.settings = options.settings;
qualityProfileCollection.fetch();
this.qualitySizeCollection = new NzbDrone.Quality.QualitySizeCollection();
this.qualitySizeCollection.fetch();
},
onRender: function () {
this.qualityStandard.show(new NzbDrone.Settings.Quality.QualityView({model: this.settings, qualityProfiles: qualityProfileCollection}));
this.qualityProfile.show(new NzbDrone.Settings.Quality.Profile.QualityProfileCollectionView({collection: qualityProfileCollection}));
this.qualitySize.show(new NzbDrone.Settings.Quality.Size.QualitySizeCollectionView({collection: this.qualitySizeCollection}));
}
});
});

View file

@ -0,0 +1,9 @@
<div class="row">
<div class="span12" id="quality-standard"></div>
</div>
<div class="row">
<div class="span12" id="quality-profile"></div>
</div>
<div class="row">
<div class="span12" id="quality-size"></div>
</div>

View file

@ -0,0 +1,14 @@

<div class="control-group">
<label class="control-label">Default Quality Profile</label>
<div class="controls">
<select class="x-quality-profile" name="qualityProfileId">
{{#each qualityProfiles.models}}
<option value="{{id}}">{{attributes.name}}</option>
{{/each}}
</select>
<span class="help-inline">
<i class="icon-question-sign" title="The default quality to use when adding series to NzbDrone "></i>
</span>
</div>
</div>

View file

@ -0,0 +1,21 @@
'use strict';
define([
'app', 'Settings/SettingsModel'
], function () {
NzbDrone.Settings.Quality.QualityView = Backbone.Marionette.ItemView.extend({
template: 'Settings/Quality/QualityTemplate',
className: 'form-horizontal',
initialize: function(options) {
this.qualityProfileCollection = options.qualityProfiles;
this.model.set({ qualityProfiles: this.qualityProfileCollection });
},
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
}
});
});

View file

@ -0,0 +1,4 @@
<fieldset>
<legend>Quality Size Limits</legend>
<div id="quality-sizes-container"></div>
</fieldset>

View file

@ -0,0 +1,22 @@
'use strict';
define(['app', 'Settings/Quality/Size/QualitySizeView'], function (app) {
NzbDrone.Settings.Quality.Size.QualitySizeCollectionView = Backbone.Marionette.CompositeView.extend({
itemView: NzbDrone.Settings.Quality.Size.QualitySizeView,
itemViewContainer: '#quality-sizes-container',
template: 'Settings/Quality/Size/QualitySizeCollectionTemplate',
initialize: function () {
var test = 1;
},
ui:{
},
onCompositeCollectionRendered: function()
{
}
});
});

View file

@ -0,0 +1,5 @@
<b>{{name}}</b>
<div class="quality-slider-container">
<input type="text" class="span4 slider" />
</div>
30 minute size: <span name="thirtyMinuteSize" class="thirty-minute-size"></span>MB | 60 minute size: <span name="sixtyMinuteSize" class="sixty-minute-size"></span>MB

View file

@ -0,0 +1,49 @@
'use strict';
define([
'app',
'Quality/QualitySizeCollection'
], function () {
NzbDrone.Settings.Quality.Size.QualitySizeView = Backbone.Marionette.ItemView.extend({
template: 'Settings/Quality/Size/QualitySizeTemplate',
className: 'quality-size-item',
ui: {
slider: '.slider',
thirtyMinuteSize: '.thirty-minute-size',
sixtyMinuteSize: '.sixty-minute-size'
},
events: {
'slide .slider': 'slide'
},
initialize: function (options) {
this.qualityProfileCollection = options.qualityProfiles;
},
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
var self = this;
this.ui.slider.slider({
min: 0,
max: 200,
step: 1,
value: self.model.get('maxSize'),
tooltip: 'hide'
});
},
slide: function (e) {
var newSize = e.value;
this.model.set({ maxSize: newSize, thirtyMinuteSize: newSize * 30, sixtyMinuteSize: newSize * 60 });
this.ui.thirtyMinuteSize.html(newSize * 30);
this.ui.sixtyMinuteSize.html(newSize * 60);
}
});
});

View file

@ -0,0 +1,161 @@
define([
'app',
'Settings/Naming/NamingView',
'Settings/Quality/QualityLayout',
'Settings/Indexers/IndexersView',
'Settings/DownloadClient/DownloadClientView',
'Settings/Notifications/NotificationsView',
'Settings/System/SystemView',
'Settings/Misc/MiscView'
],
function (app) {
NzbDrone.Settings.SettingsLayout = Backbone.Marionette.Layout.extend({
template: 'Settings/SettingsLayoutTemplate',
regions: {
naming: '#naming',
quality: '#quality',
indexers: '#indexers',
downloadClient: '#download-client',
notifications: '#notifications',
system: '#system',
misc: '#misc'
},
ui: {
namingTab: '.x-naming-tab',
qualityTab: '.x-quality-tab',
indexersTab: '.x-indexers-tab',
downloadClientTab: '.x-download-client-tab',
notificationsTab: '.x-notifications-tab',
systemTab: '.x-system-tab',
miscTab: '.x-misc-tab'
},
events: {
'click .x-naming-tab': 'showNaming',
'click .x-quality-tab': 'showQuality',
'click .x-indexers-tab': 'showIndexers',
'click .x-download-client-tab': 'showDownloadClient',
'click .x-notifications-tab': 'showNotifications',
'click .x-system-tab': 'showSystem',
'click .x-misc-tab': 'showMisc',
'click .x-save-settings': 'save'
},
showNaming: function (e) {
if (e) {
e.preventDefault();
}
this.ui.namingTab.tab('show');
NzbDrone.Router.navigate('settings/naming');
},
showQuality: function (e) {
if (e) {
e.preventDefault();
}
this.ui.qualityTab.tab('show');
NzbDrone.Router.navigate('settings/quality');
},
showIndexers: function (e) {
if (e) {
e.preventDefault();
}
this.ui.indexersTab.tab('show');
NzbDrone.Router.navigate('settings/indexers');
},
showDownloadClient: function (e) {
if (e) {
e.preventDefault();
}
this.ui.downloadClientTab.tab('show');
NzbDrone.Router.navigate('settings/downloadclient');
},
showNotifications: function (e) {
if (e) {
e.preventDefault();
}
this.ui.notificationsTab.tab('show');
NzbDrone.Router.navigate('settings/notifications');
},
showSystem: function (e) {
if (e) {
e.preventDefault();
}
this.ui.systemTab.tab('show');
NzbDrone.Router.navigate('settings/system');
},
showMisc: function (e) {
if (e) {
e.preventDefault();
}
this.ui.miscTab.tab('show');
NzbDrone.Router.navigate('settings/misc');
},
initialize: function (context, action, query, settings) {
this.settings = settings;
if (action) {
this.action = action.toLowerCase();
}
if (query) {
this.query = query.toLowerCase();
}
},
onRender: function () {
this.naming.show(new NzbDrone.Settings.Naming.NamingView({model: this.settings}));
this.quality.show(new NzbDrone.Settings.Quality.QualityLayout({settings: this.settings}));
this.indexers.show(new NzbDrone.Settings.Indexers.IndexersView({model: this.settings}));
this.downloadClient.show(new NzbDrone.Settings.DownloadClient.DownloadClientView({model: this.settings}));
this.notifications.show(new NzbDrone.Settings.Notifications.NotificationsView({model: this.settings}));
this.system.show(new NzbDrone.Settings.System.SystemView({model: this.settings}));
this.misc.show(new NzbDrone.Settings.Misc.MiscView({model: this.settings}));
},
onShow: function () {
switch (this.action) {
case 'quality':
this.showQuality();
break;
case 'indexers':
this.showIndexers();
break;
case 'downloadclient':
this.showDownloadClient();
break;
case 'notifications':
this.showNotifications();
break;
case 'system':
this.showSystem();
break;
case 'misc':
this.showMisc();
break;
default:
this.showNaming();
}
},
save: function () {
this.settings.save();
}
});
});

View file

@ -0,0 +1,21 @@
<ul class="nav nav-tabs" id="myTab">
<li><a href="#naming" class="x-naming-tab">Naming</a></li>
<li><a href="#quality" class="x-quality-tab">Quality</a></li>
<li><a href="#indexers" class ="x-indexers-tab">Indexers</a></li>
<li><a href="#download-client" class ="x-download-client-tab">Download Client</a></li>
<li><a href="#notifications" class ="x-notifications-tab">Notifications</a></li>
<li><a href="#system" class ="x-system-tab">System</a></li>
<li><a href="#misc" class ="x-misc-tab">Misc</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane" id="naming">Naming Settings</div>
<div class="tab-pane" id="quality">Quality Settings</div>
<div class="tab-pane" id="indexers">Indexer Settings</div>
<div class="tab-pane" id="download-client">Download Client Settings</div>
<div class="tab-pane" id="notifications">Notification Settings</div>
<div class="tab-pane" id="system">System Settings</div>
<div class="tab-pane" id="misc">Misc Settings</div>
</div>
<button class="btn btn-primary x-save-settings">Save</button>

View file

@ -0,0 +1,5 @@
define(['app'], function (app) {
NzbDrone.Settings.SettingsModel = Backbone.Model.extend({
url: NzbDrone.Constants.ApiRoot + '/settings'
});
});

View file

@ -0,0 +1,3 @@
<div>
System settings will go here
</div>

View file

@ -0,0 +1,15 @@
'use strict';
define([
'app', 'Settings/SettingsModel'
], function () {
NzbDrone.Settings.System.SystemView = Backbone.Marionette.ItemView.extend({
template: 'Settings/System/SystemTemplate',
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
}
});
});