From 9bb383e2b86355fdac619b03224bfde4103ecbd9 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 4 Mar 2013 22:50:42 -0800 Subject: [PATCH] Removed virtuals from ConfigService. Settings UI taking shape. --- NzbDrone.Api/Settings/SettingsModule.cs | 12 +- NzbDrone.Backbone/Content/base.css | 32 +-- NzbDrone.Backbone/Content/bootstrapSwitch.css | 210 ++++++++++++++++ NzbDrone.Backbone/Content/form.css | 10 + NzbDrone.Backbone/Index.html | 5 +- .../JsLibraries/bootstrapSwitch.js | 238 ++++++++++++++++++ .../DownloadClient/DownloadClientView.js | 14 -- .../Settings/Indexers/IndexersView.js | 14 -- NzbDrone.Backbone/Settings/Misc/MiscView.js | 14 -- .../Settings/Naming/NamingTemplate.html | 108 +++++--- .../Settings/Naming/NamingView.js | 17 +- .../Notifications/NotificationsView.js | 14 -- .../Settings/Quality/QualityView.js | 14 -- NzbDrone.Backbone/Settings/SettingsLayout.js | 7 +- .../Settings/SettingsLayoutTemplate.html | 2 + .../Settings/System/SystemView.js | 14 -- .../ParserTests/ParserFixture.cs | 1 + NzbDrone.Core/Configuration/ConfigService.cs | 150 +++++------ 18 files changed, 654 insertions(+), 222 deletions(-) create mode 100644 NzbDrone.Backbone/Content/bootstrapSwitch.css create mode 100644 NzbDrone.Backbone/Content/form.css create mode 100644 NzbDrone.Backbone/JsLibraries/bootstrapSwitch.js diff --git a/NzbDrone.Api/Settings/SettingsModule.cs b/NzbDrone.Api/Settings/SettingsModule.cs index 847954105..f91cb14a5 100644 --- a/NzbDrone.Api/Settings/SettingsModule.cs +++ b/NzbDrone.Api/Settings/SettingsModule.cs @@ -9,13 +9,14 @@ namespace NzbDrone.Api.Settings { public class SettingsModule : NzbDroneApiModule { - private readonly ConfigService _configService; + private readonly IConfigService _configService; - public SettingsModule(ConfigService configService) + public SettingsModule(IConfigService configService) : base("/settings") { _configService = configService; Get["/"] = x => GetAllSettings(); + Post["/"] = x => SaveSettings(); } private Response GetAllSettings() @@ -27,5 +28,12 @@ namespace NzbDrone.Api.Settings return _configService.AllWithDefaults().AsResponse(); } + + private Response SaveSettings() + { + var request = Request.Body.FromJson>(); + + return request.AsResponse(); + } } } \ No newline at end of file diff --git a/NzbDrone.Backbone/Content/base.css b/NzbDrone.Backbone/Content/base.css index 3bd036646..a6d24da09 100644 --- a/NzbDrone.Backbone/Content/base.css +++ b/NzbDrone.Backbone/Content/base.css @@ -88,19 +88,19 @@ html { /* Todo: Should move this to somehting modal/form specific */ -label.checkbox { - font-size: 14px; - line-height: normal; - color: #595959; -} - -label, .form-horizontal input, .form-horizontal select { - font-size: 14px; - line-height: 14px; -} - - label.control-label { - font-size: 16px; - line-height: 16px; - font-weight: bold; - } +/*label.checkbox {*/ + /*font-size: 14px;*/ + /*line-height: normal;*/ + /*color: #595959;*/ +/*}*/ + +/*label, .form-horizontal input, .form-horizontal select {*/ + /*font-size: 14px;*/ + /*line-height: 14px;*/ +/*}*/ + + /*label.control-label {*/ + /*font-size: 16px;*/ + /*line-height: 16px;*/ + /*font-weight: bold;*/ + /*}*/ diff --git a/NzbDrone.Backbone/Content/bootstrapSwitch.css b/NzbDrone.Backbone/Content/bootstrapSwitch.css new file mode 100644 index 000000000..248358207 --- /dev/null +++ b/NzbDrone.Backbone/Content/bootstrapSwitch.css @@ -0,0 +1,210 @@ +/* ============================================================ + * bootstrapSwitch v1.2 by Larentis Mattia @spiritualGuru + * http://www.larentis.eu/switch/ + * ============================================================ + * Licensed under the Apache License, Version 2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * ============================================================ */ +/* line 18, ../sass/bootstrapSwitch.scss */ +.has-switch { + display: inline-block; + cursor: pointer; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + border: 1px solid; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + background: #e6e6e6; + position: relative; + text-align: left; + overflow: hidden; + line-height: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + min-width: 102px; +} +/* line 40, ../sass/bootstrapSwitch.scss */ +.has-switch.switch-mini { + min-width: 72px; +} +/* line 44, ../sass/bootstrapSwitch.scss */ +.has-switch.switch-small { + min-width: 81px; +} +/* line 48, ../sass/bootstrapSwitch.scss */ +.has-switch.switch-large { + min-width: 120px; +} +/* line 52, ../sass/bootstrapSwitch.scss */ +.has-switch.deactivate { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + cursor: default !important; +} +/* line 55, ../sass/bootstrapSwitch.scss */ +.has-switch.deactivate label, .has-switch.deactivate span { + cursor: default !important; +} +/* line 59, ../sass/bootstrapSwitch.scss */ +.has-switch > div { + display: inline-block; + width: 150%; + position: relative; + top: 0; +} +/* line 65, ../sass/bootstrapSwitch.scss */ +.has-switch > div.switch-animate { + -webkit-transition: left 0.5s; + -moz-transition: left 0.5s; + -o-transition: left 0.5s; + transition: left 0.5s; +} +/* line 68, ../sass/bootstrapSwitch.scss */ +.has-switch > div.switch-off { + left: -50%; +} +/* line 71, ../sass/bootstrapSwitch.scss */ +.has-switch > div.switch-on { + left: 0%; +} +/* line 75, ../sass/bootstrapSwitch.scss */ +.has-switch input[type=checkbox] { + display: none; +} +/* line 83, ../sass/bootstrapSwitch.scss */ +.has-switch span, .has-switch label { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; + position: relative; + display: inline-block; + height: 100%; + padding-bottom: 4px; + padding-top: 4px; + font-size: 14px; + line-height: 20px; +} +/* line 96, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-mini, .has-switch label.switch-mini { + padding-bottom: 4px; + padding-top: 4px; + font-size: 10px; + line-height: 9px; +} +/* line 103, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-small, .has-switch label.switch-small { + padding-bottom: 3px; + padding-top: 3px; + font-size: 12px; + line-height: 18px; +} +/* line 110, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-large, .has-switch label.switch-large { + padding-bottom: 9px; + padding-top: 9px; + font-size: 16px; + line-height: normal; +} +/* line 118, ../sass/bootstrapSwitch.scss */ +.has-switch label { + background: white; + margin-top: -1px; + margin-bottom: -1px; + z-index: 100; + width: 33.333333%; + border-left: 1px solid #e6e6e6; + border-right: 1px solid #e6e6e6; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(top, #ffffff, #e6e6e6); +} +/* line 130, ../sass/bootstrapSwitch.scss */ +.has-switch span { + color: white; + text-align: center; + z-index: 1; + width: 33.333333%; +} +/* line 136, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-left { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} +/* line 140, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-right { + color: black; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); + background-image: -webkit-linear-gradient(bottom, #ffffff, #e6e6e6); + background-image: -moz-linear-gradient(bottom, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(bottom, #ffffff, #e6e6e6); + background-image: linear-gradient(bottom, #ffffff, #e6e6e6); +} +/* line 147, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-primary, .has-switch span.switch-left { + color: white; + background: #0088cc; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #0088cc), color-stop(100%, #0055cc)); + background-image: -webkit-linear-gradient(bottom, #0088cc, #0055cc); + background-image: -moz-linear-gradient(bottom, #0088cc, #0055cc); + background-image: -o-linear-gradient(bottom, #0088cc, #0055cc); + background-image: linear-gradient(bottom, #0088cc, #0055cc); +} +/* line 152, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-info { + color: white; + background: #5bc0de; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #5bc0de), color-stop(100%, #2f96b4)); + background-image: -webkit-linear-gradient(bottom, #5bc0de, #2f96b4); + background-image: -moz-linear-gradient(bottom, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(bottom, #5bc0de, #2f96b4); + background-image: linear-gradient(bottom, #5bc0de, #2f96b4); +} +/* line 158, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-success { + color: white; + background: #62c462; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #62c462), color-stop(100%, #51a351)); + background-image: -webkit-linear-gradient(bottom, #62c462, #51a351); + background-image: -moz-linear-gradient(bottom, #62c462, #51a351); + background-image: -o-linear-gradient(bottom, #62c462, #51a351); + background-image: linear-gradient(bottom, #62c462, #51a351); +} +/* line 164, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-warning { + color: white; + background: #dbb450; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #dbb450), color-stop(100%, #f89406)); + background-image: -webkit-linear-gradient(bottom, #dbb450, #f89406); + background-image: -moz-linear-gradient(bottom, #dbb450, #f89406); + background-image: -o-linear-gradient(bottom, #dbb450, #f89406); + background-image: linear-gradient(bottom, #dbb450, #f89406); +} +/* line 170, ../sass/bootstrapSwitch.scss */ +.has-switch span.switch-danger { + color: white; + background: #ee5f5b; + background-image: -webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #ee5f5b), color-stop(100%, #bd362f)); + background-image: -webkit-linear-gradient(bottom, #ee5f5b, #bd362f); + background-image: -moz-linear-gradient(bottom, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(bottom, #ee5f5b, #bd362f); + background-image: linear-gradient(bottom, #ee5f5b, #bd362f); +} diff --git a/NzbDrone.Backbone/Content/form.css b/NzbDrone.Backbone/Content/form.css new file mode 100644 index 000000000..01839425a --- /dev/null +++ b/NzbDrone.Backbone/Content/form.css @@ -0,0 +1,10 @@ +.form-horizontal .controls i { + font-size: 25px; + color: #3A87AD; + cursor: default; + vertical-align: text-bottom; +} + +.help-checkbox { + margin-top: -20px; +} \ No newline at end of file diff --git a/NzbDrone.Backbone/Index.html b/NzbDrone.Backbone/Index.html index c5b87e15c..5737477ab 100644 --- a/NzbDrone.Backbone/Index.html +++ b/NzbDrone.Backbone/Index.html @@ -10,13 +10,15 @@ + - + + + diff --git a/NzbDrone.Backbone/JsLibraries/bootstrapSwitch.js b/NzbDrone.Backbone/JsLibraries/bootstrapSwitch.js new file mode 100644 index 000000000..4407533a6 --- /dev/null +++ b/NzbDrone.Backbone/JsLibraries/bootstrapSwitch.js @@ -0,0 +1,238 @@ +/* ============================================================ + * bootstrapSwitch v1.2 by Larentis Mattia @spiritualGuru + * http://www.larentis.eu/switch/ + * ============================================================ + * Licensed under the Apache License, Version 2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * ============================================================ */ + +!function ($) { + "use strict"; + + $.fn['bootstrapSwitch'] = function (method) { + var methods = { + init: function () { + return this.each(function () { + var $element = $(this) + , $div + , $switchLeft + , $switchRight + , $label + , myClasses = "" + , classes = $element.attr('class') + , color + , moving + , onLabel = "ON" + , offLabel = "OFF"; + + $.each(['switch-mini', 'switch-small', 'switch-large'], function (i, el) { + if (classes.indexOf(el) >= 0) + myClasses = el; + }); + + $element.addClass('has-switch'); + + if ($element.data('on') !== undefined) + color = "switch-" + $element.data('on'); + + if ($element.data('on-label') !== undefined) + onLabel = $element.data('on-label'); + + if ($element.data('off-label') !== undefined) + offLabel = $element.data('off-label'); + + $switchLeft = $('') + .addClass("switch-left") + .addClass(myClasses) + .addClass(color) + .html(onLabel); + + color = ''; + if ($element.data('off') !== undefined) + color = "switch-" + $element.data('off'); + + $switchRight = $('') + .addClass("switch-right") + .addClass(myClasses) + .addClass(color) + .html(offLabel); + + $label = $('