Bootstrap loading profiles via ajax

pull/4/head
Mark McDowall 12 years ago
parent 44c7a58595
commit 0ecbb30345

@ -4,6 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using AutoMapper; using AutoMapper;
using NzbDrone.Api.QualityProfiles; using NzbDrone.Api.QualityProfiles;
using NzbDrone.Api.Resolvers;
using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Repository.Quality;
namespace NzbDrone.Api namespace NzbDrone.Api
@ -12,6 +13,12 @@ namespace NzbDrone.Api
{ {
public static void Initialize() public static void Initialize()
{ {
//Mapper.CreateMap<QualityTypes, Int32>()
// .ForMember(dest => dest, opt => opt.ResolveUsing<QualityTypesToIntResolver>());
Mapper.CreateMap<Int32, QualityTypes>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src));
Mapper.CreateMap<QualityProfile, QualityProfileModel>() Mapper.CreateMap<QualityProfile, QualityProfileModel>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.QualityProfileId)); .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.QualityProfileId));

@ -103,6 +103,7 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="QualityProfiles\QualityProfileModel.cs" /> <Compile Include="QualityProfiles\QualityProfileModel.cs" />
<Compile Include="QualityProfiles\QualityProfileService.cs" /> <Compile Include="QualityProfiles\QualityProfileService.cs" />
<Compile Include="Resolvers\QualityTypesToIntResolver.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />

@ -10,7 +10,7 @@ namespace NzbDrone.Api.QualityProfiles
{ {
public Int32 Id { get; set; } public Int32 Id { get; set; }
public String Name { get; set; } public String Name { get; set; }
public QualityTypes Cutoff { get; set; } public Int32 Cutoff { get; set; }
public List<QualityTypes> Allowed { get; set; } public List<Int32> Allowed { get; set; }
} }
} }

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AutoMapper;
using NzbDrone.Core.Repository.Quality;
namespace NzbDrone.Api.Resolvers
{
public class QualityTypesToIntResolver : ValueResolver<QualityTypes, Int32>
{
protected override int ResolveCore(QualityTypes source)
{
return source.Id;
}
}
}

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using NLog; using NLog;
using Newtonsoft.Json; using Newtonsoft.Json;
using Ninject;
using NzbDrone.Common; using NzbDrone.Common;
using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Core;
using NzbDrone.Core.Repository; using NzbDrone.Core.Repository;
@ -17,6 +18,7 @@ namespace NzbDrone.Core.Providers
private readonly HttpProvider _httpProvider; private readonly HttpProvider _httpProvider;
private readonly ConfigProvider _configProvider; private readonly ConfigProvider _configProvider;
[Inject]
public SceneMappingProvider(IDatabase database, HttpProvider httpProvider, ConfigProvider configProvider) public SceneMappingProvider(IDatabase database, HttpProvider httpProvider, ConfigProvider configProvider)
{ {
_database = database; _database = database;

@ -330,7 +330,7 @@
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }

@ -388,13 +388,12 @@
<Content Include="Scripts\backbone.js" /> <Content Include="Scripts\backbone.js" />
<Content Include="Scripts\backbone.marionette.min.js" /> <Content Include="Scripts\backbone.marionette.min.js" />
<Content Include="Scripts\backbone.min.js" /> <Content Include="Scripts\backbone.min.js" />
<Content Include="Scripts\backbone\app.js" /> <Content Include="Scripts\backbone\apps\qualityProfileApp.js" />
<Content Include="Scripts\backbone\bootstrapper.js" /> <Content Include="Scripts\backbone\bootstrapper.js" />
<Content Include="Scripts\backbone\constants.js" /> <Content Include="Scripts\backbone\constants.js" />
<Content Include="Scripts\backbone\controller.js" /> <Content Include="Scripts\backbone\controller.js" />
<Content Include="Scripts\backbone\models\profileCollection.js" /> <Content Include="Scripts\backbone\models\qualityProfileCollection.js" />
<Content Include="Scripts\backbone\models\profileModel.js" /> <Content Include="Scripts\backbone\models\qualityProfile.js" />
<Content Include="Scripts\backbone\router.js" />
<Content Include="Scripts\backbone\utils.js" /> <Content Include="Scripts\backbone\utils.js" />
<Content Include="Scripts\backbone\views\qualityProfiles.js" /> <Content Include="Scripts\backbone\views\qualityProfiles.js" />
<Content Include="Scripts\conditional-validation.js" /> <Content Include="Scripts\conditional-validation.js" />

@ -1,27 +0,0 @@
NzbDrone = {};
NzbDrone.Views = {};
NzbDrone.Models = {};
NzbDrone.Collections = {};
NzbDrone.App = new Backbone.Marionette.Application();
// Setup default application views
NzbDrone.App.addInitializer(function () {
NzbDrone.App.addRegions({
main: '#main-region'
});
var layout = new NzbDrone.Views.AppLayout();
NzbDrone.App.Layout = layout;
NzbDrone.App.main.show(layout);
layout.header.show(new NzbDrone.Views.HeaderView());
});
NzbDrone.App.addInitializer(function () {
new NzbDrone.AppRouter();
Backbone.history.start();
});

@ -0,0 +1,19 @@
QualityProfileApp = {};
QualityProfileApp.Views = {};
QualityProfileApp.Models = {};
QualityProfileApp.Collections = {};
QualityProfileApp.App = new Backbone.Marionette.Application();
// Setup default application views
QualityProfileApp.App.addInitializer(function () {
QualityProfileApp.App.addRegions({
mainRegion: '#profiles'
});
var qualityProfiles = new QualityProfileCollectionView();
QualityProfileApp.App.mainRegion.show(qualityProfiles);
});

@ -1,11 +1,6 @@
NzbDrone.Constants = { QualityProfileApp.Constants = {
Templates: { Templates: {
AppLayout: '#AppLayout', QualityProfileCollection: '#QualityProfileCollectionTemplate',
QualityProfilesView: '#QualityProfilesView', QualityProfile: '#QualityProfileTemplate'
QualityProfileView: '#QualityProfileView'
}, },
Events: {
MenuItemSelected: 'MenuItemSelected'
}
}; };

@ -1,18 +0,0 @@
window.ProfileCollection = Backbone.Collection.extend({
model: Profile,
url: '/api/qualityprofiles',
search: function (searchTerm, options) {
var self = this;
this.fetch({
success: function () {
if (options.success) {
options.success();
}
}
});
}
});

@ -1,4 +1,4 @@
window.Profile = Backbone.Model.extend({ window.QualityProfile = Backbone.Model.extend({
urlRoot: '/api/qualityprofiles', urlRoot: '/api/qualityprofiles',

@ -0,0 +1,4 @@
window.QualityProfileCollection = Backbone.Collection.extend({
model: QualityProfile,
url: '/api/qualityprofiles'
});

@ -1,16 +0,0 @@
(function (nzbDrone, backbone) {
nzbDrone.AppRouter = backbone.Marionette.AppRouter.extend({
controller: new nzbDrone.AppController(),
appRoutes: {
'': 'home',
'wines': 'list',
'wines/page/:page': 'list',
'wines/add': 'addWine',
'wines/:id': 'wineDetails',
'about': 'about',
'search/:searchTerm': 'handleSearch'
}
});
})(window.NzbDrone, window.Backbone);s

@ -1,37 +1,23 @@
window.QualityProfilesView = Backbone.View.extend({ QualityProfileView = Backbone.Marionette.ItemView.extend({
tagName: "div",
initialize: function () { className: "quality-profile",
this.render(); template: "#QualityProfileTemplate"
},
render: function () {
var profiles = this.model.models;
var len = profiles.length;
var startPos = (this.options.page - 1) * 8;
var endPos = Math.min(startPos + 8, len);
$(this.el).html('<ul class="thumbnails"></ul>');
for (var i = startPos; i < endPos; i++) {
$('.thumbnails', this.el).append(new QualityProfileView({ model: profiles[i] }).render().el);
}
return this;
}
}); });
window.QualityProfileView = Backbone.View.extend({ QualityProfileCollectionView = Backbone.Marionette.CompositeView.extend({
tagName: "div",
id: "quality-profile-collection",
itemView: QualityProfileView,
template: QualityProfileApp.Constants.Templates.QualityProfileCollection,
tagName: "li", //appendHtml: function (collectionView, itemView) {
// collectionView.$('#collection').append(itemView.el);
//},
initialize: function () { initialize: function () {
this.model.bind("change", this.render, this); _.bindAll(this, 'render');
this.model.bind("destroy", this.close, this); this.collection = new QualityProfileCollection();
}, this.collection.fetch();
this.collection.bind('reset', this.render);
render: function () {
$(this.el).html(this.template(this.model.toJSON()));
return this;
} }
}); });

@ -106,8 +106,7 @@
<p> <p>
</p> </p>
<a id="addNewznab" href="@Url.Action("AddNewznabProvider", "Settings")"> <a id="addNewznab" href="@Url.Action("AddNewznabProvider", "Settings")">
<img src="../../Content/Images/Plus.png" alt="Add Newznab Provider" width="20px" <img src="../../Content/Images/Plus.png" alt="Add Newznab Provider" width="20px" height="20px" />
height="20px" />
Add Newznab Provider</a> Add Newznab Provider</a>
<div id="newznabProviders"> <div id="newznabProviders">
@foreach (var provider in Model.NewznabDefinitions) @foreach (var provider in Model.NewznabDefinitions)

@ -27,10 +27,6 @@
</a> </a>
</div> </div>
<div id="profiles"> <div id="profiles">
@*@foreach (var item in (List<QualityProfile>)ViewData["Profiles"])
{
Html.RenderAction("GetQualityProfileView", item);
}*@
</div> </div>
</div> </div>
<h3> <h3>
@ -116,19 +112,25 @@
}); });
</script> </script>
@Html.IncludeScript("backbone/app.js") @Html.IncludeScript("backbone/apps/qualityProfileApp.js")
@Html.IncludeScript("backbone/controller.js")
@Html.IncludeScript("backbone/router.js")
@Html.IncludeScript("backbone/constants.js") @Html.IncludeScript("backbone/constants.js")
@Html.IncludeScript("backbone/utils.js") @Html.IncludeScript("backbone/models/qualityProfile.js")
@Html.IncludeScript("backbone/models/profileCollection.js") @Html.IncludeScript("backbone/models/qualityProfileCollection.js")
@Html.IncludeScript("backbone/models/profileModel.js")
@Html.IncludeScript("backbone/views/qualityProfiles.js") @Html.IncludeScript("backbone/views/qualityProfiles.js")
@*@Html.IncludeScript("backbone/bootstrapper.js")*@ @*@Html.IncludeScript("backbone/bootstrapper.js")*@
<script id="QualityProfileView" type="text/template"> <script id="QualityProfileTemplate" type="text/template">
<%= Name %> <%= Name %>
<%= Cutoff %> <%= Cutoff %>
<%= Allowed %> <%= Allowed %>
</script> </script>
<script id="QualityProfileCollectionTemplate" type="text/template">
</script>
<script>
$(document).ready(function () {
QualityProfileApp.App.start();
});
</script>
} }
Loading…
Cancel
Save