fomantic-ui 2.9.1-beta.16 → 2.9.1-beta.18

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.
Files changed (252) hide show
  1. package/.eslintrc.js +109 -0
  2. package/.github/workflows/ci.yml +13 -3
  3. package/dist/components/accordion.css +1 -1
  4. package/dist/components/accordion.js +571 -598
  5. package/dist/components/accordion.min.css +1 -1
  6. package/dist/components/accordion.min.js +1 -1
  7. package/dist/components/ad.css +1 -1
  8. package/dist/components/ad.min.css +1 -1
  9. package/dist/components/api.js +1164 -1186
  10. package/dist/components/api.min.js +1 -1
  11. package/dist/components/breadcrumb.css +1 -1
  12. package/dist/components/breadcrumb.min.css +1 -1
  13. package/dist/components/button.css +1 -1
  14. package/dist/components/button.min.css +1 -1
  15. package/dist/components/calendar.css +1 -1
  16. package/dist/components/calendar.js +1897 -1818
  17. package/dist/components/calendar.min.css +1 -1
  18. package/dist/components/calendar.min.js +1 -1
  19. package/dist/components/card.css +1 -1
  20. package/dist/components/card.min.css +1 -1
  21. package/dist/components/checkbox.css +1 -1
  22. package/dist/components/checkbox.js +844 -841
  23. package/dist/components/checkbox.min.css +1 -1
  24. package/dist/components/checkbox.min.js +1 -1
  25. package/dist/components/comment.css +1 -1
  26. package/dist/components/comment.min.css +1 -1
  27. package/dist/components/container.css +3 -1
  28. package/dist/components/container.min.css +2 -2
  29. package/dist/components/dimmer.css +1 -1
  30. package/dist/components/dimmer.js +710 -737
  31. package/dist/components/dimmer.min.css +1 -1
  32. package/dist/components/dimmer.min.js +1 -1
  33. package/dist/components/divider.css +1 -1
  34. package/dist/components/divider.min.css +1 -1
  35. package/dist/components/dropdown.css +11 -8
  36. package/dist/components/dropdown.js +4163 -4234
  37. package/dist/components/dropdown.min.css +2 -2
  38. package/dist/components/dropdown.min.js +2 -2
  39. package/dist/components/embed.css +1 -1
  40. package/dist/components/embed.js +653 -675
  41. package/dist/components/embed.min.css +1 -1
  42. package/dist/components/embed.min.js +1 -1
  43. package/dist/components/feed.css +1 -1
  44. package/dist/components/feed.min.css +1 -1
  45. package/dist/components/flag.css +1 -1
  46. package/dist/components/flag.min.css +1 -1
  47. package/dist/components/flyout.css +6 -3
  48. package/dist/components/flyout.js +1466 -1467
  49. package/dist/components/flyout.min.css +2 -2
  50. package/dist/components/flyout.min.js +1 -1
  51. package/dist/components/form.css +1 -1
  52. package/dist/components/form.js +1981 -2004
  53. package/dist/components/form.min.css +1 -1
  54. package/dist/components/form.min.js +1 -1
  55. package/dist/components/grid.css +1 -1
  56. package/dist/components/grid.min.css +1 -1
  57. package/dist/components/header.css +1 -1
  58. package/dist/components/header.min.css +1 -1
  59. package/dist/components/icon.css +1 -1
  60. package/dist/components/icon.min.css +1 -1
  61. package/dist/components/image.css +1 -1
  62. package/dist/components/image.min.css +1 -1
  63. package/dist/components/input.css +1 -1
  64. package/dist/components/input.min.css +1 -1
  65. package/dist/components/item.css +1 -1
  66. package/dist/components/item.min.css +1 -1
  67. package/dist/components/label.css +1 -1
  68. package/dist/components/label.min.css +1 -1
  69. package/dist/components/list.css +1 -1
  70. package/dist/components/list.min.css +1 -1
  71. package/dist/components/loader.css +1 -1
  72. package/dist/components/loader.min.css +1 -1
  73. package/dist/components/message.css +1 -1
  74. package/dist/components/message.min.css +1 -1
  75. package/dist/components/modal.css +7 -1
  76. package/dist/components/modal.js +1493 -1487
  77. package/dist/components/modal.min.css +2 -2
  78. package/dist/components/modal.min.js +1 -1
  79. package/dist/components/nag.css +1 -1
  80. package/dist/components/nag.js +520 -529
  81. package/dist/components/nag.min.css +1 -1
  82. package/dist/components/nag.min.js +1 -1
  83. package/dist/components/placeholder.css +1 -1
  84. package/dist/components/placeholder.min.css +1 -1
  85. package/dist/components/popup.css +1 -1
  86. package/dist/components/popup.js +1439 -1456
  87. package/dist/components/popup.min.css +1 -1
  88. package/dist/components/popup.min.js +1 -1
  89. package/dist/components/progress.css +1 -1
  90. package/dist/components/progress.js +971 -997
  91. package/dist/components/progress.min.css +1 -1
  92. package/dist/components/progress.min.js +1 -1
  93. package/dist/components/rail.css +1 -1
  94. package/dist/components/rail.min.css +1 -1
  95. package/dist/components/rating.css +1 -1
  96. package/dist/components/rating.js +508 -524
  97. package/dist/components/rating.min.css +1 -1
  98. package/dist/components/rating.min.js +1 -1
  99. package/dist/components/reset.css +1 -1
  100. package/dist/components/reset.min.css +1 -1
  101. package/dist/components/reveal.css +1 -1
  102. package/dist/components/reveal.min.css +1 -1
  103. package/dist/components/search.css +3 -1
  104. package/dist/components/search.js +1500 -1534
  105. package/dist/components/search.min.css +2 -2
  106. package/dist/components/search.min.js +1 -1
  107. package/dist/components/segment.css +3 -1
  108. package/dist/components/segment.min.css +2 -2
  109. package/dist/components/shape.css +1 -1
  110. package/dist/components/shape.js +794 -809
  111. package/dist/components/shape.min.css +1 -1
  112. package/dist/components/shape.min.js +1 -1
  113. package/dist/components/sidebar.css +3 -1
  114. package/dist/components/sidebar.js +1079 -1104
  115. package/dist/components/sidebar.min.css +2 -2
  116. package/dist/components/sidebar.min.js +1 -1
  117. package/dist/components/site.css +1 -1
  118. package/dist/components/site.js +457 -472
  119. package/dist/components/site.min.css +1 -1
  120. package/dist/components/site.min.js +1 -1
  121. package/dist/components/slider.js +1289 -1311
  122. package/dist/components/slider.min.js +1 -1
  123. package/dist/components/state.js +641 -657
  124. package/dist/components/state.min.js +1 -1
  125. package/dist/components/statistic.css +1 -1
  126. package/dist/components/statistic.min.css +1 -1
  127. package/dist/components/step.css +1 -1
  128. package/dist/components/step.min.css +1 -1
  129. package/dist/components/sticky.css +1 -1
  130. package/dist/components/sticky.js +859 -903
  131. package/dist/components/sticky.min.css +1 -1
  132. package/dist/components/sticky.min.js +1 -1
  133. package/dist/components/tab.css +1 -1
  134. package/dist/components/tab.js +923 -963
  135. package/dist/components/tab.min.css +1 -1
  136. package/dist/components/tab.min.js +1 -1
  137. package/dist/components/table.css +5 -1
  138. package/dist/components/table.min.css +2 -2
  139. package/dist/components/text.css +1 -1
  140. package/dist/components/text.min.css +1 -1
  141. package/dist/components/toast.css +1 -1
  142. package/dist/components/toast.js +889 -891
  143. package/dist/components/toast.min.css +1 -1
  144. package/dist/components/toast.min.js +1 -1
  145. package/dist/components/transition.css +1 -1
  146. package/dist/components/transition.js +1043 -1077
  147. package/dist/components/transition.min.css +1 -1
  148. package/dist/components/transition.min.js +1 -1
  149. package/dist/components/visibility.js +1222 -1244
  150. package/dist/components/visibility.min.js +1 -1
  151. package/dist/semantic.css +84 -60
  152. package/dist/semantic.js +29033 -29475
  153. package/dist/semantic.min.css +2 -2
  154. package/dist/semantic.min.js +2 -2
  155. package/examples/assets/show-examples.js +13 -13
  156. package/gulpfile.js +9 -10
  157. package/package.json +5 -2
  158. package/scripts/nightly-version.js +81 -75
  159. package/src/definitions/behaviors/api.js +1163 -1185
  160. package/src/definitions/behaviors/form.js +1980 -2003
  161. package/src/definitions/behaviors/state.js +647 -663
  162. package/src/definitions/behaviors/visibility.js +1221 -1243
  163. package/src/definitions/collections/table.less +2 -0
  164. package/src/definitions/elements/container.less +1 -0
  165. package/src/definitions/elements/segment.less +1 -0
  166. package/src/definitions/globals/site.js +456 -471
  167. package/src/definitions/modules/accordion.js +570 -597
  168. package/src/definitions/modules/calendar.js +1896 -1817
  169. package/src/definitions/modules/checkbox.js +849 -846
  170. package/src/definitions/modules/dimmer.js +709 -736
  171. package/src/definitions/modules/dropdown.js +4162 -4233
  172. package/src/definitions/modules/dropdown.less +5 -8
  173. package/src/definitions/modules/embed.js +652 -674
  174. package/src/definitions/modules/flyout.js +1465 -1466
  175. package/src/definitions/modules/flyout.less +15 -12
  176. package/src/definitions/modules/modal.js +1492 -1486
  177. package/src/definitions/modules/modal.less +3 -0
  178. package/src/definitions/modules/nag.js +519 -528
  179. package/src/definitions/modules/popup.js +1438 -1455
  180. package/src/definitions/modules/progress.js +970 -996
  181. package/src/definitions/modules/rating.js +507 -523
  182. package/src/definitions/modules/search.js +1499 -1533
  183. package/src/definitions/modules/search.less +1 -0
  184. package/src/definitions/modules/shape.js +801 -816
  185. package/src/definitions/modules/sidebar.js +1078 -1103
  186. package/src/definitions/modules/sidebar.less +1 -0
  187. package/src/definitions/modules/slider.js +1288 -1310
  188. package/src/definitions/modules/sticky.js +875 -919
  189. package/src/definitions/modules/tab.js +922 -962
  190. package/src/definitions/modules/toast.js +888 -890
  191. package/src/definitions/modules/transition.js +1048 -1082
  192. package/src/themes/default/elements/container.variables +0 -7
  193. package/src/themes/default/elements/segment.variables +0 -7
  194. package/src/themes/default/globals/site.variables +7 -0
  195. package/src/themes/default/globals/variation.variables +1 -0
  196. package/tasks/admin/components/create.js +274 -276
  197. package/tasks/admin/components/init.js +123 -130
  198. package/tasks/admin/components/update.js +149 -157
  199. package/tasks/admin/distributions/create.js +184 -187
  200. package/tasks/admin/distributions/init.js +123 -130
  201. package/tasks/admin/distributions/update.js +145 -152
  202. package/tasks/admin/publish.js +5 -7
  203. package/tasks/admin/register.js +36 -38
  204. package/tasks/admin/release.js +8 -10
  205. package/tasks/build/assets.js +42 -39
  206. package/tasks/build/css.js +225 -216
  207. package/tasks/build/javascript.js +118 -113
  208. package/tasks/build.js +10 -10
  209. package/tasks/check-install.js +14 -16
  210. package/tasks/clean.js +5 -5
  211. package/tasks/collections/admin.js +34 -36
  212. package/tasks/collections/build.js +18 -20
  213. package/tasks/collections/docs.js +9 -11
  214. package/tasks/collections/install.js +9 -11
  215. package/tasks/collections/rtl.js +9 -11
  216. package/tasks/collections/various.js +8 -10
  217. package/tasks/config/admin/github.js +17 -17
  218. package/tasks/config/admin/oauth.example.js +4 -4
  219. package/tasks/config/admin/release.js +98 -98
  220. package/tasks/config/admin/templates/component-package.js +9 -10
  221. package/tasks/config/admin/templates/css-package.js +18 -20
  222. package/tasks/config/admin/templates/less-package.js +11 -13
  223. package/tasks/config/defaults.js +116 -116
  224. package/tasks/config/docs.js +23 -23
  225. package/tasks/config/npm/gulpfile.js +8 -9
  226. package/tasks/config/project/config.js +127 -134
  227. package/tasks/config/project/install.js +715 -713
  228. package/tasks/config/project/release.js +32 -38
  229. package/tasks/config/tasks.js +163 -164
  230. package/tasks/config/user.js +23 -29
  231. package/tasks/docs/build.js +97 -95
  232. package/tasks/docs/metadata.js +90 -96
  233. package/tasks/docs/serve.js +80 -81
  234. package/tasks/install.js +370 -378
  235. package/tasks/rtl/build.js +2 -2
  236. package/tasks/rtl/watch.js +2 -2
  237. package/tasks/version.js +4 -4
  238. package/tasks/watch.js +28 -30
  239. package/test/meteor/assets.js +10 -13
  240. package/test/meteor/fonts.js +12 -13
  241. package/test/modules/accordion.spec.js +6 -8
  242. package/test/modules/checkbox.spec.js +5 -7
  243. package/test/modules/dropdown.spec.js +5 -7
  244. package/test/modules/modal.spec.js +6 -8
  245. package/test/modules/module.spec.js +158 -178
  246. package/test/modules/popup.spec.js +5 -7
  247. package/test/modules/search.spec.js +5 -7
  248. package/test/modules/shape.spec.js +5 -7
  249. package/test/modules/sidebar.spec.js +5 -7
  250. package/test/modules/tab.spec.js +6 -8
  251. package/test/modules/transition.spec.js +5 -7
  252. package/test/modules/video.spec.js +5 -7
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Fomantic-UI 2.9.1-beta.16+7071e59 - Shape
2
+ * # Fomantic-UI 2.9.1-beta.18+935e235 - Shape
3
3
  * https://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -8,841 +8,826 @@
8
8
  *
9
9
  */
10
10
 
11
- ;(function ($, window, document, undefined) {
12
-
13
- 'use strict';
14
-
15
- function isFunction(obj) {
16
- return typeof obj === "function" && typeof obj.nodeType !== "number";
17
- }
18
-
19
- window = (typeof window != 'undefined' && window.Math == Math)
20
- ? window
21
- : (typeof self != 'undefined' && self.Math == Math)
22
- ? self
23
- : Function('return this')()
24
- ;
25
-
26
- $.fn.shape = function(parameters) {
27
- var
28
- $allModules = $(this),
29
-
30
- time = new Date().getTime(),
31
- performance = [],
32
-
33
- query = arguments[0],
34
- methodInvoked = (typeof query == 'string'),
35
- queryArguments = [].slice.call(arguments, 1),
36
-
37
- requestAnimationFrame = window.requestAnimationFrame
38
- || window.mozRequestAnimationFrame
39
- || window.webkitRequestAnimationFrame
40
- || window.msRequestAnimationFrame
41
- || function(callback) { setTimeout(callback, 0); },
42
-
43
- returnedValue
44
- ;
45
-
46
- $allModules
47
- .each(function() {
48
- var
49
- moduleSelector = $allModules.selector || '',
50
- settings = ( $.isPlainObject(parameters) )
51
- ? $.extend(true, {}, $.fn.shape.settings, parameters)
52
- : $.extend({}, $.fn.shape.settings),
53
-
54
- // internal aliases
55
- namespace = settings.namespace,
56
- selector = settings.selector,
57
- error = settings.error,
58
- className = settings.className,
59
-
60
- // define namespaces for modules
61
- eventNamespace = '.' + namespace,
62
- moduleNamespace = 'module-' + namespace,
63
-
64
- // selector cache
65
- $module = $(this),
66
- $sides = $module.find('>' + selector.sides),
67
- $side = $sides.find('>' + selector.side),
68
-
69
- // private variables
70
- nextIndex = false,
71
- $activeSide,
72
- $nextSide,
73
-
74
- // standard module
75
- element = this,
76
- instance = $module.data(moduleNamespace),
77
- module
78
- ;
79
-
80
- module = {
81
-
82
- initialize: function() {
83
- module.verbose('Initializing module for', element);
84
- module.set.defaultSide();
85
- module.instantiate();
86
- },
87
-
88
- instantiate: function() {
89
- module.verbose('Storing instance of module', module);
90
- instance = module;
91
- $module
92
- .data(moduleNamespace, instance)
93
- ;
94
- },
95
-
96
- destroy: function() {
97
- module.verbose('Destroying previous module for', element);
98
- $module
99
- .removeData(moduleNamespace)
100
- .off(eventNamespace)
101
- ;
102
- },
103
-
104
- refresh: function() {
105
- module.verbose('Refreshing selector cache for', element);
106
- $module = $(element);
107
- $sides = $(this).find(selector.sides);
108
- $side = $(this).find(selector.side);
109
- },
110
-
111
- repaint: function() {
112
- module.verbose('Forcing repaint event');
113
- var
114
- shape = $sides[0] || document.createElement('div'),
115
- fakeAssignment = shape.offsetWidth
116
- ;
117
- },
11
+ (function ($, window, document, undefined) {
12
+ 'use strict';
118
13
 
119
- animate: function(propertyObject, callback) {
120
- module.verbose('Animating box with properties', propertyObject);
121
- callback = callback || function(event) {
122
- module.verbose('Executing animation callback');
123
- if(event !== undefined) {
124
- event.stopPropagation();
125
- }
126
- module.reset();
127
- module.set.active();
128
- };
129
- settings.onBeforeChange.call($nextSide[0]);
130
- if(module.get.transitionEvent()) {
131
- module.verbose('Starting CSS animation');
132
- $module
133
- .addClass(className.animating)
134
- ;
135
- $sides
136
- .css(propertyObject)
137
- .one(module.get.transitionEvent(), callback)
138
- ;
139
- module.set.duration(settings.duration);
140
- requestAnimationFrame(function() {
141
- $module
142
- .addClass(className.animating)
143
- ;
144
- $activeSide
145
- .addClass(className.hidden)
146
- ;
147
- });
148
- }
149
- else {
150
- callback();
151
- }
152
- },
14
+ function isFunction(obj) {
15
+ return typeof obj === 'function' && typeof obj.nodeType !== 'number';
16
+ }
153
17
 
154
- queue: function(method) {
155
- module.debug('Queueing animation of', method);
156
- $sides
157
- .one(module.get.transitionEvent(), function() {
158
- module.debug('Executing queued animation');
159
- setTimeout(function(){
160
- $module.shape(method);
161
- }, 0);
162
- })
163
- ;
164
- },
18
+ window = (typeof window != 'undefined' && window.Math == Math)
19
+ ? window
20
+ : (typeof self != 'undefined' && self.Math == Math)
21
+ ? self
22
+ : Function('return this')();
165
23
 
166
- reset: function() {
167
- module.verbose('Animating states reset');
168
- $module
169
- .removeClass(className.animating)
170
- .attr('style', '')
171
- .removeAttr('style')
172
- ;
173
- // removeAttr style does not consistently work in safari
174
- $sides
175
- .attr('style', '')
176
- .removeAttr('style')
177
- ;
178
- $side
179
- .attr('style', '')
180
- .removeAttr('style')
181
- .removeClass(className.hidden)
182
- ;
183
- $nextSide
184
- .removeClass(className.animating)
185
- .attr('style', '')
186
- .removeAttr('style')
187
- ;
188
- },
24
+ $.fn.shape = function (parameters) {
25
+ var
26
+ $allModules = $(this),
189
27
 
190
- is: {
191
- complete: function() {
192
- return ($side.filter('.' + className.active)[0] == $nextSide[0]);
193
- },
194
- animating: function() {
195
- return $module.hasClass(className.animating);
196
- },
197
- hidden: function() {
198
- return $module.closest(':hidden').length > 0;
199
- }
200
- },
28
+ time = new Date().getTime(),
29
+ performance = [],
201
30
 
202
- set: {
31
+ query = arguments[0],
32
+ methodInvoked = (typeof query == 'string'),
33
+ queryArguments = [].slice.call(arguments, 1),
203
34
 
204
- defaultSide: function() {
205
- $activeSide = $side.filter('.' + settings.className.active);
206
- $nextSide = ( $activeSide.next(selector.side).length > 0 )
207
- ? $activeSide.next(selector.side)
208
- : $side.first()
209
- ;
210
- nextIndex = false;
211
- module.verbose('Active side set to', $activeSide);
212
- module.verbose('Next side set to', $nextSide);
213
- },
214
-
215
- duration: function(duration) {
216
- duration = duration || settings.duration;
217
- duration = (typeof duration == 'number')
218
- ? duration + 'ms'
219
- : duration
220
- ;
221
- module.verbose('Setting animation duration', duration);
222
- if(settings.duration || settings.duration === 0) {
223
- $sides.add($side)
224
- .css({
225
- '-webkit-transition-duration': duration,
226
- '-moz-transition-duration': duration,
227
- '-ms-transition-duration': duration,
228
- '-o-transition-duration': duration,
229
- 'transition-duration': duration
230
- })
231
- ;
232
- }
233
- },
35
+ requestAnimationFrame = window.requestAnimationFrame
36
+ || window.mozRequestAnimationFrame
37
+ || window.webkitRequestAnimationFrame
38
+ || window.msRequestAnimationFrame
39
+ || function (callback) {
40
+ setTimeout(callback, 0);
41
+ },
234
42
 
235
- currentStageSize: function() {
236
- var
237
- $activeSide = $side.filter('.' + settings.className.active),
238
- width = $activeSide.outerWidth(true),
239
- height = $activeSide.outerHeight(true)
240
- ;
241
- $module
242
- .css({
243
- width: width,
244
- height: height
245
- })
246
- ;
247
- },
43
+ returnedValue
44
+ ;
248
45
 
249
- stageSize: function() {
46
+ $allModules.each(function () {
250
47
  var
251
- $clone = $module.clone().addClass(className.loading),
252
- $side = $clone.find('>' + selector.sides + '>' + selector.side),
253
- $activeSide = $side.filter('.' + settings.className.active),
254
- $nextSide = (nextIndex)
255
- ? $side.eq(nextIndex)
256
- : ( $activeSide.next(selector.side).length > 0 )
257
- ? $activeSide.next(selector.side)
258
- : $side.first(),
259
- newWidth = (settings.width === 'next')
260
- ? $nextSide.outerWidth(true)
261
- : (settings.width === 'initial')
262
- ? $module.width()
263
- : settings.width,
264
- newHeight = (settings.height === 'next')
265
- ? $nextSide.outerHeight(true)
266
- : (settings.height === 'initial')
267
- ? $module.height()
268
- : settings.height
269
- ;
270
- $activeSide.removeClass(className.active);
271
- $nextSide.addClass(className.active);
272
- $clone.insertAfter($module);
273
- $clone.remove();
274
- if(settings.width !== 'auto') {
275
- $module.css('width', newWidth + settings.jitter);
276
- module.verbose('Specifying width during animation', newWidth);
277
- }
278
- if(settings.height !== 'auto') {
279
- $module.css('height', newHeight + settings.jitter);
280
- module.verbose('Specifying height during animation', newHeight);
281
- }
282
- },
283
-
284
- nextSide: function(selector) {
285
- nextIndex = selector;
286
- $nextSide = $side.filter(selector);
287
- nextIndex = $side.index($nextSide);
288
- if($nextSide.length === 0) {
289
- module.set.defaultSide();
290
- module.error(error.side);
291
- }
292
- module.verbose('Next side manually set to', $nextSide);
293
- },
294
-
295
- active: function() {
296
- module.verbose('Setting new side to active', $nextSide);
297
- $side
298
- .removeClass(className.active)
48
+ moduleSelector = $allModules.selector || '',
49
+ settings = ($.isPlainObject(parameters))
50
+ ? $.extend(true, {}, $.fn.shape.settings, parameters)
51
+ : $.extend({}, $.fn.shape.settings),
52
+
53
+ // internal aliases
54
+ namespace = settings.namespace,
55
+ selector = settings.selector,
56
+ error = settings.error,
57
+ className = settings.className,
58
+
59
+ // define namespaces for modules
60
+ eventNamespace = '.' + namespace,
61
+ moduleNamespace = 'module-' + namespace,
62
+
63
+ // selector cache
64
+ $module = $(this),
65
+ $sides = $module.find('>' + selector.sides),
66
+ $side = $sides.find('>' + selector.side),
67
+
68
+ // private variables
69
+ nextIndex = false,
70
+ $activeSide,
71
+ $nextSide,
72
+
73
+ // standard module
74
+ element = this,
75
+ instance = $module.data(moduleNamespace),
76
+ module
299
77
  ;
300
- $nextSide
301
- .addClass(className.active)
302
- ;
303
- settings.onChange.call($nextSide[0]);
304
- module.set.defaultSide();
305
- }
306
- },
307
78
 
308
- flip: {
309
- to: function(type,stage){
310
- if(module.is.hidden()) {
311
- module.debug('Module not visible', $nextSide);
312
- return;
313
- }
314
- if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
315
- module.debug('Side already visible', $nextSide);
316
- return;
317
- }
318
- var
319
- transform = module.get.transform[type]()
320
- ;
321
- if( !module.is.animating()) {
322
- module.debug('Flipping '+type, $nextSide);
323
- module.set.stageSize();
324
- module.stage[stage]();
325
- module.animate(transform);
326
- }
327
- else {
328
- module.queue('flip '+type);
79
+ module = {
80
+
81
+ initialize: function () {
82
+ module.verbose('Initializing module for', element);
83
+ module.set.defaultSide();
84
+ module.instantiate();
85
+ },
86
+
87
+ instantiate: function () {
88
+ module.verbose('Storing instance of module', module);
89
+ instance = module;
90
+ $module
91
+ .data(moduleNamespace, instance)
92
+ ;
93
+ },
94
+
95
+ destroy: function () {
96
+ module.verbose('Destroying previous module for', element);
97
+ $module
98
+ .removeData(moduleNamespace)
99
+ .off(eventNamespace)
100
+ ;
101
+ },
102
+
103
+ refresh: function () {
104
+ module.verbose('Refreshing selector cache for', element);
105
+ $module = $(element);
106
+ $sides = $(this).find(selector.sides);
107
+ $side = $(this).find(selector.side);
108
+ },
109
+
110
+ repaint: function () {
111
+ module.verbose('Forcing repaint event');
112
+ var
113
+ shape = $sides[0] || document.createElement('div'),
114
+ fakeAssignment = shape.offsetWidth
115
+ ;
116
+ },
117
+
118
+ animate: function (propertyObject, callback) {
119
+ module.verbose('Animating box with properties', propertyObject);
120
+ callback = callback || function (event) {
121
+ module.verbose('Executing animation callback');
122
+ if (event !== undefined) {
123
+ event.stopPropagation();
124
+ }
125
+ module.reset();
126
+ module.set.active();
127
+ };
128
+ settings.onBeforeChange.call($nextSide[0]);
129
+ if (module.get.transitionEvent()) {
130
+ module.verbose('Starting CSS animation');
131
+ $module
132
+ .addClass(className.animating)
133
+ ;
134
+ $sides
135
+ .css(propertyObject)
136
+ .one(module.get.transitionEvent(), callback)
137
+ ;
138
+ module.set.duration(settings.duration);
139
+ requestAnimationFrame(function () {
140
+ $module
141
+ .addClass(className.animating)
142
+ ;
143
+ $activeSide
144
+ .addClass(className.hidden)
145
+ ;
146
+ });
147
+ } else {
148
+ callback();
149
+ }
150
+ },
151
+
152
+ queue: function (method) {
153
+ module.debug('Queueing animation of', method);
154
+ $sides
155
+ .one(module.get.transitionEvent(), function () {
156
+ module.debug('Executing queued animation');
157
+ setTimeout(function () {
158
+ $module.shape(method);
159
+ }, 0);
160
+ })
161
+ ;
162
+ },
163
+
164
+ reset: function () {
165
+ module.verbose('Animating states reset');
166
+ $module
167
+ .removeClass(className.animating)
168
+ .attr('style', '')
169
+ .removeAttr('style')
170
+ ;
171
+ // removeAttr style does not consistently work in safari
172
+ $sides
173
+ .attr('style', '')
174
+ .removeAttr('style')
175
+ ;
176
+ $side
177
+ .attr('style', '')
178
+ .removeAttr('style')
179
+ .removeClass(className.hidden)
180
+ ;
181
+ $nextSide
182
+ .removeClass(className.animating)
183
+ .attr('style', '')
184
+ .removeAttr('style')
185
+ ;
186
+ },
187
+
188
+ is: {
189
+ complete: function () {
190
+ return ($side.filter('.' + className.active)[0] == $nextSide[0]);
191
+ },
192
+ animating: function () {
193
+ return $module.hasClass(className.animating);
194
+ },
195
+ hidden: function () {
196
+ return $module.closest(':hidden').length > 0;
197
+ },
198
+ },
199
+
200
+ set: {
201
+
202
+ defaultSide: function () {
203
+ $activeSide = $side.filter('.' + settings.className.active);
204
+ $nextSide = ($activeSide.next(selector.side).length > 0)
205
+ ? $activeSide.next(selector.side)
206
+ : $side.first();
207
+ nextIndex = false;
208
+ module.verbose('Active side set to', $activeSide);
209
+ module.verbose('Next side set to', $nextSide);
210
+ },
211
+
212
+ duration: function (duration) {
213
+ duration = duration || settings.duration;
214
+ duration = (typeof duration == 'number')
215
+ ? duration + 'ms'
216
+ : duration;
217
+ module.verbose('Setting animation duration', duration);
218
+ if (settings.duration || settings.duration === 0) {
219
+ $sides.add($side)
220
+ .css({
221
+ '-webkit-transition-duration': duration,
222
+ '-moz-transition-duration': duration,
223
+ '-ms-transition-duration': duration,
224
+ '-o-transition-duration': duration,
225
+ 'transition-duration': duration,
226
+ })
227
+ ;
228
+ }
229
+ },
230
+
231
+ currentStageSize: function () {
232
+ var
233
+ $activeSide = $side.filter('.' + settings.className.active),
234
+ width = $activeSide.outerWidth(true),
235
+ height = $activeSide.outerHeight(true)
236
+ ;
237
+ $module
238
+ .css({
239
+ width: width,
240
+ height: height,
241
+ })
242
+ ;
243
+ },
244
+
245
+ stageSize: function () {
246
+ var
247
+ $clone = $module.clone().addClass(className.loading),
248
+ $side = $clone.find('>' + selector.sides + '>' + selector.side),
249
+ $activeSide = $side.filter('.' + settings.className.active),
250
+ $nextSide = (nextIndex)
251
+ ? $side.eq(nextIndex)
252
+ : ($activeSide.next(selector.side).length > 0)
253
+ ? $activeSide.next(selector.side)
254
+ : $side.first(),
255
+ newWidth = (settings.width === 'next')
256
+ ? $nextSide.outerWidth(true)
257
+ : (settings.width === 'initial')
258
+ ? $module.width()
259
+ : settings.width,
260
+ newHeight = (settings.height === 'next')
261
+ ? $nextSide.outerHeight(true)
262
+ : (settings.height === 'initial')
263
+ ? $module.height()
264
+ : settings.height
265
+ ;
266
+ $activeSide.removeClass(className.active);
267
+ $nextSide.addClass(className.active);
268
+ $clone.insertAfter($module);
269
+ $clone.remove();
270
+ if (settings.width !== 'auto') {
271
+ $module.css('width', newWidth + settings.jitter);
272
+ module.verbose('Specifying width during animation', newWidth);
273
+ }
274
+ if (settings.height !== 'auto') {
275
+ $module.css('height', newHeight + settings.jitter);
276
+ module.verbose('Specifying height during animation', newHeight);
277
+ }
278
+ },
279
+
280
+ nextSide: function (selector) {
281
+ nextIndex = selector;
282
+ $nextSide = $side.filter(selector);
283
+ nextIndex = $side.index($nextSide);
284
+ if ($nextSide.length === 0) {
285
+ module.set.defaultSide();
286
+ module.error(error.side);
287
+ }
288
+ module.verbose('Next side manually set to', $nextSide);
289
+ },
290
+
291
+ active: function () {
292
+ module.verbose('Setting new side to active', $nextSide);
293
+ $side
294
+ .removeClass(className.active)
295
+ ;
296
+ $nextSide
297
+ .addClass(className.active)
298
+ ;
299
+ settings.onChange.call($nextSide[0]);
300
+ module.set.defaultSide();
301
+ },
302
+ },
303
+
304
+ flip: {
305
+ to: function (type, stage) {
306
+ if (module.is.hidden()) {
307
+ module.debug('Module not visible', $nextSide);
308
+
309
+ return;
310
+ }
311
+ if (module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
312
+ module.debug('Side already visible', $nextSide);
313
+
314
+ return;
315
+ }
316
+ var
317
+ transform = module.get.transform[type]()
318
+ ;
319
+ if (!module.is.animating()) {
320
+ module.debug('Flipping ' + type, $nextSide);
321
+ module.set.stageSize();
322
+ module.stage[stage]();
323
+ module.animate(transform);
324
+ } else {
325
+ module.queue('flip ' + type);
326
+ }
327
+ },
328
+
329
+ up: function () {
330
+ module.flip.to('up', 'above');
331
+ },
332
+
333
+ down: function () {
334
+ module.flip.to('down', 'below');
335
+ },
336
+
337
+ left: function () {
338
+ module.flip.to('left', 'left');
339
+ },
340
+
341
+ right: function () {
342
+ module.flip.to('right', 'right');
343
+ },
344
+
345
+ over: function () {
346
+ module.flip.to('over', 'behind');
347
+ },
348
+
349
+ back: function () {
350
+ module.flip.to('back', 'behind');
351
+ },
352
+
353
+ },
354
+
355
+ get: {
356
+
357
+ transform: {
358
+ up: function () {
359
+ var
360
+ translateZ = $activeSide.outerHeight(true) / 2,
361
+ translateY = $nextSide.outerHeight(true) - translateZ
362
+ ;
363
+
364
+ return {
365
+ transform: 'translateY(' + translateY + 'px) translateZ(-' + translateZ + 'px) rotateX(-90deg)',
366
+ };
367
+ },
368
+
369
+ down: function () {
370
+ var
371
+ translate = {
372
+ z: $activeSide.outerHeight(true) / 2,
373
+ }
374
+ ;
375
+
376
+ return {
377
+ transform: 'translateY(-' + translate.z + 'px) translateZ(-' + translate.z + 'px) rotateX(90deg)',
378
+ };
379
+ },
380
+
381
+ left: function () {
382
+ var
383
+ translateZ = $activeSide.outerWidth(true) / 2,
384
+ translateX = $nextSide.outerWidth(true) - translateZ
385
+ ;
386
+
387
+ return {
388
+ transform: 'translateX(' + translateX + 'px) translateZ(-' + translateZ + 'px) rotateY(90deg)',
389
+ };
390
+ },
391
+
392
+ right: function () {
393
+ var
394
+ translate = {
395
+ z: $activeSide.outerWidth(true) / 2,
396
+ }
397
+ ;
398
+
399
+ return {
400
+ transform: 'translateX(-' + translate.z + 'px) translateZ(-' + translate.z + 'px) rotateY(-90deg)',
401
+ };
402
+ },
403
+
404
+ over: function () {
405
+ var
406
+ translate = {
407
+ x: -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),
408
+ }
409
+ ;
410
+
411
+ return {
412
+ transform: 'translateX(' + translate.x + 'px) rotateY(180deg)',
413
+ };
414
+ },
415
+
416
+ back: function () {
417
+ var
418
+ translate = {
419
+ x: -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),
420
+ }
421
+ ;
422
+
423
+ return {
424
+ transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)',
425
+ };
426
+ },
427
+ },
428
+
429
+ transitionEvent: function () {
430
+ var
431
+ element = document.createElement('element'),
432
+ transitions = {
433
+ transition: 'transitionend',
434
+ OTransition: 'oTransitionEnd',
435
+ MozTransition: 'transitionend',
436
+ WebkitTransition: 'webkitTransitionEnd',
437
+ },
438
+ transition
439
+ ;
440
+ for (transition in transitions) {
441
+ if (element.style[transition] !== undefined) {
442
+ return transitions[transition];
443
+ }
444
+ }
445
+ },
446
+
447
+ nextSide: function () {
448
+ return ($activeSide.next(selector.side).length > 0)
449
+ ? $activeSide.next(selector.side)
450
+ : $side.first();
451
+ },
452
+
453
+ },
454
+
455
+ stage: {
456
+
457
+ above: function () {
458
+ var
459
+ box = {
460
+ origin: (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
461
+ depth: {
462
+ active: ($nextSide.outerHeight(true) / 2),
463
+ next: ($activeSide.outerHeight(true) / 2),
464
+ },
465
+ }
466
+ ;
467
+ module.verbose('Setting the initial animation position as above', $nextSide, box);
468
+ $activeSide
469
+ .css({
470
+ transform: 'rotateX(0deg)',
471
+ })
472
+ ;
473
+ $nextSide
474
+ .addClass(className.animating)
475
+ .css({
476
+ top: box.origin + 'px',
477
+ transform: 'rotateX(90deg) translateZ(' + box.depth.next + 'px) translateY(-' + box.depth.active + 'px)',
478
+ })
479
+ ;
480
+ },
481
+
482
+ below: function () {
483
+ var
484
+ box = {
485
+ origin: (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
486
+ depth: {
487
+ active: ($nextSide.outerHeight(true) / 2),
488
+ next: ($activeSide.outerHeight(true) / 2),
489
+ },
490
+ }
491
+ ;
492
+ module.verbose('Setting the initial animation position as below', $nextSide, box);
493
+ $activeSide
494
+ .css({
495
+ transform: 'rotateX(0deg)',
496
+ })
497
+ ;
498
+ $nextSide
499
+ .addClass(className.animating)
500
+ .css({
501
+ top: box.origin + 'px',
502
+ transform: 'rotateX(-90deg) translateZ(' + box.depth.next + 'px) translateY(' + box.depth.active + 'px)',
503
+ })
504
+ ;
505
+ },
506
+
507
+ left: function () {
508
+ var
509
+ height = {
510
+ active: $activeSide.outerWidth(true),
511
+ next: $nextSide.outerWidth(true),
512
+ },
513
+ box = {
514
+ origin: ((height.active - height.next) / 2),
515
+ depth: {
516
+ active: (height.next / 2),
517
+ next: (height.active / 2),
518
+ },
519
+ }
520
+ ;
521
+ module.verbose('Setting the initial animation position as left', $nextSide, box);
522
+ $activeSide
523
+ .css({
524
+ transform: 'rotateY(0deg)',
525
+ })
526
+ ;
527
+ $nextSide
528
+ .addClass(className.animating)
529
+ .css({
530
+ left: box.origin + 'px',
531
+ transform: 'rotateY(-90deg) translateZ(' + box.depth.next + 'px) translateX(-' + box.depth.active + 'px)',
532
+ })
533
+ ;
534
+ },
535
+
536
+ right: function () {
537
+ var
538
+ height = {
539
+ active: $activeSide.outerWidth(true),
540
+ next: $nextSide.outerWidth(true),
541
+ },
542
+ box = {
543
+ origin: ((height.active - height.next) / 2),
544
+ depth: {
545
+ active: (height.next / 2),
546
+ next: (height.active / 2),
547
+ },
548
+ }
549
+ ;
550
+ module.verbose('Setting the initial animation position as right', $nextSide, box);
551
+ $activeSide
552
+ .css({
553
+ transform: 'rotateY(0deg)',
554
+ })
555
+ ;
556
+ $nextSide
557
+ .addClass(className.animating)
558
+ .css({
559
+ left: box.origin + 'px',
560
+ transform: 'rotateY(90deg) translateZ(' + box.depth.next + 'px) translateX(' + box.depth.active + 'px)',
561
+ })
562
+ ;
563
+ },
564
+
565
+ behind: function () {
566
+ var
567
+ height = {
568
+ active: $activeSide.outerWidth(true),
569
+ next: $nextSide.outerWidth(true),
570
+ },
571
+ box = {
572
+ origin: ((height.active - height.next) / 2),
573
+ depth: {
574
+ active: (height.next / 2),
575
+ next: (height.active / 2),
576
+ },
577
+ }
578
+ ;
579
+ module.verbose('Setting the initial animation position as behind', $nextSide, box);
580
+ $activeSide
581
+ .css({
582
+ transform: 'rotateY(0deg)',
583
+ })
584
+ ;
585
+ $nextSide
586
+ .addClass(className.animating)
587
+ .css({
588
+ left: box.origin + 'px',
589
+ transform: 'rotateY(-180deg)',
590
+ })
591
+ ;
592
+ },
593
+ },
594
+ setting: function (name, value) {
595
+ module.debug('Changing setting', name, value);
596
+ if ($.isPlainObject(name)) {
597
+ $.extend(true, settings, name);
598
+ } else if (value !== undefined) {
599
+ if ($.isPlainObject(settings[name])) {
600
+ $.extend(true, settings[name], value);
601
+ } else {
602
+ settings[name] = value;
603
+ }
604
+ } else {
605
+ return settings[name];
606
+ }
607
+ },
608
+ internal: function (name, value) {
609
+ if ($.isPlainObject(name)) {
610
+ $.extend(true, module, name);
611
+ } else if (value !== undefined) {
612
+ module[name] = value;
613
+ } else {
614
+ return module[name];
615
+ }
616
+ },
617
+ debug: function () {
618
+ if (!settings.silent && settings.debug) {
619
+ if (settings.performance) {
620
+ module.performance.log(arguments);
621
+ } else {
622
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
623
+ module.debug.apply(console, arguments);
624
+ }
625
+ }
626
+ },
627
+ verbose: function () {
628
+ if (!settings.silent && settings.verbose && settings.debug) {
629
+ if (settings.performance) {
630
+ module.performance.log(arguments);
631
+ } else {
632
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
633
+ module.verbose.apply(console, arguments);
634
+ }
635
+ }
636
+ },
637
+ error: function () {
638
+ if (!settings.silent) {
639
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
640
+ module.error.apply(console, arguments);
641
+ }
642
+ },
643
+ performance: {
644
+ log: function (message) {
645
+ var
646
+ currentTime,
647
+ executionTime,
648
+ previousTime
649
+ ;
650
+ if (settings.performance) {
651
+ currentTime = new Date().getTime();
652
+ previousTime = time || currentTime;
653
+ executionTime = currentTime - previousTime;
654
+ time = currentTime;
655
+ performance.push({
656
+ Name: message[0],
657
+ Arguments: [].slice.call(message, 1) || '',
658
+ Element: element,
659
+ 'Execution Time': executionTime,
660
+ });
661
+ }
662
+ clearTimeout(module.performance.timer);
663
+ module.performance.timer = setTimeout(module.performance.display, 500);
664
+ },
665
+ display: function () {
666
+ var
667
+ title = settings.name + ':',
668
+ totalTime = 0
669
+ ;
670
+ time = false;
671
+ clearTimeout(module.performance.timer);
672
+ $.each(performance, function (index, data) {
673
+ totalTime += data['Execution Time'];
674
+ });
675
+ title += ' ' + totalTime + 'ms';
676
+ if (moduleSelector) {
677
+ title += ' \'' + moduleSelector + '\'';
678
+ }
679
+ if ($allModules.length > 1) {
680
+ title += ' ' + '(' + $allModules.length + ')';
681
+ }
682
+ if ((console.group !== undefined || console.table !== undefined) && performance.length > 0) {
683
+ console.groupCollapsed(title);
684
+ if (console.table) {
685
+ console.table(performance);
686
+ } else {
687
+ $.each(performance, function (index, data) {
688
+ console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
689
+ });
690
+ }
691
+ console.groupEnd();
692
+ }
693
+ performance = [];
694
+ },
695
+ },
696
+ invoke: function (query, passedArguments, context) {
697
+ var
698
+ object = instance,
699
+ maxDepth,
700
+ found,
701
+ response
702
+ ;
703
+ passedArguments = passedArguments || queryArguments;
704
+ context = context || element;
705
+ if (typeof query == 'string' && object !== undefined) {
706
+ query = query.split(/[\. ]/);
707
+ maxDepth = query.length - 1;
708
+ $.each(query, function (depth, value) {
709
+ var camelCaseValue = (depth != maxDepth)
710
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
711
+ : query
712
+ ;
713
+ if ($.isPlainObject(object[camelCaseValue]) && (depth != maxDepth)) {
714
+ object = object[camelCaseValue];
715
+ } else if (object[camelCaseValue] !== undefined) {
716
+ found = object[camelCaseValue];
717
+
718
+ return false;
719
+ } else if ($.isPlainObject(object[value]) && (depth != maxDepth)) {
720
+ object = object[value];
721
+ } else if (object[value] !== undefined) {
722
+ found = object[value];
723
+
724
+ return false;
725
+ } else {
726
+ return false;
727
+ }
728
+ });
729
+ }
730
+ if (isFunction(found)) {
731
+ response = found.apply(context, passedArguments);
732
+ } else if (found !== undefined) {
733
+ response = found;
734
+ }
735
+ if (Array.isArray(returnedValue)) {
736
+ returnedValue.push(response);
737
+ } else if (returnedValue !== undefined) {
738
+ returnedValue = [returnedValue, response];
739
+ } else if (response !== undefined) {
740
+ returnedValue = response;
741
+ }
742
+
743
+ return found;
744
+ },
745
+ };
746
+
747
+ if (methodInvoked) {
748
+ if (instance === undefined) {
749
+ module.initialize();
750
+ }
751
+ var $inputs = $module.find('input');
752
+ if ($inputs.length > 0) {
753
+ $inputs.trigger('blur');
754
+ setTimeout(function () {
755
+ module.invoke(query);
756
+ }, 150);
757
+ } else {
758
+ module.invoke(query);
759
+ }
760
+ } else {
761
+ if (instance !== undefined) {
762
+ instance.invoke('destroy');
763
+ }
764
+ module.initialize();
329
765
  }
330
- },
331
-
332
- up: function() {
333
- module.flip.to('up','above');
334
- },
335
-
336
- down: function() {
337
- module.flip.to('down','below');
338
- },
766
+ });
339
767
 
340
- left: function() {
341
- module.flip.to('left','left');
342
- },
768
+ return (returnedValue !== undefined)
769
+ ? returnedValue
770
+ : this;
771
+ };
343
772
 
344
- right: function() {
345
- module.flip.to('right','right');
346
- },
773
+ $.fn.shape.settings = {
347
774
 
348
- over: function() {
349
- module.flip.to('over','behind');
350
- },
775
+ // module info
776
+ name: 'Shape',
351
777
 
352
- back: function() {
353
- module.flip.to('back','behind');
354
- }
778
+ // hide all debug content
779
+ silent: false,
355
780
 
356
- },
781
+ // debug content outputted to console
782
+ debug: false,
357
783
 
358
- get: {
359
-
360
- transform: {
361
- up: function() {
362
- var
363
- translateZ = $activeSide.outerHeight(true) / 2,
364
- translateY = $nextSide.outerHeight(true) - translateZ
365
- ;
366
- return {
367
- transform: 'translateY(' + translateY + 'px) translateZ(-'+ translateZ + 'px) rotateX(-90deg)'
368
- };
369
- },
370
-
371
- down: function() {
372
- var
373
- translate = {
374
- z: $activeSide.outerHeight(true) / 2
375
- }
376
- ;
377
- return {
378
- transform: 'translateY(-' + translate.z + 'px) translateZ(-'+ translate.z + 'px) rotateX(90deg)'
379
- };
380
- },
381
-
382
- left: function() {
383
- var
384
- translateZ = $activeSide.outerWidth(true) / 2,
385
- translateX = $nextSide.outerWidth(true) - translateZ
386
- ;
387
- return {
388
- transform: 'translateX(' + translateX + 'px) translateZ(-' + translateZ + 'px) rotateY(90deg)'
389
- };
390
- },
391
-
392
- right: function() {
393
- var
394
- translate = {
395
- z : $activeSide.outerWidth(true) / 2
396
- }
397
- ;
398
- return {
399
- transform: 'translateX(-' + translate.z + 'px) translateZ(-' + translate.z + 'px) rotateY(-90deg)'
400
- };
401
- },
402
-
403
- over: function() {
404
- var
405
- translate = {
406
- x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)
407
- }
408
- ;
409
- return {
410
- transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'
411
- };
412
- },
413
-
414
- back: function() {
415
- var
416
- translate = {
417
- x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)
418
- }
419
- ;
420
- return {
421
- transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'
422
- };
423
- }
424
- },
784
+ // verbose debug output
785
+ verbose: false,
425
786
 
426
- transitionEvent: function() {
427
- var
428
- element = document.createElement('element'),
429
- transitions = {
430
- 'transition' :'transitionend',
431
- 'OTransition' :'oTransitionEnd',
432
- 'MozTransition' :'transitionend',
433
- 'WebkitTransition' :'webkitTransitionEnd'
434
- },
435
- transition
436
- ;
437
- for(transition in transitions){
438
- if( element.style[transition] !== undefined ){
439
- return transitions[transition];
440
- }
441
- }
442
- },
787
+ // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)
788
+ jitter: 0,
443
789
 
444
- nextSide: function() {
445
- return ( $activeSide.next(selector.side).length > 0 )
446
- ? $activeSide.next(selector.side)
447
- : $side.first()
448
- ;
449
- }
790
+ // performance data output
791
+ performance: true,
450
792
 
451
- },
793
+ // event namespace
794
+ namespace: 'shape',
452
795
 
453
- stage: {
796
+ // width during animation, can be set to 'auto', initial', 'next' or pixel amount
797
+ width: 'initial',
454
798
 
455
- above: function() {
456
- var
457
- box = {
458
- origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
459
- depth : {
460
- active : ($nextSide.outerHeight(true) / 2),
461
- next : ($activeSide.outerHeight(true) / 2)
462
- }
463
- }
464
- ;
465
- module.verbose('Setting the initial animation position as above', $nextSide, box);
466
- $activeSide
467
- .css({
468
- 'transform' : 'rotateX(0deg)'
469
- })
470
- ;
471
- $nextSide
472
- .addClass(className.animating)
473
- .css({
474
- 'top' : box.origin + 'px',
475
- 'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px) translateY(-' + box.depth.active + 'px)'
476
- })
477
- ;
478
- },
799
+ // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount
800
+ height: 'initial',
479
801
 
480
- below: function() {
481
- var
482
- box = {
483
- origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
484
- depth : {
485
- active : ($nextSide.outerHeight(true) / 2),
486
- next : ($activeSide.outerHeight(true) / 2)
487
- }
488
- }
489
- ;
490
- module.verbose('Setting the initial animation position as below', $nextSide, box);
491
- $activeSide
492
- .css({
493
- 'transform' : 'rotateX(0deg)'
494
- })
495
- ;
496
- $nextSide
497
- .addClass(className.animating)
498
- .css({
499
- 'top' : box.origin + 'px',
500
- 'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px) translateY(' + box.depth.active + 'px)'
501
- })
502
- ;
503
- },
802
+ // callback occurs on side change
803
+ onBeforeChange: function () {},
804
+ onChange: function () {},
504
805
 
505
- left: function() {
506
- var
507
- height = {
508
- active : $activeSide.outerWidth(true),
509
- next : $nextSide.outerWidth(true)
510
- },
511
- box = {
512
- origin : ( ( height.active - height.next ) / 2),
513
- depth : {
514
- active : (height.next / 2),
515
- next : (height.active / 2)
516
- }
517
- }
518
- ;
519
- module.verbose('Setting the initial animation position as left', $nextSide, box);
520
- $activeSide
521
- .css({
522
- 'transform' : 'rotateY(0deg)'
523
- })
524
- ;
525
- $nextSide
526
- .addClass(className.animating)
527
- .css({
528
- 'left' : box.origin + 'px',
529
- 'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px) translateX(-' + box.depth.active + 'px)'
530
- })
531
- ;
532
- },
806
+ // allow animation to same side
807
+ allowRepeats: false,
533
808
 
534
- right: function() {
535
- var
536
- height = {
537
- active : $activeSide.outerWidth(true),
538
- next : $nextSide.outerWidth(true)
539
- },
540
- box = {
541
- origin : ( ( height.active - height.next ) / 2),
542
- depth : {
543
- active : (height.next / 2),
544
- next : (height.active / 2)
545
- }
546
- }
547
- ;
548
- module.verbose('Setting the initial animation position as right', $nextSide, box);
549
- $activeSide
550
- .css({
551
- 'transform' : 'rotateY(0deg)'
552
- })
553
- ;
554
- $nextSide
555
- .addClass(className.animating)
556
- .css({
557
- 'left' : box.origin + 'px',
558
- 'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px) translateX(' + box.depth.active + 'px)'
559
- })
560
- ;
561
- },
809
+ // animation duration
810
+ duration: false,
562
811
 
563
- behind: function() {
564
- var
565
- height = {
566
- active : $activeSide.outerWidth(true),
567
- next : $nextSide.outerWidth(true)
568
- },
569
- box = {
570
- origin : ( ( height.active - height.next ) / 2),
571
- depth : {
572
- active : (height.next / 2),
573
- next : (height.active / 2)
574
- }
575
- }
576
- ;
577
- module.verbose('Setting the initial animation position as behind', $nextSide, box);
578
- $activeSide
579
- .css({
580
- 'transform' : 'rotateY(0deg)'
581
- })
582
- ;
583
- $nextSide
584
- .addClass(className.animating)
585
- .css({
586
- 'left' : box.origin + 'px',
587
- 'transform' : 'rotateY(-180deg)'
588
- })
589
- ;
590
- }
591
- },
592
- setting: function(name, value) {
593
- module.debug('Changing setting', name, value);
594
- if( $.isPlainObject(name) ) {
595
- $.extend(true, settings, name);
596
- }
597
- else if(value !== undefined) {
598
- if($.isPlainObject(settings[name])) {
599
- $.extend(true, settings[name], value);
600
- }
601
- else {
602
- settings[name] = value;
603
- }
604
- }
605
- else {
606
- return settings[name];
607
- }
608
- },
609
- internal: function(name, value) {
610
- if( $.isPlainObject(name) ) {
611
- $.extend(true, module, name);
612
- }
613
- else if(value !== undefined) {
614
- module[name] = value;
615
- }
616
- else {
617
- return module[name];
618
- }
619
- },
620
- debug: function() {
621
- if(!settings.silent && settings.debug) {
622
- if(settings.performance) {
623
- module.performance.log(arguments);
624
- }
625
- else {
626
- module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
627
- module.debug.apply(console, arguments);
628
- }
629
- }
630
- },
631
- verbose: function() {
632
- if(!settings.silent && settings.verbose && settings.debug) {
633
- if(settings.performance) {
634
- module.performance.log(arguments);
635
- }
636
- else {
637
- module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
638
- module.verbose.apply(console, arguments);
639
- }
640
- }
812
+ // possible errors
813
+ error: {
814
+ side: 'You tried to switch to a side that does not exist.',
815
+ method: 'The method you called is not defined',
641
816
  },
642
- error: function() {
643
- if(!settings.silent) {
644
- module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
645
- module.error.apply(console, arguments);
646
- }
817
+
818
+ // classnames used
819
+ className: {
820
+ animating: 'animating',
821
+ hidden: 'hidden',
822
+ loading: 'loading',
823
+ active: 'active',
647
824
  },
648
- performance: {
649
- log: function(message) {
650
- var
651
- currentTime,
652
- executionTime,
653
- previousTime
654
- ;
655
- if(settings.performance) {
656
- currentTime = new Date().getTime();
657
- previousTime = time || currentTime;
658
- executionTime = currentTime - previousTime;
659
- time = currentTime;
660
- performance.push({
661
- 'Name' : message[0],
662
- 'Arguments' : [].slice.call(message, 1) || '',
663
- 'Element' : element,
664
- 'Execution Time' : executionTime
665
- });
666
- }
667
- clearTimeout(module.performance.timer);
668
- module.performance.timer = setTimeout(module.performance.display, 500);
669
- },
670
- display: function() {
671
- var
672
- title = settings.name + ':',
673
- totalTime = 0
674
- ;
675
- time = false;
676
- clearTimeout(module.performance.timer);
677
- $.each(performance, function(index, data) {
678
- totalTime += data['Execution Time'];
679
- });
680
- title += ' ' + totalTime + 'ms';
681
- if(moduleSelector) {
682
- title += ' \'' + moduleSelector + '\'';
683
- }
684
- if($allModules.length > 1) {
685
- title += ' ' + '(' + $allModules.length + ')';
686
- }
687
- if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
688
- console.groupCollapsed(title);
689
- if(console.table) {
690
- console.table(performance);
691
- }
692
- else {
693
- $.each(performance, function(index, data) {
694
- console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
695
- });
696
- }
697
- console.groupEnd();
698
- }
699
- performance = [];
700
- }
825
+
826
+ // selectors used
827
+ selector: {
828
+ sides: '.sides',
829
+ side: '.side',
701
830
  },
702
- invoke: function(query, passedArguments, context) {
703
- var
704
- object = instance,
705
- maxDepth,
706
- found,
707
- response
708
- ;
709
- passedArguments = passedArguments || queryArguments;
710
- context = context || element;
711
- if(typeof query == 'string' && object !== undefined) {
712
- query = query.split(/[\. ]/);
713
- maxDepth = query.length - 1;
714
- $.each(query, function(depth, value) {
715
- var camelCaseValue = (depth != maxDepth)
716
- ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
717
- : query
718
- ;
719
- if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
720
- object = object[camelCaseValue];
721
- }
722
- else if( object[camelCaseValue] !== undefined ) {
723
- found = object[camelCaseValue];
724
- return false;
725
- }
726
- else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
727
- object = object[value];
728
- }
729
- else if( object[value] !== undefined ) {
730
- found = object[value];
731
- return false;
732
- }
733
- else {
734
- return false;
735
- }
736
- });
737
- }
738
- if ( isFunction( found ) ) {
739
- response = found.apply(context, passedArguments);
740
- }
741
- else if(found !== undefined) {
742
- response = found;
743
- }
744
- if(Array.isArray(returnedValue)) {
745
- returnedValue.push(response);
746
- }
747
- else if(returnedValue !== undefined) {
748
- returnedValue = [returnedValue, response];
749
- }
750
- else if(response !== undefined) {
751
- returnedValue = response;
752
- }
753
- return found;
754
- }
755
- };
756
-
757
- if(methodInvoked) {
758
- if(instance === undefined) {
759
- module.initialize();
760
- }
761
- var $inputs = $module.find('input');
762
- if( $inputs.length > 0) {
763
- $inputs.trigger('blur');
764
- setTimeout(function(){
765
- module.invoke(query);
766
- }, 150);
767
- } else {
768
- module.invoke(query);
769
- }
770
- }
771
- else {
772
- if(instance !== undefined) {
773
- instance.invoke('destroy');
774
- }
775
- module.initialize();
776
- }
777
- })
778
- ;
779
-
780
- return (returnedValue !== undefined)
781
- ? returnedValue
782
- : this
783
- ;
784
- };
785
-
786
- $.fn.shape.settings = {
787
-
788
- // module info
789
- name : 'Shape',
790
-
791
- // hide all debug content
792
- silent : false,
793
-
794
- // debug content outputted to console
795
- debug : false,
796
-
797
- // verbose debug output
798
- verbose : false,
799
-
800
- // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)
801
- jitter : 0,
802
-
803
- // performance data output
804
- performance: true,
805
-
806
- // event namespace
807
- namespace : 'shape',
808
-
809
- // width during animation, can be set to 'auto', initial', 'next' or pixel amount
810
- width: 'initial',
811
-
812
- // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount
813
- height: 'initial',
814
-
815
- // callback occurs on side change
816
- onBeforeChange : function() {},
817
- onChange : function() {},
818
-
819
- // allow animation to same side
820
- allowRepeats: false,
821
-
822
- // animation duration
823
- duration : false,
824
-
825
- // possible errors
826
- error: {
827
- side : 'You tried to switch to a side that does not exist.',
828
- method : 'The method you called is not defined'
829
- },
830
-
831
- // classnames used
832
- className : {
833
- animating : 'animating',
834
- hidden : 'hidden',
835
- loading : 'loading',
836
- active : 'active'
837
- },
838
-
839
- // selectors used
840
- selector : {
841
- sides : '.sides',
842
- side : '.side'
843
- }
844
-
845
- };
846
-
847
-
848
- })( jQuery, window, document );
831
+
832
+ };
833
+ })(jQuery, window, document);