From eaca7543cd43594a7e1b66b3e1f990c06e5a9289 Mon Sep 17 00:00:00 2001 From: Keivan Date: Sun, 10 Oct 2010 13:28:02 -0700 Subject: [PATCH] fixed ninjet's race condition added notification js (not functional) --- NzbDrone.Web/NzbDrone.Web.csproj | 3 +- NzbDrone.Web/Scripts/Notifications.js | 9 +- NzbDrone.Web/Scripts/jquery.msg.js | 97 --------------- NzbDrone.Web/Scripts/jquery.notify.js | 140 ++++++++++++++++++++++ NzbDrone.Web/Scripts/jquery.notify.min.js | 16 +++ NzbDrone.Web/Views/Series/index.aspx | 39 ------ NzbDrone.Web/Views/Shared/Site.Master | 91 +++++++++++++- 7 files changed, 245 insertions(+), 150 deletions(-) delete mode 100644 NzbDrone.Web/Scripts/jquery.msg.js create mode 100644 NzbDrone.Web/Scripts/jquery.notify.js create mode 100644 NzbDrone.Web/Scripts/jquery.notify.min.js diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index f8436a9d6..6e81c4cf7 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -202,7 +202,8 @@ - + + diff --git a/NzbDrone.Web/Scripts/Notifications.js b/NzbDrone.Web/Scripts/Notifications.js index 6da5a0f1d..64e2ac190 100644 --- a/NzbDrone.Web/Scripts/Notifications.js +++ b/NzbDrone.Web/Scripts/Notifications.js @@ -1,12 +1,5 @@ /// $(function () { - alert("Notification"); - - var container = $("#container-bottom").notify({ stack: 'above' }); - container.notify("create", { - title: 'Look ma, two containers!', - text: 'This container is positioned on the bottom of the screen. Notifications will stack on top of each other with the position attribute set to above.' - }, { expires: false }); - + }); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/jquery.msg.js b/NzbDrone.Web/Scripts/jquery.msg.js deleted file mode 100644 index 419ca26c2..000000000 --- a/NzbDrone.Web/Scripts/jquery.msg.js +++ /dev/null @@ -1,97 +0,0 @@ -/* -Copyright (c) 2010 Diego Uría Martínez - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -/** - * Add a message to the body. - * - * Example: - * $('a').click(function() { - * $.fn.jQueryMsg({ - * msg: 'Hello world!!' - * }); - * }); - * - * TODO: - * - don't set 'speed' too high, it may loose some events - * - option: message tag - * - option: content tag - */ -(function($,undefined){ - var name = 'jQueryMsg'; - var timeout; - - $.fn.jQueryMsg = function(params) - { - var settings = $.extend( - {}, - { - msgClass : 'jquerymsgclass', //container class - speed : 0, //effects' speed - delay: 100, //delay between messages - timeout: 3000, //maximum time the message is shown on the screen. 0 for permanent - fx: 'none' //effect: set it to none, fade or slide - }, - params); - - if(typeof(settings.msg) === 'string') - { - var show = {width: 'show', height: 'show'}; - var hide = {width: 'hide', height: 'hide'}; - switch(settings.fx) { - case 'fade': - show = {opacity: 'show'}; - hide = {opacity: 'hide'}; - break; - case 'slide': - show = {height: 'show'}; - hide = {height: 'hide'}; - break; - } - - var msg; - if($('p.'+name).size() > 0) { - msg = $('p.'+name); - msg.click().delay(settings.delay); - } - else { - msg = $('

'); - msg.hide().appendTo('body'); - } - - clearTimeout(timeout); - - msg.one('click',function() { - msg.animate(hide, settings.speed, function() { - msg.removeClass().addClass(name); - }); - }).queue(function() { - msg.html(settings.msg).addClass(settings.msgClass).animate(show, settings.speed).dequeue(); - - if(settings.timeout > 0) { - timeout = setTimeout(function() { - msg.click(); - }, settings.timeout); - } - }); - } - } -})(jQuery); \ No newline at end of file diff --git a/NzbDrone.Web/Scripts/jquery.notify.js b/NzbDrone.Web/Scripts/jquery.notify.js new file mode 100644 index 000000000..c2c4657f4 --- /dev/null +++ b/NzbDrone.Web/Scripts/jquery.notify.js @@ -0,0 +1,140 @@ +/* + * jQuery Notify UI Widget 1.4 + * Copyright (c) 2010 Eric Hynds + * + * http://www.erichynds.com/jquery/a-jquery-ui-growl-ubuntu-notification-widget/ + * + * Depends: + * - jQuery 1.4 + * - jQuery UI 1.8 widget factory + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * +*/ +(function($){ + +$.widget("ech.notify", { + options: { + speed: 500, + expires: 5000, + stack: 'below', + custom: false + }, + _create: function(){ + var self = this; + this.templates = {}; + this.keys = []; + + // build and save templates + this.element.addClass("ui-notify").children().addClass("ui-notify-message ui-notify-message-style").each(function(i){ + var key = this.id || i; + self.keys.push(key); + self.templates[key] = $(this).removeAttr("id").wrap("
").parent().html(); // because $(this).andSelf().html() no workie + }).end().empty().show(); + }, + create: function(template, msg, opts){ + if(typeof template === "object"){ + opts = msg; + msg = template; + template = null; + } + + var tpl = this.templates[ template || this.keys[0]]; + + // remove default styling class if rolling w/ custom classes + if(opts && opts.custom){ + tpl = $(tpl).removeClass("ui-notify-message-style").wrap("
").parent().html(); + } + + // return a new notification instance + return new $.ech.notify.instance(this)._create(msg, $.extend({}, this.options, opts), tpl); + } +}); + +// instance constructor +$.extend($.ech.notify, { + instance: function(widget){ + this.parent = widget; + this.isOpen = false; + } +}); + +// instance methods +$.extend($.ech.notify.instance.prototype, { + _create: function(params, options, template){ + this.options = options; + + var self = this, + + // build html template + html = template.replace(/#(?:\{|%7B)(.*?)(?:\}|%7D)/g, function($1, $2){ + return ($2 in params) ? params[$2] : ''; + }), + + // the actual message + m = (this.element = $(html)), + + // close link + closelink = m.find(".ui-notify-close"); + + // clickable? + if(typeof this.options.click === "function"){ + m.addClass("ui-notify-click").bind("click", function(e){ + self._trigger("click", e, self); + }); + } + + // show close link? + if(closelink.length){ + closelink.bind("click", function(){ + self.close(); + return false; + }); + } + + this.open(); + + // auto expire? + if(typeof options.expires === "number"){ + window.setTimeout(function(){ + self.close(); + }, options.expires); + } + + return this; + }, + close: function(){ + var self = this, speed = this.options.speed; + + this.element.fadeTo(speed, 0).slideUp(speed, function(){ + self._trigger("close"); + self.isOpen = false; + }); + + return this; + }, + open: function(){ + if(this.isOpen || this._trigger("beforeopen") === false){ + return this; + } + + var self = this; + + this.element[this.options.stack === 'above' ? 'prependTo' : 'appendTo'](this.parent.element).css({ display:"none", opacity:"" }).fadeIn(this.options.speed, function(){ + self._trigger("open"); + self.isOpen = true; + }); + + return this; + }, + widget: function(){ + return this.element; + }, + _trigger: function(type, e, instance){ + return this.parent._trigger.call( this, type, e, instance ); + } +}); + +})(jQuery); diff --git a/NzbDrone.Web/Scripts/jquery.notify.min.js b/NzbDrone.Web/Scripts/jquery.notify.min.js new file mode 100644 index 000000000..402bf1e8b --- /dev/null +++ b/NzbDrone.Web/Scripts/jquery.notify.min.js @@ -0,0 +1,16 @@ +/* + * jQuery Notify UI Widget 1.4 + * Copyright (c) 2010 Eric Hynds + * + * http://www.erichynds.com/jquery/a-jquery-ui-growl-ubuntu-notification-widget/ + * + * Depends: + * - jQuery 1.4 + * - jQuery UI 1.8 widget factory + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * +*/ +(function(d){d.widget("ech.notify",{options:{speed:500,expires:5E3,stack:"below",custom:false},_create:function(){var a=this;this.templates={};this.keys=[];this.element.addClass("ui-notify").children().addClass("ui-notify-message ui-notify-message-style").each(function(b){b=this.id||b;a.keys.push(b);a.templates[b]=d(this).removeAttr("id").wrap("
").parent().html()}).end().empty().show()},create:function(a,b,c){if(typeof a==="object"){c=b;b=a;a=null}a=this.templates[a||this.keys[0]];if(c&&c.custom)a=d(a).removeClass("ui-notify-message-style").wrap("
").parent().html();return(new d.ech.notify.instance(this))._create(b,d.extend({},this.options,c),a)}});d.extend(d.ech.notify,{instance:function(a){this.parent=a;this.isOpen=false}});d.extend(d.ech.notify.instance.prototype,{_create:function(a,b,c){this.options=b;var e=this;c=c.replace(/#(?:\{|%7B)(.*?)(?:\}|%7D)/g,function(f,g){return g in a?a[g]:""});c=this.element=d(c);var h=c.find(".ui-notify-close");typeof this.options.click==="function"&&c.addClass("ui-notify-click").bind("click",function(f){e._trigger("click",f,e)});h.length&&h.bind("click",function(){e.close();return false});this.open();typeof b.expires==="number"&&window.setTimeout(function(){e.close()},b.expires);return this},close:function(){var a=this,b=this.options.speed;this.isOpen=false;this.element.fadeTo(b,0).slideUp(b,function(){a._trigger("close")});return this},open:function(){if(this.isOpen||this._trigger("beforeopen")===false)return this;var a=this;this.isOpen=true;this.element[this.options.stack==="above"?"prependTo":"appendTo"](this.parent.element).css({display:"none",opacity:""}).fadeIn(this.options.speed,function(){a._trigger("open")});return this},widget:function(){return this.element},_trigger:function(a,b,c){return this.parent._trigger.call(this,a,b,c)}})})(jQuery); diff --git a/NzbDrone.Web/Views/Series/index.aspx b/NzbDrone.Web/Views/Series/index.aspx index b027aa228..cfd4d86bd 100644 --- a/NzbDrone.Web/Views/Series/index.aspx +++ b/NzbDrone.Web/Views/Series/index.aspx @@ -2,45 +2,6 @@ <%@ Import Namespace="Telerik.Web.Mvc.UI" %> - - $(document).ready(function () { - $("#Mediabox").bind("click", MediaBoxClick); - setTimeout('MediaDetect();', 5000); - }); - var Discovered = false; - - function MediaDetect() { - $.ajax({ - url: 'Series/MediaDetect', - success: MediaDetectCallback - }); - - } - function MediaDetectCallback(data) { - Discovered=data.Discovered; - if(!Discovered) - setTimeout('MediaDetect();', 10000); - else - LightUpMedia(data); - } - - function LightUpMedia(data) { - $.ajax({ - url: 'Series/LightUpMedia', - success: LightUpMediaSuccess - }); - } - function LightUpMediaSuccess(data) { - $("#Mediabox").html(data.HTML); - } - function MediaBoxClick(args) { - $.ajax({ - url: 'Series/ControlMedia', - data: "Action=" + args.target.className - }); - } - - Series diff --git a/NzbDrone.Web/Views/Shared/Site.Master b/NzbDrone.Web/Views/Shared/Site.Master index d86d6cb71..ea4050783 100644 --- a/NzbDrone.Web/Views/Shared/Site.Master +++ b/NzbDrone.Web/Views/Shared/Site.Master @@ -22,12 +22,46 @@ Released : 20100727 Html.Telerik().StyleSheetRegistrar().DefaultGroup(group => group.Add("telerik.common.css").Add("telerik.sitefinity.css")).Render(); %> - - + + + + + @@ -58,8 +92,55 @@ Released : 20100727 -