fixed ninjet's race condition

added notification js (not functional)
This commit is contained in:
Keivan 2010-10-10 13:28:02 -07:00
parent 30d38eead6
commit eaca7543cd
7 changed files with 245 additions and 150 deletions

View File

@ -202,7 +202,8 @@
<Content Include="Scripts\2010.2.825\telerik.textbox.min.js" />
<Content Include="Scripts\2010.2.825\telerik.treeview.min.js" />
<Content Include="Scripts\2010.2.825\telerik.window.min.js" />
<Content Include="Scripts\jquery.msg.js" />
<Content Include="Scripts\jquery.notify.js" />
<Content Include="Scripts\jquery.notify.min.js" />
<Content Include="Scripts\Notifications.js" />
<Content Include="Views\Series\Details.aspx" />
<Content Include="Views\Series\index.aspx" />

View File

@ -1,12 +1,5 @@
/// <reference path="jquery-1.4.1-vsdoc.js" />
$(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 <code>position</code> attribute set to <code>above</code>.'
}, { expires: false });
});

View File

@ -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 = $('<p class="'+name+'"></p>');
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);

View File

@ -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("<div></div>").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("<div></div>").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);

View File

@ -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("<div></div>").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("<div></div>").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);

View File

@ -2,45 +2,6 @@
<%@ Import Namespace="Telerik.Web.Mvc.UI" %>
<asp:Content ID="Content3" ContentPlaceHolderID="JavascriptContent" runat="server">
$(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
});
}
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Series

View File

@ -22,12 +22,46 @@ Released : 20100727
Html.Telerik().StyleSheetRegistrar().DefaultGroup(group => group.Add("telerik.common.css").Add("telerik.sitefinity.css")).Render();
%>
<link href="../../Content/ui.notify.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/jquery.msg.js" type="text/javascript"></script>
<link href="../../Content/style.css" rel="stylesheet" type="text/css" media="screen" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<link type="text/css" rel="stylesheet" href="http://www.erichynds.com/examples/style.css" />
<link type="text/css" rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/redmond/jquery-ui.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.notify.min.js" type="text/javascript"></script>
<script src="../../Scripts/Notifications.js" type="text/javascript"></script>
<script type="text/javascript">
<asp:ContentPlaceHolder ID="JavascriptContent" runat="server" />
function create(template, vars, opts) {
return $container.notify("create", template, vars, opts);
}
$(function () {
// initialize widget on a container, passing in all the defaults.
// the defaults will apply to any notification created within this
// container, but can be overwritten on notification-by-notification
// basis.
$container = $("#konfused").notify();
// create two when the pg loads
var tttt = create("default", { title: '*********Default Notification', text: 'Example of a default notification. I will fade out after 5 seconds' });
create("sticky", { title: 'Sticky Notification', text: 'Example of a "sticky" notification. Click on the X above to close me.' }, { expires: false });
// second
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 <code>position</code> attribute set to <code>above</code>.'
}, { expires: false });
container.notify("widget").find("input").bind("click", function () {
container.notify("create", 1, { title: 'Another Notification!', text: 'The quick brown fox jumped over the lazy dog.' });
});
});
</script>
</head>
<body>
@ -58,8 +92,55 @@ Released : 20100727
</div>
</div>
</div>
<div id="container-bottom" style="display: none; top: auto; right: 0; padding: 10px;
bottom: 0; margin: 0 0 10px 10px">
<div id="konfused" style="display: none">
<div id="default">
<h1>
#{title}</h1>
<h2>
<div class="defText">
#{text}
</div>
</h2>
</div>
<div id="sticky">
<h1>
#{title}</h1>
<p>
#{text}</p>
</div>
<div id="themeroller" class="ui-state-error" style="padding: 10px; -moz-box-shadow: 0 0 6px #980000;
-webkit-box-shadow: 0 0 6px #980000; box-shadow: 0 0 6px #980000;">
<a class="ui-notify-close" href="#"><span class="ui-icon ui-icon-close" style="float: right">
</span></a><span style="float: left; margin: 0 5px 0 0;" class="ui-icon ui-icon-alert">
</span>
<h1>
#{title}</h1>
<p>
#{text}</p>
<p style="text-align: center">
<a class="ui-notify-close" href="#">Close Me</a></p>
</div>
<div id="withIcon">
<a class="ui-notify-close ui-notify-cross" href="#">x</a>
<div style="float: left; margin: 0 10px 0 0">
<img src="#{icon}" alt="warning" /></div>
<h1>
#{title}</h1>
<p>
#{text}</p>
</div>
<div id="buttons">
<h1>
#{title}</h1>
<p>
#{text}</p>
<p style="margin-top: 10px; text-align: center">
<input type="button" class="confirm" value="Close Dialog" />
</p>
</div>
</div>
<div id="container-bottom" style="top: auto; right: 0; padding: 10px; bottom: 0;
margin: 0 0 10px 10px">
<div>
<h1>
#{title}</h1>