common_interface 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +66 -0
- data/lib/common_interface.rb +39 -0
- data/lib/common_interface/README.md +51 -0
- data/lib/common_interface/demo/basic.rb +96 -0
- data/lib/common_interface/demo/site.rb +10 -0
- data/lib/common_interface/demo/view_helper.rb +17 -0
- data/lib/common_interface/public/common_interface/asset_packages.yml +89 -0
- data/lib/common_interface/public/common_interface/images/img1.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img1_200.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img1_icon.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img1_thumb.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img2.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img2_200.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img2_icon.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img2_thumb.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img3.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img3_200.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img3_icon.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/img3_thumb.jpg +0 -0
- data/lib/common_interface/public/common_interface/images/video_icon.png +0 -0
- data/lib/common_interface/public/common_interface/js/aspects.js +0 -0
- data/lib/common_interface/public/common_interface/js/basic.js +229 -0
- data/lib/common_interface/public/common_interface/js/files_upload.js +115 -0
- data/lib/common_interface/public/common_interface/js/items.js +118 -0
- data/lib/common_interface/public/common_interface/js/style.js +50 -0
- data/lib/common_interface/public/common_interface/lib/jquery.elastic.js +117 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/blank.gif +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_close.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_loading.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_nav_left.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_nav_right.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_e.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_n.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_ne.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_nw.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_s.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_se.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_sw.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_shadow_w.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_title_left.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_title_main.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_title_over.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancy_title_right.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancybox-x.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancybox-y.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/fancybox.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.easing-1.3.pack.js +72 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.fancybox-1.3.1.js +1077 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.fancybox.css +363 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.fancybox.js +44 -0
- data/lib/common_interface/public/common_interface/lib/jquery.fancybox/jquery.mousewheel-3.0.2.pack.js +13 -0
- data/lib/common_interface/public/common_interface/lib/jquery.form.js +660 -0
- data/lib/common_interface/public/common_interface/lib/jquery.hoverIntent.js +111 -0
- data/lib/common_interface/public/common_interface/lib/jquery.jgrowl/jquery.jgrowl.css +128 -0
- data/lib/common_interface/public/common_interface/lib/jquery.jgrowl/jquery.jgrowl.js +307 -0
- data/lib/common_interface/public/common_interface/lib/jquery.js +4376 -0
- data/lib/common_interface/public/common_interface/lib/jquery.json.js +178 -0
- data/lib/common_interface/public/common_interface/lib/jquery.swfupload/cancel.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.swfupload/jquery.swfupload.js +64 -0
- data/lib/common_interface/public/common_interface/lib/jquery.swfupload/style.css +8 -0
- data/lib/common_interface/public/common_interface/lib/jquery.swfupload/swfupload/swfupload.js +980 -0
- data/lib/common_interface/public/common_interface/lib/jquery.swfupload/swfupload/swfupload.queue.js +98 -0
- data/lib/common_interface/public/common_interface/lib/jquery.swfupload/swfupload/swfupload.swf +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.swfupload/swfupload/wdp_buttons_upload_61x22.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.template.js +255 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_222222_256x240.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_228ef1_256x240.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_ef8c08_256x240.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_ffd27a_256x240.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/images/ui-icons_ffffff_256x240.png +0 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/jquery.ui.css +406 -0
- data/lib/common_interface/public/common_interface/lib/jquery.ui/jquery.ui.js +71 -0
- data/lib/common_interface/public/common_interface/themes/default/_aspects.scss +58 -0
- data/lib/common_interface/public/common_interface/themes/default/_basic.scss +228 -0
- data/lib/common_interface/public/common_interface/themes/default/_components.scss +151 -0
- data/lib/common_interface/public/common_interface/themes/default/_custom_reset.scss +12 -0
- data/lib/common_interface/public/common_interface/themes/default/_elastic.scss +72 -0
- data/lib/common_interface/public/common_interface/themes/default/_items.scss +88 -0
- data/lib/common_interface/public/common_interface/themes/default/_mixins.scss +39 -0
- data/lib/common_interface/public/common_interface/themes/default/_special.scss +34 -0
- data/lib/common_interface/public/common_interface/themes/default/_variables.scss +15 -0
- data/lib/common_interface/public/common_interface/themes/default/_yui_reset.scss +127 -0
- data/lib/common_interface/public/common_interface/themes/default/elastic.js +307 -0
- data/lib/common_interface/public/common_interface/themes/default/elastic.print.css +8 -0
- data/lib/common_interface/public/common_interface/themes/default/reset.css +157 -0
- data/lib/common_interface/public/common_interface/themes/default/reset.scss +5 -0
- data/lib/common_interface/public/common_interface/themes/default/style.css +580 -0
- data/lib/common_interface/public/common_interface/themes/default/style.js +84 -0
- data/lib/common_interface/public/common_interface/themes/default/style.scss +11 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/_fixes.scss +130 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/_original.scss +852 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/comment-arrow.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/comment-gravatar.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/comment-reply.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/logo-small.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/logo.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/main-two-columns-left.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/main-two-columns.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/sample-event.jpg +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/sample-gravatar.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/sample-image.jpg +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/img/sample-thumbnail.jpg +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/archives.html +389 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/comments.html +486 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/empty-page.html +107 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/comment-arrow.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/comment-gravatar.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/comment-reply.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/logo-small.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/logo.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/main-two-columns-left.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/main-two-columns.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/sample-event.jpg +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/sample-gravatar.gif +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/sample-image.jpg +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/img/sample-thumbnail.jpg +0 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/index.html +307 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/left-sidebar.html +307 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/no-subnavigation.html +290 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/single-column.html +209 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/style-demo.html +355 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/original/style.css +658 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/style.css +965 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/style.scss +2 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/tmp/comments.html +486 -0
- data/lib/common_interface/public/common_interface/themes/simple_organization/tmp/tmp.html +307 -0
- data/lib/common_interface/tmp/html.html +39 -0
- data/lib/common_interface/tmp/js.js +78 -0
- data/lib/common_interface/view_helper.rb +52 -0
- data/readme.md +49 -0
- data/spec/basic_spec.rb +63 -0
- data/spec/helper.rb +8 -0
- data/spec/spec.opts +4 -0
- metadata +221 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hoverIntent is similar to jQuery's built-in "hover" function except that
|
|
3
|
+
* instead of firing the onMouseOver event immediately, hoverIntent checks
|
|
4
|
+
* to see if the user's mouse has slowed down (beneath the sensitivity
|
|
5
|
+
* threshold) before firing the onMouseOver event.
|
|
6
|
+
*
|
|
7
|
+
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
|
|
8
|
+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
|
|
9
|
+
*
|
|
10
|
+
* hoverIntent is currently available for use in all personal or commercial
|
|
11
|
+
* projects under both MIT and GPL licenses. This means that you can choose
|
|
12
|
+
* the license that best suits your project, and use it accordingly.
|
|
13
|
+
*
|
|
14
|
+
* // basic usage (just like .hover) receives onMouseOver and onMouseOut functions
|
|
15
|
+
* $("ul li").hoverIntent( showNav , hideNav );
|
|
16
|
+
*
|
|
17
|
+
* // advanced usage receives configuration object only
|
|
18
|
+
* $("ul li").hoverIntent({
|
|
19
|
+
* sensitivity: 7, // number = sensitivity threshold (must be 1 or higher)
|
|
20
|
+
* interval: 100, // number = milliseconds of polling interval
|
|
21
|
+
* over: showNav, // function = onMouseOver callback (required)
|
|
22
|
+
* timeout: 0, // number = milliseconds delay before onMouseOut function call
|
|
23
|
+
* out: hideNav // function = onMouseOut callback (required)
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* @param f onMouseOver function || An object with configuration options
|
|
27
|
+
* @param g onMouseOut function || Nothing (use configuration options object)
|
|
28
|
+
* @author Brian Cherne <brian@cherne.net>
|
|
29
|
+
*/
|
|
30
|
+
(function($) {
|
|
31
|
+
$.fn.hoverIntent = function(f,g) {
|
|
32
|
+
// default configuration options
|
|
33
|
+
var cfg = {
|
|
34
|
+
sensitivity: 7,
|
|
35
|
+
interval: 100,
|
|
36
|
+
timeout: 0
|
|
37
|
+
};
|
|
38
|
+
// override configuration options with user supplied object
|
|
39
|
+
cfg = $.extend(cfg, g ? { over: f, out: g } : f );
|
|
40
|
+
|
|
41
|
+
// instantiate variables
|
|
42
|
+
// cX, cY = current X and Y position of mouse, updated by mousemove event
|
|
43
|
+
// pX, pY = previous X and Y position of mouse, set by mouseover and polling interval
|
|
44
|
+
var cX, cY, pX, pY;
|
|
45
|
+
|
|
46
|
+
// A private function for getting mouse position
|
|
47
|
+
var track = function(ev) {
|
|
48
|
+
cX = ev.pageX;
|
|
49
|
+
cY = ev.pageY;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// A private function for comparing current and previous mouse position
|
|
53
|
+
var compare = function(ev,ob) {
|
|
54
|
+
ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
|
|
55
|
+
// compare mouse positions to see if they've crossed the threshold
|
|
56
|
+
if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
|
|
57
|
+
$(ob).unbind("mousemove",track);
|
|
58
|
+
// set hoverIntent state to true (so mouseOut can be called)
|
|
59
|
+
ob.hoverIntent_s = 1;
|
|
60
|
+
return cfg.over.apply(ob,[ev]);
|
|
61
|
+
} else {
|
|
62
|
+
// set previous coordinates for next time
|
|
63
|
+
pX = cX; pY = cY;
|
|
64
|
+
// use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
|
|
65
|
+
ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval );
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// A private function for delaying the mouseOut function
|
|
70
|
+
var delay = function(ev,ob) {
|
|
71
|
+
ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
|
|
72
|
+
ob.hoverIntent_s = 0;
|
|
73
|
+
return cfg.out.apply(ob,[ev]);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// A private function for handling mouse 'hovering'
|
|
77
|
+
var handleHover = function(e) {
|
|
78
|
+
// next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut
|
|
79
|
+
var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;
|
|
80
|
+
while ( p && p != this ) { try { p = p.parentNode; } catch(e) { p = this; } }
|
|
81
|
+
if ( p == this ) { return false; }
|
|
82
|
+
|
|
83
|
+
// copy objects to be passed into t (required for event object to be passed in IE)
|
|
84
|
+
var ev = jQuery.extend({},e);
|
|
85
|
+
var ob = this;
|
|
86
|
+
|
|
87
|
+
// cancel hoverIntent timer if it exists
|
|
88
|
+
if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); }
|
|
89
|
+
|
|
90
|
+
// else e.type == "onmouseover"
|
|
91
|
+
if (e.type == "mouseover") {
|
|
92
|
+
// set "previous" X and Y position based on initial entry point
|
|
93
|
+
pX = ev.pageX; pY = ev.pageY;
|
|
94
|
+
// update "current" X and Y position based on mousemove
|
|
95
|
+
$(ob).bind("mousemove",track);
|
|
96
|
+
// start polling interval (self-calling timeout) to compare mouse coordinates over time
|
|
97
|
+
if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );}
|
|
98
|
+
|
|
99
|
+
// else e.type == "onmouseout"
|
|
100
|
+
} else {
|
|
101
|
+
// unbind expensive mousemove event
|
|
102
|
+
$(ob).unbind("mousemove",track);
|
|
103
|
+
// if hoverIntent state is true, then call the mouseOut function after the specified delay
|
|
104
|
+
if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );}
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// bind the function to the two event listeners
|
|
109
|
+
return this.mouseover(handleHover).mouseout(handleHover);
|
|
110
|
+
};
|
|
111
|
+
})(jQuery);
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
|
|
2
|
+
div.jGrowl {
|
|
3
|
+
padding: 10px;
|
|
4
|
+
z-index: 9999;
|
|
5
|
+
color: #fff;
|
|
6
|
+
font-size: 12px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** Special IE6 Style Positioning **/
|
|
10
|
+
div.ie6 {
|
|
11
|
+
position: absolute;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
div.ie6.top-right {
|
|
15
|
+
right: auto;
|
|
16
|
+
bottom: auto;
|
|
17
|
+
left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
|
|
18
|
+
top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
div.ie6.top-left {
|
|
22
|
+
left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
|
|
23
|
+
top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
div.ie6.bottom-right {
|
|
27
|
+
left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
|
|
28
|
+
top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
div.ie6.bottom-left {
|
|
32
|
+
left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
|
|
33
|
+
top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
div.ie6.center {
|
|
37
|
+
left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
|
|
38
|
+
top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
|
|
39
|
+
width: 100%;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Normal Style Positions **/
|
|
43
|
+
body > div.jGrowl {
|
|
44
|
+
position: fixed;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
body > div.jGrowl.top-left {
|
|
48
|
+
left: 0px;
|
|
49
|
+
top: 0px;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
body > div.jGrowl.top-right {
|
|
53
|
+
right: 0px;
|
|
54
|
+
top: 0px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
body > div.jGrowl.bottom-left {
|
|
58
|
+
left: 0px;
|
|
59
|
+
bottom: 0px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
body > div.jGrowl.bottom-right {
|
|
63
|
+
right: 0px;
|
|
64
|
+
bottom: 0px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
body > div.jGrowl.center {
|
|
68
|
+
top: 0px;
|
|
69
|
+
width: 50%;
|
|
70
|
+
left: 25%;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Cross Browser Styling **/
|
|
74
|
+
div.center div.jGrowl-notification, div.center div.jGrowl-closer {
|
|
75
|
+
margin-left: auto;
|
|
76
|
+
margin-right: auto;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
div.jGrowl div.jGrowl-notification, div.jGrowl div.jGrowl-closer {
|
|
80
|
+
background-color: #000;
|
|
81
|
+
opacity: .85;
|
|
82
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=85)";
|
|
83
|
+
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85);
|
|
84
|
+
zoom: 1;
|
|
85
|
+
width: 235px;
|
|
86
|
+
padding: 10px;
|
|
87
|
+
margin-top: 5px;
|
|
88
|
+
margin-bottom: 5px;
|
|
89
|
+
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
|
90
|
+
font-size: 1em;
|
|
91
|
+
text-align: left;
|
|
92
|
+
display: none;
|
|
93
|
+
-moz-border-radius: 5px;
|
|
94
|
+
-webkit-border-radius: 5px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
div.jGrowl div.jGrowl-notification {
|
|
98
|
+
min-height: 40px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
div.jGrowl div.jGrowl-notification div.header {
|
|
102
|
+
font-weight: bold;
|
|
103
|
+
font-size: .85em;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
div.jGrowl div.jGrowl-notification div.close {
|
|
107
|
+
z-index: 99;
|
|
108
|
+
float: right;
|
|
109
|
+
font-weight: bold;
|
|
110
|
+
font-size: 1em;
|
|
111
|
+
cursor: pointer;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
div.jGrowl div.jGrowl-closer {
|
|
115
|
+
padding-top: 4px;
|
|
116
|
+
padding-bottom: 4px;
|
|
117
|
+
cursor: pointer;
|
|
118
|
+
font-size: .9em;
|
|
119
|
+
font-weight: bold;
|
|
120
|
+
text-align: center;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** Hide jGrowl when printing **/
|
|
124
|
+
@media print {
|
|
125
|
+
div.jGrowl {
|
|
126
|
+
display: none;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jGrowl 1.2.4
|
|
3
|
+
*
|
|
4
|
+
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
|
5
|
+
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
|
6
|
+
*
|
|
7
|
+
* Written by Stan Lemon <stosh1985@gmail.com>
|
|
8
|
+
* Last updated: 2009.12.13
|
|
9
|
+
*
|
|
10
|
+
* jGrowl is a jQuery plugin implementing unobtrusive userland notifications. These
|
|
11
|
+
* notifications function similarly to the Growl Framework available for
|
|
12
|
+
* Mac OS X (http://growl.info).
|
|
13
|
+
*
|
|
14
|
+
* To Do:
|
|
15
|
+
* - Move library settings to containers and allow them to be changed per container
|
|
16
|
+
*
|
|
17
|
+
* Changes in 1.2.4
|
|
18
|
+
* - Fixed IE bug with the close-all button
|
|
19
|
+
* - Fixed IE bug with the filter CSS attribute (special thanks to gotwic)
|
|
20
|
+
* - Update IE opacity CSS
|
|
21
|
+
* - Changed font sizes to use "em", and only set the base style
|
|
22
|
+
*
|
|
23
|
+
* Changes in 1.2.3
|
|
24
|
+
* - The callbacks no longer use the container as context, instead they use the actual notification
|
|
25
|
+
* - The callbacks now receive the container as a parameter after the options parameter
|
|
26
|
+
* - beforeOpen and beforeClose now check the return value, if it's false - the notification does
|
|
27
|
+
* not continue. The open callback will also halt execution if it returns false.
|
|
28
|
+
* - Fixed bug where containers would get confused
|
|
29
|
+
* - Expanded the pause functionality to pause an entire container.
|
|
30
|
+
*
|
|
31
|
+
* Changes in 1.2.2
|
|
32
|
+
* - Notification can now be theme rolled for jQuery UI, special thanks to Jeff Chan!
|
|
33
|
+
*
|
|
34
|
+
* Changes in 1.2.1
|
|
35
|
+
* - Fixed instance where the interval would fire the close method multiple times.
|
|
36
|
+
* - Added CSS to hide from print media
|
|
37
|
+
* - Fixed issue with closer button when div { position: relative } is set
|
|
38
|
+
* - Fixed leaking issue with multiple containers. Special thanks to Matthew Hanlon!
|
|
39
|
+
*
|
|
40
|
+
* Changes in 1.2.0
|
|
41
|
+
* - Added message pooling to limit the number of messages appearing at a given time.
|
|
42
|
+
* - Closing a notification is now bound to the notification object and triggered by the close button.
|
|
43
|
+
*
|
|
44
|
+
* Changes in 1.1.2
|
|
45
|
+
* - Added iPhone styled example
|
|
46
|
+
* - Fixed possible IE7 bug when determining if the ie6 class shoudl be applied.
|
|
47
|
+
* - Added template for the close button, so that it's content could be customized.
|
|
48
|
+
*
|
|
49
|
+
* Changes in 1.1.1
|
|
50
|
+
* - Fixed CSS styling bug for ie6 caused by a mispelling
|
|
51
|
+
* - Changes height restriction on default notifications to min-height
|
|
52
|
+
* - Added skinned examples using a variety of images
|
|
53
|
+
* - Added the ability to customize the content of the [close all] box
|
|
54
|
+
* - Added jTweet, an example of using jGrowl + Twitter
|
|
55
|
+
*
|
|
56
|
+
* Changes in 1.1.0
|
|
57
|
+
* - Multiple container and instances.
|
|
58
|
+
* - Standard $.jGrowl() now wraps $.fn.jGrowl() by first establishing a generic jGrowl container.
|
|
59
|
+
* - Instance methods of a jGrowl container can be called by $.fn.jGrowl(methodName)
|
|
60
|
+
* - Added glue preferenced, which allows notifications to be inserted before or after nodes in the container
|
|
61
|
+
* - Added new log callback which is called before anything is done for the notification
|
|
62
|
+
* - Corner's attribute are now applied on an individual notification basis.
|
|
63
|
+
*
|
|
64
|
+
* Changes in 1.0.4
|
|
65
|
+
* - Various CSS fixes so that jGrowl renders correctly in IE6.
|
|
66
|
+
*
|
|
67
|
+
* Changes in 1.0.3
|
|
68
|
+
* - Fixed bug with options persisting across notifications
|
|
69
|
+
* - Fixed theme application bug
|
|
70
|
+
* - Simplified some selectors and manipulations.
|
|
71
|
+
* - Added beforeOpen and beforeClose callbacks
|
|
72
|
+
* - Reorganized some lines of code to be more readable
|
|
73
|
+
* - Removed unnecessary this.defaults context
|
|
74
|
+
* - If corners plugin is present, it's now customizable.
|
|
75
|
+
* - Customizable open animation.
|
|
76
|
+
* - Customizable close animation.
|
|
77
|
+
* - Customizable animation easing.
|
|
78
|
+
* - Added customizable positioning (top-left, top-right, bottom-left, bottom-right, center)
|
|
79
|
+
*
|
|
80
|
+
* Changes in 1.0.2
|
|
81
|
+
* - All CSS styling is now external.
|
|
82
|
+
* - Added a theme parameter which specifies a secondary class for styling, such
|
|
83
|
+
* that notifications can be customized in appearance on a per message basis.
|
|
84
|
+
* - Notification life span is now customizable on a per message basis.
|
|
85
|
+
* - Added the ability to disable the global closer, enabled by default.
|
|
86
|
+
* - Added callbacks for when a notification is opened or closed.
|
|
87
|
+
* - Added callback for the global closer.
|
|
88
|
+
* - Customizable animation speed.
|
|
89
|
+
* - jGrowl now set itself up and tears itself down.
|
|
90
|
+
*
|
|
91
|
+
* Changes in 1.0.1:
|
|
92
|
+
* - Removed dependency on metadata plugin in favor of .data()
|
|
93
|
+
* - Namespaced all events
|
|
94
|
+
*/
|
|
95
|
+
(function($) {
|
|
96
|
+
|
|
97
|
+
/** jGrowl Wrapper - Establish a base jGrowl Container for compatibility with older releases. **/
|
|
98
|
+
$.jGrowl = function( m , o ) {
|
|
99
|
+
// To maintain compatibility with older version that only supported one instance we'll create the base container.
|
|
100
|
+
if ( $('#jGrowl').size() == 0 )
|
|
101
|
+
$('<div id="jGrowl"></div>').addClass($.jGrowl.defaults.position).appendTo('body');
|
|
102
|
+
|
|
103
|
+
// Create a notification on the container.
|
|
104
|
+
$('#jGrowl').jGrowl(m,o);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
/** Raise jGrowl Notification on a jGrowl Container **/
|
|
109
|
+
$.fn.jGrowl = function( m , o ) {
|
|
110
|
+
if ( $.isFunction(this.each) ) {
|
|
111
|
+
var args = arguments;
|
|
112
|
+
|
|
113
|
+
return this.each(function() {
|
|
114
|
+
var self = this;
|
|
115
|
+
|
|
116
|
+
/** Create a jGrowl Instance on the Container if it does not exist **/
|
|
117
|
+
if ( $(this).data('jGrowl.instance') == undefined ) {
|
|
118
|
+
$(this).data('jGrowl.instance', $.extend( new $.fn.jGrowl(), { notifications: [], element: null, interval: null } ));
|
|
119
|
+
$(this).data('jGrowl.instance').startup( this );
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Optionally call jGrowl instance methods, or just raise a normal notification **/
|
|
123
|
+
if ( $.isFunction($(this).data('jGrowl.instance')[m]) ) {
|
|
124
|
+
$(this).data('jGrowl.instance')[m].apply( $(this).data('jGrowl.instance') , $.makeArray(args).slice(1) );
|
|
125
|
+
} else {
|
|
126
|
+
$(this).data('jGrowl.instance').create( m , o );
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
$.extend( $.fn.jGrowl.prototype , {
|
|
133
|
+
|
|
134
|
+
/** Default JGrowl Settings **/
|
|
135
|
+
defaults: {
|
|
136
|
+
pool: 0,
|
|
137
|
+
header: '',
|
|
138
|
+
group: '',
|
|
139
|
+
sticky: false,
|
|
140
|
+
position: 'top-right', // Is this still needed?
|
|
141
|
+
glue: 'after',
|
|
142
|
+
theme: 'default',
|
|
143
|
+
corners: '10px',
|
|
144
|
+
check: 250,
|
|
145
|
+
life: 3000,
|
|
146
|
+
speed: 'normal',
|
|
147
|
+
easing: 'swing',
|
|
148
|
+
closer: true,
|
|
149
|
+
closeTemplate: '×',
|
|
150
|
+
closerTemplate: '<div>[ close all ]</div>',
|
|
151
|
+
log: function(e,m,o) {},
|
|
152
|
+
beforeOpen: function(e,m,o) {},
|
|
153
|
+
open: function(e,m,o) {},
|
|
154
|
+
beforeClose: function(e,m,o) {},
|
|
155
|
+
close: function(e,m,o) {},
|
|
156
|
+
animateOpen: {
|
|
157
|
+
opacity: 'show'
|
|
158
|
+
},
|
|
159
|
+
animateClose: {
|
|
160
|
+
opacity: 'hide'
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
|
|
164
|
+
notifications: [],
|
|
165
|
+
|
|
166
|
+
/** jGrowl Container Node **/
|
|
167
|
+
element: null,
|
|
168
|
+
|
|
169
|
+
/** Interval Function **/
|
|
170
|
+
interval: null,
|
|
171
|
+
|
|
172
|
+
/** Create a Notification **/
|
|
173
|
+
create: function( message , o ) {
|
|
174
|
+
var o = $.extend({}, this.defaults, o);
|
|
175
|
+
|
|
176
|
+
this.notifications.push({ message: message , options: o });
|
|
177
|
+
|
|
178
|
+
o.log.apply( this.element , [this.element,message,o] );
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
render: function( notification ) {
|
|
182
|
+
var self = this;
|
|
183
|
+
var message = notification.message;
|
|
184
|
+
var o = notification.options;
|
|
185
|
+
|
|
186
|
+
var notification = $(
|
|
187
|
+
'<div class="jGrowl-notification ui-state-highlight ui-corner-all' +
|
|
188
|
+
((o.group != undefined && o.group != '') ? ' ' + o.group : '') + '">' +
|
|
189
|
+
'<div class="close">' + o.closeTemplate + '</div>' +
|
|
190
|
+
'<div class="header">' + o.header + '</div>' +
|
|
191
|
+
'<div class="message">' + message + '</div></div>'
|
|
192
|
+
).data("jGrowl", o).addClass(o.theme).children('div.close').bind("click.jGrowl", function() {
|
|
193
|
+
$(this).parent().trigger('jGrowl.close');
|
|
194
|
+
}).parent();
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
/** Notification Actions **/
|
|
198
|
+
$(notification).bind("mouseover.jGrowl", function() {
|
|
199
|
+
$('div.jGrowl-notification', self.element).data("jGrowl.pause", true);
|
|
200
|
+
}).bind("mouseout.jGrowl", function() {
|
|
201
|
+
$('div.jGrowl-notification', self.element).data("jGrowl.pause", false);
|
|
202
|
+
}).bind('jGrowl.beforeOpen', function() {
|
|
203
|
+
if ( o.beforeOpen.apply( notification , [notification,message,o,self.element] ) != false ) {
|
|
204
|
+
$(this).trigger('jGrowl.open');
|
|
205
|
+
}
|
|
206
|
+
}).bind('jGrowl.open', function() {
|
|
207
|
+
if ( o.open.apply( notification , [notification,message,o,self.element] ) != false ) {
|
|
208
|
+
if ( o.glue == 'after' ) {
|
|
209
|
+
$('div.jGrowl-notification:last', self.element).after(notification);
|
|
210
|
+
} else {
|
|
211
|
+
$('div.jGrowl-notification:first', self.element).before(notification);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
$(this).animate(o.animateOpen, o.speed, o.easing, function() {
|
|
215
|
+
// Fixes some anti-aliasing issues with IE filters.
|
|
216
|
+
if ($.browser.msie && (parseInt($(this).css('opacity'), 10) === 1 || parseInt($(this).css('opacity'), 10) === 0))
|
|
217
|
+
this.style.removeAttribute('filter');
|
|
218
|
+
|
|
219
|
+
$(this).data("jGrowl").created = new Date();
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}).bind('jGrowl.beforeClose', function() {
|
|
223
|
+
if ( o.beforeClose.apply( notification , [notification,message,o,self.element] ) != false )
|
|
224
|
+
$(this).trigger('jGrowl.close');
|
|
225
|
+
}).bind('jGrowl.close', function() {
|
|
226
|
+
// Pause the notification, lest during the course of animation another close event gets called.
|
|
227
|
+
$(this).data('jGrowl.pause', true);
|
|
228
|
+
$(this).animate(o.animateClose, o.speed, o.easing, function() {
|
|
229
|
+
$(this).remove();
|
|
230
|
+
var close = o.close.apply( notification , [notification,message,o,self.element] );
|
|
231
|
+
|
|
232
|
+
if ( $.isFunction(close) )
|
|
233
|
+
close.apply( notification , [notification,message,o,self.element] );
|
|
234
|
+
});
|
|
235
|
+
}).trigger('jGrowl.beforeOpen');
|
|
236
|
+
|
|
237
|
+
/** Optional Corners Plugin **/
|
|
238
|
+
if ( $.fn.corner != undefined ) $(notification).corner( o.corners );
|
|
239
|
+
|
|
240
|
+
/** Add a Global Closer if more than one notification exists **/
|
|
241
|
+
if ( $('div.jGrowl-notification:parent', self.element).size() > 1 &&
|
|
242
|
+
$('div.jGrowl-closer', self.element).size() == 0 && this.defaults.closer != false ) {
|
|
243
|
+
$(this.defaults.closerTemplate).addClass('jGrowl-closer ui-state-highlight ui-corner-all').addClass(this.defaults.theme)
|
|
244
|
+
.appendTo(self.element).animate(this.defaults.animateOpen, this.defaults.speed, this.defaults.easing)
|
|
245
|
+
.bind("click.jGrowl", function() {
|
|
246
|
+
$(this).siblings().children('div.close').trigger("click.jGrowl");
|
|
247
|
+
|
|
248
|
+
if ( $.isFunction( self.defaults.closer ) ) {
|
|
249
|
+
self.defaults.closer.apply( $(this).parent()[0] , [$(this).parent()[0]] );
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
};
|
|
253
|
+
},
|
|
254
|
+
|
|
255
|
+
/** Update the jGrowl Container, removing old jGrowl notifications **/
|
|
256
|
+
update: function() {
|
|
257
|
+
$(this.element).find('div.jGrowl-notification:parent').each( function() {
|
|
258
|
+
if ( $(this).data("jGrowl") != undefined && $(this).data("jGrowl").created != undefined &&
|
|
259
|
+
($(this).data("jGrowl").created.getTime() + $(this).data("jGrowl").life) < (new Date()).getTime() &&
|
|
260
|
+
$(this).data("jGrowl").sticky != true &&
|
|
261
|
+
($(this).data("jGrowl.pause") == undefined || $(this).data("jGrowl.pause") != true) ) {
|
|
262
|
+
|
|
263
|
+
// Pause the notification, lest during the course of animation another close event gets called.
|
|
264
|
+
$(this).trigger('jGrowl.beforeClose');
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
if ( this.notifications.length > 0 &&
|
|
269
|
+
(this.defaults.pool == 0 || $(this.element).find('div.jGrowl-notification:parent').size() < this.defaults.pool) )
|
|
270
|
+
this.render( this.notifications.shift() );
|
|
271
|
+
|
|
272
|
+
if ( $(this.element).find('div.jGrowl-notification:parent').size() < 2 ) {
|
|
273
|
+
$(this.element).find('div.jGrowl-closer').animate(this.defaults.animateClose, this.defaults.speed, this.defaults.easing, function() {
|
|
274
|
+
$(this).remove();
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
|
|
279
|
+
/** Setup the jGrowl Notification Container **/
|
|
280
|
+
startup: function(e) {
|
|
281
|
+
this.element = $(e).addClass('jGrowl').append('<div class="jGrowl-notification"></div>');
|
|
282
|
+
this.interval = setInterval( function() {
|
|
283
|
+
$(e).data('jGrowl.instance').update();
|
|
284
|
+
}, this.defaults.check);
|
|
285
|
+
|
|
286
|
+
if ($.browser.msie && parseInt($.browser.version) < 7 && !window["XMLHttpRequest"]) {
|
|
287
|
+
$(this.element).addClass('ie6');
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
|
|
291
|
+
/** Shutdown jGrowl, removing it and clearing the interval **/
|
|
292
|
+
shutdown: function() {
|
|
293
|
+
$(this.element).removeClass('jGrowl').find('div.jGrowl-notification').remove();
|
|
294
|
+
clearInterval( this.interval );
|
|
295
|
+
},
|
|
296
|
+
|
|
297
|
+
close: function() {
|
|
298
|
+
$(this.element).find('div.jGrowl-notification').each(function(){
|
|
299
|
+
$(this).trigger('jGrowl.beforeClose');
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
/** Reference the Defaults Object for compatibility with older versions of jGrowl **/
|
|
305
|
+
$.jGrowl.defaults = $.fn.jGrowl.prototype.defaults;
|
|
306
|
+
|
|
307
|
+
})(jQuery);
|