less-rails-semantic_ui 1.12.3.0 → 2.0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/assets/javascripts/semantic_ui/definitions/behaviors/api.js +394 -188
  3. data/assets/javascripts/semantic_ui/definitions/behaviors/colorize.js +4 -2
  4. data/assets/javascripts/semantic_ui/definitions/behaviors/form.js +263 -125
  5. data/assets/javascripts/semantic_ui/definitions/behaviors/state.js +3 -3
  6. data/assets/javascripts/semantic_ui/definitions/behaviors/visibility.js +213 -96
  7. data/assets/javascripts/semantic_ui/definitions/behaviors/visit.js +6 -4
  8. data/assets/javascripts/semantic_ui/definitions/globals/site.js +4 -4
  9. data/assets/javascripts/semantic_ui/definitions/modules/accordion.js +66 -52
  10. data/assets/javascripts/semantic_ui/definitions/modules/checkbox.js +309 -112
  11. data/assets/javascripts/semantic_ui/definitions/modules/dimmer.js +24 -26
  12. data/assets/javascripts/semantic_ui/definitions/modules/dropdown.js +2005 -590
  13. data/assets/javascripts/semantic_ui/definitions/modules/embed.js +662 -0
  14. data/assets/javascripts/semantic_ui/definitions/modules/modal.js +106 -79
  15. data/assets/javascripts/semantic_ui/definitions/modules/nag.js +7 -8
  16. data/assets/javascripts/semantic_ui/definitions/modules/popup.js +323 -194
  17. data/assets/javascripts/semantic_ui/definitions/modules/progress.js +111 -103
  18. data/assets/javascripts/semantic_ui/definitions/modules/rating.js +78 -54
  19. data/assets/javascripts/semantic_ui/definitions/modules/search.js +304 -122
  20. data/assets/javascripts/semantic_ui/definitions/modules/shape.js +93 -47
  21. data/assets/javascripts/semantic_ui/definitions/modules/sidebar.js +83 -149
  22. data/assets/javascripts/semantic_ui/definitions/modules/sticky.js +99 -29
  23. data/assets/javascripts/semantic_ui/definitions/modules/tab.js +219 -124
  24. data/assets/javascripts/semantic_ui/definitions/modules/transition.js +202 -171
  25. data/assets/stylesheets/semantic_ui/definitions/collections/breadcrumb.less +2 -1
  26. data/assets/stylesheets/semantic_ui/definitions/collections/form.less +135 -58
  27. data/assets/stylesheets/semantic_ui/definitions/collections/grid.less +366 -383
  28. data/assets/stylesheets/semantic_ui/definitions/collections/menu.less +838 -631
  29. data/assets/stylesheets/semantic_ui/definitions/collections/message.less +89 -71
  30. data/assets/stylesheets/semantic_ui/definitions/collections/table.less +183 -131
  31. data/assets/stylesheets/semantic_ui/definitions/elements/button.less +1097 -300
  32. data/assets/stylesheets/semantic_ui/definitions/elements/container.less +135 -0
  33. data/assets/stylesheets/semantic_ui/definitions/elements/divider.less +31 -30
  34. data/assets/stylesheets/semantic_ui/definitions/elements/flag.less +1 -1
  35. data/assets/stylesheets/semantic_ui/definitions/elements/header.less +209 -121
  36. data/assets/stylesheets/semantic_ui/definitions/elements/icon.less +201 -96
  37. data/assets/stylesheets/semantic_ui/definitions/elements/image.less +26 -11
  38. data/assets/stylesheets/semantic_ui/definitions/elements/input.less +49 -14
  39. data/assets/stylesheets/semantic_ui/definitions/elements/label.less +391 -221
  40. data/assets/stylesheets/semantic_ui/definitions/elements/list.less +107 -68
  41. data/assets/stylesheets/semantic_ui/definitions/elements/loader.less +3 -1
  42. data/assets/stylesheets/semantic_ui/definitions/elements/rail.less +34 -25
  43. data/assets/stylesheets/semantic_ui/definitions/elements/reveal.less +25 -10
  44. data/assets/stylesheets/semantic_ui/definitions/elements/segment.less +261 -173
  45. data/assets/stylesheets/semantic_ui/definitions/elements/step.less +169 -70
  46. data/assets/stylesheets/semantic_ui/definitions/globals/reset.less +1 -1
  47. data/assets/stylesheets/semantic_ui/definitions/globals/site.less +3 -1
  48. data/assets/stylesheets/semantic_ui/definitions/modules/accordion.less +1 -2
  49. data/assets/stylesheets/semantic_ui/definitions/modules/checkbox.less +175 -103
  50. data/assets/stylesheets/semantic_ui/definitions/modules/dimmer.less +26 -15
  51. data/assets/stylesheets/semantic_ui/definitions/modules/dropdown.less +349 -80
  52. data/assets/stylesheets/semantic_ui/definitions/modules/embed.less +174 -0
  53. data/assets/stylesheets/semantic_ui/definitions/modules/modal.less +83 -36
  54. data/assets/stylesheets/semantic_ui/definitions/modules/nag.less +1 -1
  55. data/assets/stylesheets/semantic_ui/definitions/modules/popup.less +48 -7
  56. data/assets/stylesheets/semantic_ui/definitions/modules/progress.less +160 -107
  57. data/assets/stylesheets/semantic_ui/definitions/modules/rating.less +57 -54
  58. data/assets/stylesheets/semantic_ui/definitions/modules/search.less +55 -10
  59. data/assets/stylesheets/semantic_ui/definitions/modules/shape.less +5 -6
  60. data/assets/stylesheets/semantic_ui/definitions/modules/sidebar.less +9 -5
  61. data/assets/stylesheets/semantic_ui/definitions/modules/sticky.less +1 -1
  62. data/assets/stylesheets/semantic_ui/definitions/modules/tab.less +1 -1
  63. data/assets/stylesheets/semantic_ui/definitions/modules/transition.less +3 -4
  64. data/assets/stylesheets/semantic_ui/definitions/views/card.less +240 -130
  65. data/assets/stylesheets/semantic_ui/definitions/views/comment.less +1 -1
  66. data/assets/stylesheets/semantic_ui/definitions/views/feed.less +15 -8
  67. data/assets/stylesheets/semantic_ui/definitions/views/item.less +13 -13
  68. data/assets/stylesheets/semantic_ui/definitions/views/statistic.less +230 -86
  69. data/assets/stylesheets/semantic_ui/theme.less +22 -15
  70. data/assets/stylesheets/semantic_ui/themes/amazon/elements/button.overrides +5 -5
  71. data/assets/stylesheets/semantic_ui/themes/amazon/elements/button.variables +5 -4
  72. data/assets/stylesheets/semantic_ui/themes/basic/collections/table.variables +1 -0
  73. data/assets/stylesheets/semantic_ui/themes/basic/views/card.variables +6 -4
  74. data/assets/stylesheets/semantic_ui/themes/bookish/elements/header.variables +4 -4
  75. data/assets/stylesheets/semantic_ui/themes/bootstrap3/elements/button.variables +1 -1
  76. data/assets/stylesheets/semantic_ui/themes/chubby/collections/form.overrides +8 -0
  77. data/assets/stylesheets/semantic_ui/themes/chubby/collections/menu.overrides +0 -0
  78. data/assets/stylesheets/semantic_ui/themes/chubby/collections/menu.variables +40 -0
  79. data/assets/stylesheets/semantic_ui/themes/classic/modules/progress.variables +1 -0
  80. data/assets/stylesheets/semantic_ui/themes/classic/views/card.overrides +1 -1
  81. data/assets/stylesheets/semantic_ui/themes/colored/modules/checkbox.overrides +0 -0
  82. data/assets/stylesheets/semantic_ui/themes/colored/modules/checkbox.variables +17 -0
  83. data/assets/stylesheets/semantic_ui/themes/default/collections/breadcrumb.overrides +0 -0
  84. data/assets/stylesheets/semantic_ui/themes/default/collections/breadcrumb.variables +5 -15
  85. data/assets/stylesheets/semantic_ui/themes/default/collections/form.overrides +0 -0
  86. data/assets/stylesheets/semantic_ui/themes/default/collections/form.variables +31 -35
  87. data/assets/stylesheets/semantic_ui/themes/default/collections/grid.overrides +0 -0
  88. data/assets/stylesheets/semantic_ui/themes/default/collections/grid.variables +34 -28
  89. data/assets/stylesheets/semantic_ui/themes/default/collections/menu.overrides +0 -0
  90. data/assets/stylesheets/semantic_ui/themes/default/collections/menu.variables +259 -163
  91. data/assets/stylesheets/semantic_ui/themes/default/collections/message.overrides +0 -0
  92. data/assets/stylesheets/semantic_ui/themes/default/collections/message.variables +42 -19
  93. data/assets/stylesheets/semantic_ui/themes/default/collections/table.overrides +0 -3
  94. data/assets/stylesheets/semantic_ui/themes/default/collections/table.variables +63 -59
  95. data/assets/stylesheets/semantic_ui/themes/default/elements/button.overrides +0 -0
  96. data/assets/stylesheets/semantic_ui/themes/default/elements/button.variables +90 -50
  97. data/assets/stylesheets/semantic_ui/themes/default/elements/container.overrides +3 -0
  98. data/assets/stylesheets/semantic_ui/themes/default/elements/container.variables +45 -0
  99. data/assets/stylesheets/semantic_ui/themes/default/elements/divider.overrides +15 -0
  100. data/assets/stylesheets/semantic_ui/themes/default/elements/divider.variables +3 -4
  101. data/assets/stylesheets/semantic_ui/themes/default/elements/flag.overrides +0 -0
  102. data/assets/stylesheets/semantic_ui/themes/default/elements/header.overrides +0 -0
  103. data/assets/stylesheets/semantic_ui/themes/default/elements/header.variables +40 -36
  104. data/assets/stylesheets/semantic_ui/themes/default/elements/icon.overrides +4 -3
  105. data/assets/stylesheets/semantic_ui/themes/default/elements/icon.variables +29 -12
  106. data/assets/stylesheets/semantic_ui/themes/default/elements/image.overrides +0 -0
  107. data/assets/stylesheets/semantic_ui/themes/default/elements/image.variables +5 -3
  108. data/assets/stylesheets/semantic_ui/themes/default/elements/input.overrides +0 -0
  109. data/assets/stylesheets/semantic_ui/themes/default/elements/input.variables +10 -24
  110. data/assets/stylesheets/semantic_ui/themes/default/elements/label.overrides +0 -0
  111. data/assets/stylesheets/semantic_ui/themes/default/elements/label.variables +88 -35
  112. data/assets/stylesheets/semantic_ui/themes/default/elements/list.overrides +0 -0
  113. data/assets/stylesheets/semantic_ui/themes/default/elements/list.variables +53 -34
  114. data/assets/stylesheets/semantic_ui/themes/default/elements/loader.overrides +0 -0
  115. data/assets/stylesheets/semantic_ui/themes/default/elements/loader.variables +9 -10
  116. data/assets/stylesheets/semantic_ui/themes/default/elements/rail.overrides +0 -0
  117. data/assets/stylesheets/semantic_ui/themes/default/elements/rail.variables +13 -5
  118. data/assets/stylesheets/semantic_ui/themes/default/elements/reveal.overrides +0 -0
  119. data/assets/stylesheets/semantic_ui/themes/default/elements/reveal.variables +6 -4
  120. data/assets/stylesheets/semantic_ui/themes/default/elements/segment.overrides +0 -0
  121. data/assets/stylesheets/semantic_ui/themes/default/elements/segment.variables +66 -28
  122. data/assets/stylesheets/semantic_ui/themes/default/elements/step.overrides +0 -0
  123. data/assets/stylesheets/semantic_ui/themes/default/elements/step.variables +60 -31
  124. data/assets/stylesheets/semantic_ui/themes/default/globals/reset.overrides +0 -0
  125. data/assets/stylesheets/semantic_ui/themes/default/globals/site.variables +477 -303
  126. data/assets/stylesheets/semantic_ui/themes/default/modules/accordion.overrides +0 -0
  127. data/assets/stylesheets/semantic_ui/themes/default/modules/accordion.variables +6 -7
  128. data/assets/stylesheets/semantic_ui/themes/default/modules/chatroom.overrides +0 -0
  129. data/assets/stylesheets/semantic_ui/themes/default/modules/checkbox.overrides +19 -16
  130. data/assets/stylesheets/semantic_ui/themes/default/modules/checkbox.variables +71 -43
  131. data/assets/stylesheets/semantic_ui/themes/default/modules/dimmer.overrides +0 -0
  132. data/assets/stylesheets/semantic_ui/themes/default/modules/dimmer.variables +12 -9
  133. data/assets/stylesheets/semantic_ui/themes/default/modules/dropdown.overrides +0 -5
  134. data/assets/stylesheets/semantic_ui/themes/default/modules/dropdown.variables +146 -64
  135. data/assets/stylesheets/semantic_ui/themes/default/modules/{video.overrides → embed.overrides} +0 -0
  136. data/assets/stylesheets/semantic_ui/themes/default/modules/embed.variables +53 -0
  137. data/assets/stylesheets/semantic_ui/themes/default/modules/modal.overrides +0 -0
  138. data/assets/stylesheets/semantic_ui/themes/default/modules/modal.variables +24 -18
  139. data/assets/stylesheets/semantic_ui/themes/default/modules/nag.overrides +0 -0
  140. data/assets/stylesheets/semantic_ui/themes/default/modules/popup.overrides +0 -0
  141. data/assets/stylesheets/semantic_ui/themes/default/modules/popup.variables +3 -9
  142. data/assets/stylesheets/semantic_ui/themes/default/modules/progress.variables +13 -7
  143. data/assets/stylesheets/semantic_ui/themes/default/modules/rating.overrides +0 -0
  144. data/assets/stylesheets/semantic_ui/themes/default/modules/rating.variables +71 -33
  145. data/assets/stylesheets/semantic_ui/themes/default/modules/search.overrides +0 -0
  146. data/assets/stylesheets/semantic_ui/themes/default/modules/search.variables +36 -34
  147. data/assets/stylesheets/semantic_ui/themes/default/modules/shape.overrides +0 -0
  148. data/assets/stylesheets/semantic_ui/themes/default/modules/shape.variables +7 -2
  149. data/assets/stylesheets/semantic_ui/themes/default/modules/sidebar.overrides +0 -0
  150. data/assets/stylesheets/semantic_ui/themes/default/modules/sidebar.variables +2 -5
  151. data/assets/stylesheets/semantic_ui/themes/default/modules/sticky.overrides +0 -0
  152. data/assets/stylesheets/semantic_ui/themes/default/modules/sticky.variables +2 -7
  153. data/assets/stylesheets/semantic_ui/themes/default/modules/tab.variables +1 -3
  154. data/assets/stylesheets/semantic_ui/themes/default/modules/transition.overrides +8 -9
  155. data/assets/stylesheets/semantic_ui/themes/default/views/ad.variables +2 -2
  156. data/assets/stylesheets/semantic_ui/themes/default/views/card.variables +33 -23
  157. data/assets/stylesheets/semantic_ui/themes/default/views/comment.overrides +0 -0
  158. data/assets/stylesheets/semantic_ui/themes/default/views/feed.overrides +0 -0
  159. data/assets/stylesheets/semantic_ui/themes/default/views/feed.variables +15 -23
  160. data/assets/stylesheets/semantic_ui/themes/default/views/item.overrides +0 -0
  161. data/assets/stylesheets/semantic_ui/themes/default/views/item.variables +12 -11
  162. data/assets/stylesheets/semantic_ui/themes/default/views/statistic.overrides +0 -0
  163. data/assets/stylesheets/semantic_ui/themes/default/views/statistic.variables +25 -24
  164. data/assets/stylesheets/semantic_ui/themes/flat/collections/form.overrides +4 -0
  165. data/assets/stylesheets/semantic_ui/themes/flat/collections/form.variables +1 -2
  166. data/assets/stylesheets/semantic_ui/themes/flat/globals/site.variables +1 -0
  167. data/assets/stylesheets/semantic_ui/themes/github/collections/form.variables +1 -1
  168. data/assets/stylesheets/semantic_ui/themes/github/collections/menu.variables +10 -15
  169. data/assets/stylesheets/semantic_ui/themes/github/elements/button.variables +2 -2
  170. data/assets/stylesheets/semantic_ui/themes/github/elements/step.variables +2 -2
  171. data/assets/stylesheets/semantic_ui/themes/instagram/views/card.overrides +12 -0
  172. data/assets/stylesheets/semantic_ui/themes/instagram/views/card.variables +23 -0
  173. data/assets/stylesheets/semantic_ui/themes/material/collections/menu.overrides +1 -0
  174. data/assets/stylesheets/semantic_ui/themes/material/collections/menu.variables +10 -0
  175. data/assets/stylesheets/semantic_ui/themes/material/elements/button.overrides +1 -0
  176. data/assets/stylesheets/semantic_ui/themes/material/elements/button.variables +14 -6
  177. data/assets/stylesheets/semantic_ui/themes/material/globals/site.variables +3 -2
  178. data/assets/stylesheets/semantic_ui/themes/material/modules/dropdown.overrides +5 -0
  179. data/assets/stylesheets/semantic_ui/themes/material/modules/dropdown.variables +20 -0
  180. data/assets/stylesheets/semantic_ui/themes/raised/elements/button.variables +5 -5
  181. data/assets/stylesheets/semantic_ui/themes/round/elements/button.variables +1 -1
  182. data/assets/stylesheets/semantic_ui/themes/timeline/views/feed.overrides +4 -12
  183. data/assets/stylesheets/semantic_ui/themes/timeline/views/feed.variables +3 -7
  184. data/lib/generators/semantic_ui/install/templates/config/elements/container.overrides +3 -0
  185. data/lib/generators/semantic_ui/install/templates/config/elements/container.variables +3 -0
  186. data/lib/generators/semantic_ui/install/templates/config/modules/embed.overrides +3 -0
  187. data/lib/generators/semantic_ui/install/templates/config/modules/embed.variables +0 -0
  188. data/lib/generators/semantic_ui/install/templates/semantic_ui.css +2 -1
  189. data/lib/generators/semantic_ui/install/templates/semantic_ui.js +1 -1
  190. data/lib/generators/semantic_ui/install/templates/theme.config +5 -3
  191. data/lib/less/rails/semantic_ui/version.rb +1 -1
  192. data/tasks/update.rake +21 -6
  193. metadata +23 -7
  194. data/assets/fonts/semantic_ui/themes/default/assets/fonts/icons.otf +0 -0
  195. data/assets/javascripts/semantic_ui/definitions/modules/video.js +0 -540
  196. data/assets/stylesheets/semantic_ui/definitions/modules/video.less +0 -135
  197. data/assets/stylesheets/semantic_ui/themes/default/modules/video.variables +0 -16
@@ -3,7 +3,7 @@
3
3
  * http://github.com/semantic-org/semantic-ui/
4
4
  *
5
5
  *
6
- * Copyright 2014 Contributorss
6
+ * Copyright 2015 Contributors
7
7
  * Released under the MIT license
8
8
  * http://opensource.org/licenses/MIT
9
9
  *
@@ -43,8 +43,8 @@ $.fn.sticky = function(parameters) {
43
43
 
44
44
  $module = $(this),
45
45
  $window = $(window),
46
- $container = $module.offsetParent(),
47
46
  $scroll = $(settings.scrollContext),
47
+ $container,
48
48
  $context,
49
49
 
50
50
  selector = $module.selector || '',
@@ -65,6 +65,7 @@ $.fn.sticky = function(parameters) {
65
65
 
66
66
  initialize: function() {
67
67
 
68
+ module.determineContainer();
68
69
  module.determineContext();
69
70
  module.verbose('Initializing sticky', settings, $container);
70
71
 
@@ -110,7 +111,7 @@ $.fn.sticky = function(parameters) {
110
111
  observer = new MutationObserver(function(mutations) {
111
112
  clearTimeout(module.timer);
112
113
  module.timer = setTimeout(function() {
113
- module.verbose('DOM tree modified, updating sticky menu');
114
+ module.verbose('DOM tree modified, updating sticky menu', mutations);
114
115
  module.refresh();
115
116
  }, 100);
116
117
  });
@@ -126,6 +127,10 @@ $.fn.sticky = function(parameters) {
126
127
  }
127
128
  },
128
129
 
130
+ determineContainer: function() {
131
+ $container = $module.offsetParent();
132
+ },
133
+
129
134
  determineContext: function() {
130
135
  if(settings.context) {
131
136
  $context = $(settings.context);
@@ -176,7 +181,7 @@ $.fn.sticky = function(parameters) {
176
181
  },
177
182
  scroll: function() {
178
183
  requestAnimationFrame(function() {
179
- $scroll.trigger('scrollchange' + eventNamespace, $scroll.scrollTop() );
184
+ $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );
180
185
  });
181
186
  },
182
187
  scrollchange: function(event, scrollPosition) {
@@ -187,8 +192,11 @@ $.fn.sticky = function(parameters) {
187
192
 
188
193
  refresh: function(hardRefresh) {
189
194
  module.reset();
195
+ if(!settings.context) {
196
+ module.determineContext();
197
+ }
190
198
  if(hardRefresh) {
191
- $container = $module.offsetParent();
199
+ module.determineContainer();
192
200
  }
193
201
  module.save.positions();
194
202
  module.stick();
@@ -199,7 +207,7 @@ $.fn.sticky = function(parameters) {
199
207
  sticky: function() {
200
208
  var
201
209
  $element = $('<div/>'),
202
- element = $element.get()
210
+ element = $element[0]
203
211
  ;
204
212
  $element.addClass(className.supported);
205
213
  return($element.css('position').match('sticky'));
@@ -210,6 +218,9 @@ $.fn.sticky = function(parameters) {
210
218
  lastScroll: function(scroll) {
211
219
  module.lastScroll = scroll;
212
220
  },
221
+ elementScroll: function(scroll) {
222
+ module.elementScroll = scroll;
223
+ },
213
224
  positions: function() {
214
225
  var
215
226
  window = {
@@ -228,6 +239,9 @@ $.fn.sticky = function(parameters) {
228
239
  offset : $context.offset(),
229
240
  height : $context.outerHeight(),
230
241
  bottomPadding : parseInt($context.css('padding-bottom'), 10)
242
+ },
243
+ container = {
244
+ height: $container.outerHeight()
231
245
  }
232
246
  ;
233
247
  module.cache = {
@@ -281,6 +295,9 @@ $.fn.sticky = function(parameters) {
281
295
  ;
282
296
  },
283
297
  currentElementScroll: function() {
298
+ if(module.elementScroll) {
299
+ return module.elementScroll;
300
+ }
284
301
  return ( module.is.top() )
285
302
  ? Math.abs(parseInt($module.css('top'), 10)) || 0
286
303
  : Math.abs(parseInt($module.css('bottom'), 10)) || 0
@@ -295,8 +312,7 @@ $.fn.sticky = function(parameters) {
295
312
  delta = module.get.scrollChange(scroll),
296
313
  maxScroll = (element.height - window.height + settings.offset),
297
314
  elementScroll = module.get.currentElementScroll(),
298
- possibleScroll = (elementScroll + delta),
299
- elementScroll
315
+ possibleScroll = (elementScroll + delta)
300
316
  ;
301
317
  if(module.cache.fits || possibleScroll < 0) {
302
318
  elementScroll = 0;
@@ -312,6 +328,12 @@ $.fn.sticky = function(parameters) {
312
328
  },
313
329
 
314
330
  remove: {
331
+ lastScroll: function() {
332
+ delete module.lastScroll;
333
+ },
334
+ elementScroll: function(scroll) {
335
+ delete module.elementScroll;
336
+ },
315
337
  offset: function() {
316
338
  $module.css('margin-top', '');
317
339
  }
@@ -320,7 +342,9 @@ $.fn.sticky = function(parameters) {
320
342
  set: {
321
343
  offset: function() {
322
344
  module.verbose('Setting offset on element', settings.offset);
323
- $module.css('margin-top', settings.offset);
345
+ $module
346
+ .css('margin-top', settings.offset)
347
+ ;
324
348
  },
325
349
  containerSize: function() {
326
350
  var
@@ -329,10 +353,10 @@ $.fn.sticky = function(parameters) {
329
353
  if(tagName === 'HTML' || tagName == 'body') {
330
354
  // this can trigger for too many reasons
331
355
  //module.error(error.container, tagName, $module);
332
- $container = $module.offsetParent();
356
+ module.determineContainer();
333
357
  }
334
358
  else {
335
- if( Math.abs($container.height() - module.cache.context.height) > 5) {
359
+ if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {
336
360
  module.debug('Context has padding, specifying exact height for container', module.cache.context.height);
337
361
  $container.css({
338
362
  height: module.cache.context.height
@@ -340,8 +364,19 @@ $.fn.sticky = function(parameters) {
340
364
  }
341
365
  }
342
366
  },
367
+ minimumSize: function() {
368
+ var
369
+ element = module.cache.element
370
+ ;
371
+ $container
372
+ .css('min-height', element.height)
373
+ ;
374
+ },
343
375
  scroll: function(scroll) {
344
376
  module.debug('Setting scroll on element', scroll);
377
+ if(module.elementScroll == scroll) {
378
+ return;
379
+ }
345
380
  if( module.is.top() ) {
346
381
  $module
347
382
  .css('bottom', '')
@@ -413,17 +448,14 @@ $.fn.sticky = function(parameters) {
413
448
  elementVisible = (element.height !== 0)
414
449
  ;
415
450
 
416
- // save current scroll for next run
417
- module.save.lastScroll(scroll.top);
418
-
419
451
  if(elementVisible) {
420
452
 
421
453
  if( module.is.initialPosition() ) {
422
- if(scroll.top >= context.bottom) {
454
+ if(scroll.top > context.bottom) {
423
455
  module.debug('Element bottom of container');
424
456
  module.bindBottom();
425
457
  }
426
- else if(scroll.top >= element.top) {
458
+ else if(scroll.top > element.top) {
427
459
  module.debug('Element passed, fixing element to page');
428
460
  module.fixTop();
429
461
  }
@@ -481,15 +513,21 @@ $.fn.sticky = function(parameters) {
481
513
  }
482
514
  }
483
515
  }
516
+
517
+ // save current scroll for next run
518
+ module.save.lastScroll(scroll.top);
519
+ module.save.elementScroll(elementScroll);
484
520
  },
485
521
 
486
522
  bindTop: function() {
487
523
  module.debug('Binding element to top of parent container');
488
524
  module.remove.offset();
489
525
  $module
490
- .css('left' , '')
491
- .css('top' , '')
492
- .css('margin-bottom' , '')
526
+ .css({
527
+ left : '',
528
+ top : '',
529
+ marginBottom : ''
530
+ })
493
531
  .removeClass(className.fixed)
494
532
  .removeClass(className.bottom)
495
533
  .addClass(className.bound)
@@ -502,9 +540,11 @@ $.fn.sticky = function(parameters) {
502
540
  module.debug('Binding element to bottom of parent container');
503
541
  module.remove.offset();
504
542
  $module
505
- .css('left' , '')
506
- .css('top' , '')
507
- .css('margin-bottom' , module.cache.context.bottomPadding)
543
+ .css({
544
+ left : '',
545
+ top : '',
546
+ marginBottom : module.cache.context.bottomPadding
547
+ })
508
548
  .removeClass(className.fixed)
509
549
  .removeClass(className.top)
510
550
  .addClass(className.bound)
@@ -522,10 +562,14 @@ $.fn.sticky = function(parameters) {
522
562
 
523
563
  fixTop: function() {
524
564
  module.debug('Fixing element to top of page');
565
+ module.set.minimumSize();
525
566
  module.set.offset();
526
567
  $module
527
- .css('left', module.cache.element.left)
528
- .css('bottom' , '')
568
+ .css({
569
+ left : module.cache.element.left,
570
+ bottom : '',
571
+ marginBottom : ''
572
+ })
529
573
  .removeClass(className.bound)
530
574
  .removeClass(className.bottom)
531
575
  .addClass(className.fixed)
@@ -536,10 +580,14 @@ $.fn.sticky = function(parameters) {
536
580
 
537
581
  fixBottom: function() {
538
582
  module.debug('Sticking element to bottom of page');
583
+ module.set.minimumSize();
539
584
  module.set.offset();
540
585
  $module
541
- .css('left', module.cache.element.left)
542
- .css('bottom' , '')
586
+ .css({
587
+ left : module.cache.element.left,
588
+ bottom : '',
589
+ marginBottom : ''
590
+ })
543
591
  .removeClass(className.bound)
544
592
  .removeClass(className.top)
545
593
  .addClass(className.fixed)
@@ -575,6 +623,7 @@ $.fn.sticky = function(parameters) {
575
623
  module.unfix();
576
624
  module.resetCSS();
577
625
  module.remove.offset();
626
+ module.remove.lastScroll();
578
627
  },
579
628
 
580
629
  resetCSS: function() {
@@ -772,23 +821,44 @@ $.fn.sticky.settings = {
772
821
  namespace : 'sticky',
773
822
 
774
823
  debug : false,
775
- verbose : false,
776
- performance : false,
824
+ verbose : true,
825
+ performance : true,
777
826
 
827
+ // whether to stick in the opposite direction on scroll up
778
828
  pushing : false,
829
+
779
830
  context : false,
831
+
832
+ // Context to watch scroll events
780
833
  scrollContext : window,
781
834
 
835
+ // Offset to adjust scroll
782
836
  offset : 0,
837
+
838
+ // Offset to adjust scroll when attached to bottom of screen
783
839
  bottomOffset : 0,
784
840
 
785
- observeChanges : true,
841
+ jitter : 5, // will only set container height if difference between context and container is larger than this number
786
842
 
843
+ // Whether to automatically observe changes with Mutation Observers
844
+ observeChanges : false,
845
+
846
+ // Called when position is recalculated
787
847
  onReposition : function(){},
848
+
849
+ // Called on each scroll
788
850
  onScroll : function(){},
851
+
852
+ // Called when element is stuck to viewport
789
853
  onStick : function(){},
854
+
855
+ // Called when element is unstuck from viewport
790
856
  onUnstick : function(){},
857
+
858
+ // Called when element reaches top of context
791
859
  onTop : function(){},
860
+
861
+ // Called when element reaches bottom of context
792
862
  onBottom : function(){},
793
863
 
794
864
  error : {
@@ -3,7 +3,7 @@
3
3
  * http://github.com/semantic-org/semantic-ui/
4
4
  *
5
5
  *
6
- * Copyright 2014 Contributorss
6
+ * Copyright 2015 Contributors
7
7
  * Released under the MIT license
8
8
  * http://opensource.org/licenses/MIT
9
9
  *
@@ -21,10 +21,6 @@ $.fn.tab = function(parameters) {
21
21
  ? $(window)
22
22
  : $(this),
23
23
 
24
- settings = ( $.isPlainObject(parameters) )
25
- ? $.extend(true, {}, $.fn.tab.settings, parameters)
26
- : $.extend({}, $.fn.tab.settings),
27
-
28
24
  moduleSelector = $allModules.selector || '',
29
25
  time = new Date().getTime(),
30
26
  performance = [],
@@ -33,7 +29,7 @@ $.fn.tab = function(parameters) {
33
29
  methodInvoked = (typeof query == 'string'),
34
30
  queryArguments = [].slice.call(arguments, 1),
35
31
 
36
- module,
32
+ initializedHistory = false,
37
33
  returnedValue
38
34
  ;
39
35
 
@@ -41,53 +37,86 @@ $.fn.tab = function(parameters) {
41
37
  .each(function() {
42
38
  var
43
39
 
44
- className = settings.className,
45
- metadata = settings.metadata,
46
- selector = settings.selector,
47
- error = settings.error,
48
-
49
- eventNamespace = '.' + settings.namespace,
50
- moduleNamespace = 'module-' + settings.namespace,
40
+ settings = ( $.isPlainObject(parameters) )
41
+ ? $.extend(true, {}, $.fn.tab.settings, parameters)
42
+ : $.extend({}, $.fn.tab.settings),
51
43
 
52
- $module = $(this),
44
+ className = settings.className,
45
+ metadata = settings.metadata,
46
+ selector = settings.selector,
47
+ error = settings.error,
53
48
 
54
- cache = {},
55
- firstLoad = true,
56
- recursionDepth = 0,
49
+ eventNamespace = '.' + settings.namespace,
50
+ moduleNamespace = 'module-' + settings.namespace,
57
51
 
52
+ $module = $(this),
58
53
  $context,
59
54
  $tabs,
55
+
56
+ cache = {},
57
+ firstLoad = true,
58
+ recursionDepth = 0,
59
+ element = this,
60
+ instance = $module.data(moduleNamespace),
61
+
60
62
  activeTabPath,
61
63
  parameterArray,
62
- historyEvent,
64
+ module,
65
+
66
+ historyEvent
63
67
 
64
- element = this,
65
- instance = $module.data(moduleNamespace)
66
68
  ;
67
69
 
68
70
  module = {
69
71
 
70
72
  initialize: function() {
71
73
  module.debug('Initializing tab menu item', $module);
72
-
74
+ module.fix.callbacks();
73
75
  module.determineTabs();
74
- module.debug('Determining tabs', settings.context, $tabs);
75
76
 
77
+ module.debug('Determining tabs', settings.context, $tabs);
76
78
  // set up automatic routing
77
79
  if(settings.auto) {
78
80
  module.set.auto();
79
81
  }
82
+ module.bind.events();
80
83
 
81
- // attach events if navigation wasn't set to window
82
- if( !$.isWindow( element ) ) {
83
- module.debug('Attaching tab activation events to element', $module);
84
- $module
85
- .on('click' + eventNamespace, module.event.click)
86
- ;
84
+ if(settings.history && !initializedHistory) {
85
+ module.initializeHistory();
86
+ initializedHistory = true;
87
87
  }
88
+
88
89
  module.instantiate();
89
90
  },
90
91
 
92
+ instantiate: function () {
93
+ module.verbose('Storing instance of module', module);
94
+ instance = module;
95
+ $module
96
+ .data(moduleNamespace, module)
97
+ ;
98
+ },
99
+
100
+ destroy: function() {
101
+ module.debug('Destroying tabs', $module);
102
+ $module
103
+ .removeData(moduleNamespace)
104
+ .off(eventNamespace)
105
+ ;
106
+ },
107
+
108
+ bind: {
109
+ events: function() {
110
+ // if using $.tab dont add events
111
+ if( !$.isWindow( element ) ) {
112
+ module.debug('Attaching tab activation events to element', $module);
113
+ $module
114
+ .on('click' + eventNamespace, module.event.click)
115
+ ;
116
+ }
117
+ }
118
+ },
119
+
91
120
  determineTabs: function() {
92
121
  var
93
122
  $reference
@@ -97,7 +126,7 @@ $.fn.tab = function(parameters) {
97
126
  if(settings.context === 'parent') {
98
127
  if($module.closest(selector.ui).length > 0) {
99
128
  $reference = $module.closest(selector.ui);
100
- module.verbose('Using closest UI element for determining parent', $reference);
129
+ module.verbose('Using closest UI element as parent', $reference);
101
130
  }
102
131
  else {
103
132
  $reference = $module;
@@ -112,7 +141,6 @@ $.fn.tab = function(parameters) {
112
141
  else {
113
142
  $context = $('body');
114
143
  }
115
-
116
144
  // find tabs
117
145
  if(settings.childrenOnly) {
118
146
  $tabs = $context.children(selector.tabs);
@@ -124,48 +152,48 @@ $.fn.tab = function(parameters) {
124
152
  }
125
153
  },
126
154
 
127
- initializeHistory: function() {
128
- if(settings.history) {
129
- module.debug('Initializing page state');
130
- if( $.address === undefined ) {
131
- module.error(error.state);
132
- return false;
133
- }
134
- else {
135
- if(settings.historyType == 'state') {
136
- module.debug('Using HTML5 to manage state');
137
- if(settings.path !== false) {
138
- $.address
139
- .history(true)
140
- .state(settings.path)
141
- ;
142
- }
143
- else {
144
- module.error(error.path);
145
- return false;
146
- }
155
+ fix: {
156
+ callbacks: function() {
157
+ if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {
158
+ if(parameters.onTabLoad) {
159
+ parameters.onLoad = parameters.onTabLoad;
160
+ delete parameters.onTabLoad;
161
+ module.error(error.legacyLoad, parameters.onLoad);
147
162
  }
148
- $.address
149
- .bind('change', module.event.history.change)
150
- ;
163
+ if(parameters.onTabInit) {
164
+ parameters.onFirstLoad = parameters.onTabInit;
165
+ delete parameters.onTabInit;
166
+ module.error(error.legacyInit, parameters.onFirstLoad);
167
+ }
168
+ settings = $.extend(true, {}, $.fn.tab.settings, parameters);
151
169
  }
152
170
  }
153
171
  },
154
172
 
155
- instantiate: function () {
156
- module.verbose('Storing instance of module', module);
157
- instance = module;
158
- $module
159
- .data(moduleNamespace, module)
160
- ;
161
- },
162
-
163
- destroy: function() {
164
- module.debug('Destroying tabs', $module);
165
- $module
166
- .removeData(moduleNamespace)
167
- .off(eventNamespace)
168
- ;
173
+ initializeHistory: function() {
174
+ module.debug('Initializing page state');
175
+ if( $.address === undefined ) {
176
+ module.error(error.state);
177
+ return false;
178
+ }
179
+ else {
180
+ if(settings.historyType == 'state') {
181
+ module.debug('Using HTML5 to manage state');
182
+ if(settings.path !== false) {
183
+ $.address
184
+ .history(true)
185
+ .state(settings.path)
186
+ ;
187
+ }
188
+ else {
189
+ module.error(error.path);
190
+ return false;
191
+ }
192
+ }
193
+ $.address
194
+ .bind('change', module.event.history.change)
195
+ ;
196
+ }
169
197
  },
170
198
 
171
199
  event: {
@@ -251,6 +279,23 @@ $.fn.tab = function(parameters) {
251
279
  };
252
280
  }
253
281
  },
282
+ loading: function(tabPath) {
283
+ var
284
+ $tab = module.get.tabElement(tabPath),
285
+ isLoading = $tab.hasClass(className.loading)
286
+ ;
287
+ if(!isLoading) {
288
+ module.verbose('Setting loading state for', $tab);
289
+ $tab
290
+ .addClass(className.loading)
291
+ .siblings($tabs)
292
+ .removeClass(className.active + ' ' + className.loading)
293
+ ;
294
+ if($tab.length > 0) {
295
+ settings.onRequest.call($tab[0], tabPath);
296
+ }
297
+ }
298
+ },
254
299
  state: function(state) {
255
300
  $.address.value(state);
256
301
  }
@@ -261,7 +306,7 @@ $.fn.tab = function(parameters) {
261
306
  pushStateAvailable = (window.history && window.history.pushState),
262
307
  shouldIgnoreLoad = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),
263
308
  remoteContent = (settings.auto || $.isPlainObject(settings.apiSettings) ),
264
- // only get default path if not remote content
309
+ // only add default path if not remote content
265
310
  pathArray = (remoteContent && !shouldIgnoreLoad)
266
311
  ? module.utilities.pathToArray(tabPath)
267
312
  : module.get.defaultPathArray(tabPath)
@@ -283,7 +328,6 @@ $.fn.tab = function(parameters) {
283
328
  ;
284
329
  module.verbose('Looking for tab', tab);
285
330
  if(isTab) {
286
-
287
331
  module.verbose('Tab was found', tab);
288
332
  // scope up
289
333
  activeTabPath = currentPath;
@@ -303,15 +347,15 @@ $.fn.tab = function(parameters) {
303
347
  if(isLastTab && remoteContent) {
304
348
  if(!shouldIgnoreLoad) {
305
349
  module.activate.navigation(currentPath);
306
- module.content.fetch(currentPath, tabPath);
350
+ module.fetch.content(currentPath, tabPath);
307
351
  }
308
352
  else {
309
353
  module.debug('Ignoring remote content on first tab load', currentPath);
310
354
  firstLoad = false;
311
355
  module.cache.add(tabPath, $tab.html());
312
356
  module.activate.all(currentPath);
313
- settings.onTabInit.call($tab, currentPath, parameterArray, historyEvent);
314
- settings.onTabLoad.call($tab, currentPath, parameterArray, historyEvent);
357
+ settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
358
+ settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
315
359
  }
316
360
  return false;
317
361
  }
@@ -321,25 +365,32 @@ $.fn.tab = function(parameters) {
321
365
  if( !module.cache.read(currentPath) ) {
322
366
  module.cache.add(currentPath, true);
323
367
  module.debug('First time tab loaded calling tab init');
324
- settings.onTabInit.call($tab, currentPath, parameterArray, historyEvent);
368
+ settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
325
369
  }
326
- settings.onTabLoad.call($tab, currentPath, parameterArray, historyEvent);
370
+ settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
327
371
  }
372
+
328
373
  }
329
374
  else if(tabPath.search('/') == -1 && tabPath !== '') {
330
375
  // look for in page anchor
331
- $anchor = $('#' + tabPath + ', a[name="' + tabPath + '"]'),
376
+ $anchor = $('#' + tabPath + ', a[name="' + tabPath + '"]');
332
377
  currentPath = $anchor.closest('[data-tab]').data('tab');
333
378
  $tab = module.get.tabElement(currentPath);
334
379
  // if anchor exists use parent tab
335
380
  if($anchor && $anchor.length > 0 && currentPath) {
336
- module.debug('No tab found, but deep anchor link present, opening parent tab');
381
+ module.debug('Anchor link used, opening parent tab', $tab, $anchor);
382
+ if( !$tab.hasClass(className.active) ) {
383
+ setTimeout(function() {
384
+ module.scrollTo($anchor);
385
+ }, 0);
386
+ }
337
387
  module.activate.all(currentPath);
338
388
  if( !module.cache.read(currentPath) ) {
339
389
  module.cache.add(currentPath, true);
340
390
  module.debug('First time tab loaded calling tab init');
341
- settings.onTabInit.call($tab, currentPath, parameterArray, historyEvent);
391
+ settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
342
392
  }
393
+ settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
343
394
  return false;
344
395
  }
345
396
  }
@@ -350,17 +401,51 @@ $.fn.tab = function(parameters) {
350
401
  });
351
402
  },
352
403
 
353
- content: {
404
+ scrollTo: function($element) {
405
+ var
406
+ scrollOffset = ($element && $element.length > 0)
407
+ ? $element.offset().top
408
+ : false
409
+ ;
410
+ if(scrollOffset !== false) {
411
+ module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);
412
+ $(document).scrollTop(scrollOffset);
413
+ }
414
+ },
415
+
416
+ update: {
417
+ content: function(tabPath, html, evaluateScripts) {
418
+ var
419
+ $tab = module.get.tabElement(tabPath),
420
+ tab = $tab[0]
421
+ ;
422
+ evaluateScripts = (evaluateScripts !== undefined)
423
+ ? evaluateScripts
424
+ : settings.evaluateScripts
425
+ ;
426
+ if(evaluateScripts) {
427
+ module.debug('Updating HTML and evaluating inline scripts', tabPath, html);
428
+ $tab.html(html);
429
+ }
430
+ else {
431
+ module.debug('Updating HTML', tabPath, html);
432
+ tab.innerHTML = html;
433
+ }
434
+ }
435
+ },
436
+
437
+ fetch: {
354
438
 
355
- fetch: function(tabPath, fullTabPath) {
439
+ content: function(tabPath, fullTabPath) {
356
440
  var
357
441
  $tab = module.get.tabElement(tabPath),
358
442
  apiSettings = {
359
- dataType : 'html',
360
- on : 'now',
361
- onSuccess : function(response) {
443
+ dataType : 'html',
444
+ on : 'now',
445
+ cache : 'local',
446
+ onSuccess : function(response) {
362
447
  module.cache.add(fullTabPath, response);
363
- module.content.update(tabPath, response);
448
+ module.update.content(tabPath, response);
364
449
  if(tabPath == activeTabPath) {
365
450
  module.debug('Content loaded', tabPath);
366
451
  module.activate.tab(tabPath);
@@ -368,10 +453,12 @@ $.fn.tab = function(parameters) {
368
453
  else {
369
454
  module.debug('Content loaded in background', tabPath);
370
455
  }
371
- settings.onTabInit.call($tab, tabPath, parameterArray, historyEvent);
372
- settings.onTabLoad.call($tab, tabPath, parameterArray, historyEvent);
456
+ settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);
457
+ settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);
373
458
  },
374
- urlData: { tab: fullTabPath }
459
+ urlData: {
460
+ tab: fullTabPath
461
+ }
375
462
  },
376
463
  request = $tab.api('get request') || false,
377
464
  existingRequest = ( request && request.state() === 'pending' ),
@@ -383,37 +470,33 @@ $.fn.tab = function(parameters) {
383
470
  cachedContent = module.cache.read(fullTabPath);
384
471
 
385
472
 
386
- module.activate.tab(tabPath);
387
-
388
473
  if(settings.cache && cachedContent) {
389
- module.debug('Showing existing content', fullTabPath);
390
- module.content.update(tabPath, cachedContent);
391
- settings.onTabLoad.call($tab, tabPath, parameterArray, historyEvent);
474
+ module.activate.tab(tabPath);
475
+ module.debug('Adding cached content', fullTabPath);
476
+ if(settings.evaluateScripts == 'once') {
477
+ module.update.content(tabPath, cachedContent, false);
478
+ }
479
+ else {
480
+ module.update.content(tabPath, cachedContent);
481
+ }
482
+ settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);
392
483
  }
393
484
  else if(existingRequest) {
485
+ module.set.loading(tabPath);
394
486
  module.debug('Content is already loading', fullTabPath);
395
- $tab.addClass(className.loading);
396
487
  }
397
488
  else if($.api !== undefined) {
398
489
  requestSettings = $.extend(true, {
399
- headers: { 'X-Remote': true }
490
+ headers: {
491
+ 'X-Remote': true
492
+ }
400
493
  }, settings.apiSettings, apiSettings);
401
494
  module.debug('Retrieving remote content', fullTabPath, requestSettings);
402
- $tab.api( requestSettings );
495
+ $tab.api(requestSettings);
403
496
  }
404
497
  else {
405
498
  module.error(error.api);
406
499
  }
407
- },
408
-
409
- update: function(tabPath, html) {
410
- module.debug('Updating html for', tabPath);
411
- var
412
- $tab = module.get.tabElement(tabPath)
413
- ;
414
- $tab
415
- .html(html)
416
- ;
417
500
  }
418
501
  },
419
502
 
@@ -424,25 +507,34 @@ $.fn.tab = function(parameters) {
424
507
  },
425
508
  tab: function(tabPath) {
426
509
  var
427
- $tab = module.get.tabElement(tabPath)
510
+ $tab = module.get.tabElement(tabPath),
511
+ isActive = $tab.hasClass(className.active)
428
512
  ;
429
513
  module.verbose('Showing tab content for', $tab);
430
- $tab
431
- .addClass(className.active)
432
- .siblings($tabs)
433
- .removeClass(className.active + ' ' + className.loading)
434
- ;
514
+ if(!isActive) {
515
+ $tab
516
+ .addClass(className.active)
517
+ .siblings($tabs)
518
+ .removeClass(className.active + ' ' + className.loading)
519
+ ;
520
+ if($tab.length > 0) {
521
+ settings.onVisible.call($tab[0], tabPath);
522
+ }
523
+ }
435
524
  },
436
525
  navigation: function(tabPath) {
437
526
  var
438
- $navigation = module.get.navElement(tabPath)
527
+ $navigation = module.get.navElement(tabPath),
528
+ isActive = $navigation.hasClass(className.active)
439
529
  ;
440
530
  module.verbose('Activating tab navigation for', $navigation, tabPath);
441
- $navigation
442
- .addClass(className.active)
443
- .siblings($allModules)
444
- .removeClass(className.active + ' ' + className.loading)
445
- ;
531
+ if(!isActive) {
532
+ $navigation
533
+ .addClass(className.active)
534
+ .siblings($allModules)
535
+ .removeClass(className.active + ' ' + className.loading)
536
+ ;
537
+ }
446
538
  }
447
539
  },
448
540
 
@@ -626,7 +718,7 @@ $.fn.tab = function(parameters) {
626
718
  });
627
719
  }
628
720
  clearTimeout(module.performance.timer);
629
- module.performance.timer = setTimeout(module.performance.display, 100);
721
+ module.performance.timer = setTimeout(module.performance.display, 500);
630
722
  },
631
723
  display: function() {
632
724
  var
@@ -726,9 +818,6 @@ $.fn.tab = function(parameters) {
726
818
  }
727
819
  })
728
820
  ;
729
- if(module && !methodInvoked) {
730
- module.initializeHistory();
731
- }
732
821
  return (returnedValue !== undefined)
733
822
  ? returnedValue
734
823
  : this
@@ -747,7 +836,7 @@ $.fn.tab.settings = {
747
836
  namespace : 'tab',
748
837
 
749
838
  debug : false,
750
- verbose : true,
839
+ verbose : false,
751
840
  performance : true,
752
841
 
753
842
  auto : false, // uses pjax style endpoints fetching content from same url with remote-content headers
@@ -762,10 +851,14 @@ $.fn.tab.settings = {
762
851
  alwaysRefresh : false, // load tab content new every tab click
763
852
  cache : true, // cache the content requests to pull locally
764
853
  ignoreFirstLoad : false, // don't load remote content on first load
854
+
765
855
  apiSettings : false, // settings for api call
856
+ evaluateScripts : 'once', // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content
766
857
 
767
- onTabInit : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded
768
- onTabLoad : function(tabPath, parameterArray, historyEvent) {}, // called on every load
858
+ onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded
859
+ onLoad : function(tabPath, parameterArray, historyEvent) {}, // called on every load
860
+ onVisible : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible
861
+ onRequest : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content
769
862
 
770
863
  templates : {
771
864
  determineTitle: function(tabArray) {} // returns page title for path
@@ -774,10 +867,12 @@ $.fn.tab.settings = {
774
867
  error: {
775
868
  api : 'You attempted to load content without API module',
776
869
  method : 'The method you called is not defined',
777
- missingTab : 'Activated tab cannot be found for this context.',
870
+ missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',
778
871
  noContent : 'The tab you specified is missing a content url.',
779
872
  path : 'History enabled, but no path was specified',
780
873
  recursion : 'Max recursive depth reached',
874
+ legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',
875
+ legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',
781
876
  state : 'History requires Asual\'s Address library <https://github.com/asual/jquery-address>'
782
877
  },
783
878