From 82e2cb2d1e71e0c44ecd32a9b088faeaabc3af90 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Wed, 30 Nov 2011 22:39:11 -0800 Subject: [PATCH] Settings forms are fixed. --- NzbDrone.Web/Content/NzbDrone.css | 12 - NzbDrone.Web/Content/Settings.css | 97 ++++---- NzbDrone.Web/NzbDrone.Web.csproj | 7 +- NzbDrone.Web/Scripts/NzbDrone/AutoBind.js | 25 ++ NzbDrone.Web/Scripts/NzbDrone/Notification.js | 2 - NzbDrone.Web/Scripts/NzbDrone/settingsForm.js | 8 - NzbDrone.Web/Scripts/jquery.livequery.js | 226 ++++++++++++++++++ NzbDrone.Web/Views/Settings/Indexers.cshtml | 6 +- NzbDrone.Web/Views/Settings/Naming.cshtml | 6 +- .../Views/Settings/Notifications.cshtml | 6 +- NzbDrone.Web/Views/Settings/Quality.cshtml | 6 +- NzbDrone.Web/Views/Settings/Sabnzbd.cshtml | 6 +- NzbDrone.Web/Views/Settings/SubMenu.cshtml | 10 - NzbDrone.Web/Views/Settings/System.cshtml | 6 +- NzbDrone.Web/Views/Settings/Test.cshtml | 12 - .../Views/Shared/_RefrenceLayout.cshtml | 2 + 16 files changed, 321 insertions(+), 116 deletions(-) create mode 100644 NzbDrone.Web/Scripts/NzbDrone/AutoBind.js delete mode 100644 NzbDrone.Web/Scripts/NzbDrone/settingsForm.js create mode 100644 NzbDrone.Web/Scripts/jquery.livequery.js delete mode 100644 NzbDrone.Web/Views/Settings/SubMenu.cshtml delete mode 100644 NzbDrone.Web/Views/Settings/Test.cshtml diff --git a/NzbDrone.Web/Content/NzbDrone.css b/NzbDrone.Web/Content/NzbDrone.css index ae45746a6..2f399ed9f 100644 --- a/NzbDrone.Web/Content/NzbDrone.css +++ b/NzbDrone.Web/Content/NzbDrone.css @@ -169,18 +169,6 @@ hr margin-right: 135px; } -button, input[type="button"], input[type="submit"], input[type="reset"] -{ - color: white; - background-color: #065EFE; - border-style: solid; - border-color: #065EFE; -} - -button:active, input[type="button"]:active, input[type="submit"]:active, input[type="reset"]:active -{ - border-color: #0C48B6; -} input[type=text], select { diff --git a/NzbDrone.Web/Content/Settings.css b/NzbDrone.Web/Content/Settings.css index f42128c96..6e25b39f2 100644 --- a/NzbDrone.Web/Content/Settings.css +++ b/NzbDrone.Web/Content/Settings.css @@ -1,11 +1,19 @@ -body +body { - /*font-family:"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif; - font-size:12px;*/ + /*font-family:"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif; font-size:12px;*/ } -p, h1, form, button{border:0; margin:0; padding:0;} -.spacer{clear:both; height:1px;} +p, h1, form, button +{ + border: 0; + margin: 0; + padding: 0; +} +.spacer +{ + clear: both; + height: 1px; +} .settingsForm { @@ -15,47 +23,47 @@ p, h1, form, button{border:0; margin:0; padding:0;} #stylized h1 { - font-size:20px; - font-weight:bold; - margin-bottom:8px; + font-size: 20px; + font-weight: bold; + margin-bottom: 8px; } #stylized p { - font-size:11px; - color:#666666; - margin-bottom:20px; - border-bottom:solid 1px #b7ddf2; - padding-bottom:10px; + font-size: 11px; + color: #666666; + margin-bottom: 20px; + border-bottom: solid 1px #b7ddf2; + padding-bottom: 10px; } #stylized .labelClass { - display:block; - font-weight:bold; - text-align:right; - width:340px; - float:left; + display: block; + font-weight: bold; + text-align: right; + width: 340px; + float: left; margin-bottom: -10px; } #stylized .small { - color:#666666; - display:block; - font-size:11px; - font-weight:normal; - text-align:right; - width:340px; + color: #666666; + display: block; + font-size: 11px; + font-weight: normal; + text-align: right; + width: 340px; } #stylized .inputClass { - float:left; - padding:4px 2px; - border:solid 1px #aacfe4; - width:200px; - margin:2px 0 20px 10px; + float: left; + padding: 4px 2px; + border: solid 1px #aacfe4; + width: 200px; + margin: 2px 0 20px 10px; } #stylized .selectClass @@ -65,31 +73,22 @@ p, h1, form, button{border:0; margin:0; padding:0;} #stylized .checkClass { - margin:10px 0 10px 10px; + margin: 10px 0 10px 10px; } #stylized button { - clear:both; - margin-left:220px; + clear: both; + margin-left: 220px; margin-bottom: 10px; - width:125px; - height:31px; - background:#666666; - text-align:center; - line-height:31px; - color:#FFFFFF; - font-size:11px; - font-weight:bold; + width: 125px; + height: 31px; + text-align: center; + line-height: 31px; + font-size: 11px; + font-weight: bold; } -#save_button:hover -{ - border-bottom-style: solid; - border-bottom-width: 4px; - border-color: #3C3C3C; - padding-bottom: 2px; -} #saveAjax { @@ -101,9 +100,9 @@ p, h1, form, button{border:0; margin:0; padding:0;} } #save_button[disabled="disabled"] -{ +{ padding: 0px 6px 0px 6px; border: 2px outset ButtonFace; color: lightgrey; cursor: progress; -} \ No newline at end of file +} diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index 3f9a9223d..a702f568a 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -372,6 +372,7 @@ + @@ -383,7 +384,7 @@ - + @@ -414,7 +415,6 @@ - @@ -464,9 +464,6 @@ - - - diff --git a/NzbDrone.Web/Scripts/NzbDrone/AutoBind.js b/NzbDrone.Web/Scripts/NzbDrone/AutoBind.js new file mode 100644 index 000000000..1a4a08377 --- /dev/null +++ b/NzbDrone.Web/Scripts/NzbDrone/AutoBind.js @@ -0,0 +1,25 @@ +$(document).ready(function () { + + //All forms are ajax forms + $("form").livequery(function () { + + var options = { + type: 'post', + resetForm: false + }; + + $(this).ajaxForm(options); + + }); + + $('Form button').livequery(function () { + $(this).removeAttr('disabled'); + }); + + + //All buttons are jQueryUI buttons + $('button, input[type="button"], input[type="submit"], input[type="reset"]').livequery(function () { + $(this).button(); + }); + +}); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/NzbDrone/Notification.js b/NzbDrone.Web/Scripts/NzbDrone/Notification.js index cb526ea95..d87b28e47 100644 --- a/NzbDrone.Web/Scripts/NzbDrone/Notification.js +++ b/NzbDrone.Web/Scripts/NzbDrone/Notification.js @@ -13,8 +13,6 @@ jqXHR.success(function (data) { //Check if the response is a message type, - - console.log(this.url); if (data.IsMessage) { if (data.NotificationType === 0) { $.gritter.add({ diff --git a/NzbDrone.Web/Scripts/NzbDrone/settingsForm.js b/NzbDrone.Web/Scripts/NzbDrone/settingsForm.js deleted file mode 100644 index be2488a1b..000000000 --- a/NzbDrone.Web/Scripts/NzbDrone/settingsForm.js +++ /dev/null @@ -1,8 +0,0 @@ -$(document).ready(function () { - var options = { - type: 'post', - resetForm: false - }; - $('#form').ajaxForm(options); - $('#save_button').removeAttr('disabled'); -}); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/jquery.livequery.js b/NzbDrone.Web/Scripts/jquery.livequery.js new file mode 100644 index 000000000..55a458a73 --- /dev/null +++ b/NzbDrone.Web/Scripts/jquery.livequery.js @@ -0,0 +1,226 @@ +/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) +* Dual licensed under the MIT (MIT_LICENSE.txt) +* and GPL Version 2 (GPL_LICENSE.txt) licenses. +* +* Version: 1.1.1 +* Requires jQuery 1.3+ +* Docs: http://docs.jquery.com/Plugins/livequery +*/ + +(function ($) { + + $.extend($.fn, { + livequery: function (type, fn, fn2) { + var self = this, q; + + // Handle different call patterns + if ($.isFunction(type)) + fn2 = fn, fn = type, type = undefined; + + // See if Live Query already exists + $.each($.livequery.queries, function (i, query) { + if (self.selector == query.selector && self.context == query.context && + type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid)) + // Found the query, exit the each loop + return (q = query) && false; + }); + + // Create new Live Query if it wasn't found + q = q || new $.livequery(this.selector, this.context, type, fn, fn2); + + // Make sure it is running + q.stopped = false; + + // Run it immediately for the first time + q.run(); + + // Contnue the chain + return this; + }, + + expire: function (type, fn, fn2) { + var self = this; + + // Handle different call patterns + if ($.isFunction(type)) + fn2 = fn, fn = type, type = undefined; + + // Find the Live Query based on arguments and stop it + $.each($.livequery.queries, function (i, query) { + if (self.selector == query.selector && self.context == query.context && + (!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped) + $.livequery.stop(query.id); + }); + + // Continue the chain + return this; + } + }); + + $.livequery = function (selector, context, type, fn, fn2) { + this.selector = selector; + this.context = context; + this.type = type; + this.fn = fn; + this.fn2 = fn2; + this.elements = []; + this.stopped = false; + + // The id is the index of the Live Query in $.livequery.queries + this.id = $.livequery.queries.push(this) - 1; + + // Mark the functions for matching later on + fn.$lqguid = fn.$lqguid || $.livequery.guid++; + if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++; + + // Return the Live Query + return this; + }; + + $.livequery.prototype = { + stop: function () { + var query = this; + + if (this.type) + // Unbind all bound events + this.elements.unbind(this.type, this.fn); + else if (this.fn2) + // Call the second function for all matched elements + this.elements.each(function (i, el) { + query.fn2.apply(el); + }); + + // Clear out matched elements + this.elements = []; + + // Stop the Live Query from running until restarted + this.stopped = true; + }, + + run: function () { + // Short-circuit if stopped + if (this.stopped) return; + var query = this; + + var oEls = this.elements, + els = $(this.selector, this.context), + nEls = els.not(oEls); + + // Set elements to the latest set of matched elements + this.elements = els; + + if (this.type) { + // Bind events to newly matched elements + nEls.bind(this.type, this.fn); + + // Unbind events to elements no longer matched + if (oEls.length > 0) + $.each(oEls, function (i, el) { + if ($.inArray(el, els) < 0) + $.event.remove(el, query.type, query.fn); + }); + } + else { + // Call the first function for newly matched elements + nEls.each(function () { + query.fn.apply(this); + }); + + // Call the second function for elements no longer matched + if (this.fn2 && oEls.length > 0) + $.each(oEls, function (i, el) { + if ($.inArray(el, els) < 0) + query.fn2.apply(el); + }); + } + } + }; + + $.extend($.livequery, { + guid: 0, + queries: [], + queue: [], + running: false, + timeout: null, + + checkQueue: function () { + if ($.livequery.running && $.livequery.queue.length) { + var length = $.livequery.queue.length; + // Run each Live Query currently in the queue + while (length--) + $.livequery.queries[$.livequery.queue.shift()].run(); + } + }, + + pause: function () { + // Don't run anymore Live Queries until restarted + $.livequery.running = false; + }, + + play: function () { + // Restart Live Queries + $.livequery.running = true; + // Request a run of the Live Queries + $.livequery.run(); + }, + + registerPlugin: function () { + $.each(arguments, function (i, n) { + // Short-circuit if the method doesn't exist + if (!$.fn[n]) return; + + // Save a reference to the original method + var old = $.fn[n]; + + // Create a new method + $.fn[n] = function () { + // Call the original method + var r = old.apply(this, arguments); + + // Request a run of the Live Queries + $.livequery.run(); + + // Return the original methods result + return r; + } + }); + }, + + run: function (id) { + if (id != undefined) { + // Put the particular Live Query in the queue if it doesn't already exist + if ($.inArray(id, $.livequery.queue) < 0) + $.livequery.queue.push(id); + } + else + // Put each Live Query in the queue if it doesn't already exist + $.each($.livequery.queries, function (id) { + if ($.inArray(id, $.livequery.queue) < 0) + $.livequery.queue.push(id); + }); + + // Clear timeout if it already exists + if ($.livequery.timeout) clearTimeout($.livequery.timeout); + // Create a timeout to check the queue and actually run the Live Queries + $.livequery.timeout = setTimeout($.livequery.checkQueue, 20); + }, + + stop: function (id) { + if (id != undefined) + // Stop are particular Live Query + $.livequery.queries[id].stop(); + else + // Stop all Live Queries + $.each($.livequery.queries, function (id) { + $.livequery.queries[id].stop(); + }); + } + }); + + // Register core DOM manipulation methods + $.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove', 'html'); + + // Run Live Queries when the Document is ready + $(function () { $.livequery.play(); }); + +})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Views/Settings/Indexers.cshtml b/NzbDrone.Web/Views/Settings/Indexers.cshtml index 35cd5fe36..64cb3e195 100644 --- a/NzbDrone.Web/Views/Settings/Indexers.cshtml +++ b/NzbDrone.Web/Views/Settings/Indexers.cshtml @@ -14,7 +14,7 @@
RSS feeds are checked every 15 minutes for new episodes.
- @using (Html.BeginForm("SaveIndexers", "Settings", FormMethod.Post, new { id = "form", name = "form", @class = "settingsForm" })) + @using (Html.BeginForm("SaveIndexers", "Settings", FormMethod.Post, new { id = "IndexersForm", name = "IndexersForm", @class = "settingsForm" })) { @Html.ValidationSummary(true, "Unable to save your settings. Please correct the errors and try again.")
@@ -106,12 +106,12 @@

- } @section Scripts{ - + + + - + + + } diff --git a/NzbDrone.Web/Views/Settings/Test.cshtml b/NzbDrone.Web/Views/Settings/Test.cshtml deleted file mode 100644 index 12100aa1e..000000000 --- a/NzbDrone.Web/Views/Settings/Test.cshtml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - \ No newline at end of file diff --git a/NzbDrone.Web/Views/Shared/_RefrenceLayout.cshtml b/NzbDrone.Web/Views/Shared/_RefrenceLayout.cshtml index 238c04d30..a339d4eee 100644 --- a/NzbDrone.Web/Views/Shared/_RefrenceLayout.cshtml +++ b/NzbDrone.Web/Views/Shared/_RefrenceLayout.cshtml @@ -20,6 +20,7 @@ @RenderBody() @(Html.Telerik().ScriptRegistrar().jQuery(true)) + @@ -32,6 +33,7 @@ + @RenderSection("Scripts", required: false)