jquery-ui-middleman 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +2 -0
  5. data/Gemfile +3 -0
  6. data/History.md +115 -0
  7. data/License.txt +2 -0
  8. data/README.md +226 -0
  9. data/Rakefile +221 -0
  10. data/VERSIONS.md +27 -0
  11. data/app/assets/images/jquery-ui/animated-overlay.gif +0 -0
  12. data/app/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  13. data/app/assets/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
  14. data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  15. data/app/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  16. data/app/assets/images/jquery-ui/ui-bg_glass_75_dadada_1x400.png +0 -0
  17. data/app/assets/images/jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  18. data/app/assets/images/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  19. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  20. data/app/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
  21. data/app/assets/images/jquery-ui/ui-icons_2e83ff_256x240.png +0 -0
  22. data/app/assets/images/jquery-ui/ui-icons_454545_256x240.png +0 -0
  23. data/app/assets/images/jquery-ui/ui-icons_888888_256x240.png +0 -0
  24. data/app/assets/images/jquery-ui/ui-icons_cd0a0a_256x240.png +0 -0
  25. data/app/assets/javascripts/jquery.ui.accordion.js +575 -0
  26. data/app/assets/javascripts/jquery.ui.all.js +34 -0
  27. data/app/assets/javascripts/jquery.ui.autocomplete.js +615 -0
  28. data/app/assets/javascripts/jquery.ui.button.js +422 -0
  29. data/app/assets/javascripts/jquery.ui.core.js +320 -0
  30. data/app/assets/javascripts/jquery.ui.datepicker-af.js +23 -0
  31. data/app/assets/javascripts/jquery.ui.datepicker-ar-DZ.js +23 -0
  32. data/app/assets/javascripts/jquery.ui.datepicker-ar.js +23 -0
  33. data/app/assets/javascripts/jquery.ui.datepicker-az.js +23 -0
  34. data/app/assets/javascripts/jquery.ui.datepicker-be.js +23 -0
  35. data/app/assets/javascripts/jquery.ui.datepicker-bg.js +24 -0
  36. data/app/assets/javascripts/jquery.ui.datepicker-bs.js +23 -0
  37. data/app/assets/javascripts/jquery.ui.datepicker-ca.js +23 -0
  38. data/app/assets/javascripts/jquery.ui.datepicker-cs.js +23 -0
  39. data/app/assets/javascripts/jquery.ui.datepicker-cy-GB.js +23 -0
  40. data/app/assets/javascripts/jquery.ui.datepicker-da.js +23 -0
  41. data/app/assets/javascripts/jquery.ui.datepicker-de.js +23 -0
  42. data/app/assets/javascripts/jquery.ui.datepicker-el.js +23 -0
  43. data/app/assets/javascripts/jquery.ui.datepicker-en-AU.js +23 -0
  44. data/app/assets/javascripts/jquery.ui.datepicker-en-GB.js +23 -0
  45. data/app/assets/javascripts/jquery.ui.datepicker-en-NZ.js +23 -0
  46. data/app/assets/javascripts/jquery.ui.datepicker-eo.js +23 -0
  47. data/app/assets/javascripts/jquery.ui.datepicker-es.js +23 -0
  48. data/app/assets/javascripts/jquery.ui.datepicker-et.js +23 -0
  49. data/app/assets/javascripts/jquery.ui.datepicker-eu.js +23 -0
  50. data/app/assets/javascripts/jquery.ui.datepicker-fa.js +59 -0
  51. data/app/assets/javascripts/jquery.ui.datepicker-fi.js +23 -0
  52. data/app/assets/javascripts/jquery.ui.datepicker-fo.js +23 -0
  53. data/app/assets/javascripts/jquery.ui.datepicker-fr-CA.js +23 -0
  54. data/app/assets/javascripts/jquery.ui.datepicker-fr-CH.js +23 -0
  55. data/app/assets/javascripts/jquery.ui.datepicker-fr.js +25 -0
  56. data/app/assets/javascripts/jquery.ui.datepicker-gl.js +23 -0
  57. data/app/assets/javascripts/jquery.ui.datepicker-he.js +23 -0
  58. data/app/assets/javascripts/jquery.ui.datepicker-hi.js +23 -0
  59. data/app/assets/javascripts/jquery.ui.datepicker-hr.js +23 -0
  60. data/app/assets/javascripts/jquery.ui.datepicker-hu.js +23 -0
  61. data/app/assets/javascripts/jquery.ui.datepicker-hy.js +23 -0
  62. data/app/assets/javascripts/jquery.ui.datepicker-id.js +23 -0
  63. data/app/assets/javascripts/jquery.ui.datepicker-is.js +23 -0
  64. data/app/assets/javascripts/jquery.ui.datepicker-it.js +23 -0
  65. data/app/assets/javascripts/jquery.ui.datepicker-ja.js +23 -0
  66. data/app/assets/javascripts/jquery.ui.datepicker-ka.js +21 -0
  67. data/app/assets/javascripts/jquery.ui.datepicker-kk.js +23 -0
  68. data/app/assets/javascripts/jquery.ui.datepicker-km.js +23 -0
  69. data/app/assets/javascripts/jquery.ui.datepicker-ko.js +23 -0
  70. data/app/assets/javascripts/jquery.ui.datepicker-ky.js +24 -0
  71. data/app/assets/javascripts/jquery.ui.datepicker-lb.js +23 -0
  72. data/app/assets/javascripts/jquery.ui.datepicker-lt.js +23 -0
  73. data/app/assets/javascripts/jquery.ui.datepicker-lv.js +23 -0
  74. data/app/assets/javascripts/jquery.ui.datepicker-mk.js +23 -0
  75. data/app/assets/javascripts/jquery.ui.datepicker-ml.js +23 -0
  76. data/app/assets/javascripts/jquery.ui.datepicker-ms.js +23 -0
  77. data/app/assets/javascripts/jquery.ui.datepicker-nb.js +22 -0
  78. data/app/assets/javascripts/jquery.ui.datepicker-nl-BE.js +23 -0
  79. data/app/assets/javascripts/jquery.ui.datepicker-nl.js +23 -0
  80. data/app/assets/javascripts/jquery.ui.datepicker-nn.js +22 -0
  81. data/app/assets/javascripts/jquery.ui.datepicker-no.js +23 -0
  82. data/app/assets/javascripts/jquery.ui.datepicker-pl.js +23 -0
  83. data/app/assets/javascripts/jquery.ui.datepicker-pt-BR.js +23 -0
  84. data/app/assets/javascripts/jquery.ui.datepicker-pt.js +22 -0
  85. data/app/assets/javascripts/jquery.ui.datepicker-rm.js +21 -0
  86. data/app/assets/javascripts/jquery.ui.datepicker-ro.js +26 -0
  87. data/app/assets/javascripts/jquery.ui.datepicker-ru.js +23 -0
  88. data/app/assets/javascripts/jquery.ui.datepicker-sk.js +23 -0
  89. data/app/assets/javascripts/jquery.ui.datepicker-sl.js +24 -0
  90. data/app/assets/javascripts/jquery.ui.datepicker-sq.js +23 -0
  91. data/app/assets/javascripts/jquery.ui.datepicker-sr-SR.js +23 -0
  92. data/app/assets/javascripts/jquery.ui.datepicker-sr.js +23 -0
  93. data/app/assets/javascripts/jquery.ui.datepicker-sv.js +23 -0
  94. data/app/assets/javascripts/jquery.ui.datepicker-ta.js +23 -0
  95. data/app/assets/javascripts/jquery.ui.datepicker-th.js +23 -0
  96. data/app/assets/javascripts/jquery.ui.datepicker-tj.js +23 -0
  97. data/app/assets/javascripts/jquery.ui.datepicker-tr.js +23 -0
  98. data/app/assets/javascripts/jquery.ui.datepicker-uk.js +24 -0
  99. data/app/assets/javascripts/jquery.ui.datepicker-vi.js +23 -0
  100. data/app/assets/javascripts/jquery.ui.datepicker-zh-CN.js +23 -0
  101. data/app/assets/javascripts/jquery.ui.datepicker-zh-HK.js +23 -0
  102. data/app/assets/javascripts/jquery.ui.datepicker-zh-TW.js +23 -0
  103. data/app/assets/javascripts/jquery.ui.datepicker.js +2040 -0
  104. data/app/assets/javascripts/jquery.ui.dialog.js +815 -0
  105. data/app/assets/javascripts/jquery.ui.draggable.js +962 -0
  106. data/app/assets/javascripts/jquery.ui.droppable.js +377 -0
  107. data/app/assets/javascripts/jquery.ui.effect-blind.js +84 -0
  108. data/app/assets/javascripts/jquery.ui.effect-bounce.js +115 -0
  109. data/app/assets/javascripts/jquery.ui.effect-clip.js +69 -0
  110. data/app/assets/javascripts/jquery.ui.effect-drop.js +67 -0
  111. data/app/assets/javascripts/jquery.ui.effect-explode.js +99 -0
  112. data/app/assets/javascripts/jquery.ui.effect-fade.js +32 -0
  113. data/app/assets/javascripts/jquery.ui.effect-fold.js +78 -0
  114. data/app/assets/javascripts/jquery.ui.effect-highlight.js +52 -0
  115. data/app/assets/javascripts/jquery.ui.effect-pulsate.js +65 -0
  116. data/app/assets/javascripts/jquery.ui.effect-scale.js +320 -0
  117. data/app/assets/javascripts/jquery.ui.effect-shake.js +76 -0
  118. data/app/assets/javascripts/jquery.ui.effect-slide.js +66 -0
  119. data/app/assets/javascripts/jquery.ui.effect-transfer.js +49 -0
  120. data/app/assets/javascripts/jquery.ui.effect.all.js +14 -0
  121. data/app/assets/javascripts/jquery.ui.effect.js +1289 -0
  122. data/app/assets/javascripts/jquery.ui.menu.js +625 -0
  123. data/app/assets/javascripts/jquery.ui.mouse.js +172 -0
  124. data/app/assets/javascripts/jquery.ui.position.js +497 -0
  125. data/app/assets/javascripts/jquery.ui.progressbar.js +148 -0
  126. data/app/assets/javascripts/jquery.ui.resizable.js +972 -0
  127. data/app/assets/javascripts/jquery.ui.selectable.js +281 -0
  128. data/app/assets/javascripts/jquery.ui.slider.js +676 -0
  129. data/app/assets/javascripts/jquery.ui.sortable.js +1289 -0
  130. data/app/assets/javascripts/jquery.ui.spinner.js +497 -0
  131. data/app/assets/javascripts/jquery.ui.tabs.js +849 -0
  132. data/app/assets/javascripts/jquery.ui.tooltip.js +406 -0
  133. data/app/assets/javascripts/jquery.ui.widget.js +521 -0
  134. data/app/assets/stylesheets/jquery.ui.accordion.css.erb +42 -0
  135. data/app/assets/stylesheets/jquery.ui.all.css.erb +14 -0
  136. data/app/assets/stylesheets/jquery.ui.autocomplete.css.erb +21 -0
  137. data/app/assets/stylesheets/jquery.ui.base.css.erb +27 -0
  138. data/app/assets/stylesheets/jquery.ui.button.css.erb +118 -0
  139. data/app/assets/stylesheets/jquery.ui.core.css.erb +93 -0
  140. data/app/assets/stylesheets/jquery.ui.datepicker.css.erb +182 -0
  141. data/app/assets/stylesheets/jquery.ui.dialog.css.erb +75 -0
  142. data/app/assets/stylesheets/jquery.ui.menu.css.erb +83 -0
  143. data/app/assets/stylesheets/jquery.ui.progressbar.css.erb +32 -0
  144. data/app/assets/stylesheets/jquery.ui.resizable.css.erb +82 -0
  145. data/app/assets/stylesheets/jquery.ui.selectable.css.erb +19 -0
  146. data/app/assets/stylesheets/jquery.ui.slider.css.erb +77 -0
  147. data/app/assets/stylesheets/jquery.ui.spinner.css.erb +70 -0
  148. data/app/assets/stylesheets/jquery.ui.tabs.css.erb +56 -0
  149. data/app/assets/stylesheets/jquery.ui.theme.css.erb +409 -0
  150. data/app/assets/stylesheets/jquery.ui.tooltip.css.erb +23 -0
  151. data/lib/jquery-ui-middleman.rb +1 -0
  152. data/lib/jquery/ui/version.rb +6 -0
  153. metadata +209 -0
@@ -0,0 +1,66 @@
1
+ //= require jquery.ui.effect
2
+
3
+ /*!
4
+ * jQuery UI Effects Slide 1.10.3
5
+ * http://jqueryui.com
6
+ *
7
+ * Copyright 2013 jQuery Foundation and other contributors
8
+ * Released under the MIT license.
9
+ * http://jquery.org/license
10
+ *
11
+ * http://api.jqueryui.com/slide-effect/
12
+ *
13
+ * Depends:
14
+ * jquery.ui.effect.js
15
+ */
16
+ (function( $, undefined ) {
17
+
18
+ $.effects.effect.slide = function( o, done ) {
19
+
20
+ // Create element
21
+ var el = $( this ),
22
+ props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
23
+ mode = $.effects.setMode( el, o.mode || "show" ),
24
+ show = mode === "show",
25
+ direction = o.direction || "left",
26
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
27
+ positiveMotion = (direction === "up" || direction === "left"),
28
+ distance,
29
+ animation = {};
30
+
31
+ // Adjust
32
+ $.effects.save( el, props );
33
+ el.show();
34
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
35
+
36
+ $.effects.createWrapper( el ).css({
37
+ overflow: "hidden"
38
+ });
39
+
40
+ if ( show ) {
41
+ el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
42
+ }
43
+
44
+ // Animation
45
+ animation[ ref ] = ( show ?
46
+ ( positiveMotion ? "+=" : "-=") :
47
+ ( positiveMotion ? "-=" : "+=")) +
48
+ distance;
49
+
50
+ // Animate
51
+ el.animate( animation, {
52
+ queue: false,
53
+ duration: o.duration,
54
+ easing: o.easing,
55
+ complete: function() {
56
+ if ( mode === "hide" ) {
57
+ el.hide();
58
+ }
59
+ $.effects.restore( el, props );
60
+ $.effects.removeWrapper( el );
61
+ done();
62
+ }
63
+ });
64
+ };
65
+
66
+ })(jQuery);
@@ -0,0 +1,49 @@
1
+ //= require jquery.ui.effect
2
+
3
+ /*!
4
+ * jQuery UI Effects Transfer 1.10.3
5
+ * http://jqueryui.com
6
+ *
7
+ * Copyright 2013 jQuery Foundation and other contributors
8
+ * Released under the MIT license.
9
+ * http://jquery.org/license
10
+ *
11
+ * http://api.jqueryui.com/transfer-effect/
12
+ *
13
+ * Depends:
14
+ * jquery.ui.effect.js
15
+ */
16
+ (function( $, undefined ) {
17
+
18
+ $.effects.effect.transfer = function( o, done ) {
19
+ var elem = $( this ),
20
+ target = $( o.to ),
21
+ targetFixed = target.css( "position" ) === "fixed",
22
+ body = $("body"),
23
+ fixTop = targetFixed ? body.scrollTop() : 0,
24
+ fixLeft = targetFixed ? body.scrollLeft() : 0,
25
+ endPosition = target.offset(),
26
+ animation = {
27
+ top: endPosition.top - fixTop ,
28
+ left: endPosition.left - fixLeft ,
29
+ height: target.innerHeight(),
30
+ width: target.innerWidth()
31
+ },
32
+ startPosition = elem.offset(),
33
+ transfer = $( "<div class='ui-effects-transfer'></div>" )
34
+ .appendTo( document.body )
35
+ .addClass( o.className )
36
+ .css({
37
+ top: startPosition.top - fixTop ,
38
+ left: startPosition.left - fixLeft ,
39
+ height: elem.innerHeight(),
40
+ width: elem.innerWidth(),
41
+ position: targetFixed ? "fixed" : "absolute"
42
+ })
43
+ .animate( animation, o.duration, o.easing, function() {
44
+ transfer.remove();
45
+ done();
46
+ });
47
+ };
48
+
49
+ })(jQuery);
@@ -0,0 +1,14 @@
1
+ //= require jquery.ui.effect-blind
2
+ //= require jquery.ui.effect-bounce
3
+ //= require jquery.ui.effect-clip
4
+ //= require jquery.ui.effect-drop
5
+ //= require jquery.ui.effect-explode
6
+ //= require jquery.ui.effect-fade
7
+ //= require jquery.ui.effect-fold
8
+ //= require jquery.ui.effect-highlight
9
+ //= require jquery.ui.effect-pulsate
10
+ //= require jquery.ui.effect-scale
11
+ //= require jquery.ui.effect-shake
12
+ //= require jquery.ui.effect-slide
13
+ //= require jquery.ui.effect-transfer
14
+ //= require jquery.ui.effect
@@ -0,0 +1,1289 @@
1
+ /*!
2
+ * jQuery UI Effects 1.10.3
3
+ * http://jqueryui.com
4
+ *
5
+ * Copyright 2013 jQuery Foundation and other contributors
6
+ * Released under the MIT license.
7
+ * http://jquery.org/license
8
+ *
9
+ * http://api.jqueryui.com/category/effects-core/
10
+ */
11
+ (function($, undefined) {
12
+
13
+ var dataSpace = "ui-effects-";
14
+
15
+ $.effects = {
16
+ effect: {}
17
+ };
18
+
19
+ /*!
20
+ * jQuery Color Animations v2.1.2
21
+ * https://github.com/jquery/jquery-color
22
+ *
23
+ * Copyright 2013 jQuery Foundation and other contributors
24
+ * Released under the MIT license.
25
+ * http://jquery.org/license
26
+ *
27
+ * Date: Wed Jan 16 08:47:09 2013 -0600
28
+ */
29
+ (function( jQuery, undefined ) {
30
+
31
+ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
32
+
33
+ // plusequals test for += 100 -= 100
34
+ rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
35
+ // a set of RE's that can match strings and generate color tuples.
36
+ stringParsers = [{
37
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
38
+ parse: function( execResult ) {
39
+ return [
40
+ execResult[ 1 ],
41
+ execResult[ 2 ],
42
+ execResult[ 3 ],
43
+ execResult[ 4 ]
44
+ ];
45
+ }
46
+ }, {
47
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
48
+ parse: function( execResult ) {
49
+ return [
50
+ execResult[ 1 ] * 2.55,
51
+ execResult[ 2 ] * 2.55,
52
+ execResult[ 3 ] * 2.55,
53
+ execResult[ 4 ]
54
+ ];
55
+ }
56
+ }, {
57
+ // this regex ignores A-F because it's compared against an already lowercased string
58
+ re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
59
+ parse: function( execResult ) {
60
+ return [
61
+ parseInt( execResult[ 1 ], 16 ),
62
+ parseInt( execResult[ 2 ], 16 ),
63
+ parseInt( execResult[ 3 ], 16 )
64
+ ];
65
+ }
66
+ }, {
67
+ // this regex ignores A-F because it's compared against an already lowercased string
68
+ re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
69
+ parse: function( execResult ) {
70
+ return [
71
+ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
72
+ parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
73
+ parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
74
+ ];
75
+ }
76
+ }, {
77
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
78
+ space: "hsla",
79
+ parse: function( execResult ) {
80
+ return [
81
+ execResult[ 1 ],
82
+ execResult[ 2 ] / 100,
83
+ execResult[ 3 ] / 100,
84
+ execResult[ 4 ]
85
+ ];
86
+ }
87
+ }],
88
+
89
+ // jQuery.Color( )
90
+ color = jQuery.Color = function( color, green, blue, alpha ) {
91
+ return new jQuery.Color.fn.parse( color, green, blue, alpha );
92
+ },
93
+ spaces = {
94
+ rgba: {
95
+ props: {
96
+ red: {
97
+ idx: 0,
98
+ type: "byte"
99
+ },
100
+ green: {
101
+ idx: 1,
102
+ type: "byte"
103
+ },
104
+ blue: {
105
+ idx: 2,
106
+ type: "byte"
107
+ }
108
+ }
109
+ },
110
+
111
+ hsla: {
112
+ props: {
113
+ hue: {
114
+ idx: 0,
115
+ type: "degrees"
116
+ },
117
+ saturation: {
118
+ idx: 1,
119
+ type: "percent"
120
+ },
121
+ lightness: {
122
+ idx: 2,
123
+ type: "percent"
124
+ }
125
+ }
126
+ }
127
+ },
128
+ propTypes = {
129
+ "byte": {
130
+ floor: true,
131
+ max: 255
132
+ },
133
+ "percent": {
134
+ max: 1
135
+ },
136
+ "degrees": {
137
+ mod: 360,
138
+ floor: true
139
+ }
140
+ },
141
+ support = color.support = {},
142
+
143
+ // element for support tests
144
+ supportElem = jQuery( "<p>" )[ 0 ],
145
+
146
+ // colors = jQuery.Color.names
147
+ colors,
148
+
149
+ // local aliases of functions called often
150
+ each = jQuery.each;
151
+
152
+ // determine rgba support immediately
153
+ supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
154
+ support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
155
+
156
+ // define cache name and alpha properties
157
+ // for rgba and hsla spaces
158
+ each( spaces, function( spaceName, space ) {
159
+ space.cache = "_" + spaceName;
160
+ space.props.alpha = {
161
+ idx: 3,
162
+ type: "percent",
163
+ def: 1
164
+ };
165
+ });
166
+
167
+ function clamp( value, prop, allowEmpty ) {
168
+ var type = propTypes[ prop.type ] || {};
169
+
170
+ if ( value == null ) {
171
+ return (allowEmpty || !prop.def) ? null : prop.def;
172
+ }
173
+
174
+ // ~~ is an short way of doing floor for positive numbers
175
+ value = type.floor ? ~~value : parseFloat( value );
176
+
177
+ // IE will pass in empty strings as value for alpha,
178
+ // which will hit this case
179
+ if ( isNaN( value ) ) {
180
+ return prop.def;
181
+ }
182
+
183
+ if ( type.mod ) {
184
+ // we add mod before modding to make sure that negatives values
185
+ // get converted properly: -10 -> 350
186
+ return (value + type.mod) % type.mod;
187
+ }
188
+
189
+ // for now all property types without mod have min and max
190
+ return 0 > value ? 0 : type.max < value ? type.max : value;
191
+ }
192
+
193
+ function stringParse( string ) {
194
+ var inst = color(),
195
+ rgba = inst._rgba = [];
196
+
197
+ string = string.toLowerCase();
198
+
199
+ each( stringParsers, function( i, parser ) {
200
+ var parsed,
201
+ match = parser.re.exec( string ),
202
+ values = match && parser.parse( match ),
203
+ spaceName = parser.space || "rgba";
204
+
205
+ if ( values ) {
206
+ parsed = inst[ spaceName ]( values );
207
+
208
+ // if this was an rgba parse the assignment might happen twice
209
+ // oh well....
210
+ inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
211
+ rgba = inst._rgba = parsed._rgba;
212
+
213
+ // exit each( stringParsers ) here because we matched
214
+ return false;
215
+ }
216
+ });
217
+
218
+ // Found a stringParser that handled it
219
+ if ( rgba.length ) {
220
+
221
+ // if this came from a parsed string, force "transparent" when alpha is 0
222
+ // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
223
+ if ( rgba.join() === "0,0,0,0" ) {
224
+ jQuery.extend( rgba, colors.transparent );
225
+ }
226
+ return inst;
227
+ }
228
+
229
+ // named colors
230
+ return colors[ string ];
231
+ }
232
+
233
+ color.fn = jQuery.extend( color.prototype, {
234
+ parse: function( red, green, blue, alpha ) {
235
+ if ( red === undefined ) {
236
+ this._rgba = [ null, null, null, null ];
237
+ return this;
238
+ }
239
+ if ( red.jquery || red.nodeType ) {
240
+ red = jQuery( red ).css( green );
241
+ green = undefined;
242
+ }
243
+
244
+ var inst = this,
245
+ type = jQuery.type( red ),
246
+ rgba = this._rgba = [];
247
+
248
+ // more than 1 argument specified - assume ( red, green, blue, alpha )
249
+ if ( green !== undefined ) {
250
+ red = [ red, green, blue, alpha ];
251
+ type = "array";
252
+ }
253
+
254
+ if ( type === "string" ) {
255
+ return this.parse( stringParse( red ) || colors._default );
256
+ }
257
+
258
+ if ( type === "array" ) {
259
+ each( spaces.rgba.props, function( key, prop ) {
260
+ rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
261
+ });
262
+ return this;
263
+ }
264
+
265
+ if ( type === "object" ) {
266
+ if ( red instanceof color ) {
267
+ each( spaces, function( spaceName, space ) {
268
+ if ( red[ space.cache ] ) {
269
+ inst[ space.cache ] = red[ space.cache ].slice();
270
+ }
271
+ });
272
+ } else {
273
+ each( spaces, function( spaceName, space ) {
274
+ var cache = space.cache;
275
+ each( space.props, function( key, prop ) {
276
+
277
+ // if the cache doesn't exist, and we know how to convert
278
+ if ( !inst[ cache ] && space.to ) {
279
+
280
+ // if the value was null, we don't need to copy it
281
+ // if the key was alpha, we don't need to copy it either
282
+ if ( key === "alpha" || red[ key ] == null ) {
283
+ return;
284
+ }
285
+ inst[ cache ] = space.to( inst._rgba );
286
+ }
287
+
288
+ // this is the only case where we allow nulls for ALL properties.
289
+ // call clamp with alwaysAllowEmpty
290
+ inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
291
+ });
292
+
293
+ // everything defined but alpha?
294
+ if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
295
+ // use the default of 1
296
+ inst[ cache ][ 3 ] = 1;
297
+ if ( space.from ) {
298
+ inst._rgba = space.from( inst[ cache ] );
299
+ }
300
+ }
301
+ });
302
+ }
303
+ return this;
304
+ }
305
+ },
306
+ is: function( compare ) {
307
+ var is = color( compare ),
308
+ same = true,
309
+ inst = this;
310
+
311
+ each( spaces, function( _, space ) {
312
+ var localCache,
313
+ isCache = is[ space.cache ];
314
+ if (isCache) {
315
+ localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
316
+ each( space.props, function( _, prop ) {
317
+ if ( isCache[ prop.idx ] != null ) {
318
+ same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
319
+ return same;
320
+ }
321
+ });
322
+ }
323
+ return same;
324
+ });
325
+ return same;
326
+ },
327
+ _space: function() {
328
+ var used = [],
329
+ inst = this;
330
+ each( spaces, function( spaceName, space ) {
331
+ if ( inst[ space.cache ] ) {
332
+ used.push( spaceName );
333
+ }
334
+ });
335
+ return used.pop();
336
+ },
337
+ transition: function( other, distance ) {
338
+ var end = color( other ),
339
+ spaceName = end._space(),
340
+ space = spaces[ spaceName ],
341
+ startColor = this.alpha() === 0 ? color( "transparent" ) : this,
342
+ start = startColor[ space.cache ] || space.to( startColor._rgba ),
343
+ result = start.slice();
344
+
345
+ end = end[ space.cache ];
346
+ each( space.props, function( key, prop ) {
347
+ var index = prop.idx,
348
+ startValue = start[ index ],
349
+ endValue = end[ index ],
350
+ type = propTypes[ prop.type ] || {};
351
+
352
+ // if null, don't override start value
353
+ if ( endValue === null ) {
354
+ return;
355
+ }
356
+ // if null - use end
357
+ if ( startValue === null ) {
358
+ result[ index ] = endValue;
359
+ } else {
360
+ if ( type.mod ) {
361
+ if ( endValue - startValue > type.mod / 2 ) {
362
+ startValue += type.mod;
363
+ } else if ( startValue - endValue > type.mod / 2 ) {
364
+ startValue -= type.mod;
365
+ }
366
+ }
367
+ result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
368
+ }
369
+ });
370
+ return this[ spaceName ]( result );
371
+ },
372
+ blend: function( opaque ) {
373
+ // if we are already opaque - return ourself
374
+ if ( this._rgba[ 3 ] === 1 ) {
375
+ return this;
376
+ }
377
+
378
+ var rgb = this._rgba.slice(),
379
+ a = rgb.pop(),
380
+ blend = color( opaque )._rgba;
381
+
382
+ return color( jQuery.map( rgb, function( v, i ) {
383
+ return ( 1 - a ) * blend[ i ] + a * v;
384
+ }));
385
+ },
386
+ toRgbaString: function() {
387
+ var prefix = "rgba(",
388
+ rgba = jQuery.map( this._rgba, function( v, i ) {
389
+ return v == null ? ( i > 2 ? 1 : 0 ) : v;
390
+ });
391
+
392
+ if ( rgba[ 3 ] === 1 ) {
393
+ rgba.pop();
394
+ prefix = "rgb(";
395
+ }
396
+
397
+ return prefix + rgba.join() + ")";
398
+ },
399
+ toHslaString: function() {
400
+ var prefix = "hsla(",
401
+ hsla = jQuery.map( this.hsla(), function( v, i ) {
402
+ if ( v == null ) {
403
+ v = i > 2 ? 1 : 0;
404
+ }
405
+
406
+ // catch 1 and 2
407
+ if ( i && i < 3 ) {
408
+ v = Math.round( v * 100 ) + "%";
409
+ }
410
+ return v;
411
+ });
412
+
413
+ if ( hsla[ 3 ] === 1 ) {
414
+ hsla.pop();
415
+ prefix = "hsl(";
416
+ }
417
+ return prefix + hsla.join() + ")";
418
+ },
419
+ toHexString: function( includeAlpha ) {
420
+ var rgba = this._rgba.slice(),
421
+ alpha = rgba.pop();
422
+
423
+ if ( includeAlpha ) {
424
+ rgba.push( ~~( alpha * 255 ) );
425
+ }
426
+
427
+ return "#" + jQuery.map( rgba, function( v ) {
428
+
429
+ // default to 0 when nulls exist
430
+ v = ( v || 0 ).toString( 16 );
431
+ return v.length === 1 ? "0" + v : v;
432
+ }).join("");
433
+ },
434
+ toString: function() {
435
+ return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
436
+ }
437
+ });
438
+ color.fn.parse.prototype = color.fn;
439
+
440
+ // hsla conversions adapted from:
441
+ // https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
442
+
443
+ function hue2rgb( p, q, h ) {
444
+ h = ( h + 1 ) % 1;
445
+ if ( h * 6 < 1 ) {
446
+ return p + (q - p) * h * 6;
447
+ }
448
+ if ( h * 2 < 1) {
449
+ return q;
450
+ }
451
+ if ( h * 3 < 2 ) {
452
+ return p + (q - p) * ((2/3) - h) * 6;
453
+ }
454
+ return p;
455
+ }
456
+
457
+ spaces.hsla.to = function ( rgba ) {
458
+ if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
459
+ return [ null, null, null, rgba[ 3 ] ];
460
+ }
461
+ var r = rgba[ 0 ] / 255,
462
+ g = rgba[ 1 ] / 255,
463
+ b = rgba[ 2 ] / 255,
464
+ a = rgba[ 3 ],
465
+ max = Math.max( r, g, b ),
466
+ min = Math.min( r, g, b ),
467
+ diff = max - min,
468
+ add = max + min,
469
+ l = add * 0.5,
470
+ h, s;
471
+
472
+ if ( min === max ) {
473
+ h = 0;
474
+ } else if ( r === max ) {
475
+ h = ( 60 * ( g - b ) / diff ) + 360;
476
+ } else if ( g === max ) {
477
+ h = ( 60 * ( b - r ) / diff ) + 120;
478
+ } else {
479
+ h = ( 60 * ( r - g ) / diff ) + 240;
480
+ }
481
+
482
+ // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
483
+ // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
484
+ if ( diff === 0 ) {
485
+ s = 0;
486
+ } else if ( l <= 0.5 ) {
487
+ s = diff / add;
488
+ } else {
489
+ s = diff / ( 2 - add );
490
+ }
491
+ return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
492
+ };
493
+
494
+ spaces.hsla.from = function ( hsla ) {
495
+ if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
496
+ return [ null, null, null, hsla[ 3 ] ];
497
+ }
498
+ var h = hsla[ 0 ] / 360,
499
+ s = hsla[ 1 ],
500
+ l = hsla[ 2 ],
501
+ a = hsla[ 3 ],
502
+ q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
503
+ p = 2 * l - q;
504
+
505
+ return [
506
+ Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
507
+ Math.round( hue2rgb( p, q, h ) * 255 ),
508
+ Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
509
+ a
510
+ ];
511
+ };
512
+
513
+
514
+ each( spaces, function( spaceName, space ) {
515
+ var props = space.props,
516
+ cache = space.cache,
517
+ to = space.to,
518
+ from = space.from;
519
+
520
+ // makes rgba() and hsla()
521
+ color.fn[ spaceName ] = function( value ) {
522
+
523
+ // generate a cache for this space if it doesn't exist
524
+ if ( to && !this[ cache ] ) {
525
+ this[ cache ] = to( this._rgba );
526
+ }
527
+ if ( value === undefined ) {
528
+ return this[ cache ].slice();
529
+ }
530
+
531
+ var ret,
532
+ type = jQuery.type( value ),
533
+ arr = ( type === "array" || type === "object" ) ? value : arguments,
534
+ local = this[ cache ].slice();
535
+
536
+ each( props, function( key, prop ) {
537
+ var val = arr[ type === "object" ? key : prop.idx ];
538
+ if ( val == null ) {
539
+ val = local[ prop.idx ];
540
+ }
541
+ local[ prop.idx ] = clamp( val, prop );
542
+ });
543
+
544
+ if ( from ) {
545
+ ret = color( from( local ) );
546
+ ret[ cache ] = local;
547
+ return ret;
548
+ } else {
549
+ return color( local );
550
+ }
551
+ };
552
+
553
+ // makes red() green() blue() alpha() hue() saturation() lightness()
554
+ each( props, function( key, prop ) {
555
+ // alpha is included in more than one space
556
+ if ( color.fn[ key ] ) {
557
+ return;
558
+ }
559
+ color.fn[ key ] = function( value ) {
560
+ var vtype = jQuery.type( value ),
561
+ fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
562
+ local = this[ fn ](),
563
+ cur = local[ prop.idx ],
564
+ match;
565
+
566
+ if ( vtype === "undefined" ) {
567
+ return cur;
568
+ }
569
+
570
+ if ( vtype === "function" ) {
571
+ value = value.call( this, cur );
572
+ vtype = jQuery.type( value );
573
+ }
574
+ if ( value == null && prop.empty ) {
575
+ return this;
576
+ }
577
+ if ( vtype === "string" ) {
578
+ match = rplusequals.exec( value );
579
+ if ( match ) {
580
+ value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
581
+ }
582
+ }
583
+ local[ prop.idx ] = value;
584
+ return this[ fn ]( local );
585
+ };
586
+ });
587
+ });
588
+
589
+ // add cssHook and .fx.step function for each named hook.
590
+ // accept a space separated string of properties
591
+ color.hook = function( hook ) {
592
+ var hooks = hook.split( " " );
593
+ each( hooks, function( i, hook ) {
594
+ jQuery.cssHooks[ hook ] = {
595
+ set: function( elem, value ) {
596
+ var parsed, curElem,
597
+ backgroundColor = "";
598
+
599
+ if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
600
+ value = color( parsed || value );
601
+ if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
602
+ curElem = hook === "backgroundColor" ? elem.parentNode : elem;
603
+ while (
604
+ (backgroundColor === "" || backgroundColor === "transparent") &&
605
+ curElem && curElem.style
606
+ ) {
607
+ try {
608
+ backgroundColor = jQuery.css( curElem, "backgroundColor" );
609
+ curElem = curElem.parentNode;
610
+ } catch ( e ) {
611
+ }
612
+ }
613
+
614
+ value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
615
+ backgroundColor :
616
+ "_default" );
617
+ }
618
+
619
+ value = value.toRgbaString();
620
+ }
621
+ try {
622
+ elem.style[ hook ] = value;
623
+ } catch( e ) {
624
+ // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
625
+ }
626
+ }
627
+ };
628
+ jQuery.fx.step[ hook ] = function( fx ) {
629
+ if ( !fx.colorInit ) {
630
+ fx.start = color( fx.elem, hook );
631
+ fx.end = color( fx.end );
632
+ fx.colorInit = true;
633
+ }
634
+ jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
635
+ };
636
+ });
637
+
638
+ };
639
+
640
+ color.hook( stepHooks );
641
+
642
+ jQuery.cssHooks.borderColor = {
643
+ expand: function( value ) {
644
+ var expanded = {};
645
+
646
+ each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
647
+ expanded[ "border" + part + "Color" ] = value;
648
+ });
649
+ return expanded;
650
+ }
651
+ };
652
+
653
+ // Basic color names only.
654
+ // Usage of any of the other color names requires adding yourself or including
655
+ // jquery.color.svg-names.js.
656
+ colors = jQuery.Color.names = {
657
+ // 4.1. Basic color keywords
658
+ aqua: "#00ffff",
659
+ black: "#000000",
660
+ blue: "#0000ff",
661
+ fuchsia: "#ff00ff",
662
+ gray: "#808080",
663
+ green: "#008000",
664
+ lime: "#00ff00",
665
+ maroon: "#800000",
666
+ navy: "#000080",
667
+ olive: "#808000",
668
+ purple: "#800080",
669
+ red: "#ff0000",
670
+ silver: "#c0c0c0",
671
+ teal: "#008080",
672
+ white: "#ffffff",
673
+ yellow: "#ffff00",
674
+
675
+ // 4.2.3. "transparent" color keyword
676
+ transparent: [ null, null, null, 0 ],
677
+
678
+ _default: "#ffffff"
679
+ };
680
+
681
+ })( jQuery );
682
+
683
+
684
+ /******************************************************************************/
685
+ /****************************** CLASS ANIMATIONS ******************************/
686
+ /******************************************************************************/
687
+ (function() {
688
+
689
+ var classAnimationActions = [ "add", "remove", "toggle" ],
690
+ shorthandStyles = {
691
+ border: 1,
692
+ borderBottom: 1,
693
+ borderColor: 1,
694
+ borderLeft: 1,
695
+ borderRight: 1,
696
+ borderTop: 1,
697
+ borderWidth: 1,
698
+ margin: 1,
699
+ padding: 1
700
+ };
701
+
702
+ $.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
703
+ $.fx.step[ prop ] = function( fx ) {
704
+ if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
705
+ jQuery.style( fx.elem, prop, fx.end );
706
+ fx.setAttr = true;
707
+ }
708
+ };
709
+ });
710
+
711
+ function getElementStyles( elem ) {
712
+ var key, len,
713
+ style = elem.ownerDocument.defaultView ?
714
+ elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
715
+ elem.currentStyle,
716
+ styles = {};
717
+
718
+ if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
719
+ len = style.length;
720
+ while ( len-- ) {
721
+ key = style[ len ];
722
+ if ( typeof style[ key ] === "string" ) {
723
+ styles[ $.camelCase( key ) ] = style[ key ];
724
+ }
725
+ }
726
+ // support: Opera, IE <9
727
+ } else {
728
+ for ( key in style ) {
729
+ if ( typeof style[ key ] === "string" ) {
730
+ styles[ key ] = style[ key ];
731
+ }
732
+ }
733
+ }
734
+
735
+ return styles;
736
+ }
737
+
738
+
739
+ function styleDifference( oldStyle, newStyle ) {
740
+ var diff = {},
741
+ name, value;
742
+
743
+ for ( name in newStyle ) {
744
+ value = newStyle[ name ];
745
+ if ( oldStyle[ name ] !== value ) {
746
+ if ( !shorthandStyles[ name ] ) {
747
+ if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
748
+ diff[ name ] = value;
749
+ }
750
+ }
751
+ }
752
+ }
753
+
754
+ return diff;
755
+ }
756
+
757
+ // support: jQuery <1.8
758
+ if ( !$.fn.addBack ) {
759
+ $.fn.addBack = function( selector ) {
760
+ return this.add( selector == null ?
761
+ this.prevObject : this.prevObject.filter( selector )
762
+ );
763
+ };
764
+ }
765
+
766
+ $.effects.animateClass = function( value, duration, easing, callback ) {
767
+ var o = $.speed( duration, easing, callback );
768
+
769
+ return this.queue( function() {
770
+ var animated = $( this ),
771
+ baseClass = animated.attr( "class" ) || "",
772
+ applyClassChange,
773
+ allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
774
+
775
+ // map the animated objects to store the original styles.
776
+ allAnimations = allAnimations.map(function() {
777
+ var el = $( this );
778
+ return {
779
+ el: el,
780
+ start: getElementStyles( this )
781
+ };
782
+ });
783
+
784
+ // apply class change
785
+ applyClassChange = function() {
786
+ $.each( classAnimationActions, function(i, action) {
787
+ if ( value[ action ] ) {
788
+ animated[ action + "Class" ]( value[ action ] );
789
+ }
790
+ });
791
+ };
792
+ applyClassChange();
793
+
794
+ // map all animated objects again - calculate new styles and diff
795
+ allAnimations = allAnimations.map(function() {
796
+ this.end = getElementStyles( this.el[ 0 ] );
797
+ this.diff = styleDifference( this.start, this.end );
798
+ return this;
799
+ });
800
+
801
+ // apply original class
802
+ animated.attr( "class", baseClass );
803
+
804
+ // map all animated objects again - this time collecting a promise
805
+ allAnimations = allAnimations.map(function() {
806
+ var styleInfo = this,
807
+ dfd = $.Deferred(),
808
+ opts = $.extend({}, o, {
809
+ queue: false,
810
+ complete: function() {
811
+ dfd.resolve( styleInfo );
812
+ }
813
+ });
814
+
815
+ this.el.animate( this.diff, opts );
816
+ return dfd.promise();
817
+ });
818
+
819
+ // once all animations have completed:
820
+ $.when.apply( $, allAnimations.get() ).done(function() {
821
+
822
+ // set the final class
823
+ applyClassChange();
824
+
825
+ // for each animated element,
826
+ // clear all css properties that were animated
827
+ $.each( arguments, function() {
828
+ var el = this.el;
829
+ $.each( this.diff, function(key) {
830
+ el.css( key, "" );
831
+ });
832
+ });
833
+
834
+ // this is guarnteed to be there if you use jQuery.speed()
835
+ // it also handles dequeuing the next anim...
836
+ o.complete.call( animated[ 0 ] );
837
+ });
838
+ });
839
+ };
840
+
841
+ $.fn.extend({
842
+ addClass: (function( orig ) {
843
+ return function( classNames, speed, easing, callback ) {
844
+ return speed ?
845
+ $.effects.animateClass.call( this,
846
+ { add: classNames }, speed, easing, callback ) :
847
+ orig.apply( this, arguments );
848
+ };
849
+ })( $.fn.addClass ),
850
+
851
+ removeClass: (function( orig ) {
852
+ return function( classNames, speed, easing, callback ) {
853
+ return arguments.length > 1 ?
854
+ $.effects.animateClass.call( this,
855
+ { remove: classNames }, speed, easing, callback ) :
856
+ orig.apply( this, arguments );
857
+ };
858
+ })( $.fn.removeClass ),
859
+
860
+ toggleClass: (function( orig ) {
861
+ return function( classNames, force, speed, easing, callback ) {
862
+ if ( typeof force === "boolean" || force === undefined ) {
863
+ if ( !speed ) {
864
+ // without speed parameter
865
+ return orig.apply( this, arguments );
866
+ } else {
867
+ return $.effects.animateClass.call( this,
868
+ (force ? { add: classNames } : { remove: classNames }),
869
+ speed, easing, callback );
870
+ }
871
+ } else {
872
+ // without force parameter
873
+ return $.effects.animateClass.call( this,
874
+ { toggle: classNames }, force, speed, easing );
875
+ }
876
+ };
877
+ })( $.fn.toggleClass ),
878
+
879
+ switchClass: function( remove, add, speed, easing, callback) {
880
+ return $.effects.animateClass.call( this, {
881
+ add: add,
882
+ remove: remove
883
+ }, speed, easing, callback );
884
+ }
885
+ });
886
+
887
+ })();
888
+
889
+ /******************************************************************************/
890
+ /*********************************** EFFECTS **********************************/
891
+ /******************************************************************************/
892
+
893
+ (function() {
894
+
895
+ $.extend( $.effects, {
896
+ version: "1.10.3",
897
+
898
+ // Saves a set of properties in a data storage
899
+ save: function( element, set ) {
900
+ for( var i=0; i < set.length; i++ ) {
901
+ if ( set[ i ] !== null ) {
902
+ element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
903
+ }
904
+ }
905
+ },
906
+
907
+ // Restores a set of previously saved properties from a data storage
908
+ restore: function( element, set ) {
909
+ var val, i;
910
+ for( i=0; i < set.length; i++ ) {
911
+ if ( set[ i ] !== null ) {
912
+ val = element.data( dataSpace + set[ i ] );
913
+ // support: jQuery 1.6.2
914
+ // http://bugs.jquery.com/ticket/9917
915
+ // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
916
+ // We can't differentiate between "" and 0 here, so we just assume
917
+ // empty string since it's likely to be a more common value...
918
+ if ( val === undefined ) {
919
+ val = "";
920
+ }
921
+ element.css( set[ i ], val );
922
+ }
923
+ }
924
+ },
925
+
926
+ setMode: function( el, mode ) {
927
+ if (mode === "toggle") {
928
+ mode = el.is( ":hidden" ) ? "show" : "hide";
929
+ }
930
+ return mode;
931
+ },
932
+
933
+ // Translates a [top,left] array into a baseline value
934
+ // this should be a little more flexible in the future to handle a string & hash
935
+ getBaseline: function( origin, original ) {
936
+ var y, x;
937
+ switch ( origin[ 0 ] ) {
938
+ case "top": y = 0; break;
939
+ case "middle": y = 0.5; break;
940
+ case "bottom": y = 1; break;
941
+ default: y = origin[ 0 ] / original.height;
942
+ }
943
+ switch ( origin[ 1 ] ) {
944
+ case "left": x = 0; break;
945
+ case "center": x = 0.5; break;
946
+ case "right": x = 1; break;
947
+ default: x = origin[ 1 ] / original.width;
948
+ }
949
+ return {
950
+ x: x,
951
+ y: y
952
+ };
953
+ },
954
+
955
+ // Wraps the element around a wrapper that copies position properties
956
+ createWrapper: function( element ) {
957
+
958
+ // if the element is already wrapped, return it
959
+ if ( element.parent().is( ".ui-effects-wrapper" )) {
960
+ return element.parent();
961
+ }
962
+
963
+ // wrap the element
964
+ var props = {
965
+ width: element.outerWidth(true),
966
+ height: element.outerHeight(true),
967
+ "float": element.css( "float" )
968
+ },
969
+ wrapper = $( "<div></div>" )
970
+ .addClass( "ui-effects-wrapper" )
971
+ .css({
972
+ fontSize: "100%",
973
+ background: "transparent",
974
+ border: "none",
975
+ margin: 0,
976
+ padding: 0
977
+ }),
978
+ // Store the size in case width/height are defined in % - Fixes #5245
979
+ size = {
980
+ width: element.width(),
981
+ height: element.height()
982
+ },
983
+ active = document.activeElement;
984
+
985
+ // support: Firefox
986
+ // Firefox incorrectly exposes anonymous content
987
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
988
+ try {
989
+ active.id;
990
+ } catch( e ) {
991
+ active = document.body;
992
+ }
993
+
994
+ element.wrap( wrapper );
995
+
996
+ // Fixes #7595 - Elements lose focus when wrapped.
997
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
998
+ $( active ).focus();
999
+ }
1000
+
1001
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
1002
+
1003
+ // transfer positioning properties to the wrapper
1004
+ if ( element.css( "position" ) === "static" ) {
1005
+ wrapper.css({ position: "relative" });
1006
+ element.css({ position: "relative" });
1007
+ } else {
1008
+ $.extend( props, {
1009
+ position: element.css( "position" ),
1010
+ zIndex: element.css( "z-index" )
1011
+ });
1012
+ $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
1013
+ props[ pos ] = element.css( pos );
1014
+ if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
1015
+ props[ pos ] = "auto";
1016
+ }
1017
+ });
1018
+ element.css({
1019
+ position: "relative",
1020
+ top: 0,
1021
+ left: 0,
1022
+ right: "auto",
1023
+ bottom: "auto"
1024
+ });
1025
+ }
1026
+ element.css(size);
1027
+
1028
+ return wrapper.css( props ).show();
1029
+ },
1030
+
1031
+ removeWrapper: function( element ) {
1032
+ var active = document.activeElement;
1033
+
1034
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
1035
+ element.parent().replaceWith( element );
1036
+
1037
+ // Fixes #7595 - Elements lose focus when wrapped.
1038
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
1039
+ $( active ).focus();
1040
+ }
1041
+ }
1042
+
1043
+
1044
+ return element;
1045
+ },
1046
+
1047
+ setTransition: function( element, list, factor, value ) {
1048
+ value = value || {};
1049
+ $.each( list, function( i, x ) {
1050
+ var unit = element.cssUnit( x );
1051
+ if ( unit[ 0 ] > 0 ) {
1052
+ value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
1053
+ }
1054
+ });
1055
+ return value;
1056
+ }
1057
+ });
1058
+
1059
+ // return an effect options object for the given parameters:
1060
+ function _normalizeArguments( effect, options, speed, callback ) {
1061
+
1062
+ // allow passing all options as the first parameter
1063
+ if ( $.isPlainObject( effect ) ) {
1064
+ options = effect;
1065
+ effect = effect.effect;
1066
+ }
1067
+
1068
+ // convert to an object
1069
+ effect = { effect: effect };
1070
+
1071
+ // catch (effect, null, ...)
1072
+ if ( options == null ) {
1073
+ options = {};
1074
+ }
1075
+
1076
+ // catch (effect, callback)
1077
+ if ( $.isFunction( options ) ) {
1078
+ callback = options;
1079
+ speed = null;
1080
+ options = {};
1081
+ }
1082
+
1083
+ // catch (effect, speed, ?)
1084
+ if ( typeof options === "number" || $.fx.speeds[ options ] ) {
1085
+ callback = speed;
1086
+ speed = options;
1087
+ options = {};
1088
+ }
1089
+
1090
+ // catch (effect, options, callback)
1091
+ if ( $.isFunction( speed ) ) {
1092
+ callback = speed;
1093
+ speed = null;
1094
+ }
1095
+
1096
+ // add options to effect
1097
+ if ( options ) {
1098
+ $.extend( effect, options );
1099
+ }
1100
+
1101
+ speed = speed || options.duration;
1102
+ effect.duration = $.fx.off ? 0 :
1103
+ typeof speed === "number" ? speed :
1104
+ speed in $.fx.speeds ? $.fx.speeds[ speed ] :
1105
+ $.fx.speeds._default;
1106
+
1107
+ effect.complete = callback || options.complete;
1108
+
1109
+ return effect;
1110
+ }
1111
+
1112
+ function standardAnimationOption( option ) {
1113
+ // Valid standard speeds (nothing, number, named speed)
1114
+ if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
1115
+ return true;
1116
+ }
1117
+
1118
+ // Invalid strings - treat as "normal" speed
1119
+ if ( typeof option === "string" && !$.effects.effect[ option ] ) {
1120
+ return true;
1121
+ }
1122
+
1123
+ // Complete callback
1124
+ if ( $.isFunction( option ) ) {
1125
+ return true;
1126
+ }
1127
+
1128
+ // Options hash (but not naming an effect)
1129
+ if ( typeof option === "object" && !option.effect ) {
1130
+ return true;
1131
+ }
1132
+
1133
+ // Didn't match any standard API
1134
+ return false;
1135
+ }
1136
+
1137
+ $.fn.extend({
1138
+ effect: function( /* effect, options, speed, callback */ ) {
1139
+ var args = _normalizeArguments.apply( this, arguments ),
1140
+ mode = args.mode,
1141
+ queue = args.queue,
1142
+ effectMethod = $.effects.effect[ args.effect ];
1143
+
1144
+ if ( $.fx.off || !effectMethod ) {
1145
+ // delegate to the original method (e.g., .show()) if possible
1146
+ if ( mode ) {
1147
+ return this[ mode ]( args.duration, args.complete );
1148
+ } else {
1149
+ return this.each( function() {
1150
+ if ( args.complete ) {
1151
+ args.complete.call( this );
1152
+ }
1153
+ });
1154
+ }
1155
+ }
1156
+
1157
+ function run( next ) {
1158
+ var elem = $( this ),
1159
+ complete = args.complete,
1160
+ mode = args.mode;
1161
+
1162
+ function done() {
1163
+ if ( $.isFunction( complete ) ) {
1164
+ complete.call( elem[0] );
1165
+ }
1166
+ if ( $.isFunction( next ) ) {
1167
+ next();
1168
+ }
1169
+ }
1170
+
1171
+ // If the element already has the correct final state, delegate to
1172
+ // the core methods so the internal tracking of "olddisplay" works.
1173
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
1174
+ elem[ mode ]();
1175
+ done();
1176
+ } else {
1177
+ effectMethod.call( elem[0], args, done );
1178
+ }
1179
+ }
1180
+
1181
+ return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
1182
+ },
1183
+
1184
+ show: (function( orig ) {
1185
+ return function( option ) {
1186
+ if ( standardAnimationOption( option ) ) {
1187
+ return orig.apply( this, arguments );
1188
+ } else {
1189
+ var args = _normalizeArguments.apply( this, arguments );
1190
+ args.mode = "show";
1191
+ return this.effect.call( this, args );
1192
+ }
1193
+ };
1194
+ })( $.fn.show ),
1195
+
1196
+ hide: (function( orig ) {
1197
+ return function( option ) {
1198
+ if ( standardAnimationOption( option ) ) {
1199
+ return orig.apply( this, arguments );
1200
+ } else {
1201
+ var args = _normalizeArguments.apply( this, arguments );
1202
+ args.mode = "hide";
1203
+ return this.effect.call( this, args );
1204
+ }
1205
+ };
1206
+ })( $.fn.hide ),
1207
+
1208
+ toggle: (function( orig ) {
1209
+ return function( option ) {
1210
+ if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
1211
+ return orig.apply( this, arguments );
1212
+ } else {
1213
+ var args = _normalizeArguments.apply( this, arguments );
1214
+ args.mode = "toggle";
1215
+ return this.effect.call( this, args );
1216
+ }
1217
+ };
1218
+ })( $.fn.toggle ),
1219
+
1220
+ // helper functions
1221
+ cssUnit: function(key) {
1222
+ var style = this.css( key ),
1223
+ val = [];
1224
+
1225
+ $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
1226
+ if ( style.indexOf( unit ) > 0 ) {
1227
+ val = [ parseFloat( style ), unit ];
1228
+ }
1229
+ });
1230
+ return val;
1231
+ }
1232
+ });
1233
+
1234
+ })();
1235
+
1236
+ /******************************************************************************/
1237
+ /*********************************** EASING ***********************************/
1238
+ /******************************************************************************/
1239
+
1240
+ (function() {
1241
+
1242
+ // based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
1243
+
1244
+ var baseEasings = {};
1245
+
1246
+ $.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
1247
+ baseEasings[ name ] = function( p ) {
1248
+ return Math.pow( p, i + 2 );
1249
+ };
1250
+ });
1251
+
1252
+ $.extend( baseEasings, {
1253
+ Sine: function ( p ) {
1254
+ return 1 - Math.cos( p * Math.PI / 2 );
1255
+ },
1256
+ Circ: function ( p ) {
1257
+ return 1 - Math.sqrt( 1 - p * p );
1258
+ },
1259
+ Elastic: function( p ) {
1260
+ return p === 0 || p === 1 ? p :
1261
+ -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
1262
+ },
1263
+ Back: function( p ) {
1264
+ return p * p * ( 3 * p - 2 );
1265
+ },
1266
+ Bounce: function ( p ) {
1267
+ var pow2,
1268
+ bounce = 4;
1269
+
1270
+ while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
1271
+ return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
1272
+ }
1273
+ });
1274
+
1275
+ $.each( baseEasings, function( name, easeIn ) {
1276
+ $.easing[ "easeIn" + name ] = easeIn;
1277
+ $.easing[ "easeOut" + name ] = function( p ) {
1278
+ return 1 - easeIn( 1 - p );
1279
+ };
1280
+ $.easing[ "easeInOut" + name ] = function( p ) {
1281
+ return p < 0.5 ?
1282
+ easeIn( p * 2 ) / 2 :
1283
+ 1 - easeIn( p * -2 + 2 ) / 2;
1284
+ };
1285
+ });
1286
+
1287
+ })();
1288
+
1289
+ })(jQuery);