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.")