rootfolder is linked to add series.

This commit is contained in:
kay.one 2013-01-26 18:14:42 -08:00
parent bf50c5989a
commit 1024e0f83d
10 changed files with 102 additions and 52 deletions

View File

@ -182,6 +182,7 @@
<ItemGroup>
<Compile Include="App_Start\DataTablesMvc.cs" />
<Compile Include="App_Start\MiniProfiler.cs" />
<Content Include="_backboneApp\AddSeries\AddNewSeries\SearchResultView.js" />
<Content Include="_backboneApp\AddSeries\RootDir\RootDirTemplate.html" />
<Content Include="_backboneApp\AddSeries\RootDir\RootDirView.js" />
<Content Include="_backboneApp\AddSeries\RootDir\RootDirItemTemplate.html" />
@ -396,7 +397,7 @@
<Content Include="_backboneApp\JsLibraries\handlebars.js" />
<Content Include="_backboneApp\JsLibraries\jquery.js" />
<Content Include="_backboneApp\JsLibraries\jquery-ui-1.9.0.js" />
<Content Include="_backboneApp\JsLibraries\marionette.viewswapper.js" />
<Content Include="_backboneApp\JsLibraries\backbone.marionette.viewswapper.js" />
<Content Include="_backboneApp\JsLibraries\sugar.js" />
<Content Include="_backboneApp\JsLibraries\underscore.js" />
<Content Include="Views\System\Index.cshtml" />

View File

@ -1,26 +1,5 @@
/// <reference path="../../app.js" />
/// <reference path="../SearchResultModel.js" />
/// <reference path="../SearchResultCollection.js" />
NzbDrone.AddSeries.SearchItemView = Backbone.Marionette.ItemView.extend({
template: "AddSeries/AddNewSeries/SearchResultTemplate",
className: 'search-item-view well',
onRender: function () {
NzbDrone.ModelBinder.bind(this.model, this.el);
}
});
NzbDrone.AddSeries.SearchResultView = Backbone.Marionette.CollectionView.extend({
itemView: NzbDrone.AddSeries.SearchItemView,
initialize: function () {
this.listenTo(this.collection, 'reset', this.render);
},
});
/// <reference path="SearchResultView.js" />
NzbDrone.AddSeries.AddNewSeriesView = Backbone.Marionette.Layout.extend({
template: "AddSeries/AddNewSeries/AddNewSeriesTemplate",
@ -36,6 +15,13 @@ NzbDrone.AddSeries.AddNewSeriesView = Backbone.Marionette.Layout.extend({
collection: new NzbDrone.AddSeries.SearchResultCollection(),
initialize: function (rootFolders) {
if (rootFolders === undefined) {
throw "rootFolder arg is required.";
}
this.rootFoldersCollection = rootFolders;
},
onRender: function () {
console.log('binding auto complete');
@ -62,13 +48,22 @@ NzbDrone.AddSeries.AddNewSeriesView = Backbone.Marionette.Layout.extend({
context.collection.fetch({
data: $.param({ term: term }),
success: function () {
context.searchResult.show(context.resultView);
success: function (model) {
context.resultUpdated(model, context);
}
});
} else {
context.searchResult.close();
}
},
resultUpdated: function (options, context) {
_.each(options.models, function (model) {
model.set('rootFolders', context.rootFoldersCollection.rootFolders.models);
});
context.searchResult.show(context.resultView);
}
});

View File

@ -1,5 +1,22 @@
<div class="result-item row">
<div>
<a href="http://thetvdb.com/?tab=series&id={{id}}" target="_blank" class="icon-info-sign"></a>{{seriesName}} {{seriesYear}}
</div>
<div class="accordion-heading">
<a href="http://thetvdb.com/?tab=series&id={{id}}" target="_blank" class="icon-info-sign pull-left"></a>
<a class="accordion-toggle" data-toggle="collapse" href="#{{id}}">{{seriesName}} {{seriesYear}}</a>
</div>
<div id="{{id}}" class="accordion-body collapse">
<div class="accordion-inner">
<select class="root-dir-input span7" name="rootFolders">
{{#each rootFolders}}
<option value="{{id}}">{{attributes.path}}</option>
{{/each}}
</select>
<select class="quality-profile-input span2">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<div class="btn btn-success pull-right icon-plus">
</div>
</div>
<div name="overview"></div>
</div>

View File

@ -0,0 +1,25 @@
/// <reference path="../../app.js" />
/// <reference path="../SearchResultModel.js" />
/// <reference path="../SearchResultCollection.js" />
NzbDrone.AddSeries.SearchItemView = Backbone.Marionette.ItemView.extend({
template: "AddSeries/AddNewSeries/SearchResultTemplate",
className: 'search-item accordion-group',
onRender: function () {
this.listenTo(this.model, 'change', this.render);
}
});
NzbDrone.AddSeries.SearchResultView = Backbone.Marionette.CollectionView.extend({
itemView: NzbDrone.AddSeries.SearchItemView,
className: 'accordion',
initialize: function () {
this.listenTo(this.collection, 'reset', this.render);
},
});

View File

@ -28,7 +28,7 @@ NzbDrone.AddSeries.AddSeriesLayout = Backbone.Marionette.Layout.extend({
$(this).tab('show');
});
this.addNew.show(new NzbDrone.AddSeries.AddNewSeriesView());
this.addNew.show(new NzbDrone.AddSeries.AddNewSeriesView({ rootFolders: this.rootFolderCollection }));
//this.importExisting.show(new NzbDrone.ImportExistingView());
this.rootFolders.show(new NzbDrone.AddSeries.RootDirView({ collection: this.rootFolderCollection }));

View File

@ -8,7 +8,7 @@
}
.nz-input-large *[class*='icon-'] {
font-size: 30px;
font-size: 28px;
height: 30px;
width: 40px;
padding-top: 14px;
@ -23,20 +23,29 @@
.result-list .well:hover {
background-color: #fcf8e3;
cursor: pointer;
}
.result-item {
padding-left: 20px;
}
.result-item *[class*='icon-'] {
padding-right: 10px;
.search-item .accordion-heading *[class*='icon-'] {
padding-right: 5px;
padding-top: 10px;
padding-left: 10px;
}
.result-list .result-item a {
font-size: 20px;
}
.result-list .result-item a:hover {
text-decoration: none;
}
.search-item a:hover {
text-decoration: none;
}
.search-item a {
color: #343434;
}
.search-item select {
font-size: 16px;
}

View File

@ -1,4 +1,6 @@
_.extend(Marionette.TemplateCache.prototype, {
/// <reference path="handlebars.js" />
_.extend(Marionette.TemplateCache.prototype, {
loadTemplate: function (templateId) {
@ -24,9 +26,9 @@
}
});
_.extend(Marionette.TemplateCache.prototype, {
_.extend(Marionette.View.prototype, {
compileTemplate: function (rawTemplate) {
return Handlebars.compile(rawTemplate);
}
});

View File

@ -47,22 +47,20 @@ window.onerror = function (msg, url, line) {
}
var suppressErrorAlert = false;
// If you return true, then error alerts (like in older versions of
// Internet Explorer) will be suppressed.
return suppressErrorAlert;
};
$(document).ajaxError(function (event, XMLHttpRequest, ajaxOptionsa) {
$(document).ajaxError(function (event, xmlHttpRequest, ajaxOptions) {
if (xmlHttpRequest.status >= 200 && xmlHttpRequest.status <= 300) return;
var errorView = NzbDrone.Shared.ErrorView.instance;
var model = new NzbDrone.Shared.ErrorModel();
model.set('title', ajaxOptionsa.url + " : " + XMLHttpRequest.statusText);
model.set('message', XMLHttpRequest.responseText);
model.set('title', ajaxOptions.url + " : " + xmlHttpRequest.statusText);
model.set('message', xmlHttpRequest.responseText);
errorView.collection.add(model);
var suppressErrorAlert = false;
// If you return true, then error alerts (like in older versions of
// Internet Explorer) will be suppressed.
return suppressErrorAlert;
});

View File

@ -8,6 +8,7 @@
/// <reference path="JsLibraries/backbone.shortcuts.js" />
/// <reference path="JsLibraries/backbone.marionette.js" />
/// <reference path="JsLibraries/backbone.marionette.extend.js" />
/// <reference path="JsLibraries/backbone.marionette.viewswapper.js" />
/// <reference path="JsLibraries/backbone.modelbinder.js" />
/// <reference path="JsLibraries/bootstrap.js" />
/// <reference path="nzbdrone.logging.js" />
@ -20,9 +21,11 @@ NzbDrone = new Backbone.Marionette.Application();
NzbDrone.AddSeries = NzbDrone.module("AddSeries");
NzbDrone.Shared = NzbDrone.module("Shared");
/*
_.templateSettings = {
interpolate: /\{\{([\s\S]+?)\}\}/g
};
*/
NzbDrone.ModelBinder = new Backbone.ModelBinder();