rbbt-rest 1.8.123 → 1.8.126

Sign up to get free protection for your applications and to get access to all the features.
Files changed (302) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/rest/common/locate.rb +1 -0
  3. data/lib/rbbt/rest/common/table.rb +9 -4
  4. data/lib/rbbt/rest/entity/locate.rb +1 -1
  5. data/lib/rbbt/rest/file_server.rb +1 -1
  6. data/lib/rbbt/rest/main.rb +11 -14
  7. data/lib/rbbt/rest/workflow.rb +1 -1
  8. data/share/views/entity_partials/entity_card.haml +1 -1
  9. data/share/views/form.haml +1 -1
  10. data/share/views/partials/dependencies.haml +1 -1
  11. data/share/views/public/js/rbbt/table.js +2 -3
  12. data/share/views/public/plugins/semantic-ui/README.md +6 -8
  13. data/share/views/public/plugins/semantic-ui/RELEASE-NOTES.md +216 -0
  14. data/share/views/public/plugins/semantic-ui/dist/components/accordion.css +3 -2
  15. data/share/views/public/plugins/semantic-ui/dist/components/accordion.js +7 -4
  16. data/share/views/public/plugins/semantic-ui/dist/components/accordion.min.css +2 -2
  17. data/share/views/public/plugins/semantic-ui/dist/components/accordion.min.js +1 -1
  18. data/share/views/public/plugins/semantic-ui/dist/components/ad.css +1 -1
  19. data/share/views/public/plugins/semantic-ui/dist/components/ad.min.css +1 -1
  20. data/share/views/public/plugins/semantic-ui/dist/components/api.js +2 -2
  21. data/share/views/public/plugins/semantic-ui/dist/components/api.min.js +1 -1
  22. data/share/views/public/plugins/semantic-ui/dist/components/breadcrumb.css +1 -1
  23. data/share/views/public/plugins/semantic-ui/dist/components/breadcrumb.min.css +1 -1
  24. data/share/views/public/plugins/semantic-ui/dist/components/button.css +634 -245
  25. data/share/views/public/plugins/semantic-ui/dist/components/button.min.css +2 -2
  26. data/share/views/public/plugins/semantic-ui/dist/components/card.css +70 -37
  27. data/share/views/public/plugins/semantic-ui/dist/components/card.min.css +2 -2
  28. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.css +19 -12
  29. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.js +2 -2
  30. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.min.css +2 -2
  31. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.min.js +1 -1
  32. data/share/views/public/plugins/semantic-ui/dist/components/comment.css +3 -2
  33. data/share/views/public/plugins/semantic-ui/dist/components/comment.min.css +2 -2
  34. data/share/views/public/plugins/semantic-ui/dist/components/container.css +1 -1
  35. data/share/views/public/plugins/semantic-ui/dist/components/container.min.css +1 -1
  36. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.css +48 -9
  37. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.js +29 -4
  38. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.min.css +2 -2
  39. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.min.js +1 -1
  40. data/share/views/public/plugins/semantic-ui/dist/components/divider.css +1 -1
  41. data/share/views/public/plugins/semantic-ui/dist/components/divider.min.css +2 -2
  42. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.css +90 -48
  43. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.js +99 -23
  44. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.min.css +2 -2
  45. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.min.js +1 -2
  46. data/share/views/public/plugins/semantic-ui/dist/components/embed.css +1 -1
  47. data/share/views/public/plugins/semantic-ui/dist/components/embed.js +11 -1
  48. data/share/views/public/plugins/semantic-ui/dist/components/embed.min.css +1 -1
  49. data/share/views/public/plugins/semantic-ui/dist/components/embed.min.js +1 -1
  50. data/share/views/public/plugins/semantic-ui/dist/components/feed.css +3 -4
  51. data/share/views/public/plugins/semantic-ui/dist/components/feed.min.css +2 -2
  52. data/share/views/public/plugins/semantic-ui/dist/components/flag.css +6 -1
  53. data/share/views/public/plugins/semantic-ui/dist/components/flag.min.css +2 -2
  54. data/share/views/public/plugins/semantic-ui/dist/components/form.css +29 -16
  55. data/share/views/public/plugins/semantic-ui/dist/components/form.js +14 -14
  56. data/share/views/public/plugins/semantic-ui/dist/components/form.min.css +2 -2
  57. data/share/views/public/plugins/semantic-ui/dist/components/form.min.js +1 -1
  58. data/share/views/public/plugins/semantic-ui/dist/components/grid.css +89 -52
  59. data/share/views/public/plugins/semantic-ui/dist/components/grid.min.css +2 -2
  60. data/share/views/public/plugins/semantic-ui/dist/components/header.css +11 -5
  61. data/share/views/public/plugins/semantic-ui/dist/components/header.min.css +2 -2
  62. data/share/views/public/plugins/semantic-ui/dist/components/icon.css +3366 -1876
  63. data/share/views/public/plugins/semantic-ui/dist/components/icon.min.css +2 -2
  64. data/share/views/public/plugins/semantic-ui/dist/components/image.css +7 -3
  65. data/share/views/public/plugins/semantic-ui/dist/components/image.min.css +2 -2
  66. data/share/views/public/plugins/semantic-ui/dist/components/input.css +50 -42
  67. data/share/views/public/plugins/semantic-ui/dist/components/input.min.css +2 -2
  68. data/share/views/public/plugins/semantic-ui/dist/components/item.css +10 -9
  69. data/share/views/public/plugins/semantic-ui/dist/components/item.min.css +2 -2
  70. data/share/views/public/plugins/semantic-ui/dist/components/label.css +34 -28
  71. data/share/views/public/plugins/semantic-ui/dist/components/label.min.css +2 -2
  72. data/share/views/public/plugins/semantic-ui/dist/components/list.css +15 -13
  73. data/share/views/public/plugins/semantic-ui/dist/components/list.min.css +2 -2
  74. data/share/views/public/plugins/semantic-ui/dist/components/loader.css +4 -4
  75. data/share/views/public/plugins/semantic-ui/dist/components/loader.min.css +2 -2
  76. data/share/views/public/plugins/semantic-ui/dist/components/menu.css +91 -50
  77. data/share/views/public/plugins/semantic-ui/dist/components/menu.min.css +1 -1
  78. data/share/views/public/plugins/semantic-ui/dist/components/message.css +46 -23
  79. data/share/views/public/plugins/semantic-ui/dist/components/message.min.css +2 -2
  80. data/share/views/public/plugins/semantic-ui/dist/components/modal.css +88 -56
  81. data/share/views/public/plugins/semantic-ui/dist/components/modal.js +117 -50
  82. data/share/views/public/plugins/semantic-ui/dist/components/modal.min.css +2 -2
  83. data/share/views/public/plugins/semantic-ui/dist/components/modal.min.js +1 -1
  84. data/share/views/public/plugins/semantic-ui/dist/components/nag.css +3 -2
  85. data/share/views/public/plugins/semantic-ui/dist/components/nag.js +2 -2
  86. data/share/views/public/plugins/semantic-ui/dist/components/nag.min.css +2 -2
  87. data/share/views/public/plugins/semantic-ui/dist/components/nag.min.js +1 -1
  88. data/share/views/public/plugins/semantic-ui/dist/components/placeholder.css +239 -0
  89. data/share/views/public/plugins/semantic-ui/dist/components/placeholder.min.css +9 -0
  90. data/share/views/public/plugins/semantic-ui/dist/components/popup.css +39 -20
  91. data/share/views/public/plugins/semantic-ui/dist/components/popup.js +64 -18
  92. data/share/views/public/plugins/semantic-ui/dist/components/popup.min.css +2 -2
  93. data/share/views/public/plugins/semantic-ui/dist/components/popup.min.js +1 -1
  94. data/share/views/public/plugins/semantic-ui/dist/components/progress.css +3 -2
  95. data/share/views/public/plugins/semantic-ui/dist/components/progress.js +2 -2
  96. data/share/views/public/plugins/semantic-ui/dist/components/progress.min.css +2 -2
  97. data/share/views/public/plugins/semantic-ui/dist/components/progress.min.js +1 -1
  98. data/share/views/public/plugins/semantic-ui/dist/components/rail.css +1 -1
  99. data/share/views/public/plugins/semantic-ui/dist/components/rail.min.css +1 -1
  100. data/share/views/public/plugins/semantic-ui/dist/components/rating.css +1 -1
  101. data/share/views/public/plugins/semantic-ui/dist/components/rating.js +2 -2
  102. data/share/views/public/plugins/semantic-ui/dist/components/rating.min.css +1 -1
  103. data/share/views/public/plugins/semantic-ui/dist/components/rating.min.js +1 -1
  104. data/share/views/public/plugins/semantic-ui/dist/components/reset.css +13 -7
  105. data/share/views/public/plugins/semantic-ui/dist/components/reset.min.css +2 -2
  106. data/share/views/public/plugins/semantic-ui/dist/components/reveal.css +12 -1
  107. data/share/views/public/plugins/semantic-ui/dist/components/reveal.min.css +2 -2
  108. data/share/views/public/plugins/semantic-ui/dist/components/search.css +61 -24
  109. data/share/views/public/plugins/semantic-ui/dist/components/search.js +77 -23
  110. data/share/views/public/plugins/semantic-ui/dist/components/search.min.css +2 -2
  111. data/share/views/public/plugins/semantic-ui/dist/components/search.min.js +1 -1
  112. data/share/views/public/plugins/semantic-ui/dist/components/segment.css +101 -20
  113. data/share/views/public/plugins/semantic-ui/dist/components/segment.min.css +2 -2
  114. data/share/views/public/plugins/semantic-ui/dist/components/shape.css +3 -2
  115. data/share/views/public/plugins/semantic-ui/dist/components/shape.js +2 -2
  116. data/share/views/public/plugins/semantic-ui/dist/components/shape.min.css +2 -2
  117. data/share/views/public/plugins/semantic-ui/dist/components/shape.min.js +1 -1
  118. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.css +5 -3
  119. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.js +2 -2
  120. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.min.css +2 -2
  121. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.min.js +1 -1
  122. data/share/views/public/plugins/semantic-ui/dist/components/site.css +2 -1
  123. data/share/views/public/plugins/semantic-ui/dist/components/site.js +1 -1
  124. data/share/views/public/plugins/semantic-ui/dist/components/site.min.css +2 -2
  125. data/share/views/public/plugins/semantic-ui/dist/components/site.min.js +1 -1
  126. data/share/views/public/plugins/semantic-ui/dist/components/statistic.css +23 -26
  127. data/share/views/public/plugins/semantic-ui/dist/components/statistic.min.css +2 -2
  128. data/share/views/public/plugins/semantic-ui/dist/components/step.css +14 -11
  129. data/share/views/public/plugins/semantic-ui/dist/components/step.min.css +2 -2
  130. data/share/views/public/plugins/semantic-ui/dist/components/sticky.css +1 -1
  131. data/share/views/public/plugins/semantic-ui/dist/components/sticky.js +2 -2
  132. data/share/views/public/plugins/semantic-ui/dist/components/sticky.min.css +1 -1
  133. data/share/views/public/plugins/semantic-ui/dist/components/sticky.min.js +1 -1
  134. data/share/views/public/plugins/semantic-ui/dist/components/tab.css +3 -2
  135. data/share/views/public/plugins/semantic-ui/dist/components/tab.js +2 -2
  136. data/share/views/public/plugins/semantic-ui/dist/components/tab.min.css +2 -2
  137. data/share/views/public/plugins/semantic-ui/dist/components/tab.min.js +1 -1
  138. data/share/views/public/plugins/semantic-ui/dist/components/table.css +56 -26
  139. data/share/views/public/plugins/semantic-ui/dist/components/table.min.css +2 -2
  140. data/share/views/public/plugins/semantic-ui/dist/components/transition.css +97 -2
  141. data/share/views/public/plugins/semantic-ui/dist/components/transition.js +2 -2
  142. data/share/views/public/plugins/semantic-ui/dist/components/transition.min.css +2 -2
  143. data/share/views/public/plugins/semantic-ui/dist/components/transition.min.js +1 -1
  144. data/share/views/public/plugins/semantic-ui/dist/components/visibility.js +5 -5
  145. data/share/views/public/plugins/semantic-ui/dist/components/visibility.min.js +1 -1
  146. data/share/views/public/plugins/semantic-ui/dist/semantic.css +5301 -2120
  147. data/share/views/public/plugins/semantic-ui/dist/semantic.js +445 -873
  148. data/share/views/public/plugins/semantic-ui/dist/semantic.min.css +90 -82
  149. data/share/views/public/plugins/semantic-ui/dist/semantic.min.js +2 -10
  150. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/brand-icons.eot +0 -0
  151. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/brand-icons.svg +1008 -0
  152. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/brand-icons.ttf +0 -0
  153. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/brand-icons.woff +0 -0
  154. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/brand-icons.woff2 +0 -0
  155. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.eot +0 -0
  156. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.svg +1515 -2668
  157. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.ttf +0 -0
  158. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.woff +0 -0
  159. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.woff2 +0 -0
  160. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/outline-icons.eot +0 -0
  161. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/outline-icons.svg +366 -0
  162. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/outline-icons.ttf +0 -0
  163. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/outline-icons.woff +0 -0
  164. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  165. data/share/views/public/plugins/semantic-ui/examples/assets/library/iframe-content.js +729 -326
  166. data/share/views/public/plugins/semantic-ui/examples/assets/library/iframe.js +736 -326
  167. data/share/views/public/plugins/semantic-ui/examples/grid.html +0 -1
  168. data/share/views/public/plugins/semantic-ui/examples/responsive.html +4 -4
  169. data/share/views/public/plugins/semantic-ui/examples/sticky.html +1 -1
  170. data/share/views/public/plugins/semantic-ui/examples/theming.html +1 -0
  171. data/share/views/public/plugins/semantic-ui/package-lock.json +5608 -1608
  172. data/share/views/public/plugins/semantic-ui/package.json +24 -24
  173. data/share/views/public/plugins/semantic-ui/src/README.md +9 -7
  174. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/api.js +1 -1
  175. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/form.js +13 -13
  176. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/visibility.js +4 -4
  177. data/share/views/public/plugins/semantic-ui/src/definitions/collections/form.less +2 -2
  178. data/share/views/public/plugins/semantic-ui/src/definitions/collections/grid.less +6 -6
  179. data/share/views/public/plugins/semantic-ui/src/definitions/collections/menu.less +15 -6
  180. data/share/views/public/plugins/semantic-ui/src/definitions/collections/table.less +7 -2
  181. data/share/views/public/plugins/semantic-ui/src/definitions/elements/button.less +137 -2
  182. data/share/views/public/plugins/semantic-ui/src/definitions/elements/header.less +1 -1
  183. data/share/views/public/plugins/semantic-ui/src/definitions/elements/icon.less +3 -3
  184. data/share/views/public/plugins/semantic-ui/src/definitions/elements/image.less +6 -2
  185. data/share/views/public/plugins/semantic-ui/src/definitions/elements/input.less +35 -35
  186. data/share/views/public/plugins/semantic-ui/src/definitions/elements/label.less +14 -13
  187. data/share/views/public/plugins/semantic-ui/src/definitions/elements/list.less +16 -14
  188. data/share/views/public/plugins/semantic-ui/src/definitions/elements/loader.less +0 -1
  189. data/share/views/public/plugins/semantic-ui/src/definitions/elements/placeholder.less +232 -0
  190. data/share/views/public/plugins/semantic-ui/src/definitions/elements/reveal.less +10 -0
  191. data/share/views/public/plugins/semantic-ui/src/definitions/elements/segment.less +54 -0
  192. data/share/views/public/plugins/semantic-ui/src/definitions/globals/site.less +1 -0
  193. data/share/views/public/plugins/semantic-ui/src/definitions/modules/accordion.js +6 -3
  194. data/share/views/public/plugins/semantic-ui/src/definitions/modules/checkbox.js +1 -1
  195. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dimmer.js +28 -3
  196. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dimmer.less +34 -9
  197. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dropdown.js +98 -22
  198. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dropdown.less +14 -2
  199. data/share/views/public/plugins/semantic-ui/src/definitions/modules/embed.js +10 -0
  200. data/share/views/public/plugins/semantic-ui/src/definitions/modules/modal.js +116 -49
  201. data/share/views/public/plugins/semantic-ui/src/definitions/modules/modal.less +46 -26
  202. data/share/views/public/plugins/semantic-ui/src/definitions/modules/nag.js +1 -1
  203. data/share/views/public/plugins/semantic-ui/src/definitions/modules/popup.js +63 -17
  204. data/share/views/public/plugins/semantic-ui/src/definitions/modules/popup.less +1 -1
  205. data/share/views/public/plugins/semantic-ui/src/definitions/modules/progress.js +1 -1
  206. data/share/views/public/plugins/semantic-ui/src/definitions/modules/rating.js +1 -1
  207. data/share/views/public/plugins/semantic-ui/src/definitions/modules/rating.less +1 -1
  208. data/share/views/public/plugins/semantic-ui/src/definitions/modules/search.js +76 -22
  209. data/share/views/public/plugins/semantic-ui/src/definitions/modules/search.less +48 -17
  210. data/share/views/public/plugins/semantic-ui/src/definitions/modules/shape.js +1 -1
  211. data/share/views/public/plugins/semantic-ui/src/definitions/modules/sidebar.js +1 -1
  212. data/share/views/public/plugins/semantic-ui/src/definitions/modules/sticky.js +1 -1
  213. data/share/views/public/plugins/semantic-ui/src/definitions/modules/tab.js +1 -1
  214. data/share/views/public/plugins/semantic-ui/src/definitions/modules/transition.js +1 -1
  215. data/share/views/public/plugins/semantic-ui/src/definitions/views/statistic.less +0 -3
  216. data/share/views/public/plugins/semantic-ui/src/theme.config.example +48 -47
  217. data/share/views/public/plugins/semantic-ui/src/theme.less +1 -1
  218. data/share/views/public/plugins/semantic-ui/src/themes/basic/elements/button.variables +1 -1
  219. data/share/views/public/plugins/semantic-ui/src/themes/basic/modules/progress.variables +2 -2
  220. data/share/views/public/plugins/semantic-ui/src/themes/bookish/elements/header.variables +2 -2
  221. data/share/views/public/plugins/semantic-ui/src/themes/bootstrap3/elements/button.variables +2 -2
  222. data/share/views/public/plugins/semantic-ui/src/themes/chubby/elements/button.variables +1 -1
  223. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/brand-icons.eot +0 -0
  224. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/brand-icons.svg +1008 -0
  225. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/brand-icons.ttf +0 -0
  226. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/brand-icons.woff +0 -0
  227. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/brand-icons.woff2 +0 -0
  228. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.eot +0 -0
  229. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.svg +1515 -2668
  230. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.ttf +0 -0
  231. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.woff +0 -0
  232. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.woff2 +0 -0
  233. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/outline-icons.eot +0 -0
  234. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/outline-icons.svg +366 -0
  235. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/outline-icons.ttf +0 -0
  236. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/outline-icons.woff +0 -0
  237. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/outline-icons.woff2 +0 -0
  238. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/breadcrumb.variables +1 -1
  239. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/form.variables +1 -1
  240. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/menu.variables +22 -22
  241. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/message.variables +1 -1
  242. data/share/views/public/plugins/semantic-ui/src/themes/default/collections/table.variables +8 -7
  243. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/button.variables +6 -4
  244. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/divider.variables +2 -2
  245. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/flag.overrides +5 -0
  246. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/header.variables +1 -1
  247. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/icon.overrides +1630 -905
  248. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/icon.variables +39 -7
  249. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/label.variables +10 -10
  250. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/list.variables +1 -1
  251. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/loader.variables +1 -0
  252. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/placeholder.overrides +3 -0
  253. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/placeholder.variables +55 -0
  254. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/reveal.variables +2 -1
  255. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/segment.variables +28 -13
  256. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/step.variables +4 -4
  257. data/share/views/public/plugins/semantic-ui/src/themes/default/globals/site.variables +192 -179
  258. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/accordion.overrides +1 -1
  259. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/accordion.variables +1 -1
  260. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/checkbox.variables +2 -2
  261. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/dimmer.variables +2 -5
  262. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/dropdown.overrides +11 -14
  263. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/dropdown.variables +12 -8
  264. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/modal.variables +33 -29
  265. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/popup.variables +4 -3
  266. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/progress.variables +2 -2
  267. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/search.variables +8 -5
  268. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/transition.overrides +54 -2
  269. data/share/views/public/plugins/semantic-ui/src/themes/default/views/ad.variables +2 -2
  270. data/share/views/public/plugins/semantic-ui/src/themes/default/views/card.variables +1 -1
  271. data/share/views/public/plugins/semantic-ui/src/themes/default/views/comment.variables +1 -1
  272. data/share/views/public/plugins/semantic-ui/src/themes/default/views/feed.variables +4 -4
  273. data/share/views/public/plugins/semantic-ui/src/themes/default/views/item.variables +1 -1
  274. data/share/views/public/plugins/semantic-ui/src/themes/default/views/statistic.variables +8 -7
  275. data/share/views/public/plugins/semantic-ui/tasks/admin/components/create.js +0 -1
  276. data/share/views/public/plugins/semantic-ui/tasks/admin/components/init.js +2 -2
  277. data/share/views/public/plugins/semantic-ui/tasks/admin/components/update.js +1 -1
  278. data/share/views/public/plugins/semantic-ui/tasks/admin/distributions/update.js +1 -1
  279. data/share/views/public/plugins/semantic-ui/tasks/admin/register.js +1 -1
  280. data/share/views/public/plugins/semantic-ui/tasks/build/css.js +1 -1
  281. data/share/views/public/plugins/semantic-ui/tasks/build/javascript.js +2 -2
  282. data/share/views/public/plugins/semantic-ui/tasks/collections/internal.js +1 -1
  283. data/share/views/public/plugins/semantic-ui/tasks/config/admin/release.js +1 -0
  284. data/share/views/public/plugins/semantic-ui/tasks/config/defaults.js +1 -0
  285. data/share/views/public/plugins/semantic-ui/tasks/config/project/install.js +2 -7
  286. data/share/views/public/plugins/semantic-ui/tasks/config/tasks.js +6 -2
  287. data/share/views/public/plugins/semantic-ui/tasks/docs/build.js +2 -2
  288. data/share/views/public/plugins/semantic-ui/tasks/docs/serve.js +4 -4
  289. data/share/views/public/plugins/semantic-ui/tasks/install.js +2 -2
  290. data/share/views/public/plugins/semantic-ui/tasks/rtl/build.js +1 -1
  291. data/share/views/public/plugins/semantic-ui/tasks/rtl/watch.js +5 -5
  292. data/share/views/public/plugins/semantic-ui/tasks/watch.js +4 -4
  293. metadata +28 -12
  294. data/share/views/public/plugins/semantic-ui/dist/components/colorize.js +0 -274
  295. data/share/views/public/plugins/semantic-ui/dist/components/colorize.min.js +0 -11
  296. data/share/views/public/plugins/semantic-ui/dist/components/state.js +0 -708
  297. data/share/views/public/plugins/semantic-ui/dist/components/state.min.js +0 -1
  298. data/share/views/public/plugins/semantic-ui/dist/components/visit.js +0 -517
  299. data/share/views/public/plugins/semantic-ui/dist/components/visit.min.js +0 -11
  300. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/colorize.js +0 -280
  301. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/state.js +0 -708
  302. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/visit.js +0 -525
@@ -2,17 +2,22 @@
2
2
  * File: iframeResizer.js
3
3
  * Desc: Force iframes to size to content.
4
4
  * Requires: iframeResizer.contentWindow.js to be loaded into the target frame.
5
+ * Doc: https://github.com/davidjbradshaw/iframe-resizer
5
6
  * Author: David J. Bradshaw - dave@bradshaw.net
6
7
  * Contributor: Jure Mav - jure.mav@gmail.com
7
8
  * Contributor: Reed Dadoune - reed@dadoune.com
8
9
  */
9
- ;(function() {
10
+
11
+
12
+ ;(function(undefined) {
10
13
  'use strict';
11
14
 
15
+ if(typeof window === 'undefined') return; // don't run for server side render
16
+
12
17
  var
13
18
  count = 0,
14
- firstRun = true,
15
19
  logEnabled = false,
20
+ hiddenCheckEnabled = false,
16
21
  msgHeader = 'message',
17
22
  msgHeaderLen = msgHeader.length,
18
23
  msgId = '[iFrameSizer]', //Must match iframe msg ID
@@ -22,6 +27,7 @@
22
27
  resetRequiredMethods = {max:1,scroll:1,bodyScroll:1,documentElementScroll:1},
23
28
  settings = {},
24
29
  timer = null,
30
+ logId = 'Host Page',
25
31
 
26
32
  defaults = {
27
33
  autoResize : true,
@@ -30,9 +36,10 @@
30
36
  bodyMarginV1 : 8,
31
37
  bodyPadding : null,
32
38
  checkOrigin : true,
33
- enableInPageLinks : false,
34
- enablePublicMethods : false,
35
- heightCalculationMethod : 'offset',
39
+ inPageLinks : false,
40
+ enablePublicMethods : true,
41
+ heightCalculationMethod : 'bodyOffset',
42
+ id : 'iFrameResizer',
36
43
  interval : 32,
37
44
  log : false,
38
45
  maxHeight : Infinity,
@@ -43,23 +50,35 @@
43
50
  scrolling : false,
44
51
  sizeHeight : true,
45
52
  sizeWidth : false,
53
+ warningTimeout : 5000,
46
54
  tolerance : 0,
47
- closedCallback : function(){},
48
- initCallback : function(){},
49
- messageCallback : function(){},
50
- resizedCallback : function(){},
51
- scrollCallback : function(){return true;}
55
+ widthCalculationMethod : 'scroll',
56
+ closedCallback : function() {},
57
+ initCallback : function() {},
58
+ messageCallback : function() {warn('MessageCallback function not defined');},
59
+ resizedCallback : function() {},
60
+ scrollCallback : function() {return true;}
52
61
  };
53
62
 
54
- function addEventListener(obj,evt,func){
55
- if ('addEventListener' in window){
63
+ function addEventListener(obj,evt,func) {
64
+ /* istanbul ignore else */ // Not testable in PhantonJS
65
+ if ('addEventListener' in window) {
56
66
  obj.addEventListener(evt,func, false);
57
- } else if ('attachEvent' in window){//IE
67
+ } else if ('attachEvent' in window) {//IE
58
68
  obj.attachEvent('on'+evt,func);
59
69
  }
60
70
  }
61
71
 
62
- function setupRequestAnimationFrame(){
72
+ function removeEventListener(el,evt,func) {
73
+ /* istanbul ignore else */ // Not testable in phantonJS
74
+ if ('removeEventListener' in window) {
75
+ el.removeEventListener(evt,func, false);
76
+ } else if ('detachEvent' in window) { //IE
77
+ el.detachEvent('on'+evt,func);
78
+ }
79
+ }
80
+
81
+ function setupRequestAnimationFrame() {
63
82
  var
64
83
  vendors = ['moz', 'webkit', 'o', 'ms'],
65
84
  x;
@@ -69,70 +88,70 @@
69
88
  requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
70
89
  }
71
90
 
72
- if (!(requestAnimationFrame)){
73
- log(' RequestAnimationFrame not supported');
91
+ if (!(requestAnimationFrame)) {
92
+ log('setup','RequestAnimationFrame not supported');
74
93
  }
75
94
  }
76
95
 
77
- function getMyID(){
78
- var retStr = 'Host page';
96
+ function getMyID(iframeId) {
97
+ var retStr = 'Host page: '+iframeId;
79
98
 
80
- if (window.top!==window.self){
81
- if (window.parentIFrame){
82
- retStr = window.parentIFrame.getId();
99
+ if (window.top !== window.self) {
100
+ if (window.parentIFrame && window.parentIFrame.getId) {
101
+ retStr = window.parentIFrame.getId()+': '+iframeId;
83
102
  } else {
84
- retStr = 'Nested host page';
103
+ retStr = 'Nested host page: '+iframeId;
85
104
  }
86
105
  }
87
106
 
88
107
  return retStr;
89
108
  }
90
109
 
91
- function formatLogMsg(msg){
92
- return msgId + '[' + getMyID() + ']' + msg;
110
+ function formatLogHeader(iframeId) {
111
+ return msgId + '[' + getMyID(iframeId) + ']';
93
112
  }
94
113
 
95
- function log(msg){
96
- if (logEnabled && ('object' === typeof window.console)){
97
- console.log(formatLogMsg(msg));
98
- }
114
+ function isLogEnabled(iframeId) {
115
+ return settings[iframeId] ? settings[iframeId].log : logEnabled;
99
116
  }
100
117
 
101
- function warn(msg){
102
- if ('object' === typeof window.console){
103
- console.warn(formatLogMsg(msg));
118
+ function log(iframeId,msg) {
119
+ output('log',iframeId,msg,isLogEnabled(iframeId));
120
+ }
121
+
122
+ function info(iframeId,msg) {
123
+ output('info',iframeId,msg,isLogEnabled(iframeId));
124
+ }
125
+
126
+ function warn(iframeId,msg) {
127
+ output('warn',iframeId,msg,true);
128
+ }
129
+
130
+ function output(type,iframeId,msg,enabled) {
131
+ if (true === enabled && 'object' === typeof window.console) {
132
+ console[type](formatLogHeader(iframeId),msg);
104
133
  }
105
134
  }
106
135
 
107
- function iFrameListener(event){
108
- function resizeIFrame(){
109
- function resize(){
136
+ function iFrameListener(event) {
137
+ function resizeIFrame() {
138
+ function resize() {
110
139
  setSize(messageData);
111
- setPagePosition();
112
- settings[iframeID].resizedCallback(messageData);
140
+ setPagePosition(iframeId);
141
+ callback('resizedCallback',messageData);
113
142
  }
114
143
 
115
144
  ensureInRange('Height');
116
145
  ensureInRange('Width');
117
146
 
118
- syncResize(resize,messageData,'resetPage');
119
- }
120
-
121
- function closeIFrame(iframe){
122
- var iframeID = iframe.id;
123
-
124
- log(' Removing iFrame: '+iframeID);
125
- iframe.parentNode.removeChild(iframe);
126
- settings[iframeID].closedCallback(iframeID);
127
- delete settings[iframeID];
128
- log(' --');
147
+ syncResize(resize,messageData,'init');
129
148
  }
130
149
 
131
- function processMsg(){
150
+ function processMsg() {
132
151
  var data = msg.substr(msgIdLen).split(':');
133
152
 
134
153
  return {
135
- iframe: document.getElementById(data[0]),
154
+ iframe: settings[data[0]] && settings[data[0]].iframe,
136
155
  id: data[0],
137
156
  height: data[1],
138
157
  width: data[2],
@@ -140,496 +159,887 @@
140
159
  };
141
160
  }
142
161
 
143
- function ensureInRange(Dimension){
162
+ function ensureInRange(Dimension) {
144
163
  var
145
- max = Number(settings[iframeID]['max'+Dimension]),
146
- min = Number(settings[iframeID]['min'+Dimension]),
164
+ max = Number(settings[iframeId]['max' + Dimension]),
165
+ min = Number(settings[iframeId]['min' + Dimension]),
147
166
  dimension = Dimension.toLowerCase(),
148
167
  size = Number(messageData[dimension]);
149
168
 
150
- if (min>max){
151
- throw new Error('Value for min'+Dimension+' can not be greater than max'+Dimension);
152
- }
153
-
154
- log(' Checking '+dimension+' is in range '+min+'-'+max);
169
+ log(iframeId,'Checking ' + dimension + ' is in range ' + min + '-' + max);
155
170
 
156
171
  if (size<min) {
157
172
  size=min;
158
- log(' Set '+dimension+' to min value');
173
+ log(iframeId,'Set ' + dimension + ' to min value');
159
174
  }
160
175
 
161
176
  if (size>max) {
162
177
  size=max;
163
- log(' Set '+dimension+' to max value');
178
+ log(iframeId,'Set ' + dimension + ' to max value');
164
179
  }
165
180
 
166
- messageData[dimension]=''+size;
181
+ messageData[dimension] = '' + size;
167
182
  }
168
183
 
169
184
 
170
- function isMessageFromIFrame(){
171
- function checkAllowedOrigin(){
172
- function checkList(){
173
- log(' Checking connection is from allowed list of origins: ' + checkOrigin);
174
- var i;
175
- for (i = 0; i < checkOrigin.length; i++) {
185
+ function isMessageFromIFrame() {
186
+ function checkAllowedOrigin() {
187
+ function checkList() {
188
+ var
189
+ i = 0,
190
+ retCode = false;
191
+
192
+ log(iframeId,'Checking connection is from allowed list of origins: ' + checkOrigin);
193
+
194
+ for (; i < checkOrigin.length; i++) {
176
195
  if (checkOrigin[i] === origin) {
177
- return true;
196
+ retCode = true;
197
+ break;
178
198
  }
179
199
  }
180
- return false;
200
+ return retCode;
181
201
  }
182
202
 
183
- function checkSingle(){
184
- log(' Checking connection is from: '+remoteHost);
185
- return origin == remoteHost;
203
+ function checkSingle() {
204
+ var remoteHost = settings[iframeId] && settings[iframeId].remoteHost;
205
+ log(iframeId,'Checking connection is from: '+remoteHost);
206
+ return origin === remoteHost;
186
207
  }
187
208
 
188
209
  return checkOrigin.constructor === Array ? checkList() : checkSingle();
189
210
  }
190
211
 
191
212
  var
192
- origin = event.origin,
193
- checkOrigin = settings[iframeID].checkOrigin,
194
- remoteHost = messageData.iframe.src.split('/').slice(0,3).join('/');
195
-
196
- if (checkOrigin) {
197
- if ((''+origin !== 'null') && !checkAllowedOrigin()) {
198
- throw new Error(
199
- 'Unexpected message received from: ' + origin +
200
- ' for ' + messageData.iframe.id +
201
- '. Message was: ' + event.data +
202
- '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.'
203
- );
204
- }
213
+ origin = event.origin,
214
+ checkOrigin = settings[iframeId] && settings[iframeId].checkOrigin;
215
+
216
+ if (checkOrigin && (''+origin !== 'null') && !checkAllowedOrigin()) {
217
+ throw new Error(
218
+ 'Unexpected message received from: ' + origin +
219
+ ' for ' + messageData.iframe.id +
220
+ '. Message was: ' + event.data +
221
+ '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.'
222
+ );
205
223
  }
206
224
 
207
225
  return true;
208
226
  }
209
227
 
210
- function isMessageForUs(){
211
- return msgId === ('' + msg).substr(0,msgIdLen); //''+Protects against non-string msg
228
+ function isMessageForUs() {
229
+ return msgId === (('' + msg).substr(0,msgIdLen)) && (msg.substr(msgIdLen).split(':')[0] in settings); //''+Protects against non-string msg
212
230
  }
213
231
 
214
- function isMessageFromMetaParent(){
215
- //test if this message is from a parent above us. This is an ugly test, however, updating
216
- //the message format would break backwards compatibility.
232
+ function isMessageFromMetaParent() {
233
+ //Test if this message is from a parent above us. This is an ugly test, however, updating
234
+ //the message format would break backwards compatibity.
217
235
  var retCode = messageData.type in {'true':1,'false':1,'undefined':1};
218
236
 
219
- if (retCode){
220
- log(' Ignoring init message from meta parent page');
237
+ if (retCode) {
238
+ log(iframeId,'Ignoring init message from meta parent page');
221
239
  }
222
240
 
223
241
  return retCode;
224
242
  }
225
243
 
226
- function getMsgBody(offset){
244
+ function getMsgBody(offset) {
227
245
  return msg.substr(msg.indexOf(':')+msgHeaderLen+offset);
228
246
  }
229
247
 
230
- function forwardMsgFromIFrame(msgBody){
231
- log(' MessageCallback passed: {iframe: '+ messageData.iframe.id + ', message: ' + msgBody + '}');
232
- settings[iframeID].messageCallback({
248
+ function forwardMsgFromIFrame(msgBody) {
249
+ log(iframeId,'MessageCallback passed: {iframe: '+ messageData.iframe.id + ', message: ' + msgBody + '}');
250
+ callback('messageCallback',{
233
251
  iframe: messageData.iframe,
234
252
  message: JSON.parse(msgBody)
235
253
  });
236
- log(' --');
254
+ log(iframeId,'--');
255
+ }
256
+
257
+ function getPageInfo() {
258
+ var
259
+ bodyPosition = document.body.getBoundingClientRect(),
260
+ iFramePosition = messageData.iframe.getBoundingClientRect();
261
+
262
+ return JSON.stringify({
263
+ iframeHeight: iFramePosition.height,
264
+ iframeWidth: iFramePosition.width,
265
+ clientHeight: Math.max(document.documentElement.clientHeight, window.innerHeight || 0),
266
+ clientWidth: Math.max(document.documentElement.clientWidth, window.innerWidth || 0),
267
+ offsetTop: parseInt(iFramePosition.top - bodyPosition.top, 10),
268
+ offsetLeft: parseInt(iFramePosition.left - bodyPosition.left, 10),
269
+ scrollTop: window.pageYOffset,
270
+ scrollLeft: window.pageXOffset
271
+ });
272
+ }
273
+
274
+ function sendPageInfoToIframe(iframe,iframeId) {
275
+ function debouncedTrigger() {
276
+ trigger(
277
+ 'Send Page Info',
278
+ 'pageInfo:' + getPageInfo(),
279
+ iframe,
280
+ iframeId
281
+ );
282
+ }
283
+
284
+ debouce(debouncedTrigger,32);
285
+ }
286
+
287
+
288
+ function startPageInfoMonitor() {
289
+ function setListener(type,func) {
290
+ function sendPageInfo() {
291
+ if (settings[id]) {
292
+ sendPageInfoToIframe(settings[id].iframe,id);
293
+ } else {
294
+ stop();
295
+ }
296
+ }
297
+
298
+ ['scroll','resize'].forEach(function(evt) {
299
+ log(id, type + evt + ' listener for sendPageInfo');
300
+ func(window,evt,sendPageInfo);
301
+ });
302
+ }
303
+
304
+ function stop() {
305
+ setListener('Remove ', removeEventListener);
306
+ }
307
+
308
+ function start() {
309
+ setListener('Add ', addEventListener);
310
+ }
311
+
312
+ var id = iframeId; //Create locally scoped copy of iFrame ID
313
+
314
+ start();
315
+
316
+ if (settings[id]) {
317
+ settings[id].stopPageInfo = stop;
318
+ }
237
319
  }
238
320
 
239
- function checkIFrameExists(){
321
+ function stopPageInfoMonitor() {
322
+ if (settings[iframeId] && settings[iframeId].stopPageInfo) {
323
+ settings[iframeId].stopPageInfo();
324
+ delete settings[iframeId].stopPageInfo;
325
+ }
326
+ }
327
+
328
+ function checkIFrameExists() {
329
+ var retBool = true;
330
+
240
331
  if (null === messageData.iframe) {
241
- warn(' IFrame ('+messageData.id+') not found');
242
- return false;
332
+ warn(iframeId,'IFrame ('+messageData.id+') not found');
333
+ retBool = false;
243
334
  }
244
- return true;
335
+ return retBool;
245
336
  }
246
337
 
247
- function getElementPosition(target){
248
- var
249
- iFramePosition = target.getBoundingClientRect();
338
+ function getElementPosition(target) {
339
+ var iFramePosition = target.getBoundingClientRect();
250
340
 
251
- getPagePosition();
341
+ getPagePosition(iframeId);
252
342
 
253
343
  return {
254
- x: parseInt(iFramePosition.left, 10) + parseInt(pagePosition.x, 10),
255
- y: parseInt(iFramePosition.top, 10) + parseInt(pagePosition.y, 10)
344
+ x: Math.floor( Number(iFramePosition.left) + Number(pagePosition.x) ),
345
+ y: Math.floor( Number(iFramePosition.top) + Number(pagePosition.y) )
256
346
  };
257
347
  }
258
348
 
259
- function scrollRequestFromChild(addOffset){
260
- function reposition(){
349
+ function scrollRequestFromChild(addOffset) {
350
+ /* istanbul ignore next */ //Not testable in Karma
351
+ function reposition() {
261
352
  pagePosition = newPosition;
262
-
263
353
  scrollTo();
264
-
265
- log(' --');
354
+ log(iframeId,'--');
266
355
  }
267
356
 
268
- function calcOffset(){
357
+ function calcOffset() {
269
358
  return {
270
359
  x: Number(messageData.width) + offset.x,
271
360
  y: Number(messageData.height) + offset.y
272
361
  };
273
362
  }
274
363
 
364
+ function scrollParent() {
365
+ if (window.parentIFrame) {
366
+ window.parentIFrame['scrollTo'+(addOffset?'Offset':'')](newPosition.x,newPosition.y);
367
+ } else {
368
+ warn(iframeId,'Unable to scroll to requested position, window.parentIFrame not found');
369
+ }
370
+ }
371
+
275
372
  var
276
373
  offset = addOffset ? getElementPosition(messageData.iframe) : {x:0,y:0},
277
374
  newPosition = calcOffset();
278
375
 
279
- log(' Reposition requested from iFrame (offset x:'+offset.x+' y:'+offset.y+')');
376
+ log(iframeId,'Reposition requested from iFrame (offset x:'+offset.x+' y:'+offset.y+')');
280
377
 
281
- if(window.top!==window.self){
282
- if (window.parentIFrame){
283
- if (addOffset){
284
- parentIFrame.scrollToOffset(newPosition.x,newPosition.y);
285
- } else {
286
- parentIFrame.scrollTo(messageData.width,messageData.height);
287
- }
288
- } else {
289
- warn(' Unable to scroll to requested position, window.parentIFrame not found');
290
- }
378
+ if(window.top !== window.self) {
379
+ scrollParent();
291
380
  } else {
292
381
  reposition();
293
382
  }
294
-
295
383
  }
296
384
 
297
- function scrollTo(){
298
- if (false !== settings[iframeID].scrollCallback(pagePosition)){
299
- setPagePosition();
385
+ function scrollTo() {
386
+ if (false !== callback('scrollCallback',pagePosition)) {
387
+ setPagePosition(iframeId);
388
+ } else {
389
+ unsetPagePosition();
300
390
  }
301
391
  }
302
392
 
303
- function findTarget(location){
304
- var hash = location.split("#")[1] || "";
305
- var hashData = decodeURIComponent(hash);
306
-
307
- function jumpToTarget(target){
393
+ function findTarget(location) {
394
+ function jumpToTarget() {
308
395
  var jumpPosition = getElementPosition(target);
309
396
 
310
- log(' Moving to in page link (#'+hash+') at x: '+jumpPosition.x+' y: '+jumpPosition.y);
397
+ log(iframeId,'Moving to in page link (#'+hash+') at x: '+jumpPosition.x+' y: '+jumpPosition.y);
311
398
  pagePosition = {
312
399
  x: jumpPosition.x,
313
400
  y: jumpPosition.y
314
401
  };
315
402
 
316
403
  scrollTo();
317
- log(' --');
404
+ log(iframeId,'--');
318
405
  }
319
406
 
320
- var target = document.getElementById(hashData) || document.getElementsByName(hashData)[0];
321
-
322
- if(window.top!==window.self){
323
- if (window.parentIFrame){
324
- parentIFrame.moveToAnchor(hash);
407
+ function jumpToParent() {
408
+ if (window.parentIFrame) {
409
+ window.parentIFrame.moveToAnchor(hash);
325
410
  } else {
326
- log(' In page link #'+hash+' not found and window.parentIFrame not found');
411
+ log(iframeId,'In page link #'+hash+' not found and window.parentIFrame not found');
327
412
  }
328
- } else if (target){
329
- jumpToTarget(target);
413
+ }
414
+
415
+ var
416
+ hash = location.split('#')[1] || '',
417
+ hashData = decodeURIComponent(hash),
418
+ target = document.getElementById(hashData) || document.getElementsByName(hashData)[0];
419
+
420
+ if (target) {
421
+ jumpToTarget();
422
+ } else if(window.top!==window.self) {
423
+ jumpToParent();
330
424
  } else {
331
- log(' In page link #'+hash+' not found');
425
+ log(iframeId,'In page link #'+hash+' not found');
332
426
  }
333
427
  }
334
428
 
335
- function actionMsg(){
336
- switch(messageData.type){
337
- case 'close':
338
- closeIFrame(messageData.iframe);
339
- break;
340
- case 'message':
341
- forwardMsgFromIFrame(getMsgBody(6));
342
- break;
343
- case 'scrollTo':
344
- scrollRequestFromChild(false);
345
- break;
346
- case 'scrollToOffset':
347
- scrollRequestFromChild(true);
348
- break;
349
- case 'inPageLink':
350
- findTarget(getMsgBody(9));
351
- break;
352
- case 'reset':
353
- resetIFrame(messageData);
354
- break;
355
- case 'init':
356
- resizeIFrame();
357
- settings[iframeID].initCallback(messageData.iframe);
358
- break;
359
- default:
360
- resizeIFrame();
429
+ function callback(funcName,val) {
430
+ return chkCallback(iframeId,funcName,val);
431
+ }
432
+
433
+ function actionMsg() {
434
+
435
+ if(settings[iframeId] && settings[iframeId].firstRun) firstRun();
436
+
437
+ switch(messageData.type) {
438
+ case 'close':
439
+ if(settings[iframeId].closeRequestCallback) chkCallback(iframeId, 'closeRequestCallback', settings[iframeId].iframe);
440
+ else closeIFrame(messageData.iframe);
441
+ break;
442
+ case 'message':
443
+ forwardMsgFromIFrame(getMsgBody(6));
444
+ break;
445
+ case 'scrollTo':
446
+ scrollRequestFromChild(false);
447
+ break;
448
+ case 'scrollToOffset':
449
+ scrollRequestFromChild(true);
450
+ break;
451
+ case 'pageInfo':
452
+ sendPageInfoToIframe(settings[iframeId] && settings[iframeId].iframe,iframeId);
453
+ startPageInfoMonitor();
454
+ break;
455
+ case 'pageInfoStop':
456
+ stopPageInfoMonitor();
457
+ break;
458
+ case 'inPageLink':
459
+ findTarget(getMsgBody(9));
460
+ break;
461
+ case 'reset':
462
+ resetIFrame(messageData);
463
+ break;
464
+ case 'init':
465
+ resizeIFrame();
466
+ callback('initCallback',messageData.iframe);
467
+ break;
468
+ default:
469
+ resizeIFrame();
361
470
  }
362
471
  }
363
472
 
364
- function hasSettings(iframeID){
473
+ function hasSettings(iframeId) {
365
474
  var retBool = true;
366
475
 
367
- if (!settings[iframeID]){
476
+ if (!settings[iframeId]) {
368
477
  retBool = false;
369
- warn(messageData.type + ' No settings for ' + iframeID + '. Message was: ' + msg);
478
+ warn(messageData.type + ' No settings for ' + iframeId + '. Message was: ' + msg);
370
479
  }
371
480
 
372
481
  return retBool;
373
482
  }
374
483
 
484
+ function iFrameReadyMsgReceived() {
485
+ for (var iframeId in settings) {
486
+ trigger('iFrame requested init',createOutgoingMsg(iframeId),document.getElementById(iframeId),iframeId);
487
+ }
488
+ }
489
+
490
+ function firstRun() {
491
+ if (settings[iframeId]) {
492
+ settings[iframeId].firstRun = false;
493
+ }
494
+ }
495
+
496
+ function clearWarningTimeout() {
497
+ if (settings[iframeId]) {
498
+ clearTimeout(settings[iframeId].msgTimeout);
499
+ settings[iframeId].warningTimeout = 0;
500
+ }
501
+ }
502
+
375
503
  var
376
504
  msg = event.data,
377
505
  messageData = {},
378
- iframeID = null;
506
+ iframeId = null;
379
507
 
380
- if (isMessageForUs()){
508
+ if('[iFrameResizerChild]Ready' === msg) {
509
+ iFrameReadyMsgReceived();
510
+ } else if (isMessageForUs()) {
381
511
  messageData = processMsg();
382
- iframeID = messageData.id;
512
+ iframeId = logId = messageData.id;
513
+ if (settings[iframeId]) {
514
+ settings[iframeId].loaded = true;
515
+ }
383
516
 
384
- if (!isMessageFromMetaParent() && hasSettings(iframeID)){
385
- logEnabled = settings[iframeID].log;
386
- log(' Received: '+msg);
517
+ if (!isMessageFromMetaParent() && hasSettings(iframeId)) {
518
+ log(iframeId,'Received: '+msg);
387
519
 
388
- if ( checkIFrameExists() && isMessageFromIFrame() ){
520
+ if ( checkIFrameExists() && isMessageFromIFrame() ) {
389
521
  actionMsg();
390
- firstRun = false;
391
522
  }
392
523
  }
524
+ } else {
525
+ info(iframeId,'Ignored: '+msg);
393
526
  }
527
+
394
528
  }
395
529
 
396
530
 
397
- function getPagePosition (){
398
- if(null === pagePosition){
531
+ function chkCallback(iframeId,funcName,val) {
532
+ var
533
+ func = null,
534
+ retVal = null;
535
+
536
+ if(settings[iframeId]) {
537
+ func = settings[iframeId][funcName];
538
+
539
+ if( 'function' === typeof func) {
540
+ retVal = func(val);
541
+ } else {
542
+ throw new TypeError(funcName+' on iFrame['+iframeId+'] is not a function');
543
+ }
544
+ }
545
+
546
+ return retVal;
547
+ }
548
+
549
+ function closeIFrame(iframe) {
550
+ var iframeId = iframe.id;
551
+
552
+ log(iframeId,'Removing iFrame: '+iframeId);
553
+ if (iframe.parentNode) { iframe.parentNode.removeChild(iframe); }
554
+ chkCallback(iframeId,'closedCallback',iframeId);
555
+ log(iframeId,'--');
556
+ delete settings[iframeId];
557
+ }
558
+
559
+ function getPagePosition(iframeId) {
560
+ if(null === pagePosition) {
399
561
  pagePosition = {
400
562
  x: (window.pageXOffset !== undefined) ? window.pageXOffset : document.documentElement.scrollLeft,
401
563
  y: (window.pageYOffset !== undefined) ? window.pageYOffset : document.documentElement.scrollTop
402
564
  };
403
- log(' Get page position: '+pagePosition.x+','+pagePosition.y);
565
+ log(iframeId,'Get page position: '+pagePosition.x+','+pagePosition.y);
404
566
  }
405
567
  }
406
568
 
407
- function setPagePosition(){
408
- if(null !== pagePosition){
569
+ function setPagePosition(iframeId) {
570
+ if(null !== pagePosition) {
409
571
  window.scrollTo(pagePosition.x,pagePosition.y);
410
- log(' Set page position: '+pagePosition.x+','+pagePosition.y);
411
- pagePosition = null;
572
+ log(iframeId,'Set page position: '+pagePosition.x+','+pagePosition.y);
573
+ unsetPagePosition();
412
574
  }
413
575
  }
414
576
 
415
- function resetIFrame(messageData){
416
- function reset(){
577
+ function unsetPagePosition() {
578
+ pagePosition = null;
579
+ }
580
+
581
+ function resetIFrame(messageData) {
582
+ function reset() {
417
583
  setSize(messageData);
418
584
  trigger('reset','reset',messageData.iframe,messageData.id);
419
585
  }
420
586
 
421
- log(' Size reset requested by '+('init'===messageData.type?'host page':'iFrame'));
422
- getPagePosition();
423
- syncResize(reset,messageData,'init');
587
+ log(messageData.id,'Size reset requested by '+('init'===messageData.type?'host page':'iFrame'));
588
+ getPagePosition(messageData.id);
589
+ syncResize(reset,messageData,'reset');
424
590
  }
425
591
 
426
- function setSize(messageData){
427
- function setDimension(dimension){
592
+ function setSize(messageData) {
593
+ function setDimension(dimension) {
428
594
  messageData.iframe.style[dimension] = messageData[dimension] + 'px';
429
595
  log(
430
- ' IFrame (' + iframeID +
596
+ messageData.id,
597
+ 'IFrame (' + iframeId +
431
598
  ') ' + dimension +
432
599
  ' set to ' + messageData[dimension] + 'px'
433
600
  );
434
601
  }
435
- var iframeID = messageData.iframe.id;
436
- if( settings[iframeID].sizeHeight) { setDimension('height'); }
437
- if( settings[iframeID].sizeWidth ) { setDimension('width'); }
602
+
603
+ function chkZero(dimension) {
604
+ //FireFox sets dimension of hidden iFrames to zero.
605
+ //So if we detect that set up an event to check for
606
+ //when iFrame becomes visible.
607
+
608
+ /* istanbul ignore next */ //Not testable in PhantomJS
609
+ if (!hiddenCheckEnabled && '0' === messageData[dimension]) {
610
+ hiddenCheckEnabled = true;
611
+ log(iframeId,'Hidden iFrame detected, creating visibility listener');
612
+ fixHiddenIFrames();
613
+ }
614
+ }
615
+
616
+ function processDimension(dimension) {
617
+ setDimension(dimension);
618
+ chkZero(dimension);
619
+ }
620
+
621
+ var iframeId = messageData.iframe.id;
622
+
623
+ if(settings[iframeId]) {
624
+ if( settings[iframeId].sizeHeight) { processDimension('height'); }
625
+ if( settings[iframeId].sizeWidth ) { processDimension('width'); }
626
+ }
438
627
  }
439
628
 
440
- function syncResize(func,messageData,doNotSync){
441
- if(doNotSync!==messageData.type && requestAnimationFrame){
442
- log(' Requesting animation frame');
629
+ function syncResize(func,messageData,doNotSync) {
630
+ /* istanbul ignore if */ //Not testable in PhantomJS
631
+ if(doNotSync!==messageData.type && requestAnimationFrame) {
632
+ log(messageData.id,'Requesting animation frame');
443
633
  requestAnimationFrame(func);
444
634
  } else {
445
635
  func();
446
636
  }
447
637
  }
448
638
 
449
- function trigger(calleeMsg,msg,iframe,id){
450
- if(iframe && iframe.contentWindow){
451
- log('[' + calleeMsg + '] Sending msg to iframe ('+msg+')');
452
- iframe.contentWindow.postMessage( msgId + msg, '*' );
453
- } else {
454
- warn('[' + calleeMsg + '] IFrame not found');
455
- if(settings[id]) delete settings[id];
639
+ function trigger(calleeMsg, msg, iframe, id, noResponseWarning) {
640
+ function postMessageToIFrame() {
641
+ var target = settings[id] && settings[id].targetOrigin;
642
+ log(id,'[' + calleeMsg + '] Sending msg to iframe['+id+'] ('+msg+') targetOrigin: '+target);
643
+ iframe.contentWindow.postMessage( msgId + msg, target );
644
+ }
645
+
646
+ function iFrameNotFound() {
647
+ warn(id,'[' + calleeMsg + '] IFrame('+id+') not found');
456
648
  }
649
+
650
+ function chkAndSend() {
651
+ if(iframe && 'contentWindow' in iframe && (null !== iframe.contentWindow)) { //Null test for PhantomJS
652
+ postMessageToIFrame();
653
+ } else {
654
+ iFrameNotFound();
655
+ }
656
+ }
657
+
658
+ function warnOnNoResponse() {
659
+ function warning() {
660
+ if (settings[id] && !settings[id].loaded && !errorShown) {
661
+ errorShown = true;
662
+ warn(id, 'IFrame has not responded within '+ settings[id].warningTimeout/1000 +' seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ingored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.');
663
+ }
664
+ }
665
+
666
+ if (!!noResponseWarning && settings[id] && !!settings[id].warningTimeout) {
667
+ settings[id].msgTimeout = setTimeout(warning, settings[id].warningTimeout);
668
+ }
669
+ }
670
+
671
+ var errorShown = false;
672
+
673
+ id = id || iframe.id;
674
+
675
+ if(settings[id]) {
676
+ chkAndSend();
677
+ warnOnNoResponse();
678
+ }
679
+
457
680
  }
458
681
 
682
+ function createOutgoingMsg(iframeId) {
683
+ return iframeId +
684
+ ':' + settings[iframeId].bodyMarginV1 +
685
+ ':' + settings[iframeId].sizeWidth +
686
+ ':' + settings[iframeId].log +
687
+ ':' + settings[iframeId].interval +
688
+ ':' + settings[iframeId].enablePublicMethods +
689
+ ':' + settings[iframeId].autoResize +
690
+ ':' + settings[iframeId].bodyMargin +
691
+ ':' + settings[iframeId].heightCalculationMethod +
692
+ ':' + settings[iframeId].bodyBackground +
693
+ ':' + settings[iframeId].bodyPadding +
694
+ ':' + settings[iframeId].tolerance +
695
+ ':' + settings[iframeId].inPageLinks +
696
+ ':' + settings[iframeId].resizeFrom +
697
+ ':' + settings[iframeId].widthCalculationMethod;
698
+ }
699
+
700
+ function setupIFrame(iframe,options) {
701
+ function setLimits() {
702
+ function addStyle(style) {
703
+ if ((Infinity !== settings[iframeId][style]) && (0 !== settings[iframeId][style])) {
704
+ iframe.style[style] = settings[iframeId][style] + 'px';
705
+ log(iframeId,'Set '+style+' = '+settings[iframeId][style]+'px');
706
+ }
707
+ }
459
708
 
460
- function setupIFrame(options){
461
- function setLimits(){
462
- function addStyle(style){
463
- if ((Infinity !== settings[iframeID][style]) && (0 !== settings[iframeID][style])){
464
- iframe.style[style] = settings[iframeID][style] + 'px';
465
- log(' Set '+style+' = '+settings[iframeID][style]+'px');
709
+ function chkMinMax(dimension) {
710
+ if (settings[iframeId]['min'+dimension]>settings[iframeId]['max'+dimension]) {
711
+ throw new Error('Value for min'+dimension+' can not be greater than max'+dimension);
466
712
  }
467
713
  }
468
714
 
715
+ chkMinMax('Height');
716
+ chkMinMax('Width');
717
+
469
718
  addStyle('maxHeight');
470
719
  addStyle('minHeight');
471
720
  addStyle('maxWidth');
472
721
  addStyle('minWidth');
473
722
  }
474
723
 
475
- function ensureHasId(iframeID){
476
- if (''===iframeID){
477
- iframe.id = iframeID = 'iFrameResizer' + count++;
724
+ function newId() {
725
+ var id = ((options && options.id) || defaults.id + count++);
726
+ if (null !== document.getElementById(id)) {
727
+ id = id + count++;
728
+ }
729
+ return id;
730
+ }
731
+
732
+ function ensureHasId(iframeId) {
733
+ logId=iframeId;
734
+ if (''===iframeId) {
735
+ iframe.id = iframeId = newId();
478
736
  logEnabled = (options || {}).log;
479
- log(' Added missing iframe ID: '+ iframeID +' (' + iframe.src + ')');
737
+ logId=iframeId;
738
+ log(iframeId,'Added missing iframe ID: '+ iframeId +' (' + iframe.src + ')');
480
739
  }
481
740
 
482
- return iframeID;
741
+
742
+ return iframeId;
483
743
  }
484
744
 
485
- function setScrolling(){
486
- log(' IFrame scrolling ' + (settings[iframeID].scrolling ? 'enabled' : 'disabled') + ' for ' + iframeID);
487
- iframe.style.overflow = false === settings[iframeID].scrolling ? 'hidden' : 'auto';
488
- iframe.scrolling = false === settings[iframeID].scrolling ? 'no' : 'yes';
745
+ function setScrolling() {
746
+ log(iframeId,'IFrame scrolling ' + (settings[iframeId] && settings[iframeId].scrolling ? 'enabled' : 'disabled') + ' for ' + iframeId);
747
+ iframe.style.overflow = false === (settings[iframeId] && settings[iframeId].scrolling) ? 'hidden' : 'auto';
748
+ switch(settings[iframeId] && settings[iframeId].scrolling) {
749
+ case true:
750
+ iframe.scrolling = 'yes';
751
+ break;
752
+ case false:
753
+ iframe.scrolling = 'no';
754
+ break;
755
+ default:
756
+ iframe.scrolling = settings[iframeId] ? settings[iframeId].scrolling : 'no';
757
+ }
489
758
  }
490
759
 
491
760
  //The V1 iFrame script expects an int, where as in V2 expects a CSS
492
761
  //string value such as '1px 3em', so if we have an int for V2, set V1=V2
493
762
  //and then convert V2 to a string PX value.
494
- function setupBodyMarginValues(){
495
- if (('number'===typeof(settings[iframeID].bodyMargin)) || ('0'===settings[iframeID].bodyMargin)){
496
- settings[iframeID].bodyMarginV1 = settings[iframeID].bodyMargin;
497
- settings[iframeID].bodyMargin = '' + settings[iframeID].bodyMargin + 'px';
498
- }
499
- }
500
-
501
- function createOutgoingMsg(){
502
- return iframeID +
503
- ':' + settings[iframeID].bodyMarginV1 +
504
- ':' + settings[iframeID].sizeWidth +
505
- ':' + settings[iframeID].log +
506
- ':' + settings[iframeID].interval +
507
- ':' + settings[iframeID].enablePublicMethods +
508
- ':' + settings[iframeID].autoResize +
509
- ':' + settings[iframeID].bodyMargin +
510
- ':' + settings[iframeID].heightCalculationMethod +
511
- ':' + settings[iframeID].bodyBackground +
512
- ':' + settings[iframeID].bodyPadding +
513
- ':' + settings[iframeID].tolerance +
514
- ':' + settings[iframeID].enableInPageLinks +
515
- ':' + settings[iframeID].resizeFrom;
516
- }
517
-
518
- function init(msg){
519
- //We have to call trigger twice, as we can not be sure if all
520
- //iframes have completed loading when this code runs. The
521
- //event listener also catches the page changing in the iFrame.
522
- addEventListener(iframe,'load',function(){
523
- var fr = firstRun; // Reduce scope of var to function, because IE8's JS execution
524
- // context stack is borked and this value gets externally
525
- // changed midway through running this function.
526
- trigger('iFrame.onload',msg,iframe);
527
- if (!fr && settings[iframeID].heightCalculationMethod in resetRequiredMethods){
528
- resetIFrame({
529
- iframe:iframe,
530
- height:0,
531
- width:0,
532
- type:'init'
533
- });
534
- }
535
- });
536
- trigger('init',msg,iframe);
763
+ function setupBodyMarginValues() {
764
+ if (('number'===typeof(settings[iframeId] && settings[iframeId].bodyMargin)) || ('0'===(settings[iframeId] && settings[iframeId].bodyMargin))) {
765
+ settings[iframeId].bodyMarginV1 = settings[iframeId].bodyMargin;
766
+ settings[iframeId].bodyMargin = '' + settings[iframeId].bodyMargin + 'px';
767
+ }
537
768
  }
538
769
 
539
- function checkOptions(options){
540
- if ('object' !== typeof options){
541
- throw new TypeError('Options is not an object.');
770
+ function checkReset() {
771
+ // Reduce scope of firstRun to function, because IE8's JS execution
772
+ // context stack is borked and this value gets externally
773
+ // changed midway through running this function!!!
774
+ var
775
+ firstRun = settings[iframeId] && settings[iframeId].firstRun,
776
+ resetRequertMethod = settings[iframeId] && settings[iframeId].heightCalculationMethod in resetRequiredMethods;
777
+
778
+ if (!firstRun && resetRequertMethod) {
779
+ resetIFrame({iframe:iframe, height:0, width:0, type:'init'});
542
780
  }
543
781
  }
544
782
 
545
- function processOptions(options){
546
- options = options || {};
547
- settings[iframeID] = {};
783
+ function setupIFrameObject() {
784
+ if(Function.prototype.bind && settings[iframeId]) { //Ignore unpolyfilled IE8.
785
+ settings[iframeId].iframe.iFrameResizer = {
548
786
 
549
- checkOptions(options);
787
+ close : closeIFrame.bind(null,settings[iframeId].iframe),
788
+
789
+ resize : trigger.bind(null,'Window resize', 'resize', settings[iframeId].iframe),
790
+
791
+ moveToAnchor : function(anchor) {
792
+ trigger('Move to anchor','moveToAnchor:'+anchor, settings[iframeId].iframe,iframeId);
793
+ },
794
+
795
+ sendMessage : function(message) {
796
+ message = JSON.stringify(message);
797
+ trigger('Send Message','message:'+message, settings[iframeId].iframe, iframeId);
798
+ }
799
+ };
800
+ }
801
+ }
802
+
803
+ //We have to call trigger twice, as we can not be sure if all
804
+ //iframes have completed loading when this code runs. The
805
+ //event listener also catches the page changing in the iFrame.
806
+ function init(msg) {
807
+ function iFrameLoaded() {
808
+ trigger('iFrame.onload', msg, iframe, undefined , true);
809
+ checkReset();
810
+ }
811
+
812
+ addEventListener(iframe,'load',iFrameLoaded);
813
+ trigger('init', msg, iframe, undefined, true);
814
+ }
815
+
816
+ function checkOptions(options) {
817
+ if ('object' !== typeof options) {
818
+ throw new TypeError('Options is not an object');
819
+ }
820
+ }
550
821
 
822
+ function copyOptions(options) {
551
823
  for (var option in defaults) {
552
- if (defaults.hasOwnProperty(option)){
553
- settings[iframeID][option] = options.hasOwnProperty(option) ? options[option] : defaults[option];
824
+ if (defaults.hasOwnProperty(option)) {
825
+ settings[iframeId][option] = options.hasOwnProperty(option) ? options[option] : defaults[option];
554
826
  }
555
827
  }
828
+ }
556
829
 
557
- logEnabled = settings[iframeID].log;
830
+ function getTargetOrigin (remoteHost) {
831
+ return ('' === remoteHost || 'file://' === remoteHost) ? '*' : remoteHost;
558
832
  }
559
833
 
560
- var
561
- /*jshint validthis:true */
562
- iframe = this,
563
- iframeID = ensureHasId(iframe.id);
564
-
565
- processOptions(options);
566
- setScrolling();
567
- setLimits();
568
- setupBodyMarginValues();
569
- init(createOutgoingMsg());
834
+ function processOptions(options) {
835
+ options = options || {};
836
+ settings[iframeId] = {
837
+ firstRun : true,
838
+ iframe : iframe,
839
+ remoteHost : iframe.src.split('/').slice(0,3).join('/')
840
+ };
841
+
842
+ checkOptions(options);
843
+ copyOptions(options);
844
+
845
+ if (settings[iframeId]) {
846
+ settings[iframeId].targetOrigin = true === settings[iframeId].checkOrigin ? getTargetOrigin(settings[iframeId].remoteHost) : '*';
847
+ }
848
+ }
849
+
850
+ function beenHere() {
851
+ return (iframeId in settings && 'iFrameResizer' in iframe);
852
+ }
853
+
854
+ var iframeId = ensureHasId(iframe.id);
855
+
856
+ if (!beenHere()) {
857
+ processOptions(options);
858
+ setScrolling();
859
+ setLimits();
860
+ setupBodyMarginValues();
861
+ init(createOutgoingMsg(iframeId));
862
+ setupIFrameObject();
863
+ } else {
864
+ warn(iframeId,'Ignored iFrame, already setup.');
865
+ }
570
866
  }
571
867
 
572
- function throttle(fn,time){
573
- if (null === timer){
574
- timer = setTimeout(function(){
868
+ function debouce(fn,time) {
869
+ if (null === timer) {
870
+ timer = setTimeout(function() {
575
871
  timer = null;
576
872
  fn();
577
873
  }, time);
578
874
  }
579
875
  }
580
876
 
581
- function winResize(){
582
- throttle(function(){
583
- for (var iframeId in settings){
584
- if('parent' === settings[iframeId].resizeFrom){
585
- trigger('Window resize','resize',document.getElementById(iframeId),iframeId);
877
+ /* istanbul ignore next */ //Not testable in PhantomJS
878
+ function fixHiddenIFrames() {
879
+ function checkIFrames() {
880
+ function checkIFrame(settingId) {
881
+ function chkDimension(dimension) {
882
+ return '0px' === (settings[settingId] && settings[settingId].iframe.style[dimension]);
883
+ }
884
+
885
+ function isVisible(el) {
886
+ return (null !== el.offsetParent);
887
+ }
888
+
889
+ if (settings[settingId] && isVisible(settings[settingId].iframe) && (chkDimension('height') || chkDimension('width'))) {
890
+ trigger('Visibility change', 'resize', settings[settingId].iframe, settingId);
586
891
  }
587
892
  }
588
- },66);
893
+
894
+ for (var settingId in settings) {
895
+ checkIFrame(settingId);
896
+ }
897
+ }
898
+
899
+ function mutationObserved(mutations) {
900
+ log('window','Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type);
901
+ debouce(checkIFrames,16);
902
+ }
903
+
904
+ function createMutationObserver() {
905
+ var
906
+ target = document.querySelector('body'),
907
+
908
+ config = {
909
+ attributes : true,
910
+ attributeOldValue : false,
911
+ characterData : true,
912
+ characterDataOldValue : false,
913
+ childList : true,
914
+ subtree : true
915
+ },
916
+
917
+ observer = new MutationObserver(mutationObserved);
918
+
919
+ observer.observe(target, config);
920
+ }
921
+
922
+ var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
923
+
924
+ if (MutationObserver) createMutationObserver();
589
925
  }
590
926
 
591
- function factory(){
592
927
 
593
- setupRequestAnimationFrame();
928
+ function resizeIFrames(event) {
929
+ function resize() {
930
+ sendTriggerMsg('Window '+event,'resize');
931
+ }
932
+
933
+ log('window','Trigger event: '+event);
934
+ debouce(resize,16);
935
+ }
936
+
937
+ /* istanbul ignore next */ //Not testable in PhantomJS
938
+ function tabVisible() {
939
+ function resize() {
940
+ sendTriggerMsg('Tab Visable','resize');
941
+ }
942
+
943
+ if('hidden' !== document.visibilityState) {
944
+ log('document','Trigger event: Visiblity change');
945
+ debouce(resize,16);
946
+ }
947
+ }
948
+
949
+ function sendTriggerMsg(eventName,event) {
950
+ function isIFrameResizeEnabled(iframeId) {
951
+ return settings[iframeId] &&
952
+ 'parent' === settings[iframeId].resizeFrom &&
953
+ settings[iframeId].autoResize &&
954
+ !settings[iframeId].firstRun;
955
+ }
956
+
957
+ for (var iframeId in settings) {
958
+ if(isIFrameResizeEnabled(iframeId)) {
959
+ trigger(eventName, event, document.getElementById(iframeId), iframeId);
960
+ }
961
+ }
962
+ }
963
+
964
+ function setupEventListeners() {
594
965
  addEventListener(window,'message',iFrameListener);
595
- addEventListener(window,'resize', winResize);
596
966
 
597
- function init(element, options){
598
- if(!element.tagName) {
599
- throw new TypeError('Object is not a valid DOM element');
600
- } else if ('IFRAME' !== element.tagName.toUpperCase()) {
601
- throw new TypeError('Expected <IFRAME> tag, found <'+element.tagName+'>.');
602
- } else {
603
- setupIFrame.call(element, options);
967
+ addEventListener(window,'resize', function() {resizeIFrames('resize');});
968
+
969
+ addEventListener(document,'visibilitychange',tabVisible);
970
+ addEventListener(document,'-webkit-visibilitychange',tabVisible); //Andriod 4.4
971
+ addEventListener(window,'focusin',function() {resizeIFrames('focus');}); //IE8-9
972
+ addEventListener(window,'focus',function() {resizeIFrames('focus');});
973
+ }
974
+
975
+
976
+ function factory() {
977
+ function init(options,element) {
978
+ function chkType() {
979
+ if(!element.tagName) {
980
+ throw new TypeError('Object is not a valid DOM element');
981
+ } else if ('IFRAME' !== element.tagName.toUpperCase()) {
982
+ throw new TypeError('Expected <IFRAME> tag, found <'+element.tagName+'>');
983
+ }
984
+ }
985
+
986
+ if(element) {
987
+ chkType();
988
+ setupIFrame(element, options);
989
+ iFrames.push(element);
604
990
  }
605
991
  }
606
992
 
607
- return function iFrameResizeF(options,target){
608
- switch (typeof(target)){
609
- case 'undefined':
610
- case 'string':
611
- Array.prototype.forEach.call( document.querySelectorAll( target || 'iframe' ), function (element) {
612
- init(element, options);
613
- });
614
- break;
615
- case 'object':
616
- init(target, options);
617
- break;
618
- default:
619
- throw new TypeError('Unexpected data type ('+typeof(target)+').');
993
+ function warnDeprecatedOptions(options) {
994
+ if (options && options.enablePublicMethods) {
995
+ warn('enablePublicMethods option has been removed, public methods are now always available in the iFrame');
996
+ }
997
+ }
998
+
999
+ var iFrames;
1000
+
1001
+ setupRequestAnimationFrame();
1002
+ setupEventListeners();
1003
+
1004
+ return function iFrameResizeF(options,target) {
1005
+ iFrames = []; //Only return iFrames past in on this call
1006
+
1007
+ warnDeprecatedOptions(options);
1008
+
1009
+ switch (typeof(target)) {
1010
+ case 'undefined':
1011
+ case 'string':
1012
+ Array.prototype.forEach.call(
1013
+ document.querySelectorAll( target || 'iframe' ),
1014
+ init.bind(undefined, options)
1015
+ );
1016
+ break;
1017
+ case 'object':
1018
+ init(options,target);
1019
+ break;
1020
+ default:
1021
+ throw new TypeError('Unexpected data type ('+typeof(target)+')');
620
1022
  }
1023
+
1024
+ return iFrames;
621
1025
  };
622
1026
  }
623
1027
 
624
- function createJQueryPublicMethod($){
625
- $.fn.iFrameResize = function $iFrameResizeF(options) {
626
- return this.filter('iframe').each(function (index, element) {
627
- setupIFrame.call(element, options);
628
- }).end();
629
- };
1028
+ function createJQueryPublicMethod($) {
1029
+ if (!$.fn) {
1030
+ info('','Unable to bind to jQuery, it is not fully loaded.');
1031
+ } else if (!$.fn.iFrameResize) {
1032
+ $.fn.iFrameResize = function $iFrameResizeF(options) {
1033
+ function init(index, element) {
1034
+ setupIFrame(element, options);
1035
+ }
1036
+
1037
+ return this.filter('iframe').each(init).end();
1038
+ };
1039
+ }
630
1040
  }
631
1041
 
632
- if (window.jQuery) { createJQueryPublicMethod(jQuery); }
1042
+ if (window.jQuery) { createJQueryPublicMethod(window.jQuery); }
633
1043
 
634
1044
  if (typeof define === 'function' && define.amd) {
635
1045
  define([],factory);
@@ -639,4 +1049,4 @@
639
1049
  window.iFrameResize = window.iFrameResize || factory();
640
1050
  }
641
1051
 
642
- })();
1052
+ })();