fomantic-ui 2.9.1-beta.17 → 2.9.1-beta.19

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 +569 -598
  5. package/dist/components/accordion.min.css +1 -1
  6. package/dist/components/accordion.min.js +2 -2
  7. package/dist/components/ad.css +1 -1
  8. package/dist/components/ad.min.css +1 -1
  9. package/dist/components/api.js +1161 -1184
  10. package/dist/components/api.min.js +2 -2
  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 +1895 -1818
  17. package/dist/components/calendar.min.css +1 -1
  18. package/dist/components/calendar.min.js +2 -2
  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 +842 -841
  23. package/dist/components/checkbox.min.css +1 -1
  24. package/dist/components/checkbox.min.js +2 -2
  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 +708 -737
  31. package/dist/components/dimmer.min.css +1 -1
  32. package/dist/components/dimmer.min.js +2 -2
  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 +4161 -4238
  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 +651 -675
  41. package/dist/components/embed.min.css +1 -1
  42. package/dist/components/embed.min.js +2 -2
  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 +1464 -1467
  49. package/dist/components/flyout.min.css +2 -2
  50. package/dist/components/flyout.min.js +2 -2
  51. package/dist/components/form.css +1 -1
  52. package/dist/components/form.js +1979 -2004
  53. package/dist/components/form.min.css +1 -1
  54. package/dist/components/form.min.js +2 -2
  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 +1491 -1487
  77. package/dist/components/modal.min.css +2 -2
  78. package/dist/components/modal.min.js +2 -2
  79. package/dist/components/nag.css +1 -1
  80. package/dist/components/nag.js +518 -529
  81. package/dist/components/nag.min.css +1 -1
  82. package/dist/components/nag.min.js +2 -2
  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 +1437 -1456
  87. package/dist/components/popup.min.css +1 -1
  88. package/dist/components/popup.min.js +2 -2
  89. package/dist/components/progress.css +1 -1
  90. package/dist/components/progress.js +969 -997
  91. package/dist/components/progress.min.css +1 -1
  92. package/dist/components/progress.min.js +2 -2
  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 +505 -523
  97. package/dist/components/rating.min.css +1 -1
  98. package/dist/components/rating.min.js +2 -2
  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 +1498 -1534
  105. package/dist/components/search.min.css +2 -2
  106. package/dist/components/search.min.js +2 -2
  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 +792 -809
  111. package/dist/components/shape.min.css +1 -1
  112. package/dist/components/shape.min.js +2 -2
  113. package/dist/components/sidebar.css +3 -1
  114. package/dist/components/sidebar.js +1071 -1098
  115. package/dist/components/sidebar.min.css +2 -2
  116. package/dist/components/sidebar.min.js +2 -2
  117. package/dist/components/site.css +1 -1
  118. package/dist/components/site.js +462 -471
  119. package/dist/components/site.min.css +1 -1
  120. package/dist/components/site.min.js +2 -2
  121. package/dist/components/slider.js +1287 -1311
  122. package/dist/components/slider.min.js +2 -2
  123. package/dist/components/state.js +639 -657
  124. package/dist/components/state.min.js +2 -2
  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 +857 -903
  131. package/dist/components/sticky.min.css +1 -1
  132. package/dist/components/sticky.min.js +2 -2
  133. package/dist/components/tab.css +1 -1
  134. package/dist/components/tab.js +922 -963
  135. package/dist/components/tab.min.css +1 -1
  136. package/dist/components/tab.min.js +2 -2
  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 +886 -890
  143. package/dist/components/toast.min.css +1 -1
  144. package/dist/components/toast.min.js +2 -2
  145. package/dist/components/transition.css +1 -1
  146. package/dist/components/transition.js +1041 -1077
  147. package/dist/components/transition.min.css +1 -1
  148. package/dist/components/transition.min.js +2 -2
  149. package/dist/components/visibility.js +1220 -1244
  150. package/dist/components/visibility.min.js +2 -2
  151. package/dist/semantic.css +84 -60
  152. package/dist/semantic.js +28949 -29435
  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 +1162 -1185
  160. package/src/definitions/behaviors/form.js +1978 -2003
  161. package/src/definitions/behaviors/state.js +645 -663
  162. package/src/definitions/behaviors/visibility.js +1219 -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 +461 -470
  167. package/src/definitions/modules/accordion.js +568 -597
  168. package/src/definitions/modules/calendar.js +1894 -1817
  169. package/src/definitions/modules/checkbox.js +841 -840
  170. package/src/definitions/modules/dimmer.js +707 -736
  171. package/src/definitions/modules/dropdown.js +4160 -4237
  172. package/src/definitions/modules/dropdown.less +5 -8
  173. package/src/definitions/modules/embed.js +650 -674
  174. package/src/definitions/modules/flyout.js +1463 -1466
  175. package/src/definitions/modules/flyout.less +15 -12
  176. package/src/definitions/modules/modal.js +1490 -1486
  177. package/src/definitions/modules/modal.less +3 -0
  178. package/src/definitions/modules/nag.js +517 -528
  179. package/src/definitions/modules/popup.js +1436 -1455
  180. package/src/definitions/modules/progress.js +968 -996
  181. package/src/definitions/modules/rating.js +504 -522
  182. package/src/definitions/modules/search.js +1497 -1533
  183. package/src/definitions/modules/search.less +1 -0
  184. package/src/definitions/modules/shape.js +791 -808
  185. package/src/definitions/modules/sidebar.js +1070 -1097
  186. package/src/definitions/modules/sidebar.less +1 -0
  187. package/src/definitions/modules/slider.js +1286 -1310
  188. package/src/definitions/modules/sticky.js +873 -919
  189. package/src/definitions/modules/tab.js +921 -962
  190. package/src/definitions/modules/toast.js +885 -889
  191. package/src/definitions/modules/transition.js +1040 -1076
  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.17+3767ba8 - Shape
2
+ * # Fomantic-UI 2.9.1-beta.19+e589cd1 - Shape
3
3
  * https://github.com/fomantic/Fomantic-UI/
4
4
  *
5
5
  *
@@ -8,841 +8,824 @@
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
+ : globalThis;
165
21
 
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
- },
22
+ $.fn.shape = function (parameters) {
23
+ var
24
+ $allModules = $(this),
189
25
 
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
- },
26
+ time = new Date().getTime(),
27
+ performance = [],
201
28
 
202
- set: {
29
+ query = arguments[0],
30
+ methodInvoked = (typeof query == 'string'),
31
+ queryArguments = [].slice.call(arguments, 1),
203
32
 
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
- },
33
+ requestAnimationFrame = window.requestAnimationFrame
34
+ || window.mozRequestAnimationFrame
35
+ || window.webkitRequestAnimationFrame
36
+ || window.msRequestAnimationFrame
37
+ || function (callback) {
38
+ setTimeout(callback, 0);
39
+ },
234
40
 
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
- },
41
+ returnedValue
42
+ ;
248
43
 
249
- stageSize: function() {
44
+ $allModules.each(function () {
250
45
  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)
46
+ moduleSelector = $allModules.selector || '',
47
+ settings = ($.isPlainObject(parameters))
48
+ ? $.extend(true, {}, $.fn.shape.settings, parameters)
49
+ : $.extend({}, $.fn.shape.settings),
50
+
51
+ // internal aliases
52
+ namespace = settings.namespace,
53
+ selector = settings.selector,
54
+ error = settings.error,
55
+ className = settings.className,
56
+
57
+ // define namespaces for modules
58
+ eventNamespace = '.' + namespace,
59
+ moduleNamespace = 'module-' + namespace,
60
+
61
+ // selector cache
62
+ $module = $(this),
63
+ $sides = $module.find('>' + selector.sides),
64
+ $side = $sides.find('>' + selector.side),
65
+
66
+ // private variables
67
+ nextIndex = false,
68
+ $activeSide,
69
+ $nextSide,
70
+
71
+ // standard module
72
+ element = this,
73
+ instance = $module.data(moduleNamespace),
74
+ module
299
75
  ;
300
- $nextSide
301
- .addClass(className.active)
302
- ;
303
- settings.onChange.call($nextSide[0]);
304
- module.set.defaultSide();
305
- }
306
- },
307
76
 
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);
77
+ module = {
78
+
79
+ initialize: function () {
80
+ module.verbose('Initializing module for', element);
81
+ module.set.defaultSide();
82
+ module.instantiate();
83
+ },
84
+
85
+ instantiate: function () {
86
+ module.verbose('Storing instance of module', module);
87
+ instance = module;
88
+ $module
89
+ .data(moduleNamespace, instance)
90
+ ;
91
+ },
92
+
93
+ destroy: function () {
94
+ module.verbose('Destroying previous module for', element);
95
+ $module
96
+ .removeData(moduleNamespace)
97
+ .off(eventNamespace)
98
+ ;
99
+ },
100
+
101
+ refresh: function () {
102
+ module.verbose('Refreshing selector cache for', element);
103
+ $module = $(element);
104
+ $sides = $(this).find(selector.sides);
105
+ $side = $(this).find(selector.side);
106
+ },
107
+
108
+ repaint: function () {
109
+ module.verbose('Forcing repaint event');
110
+ var
111
+ shape = $sides[0] || document.createElement('div'),
112
+ fakeAssignment = shape.offsetWidth
113
+ ;
114
+ },
115
+
116
+ animate: function (propertyObject, callback) {
117
+ module.verbose('Animating box with properties', propertyObject);
118
+ callback = callback || function (event) {
119
+ module.verbose('Executing animation callback');
120
+ if (event !== undefined) {
121
+ event.stopPropagation();
122
+ }
123
+ module.reset();
124
+ module.set.active();
125
+ };
126
+ settings.onBeforeChange.call($nextSide[0]);
127
+ if (module.get.transitionEvent()) {
128
+ module.verbose('Starting CSS animation');
129
+ $module
130
+ .addClass(className.animating)
131
+ ;
132
+ $sides
133
+ .css(propertyObject)
134
+ .one(module.get.transitionEvent(), callback)
135
+ ;
136
+ module.set.duration(settings.duration);
137
+ requestAnimationFrame(function () {
138
+ $module
139
+ .addClass(className.animating)
140
+ ;
141
+ $activeSide
142
+ .addClass(className.hidden)
143
+ ;
144
+ });
145
+ } else {
146
+ callback();
147
+ }
148
+ },
149
+
150
+ queue: function (method) {
151
+ module.debug('Queueing animation of', method);
152
+ $sides
153
+ .one(module.get.transitionEvent(), function () {
154
+ module.debug('Executing queued animation');
155
+ setTimeout(function () {
156
+ $module.shape(method);
157
+ }, 0);
158
+ })
159
+ ;
160
+ },
161
+
162
+ reset: function () {
163
+ module.verbose('Animating states reset');
164
+ $module
165
+ .removeClass(className.animating)
166
+ .attr('style', '')
167
+ .removeAttr('style')
168
+ ;
169
+ // removeAttr style does not consistently work in safari
170
+ $sides
171
+ .attr('style', '')
172
+ .removeAttr('style')
173
+ ;
174
+ $side
175
+ .attr('style', '')
176
+ .removeAttr('style')
177
+ .removeClass(className.hidden)
178
+ ;
179
+ $nextSide
180
+ .removeClass(className.animating)
181
+ .attr('style', '')
182
+ .removeAttr('style')
183
+ ;
184
+ },
185
+
186
+ is: {
187
+ complete: function () {
188
+ return ($side.filter('.' + className.active)[0] == $nextSide[0]);
189
+ },
190
+ animating: function () {
191
+ return $module.hasClass(className.animating);
192
+ },
193
+ hidden: function () {
194
+ return $module.closest(':hidden').length > 0;
195
+ },
196
+ },
197
+
198
+ set: {
199
+
200
+ defaultSide: function () {
201
+ $activeSide = $side.filter('.' + settings.className.active);
202
+ $nextSide = ($activeSide.next(selector.side).length > 0)
203
+ ? $activeSide.next(selector.side)
204
+ : $side.first();
205
+ nextIndex = false;
206
+ module.verbose('Active side set to', $activeSide);
207
+ module.verbose('Next side set to', $nextSide);
208
+ },
209
+
210
+ duration: function (duration) {
211
+ duration = duration || settings.duration;
212
+ duration = (typeof duration == 'number')
213
+ ? duration + 'ms'
214
+ : duration;
215
+ module.verbose('Setting animation duration', duration);
216
+ if (settings.duration || settings.duration === 0) {
217
+ $sides.add($side)
218
+ .css({
219
+ '-webkit-transition-duration': duration,
220
+ '-moz-transition-duration': duration,
221
+ '-ms-transition-duration': duration,
222
+ '-o-transition-duration': duration,
223
+ 'transition-duration': duration,
224
+ })
225
+ ;
226
+ }
227
+ },
228
+
229
+ currentStageSize: function () {
230
+ var
231
+ $activeSide = $side.filter('.' + settings.className.active),
232
+ width = $activeSide.outerWidth(true),
233
+ height = $activeSide.outerHeight(true)
234
+ ;
235
+ $module
236
+ .css({
237
+ width: width,
238
+ height: height,
239
+ })
240
+ ;
241
+ },
242
+
243
+ stageSize: function () {
244
+ var
245
+ $clone = $module.clone().addClass(className.loading),
246
+ $side = $clone.find('>' + selector.sides + '>' + selector.side),
247
+ $activeSide = $side.filter('.' + settings.className.active),
248
+ $nextSide = (nextIndex)
249
+ ? $side.eq(nextIndex)
250
+ : ($activeSide.next(selector.side).length > 0)
251
+ ? $activeSide.next(selector.side)
252
+ : $side.first(),
253
+ newWidth = (settings.width === 'next')
254
+ ? $nextSide.outerWidth(true)
255
+ : (settings.width === 'initial')
256
+ ? $module.width()
257
+ : settings.width,
258
+ newHeight = (settings.height === 'next')
259
+ ? $nextSide.outerHeight(true)
260
+ : (settings.height === 'initial')
261
+ ? $module.height()
262
+ : settings.height
263
+ ;
264
+ $activeSide.removeClass(className.active);
265
+ $nextSide.addClass(className.active);
266
+ $clone.insertAfter($module);
267
+ $clone.remove();
268
+ if (settings.width !== 'auto') {
269
+ $module.css('width', newWidth + settings.jitter);
270
+ module.verbose('Specifying width during animation', newWidth);
271
+ }
272
+ if (settings.height !== 'auto') {
273
+ $module.css('height', newHeight + settings.jitter);
274
+ module.verbose('Specifying height during animation', newHeight);
275
+ }
276
+ },
277
+
278
+ nextSide: function (selector) {
279
+ nextIndex = selector;
280
+ $nextSide = $side.filter(selector);
281
+ nextIndex = $side.index($nextSide);
282
+ if ($nextSide.length === 0) {
283
+ module.set.defaultSide();
284
+ module.error(error.side);
285
+ }
286
+ module.verbose('Next side manually set to', $nextSide);
287
+ },
288
+
289
+ active: function () {
290
+ module.verbose('Setting new side to active', $nextSide);
291
+ $side
292
+ .removeClass(className.active)
293
+ ;
294
+ $nextSide
295
+ .addClass(className.active)
296
+ ;
297
+ settings.onChange.call($nextSide[0]);
298
+ module.set.defaultSide();
299
+ },
300
+ },
301
+
302
+ flip: {
303
+ to: function (type, stage) {
304
+ if (module.is.hidden()) {
305
+ module.debug('Module not visible', $nextSide);
306
+
307
+ return;
308
+ }
309
+ if (module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
310
+ module.debug('Side already visible', $nextSide);
311
+
312
+ return;
313
+ }
314
+ var
315
+ transform = module.get.transform[type]()
316
+ ;
317
+ if (!module.is.animating()) {
318
+ module.debug('Flipping ' + type, $nextSide);
319
+ module.set.stageSize();
320
+ module.stage[stage]();
321
+ module.animate(transform);
322
+ } else {
323
+ module.queue('flip ' + type);
324
+ }
325
+ },
326
+
327
+ up: function () {
328
+ module.flip.to('up', 'above');
329
+ },
330
+
331
+ down: function () {
332
+ module.flip.to('down', 'below');
333
+ },
334
+
335
+ left: function () {
336
+ module.flip.to('left', 'left');
337
+ },
338
+
339
+ right: function () {
340
+ module.flip.to('right', 'right');
341
+ },
342
+
343
+ over: function () {
344
+ module.flip.to('over', 'behind');
345
+ },
346
+
347
+ back: function () {
348
+ module.flip.to('back', 'behind');
349
+ },
350
+
351
+ },
352
+
353
+ get: {
354
+
355
+ transform: {
356
+ up: function () {
357
+ var
358
+ translateZ = $activeSide.outerHeight(true) / 2,
359
+ translateY = $nextSide.outerHeight(true) - translateZ
360
+ ;
361
+
362
+ return {
363
+ transform: 'translateY(' + translateY + 'px) translateZ(-' + translateZ + 'px) rotateX(-90deg)',
364
+ };
365
+ },
366
+
367
+ down: function () {
368
+ var
369
+ translate = {
370
+ z: $activeSide.outerHeight(true) / 2,
371
+ }
372
+ ;
373
+
374
+ return {
375
+ transform: 'translateY(-' + translate.z + 'px) translateZ(-' + translate.z + 'px) rotateX(90deg)',
376
+ };
377
+ },
378
+
379
+ left: function () {
380
+ var
381
+ translateZ = $activeSide.outerWidth(true) / 2,
382
+ translateX = $nextSide.outerWidth(true) - translateZ
383
+ ;
384
+
385
+ return {
386
+ transform: 'translateX(' + translateX + 'px) translateZ(-' + translateZ + 'px) rotateY(90deg)',
387
+ };
388
+ },
389
+
390
+ right: function () {
391
+ var
392
+ translate = {
393
+ z: $activeSide.outerWidth(true) / 2,
394
+ }
395
+ ;
396
+
397
+ return {
398
+ transform: 'translateX(-' + translate.z + 'px) translateZ(-' + translate.z + 'px) rotateY(-90deg)',
399
+ };
400
+ },
401
+
402
+ over: function () {
403
+ var
404
+ translate = {
405
+ x: -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),
406
+ }
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
+
421
+ return {
422
+ transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)',
423
+ };
424
+ },
425
+ },
426
+
427
+ transitionEvent: function () {
428
+ var
429
+ element = document.createElement('element'),
430
+ transitions = {
431
+ transition: 'transitionend',
432
+ OTransition: 'oTransitionEnd',
433
+ MozTransition: 'transitionend',
434
+ WebkitTransition: 'webkitTransitionEnd',
435
+ },
436
+ transition
437
+ ;
438
+ for (transition in transitions) {
439
+ if (element.style[transition] !== undefined) {
440
+ return transitions[transition];
441
+ }
442
+ }
443
+ },
444
+
445
+ nextSide: function () {
446
+ return ($activeSide.next(selector.side).length > 0)
447
+ ? $activeSide.next(selector.side)
448
+ : $side.first();
449
+ },
450
+
451
+ },
452
+
453
+ stage: {
454
+
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
+ },
479
+
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
+ },
504
+
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
+ },
533
+
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
+ },
562
+
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
+ } else if (value !== undefined) {
597
+ if ($.isPlainObject(settings[name])) {
598
+ $.extend(true, settings[name], value);
599
+ } else {
600
+ settings[name] = value;
601
+ }
602
+ } else {
603
+ return settings[name];
604
+ }
605
+ },
606
+ internal: function (name, value) {
607
+ if ($.isPlainObject(name)) {
608
+ $.extend(true, module, name);
609
+ } else if (value !== undefined) {
610
+ module[name] = value;
611
+ } else {
612
+ return module[name];
613
+ }
614
+ },
615
+ debug: function () {
616
+ if (!settings.silent && settings.debug) {
617
+ if (settings.performance) {
618
+ module.performance.log(arguments);
619
+ } else {
620
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
621
+ module.debug.apply(console, arguments);
622
+ }
623
+ }
624
+ },
625
+ verbose: function () {
626
+ if (!settings.silent && settings.verbose && settings.debug) {
627
+ if (settings.performance) {
628
+ module.performance.log(arguments);
629
+ } else {
630
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
631
+ module.verbose.apply(console, arguments);
632
+ }
633
+ }
634
+ },
635
+ error: function () {
636
+ if (!settings.silent) {
637
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
638
+ module.error.apply(console, arguments);
639
+ }
640
+ },
641
+ performance: {
642
+ log: function (message) {
643
+ var
644
+ currentTime,
645
+ executionTime,
646
+ previousTime
647
+ ;
648
+ if (settings.performance) {
649
+ currentTime = new Date().getTime();
650
+ previousTime = time || currentTime;
651
+ executionTime = currentTime - previousTime;
652
+ time = currentTime;
653
+ performance.push({
654
+ Name: message[0],
655
+ Arguments: [].slice.call(message, 1) || '',
656
+ Element: element,
657
+ 'Execution Time': executionTime,
658
+ });
659
+ }
660
+ clearTimeout(module.performance.timer);
661
+ module.performance.timer = setTimeout(module.performance.display, 500);
662
+ },
663
+ display: function () {
664
+ var
665
+ title = settings.name + ':',
666
+ totalTime = 0
667
+ ;
668
+ time = false;
669
+ clearTimeout(module.performance.timer);
670
+ $.each(performance, function (index, data) {
671
+ totalTime += data['Execution Time'];
672
+ });
673
+ title += ' ' + totalTime + 'ms';
674
+ if (moduleSelector) {
675
+ title += ' \'' + moduleSelector + '\'';
676
+ }
677
+ if ($allModules.length > 1) {
678
+ title += ' ' + '(' + $allModules.length + ')';
679
+ }
680
+ if ((console.group !== undefined || console.table !== undefined) && performance.length > 0) {
681
+ console.groupCollapsed(title);
682
+ if (console.table) {
683
+ console.table(performance);
684
+ } else {
685
+ $.each(performance, function (index, data) {
686
+ console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
687
+ });
688
+ }
689
+ console.groupEnd();
690
+ }
691
+ performance = [];
692
+ },
693
+ },
694
+ invoke: function (query, passedArguments, context) {
695
+ var
696
+ object = instance,
697
+ maxDepth,
698
+ found,
699
+ response
700
+ ;
701
+ passedArguments = passedArguments || queryArguments;
702
+ context = context || element;
703
+ if (typeof query == 'string' && object !== undefined) {
704
+ query = query.split(/[\. ]/);
705
+ maxDepth = query.length - 1;
706
+ $.each(query, function (depth, value) {
707
+ var camelCaseValue = (depth != maxDepth)
708
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
709
+ : query
710
+ ;
711
+ if ($.isPlainObject(object[camelCaseValue]) && (depth != maxDepth)) {
712
+ object = object[camelCaseValue];
713
+ } else if (object[camelCaseValue] !== undefined) {
714
+ found = object[camelCaseValue];
715
+
716
+ return false;
717
+ } else if ($.isPlainObject(object[value]) && (depth != maxDepth)) {
718
+ object = object[value];
719
+ } else if (object[value] !== undefined) {
720
+ found = object[value];
721
+
722
+ return false;
723
+ } else {
724
+ return false;
725
+ }
726
+ });
727
+ }
728
+ if (isFunction(found)) {
729
+ response = found.apply(context, passedArguments);
730
+ } else if (found !== undefined) {
731
+ response = found;
732
+ }
733
+ if (Array.isArray(returnedValue)) {
734
+ returnedValue.push(response);
735
+ } else if (returnedValue !== undefined) {
736
+ returnedValue = [returnedValue, response];
737
+ } else if (response !== undefined) {
738
+ returnedValue = response;
739
+ }
740
+
741
+ return found;
742
+ },
743
+ };
744
+
745
+ if (methodInvoked) {
746
+ if (instance === undefined) {
747
+ module.initialize();
748
+ }
749
+ var $inputs = $module.find('input');
750
+ if ($inputs.length > 0) {
751
+ $inputs.trigger('blur');
752
+ setTimeout(function () {
753
+ module.invoke(query);
754
+ }, 150);
755
+ } else {
756
+ module.invoke(query);
757
+ }
758
+ } else {
759
+ if (instance !== undefined) {
760
+ instance.invoke('destroy');
761
+ }
762
+ module.initialize();
329
763
  }
330
- },
331
-
332
- up: function() {
333
- module.flip.to('up','above');
334
- },
335
-
336
- down: function() {
337
- module.flip.to('down','below');
338
- },
764
+ });
339
765
 
340
- left: function() {
341
- module.flip.to('left','left');
342
- },
766
+ return (returnedValue !== undefined)
767
+ ? returnedValue
768
+ : this;
769
+ };
343
770
 
344
- right: function() {
345
- module.flip.to('right','right');
346
- },
771
+ $.fn.shape.settings = {
347
772
 
348
- over: function() {
349
- module.flip.to('over','behind');
350
- },
773
+ // module info
774
+ name: 'Shape',
351
775
 
352
- back: function() {
353
- module.flip.to('back','behind');
354
- }
776
+ // hide all debug content
777
+ silent: false,
355
778
 
356
- },
779
+ // debug content outputted to console
780
+ debug: false,
357
781
 
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
- },
782
+ // verbose debug output
783
+ verbose: false,
425
784
 
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
- },
785
+ // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)
786
+ jitter: 0,
443
787
 
444
- nextSide: function() {
445
- return ( $activeSide.next(selector.side).length > 0 )
446
- ? $activeSide.next(selector.side)
447
- : $side.first()
448
- ;
449
- }
788
+ // performance data output
789
+ performance: true,
450
790
 
451
- },
791
+ // event namespace
792
+ namespace: 'shape',
452
793
 
453
- stage: {
794
+ // width during animation, can be set to 'auto', initial', 'next' or pixel amount
795
+ width: 'initial',
454
796
 
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
- },
797
+ // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount
798
+ height: 'initial',
479
799
 
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
- },
800
+ // callback occurs on side change
801
+ onBeforeChange: function () {},
802
+ onChange: function () {},
504
803
 
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
- },
804
+ // allow animation to same side
805
+ allowRepeats: false,
533
806
 
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
- },
807
+ // animation duration
808
+ duration: false,
562
809
 
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
- }
810
+ // possible errors
811
+ error: {
812
+ side: 'You tried to switch to a side that does not exist.',
813
+ method: 'The method you called is not defined',
641
814
  },
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
- }
815
+
816
+ // classnames used
817
+ className: {
818
+ animating: 'animating',
819
+ hidden: 'hidden',
820
+ loading: 'loading',
821
+ active: 'active',
647
822
  },
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
- }
823
+
824
+ // selectors used
825
+ selector: {
826
+ sides: '.sides',
827
+ side: '.side',
701
828
  },
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 );
829
+
830
+ };
831
+ })(jQuery, window, document);